我有一個重複控件,它在特定視圖中顯示文檔。對於每個文檔(數據行),用戶可以編輯並保存這些內容。我有一個額外的按鈕,它將單個文檔標記爲默認文檔,只有在編輯模式下才可以看到它,在它將當前文檔標記爲默認文檔之前,它會通過所有其他文檔並取消將它們標記爲默認文檔。此標記默認爲第一次,但當我再次嘗試時(第二次),它會創建複製衝突。XPage在視圖中內聯編輯文檔並在保存後關閉文檔
編輯按鈕即可更改爲編輯模式的模式。
保存執行以下操作(局部刷新):
<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);
}
}
後markAsDefaut()代碼,請。調用getDocument()可能會導致衝突。 –
發佈 - 謝謝。 – pipalia
字符串比較似乎對我很腥。 http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java –