3

Liferay 6.1.1 CE を使用しています。

xml ファイル (leaveapproval.xml) に定義を記述し、それをサーバーにロードすることにより、マルチレベルの kaleo ワークフロー (つまり、2 レベルの承認) を作成しました。ブログでこのワークフローをテストしたので、問題なく動作します。

そこで、第 2 レベルの承認が完了したら、ワークフローのコンテンツを Web サービスに送信したいと考えています。

ワークフローの内容をどのように処理できますか?

出来ますか?

<?xml version="1.0"?>
<workflow-definition
        xmlns="urn:liferay.com:liferay-workflow_6.1.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:liferay.com:liferay-workflow_6.1.0 http://www.liferay.com/dtd/liferay-workflow-definition_6_1_0.xsd">
    <name>LEAVE IN ACTION USER ACTION</name>
    <description>A sample multilevel approver can approve a workflow content.</description>
    <version>1</version>

    <state>
        <name>created</name>
        <metadata>
            <![CDATA[
            {"xy":[36,51]}
            ]]>
        </metadata>
        <initial>true</initial>
        <transitions>
            <transition>
                <name>review</name>
                <target>review</target>
                <default>true</default>
            </transition>
        </transitions>
    </state>

    <task>
        <name>review</name>
        <metadata>
            <![CDATA[
            {"xy":[168,36]}
            ]]>
        </metadata>
        <actions>
            <notification>
                <name>Review Notification</name>
                <template>You have a new submission waiting for review in the workflow.</template>
                <template-language>text</template-language>
                <notification-type>email</notification-type>
                <execution-type>onAssignment</execution-type>
            </notification>
            <notification>
                <name>Review Completion Notification</name>
                <template>
                    Your submission has been reviewed and the reviewer has applied the following ${taskComments}.</template>
                <template-language>freemarker</template-language>
                <notification-type>email</notification-type>
                <recipients>
                    <user />
                </recipients>
                <execution-type>onExit</execution-type>
            </notification>
        </actions>
        <assignments>
            <roles>
                <role>
                    <role-type>regular</role-type>
                    <name>Portal Head</name>
                </role>
                <role>
                    <role-type>regular</role-type>
                    <name>Portal Content Reviewer</name>
                </role>
            </roles>
        </assignments>
        <transitions>
            <transition>
                <name>approve</name>
                <target>recommended</target>
            </transition>
            <transition>
                <name>reject</name>
                <target>update</target>
                <default>false</default>
            </transition>
        </transitions>
     </task>

     <task>
        <name>recommended</name>
        <metadata>
            <![CDATA[{"xy":[168,36]}]]>
        </metadata>
        <actions>
            <notification>
                <name>Review Notification</name>
                <template>You have a new submission waiting for your review in the workflow.</template>
                <template-language>text</template-language>
                <notification-type>email</notification-type>
                <execution-type>onAssignment</execution-type>
            </notification>
            <notification>
                <name>Review Completion Notification</name>
                <template>
                    Your submission has been reviewed and the reviewer has applied the following ${taskComments}.</template>
                <template-language>freemarker</template-language>
                <notification-type>email</notification-type>
                <recipients>
                    <user />
                </recipients>
                <execution-type>onExit</execution-type>
            </notification>
        </actions>
        <assignments>
            <user>
                <user-id>13379</user-id>
            </user>
        </assignments>
        <transitions>
            <transition>
                <name>approve</name>
                <target>approved</target>
            </transition>
            <transition>
                <name>reject</name>
                <target>update</target>
                <default>false</default>
            </transition>
        </transitions>
    </task>

    <task>
        <name>update</name>
        <metadata>
            <![CDATA[
            {"transitions":{"resubmit":{"bendpoints":[[303,140]]}},"xy":[328,199]}
            ]]>
        </metadata>
        <actions>
            <action>
                <name>reject</name>
                <script>
                    <![CDATA[
                    Packages.com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil.updateStatus(
                        Packages.com.liferay.portal.kernel.workflow.WorkflowConstants.toStatus("denied"),
                        workflowContext);

                    Packages.com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil.updateStatus(
                        Packages.com.liferay.portal.kernel.workflow.WorkflowConstants.toStatus("pending"),
                        workflowContext);
                    ]]>
                </script>
                <script-language>javascript</script-language>
                <execution-type>onAssignment</execution-type>
            </action>
            <notification>
                <name>Creator Modification Notification</name>
                <template>Your submission was rejected by a reviewer, please modify and resubmit.</template>
                <template-language>text</template-language>
                <notification-type>email</notification-type>
                <execution-type>onAssignment</execution-type>
            </notification>
        </actions>
        <assignments>
            <user />
        </assignments>
        <transitions>
            <transition>
                <name>resubmit</name>
                <target>review</target>
            </transition>
        </transitions>
    </task>

    <state>
        <name>approved</name>
        <metadata>
            <![CDATA[
                {"xy":[380,51]}
            ]]>
        </metadata>
        <actions>
            <action>
                <name>approve</name>
                <script>
                    <![CDATA[Packages.com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil.updateStatus      (Packages.com.liferay.portal.kernel.workflow.WorkflowConstants.toStatus("approved"), workflowContext);]]>

                </script>
                <script-language>javascript</script-language>
                <execution-type>onEntry</execution-type>
            </action>
        </actions>
    </state>
</workflow-definition>

助けて..

4

1 に答える 1

0

特定のワークフロー ステップで何かをプログラムで実行するに<script>は、ステータスを更新する場合と同様に、通常はタグが必要です。

したがって、承認済み<state>に別のタグを追加することをお勧めします<action>。これは、Web サービス呼び出しを処理するためのものです (そして、他のアクションはそのままにしておきます)。

スクリプトに使用する言語は、何に慣れているかによって異なります。私は groovy を使用します。なぜなら、それはプレーンな Java コードをかなりうまく処理できるからです。それは私が知っていることです。

これは次のようになります (最後の<state>タグのみを含む)。

<state>
    <name>approved</name>
    <metadata>
        <![CDATA[
        {"xy":[380,51]}
        ]]> 
    </metadata>
    <actions>
        <action>
            <name>approve</name>
            <script>
                <![CDATA[
                Packages.com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil.updateStatus(
                    Packages.com.liferay.portal.kernel.workflow.WorkflowConstants.toStatus("approved"),
                    workflowContext);
                ]]>
            </script>
            <script-language>javascript</script-language>
            <execution-type>onEntry</execution-type>
        </action>
        <action>
            <name>submit-web-service</name>
            <script>
                <![CDATA[
                import java.io.*
                import java.net.*

                URL url = new URL(
                    "www.my-web-service.com/api/whatever?theParam=" +
                        ${theRelevantContextVariable});

                URLConnection urlConnection = url.openConnection();

                // if necessary to read response data:
                // BufferedReader bufferedReader = new BufferedReader(
                //    new InputStreamReader(urlConnection.getInputStream()));
                // String something = bufferedReader.readLine();
                // etc.
                ]]>
            </script>
            <script-language>groovy</script-language>
            <execution-type>onEntry</execution-type>
        </action>
    </actions>
</state>

代わりに POST リクエストが必要になる場合があります。その場合は、Web サービス呼び出しを別の方法で実装します。ただし、いずれにしても、アクション タグに Web サービス コードを記述します。このようなものがうまくいくはずです。

于 2014-06-25T20:48:58.663 に答える