ANS-1402 · DéVELOPPEMENT SUITESCRIPT
Résolution des erreurs de date « NaN/NaN/NaN » dans les scripts côté serveur de NetSuite
Comprenez pourquoi le constructeur natif de l'objet Date en JavaScript peut générer des erreurs « NaN/NaN/NaN » lors de l'analyse de certains formats de chaînes de date dans les SuiteScripts côté serveur de NetSuite, et découvrez les bonnes pratiques pour une gestion fiable des dates.
Solution courte
Le constructeur natif de l'objet Date de JavaScript peut ne pas parvenir à analyser certains formats de chaînes de date lorsqu'il est exécuté dans le moteur JavaScript côté serveur de NetSuite, ce qui entraîne des erreurs « NaN/NaN/NaN ». Pour résoudre ce problème, vous pouvez soit pré-traiter la chaîne de date afin de la mettre au format compatible, soit, pour un développement SuiteScript 2.x robuste et moderne, utiliser la fonction `parse()` du module `N/format` afin d'assurer une conversion fiable des chaînes de date.
Scénario
Un script NetSuite tente de récupérer une date à partir d’un enregistrement personnalisé, dans lequel la date est stockée sous forme de chaîne de caractères (par exemple, « Wed Mar 25 2015 15:16:58 GMT-0400 UTC »). Le script tente ensuite d’utiliser cette chaîne de caractères pour initialiser un objet Date JavaScript, dans le but de le définir comme date de transaction pour les nouvelles factures. Bien que cette approche puisse fonctionner correctement dans les scripts côté client, son exécution côté serveur entraîne une erreur, les journaux indiquant une tentative de définition de la date de transaction comme « NaN/NaN/NaN ». Ce problème survient même lorsque l’on tente de convertir l’objet Date en chaîne de caractères à l’aide de fonctions telles que nlapiDateToString (une API SuiteScript 1.0) avant de définir le champ. Le problème principal réside dans l’incapacité du constructeur de l’objet Date à analyser ce format de chaîne spécifique côté serveur.
Solution
L'erreur « NaN/NaN/NaN » qui survient lorsque vous tentez de définir une date de transaction dans un script côté serveur NetSuite indique que le constructeur natif de l'objet Date de JavaScript (new Date(dateString)) n'est pas en mesure d'analyser correctement le format de chaîne de date fourni. Cette divergence entre le comportement côté client et côté serveur est due à des différences dans la manière dont le moteur JavaScript traite certains formats de chaînes de date dans l’environnement serveur NetSuite. La ligne de code problématique est :
javascript
var date1 new Date('Wed Mar 25 2015 15:16:58 GMT-0400 UTC');. Une approche pour résoudre ce problème, telle qu’identifiée lors de développements antérieurs en SuiteScript, consiste à prétraiter la chaîne de date. Cela consiste généralement à « supprimer certains caractères superflus » de la chaîne de date d’origine afin de la transformer en un format que le constructeur natif de l’objet Date peut analyser de manière fiable côté serveur. La manipulation exacte de la chaîne requise dépend du format spécifique de la chaîne de date d’entrée.
Pour un analyse et un formatage robustes des chaînes de date dans la version moderne de SuiteScript 2.x, la meilleure pratique recommandée consiste à utiliser le module N/format. Ce module fournit des fonctions fiables pour convertir des chaînes en objets Date et inversement, en gérant de manière cohérente divers formats de date et d’heure dans tous les environnements NetSuite. Bien que la fonction N/format.parse() soit très efficace pour les formats de date NetSuite standard (par exemple, format.Type.DATE, format.Type.DATETIME), pour les chaînes de date hautement personnalisées ou complexes telles que «Mercredi 25 mars 2015 15:16:58 GMT-0400 UTC », vous devrez peut-être tout de même pré-traiter la chaîne pour la mettre dans un format plus standard avant d’utiliser format.parse(), ou déterminer si la solution de contournement consistant à manipuler la chaîne d’origine pour l’objet Date natif est plus adaptée à votre chaîne personnalisée spécifique.
Pour convertir une chaîne de date en objet Date, puis la reconvertir en chaîne formatée à l’aide de N/format :
Chargez le module N/format dans votre script SuiteScript 2.x.
Utilisez format.parse() pour convertir la chaîne en objet Date.
Utilisez format.format() pour convertir l’objet Date en une chaîne au format NetSuite souhaité.
Exemple d’utilisation de N/format pour la gestion des dates :
javascript
/**
* @NApiVersion 2.x
* @NModuleScope SameAccount
*/
define(['N/format'], function(format) {
function handleDateConversion() {
// Example: A date string in a common NetSuite format
var standardDateString = '3/25/2015';
//
1. Parse the string into a Date object
var dateObject = format.parse({
value: standardDateString,
type: format.Type.DATE
});
// dateObject is now a native JavaScript Date object (e.g., Wed Mar 25 2015 00:00:00 GMT-0400 (EDT))
//
2. Format the Date object back into a string for a NetSuite field
var formattedStringForField = format.format({
value: dateObject,
type: format.Type.DATE
});
// formattedStringForField is now '3/25/2015' (or locale equivalent)
return formattedStringForField;
}
return {
handleDateConversion: handleDateConversion
};
});Support expert NetSuite
Besoin d’aide pour cet enjeu NetSuite ?
Accompagnement-conseil et configuration pour Développement SuiteScript
