フィールドに onChange イベントのイベント ハンドラーがあります。フィールドに指定されたキーが既存のドキュメントと一致する場合に Dojo ダイアログを表示しようとしていますが、キーがまだ使用されていない場合は、ユーザー入力なしで新しいドキュメントを作成して保存します。
これは、イベント ハンドラーのコードです。
<xp:eventHandler event="onchange" submit="true"
refreshMode="norefresh" disableValidators="true"
onComplete="XSP.openDialog('#{id:dialog1}')">
<xp:this.action><![CDATA[#{javascript:var bundleID = getComponent("inputBundleID").getValue();
    if (bundleID == "") {
        return;
    } else {
        var noteID = @DbLookup(@DbName(),"AllBundlesID",bundleID,"$12");
        if (@IsError(noteID)) {
            viewScope.put("noteId","NEW");
        } else {
            viewScope.put("noteId",noteID);
        }
    };
    document1.save();}]]></xp:this.action>
<xp:this.script><![CDATA[var bundleFieldId = '#{javascript:getClientId("inputBundleID")}';
    var bundleId = document.getElementById(bundleFieldId).value;
    if (bundleId == "") {
        return false;
    }
    var trayFieldId = '#{javascript:getClientId("inputStorageTrayID")}';
    var trayId = document.getElementById(trayFieldId).value;
    if (trayId == "") {
        alert('Storage Tray ID cannot be blank');
        return false;
    } else {
        return true;
    }]]></xp:this.script>
onComplete パラメーターを削除して、これを this.action 部分の下に追加しようとしました。
<xp:this.onComplete><![CDATA[[#{javascript:if (viewScope.get("noteId") != "NEW") {
        return XSP.openDialog('#{id:dialog1}');
    } else {
        alert('Create and save the document - TBD how to do it');
    }}]]></xp:this.onComplete>
そのコードは、[ReferenceError] 'XSP' not found というエラーを表示します。
アラートは、ドキュメントを自動的に作成する方法を決定するまでの単なるプレースホルダーです。シンプルなものが欠けているような気がします。これを行うより良い方法はありますか?ありがとう。