QueryNewDocument的工作原理

时间:2014-05-15 14:38:28

标签: xpages xpages-extlib xpages-ssjs

我尝试使用QueryNewDocumentEvent执行以下操作:

  1. 从存储序列号文档的同一数据库中获取视图。
  2. 获取最新文档
  3. 获取序列号并将其增加1
  4. 创建新的序列号文档并将增加的序列号存储在其中并保存。
  5. 将新序列号分配给当前文档中的字段。
  6. 代码可以执行第4步并在步骤5中提供异常。如果我从postopen事件运行此代码,它运行时没有任何错误但什么都不做。这是QueryNewDocument的代码。

    var v:NotesView = database.getView('lastnumber');
    var doc:NotesDocument = v.getLastDocument();
    var dc1:NotesDocument = database.createDocument();
    var tmp=doc.getItemValue('LastNumber')[0]+1;
    dc1.replaceItemValue('Form','LastNumber');
    dc1.replaceItemValue('LastNumber',tmp);
    dc1.save(true,false,true)
    currentDocument.setValue('ProjectNumber',"155,"+@Text(tmp));
    currentDocument.setValue('LastNumber',@text(tmp)); 
    

    我尝试用document1替换currentDocument并给出相同的异常。逻辑上有什么不对吗?

1 个答案:

答案 0 :(得分:2)

我可以看到两件可能出错的事情:

首先,根据您使用的确切代码是否正确,您的第二个“@Text”调用将被写为“@text”并且将失败,因为JavaScript是一种区分大小写的语言。

此外,我相信currentDocument将不会在queryNewDocument事件中可用(除非,我想,之前已经定义了另一个文档数据源,在这种情况下它可能会引用那个)。 “postNewDocument”事件可能正是您要查找的内容:当您创建新文档时会运行该事件,但在“currentDocument”变量设置为该文档后会运行。

另一方面,“postOpenDocument”可能仅在操作专门用于打开现有文档而不是创建新文档时运行(它不是与表单上的PostOpen直接类似)。