ANS-0987 · DéVELOPPEMENT SUITESCRIPT
Comment mettre en place des boîtes de dialogue personnalisées « Oui/Non » lors de l’enregistrement d’enregistrements dans NetSuite
Découvrez comment gérer les interactions asynchrones avec les utilisateurs lors de l'enregistrement d'enregistrements dans NetSuite, en tirant parti des bonnes pratiques relatives aux modules de dialogue.
Solution courte
Pour implémenter des boîtes de dialogue personnalisées de type « Oui/Non » lors de l’enregistrement d’un enregistrement NetSuite, en particulier lors de l’utilisation de bibliothèques externes, une solution courante consiste à suspendre l’exécution du script en renvoyant la valeur « false » depuis la méthode `saveRecord`. Une variable globale suit l’interaction de l’utilisateur et, une fois la sélection effectuée, une action d’enregistrement programmatique est déclenchée. Pour le développement NetSuite moderne, pensez à utiliser le module N/ui/dialog afin de bénéficier d’interactions UI robustes.
Scénario
Les boîtes de dialogue « Confirmer » natives de NetSuite proposent les options « OK/Annuler », ce qui peut ne pas correspondre aux exigences spécifiques en matière d’expérience utilisateur pour les choix de type « Oui/Non ». Lorsque des boîtes de dialogue personnalisées sont introduites, en particulier au sein de la fonction `saveRecord`, la nature asynchrone de ces boîtes de dialogue peut entraîner l'enregistrement de l'enregistrement avant que l'utilisateur n'ait effectué son choix, ce qui peut entraîner un comportement indésirable.
Solution
La difficulté liée à la mise en œuvre de boîtes de dialogue personnalisées de type « Oui/Non » dans NetSuite, en particulier au sein de la fonction saveRecord, tient au fait que les bibliothèques de boîtes de dialogue externes ne suspendent pas systématiquement l’exécution du script. Bien que le module N/ui/dialog de NetSuite constitue l’approche recommandée pour les interactions d’interface utilisateur modernes, si une bibliothèque externe est utilisée, une solution de contournement spécifique permet de gérer les boîtes de dialogue asynchrones lors de l’enregistrement des enregistrements.Bien que l’importation directe de fichiers CSS externes dans une page NetSuite ne soit pas prise en charge nativement de la même manière que dans le développement web standard, le CSS peut être intégré dans des Suitelets ou des champs HTML personnalisés pour styliser les boîtes de dialogue personnalisées. Lorsque vous envisagez d’utiliser des bibliothèques JavaScript externes pour des boîtes de dialogue personnalisées, la compatibilité avec la version de jQuery de NetSuite peut varier et nécessite des tests approfondis.Pour gérer les boîtes de dialogue asynchrones lors de l’enregistrement d’un enregistrement à l’aide d’une bibliothèque externe, les étapes suivantes décrivent un modèle courant :
Initialisez une variable globale afin de déterminer si un utilisateur a interagi avec la boîte de dialogue personnalisée.
Au sein de la fonction
saveRecord, si la variable globale indique qu’aucune interaction n’a eu lieu auparavant, générez la boîte de dialogue personnalisée et renvoyez immédiatement la valeurfalse. Cette action interrompt temporairement le processus d’enregistrement de l’enregistrement, donnant ainsi l’impression à l’utilisateur que l’exécution est en pause.Une fois que l’utilisateur a effectué une sélection dans la boîte de dialogue personnalisée, mettez à jour la variable globale pour refléter cette interaction. Ensuite, déclenchez par programmation l’action d’enregistrement de NetSuite. Cela garantit que, lorsque la fonction
saveRecordest réexécutée, la boîte de dialogue n’est pas régénérée et que le processus d’enregistrement se poursuit normalement. Veuillez noter que la manipulation directe du DOM des boutons NetSuite standard à cette fin n’est pas prise en charge et peut entraîner des modifications incompatibles. Le code suivant illustre ce modèle à l’aide d’un exemple de bibliothèque externe :
javascriptvar notyClicked = false;function saveRecord_generatePopup(){ if (!notyClicked) { // generate noty popup generateNotyAlert(); return false; } // your normal code on save return true;}function generateNotyAlert(){ var n = noty({ text: 'Would you like to do something?', type: 'alert', dismissQueue: false, layout: 'topCenter', theme: 'defaultTheme', animation: { open: { height: 'toggle' }, close: { height: 'toggle' }, easing: 'swing', speed: 0 }, buttons: [{ addClass: 'btn btn-primary', text: 'Yes', onClick: function($noty){ $noty.close(); notyClicked = true; // Programmatically trigger NetSuite save action. // Direct DOM manipulation of standard NetSuite buttons is not supported. } }, { addClass: 'btn btn-danger', text: 'No', onClick: function($noty){ $noty.close(); notyClicked = true; // Programmatically trigger NetSuite save action. // Direct DOM manipulation of standard NetSuite buttons is not supported. } }] });}Pour intégrer une bibliothèque externe telle que celle présentée, joignez les fichiers nécessaires à l’enregistrement de script dans l’ordre indiqué :
jquery.noty.js- Fichier de mise en page (par exemple,
topCenter.js) - Fichier de thème (par exemple,
default.js, souvent appelédefaultTheme)
Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
