gpt4 book ai didi

javascript - 获取 NotesXSPDocument 中的所有项目

转载 作者:搜寻专家 更新时间:2023-11-01 05:23:08 25 4
gpt4 key购买 nike

在我的 Notes 数据库中,我在保存文档时执行审计。在 LotusScript 中非常简单。我从服务器获取原始文档 (oDoc),然后在我修改的文档 (mDoc) 中,我执行一个 Forall 循环来获取每个项目的名称;对于 mDoc.items 中的所有项目。从 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 的版本:

原文: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 - 获取 NotesXSPDocument 中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com