2012-12-27 4 views
1

je l'avais déclaré et utilisé une variable globale dans SSJS bibliothèque comme ci-dessous:variable globale SSJS ne semble pas travailler

var backendDoc:NotesDocument = null; 

function savedata() { 
    print (backendDoc.getItemValueString("fieldname")); // crash here 
} 

J'affecté un objet de document dans le bouton Modifier juste après avoir changé le mode docuemnt de lire à modifier :

backendDoc = document1.getDocument(); // récupère le document backend de la source de données appelée document1

Le code dans la fonction ci-dessus renvoie une erreur NotesDocument.getItemValueString ("string")) null. Apparemment, le backendDoc est nul.

Des idées pour assigner une valeur et utiliser une variable globale dans la bibliothèque ssjs? Merci d'avance

Répondre

1

Je pense que vous devez utiliser une variable de portée dans laquelle vous stockez l'universalid du document. Cela peut ensuite être utilisé dans n'importe quel script pour initialiser le document principal. A partir d'un ssjs, vous pouvez définir une variable étendue à l'aide de la méthode put et de la méthode get pour lire la variable. Exemple pour définir et lire une variable scope portée de session:

sessionScope.put(“myvar“,“myvalue“) 
sessionScope.get(“myvar“) 

Pour en savoir plus sur les variables scope regarder cette http://notesin9.com/index.php/2009/11/07/episode-4-intro-to-scoped-variables/

+0

J'ai essayé d'utiliser sessionScope.backendDoc = document1.getDocument(); –

+0

Merci Michael. J'ai essayé d'utiliser sessionScope.backendDoc = document1.getDocument() au début. Ensuite, essayez d'accéder à sessionScope.backendDoc.getItemValueString ('fieldname') mais il retourne toujours null. Votre suggestion de stocker UNID dans la variable portée et l'utiliser pour récupérer le document backend fonctionne à coup sûr sans aucun doute. Je ne veux tout simplement pas récupérer le document de cette façon. En tout cas, un grand merci –

+0

Ce que j'ai oublié de mentionner, c'est que vous ne pouvez pas stocker des objets domino dans l'un de ces scoped ... Je pense qu'il est également mentionné dans les vidéos notesin9.com. –

5

Il y a 2 problèmes avec votre code:

  • comme Michael souligné: vous devez utiliser une variable portée. Les variables globales dans les bibliothèques de scripts sont en fait des applications globales (pensez applicationScope) et peuvent être déchargées à tout moment si la mémoire est trop serrée (leur comportement dépend de la version de XPages)

  • Vous ne pouvez pas utiliser NotesObjets ici. Entre les appels, l'objet C qui soutient l'objet JS est libéré et votre objet devient invalide.

Vous pouvez stocker la NoteID dans une variable scope et récupérer le NotesDocument chaque fois ou utiliser en fait une structure JSON pour conserver les valeurs qui vous intéressent et seulement en lecture/écriture alors qu'en réalité nécessaire (charge/événement sauver). Espérons que cela aide

+0

Nous vous remercions de vos précieuses informations. –

+0

ne hésitez pas à accepter la réponse – stwissel

Questions connexes