ANS-0778 · DéVELOPPEMENT SUITESCRIPT
Comment mettre en œuvre des menus déroulants dynamiques dépendants dans NetSuite à l’aide de scripts côté client
Dans les cas complexes où l'exploitation native des champs NetSuite s'avère insuffisante, l'utilisation de scripts côté client permet de filtrer dynamiquement les options des menus déroulants en exploitant des champs d'interface utilisateur temporaires.
Solution courte
Pour créer des menus déroulants dynamiques et dépendants dans NetSuite destinés à des cas d’utilisation complexes, l’utilisation de scripts côté client est nécessaire. Cela implique d’ajouter un champ d’interface utilisateur temporaire au formulaire, de remplir ses options de manière dynamique, puis de transférer la valeur sélectionnée vers un champ stocké de manière permanente lors de l’enregistrement de l’enregistrement et de la recharger lors de l’affichage ou de la modification de celui-ci.
Scénario
Les utilisateurs de NetSuite ont souvent besoin d’un filtrage dynamique des options des menus déroulants en fonction des sélections effectuées dans d’autres champs. Bien que NetSuite propose des fonctionnalités natives de recherche et de filtrage pour de nombreux scénarios courants impliquant des menus déroulants dépendants, certaines exigences complexes peuvent nécessiter une approche de script plus personnalisée afin d’obtenir le comportement dynamique souhaité.
Solution
Bien que les fonctionnalités natives de « Sourcing & Filtering » de NetSuite sur les champs personnalisés de liste/enregistrement permettent, dans de nombreux cas d’utilisation courants, d’obtenir des menus déroulants dépendants sans recourir à des scripts, il existe des scénarios complexes où la configuration seule peut s’avérer insuffisante. La solution pour ces scénarios complexes consiste à utiliser des scripts côté client afin de filtrer les valeurs disponibles dans une liste déroulante. Il est important de noter que les scripts ne peuvent pas filtrer directement les options des champs NetSuite standard ou personnalisés qui stockent des valeurs. En revanche, les scripts peuvent uniquement ajouter ou supprimer des options dans des champs d’objets d’interface utilisateur temporaires, qui sont en lecture seule et ne stockent pas de valeurs. Par conséquent, outre le script qui filtre dynamiquement les options, des scripts complémentaires sont nécessaires pour gérer le flux de données : copier la valeur sélectionnée depuis le champ d’interface utilisateur temporaire vers un champ « réel » permanent lors de la soumission de l’enregistrement, et recharger la valeur du champ « réel » dans le champ d’interface utilisateur temporaire lorsque l’enregistrement est consulté ou modifié. Cette approche nécessite généralement une combinaison de scripts client, utilisant les fonctions de l’API SuiteScript 1.0 comme le montrent les exemples ci-dessous. Il est important de noter que SuiteScript 2.x constitue actuellement la meilleure pratique en matière de développement NetSuite, offrant une approche modulaire et orientée objet ; ses signatures de fonctions pour les points d’entrée des scripts (par exemple, beforeLoad, pageInit, fieldChanged, beforeSubmit) acceptent généralement un objet de contexte plutôt que des paramètres individuels. Les scripts nécessaires peuvent être résumés comme suit :
Un script beforeLoad pour ajouter le champ d’interface utilisateur temporaire à l’écran.
Un script pageInit pour initialiser les options dans la liste déroulante et copier la valeur du champ « réel » dans le champ d’interface utilisateur temporaire, le cas échéant.
Une logique côté client (par exemple, dans fieldChanged) pour gérer la modification dynamique des options dans le champ d’interface utilisateur temporaire.
Un script beforeSubmit pour copier la valeur du champ d’interface utilisateur temporaire dans le champ « réel » avant l’enregistrement de l’enregistrement.
Des exemples de scripts sont fournis ci-dessous à titre de référence.
Ajoutez le champ déroulant à la page :
javascript
function beforeLoad(type, form, request) {
//maybe check the type. Typically, we only need to do this for ‘edit’
form.addField('custpage_myfield','select','My dropdown');
}Lors de l’exécution de pageInit, vérifiez si une valeur est stockée dans le champ « réel » et définissez le champ d’interface utilisateur temporaire en conséquence :
javascript
function pageInit(type){
setDropdownValues(); //here we populate the possible options of the dropdown
if(nlapiGetFieldValue('myrealfield')!'' &&
nlapiGetFieldValue('myrealfield')!null){
nlapiSetFieldValue('custpage_myfield',
nlapiGetFieldValue('myrealfield'));
}
}Exemple de fonction qui définit les options possibles en fonction des résultats d’une recherche :
javascript
function setDropdownValues() {
var customer nlapiGetFieldValue(‘entity’);
var date nlapiGetFieldValue(‘trandate’);
var columns [];
columns.push(new nlobjSearchColumn(‘name’);
var filters [];
filters.push(new nlobjSearchFilter(‘custrecord_entity’,null,’is’,customer);
filters.push(new nlobjSearchFilter(‘custrecord_date’,null,’is’,date);
var results nlapiSearchRecord(‘custrecord_bobo’,null,columns, filters);
if(results!null){
nlapiRemoveSelectOption(‘custpage_myfield’);
for(var i0; i<results.length; i++){
nlapiInsertSelectOption(‘custpage_myfield’,results[i].getId(),results[i].getValue(‘name’),false);
}
}
}Exemple de code permettant de modifier les options de la liste déroulante en fonction des modifications apportées à d’autres champs :
javascript
function fieldChanged(machine, name){
if (name 'entity' || name 'trandate') {
setDropdownValues();
}
}Fonction permettant de copier la valeur du champ temporaire de l’interface utilisateur dans le champ « réel » avant la soumission :
javascript
function beforeSubmit(type){
if(type!'delete'){
nlapiSetFieldValue('myrealfield',
nlapiGetFieldValue('custpage_myfield'));
}
}Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
