XBL で独自のコンポーネントを作成しており、その中でサブミッションを使用する必要があります。ユーザーが Form Builder で (オートコンプリート コントロールのように) 提供できる送信の 2 つのパラメーター (リソース、XPath) があります。
<xbl:binding element="fr|myControl" id="fr-myControl" xxbl:mode="lhha binding value">
<metadata xmlns="....">
....
<templates>
<instance label=""/>
<view>
<fr:myControl id="" appearance="minimal" xpath="" xmlns="" resource="" >
<xf:label ref=""/>
<xf:hint ref=""/>
<xf:help ref=""/>
<xf:alert ref=""/>
</fr:myControl>
</view>
</templates>
<control-details>
<xf:input ref="@resource">
....
</xf:input>
<xf:input ref="@xpath">
....
</xf:input>
</control-details>
</metadata>
....
@resource
次に、ユーザーがフォーム ビルダー (および@xpath
)で提供するリソースと結果の XPath を使用して、REST 送信を呼び出します。
<xf:model>
<xf:instance id="result"><value/></xf:instance>
<xf:instance id="sub"><value/></xf:instance>
<xf:instance id="resource"><value/></xf:instance>
<xf:instance id="xpath"><value/></xf:instance>
....
<xf:submission id="my-submission" instance="sub"
mediatype="application/xml"
method="get"
resource="{instance('resource')}"
replace="instance"
serialization="none"/>
<xf:action id="populate-data-binding">
<xf:action context="instance('sub')"
ev:event="xforms-submit-done"
ev:observer="my-submission">
<xf:action>
<!-- there is a problem-->
<xf:var as="xs:string" name="control-value" value="instance('xpath')"/>
<xf:setvalue ref="instance('result')" value="$control-value"/>
</xf:action>
</xf:action>
</xf:action>
</xf:model>
....
<xf:var name="resource-avt" xbl:attr="xbl:text=resource" xxbl:scope="outer"/>
<xf:var name="resource" xbl:attr="xbl:text=resource" >
<xf:action ev:event="xforms-enabled xforms-value-changed">
<xf:setvalue ref="instance('resource')" value="$resource"/>
</xf:action>
</xf:var>
<xf:var name="xpath-avt" xbl:attr="xbl:text=xpath" xxbl:scope="outer"/>
<xf:var name="xpath" xbl:attr="xbl:text=xpath" as="xs:string">
<xf:action ev:event="xforms-enabled xforms-value-changed">
<xf:setvalue ref="instance('xpath')" value="$xpath"/>
</xf:action>
</xf:var>
私の問題は、上記の強調表示された行にあります。instance('xpath')
たとえば、フォームビルダーでユーザーが提供したパラメーターの値があります/pathToResult
。そして、 に関連付けられた送信リソースから XML 結果の一部を取得したいと考えています/pathToResult
。しかし、残念なことに、期待される結果の代わりに、たとえば応答 XML の場合instance('result')
:/pathToInstance
<xml>
<blabla>bla</blabla>
<pathToResult>MY RESULT !!!</pathToResult>
</xml>
result-instance の期待値は:MY RESULT !!!
ではなく です/pathToResult
。
ただし、次のようにコードを変更した場合:
<xf:var as="xs:string" name="control-value" value="/pathToResult"/>
うまく機能しますが、この場合、パスはハードコーディングされています。代わりに、Form Builder ユーザーがコントロール構成で XPath 式を指定できるようにしたいと考えています。
期待される効果が得られるようにコードを変更するにはどうすればよいですか?