フォームからいくつかの引数を渡すことができる 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 には , だけでなく、たくさんのパラメーターがあることです。arg1
arg2
<my-xbl arg1 = '' arg2 = '' ... arg19 = '' arg20 = ''/>
さて、フォームでコントロールの基本設定に移動すると、すべてのパラメーターを入力する必要がありarg1...20
ます。通常は 3 つか 4 つですが、必要なものだけを記入し、残りは空白のままにします。問題は、フォームがクラッシュし、引数が null の場合に saxon:evalute が例外をスローするため、それができないことです。
(また、すべてに言及しますが、ここでは関係ないと思いますが、上記のコードを理解するのに役立つかもしれません:実際にはarg2
、のIDですxf:input
がarg1
、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
。たぶん、この誤解のためですか?ありがとう。