ANS-0506 · DéVELOPPEMENT SUITESCRIPT
Comment résoudre les erreurs nlapiYieldScript dans les scripts planifiés de NetSuite
Comprenez pourquoi la fonction nlapiYieldScript de SuiteScript 1.0 peut renvoyer une erreur inattendue lors du traitement des résultats de recherche, et découvrez la marche à suivre appropriée.
Solution courte
La fonction nlapiYieldScript de SuiteScript 1.0 ne prend pas en charge les objets nlobjSearchResultSet. Pour résoudre l'erreur « doit être appelé depuis un script planifié », assurez-vous que votre script utilise nlapiSearchRecord et traite les résultats à l'aide d'une boucle FOR standard au lieu de nlapiCreateSearch().runSearch() lorsqu'un yield est nécessaire.
Scénario
Lors du développement d’un script planifié SuiteScript 1.0 traitant un volume important de données, les développeurs peuvent rencontrer une erreur indiquant « nlapiYieldScript doit être appelé depuis un script planifié », même lorsque la fonction est correctement invoquée au sein d’un script planifié. Cette erreur trompeuse survient généralement lorsque l’on tente d’utiliser nlapiYieldScript avec des types d’objets non pris en charge.
Solution
L'erreur « nlapiYieldScript doit être appelé à partir d'un script planifié » dans SuiteScript 1.0 est souvent trompeuse. La cause réelle réside généralement dans l'utilisation d'un type d'objet non pris en charge avec la fonction nlapiYieldScript.
Pour SuiteScript 1.0, nlapiYieldScript prend en charge les types d’objets suivants :
nlobjConfiguration, nlobjContext, nlobjFile, nlobjRecord, nlobjSubrecord, nlobjSearchColumn, nlobjSearchFilter, nlobjSearchResult, ainsi que tous les objets de bibliothèques XML tierces. Tous les autres types d’objets ne sont pas pris en charge.
Plus précisément, nlapiYieldScript dans SuiteScript 1.0 ne prend pas en charge les objets nlobjSearchResultSet, qui sont renvoyés par nlapiCreateSearch().runSearch().
Pour résoudre ce problème dans SuiteScript 1.0, les développeurs doivent modifier leur script afin d’utiliser nlapiSearchRecord à la place de nlapiCreateSearch().runSearch(). La fonction nlapiSearchRecord renvoie un tableau d’objets nlobjSearchResult, qui sont compatibles avec nlapiYieldScript. Les résultats doivent ensuite être parcourus à l’aide d’une boucle FOR standard.
Remarque importante concernant les versions de SuiteScript :
La fonction nlapiYieldScript fait partie de SuiteScript 1.0. Dans le développement NetSuite moderne, SuiteScript 2.x est la plateforme recommandée. SuiteScript 2.x ne dispose pas d’équivalent direct pour nlapiYieldScript ou nlapiSetRecoveryPoint. Pour les scripts de longue durée sous SuiteScript 2.x, la fonctionnalité de « yielding » est généralement gérée de la manière suivante :
En utilisant le type de script Map/Reduce, qui intègre automatiquement le « yielding ».
En gérant manuellement l’état du script et en le replanifiant à l’aide du module
N/taskpour les autres types de scripts.
Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
