Le lanceur, le démarrage et la barre d'outils
Ce que le composant installe dans votre projet, et comment activer ce qu'il laisse désactivé : le lanceur, les lignes ajoutées à vos méthodes base, et la barre d'outils 4D.
Le lanceur
La méthode _BSPK_LAUNCH ouvre le lanceur du composant (elle s'appelait BSPK_LAUNCH avant la version 21). Ses boutons :
| Bouton | Ouvre |
|---|---|
| Ouvrir l'ATL | L'explorateur de données ATL |
| Exécuter méthode | Le dialogue d'exécution d'une méthode, en local ou sur le serveur |
| Exécuter code | Le dialogue de saisie et d'exécution de code 4D |
| Ouvrir l'éditeur d'objet JSON | L'éditeur d'objets JSON |
| BWEB | Le panneau d'installation : licence, puis Démarrer l'installation |
| Tester BWEB | Le navigateur sur https://<votre domaine>/bweb |
Ce que fait l'installation
L'assistant refuse de s'exécuter si le projet est compilé ou s'il n'est pas ouvert en local. Il enchaîne ensuite :
- L'environnement : Node.js et npm (installés s'ils manquent), les bibliothèques, la compilation des feuilles de style, la configuration du serveur web et les certificats SSL.
- Les fichiers et méthodes copiés dans le projet, et les lignes ajoutées aux méthodes base (voir plus bas), puis les tables
BSPK_*. 4D redémarre. - Les relations et les index. 4D redémarre une seconde fois.
- La fin : l'enregistrement de version du composant, la tâche planifiée qui tient à jour l'instantané d'échange du contenu (sur un poste de développement), l'archivage de l'historique, l'utilisateur
DEV, le premier domaine et le point de départ de la réconciliation du contenu.
Pour survivre à ses propres redémarrages, l'installation écrit un fichier Resources/INSTALL dans votre projet. Tant qu'il existe, 4D rouvre le lanceur au démarrage pour reprendre l'installation, et la barre d'outils ne s'ouvre pas. Il est supprimé à la dernière étape.
Ce qui est copié dans votre projet
Seulement ce qui manque : un fichier qui existe déjà sous le même nom n'est jamais écrasé.
- Les fichiers de configuration, dans
Resources/json:APP_PARAMETERS,DEV_PARAMETERS,PREPROD_PARAMETERS,WEB_PARAMETERS,Modul_menus(les menus de la barre d'outils) etMODULE_GENE. - Les méthodes
BSPH_*: les points d'entrée par lesquels le composant appelle votre code (BSPH_WEB_ON_CONNECTION,BSPH_VERSION_UPDATES,BSPH_EXECUTE_METHOD…). Ne les supprimez pas. - La classe
BSPKFormController.
Une installation neuve démarre en mode DEV : le modèle
DEV_PARAMETERSfait partie des fichiers copiés. Sur un serveur de production, supprimezDEV_PARAMETERSetPREPROD_PARAMETERS. Voir Les fichiers de paramètres.
Chaque mise à jour du composant refait cette copie : une nouvelle version ajoute les méthodes et les modèles qu'elle introduit, sans toucher aux vôtres.
Les lignes ajoutées à vos méthodes base
Chaque ligne n'est ajoutée que si son texte n'est pas déjà présent dans la méthode.
Sur ouverture et Sur démarrage serveur (On Startup, On Server Startup)
//BSPK_CONFIRM_STARTUP_MODE // en commentaire
BSPK_STARTUP // active
//BSPK_LOGIN_ON_STARTUP // en commentaire
//cs.bspkComponent.ToolBar_FC.new().start() // en commentaire
Use (Storage) // bloc actif
var $vo_storage : Object
$vo_storage:=BSPK_Storage
Storage.vo_Param:=OB Copy($vo_storage.vo_Param; ck shared)
Storage.vo_SharedStorage:=OB Copy($vo_storage.vo_SharedStorage; ck shared)
End use
| Ligne | Rôle |
|---|---|
BSPK_CONFIRM_STARTUP_MODE | Affiche au démarrage « 4D va démarrer en mode X, voulez-vous continuer ? », le mode étant déduit des fichiers de paramètres présents. Accepté automatiquement au bout de 60 secondes ; fermer la fenêtre quitte 4D. Utile sur un serveur qui héberge à la fois une copie de développement et une copie de production. |
BSPK_STARTUP | Le démarrage du composant : vérifie la présence d'APP_PARAMETERS, charge les paramètres, joue les mises à jour en attente, démarre le serveur web, le WebSocket et les tâches planifiées selon les paramètres. |
BSPK_LOGIN_ON_STARTUP | Affiche le formulaire de connexion 4D du composant. En mode DEV, la connexion se fait automatiquement avec l'utilisateur DEV (maintenez Maj pour forcer le formulaire). Sur 4D Server, aucun formulaire. |
ToolBar_FC…start() | La barre d'outils, ci-dessous. |
Bloc Use (Storage) | Votre projet a son propre Storage, distinct de celui du composant. Ce bloc y recopie vo_Param (les paramètres) et vo_SharedStorage. C'est une copie au démarrage : une valeur modifiée ensuite côté composant n'est pas répercutée. |
Sur connexion Web (On Web Connection)
Si la méthode ne contient pas déjà l'appel au composant, son code existant est mis en commentaire (
/* … */), puis l'appel àBSPK_WEB_ON_CONNECTIONest ajouté. Votre code web passe ensuite par la méthodeBSPH_WEB_ON_CONNECTION.
#DECLARE($vt_1 : Text; $vt_2 : Text; $vt_3 : Text; $vt_4 : Text; $vt_5 : Text; $vt_6 : Text)
BSPK_WEB_ON_CONNECTION($vt_1; {vo_Session: Session; vt_HTTP_Header: $vt_2; vt_Browser_IP: $vt_3; vt_Server_IP: $vt_4; vt_User_Name: $vt_5; vt_Password: $vt_6})
Sur fermeture et Sur arrêt serveur (On Exit, On Server Shutdown)
BSPK_QUIT : arrête Node.js et les tâches planifiées, puis quitte 4D.
La barre d'outils
L'activer
Retirez le // devant cs.bspkComponent.ToolBar_FC.new().start() dans Sur ouverture, après BSPK_STARTUP. C'est une fenêtre d'interface (type barre d'outils) : la ligne écrite dans Sur démarrage serveur n'a pas d'utilité sur un serveur sans écran. La connexion (BSPK_LOGIN_ON_STARTUP) n'est pas obligatoire, mais sans elle les droits et les préférences de l'utilisateur ne s'appliquent pas aux boutons.
La barre ne s'ouvre pas pendant une installation (fichier INSTALL présent), ni quand aucun bouton n'est à afficher : la barre d'outils standard de 4D reste alors en place.
D'où viennent les boutons
- Les boutons principaux, à gauche : la clé
ToolBardu fichierModul_menus. - Les boutons développeur, à droite : le fichier
ToolBarDevdu composant, affiché en mode DEV, quand le composant est ouvert seul, ou pour l'utilisateurDEV. En mode DEV, un motif en fond de fenêtre signale le mode.
Ces fichiers sont lus dans le composant et dans votre projet : quand les deux existent, leur fusion s'affiche, votre projet l'emportant.
Une entrée
| Clé | Rôle |
|---|---|
vt_Action | Ce que lance le clic (voir plus bas). Une entrée sans vt_Action ni vo_SubMenu est ignorée. |
vo_SubMenu | Un menu local à la place : des éléments {vt_Xliff, vt_Action, vt_Right}, ou "-" pour un séparateur. |
vt_Xliff, vt_HelpTip | Libellé et infobulle : une clé de traduction, ou un texte brut. |
vt_PictureName | Icône SVG, cherchée dans Resources/images/svg du projet, puis du composant. |
vt_MenuGroup | Un changement de groupe insère un séparateur. |
vt_Right | Le droit nécessaire pour voir le bouton. |
vt_VisibleWhen | Une condition d'affichage : notCompiled, compiled, dev, component, componentInterpreted, host, clientServer, standalone, ou une expression 4D. Une condition qui provoque une erreur affiche le bouton. Sans effet dans un sous-menu. |
visible, enable | visible:false masque le bouton mais garde sa place. |
vl_Width (45), vl_Height (50), vl_IconHeight | Dimensions. |
vo_ShortCut | {shortcutKey, shortcutAccel, shortcutControl, shortcutShift, shortcutAlt} |
Ce que lance un clic
- Un sous-menu : le menu s'affiche, puis l'action choisie est lancée.
- Une classe du composant de ce nom :
cs[vt_Action].new().start(). - Une méthode de ce nom, dans le composant ou dans votre projet : elle est exécutée.
- Sinon,
vt_Actionest exécuté comme une formule, dans le contexte de votre projet en dernier recours.
Pour un bouton de votre projet, vt_Action est donc le nom d'une de vos méthodes, ou une formule comme cs.MonFormulaire_FC.new().start(). Le nom seul d'une de vos classes ne fonctionne pas : l'étape 2 cherche dans les classes du composant.
Ajouter vos boutons
Ajoutez vos entrées sous ToolBar dans le fichier Modul_menus de votre projet, avec l'éditeur d'objets JSON (le fichier est chiffré). La fusion ne peut pas retirer une entrée du composant : masquez-la avec visible:false ou une condition vt_VisibleWhen fausse. Placez vos icônes dans Resources/images/svg.
Masquer des groupes par utilisateur
Le champ objet preferences de l'utilisateur (BSPK_USER) peut porter vc_ToolBarVisible : [{"GroupName": "<vt_MenuGroup>", "vb_Show": false}] masque tout un groupe pour cet utilisateur. Aucun écran ne le renseigne : modifiez l'enregistrement.
Bon à savoir
- Une ligne de barre d'outils en commentaire peut réapparaître après une mise à jour du composant, à côté de celle que vous avez activée. Elle est sans effet : laissez-la en commentaire.
- Si tous les boutons ne sont masqués que par des conditions
vt_VisibleWhen, une fenêtre de barre d'outils vide peut s'ouvrir. - Désinstaller BWEB ne restaure pas Sur connexion Web : l'ancien code est toujours là, entre
/* … */.

