2012-12-31 103 views
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> 

帮助我..

+0

应该可以,你可以包含你的'leaveapproval.xml'吗? –

+0

@PrakashK ...更新我的问题的定义 –

+0

你好...我下载和部署Kaleo工作流并使用它Pradip Bhatt:它只提供2个状态接受和拒绝现在我必须提供相同的这种单一的审批机制,但与三状态1)Accpet 2)拒绝3)重新提交你能指导我吗? –

回答

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服务代码写入操作标签。像这样的东西应该工作。