0

拡張ライブラリのダイアログコントロールを備えたXPageがあります。

ダイアログは正常に機能します-開き、必要な処理を実行しますが、「親」ドキュメントを更新しようとすると機能しません。

XPageデータソースはdocument1というDominoドキュメントです。読んだ後にこれを追加しました: 拡張ライブラリダイアログボックスからドキュメントを保存すると、一部の値が空白になります

<xp:this.data>
<xp:dominoDocument var="document1" formName="speakerReq"></xp:dominoDocument
</xp:this.data>

ダイアログコントロールには、サーブレットを呼び出し、解析されてHTMLテーブルに組み込まれたJSONを返す[検索]ボタンがあります。最初のセルは、クリックされたときにクライアント側のJavaScriptライブラリから関数を呼び出すリンクです。この関数は、返されたJSONの値で「親」ドキュメントを更新し、ダイアログを閉じることです。

その関数でalert()ステートメントだけを使用してテストすると関数を呼び出すことができますが、「親」ドキュメントを更新しようとすると、それが認識されません。

「document1」オブジェクトを渡そうとしましたが、ダイアログが表示されると、オブジェクトが存在しないと表示されるため、リンクが失敗します。

リンクが作成されるコードスニペットは次のとおりです。

        // Let's build the row...
        cell = document.createElement("td");
        resultLink = document.createElement("a");
        resultLink.setAttribute("class", "linkText");
        resultLink.setAttribute("href", "#");
        resultLink.setAttribute("onclick", "javascript:updateDocument(document1, '" + bpName + "', '" + bpEmail + "', '" + bpPhone + "', '" + bpTitle + "', '" + bpCountry + "', '" + bpLoc + "');");
        resultLink.appendChild(document.createTextNode(bpName));
        cell.appendChild(resultLink);
        row.appendChild(cell);

クライアント側でdocument1オブジェクトのハンドルを取得して、「親」ドキュメントのこれらのフィールドを更新したり、ダイアログを閉じたりするにはどうすればよいですか?

コード:

function updateDocument(doc, name, email, phone, job, country, location) {

var thisField;

// Need to update the document with the selected values...
thisField = doc.getElementById("#{id:sr_Name1}");
thisField.value = name;

thisField = doc.getElementById("#{id:sr_Title1}");
thisField.value = email;

thisField = doc.getElementById("#{id:sr_Phone1}");
thisField.value = phone;

thisField = doc.getElementById("#{id:sr_Email1}");
thisField.value = job;

thisField = doc.getElementById("#{id:sr_Location1}");
thisField.value = location + " - " + country;

} 

ありがとう!

4

1 に答える 1

1

CSJSとSSJSを混同しているようです。コードスニペットはブラウザで実行されますが、サーバー側のコードを実行しようとします。これは機能しません。データをサーバーにポストバックし、そこでデータを処理する必要があります。XPages Wikiには、役立つと思われるアイデアがいくつかあります。

明確化

経験則:ブラウザにJavaScriptとして表示されるものには、SSJSを含めることはできません。したがって、任意のDOMを使用できますが、セッション、データベース、document1などは使用できません。SSJSライブラリはCSJSからは見えないため、これらのメソッドを呼び出すことはできません。CSJSとSSJSの両方を定義するボタンをページに含めることができます。クライアント側が最初に実行され、次に更新(部分的または完全)が実行されます。

また、上記のコード:getElementByIdCSJS-> SSJSでは使用できませんが、docはNotesDocumentDatasource->getElementByIdがありません。

さらに、「親」要素はありません。ダイアログボックスは、ローカルDOMの別の部分です(これはNotesUIWorkspace.dialogboxではありません)。XPagesWikiでサンプルを確認してください

于 2012-10-10T18:33:07.383 に答える