Обработка содержимого рабочего процесса

Я использую Liferay 6.1.1 CE.

Я создал многоуровневый рабочий процесс kaleo (т. е. с двумя уровнями утверждений), написав определение в файле xml (leaveapproval.xml) и загрузив его на сервер. Он отлично работает, так как я тестировал этот рабочий процесс в блогах.

Итак, теперь я хочу отправить содержимое рабочего процесса в веб-службу после завершения утверждения второго уровня.

Как я могу обрабатывать содержимое рабочего процесса?

Является ли это возможным?

<?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>

Помоги мне..


person stackoverflow user    schedule 31.12.2012    source источник
comment
Это должно быть возможно, можете ли вы включить свой leaveapproval.xml?   -  person Prakash K    schedule 31.12.2012
comment
@PrakashK... обновил мой вопрос определением   -  person stackoverflow user    schedule 02.01.2013
comment
Здравствуйте... Я загружаю и развертываю рабочий процесс Kaleo и использую его. Прадип Бхатт: Он обеспечивает только 2 состояния "Принять" и "Отклонить". пожалуйста, направьте меня?   -  person Pradip Bhatt    schedule 25.06.2013


Ответы (1)


Для запуска чего-либо программно на определенном этапе рабочего процесса вам обычно просто нужен тег <script>, точно так же, как вы делаете для обновления статусов.

Таким образом, в ваш утвержденный <state> вы, вероятно, захотите добавить еще один тег <action>, этот для обработки вызова веб-службы (и оставить другое действие таким, какое оно есть).

Язык, который вы будете использовать для сценария, будет зависеть от того, что вам удобно. Я бы использовал 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-запрос, и в этом случае вы реализуете вызов веб-службы по-другому. Но в любом случае вы должны написать код веб-службы в теге действия. Что-то вроде этого должно работать.

person ethanbustad    schedule 25.06.2014