特定のビューでドキュメントを表示する繰り返しコントロールがあります。ドキュメント (データの行) ごとに、ユーザーはこれらのアイテムをインラインで編集および保存できます。単一のドキュメントをデフォルトとしてマークする追加のボタンがあり、これは編集モードでのみ表示されます。現在のドキュメントをデフォルトとしてマークする前に、他のすべてのドキュメントを調べてデフォルトからマークを外します。このデフォルトのマークは最初は機能しますが、もう一度試すと (2 回目)、レプリケーションの競合が発生します。
編集ボタンは、モードを編集モードに変更するだけです。
保存は次のことを行います (部分的な更新)。
<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);
}
}