SSJS全局变量似乎不起作用

时间:2012-12-27 18:23:42

标签: xpages xpages-ssjs xpages-extlib

我在ssjs库中声明并使用了一个全局变量,如下所示:

var backendDoc:NotesDocument = null;

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

在将docuemnt模式从read更改为edit后,我在Edit按钮中为其指定了一个文档对象:

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

上面函数中的代码返回错误NotesDocument.getItemValueString(“string”))null。显然,backendDoc为null。

如何在ssjs库中分配值和使用全局变量?提前致谢

2 个答案:

答案 0 :(得分:5)

您的代码有两个问题:

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

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

您可以将NoteId存储在作用域变量中,并每次检索NotesDocument或实际使用JSON结构来保留您感兴趣的值,并且只在实际需要时读取/写入(加载/保存事件)。希望这有帮助

答案 1 :(得分:1)

我认为你必须使用一个范围变量来存储文档的universalid。然后,可以在任何脚本中使用它来初始化后端文档。

从ssjs可以使用put方法和get方法设置范围变量来读取变量。在会话范围中设置和读取范围变量的示例:

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

要了解有关范围变量的更多信息,请观看此内容 http://notesin9.com/index.php/2009/11/07/episode-4-intro-to-scoped-variables/