【发布时间】:2014-04-28 15:15:46
【问题描述】:
在我的 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 }
}
}
}
}
【问题讨论】:
-
您尝试
getChangedFields()获取 NotesXSPDocument 了吗?在此处查看用法public.dhe.ibm.com/software/dw/lotus/Domino-Designer/JavaDocs/… -
克努特,谢谢你。不知道!
-
似乎无法让那个工作;在 [xPages_SSJS.jss].FBAudit() 在 [xPages_SSJS.jss ].saveDocument() 123: } 124: 函数 FBAudit() { -> 125: var cFields = currentDocument.getChangedFields(); 126:打印(cFields); 127:}
-
getChangedFields()也无法工作,但通过currentDocument.getDocument(true)找到了解决方案 - 请参阅我的答案。
标签: javascript xpages xpages-ssjs