จากบทความที่ผ่านมาเรื่อง “การสร้าง Workflow โดย Activiti” นั้น ผมได้พูดถึงการติดตั้ง Activiti Workflow Engine การติดตั้ง Activiti Designer ผ่าน Eclipse ตลอดจนถึงการสร้าง Workflow ง่ายๆ ขึ้นมาใช้งานผ่าน Activiti Explorer นะครับ ในบทความนี้ผมจะพูดถึง การสร้าง Form และ Workflow ที่ซับซ้อนขึ้นเพื่อใช้ใน Alfresco การนำเอา Business Rule เข้ามาประยุกต์ใข้งานใน Alfresco ตลอดจนถึงการเขียน Java ใน AutoTask การเขียน Java Script เข้าไปยัง Workflow อีกด้วย

สำหรับ Workflow ของ Alfresco ใน Version 4.0 นั้น เป็นที่รู้กันว่าได้มีการเปลี่ยนครั้งใหญ่ คือ เปลี่ยน Workflow Engine จาก jBPM ซึ่งใช้กันมาตั้งแต่ Version แรกๆ เป็น Activiti Workflow Engine ซึ่ง Alfresco ได้เป็น Sponsor รายใหญ่ในการสร้าง Activiti Workflow Project ขึ้นมา โดย Workflow Engine ที่พัฒนาขึ้นมานั้น Compile ตาม BPMN 2.0 ซึ่งเป็นมาตรฐานในการออกแบบ Workflow

เอาหละครับมาถึงเวลาที่เราจะมาสร้าง Workflow เพื่อใช้งานใน Alfresco กันจริงๆ แล้วครับ โดยผมขอสมมุติ Case ขึ้นมา ดังนี้นะครับ ผมจะสร้าง Workflow ขออนุมัติการสั่งซื้อ ซึ่งคนที่ขออนุมัติจะต้องส่งเรื่องไปยังหัวหน้างาน จากนั้นหัวหน้างานจะส่งไปยังแผนกจัดซื้อนะครับโดยระบบจะดูจากยอดเงินถ้ามากกว่าหรือเท่ากับ 100,000 บาท ให้ส่งไปให้ MD Approved ก่อน แต่ถ้าน้อยกว่า 1000,000 บาท ให้ส่งไปที่เจ้าหน้าที่จัดซื้อได้ทันที ในแต่ละขั้นตอนจะมีการกำหนดการเข้าถึงข้อมูลที่แตกต่างกันนะครับ ดังรูปนะครับ

งานที่เราจะต้องทำมีอยู่หลายส่วนด้วยกันนะครับ ขั้นแรกคงต้องเริ่มจากการ Design Workflowก่อน โดยการใช้งานWorkflow Designerซึ่งจะติดตั้งอยู่ในEclipseนะครับ(ดูการติดตั้งจาก บทความที่ผ่านมานะครับ)

  • จากนั้นทำการสร้าง Activiti Project
  • สร้าง Activiti Diagram ตั้งชื่อ MyWorkflow แล้วทำการลาก Flow ตามรูปทางด้านบนนะครับ
  • โดยวิธีการทำทั้งหมดดูได้จากบทความที่ผ่านมานะครับ ในเรื่อง “การสร้าง Workflow โดย Activiti”

ผมทำให้ดูคร่าวๆ นะครับ โดยการเริ่มจากการลาก Start Event (วงกลมสีเขียว ในแถบของ Palette) มาวางไว้ที่ Flow นะครับ

คลิกที่วงกลม จากนั้นเลือก New User Task

ตั้งชื่อของ Task นะครับ “Section Manager Review/Approve” จากนั้นคลิกที่ Task นะครับ เลือก New Exclusive gateway

คลิกที่ Exclusive Gateway จากนั้นเลือกที่ new user task

ทำ 2 ครั้งนะครับ ตั้งชื่อ Task ต่างๆ ให้เรียบร้อย โดยใส่ Label ต่างๆ ที่ช่องของ Name ดังรูป

ลากเส้น (Create Connection) จาก Task “MD Review/Approve” มาที่ Purchase Staff Acknowledge เพื่อเป็นการกำหนดเส้นทางการอนุมัติ จากนั้นทำการลากเส้นจาก Task “MD Review/Approve” ไปที่ Section Manager Review/Approve เพื่อเป็นการกำหนดเส้นทางการ Reject นะครับ

