0

フォームからいくつかの引数を渡すことができる XBL ファイルがあります。

<my-xbl arg1='' arg2=''>
</my-xbl>

<xf:input ref='@arg1'/>
<xf:input ref='@arg2'/>

それから私はこのようなものを持っています:

<xf:model>
    <xf:action id="populate-data-binding">                         
        <xf:action context="instance('sub')"
                   ev:event="xforms-submit-done"
                   ev:observer="my-submission">                     
            <xf:action>        
                <xf:var as="xs:string" name="control-value" value="saxon:evaluate(instance('arg1'))"/>  
                <xf:var as="xs:string" name="control-name"  value="saxon:evaluate(instance('arg2'))"/>
                <xf:setvalue ref="xxf:instance('fr-form-instance')//*[name() = $control-name]"
                             value="$control-value"/>
           </xf:action>
    </xf:action>
</xf:model>

問題は、arg1空の文字列の場合です (つまり、私のフォームでは、コントロール設定を押してarg1フィールドをスキップし、空のままにしておくことを意味します)、フォームがクラッシュします。''すべてが問題ないので、空の文字列(asd、q、何か)以外を挿入するarg1と。だから今、私は次のようなことをしたいと思います

<xf:var as="xs:string" name=".." value="if(@arg1 ='null') then 'asd'
 else 'saxon:evaluate(instance('arg1'))'/>

明らかに、引用符の問題(条件が間''にある必要があり、内部に引用符を入れることができない)とおそらく他の何かがあるため、機能しません。誰かがこれを修正するのを手伝ってくれますか? 前もって感謝します。

アップデート :

私は少し不正確だったと思います。明確にするために、私のフォームarg1の ID です。フォームが読み込まれると、REST サービスを呼び出します (これは一度Event xforms-model-construct-done behaviorxf:inputを手伝ってくれました)。データが返されます。ここで、データを xf:inputs に入力したいと考えていますが、上記のコードは非常にうまく機能します。問題は、私の XBL には , だけでなく、たくさんのパラメーターがあることです。arg1arg2

<my-xbl arg1 = '' arg2 = '' ... arg19 = '' arg20 = ''/>

さて、フォームでコントロールの基本設定に移動すると、すべてのパラメーターを入力する必要がありarg1...20ます。通常は 3 つか 4 つですが、必要なものだけを記入し、残りは空白のままにします。問題は、フォームがクラッシュし、引数が null の場合に saxon:evalute が例外をスローするため、それができないことです。

(また、すべてに言及しますが、ここでは関係ないと思いますが、上記のコードを理解するのに役立つかもしれません:実際にはarg2、のIDですxf:inputarg1、Webサービスのリソースへのパスのようなものです。arg2 = "'firstname'"my xf:input and arg1 =" //CUSTOMER/FIRSTNAME"(no quotes) and my REST service URL is http://www.thomas-bayer.com/sqlrest/CUSTOMER/2/. このようにして、id のxf:input'firstname'の下に、webservice から取得したデータ全体の firstname のみを挿入することを選択できます. 次に、arg4 は次のようになります'lastname'arg3 などとなります//CUSTOMER/LASTNAME.私が言ったように、ここでは関係ないと思います)

そのため、空の値を確認したかったのですが、あなたのコードが役に立ったはずです-残念ながら機能していません。フォームがクラッシュしなくなりましたが、データが に取り込まれませんxf:inputs。たぶん、この誤解のためですか?ありがとう。

4

1 に答える 1