3

我正在使用 Liferay 6.1.1 CE。

通过在 xml 文件 (leaveapproval.xml) 中编写定义并将其加载到服务器,我创建了一个多级 kaleo 工作流程(即具有两个级别的批准)。它工作正常,因为我在博客中测试了这个工作流程。

所以现在,我想在完成二级审批后将工作流的内容提交到 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>标签,就像您正在更新状态一样。

因此,在您的 approved<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 回答