วันศุกร์ที่ 3 กันยายน พ.ศ. 2553

สร้าง custom workflow บน alfresco

Share it Please
ขั้นตอนการสร้าง custom workflow บน alfresco นั้นมีขั้นตอนหลักๆ อยู่ 4-5 ขั้นตอนครับ ที่บอกว่า 4-5 เพราะว่ามีอยู่ขั้นตอนนึงที่ทำแค่ครั้้งแรกครั้งเดียวเท่านั้นครับ
  •  ขั้นตอนที่ 1 : สร้าง Task Model 
ปกติแล้วเราสามารถสร้าง Task Model ได้หลายวิธีเช้นแก้ไข file workflowModel.xml ใน server แต่การทำเช่นนี้เราจำเป็นต้อง restart server ก่อน Task Model ที่เราแก้ไขจึงจะใช้งานได้ แต่ถ้าเราต้องการสร้าง Task Model โดยที่ไม่จำเป็นต้อง restart server ให้เราไปแก้ที่ Alfresco Explorer แทนครับโดยให้ไปที่ Company Home > Data Dictionary > Models แล้วเลือก Create > Create Content แล้วใส่ค่าตามนี้
  1. Name: ใส่ชื่อของ Model เช่น leknarmModel
  2. Type: เลือกเป็น Content
  3. Content Type เลือกเป็น XML
เสร็จแล้วกด OK
ในหน้า Enter Content ให้ใส่ค่า

<?xml version="1.0" encoding="UTF-8"?>

<model name="osdev:reviewapprovemodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">
  <description>Approve 2 Step Model</description>
  <author>Tantai Thanakanok</author>
  <version>1.0</version>

  <imports>
    <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
    <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
    <import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm"/>
    <import uri="http://www.alfresco.org/model/system/1.0" prefix="sys" />
  </imports>

  <namespaces>
    <namespace uri="th.co.osdev.model" prefix="osdev"/>
  </namespaces>    
  <types>
    <type name="osdev:submitReviewTask">
      <parent>bpm:startTask</parent>
      <properties>
        <property name="osdev:expiredate">
          <title>Expired date.</title>
          <type>d:date</type>
        </property>            
      </properties>
      <mandatory-aspects>
        <aspect>bpm:assignee</aspect>
      </mandatory-aspects>
    </type>  

    <type name="osdev:reviewTask">
      <parent>osdev:submitReviewTask</parent>
      <overrides>
        <property name="osdev:expiredate">
        </property>
      </overrides>
      <mandatory-aspects>
        <aspect>bpm:assignee</aspect>
      </mandatory-aspects>
    </type>

    <type name="osdev:approveTask">
      <parent>osdev:reviewTask</parent>
      <overrides>
        <property name="osdev:expiredate">
        </property>
      </overrides>
    </type>

  </types>  
</model> 

code ด้านบนนี้เป็นแค่ตัวอย่างเท่านั้น โดย code ดังกล่าวจะไป map กับ jPDL ที่เราวาดหลังจากนี้


เมื่อใส่ code ด้านบนนี้เสร็จแล้วให้กด Finish เพื่อไปยังหน้าถัดไป 
ในหน้า Modify Content Properties ให้เลือก Model Activate ด้วยจากนั้นกด OK
  • ขั้นตอนที่ 2 : สร้าง Workflow Resource Bundle
ให้ไปสร้างไฟล์ที่ Company Home > Data Dictionary > Messages โดยใส่ค่าดังนี้
  1. Name: ชื่อของไฟล์.properties เช่น leknarm-messages.properties
  2. Type: เลือกเป็น Content
  3. Content Type: เลือกเป็น Plain Text
ในหน้า Enter Content ให้ใส่ค่า
osdev_reviewApprove.workflow.title= Osdev Review , Approval of content
osdev_reviewApprove.workflow.description= Osdev Review , Approval of content
osdev_reviewapprovemodel.type.osdev_submitReviewTask.title=Start  Review
osdev_reviewapprovemodel.type.osdev_submitReviewTask.description=Submit documents for review & approval
osdev_reviewapprovemodel.type.osdev_reviewTask.title=Review
osdev_reviewapprovemodel.type.osdev_reviewTask.description=Review Documents to Approve or Reject them
osdev_reviewapprovemodel.type.osdev_approveTask.title=Approve
osdev_reviewapprovemodel.type.osdev_apporveTask.description=Approve to Finishing Documents 
เมื่อใส่ค่าเสร็จแล้วให้กดปุ่ม Finish
ใน่ส่วนของ ไฟล์ Resource Bundle นั้นเราจำเป็นต้อง deploy ด้วยมือ ไม่มี option ที่จะ deploy อัตโนมัติ ดังนั้นให้เราไปที่ url
http://<host>:<port>/alfresco/faces/jsp/admin/repoadmin-console.jsp 
แล้วพิมพ์
reload messages leknarm-messages
  • ขั้นตอนที่ 3 : สร้าง Process Definition
โดยปกติแล้ว การสร้าง Process Definition เท่าที่ทราบ จะสามารถสร้างได้ 2 วิธีคือ 1 สร้างโดยการ import ไฟล์ process definition แล้ว deploy แบบ manual แต่วิธีที่ผมจะใช้นั้นคือการ deploy โดยใช้งาน eclipse ครับ

