ขั้นตอนการสร้าง 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 แล้วใส่ค่าตามนี้
- Name: ใส่ชื่อของ Model เช่น leknarmModel
- Type: เลือกเป็น Content
- 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 โดยใส่ค่าดังนี้
- Name: ชื่อของไฟล์.properties เช่น leknarm-messages.properties
- Type: เลือกเป็น Content
- 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 ให้ใส่ค่าตามนี้
- Server Name: server ของท่านเช่น localhost
- Server Port: ให้ใส่ 8080 หรือว่า port ที่ตั้งค่าไว้
- 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