1

XPages の querysavedocument イベントを初めて使用していて、XPage が保存されないようにしようとしています。私はもう試した

return false;

ただし、これはドキュメントの保存を停止しません。XPage の保存を停止する正しい構文は何ですか?

ドキュメントを保存するコードは次のとおりです。

<xp:this.action>
<xp:saveDocument var="document1"></xp:saveDocument>
</xp:this.action>

これは、以下のクヌートの回答と同じです。querySaveDocument にあるコードは

var choice:boolean = false;

for (var k = 1; k < 7; k++) {
    choice = false;
    sectionname = "C1B"+k;
    for (var n = 1; n < 7; n++) {
        fieldname = "C1B"+k+"_R"+n;

        if (getComponent(fieldname).getValue() != ""){
            choice = true; 
            break;};
    }

    if (choice == false){
        viewScope.put("EmptyRadioField",sectionname);
        var comp = getComponent("RadioButtonValidationDialog");
        comp.show();
        return false;
    }
}

Choice == false の場合、ダイアログ ボックスは正しく表示されますが、それでも XPage は保存されます。

検証をcsjsに移動することで問題を解決しました:

for (var k = 1; k < 7; k++) {

choice = false;
sectionname = "C1B"+k;

for (var n = 1; n < 7; n++) {
fieldname = "C1B"+k+"_R"+n;

var id = "view:_id1:_id2:_id3:"+fieldname;
fieldvalue = dijit.byId(id).getValue();

if (fieldvalue != false){
choice = true; 
break;};

}

if (choice == false){

sectionid = "view:_id1:_id2:_id3:lbl"+sectionname;
sectionvalue = dojo.byId(sectionid).innerHTML;
alert("Please enter a value for " + sectionvalue);
return false;

}
}   

これはうまく機能しますが、何度も試してみましたが、SSJS で動作させることができませんでした。

4

1 に答える 1

1

return false;は正しい。

たぶん、イベントquerySaveDocument はまったく実行されません。これは、たとえば、SSJS でドキュメントを .xml で保存した場合に発生しdocument1.save()ます。

次のような保存アクションが必要です

  <xp:this.action>
     <xp:saveDocument var="document1"></xp:saveDocument>
  </xp:this.action>

または使用する

<xp:eventHandler
    event="onclick"
    submit="true"
    refreshMode="complete"
    immediate="false"
    save="true">
</xp:eventHandler>
于 2013-10-18T17:05:56.617 に答える