เมื่อทำเสร็จแล้วจะได้ ดังรูปนะครับ

ตอนนี้เราจะได้ Workflowคร่าวๆ แล้วนะครับ ขั้นตอนต่อไปก็คือ การกำหนดว่าจะให้UserหรือGroupอะไร จะต้องReviewหรือApproveบ้างนะครับ ซึ่งจากWorkflowจะเห็นได้ว่า จะมีกลุ่มคนที่เกี่ยวข้องอยู่4กลุ่มด้วยกันนะครับ คือ

  • คนที่ Start Flow – ให้ชื่อว่า requester นะครับ
  • หัวหน้างานหรือผู้จัดการที่จะ review/approve นะครับ ให้ชื่อว่า manager นะครับ
  • ในกรณีที่ยอดเงินที่ขออนุมัติ 100,000 บาทขึ้นไป งานจะโดนส่งไปที่ MD ให้ชื่อว่า director นะครับ
  • แต่ถ้าน้อยกว่า 100,000 หรือ ในกรณีที่ MD อนุมัติแล้ว จะส่งไปยังแผนกจัดซื้อนะครับ ให้สร้างเป็น Group purchase นะครับ

โดยการสร้าง User และ Group เราจะไปทำการสร้างที่ Alfresco ก่อนนะครับ เข้าไปที่ Alfresco Share ตามนี้เลยครับ

http://localhost:8080/share นะครับ

Login ด้วย User name : admin นะครับ เพื่อไปสร้าง User และ Group ครับ

คลิกที่ +More… เลือก Users นะครับ จากนั้นคลิกที่ปุ่ม New User เพื่อเป็นการสร้าง User ใหม่ครับ

ทำการสร้าง User นะครับ โดยในช่องของ User Name: ให้ใส่ชื่อ User ที่เราต้องการสร้างนะครับ ซึ่งก็คือ requester นะครับ จากนั้น Click ที่ปุ่ม Create User ทำเช่นนี้อีก โดยสร้าง User Name : manager, director, และ purchase_staff นะครับ

ทำการสร้าง Group Purchase โดยคลิกที่ +More… เลือก Groups นะครับ

คลิกที่ปุ่ม Browse จะเป็นการแสดง Group ทั้งหมด

คลิกที่ New Group ดังรูป

ตั้งชื่อ PURCHASE นะครับ ดังรูป

ทำการเพิ่ม User Name “purchase_staff” เข้าไปที่ Group “PURCHASE” โดยการคลิกที่ Group จากนั้นคลิกที่รูป คน ทางด้านขวามือ

ค้นหา purchase_staff จากนั้นคลิกที่ปุ่ม Add

เป็นอันเสร็จขั้นตอนการสร้าง User และ Group ใน Alfresco ที่เกี่ยวข้องกับ Workflow ที่เรากำลังสร้างอยู่นะครับ ขั้นตอนต่อไป เราจะมาทำการกำหนด user/group ที่สร้างขึ้นมา ใน Workflow กันนะครับ

ไปที่ WorkflowในEclipseนะครับ คลิกที่Task “Section Manager Review/Approve” จากนั้นไปที่ Main Config เลือกPerformer type เป็น Assignee ซึ่งหมายถึง กำหนดคนที่จะ Approve งานเป็น User นะครับ ที่ช่อง Expression นั้น ใส่เป็น ชื่อ username ที่เราสร้างใน Alfresco นะครับ ในที่นี้ให้ใส่เป็น manager ครับ

ที่ Task “MD Review/Approve” เลือกเป็น Assignee และ ช่อง Expression ใส่ director นะครับ

ที่ Task “Purchase Staff Acknowledge” เลือก Performer type เป็น Candidate groups (เพราะเราจะส่งงานไปให้ทั้ง Group เลยนะครับ) และที่ช่อง Expression ให้ใส่ GROUP_PURCHASE (เป็นกฎการตั้งชื่อนะครับ “GROUP_” ตามด้วยชื่อ Group ที่สร้างขึ้นใน Alfresco)

ตอนนี้เราได้ทำเสร็จไป 2 ขั้นตอนแล้วนะครับ คือ กำหนดโครงสร้างของ Workflow และ กำหนดคนรับผิดชอบในแต่ละ Task งานไปแล้ว ขั้นตอนต่อไปเราจะสร้าง Form กันนะครับ

