ユーザーがドキュメントIDを入力するフィールドを持つカスタムコントロールがあります(ノートIDやUNIDではなく、一意の番号のみ)。このデータソースの名前はdocument1です。それらがフィールドを出るとき、私はルックアップを実行し、そのIDを持つドキュメント、またはextlib Dialogコントロール(データソースbundleDoc)の新しいドキュメントのいずれかを表示します。bundleDocが保存されたら、document1のログフィールドを更新して、バンドルドキュメントが追加されたことを示します。
bundleDocを保存してダイアログを閉じる(非表示にする)ことはできますが、ダイアログの[保存して閉じる]ボタンのコードでdocument1を「見る」ことができません。document1.getItemValueStringまたはgetComponentを使用して参照することはできません。getItemValueStringは空の文字列を返し、戻り値がnullであるため、getComponentはエラーをスローします。
視覚的に役立つ画像を投稿したかったのですが、まだ評判がよくありません。:(何が欠けていますか?同じXPage上にあるため、ダイアログコントロールからdocument1にアクセスできませんか?
更新:ダイアログフォームの2つのフィールドには、getComponentを使用してdocument1から値を取得するデフォルト値が計算されています。したがって、少なくともダイアログがロードされると、document1を見ることができます。また、bundleDocは、ダイアログコントロールのデータソースとして定義されていません。明日それが違いを生むかどうか試してみます。
更新2:写真を投稿するにはまだ十分な評判ではありませんが、ここにいくつかのコードがあります。これは、ダイアログコントロールを含む1つのカスタムコントロールです。document1はカスタムコントロールのデータソースとして定義され、bundleDocはバンドルドキュメントのフィールドのテーブルを含むダイアログコントロールのパネルのデータソースとして定義されます。
ダイアログコントロールのBundleIDフィールドには、次を使用して計算されたデフォルト値があります。
if (bundleDoc.isNewNote()) {
getComponent("inputBundleID").getValue();
} else {
bundleDoc.getItemValueString("BundleID");
}
StorageLocationIDの式は、コンポーネントがinputStorageTrayIDであることを除いて、同様です。
これは、[保存して閉じる]ボタンのコードです。
bundleDoc.save();
var newArr = new Array(document1.getItemValue("WorkLog"));
newArr.push("Added bundle " + document1.getItemValueString("BundleID") + " - " + session.getCommonUserName());
document1.setValue("WorkLog",newArr);
document1.save();
getComponent("dialog1").hide();
エラーはdocument1.save行で発生しますが、document1からBundleIDを取得しません(sessionScope変数をnewArrの値に設定すると、「追加されたバンドル-匿名」と表示されます。