ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 获取NotesXSPDocument中的所有项目

2019-06-12 12:21:19  阅读:201  来源: 互联网

标签:javascript xpages xpages-ssjs


在我的Notes数据库中,我在保存文档时执行审核.在LotusScript中非常简单.我从服务器获取原始文档(oDoc),然后在我修改的文档(mDoc)中,我做了一个Forall循环,它获取每个项目的名称; mDoc.items中的forall项.从oDoc中获取相同的项目,使用新项目作为参数执行一个函数,该函数将运行一个case语句,该语句将查看它是否是我们关心的字段.如果是这样,我用“When”,“Who”,“What field”和“New Value”更新文档中的一组列表值.

我在服务器端脚本中这样做.在尝试这个时,我发现了一些有趣的东西;

currentDocument是NotesXSPDocument,包含刚刚更改的所有内容.

currentDocument.getDocument()包含更改前的值.它还返回一个NotesDocument,它包含我可以运行的“items”字段.

事实是,我在NotesXSPDocument中需要类似的东西.在迭代循环中有没有办法从那里获取所有项目的名称和值?

这是破碎的代码. (目前它正在浏览NotesDocument项目,但这些是旧的值.我宁愿走下XSP文档项目)

function FInvoice_beginAudit() {
  var original_doc:NotesDocument = currentDocument.getDocument();
  var oItem:NotesItem;

  var oItems:java.util.Vector = original_doc.getItems();
  var iterator = oItems.iterator();
  while (iterator.hasNext()) {
    var oItem:NotesItem = iterator.next();
    item = currentDocument.getItemValue(oItem.getName());
    if (oItem == undefined) {
      var MasterItem =  ScreenAudit(doc,item,True)
      if (MasterItem) { return true }
      } else {
      if (item.getValueString() != oItem.getValueString()) {
        var MasterItem =  ScreenAudit(doc,Item,True);
          if (MasterItem) { return true }
      }
    }
  }
}

解决方法:

您可以在提交后获得文档的两个版本 – 原始版本和changed/new values版本:

original:var original_doc:NotesDocument = currentDocument.getDocument();

已更改:var changed_doc:NotesDocument = currentDocument.getDocument(true);

这样您就可以比较更改项目.

但是,存在一个缺陷:在将“changed_doc”分配给currentDocument.getDocument(true)之后,“original_doc”也具有更改的值,因为两个变量都指向同一文档.这就是为什么我们必须首先将currentDocument.getDocument()中的所有项目复制到新的临时文档,并且只有在使用currentDocument.getDocument(true)获取更改的值之后.作为替代方案,您可以像在LotusScript中一样从服务器读取原始文档.

这是用于检测已更改项目的代码作为起点:

  var original_doc:NotesDocument = database.createDocument();
  currentDocument.getDocument().copyAllItems(original_doc, true);
  var changed_doc:NotesDocument = currentDocument.getDocument(true);
  var oItems:java.util.Vector = original_doc.getItems();
  var iterator = oItems.iterator();
  while (iterator.hasNext()) {
    var oItem:NotesItem = iterator.next();
    var itemName = oItem.getName();
    var cItem:NotesItem = changed_doc.getFirstItem(itemName);
    if (cItem.getText() !== oItem.getText()) {
        print("changed: " + itemName);
    }
    oItem.recycle();
    cItem.recycle();
  }
  original_doc.remove(true);
  original_doc.recycle();

标签:javascript,xpages,xpages-ssjs
来源: https://codeday.me/bug/20190612/1225657.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有