3

8.5.3 UP1 の使用

ダイアログ ボックスから文書を保存すると、特定のフィールドにデータが入力されません。xpage 内からドキュメントを保存すると、これらのフィールドは問題なく保存されます。この問題を説明する簡単な例を次に示します。

    <xp:link text="Save Document By Dialog"
    id="link21">

    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[XSP.openDialog("#{id:dialog1}");]]></xp:this.script>
    </xp:eventHandler>
</xp:link>
<br/>
<xp:button value="Save By Button" id="button1">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action>
            <xp:saveDocument var="document1"></xp:saveDocument>
        </xp:this.action>
    </xp:eventHandler>
</xp:button>
<xe:dialog id="dialog1" title="Dialog">
    <br />
    <b>
        <xp:text escape="true" id="computedField1">
            <xp:this.value><![CDATA[#{javascript:"Save this document?"}]]></xp:this.value>
        </xp:text>
    </b>
    <br />
    <br />
    <xp:button value="Yes" id="button7">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="complete">
            <xp:this.script><![CDATA[XSP.closeDialog("#{id:dialog1}");]]></xp:this.script>
            <xp:this.action>
                <xp:saveDocument var="document1"></xp:saveDocument>
            </xp:this.action></xp:eventHandler>
    </xp:button>        
    <xp:button value="No" id="button8">
        <xp:this.onclick><![CDATA[XSP.closeDialog("#{id:dialog1}");]]></xp:this.onclick>
    </xp:button>
</xe:dialog>
<br/><br/>
<xp:inputText id="TitleTX" value="#{document1.TitleTX}"></xp:inputText>
<br/><br/>
<xp:inputRichText id="inputRichText1" value="#{document1.ProcessMapsRT}">
</xp:inputRichText>
4

3 に答える 3

5

xe:dialog に関連付けられた DOJO プロセスは、ダイアログを DOM 内の別の場所に移動します。つまり、ドキュメントの主要部分のデータ ソースを追跡できなくなります。単純なアクションの代わりに SSJS を使用してダイアログで保存すると、よりうまく機能する可能性があります。

データソースが複合データを介して渡されるカスタム コントロールに含まれるダイアログを使用して、最も成功しました。そうすれば、データへの接続は失われず、引き続き機能しますが、これらの状況で保存するためにまだ SSJS を使用しています。

/初心者

更新: これは、NotesIn9 #42 ( xpages.tvを参照) で説明されている方法である Steve Pridemore を使用するときかもしれません。

最初に、XPage のデータ ソースが含まれるレベルで新しいイベントを配置します。

<xp:eventHandler
    id="saveEventHandler"
    submit="true"
    save="true"
    event="calledbyid"
    refreshMode="complete">
</xp:eventHandler>

次に、クライアント側の JavaScript を使用して、ダイアログのアクションでこのイベントを呼び出します。

XSP.executeOnServer('#{id:saveEventHandler}')

それは「するべき」です。完全にはテストしていませんが、NoteIn9 の例は機能します。

/初心者

于 2012-04-04T21:51:25.740 に答える
1

dataContexts を使用してデータソースを定義しようとしましたか? dataContext はグローバル オブジェクトだと思います。

更新:ドキュメントを保存するときに dataContexts または dominoDocument データソースでさえ機能しましたが、問題は値が保存されないことでした。したがって、viewScope 変数を使用して値を格納すると、うまくいきました。これが役立つかどうかはわかりませんが、これでうまくいきます:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:this.data>
        <xp:dominoDocument var="newDoc" formName="frmContact"></xp:dominoDocument>
    </xp:this.data>
    <xp:inputText id="inputText1" value="#{viewScope.firstName}"></xp:inputText>
    <xp:inputText id="inputText2" value="#{viewScope.lastName}"></xp:inputText>

    <xp:button value="Label" id="button1">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="partial" refreshId="dialog1">
            <xp:this.action><![CDATA[#{javascript:getComponent("dialog1").show();}]]></xp:this.action>
        </xp:eventHandler>
    </xp:button>

    <xe:dialog id="dialog1">
        <xp:button value="Label" id="button2">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="complete">
                <xp:this.action><![CDATA[#{javascript:newDoc.replaceItemValue("fldFirstName", viewScope.firstName);
newDoc.replaceItemValue("fldLastName", viewScope.lastName);
newDoc.save(); 
getComponent("dialog1").hide();}]]></xp:this.action>
            </xp:eventHandler>
        </xp:button>
    </xe:dialog>
</xp:view>

お役に立てれば!

于 2012-04-06T15:11:39.100 に答える
0

ダイアログを開く前に、データがサーバーに送信されていることを確認してください。SSJS構文でそのようなダイアログを開くことをお勧めします - getComponent("dialog1").show()

于 2012-04-05T07:03:19.637 に答える