1

dataSource にバインドされていない XPage があります。XPage には、mainDoc と transDoc などの異なるデータソースにそれぞれバインドされた 2 つのカスタム コントロールが含まれています。transDoc のアクション ボタンから、メイン カスタム コントロールの dataSource と dataSource "mainDoc" へのハンドルを取得する必要があります。このアクション ボタンは、mainDoc の保存とその他の操作を実行する必要があります。mainDoc カスタム コントロールを「非表示」にして、transDoc コントロールを表示するロジックがあります。次に、ユーザーはtransDocコントロールに情報を入力し、必要なアクションをクリックしてから、最初にmainDocを保存してからtransDocを保存します。セーブの順序は非常に重要です。状況によっては、transDoc コントロールを非表示にし、保存せずに mainDoc コントロールを再表示することがありますが、そのために dataSource ハンドルを取得する必要がないため、その部分が機能しています。

このようなものをどこかで読んだことを漠然と覚えているようですが、今は見つけられないようです。

4

1 に答える 1

2

別のカスタム コントロールからデータ ソースにアクセスする簡単な方法は、スコープ変数を使用することです。

最初のカスタム コントロールで、ビュー スコープ変数をイベントのデータ ソースmainDocに設定します。beforePageLoad

<xp:this.beforePageLoad>
    <![CDATA[#{javascript:viewScope.sourceMainDoc = mainDoc}]]>
</xp:this.beforePageLoad>

次に、このビュー スコープを使用して 2 番目のカスタム コントロールで作業し、たとえば以下を保存できますmainDoc

<xp:this.action>
    <![CDATA[#{javascript:viewScope.sourceMainDoc.save()}]]>
</xp:this.action>

Sven Hasselbach の方法を使用して、カスタム コントロールからデータ ソースを取得します。instance のオブジェクトを取得しますcom.ibm.xsp.model.domino.DominoDocumentData。通常のデータ ソース Domino Document オブジェクト (= NotesXspDocument) と同じメソッドを使用する場合は、最初にインスタンスのオブジェクトを取得する必要がありcom.ibm.xsp.model.domino.wrapped.DominoDocumentますgetDataObject()。次の方法で実行できます。

function getDatasource( componentId:String, dataSourceName:String ):com.ibm.xsp.model.domino.DominoDocumentData {
    ...
}
var mainDoc:com.ibm.xsp.model.domino.wrapped.DominoDocument = getDatasource("idDSComponent", "mainDoc").getDataObject();
mainDoc.save()
于 2013-08-10T20:33:39.437 に答える