ใน part นี้ผมขอยกตัวอย่าง การสร้าง jPDL ครับเนื่องจากถ้าลากยาวไปถึงการติดตั้งจะทำให้ยาวเกินไป ขอแยกการติดตั้งไปเป็นอีก part ละกันครับ

ให้สร้างไฟล์ process definition ที่มีรูปแบบดังตัวอย่างด้านล่างนี้


จากนั้นในส่วน code ให้ใส่ค่าตามนี้ครับ

<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="osdev:reviewApprove">

    <swimlane name="initiator"></swimlane>
    
    <swimlane name="reviewer">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{bpm_assignee}</actor>
        </assignment>
    </swimlane>
    
    <swimlane name="approver">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{bpm_assignee}</actor>
        </assignment>
    </swimlane>

    <start-state name="start">
        <task name="osdev:submitReviewTask" swimlane="initiator"></task>
        <transition to="review"></transition>
    </start-state>


    <task-node name="review">
        <task name="osdev:reviewTask" swimlane="reviewer"></task>
        <transition to="approve"></transition>
    </task-node>

    <task-node name="approve">
        <task name="osdev:approveTask" swimlane="approver"></task>
        <transition to="end"></transition>
    </task-node>


    <end-state name="end"></end-state>

</process-definition>

เมื่อวาด diagram และใส่ code เรียบร้อย ให้ไปที่ Tab Deployment ในส่วนของ Deployment Server Setting ให้ใส่ค่าตามนี้
  1. Server Name: server ของท่านเช่น localhost
  2. Server Port: ให้ใส่ 8080 หรือว่า port ที่ตั้งค่าไว้
  3. Server Deployer: ให้ใส่เป็น /alfresco/jbpm/deployprocess
จากนั้นให้ลองกด Test Connection... ดูว่า connection เราเปิดไว้หรือยัง หาก error ให้ตรวจสอบดูว่าเรา start alfresco หรือยังหรือว่ามีการใส่ค่าอะไรผิดพลาดหรือไม่ จากนั้นกด Deploy Process Archive
  • ขั้นตอนที่ 4 : แก้ไข config ให้ display workflow image 
ขั้นตอนนี้ ทำแค่ครั้งแรกครั้งเดียวเท่านั้นครับ โดยให้ไปที
$ALF_ROOT/tomcat/webapps/alfresco/jsp/workflow/start-workflow-wizard/workflow-options.jsp
และ
$ALF_ROOT/tomcat/webapps/alfresco/jsp/workflow/manage-task-dialog.jsp
ให้แก้ไข code จาก
<a:panel rendered="false" id="workflow-outline" label="#{msg.workflow_outline}" progressive="true" expanded="false"
border="white" bgcolor="white" titleBorder="lbgrey" expandedTitleBorder="dotted" titleBgcolor="white" styleClass="mainSubTitle">
เป็น
<a:panel rendered="true" id="workflow-outline" label="#{msg.workflow_outline}" progressive="true" expanded="true"
border="white" bgcolor="white" titleBorder="lbgrey" expandedTitleBorder="dotted" titleBgcolor="white" styleClass="mainSubTitle">
  • ขั้นตอนที่ 5 : สร้าง Alfresco Exploror Task Dialog
ให้สร้างไฟล์ web-client-config-custom.xml ไว้บนเครื่องของเราโดยมี code ดังนี้

<alfresco-config>

<config evaluator="node-type" condition="osdev:submitReviewTask" replace="true">
    <property-sheet>
        <show-property name="osdev:expiredate" display-label="Expired Date"/>
        <show-association name="bpm:assignee" display-label-id="wf_reviewers" />
    </property-sheet>
</config>

<config evaluator="node-type" condition="osdev:reviewTask" replace="true">
    <property-sheet>
        <show-property name="osdev:expiredate" display-label="Expired Date"/>
        <show-association name="bpm:assignee" display-label-id="wf_approver" />
    </property-sheet>
</config> 

<config evaluator="node-type" condition="osdev:approveTask" replace="true">
    <property-sheet>
        <show-property name="osdev:expiredate" display-label="Expired Date"/>
    </property-sheet>
</config> 

</alfresco-config>
เมื่อใส่ code เสร็จเรียบร้อยให้ไปที่ Company Home > Data Dictionary > Web Client Extension จากนั้นให้  Add Content โดยเลือกไฟล์ที่เราเพิ่งสร้าง แล้วกด Next จน Finish

จากนั้นเราต้อง deploy Web Client Extension เองโดยไปที่ url
http://<host>:<port>/alfresco/faces/jsp/admin/webclientconfig-console.jsp
แล้วพิมพ์คำว่า reload

เมื่อเสร็จขั้นตอนที่หมดแล้ว ให้ลอง logout ออกมาครั้งนึงก่อน จากนั้น login เข้าไปใหม่และให้ลอง test โดยการรัน workflow จากไฟล์ หรือจากที่ใดก็ได้ จะสังเกตุว่ามี custom workflow ที่เราเพิ่งสร้างเกิดขึ้นมาครับ

ที่มา - หนังสือ Alfresco 3 Enterprise Implementation

Blogroll

About