2012-12-27 47 views
1

我宣布和使用如下SSJS库中的全局变量:SSJS全局变量似乎不工作

var backendDoc:NotesDocument = null; 

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

我分配了一个文档对象给它的编辑按钮刚刚从读改变docuemnt模式进行编辑后, :

backendDoc = document1.getDocument(); //从数据源获取后端文档document1

上述函数中的代码返回错误NotesDocument.getItemValueString(“string”))null。显然,后端Doc是空的。

任何想法如何分配值和在ssjs库中使用全局变量?在此先感谢

回答

1

我认为你必须使用一个scoped变量,其中存储该文档的universalid。这可以用于任何脚本来初始化后端文档。

从ssjs你可以使用put方法和get方法来设置一个scoped变量来读取变量。例如设置和读取会话范围范围变量:

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

要了解更多有关范围的变量看这个 http://notesin9.com/index.php/2009/11/07/episode-4-intro-to-scoped-variables/

+0

我试图使用sessionScope.backendDoc = document1.getDocument(); –

+0

谢谢迈克尔。我确实尝试首先使用sessionScope.backendDoc = document1.getDocument()。然后尝试访问它sessionScope.backendDoc.getItemValueString('fieldname'),但它总是返回null。您将UNID存储在范围变量中并将其用于检索后端文档的建议无疑是可行的。我只是不想通过这种方式来检索文档。无论如何,非常感谢 –

+0

我忘了提及的是,你不能在任何这些范围内存储多米诺骨牌对象...我认为它也在notesin9.com视频中提到。 –

5

有2个问题,你的代码:

  • 迈克尔指出:你应该使用一个范围变量。脚本库中的全局变量实际上是应用程序全局变量(请考虑applicationScope),并且如果内存变得紧张(行为取决于XPages版本),可能会随时卸载它。

  • 您不能在此处使用NotesObjects。在调用之间,支持JS对象的C对象被释放,并且对象变为无效。

您可以在NoteId存储在一个范围变量,每一次检索的NotesDocument或实际使用的JSON结构,让你有兴趣的值,仅读/写时实际需要(加载/保存事件)。希望这有助于

+0

感谢您提供有价值的信息。 –

+0

随时接受答案 – stwissel