1

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

var backendDoc:NotesDocument = null;

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

在将文档模式从读取更改为编辑后,我在编辑按钮中为其分配了一个文档对象:

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

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

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

4

2 回答 2

5

您的代码有两个问题:

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

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

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

于 2012-12-28T02:04:23.890 回答
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/

于 2012-12-27T18:54:42.317 回答