2

ユーザーがドキュメント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の値に設定すると、「追加されたバンドル-匿名」と表示されます。

4

2 に答える 2

1

データソースを追加した場所によって異なります。document1がカスタムコントロール1のデータソースとして設定され、bundleDocがカスタムコントロール2のデータソースである場合、それらが定義されているカスタムコントロールの外部でそれらにアクセスすることはできません。

カスタムコントロールのデータソースとしてdocument1を追加し、同じカスタムコントロールにxe:dialogコントロール(bunleDocデータソースを含むパネルを含む)を作成すると、上のボタンからdocument1にアクセス(および更新/保存)できるはずです。ダイアログ。

于 2012-02-24T09:26:11.187 に答える
0

問題は、質問を投稿した翌日に機能し始めたため、最初はキャッシュの問題が原因だったと思います。

ただし、ページを希望どおりに機能させるには、もう1つ行う必要がありました。これはDesignerのXPageです。

ここに画像の説明を入力してください

[保存して閉じる]ボタンからWorkLogフィールドに値を書き込むには、ダイアログを開く前にdocument1データソースを保存する必要がありました。次に、document1はSave&Closeコード全体で認識され、常に正しく保存されました。

于 2012-03-01T14:26:06.547 に答える