โดยก่อนจะทำ E-FormในWorkflowนั้น เรามาวางแผนกันก่อนนะครับว่าจะประกอบไปด้วยFieldอะไรบ้าง ผมขอกำหนดซัก3 Fieldแล้วกันนะครับ คือ

  • Purchase Number (ชนิด text)
  • Supplier Name (ชนิด text)
  • Amount (ชนิด long)

การสร้าง Form ใน Alfresco นั้นจะไม่มี User Interface ที่ง่ายๆ นะครับ ต้อง Config ผ่านไฟล์ XML โดยเริ่มจาก ไปที่ <AlfrescoRoot>/tomcat/shared/classes/alfresco/extension นะครับ (Folder “Extension” เป็น Folder ที่ใช้ในการ customize Alfresco นะครับ มีอะไรจะเข้าไปทำที่ Folder นี้นะครับ)

ภายใต้ Folder extensionจะมีFolderที่สำคัญอยู่3 Folderนะครับ ถ้าไม่มีสร้างขึ้นมาเลย คือ

  • workflows = ไว้เก็บไฟล์ workflow ที่สร้างขึ้นจาก Eclipse
  • model = ไว้เก็บ model หรือว่า Field ต่างๆ ทั้งจาก content model หรือ Workflow Model
  • messages = เก็บ Label ต่างๆ ที่ใช้งาน

สร้างไฟล์ XML ชื่อ my-workflow-context.xml นะครับ (ตอนที่ Alfresco Start Server จะเข้ามาดูว่ามีไฟล์ xxxx–context.xml อะไรบ้าง ถ้าหากว่าเรา Config code ข้างในผิดจะทำให้ Alfresco Start ไม่ขึ้นนะครับ)

เปิดไฟล์ my-workflow-context.xml ขึ้นมา นะครับ ด้วย notepad หรือ text editor ตัวอื่นๆ ก็ได้

ทำการพิมพ์ code เข้าไป ดังนี้นะครับ

อธิบายนิดหน่อยนะครับ

  • บรรทัดที่ 8 บอกว่าใช้ Workflow Engine อะไรนะครับ (สามารถใช้ได้ทั้ง Activiti และ jBPM นะครับ)
  • บรรทัดที่ 9 location เป็นการบอกว่าเราเก็บไฟล์ Workflow ที่สร้างจาก Eclipse ไว้ที่ไหนนะครับ
  • บรรทัดที่ 17 บอกว่าจะเก็บ Workflow Model ไว้ที่ไหน (Web Form ต่างๆของ Workflow นั่นเองครับ)
  • บรรทัดที่ 22 เก็บ Label ต่างๆ ที่จะ Display ที่จะ Display ที่ Alfresco Share ครับ

เมื่อพิมพ์เสร็จแล้ว Save ไฟล์นะครับ

ต่อมาเราจะมาสร้าง Workflow Model กันนะครับ (เป็น Field ที่แสดงใน Workflow ครับ) โดยการเข้าไปที่ extension/model นะครับ สร้างไฟล์ “myProcessWorkflowModel.xml” ขึ้นมา

พิมพ์ Code ตามข้างล่างเลยครับ โดย Code จะแบ่งเป็น 3 ส่วนนะครับ คือ ส่วนแรก จะเป็นการ Import Namespace ที่ต้องการใช้งาน (บรรทัด 9-12) และเป็นการประกาศ Namespace ของ Model ของเรานะครับ ใช้ Prefixว่า my

ส่วนที่สองจะเป็นการ บอกว่า จะให้ประกอบด้วยหน้าตาอะไรบ้างนะครับ ซึ่งเดี๋ยวเราจะนำเอาไปใส่ใน Workflow ในที่นี้ผมให้มี3 typeนะครับ คือ

  • my:myStartTask จะเป็น UI ที่ใช้ในการ Start Workflow นะครับ
  • my:ReviewApproeveTask จะเป็น UI ที่ใช้ในการ Approve/Review นะครับ
  • my:AcknowledgeTask จะเป็น UI ที่ใช้ในขั้นตอนสุดท้ายนะครับ

