1

その onw ドキュメント データソース (「親」) にバインドされている xpage には、いくつかのビュー データ (依存ドキュメント、または「応答」を含む) を表示する繰り返しコントロールと、新しい「応答」ドキュメントを作成するためのボタンがあります。 . 回答のデータは、同じページの別のパネルに表示されます。このパネルは、繰り返しから回答を選択したとき、または新しい回答を作成したときにのみ表示されます。doc データソースは、次のように、「動的」応答 doc パネルを囲むパネルにバインドされます。

<xp:panel id="panelFlDs">
    <xp:this.data>
        <xp:dominoDocument var="dsDocFileLink" formName="fmFileLink"
            ignoreRequestParams="true">
            <xp:this.documentId><![CDATA[#{javascript:viewScope.get("unidFileLink")}]]></xp:this.documentId>
        </xp:dominoDocument>
    </xp:this.data>
    <xp:panel id="panelFlForm">
        <xp:this.rendered><![CDATA[#{javascript:viewScope.get("showDialogFileLink")=="1"}]]></xp:this.rendered>
        <xc:ccFormFileLink></xc:ccFormFileLink>
    </xp:panel>
</xp:panel>

ご覧のとおり、viewScope を使用して渡された docUnid にデータソースをバインドしようとしています。これは、パネルを表示する前に viewScope 変数を削除するだけで、既存のドキュメントでも (注意事項があります。以下を参照してください) 新しいドキュメントでも問題なく動作します。新しい応答の場合、同じボタン コードを使用して、親から継承したフィールド値も設定します。

dsDocFileLink.replaceItemValue("flType", "flTypeFile");
dsDocFileLink.replaceItemValue("glBlockID", dsDocFileLinkBlock.getItemValueString("glBlockID"));
dsDocFileLink.replaceItemValue("histCreatedOn", @Now());

注意点は、2 つの新しいドキュメントを続けて作成できないことです。2 番目以降のすべての新しいドキュメントは、最初のドキュメントと同じデータソースを使用しているようです。それらの編集可能なフィールドには、以前に編集した新しいドキュメントの値が表示されます。

Sven Hasselbach の優れた例 ( hereおよびhere ) に従って新しいデータソース オブジェクトを作成 (および古いオブジェクトをクリア) しようとしましたが、Sven が彼のブログ エントリで述べているように、新しく作成したデータソースをすぐに使用することはできません。したがって、新しい ds を作成できますが、データソースがまだ使用できないため、意図した方法で継承を使用することはできません。

すべてを作り直して、デフォルト値などの編集可能なフィールドを使用してデータソース レベルで継承を開始する前に: これは私のタスクにとって正しい方法でしょうか?

編集:継承なしでやろうとしました。つまり、新しい応答を作成し、いくつかの値を入力してから、保存して閉じ(注:「閉じる」は応答データパネルを非表示にします)、2番目の新しい応答を作成します。結果: 2 番目の応答には、最初の応答に入力した値が含まれています。私の作成変更作成ボタンは次のようになります。

var panelFlDs:com.ibm.xsp.component.UIPanelEx = getComponent("panelFlDs");
var ds = new com.ibm.xsp.model.domino.DominoDocumentData();
ds.setVar("dsDocFileLink");
ds.setFormName("fmFileLink");
panelFlDs.getData().clear();
panelFlDs.addData(ds);
viewScope.remove("unidFileLink");
viewScope.put("showDialogFileLink", "1");

よろしくお願いします

ロタール

4

1 に答える 1