Dépannage
BWEB échoue en silence bien plus souvent qu'il ne lève une erreur. Cette page est classée selon ce que le symptôme signifie réellement, parce que la première intuition est généralement fausse.
Tout le site renvoie 404, sur toutes les URL
Y compris /_claude/ping, et la page affichée est la page générique « Wakanda ».
BSPK_WEB_ON_CONNECTION ne compile pas. Ce n'est ni le routage, ni le domaine, ni votre page. bspk.log reste vide : seule la fenêtre du compilateur 4D nomme l'erreur. Comparez l'équilibre des If / End if avec la version de git HEAD.
Une page entière est blanche ou cassée
Un seul bloc a fait tomber le rendu. Le toast de développement indique le bloc, son uuid et l'erreur. Si le message parle d'une collection ou d'un objet attendu, soupçonnez une valeur nulle là où {} est requis, ou un cube CSS plat hérité de la V20.
Un bloc s'affiche vide, sans erreur
Dans l'ordre :
- Le
#4DCODEa levé une erreur. Une erreur dans le code 4D rend le bloc vide sans message. Placez une trace en tête du code. - Une propriété obligatoire manque : le bloc est incomplet, pas cassé.
- Pour une listbox :
vt_TableNamemanque. - Pour un select ou un groupe de cases à cocher : la fonction de remplissage ne respecte pas la signature
WF, ouBSPK_REFRESH_STORAGEn'a pas été lancé.
Un bouton ne fait rien
- Le contrôle de sécurité a refusé le POST. Cherchez une réponse JSON avec un code d'erreur sur
/bweb/call-action. Votre fonction n'a jamais été appelée. - La fonction n'est pas chargée : l'appel d'une fonction non chargée reste bloqué, il ne lève pas d'erreur.
- Le nom n'est pas en camelCase (il est converti en camelCase avant la recherche).
- La classe n'a pas de
extends, et le panneau ne l'a donc jamais proposée correctement.
Voir réellement la réponse
bspk.js utilise XHR, pas fetch : une interception de fetch ne capture rien. Dans la console :
const o = XMLHttpRequest.prototype.open, s = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.open = function(m,u,...r){ this.__u=u; return o.call(this,m,u,...r); };
XMLHttpRequest.prototype.send = function(b){
if (String(this.__u).includes('call-action'))
this.addEventListener('load', () => console.log(this.responseText.slice(0,600)));
return s.call(this,b);
};
Une fonction absente de la liste blanche du dispatch répond HTTP 200 avec une réponse vide : {"vc_Action":[],"vb_Continue":true,…}. Aucune erreur, aucun toast, rien d'écrit. La fonction n'a jamais été exécutée, donc même un Try/Catch renvoyant Last errors reste muet.
Piège : cette réponse vide est la signature d'un
BSPK_REFRESH_STORAGEoublié. Elle envoie les développeurs déboguer la logique métier pendant des heures.
Trace côté serveur : BSPK_LOG(<texte>) écrit dans bspk.log, dans le dossier Data du projet. C'est la seule trace utilisable, car le débogueur est inaccessible depuis une requête pilotée par le web. Le chemin du dossier de données courant est enregistré dans <projet>/userPreferences.<USERNAME>/preferences.4DPreferences ; lisez <USERNAME> dans l'environnement, ne l'écrivez jamais en dur.
Une sauvegarde annonce un succès et n'écrit rien
- Le champ n'a pas de
vt_FieldName: il est retiré par la liste blanche. - Le champ est en dehors du conteneur désigné par
vt_SendAllObjectsOfBlocName. vt_SendAllObjectsOfBlocNamecontient un uuid ou un nom de bloc au lieu du nom de l'autre paramètre :vt_FieldValuearrive alors sous la forme{}.- Le champ n'a pas de
onChange: la sauvegarde générique n'écrit que le champ déclencheur.
Le diagnostic est toujours le même geste : lisez le corps de la requête /bweb/call-action dans l'onglet réseau du navigateur, et comparez-le à ce que 4D a reçu.
Un style ne s'applique pas
- Il manque un
*Unit: 11 propriétés ne génèrent rien sans lui. - La classe n'a jamais été compilée dans
output.css, parce que la chaîne qui la contient ne commence pas par un préfixe Tailwind (voir Le style : cube CSS et Tailwind). - La règle perd sur la spécificité dans le shadow root du panneau.
Ma modification de code n'a aucun effet
- Vous avez modifié du code du composant et seulement rechargé (le rechargement ne touche jamais le composant).
- Vous avez modifié un gabarit sans lancer
BSPK_REFRESH_STORAGE. RELOAD PROJECTs'est exécuté sans environnement Design : il n'a rien fait, en silence.- Le résultat est en cache dans la session : une formule de colonne ou un affichage conditionnel modifiés continuent d'afficher l'ancienne valeur jusqu'à ce que vous vous déconnectiez puis reconnectiez. F5 ne suffit pas. Ce cas fait longtemps passer un code correct pour un code cassé.
Concluez toujours sur une trace que seul le nouveau code peut produire.
Tout a cassé en même temps, sans rapport
Une classe ne compile pas. Une erreur de syntaxe dans une seule fonction rend toute la classe inchargeable : toutes ses fonctions disparaissent d'un coup. Soupçonnez cela avant de soupçonner votre modification.
Voir aussi
- Le langage 4D et 4D dans BWEB — les pièges sous-jacents
- Recharger ou redémarrer — ce qui recharge quoi