มีข้อสังเกตนิดหน่อยนะครับ ในแต่ละ Task ผมจะมี parent อยู่ เนื่องจาก Alfresco มองอะไรก็เป็น Object นะครับ Inherit มาได้ตลอด เช่น bpm:startTask นะครับ เป็นการนำเอา Field ที่ใช้ในการ Start Flow มาใช้งานนะครับ ส่วน Fields หรือ Property ต่างๆ ผมใช้เป็น Aspect แทนนะครับ (จะเก็บ Fields ไว้เป็นชุดนะครับ)

ส่วนสุดท้าย จะเป็นการกำหนดว่า ใน WorkflowของเราสจะมีFieldอะไรบ้างนะครับ อธิบายนะครับ

  • บรรทัดที่ 41-53 จะเป็น property ที่เป็นแบบ List ใช้สำหรับในการสร้างปุ่ม Approve หรือ Reject นะครับและใช้เป็นตัวแปรที่บอก Workflow ว่า Approve หรือ Reject นะครับ
  • บรรทัดที่ 54 – 65 จะเป็น property ที่เราสร้างขึ้นมาให้แสดงใน Workflow นะครับ ประกอบด้วย my:prNumber, my:supplierName, my:amount

ในส่วนของ propertyแต่ละตัวจะมีtypeเป็นอะไร จะกำหนดจาก<type></type>นะครับ เช่น

  • <type>d:text</type> ตัวแปรประเภท String นะครับ
  • <type>d:long</type> ตัวแปรประเภท Long นะครับ
  • <type>d:int</type> ตัวแปรประเภท Integer นะครับ

  1. เมื่อพิมพ์เสร็จแล้วให้ Save ไฟล์นะครับ

ต่อมาเราจะมา Config พวก Label ต่างๆ เพิ่มเติมนะครับ โดยเข้าไปที่ extension/messages สร้างไฟล์ชื่อ “myProcessWorkflow.properties” แล้วพิมพ์ Code ตามด้านล่างนะครับ

อธิบายเพิ่มเติมนะครับ

  • บรรทัดที่ 2-3 จะเป็น Label ที่แสดงตอนที่เรา Click ที่ Start Workflow นะครับ ดังแสดงตัวอย่าง ดังรูปด้านล่างครับ

  • บรรทัดที่ 4-6 จะเป็น Label ที่ใช้แสดง Fields ต่างๆใน Workflow ครับ

พิมพ์เสร็จ แล้ว Save ไฟล์ครับ ขั้นตอนต่อไปจะเป็นการจัด Display Form ใน Workflow นะครับ เนื่องจากแต่ละ Task งานนั้น เราสามารถจัดเรียง Field หรือแสดง Field ต่างๆ ได้แตกต่างกัน โดยจะ Config ไว้ที่ <AlfrescoRoot>\tomcat\shared\classes\alfresco\web-extension\ share-config-custom.xml นะครับ

ทำการเปิดไฟล์ share-config-custom.xml นะครับ เพิ่มเติม Codeตามข้างล่างนี้นะครับ โดยCodeข้างล่างจะเป็นตัวที่บอกว่าWorkflowจะมีFieldอะไรบ้าง จัดเรียงแบบไหน โดยใช้Controlอะไร นะครับ อธิบายแบบนี้นะครับ

  • บรรทัดที่ 105 เป็นการบอกให้ Alfresco ใช้ Form นี้ใน Workflow ชื่อ MyWorkflow
  • บรรทัดที่ 108 – 114 เป็นการบอกว่าจะโชวร์ Field อะไรบ้างครับ
  • บรรทัดที่ 115 – 130 เป็นการบอกว่าจะให้แสดงใน Workflow หน่าตาอย่างไร ใช้ Control อะไร นะครับ

เพิ่ม Code อีกนะครับ คราวนี้เป็นในส่วนของ Task ชื่อ myStartTask

เพิ่ม Code ข้างล่างสำหรับ ReviewApproveTask ครับ

เพิ่ม Code ข้างล่างสำหรับ AcknowledgeTask

ต่อไปเราจะทำการใส่ FormKey ที่ Workflow ในแต่ละ Node ดังรูป

ใส่ที่ Task อื่นๆ ด้วยนะครับ เมื่อใส่เสร็จแล้วก็ให้ทำการ Copy ไฟล์ไป Workflow ไปไว้ที่ Tomcat นะครับ คือ Copy จาก Eclipse Workspace ของเราไปไว้ที่ Tomcat ดังรูป


Restart Alfresco Server แล้วลองทดสอบดูนะครับ

Comments are closed.