我有一个重复控件,它在特定视图中显示文档。对于每个文档(数据行),用户可以在线编辑和保存这些项目。我有一个额外的按钮,它将单个文档标记为默认值,这仅在编辑模式下可见,在将当前文档标记为默认值之前,它会遍历所有其他文档并将它们取消标记为默认值。此标记为默认值第一次有效,但是当我再次尝试(第二次)时,它会产生复制冲突。
编辑按钮只是将模式更改为编辑模式。
保存执行以下操作(部分刷新):
<xp:this.action>
<xp:actionGroup>
<xp:saveDocument var="deliveryDocument"></xp:saveDocument>
<xp:changeDocumentMode mode="readOnly"
var="deliveryDocument">
</xp:changeDocumentMode>
</xp:actionGroup>
</xp:this.action>
设置默认值执行以下操作(完全刷新):
<xp:this.action>
<xp:actionGroup>
<xp:executeScript
script="#{javascript:markAsDefault(deliveryDocument);}">
</xp:executeScript>
<xp:saveDocument var="deliveryDocument"></xp:saveDocument>
<xp:changeDocumentMode mode="readOnly"
var="deliveryDocument">
</xp:changeDocumentMode>
</xp:actionGroup>
</xp:this.action>
markAsDefault 首先遍历所有现有的交付文档并将 isDefault 设置为空白(当前文档除外),然后为当前文档设置 isDefault 值(它不保存后端文档并且循环执行 doc.recycle ())。
任何帮助,将不胜感激。
更新:
function markAsDefault(deliveryDoc) {
try {
var db:NotesDatabase = deliveryDoc.getParentDatabase();
var vwDeliveryAddress:NotesView = db.getView("viewName");
var dc:NotesDocumentCollection = vwDeliveryAddress.getAllDocumentsByKey(deliveryDoc.getItemValueString("fldID"), true);
var strUniversalID:String;
strUniversalID = deliveryDoc.getDocument().getUniversalID();
if (dc.getCount() > 0) {
var doc:NotesDocument = dc.getFirstDocument()
var nextDoc:NotesDocument;
// mark all other docs as not default
while (doc != null) {
nextDoc = dc.getNextDocument();
if (doc.getUniversalID() != strUniversalID) {
doc.replaceItemValue("isDefault", "");
doc.save();
doc.recycle();
}
doc = nextDoc;
}
}
deliveryDoc.replaceItemValue("isDefault", "Yes");
} catch (e) {
log.logError(e.toString(), SEVERITY_HIGH, e.toString(), null, "website.nsf", "markAsDefault()", null, null);
}
}