0

「workflow-send」で送信する前に外部検証を追加する必要がある Orbeon Form runner のフォームがあります。そのために、properties-local.xml の「ワークフロー送信」ボタンに機能を追加できますか?

記録のために、検証を実行し、検証結果が戻ってきたときに特定のアクションを実行するボタンも実装しました。代わりに、私のそのボタンに「ワークフロー送信」機能を追加できますか?

4

1 に答える 1

1

これを行うには、persistence-model.xml ファイルにいくつかの変更を加えました。この種の検証は、永続化段階で行う必要があります。必要なのは、データを保存する前、そして明らかにワークフロー送信の前に呼び出されるサーバー側の検証 (データベースなどへのアクセス) でした。

古いコード スニペットをコメント アウトしました。

<!-- Respond to send button activation -->
<xforms:action ev:event="DOMActivate" ev:observer="fr-workflow-send-button">
    <xforms:send submission="validation-submission" />
    <!-- xforms:setvalue ref="instance('fr-persistence-instance')/submit-or-save-or-send">send</xforms:setvalue> 
        <xforms:dispatch name="fr-save-action" target="fr-persistence-model"> <xxforms:context 
        name="fr:check-data-valid" select="true()" /> </xforms:dispatch -->
</xforms:action>

<xforms:action ev:event="my-valid-action">
    <xforms:setvalue
        ref="instance('fr-persistence-instance')/submit-or-save-or-send">send</xforms:setvalue>
    <xforms:dispatch name="fr-save-action" target="fr-persistence-model">
        <xxforms:context name="fr:check-data-valid" select="true()" />
    </xforms:dispatch>
</xforms:action>

<xforms:instance id="validation-result">
    <dummy />
</xforms:instance>

<xforms:submission id="validation-submission"
    ref="xxforms:instance('fr-form-instance')" resource="http://localhost:8080/MyApp/OrbeonValidationServlet"
    method="post" replace="instance" instance="validation-result">
    <!-- Clear external errors just before doing external validation -->
    <xforms:delete ev:event="xforms-submit" nodeset="//@v:*" />
    <xforms:action ev:event="xforms-submit-done">
        <!-- Insert external validation results when done -->
        <xforms:insert nodeset="."
            origin="instance('validation-result')/v:data/*" />
        <!-- Show all errors on form -->
        <xforms:dispatch name="fr-visit-all" targetid="error-summary" />
        <!-- Update error summary for incremental mode -->
        <xforms:refresh />
        <xforms:dispatch name="fr-update" targetid="error-summary" />
        <xforms:dispatch name="my-valid-action" target="fr-persistence-model"
            if="count(instance('validation-result')/v:global-errors/*) 
            = 0" />
    </xforms:action>
</xforms:submission>

だから基本的に

  • my-valid-action と validate-submission を実装しました
  • workflow-send の代わりに validate-submission を配置
  • エラーがない場合にのみ my-valid-action をディスパッチします
  • my-valid-action から workflow-send を呼び出す

最後に、validation-result をフォームの fr:error-summary にバインドしました。

もっと頑張って、properties-local.xml から /OrbeonValidationServlet を設定できるようにすることができます。

于 2012-11-07T07:31:14.357 に答える