【问题标题】:SSJS global variable seems not workingSSJS 全局变量似乎不起作用
【发布时间】:2012-12-28 10:04:23
【问题描述】:

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

var backendDoc:NotesDocument = null;

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

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

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

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

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

【问题讨论】:

    标签: xpages xpages-ssjs xpages-extlib


    【解决方案1】:

    您的代码有 2 个问题:

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

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

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

    【讨论】:

      【解决方案2】:

      我认为您必须使用一个作用域变量来存储文档的通用 ID。然后可以在任何脚本中使用它来初始化后端文档。

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

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

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

      【讨论】:

      • 我尝试使用 sessionScope.backendDoc = document1.getDocument();
      • 谢谢迈克尔。一开始我确实尝试使用 sessionScope.backendDoc = document1.getDocument() 。然后尝试访问它 sessionScope.backendDoc.getItemValueString('fieldname') 但它总是返回 null。您将 UNID 存储在范围变量中并使用它来检索后端文档的建议无疑是有效的。我只是不想通过这种方式检索文档。无论如何,非常感谢
      • 我忘了说的是,你不能在这些范围内存储多米诺对象......我认为notesin9.com视频中也提到了它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多