[BPMN] ลองใช้ Process ที่ได้เพิ่งสร้างกัน

จาก Blog ตอนก่อนหน้าที่เราได้ทำอะไรไปหลายๆอย่าง ทั้ง

มาใน Blog ตอนนี้ เรามาใช้ ลองเป็น End-User ของ Process ที่ทำครับ โดยหลังจาก Deploy Process เราต้องเข้าในส่วนของ Activiti Task กันครับ มาทวนภาพรวม Process กันก่อนครับ ดังรูป

เริ่่มลองใช้งาน Process โดยต้อง Login เป็น User ที่อยู่ใน Group Employee ครับ

สวมบทบาทเป็น Employee  กันครับ

  • Login เข้าระบบด้วย User ที่อยู่ใน Group Employee ครับ
  • เข้ามาที่ เลือก Task App ครับ
  • มา Start Procrss ที่ Deploy ไว้กันเลย
  • เจอ Process ที่สร้างไว้แล้ว เลือกเลยครับ
  • ตรงนี้ เราเห็นแล้วว่า Active Process ขึ้นมาแล้วครับ

    • ถ้ากด Show Diagram เห็นว่า Task นี้ ยังอยู่ที่ Employee Request Budget ครับ
  • ถ้าต้องการทำ Task ใน Process นั้น ให้ Double Click ที่ Active ซึ่งถ้าต้องการทำ Process ต่อก็สามารถกด Claim ได้เลยครับ
  • จากนั้นกรอกข้อมูลที่จำเป็นลงไปครับ
  • พอกลับมาดูที่ Process ตอนนี้ Active Task อยู่ที่ Manager แล้วครับ

    • ถ้ากด Show Diagram เห็นว่า Task นี้ ยังอยู่ที่ Manager Review / Approve ครับ เพราะ วงเงินที่ขอไว้เกินกำหนด 1,000 บาท
  • สังเกตุดีๆครับ ตอนนี้ Assigned to nobody ครับ ให้เพิ่มคนที่อยู่ในกลุ่ม Manager ดังนี้
    • เลือก Involve someone else and start collaborating
    • จากนั้นเลือก User ในกลุ่ม Manager ครับ

Manager เข้ามา Claim Task ว่าจะอนุมัติ หรือไม่ ?

  • Login เข้าระบบด้วย User ที่อยู่ใน Group Manager ครับ
  • พอเข้ามาที่ Task App จะเจอว่ามี TaskManager Review / Approve รออยู่ครับ
  • Manager Claim Task นั้นไปครับ
  • ปรากฏว่า Manager ไม่อนุมัติ (แล้วจะทำอย่างไรต่อ !!!)
  • ตอนนี้ Process เลย วนกลับไปที่ Employee ให้ใส่ข้อมูลวงเงินมาใหม่

เมื่อ Employee แก้ข้อมูลใหม่ แล้วส่งงานกลับมาให้ Manager

  • ตอนนี้ ถ้าสังเกตุ Complete Task หลังจาก Employee ใส่ข้อมูลมาใหม่แล้ว
  • หลังจาก Manager อนุมัติแล้ว งานส่งต่อไปให้กับฝ่ายบัญชี-การเงินครับ

เมื่อฝ่ายบัญชีจัดการเสร็จแล้ว จบกระบวนการ

  • Login เข้าระบบด้วย User ที่อยู่ใน Group Accountant ครับ
  • พอมาดูที่ Task Manager ส่งงานมาให้แล้วครับ (เพราะ วงเงินที่ขออนุมัติแล้ว)
  • จากนั้น Claim Task
  • แต่เนื้องจาก Task นี้เป็น Task สุดท้ายแล้ว และก็ไม่มีิ Process อะไร นักบัญชีเลยกด Complete Task ไปครับ

จบไปแล้วกับ Blog เรื่องยาวครับ แม้ว่า Process ที่ทำเป็น Demo อาจจะไม่สมจริงเท่าไหร่นะครับ หากทุกท่านอ่านแล้วสงสัยอะไร สามารถทักมาได้ หรือทวงติงกรณีที่ผมเขียนผิดครับ ^__^

 

 

[BPMN] ลองเอา Process ที่ทำมา Deploy ขึ้นกัน

จาก Blog ก่อนหน้านี้ที่ได้ลองสร้าง Process ไปแล้ว คราวนี้ลองเอา Process ที่ทำ มาผูกให้เป็น Application โดยใช้ Activiti-App ตัว Kick Start ครับ เนื่องจาก Form ที่ทำโดยใช้ Activiti Designer ยังไม่สมบูรณ์ครับ เลยต้องเอามาปรับปรุงใน Kick Start  โดยการเพิ่ม Form ลงไป เพราะใน Process ที่ทำไว้ก่อนหน้านั้น เราได้กำหนดแค่ภาพรวม Workflow ไว้แล้ว

จริงๆมาสร้าง Workflow ในตัว Kickstart ได้เลยนะ ไม่ต้องผ่านตัว Eclipse Designer ก็ได้ครับ

เพิ่ม User และ Group ที่เกี่ยวข้อง

  • ถ้าดูจาก Process ได้สร้างขึ้นมา มีกลุ่มคนที่เกี่ยวข้องอยู่ 3 กลุ่ม ได้แก่ Accountant, Employee และ Manager ตามรูปเลย
  • สิ่งที่ต้องทำ คือ ทำให้ User และ Group เหล่านี้ มีตัวตนจริงๆ บน BPMN Engine โดยการเพิ่มเข้าไปในส่วนของ Identity management จากตัว Activiti-App เข้าทาง localhost:8080/activiti-app (ถ้ามีการเปลี่ยน Port หรือ URL ปรับแก้ให้ตรงกับที่ติดตั้งด้วย)
    • เพิ่ม User อันนี้ยัดได้ตามใจเลย
    • เพิ่ม Group ได้แก่ Accountant, Employee และ Manager
  • ถ้าทำตามนี้มี User ในแต่ละ Group ประมาณนี้

มาปรับ Process ให้ตามขั้นตอน ดังนี้

  • เพิ่ม GUI Form
    • ใน Activity Employee Request Budget สำหรับ Employee ในกรอกจำนวนเงินที่ต้องการขอเบิก
      • เลือก Activity ก่อน มาดูในส่วนของ Panel ข้างล่าง เลือก Reference Form
      • เลือก New Form
      • จากนั้นลาก Number Control
      • และกำหนด Property ตามรูป
      • **ข้อควรระวัง: ให้กำหนด Id ของ Control ให้ตรงกับ Condition ที่เขียนไว้ ซึ่งที่ส่วนที่นำไปใช้ต่อ คือ Sequence Flow ที่มี Conditional Expression ดังนี้
      • จากนั้นกด Save
    • ใน Activity  Manager Review / Approve สำหรับให้ Manager ตรวจทาน และอนุม้ติ ผลการร้องขอเบิกเงิน
      • เลือก Activity ก่อน มาดูในส่วนของ Panel ข้างล่าง เลือก Reference Form
      • เลือก New Form
      • จากนั้นลาก Drop Down Control
      • และกำหนด Property ตามรูป
      • อย่าลืมใส่ Option Value เพื่อเอาไปใช้งานกับ Sequence Flow ต่อไป
      • จากนั้นกด Save
  • ปรับเรื่อง Owner ในแต่ละ Actvity ให้ลงตาม Group – ในที่นี้ยกตัวอย่างของ Activity  Accountant Acknowledge โดยต้องให้ User ที่อยู่ในกลุ่ม Accountant เข้ามาจัดการครับ ส่วนที่ Group เหลือ Employee และ Manager ลองปรับตามได้
    • เลือก Activity  Accountant Acknowledge  ก่อน มาดูในส่วนของ Panel ข้างล่าง เลือก Assignments
    • โดยเจ้า Assignments เลือกได้ 2 แบบ
      • Fixed Values – กำหนดค่าลงไปเลย
      • Identity Store – ใช้ User & Group ที่ได้สร้างในตัว  Identity management โดยในที่นี้ใช้วิธีการนี้
    • กำหนด Candinate Group
    • เลือก Group ที่ต้องการในที่นี้ กลุ่ม Accountant

แปลง Process เป็น App เพื่อ Deploy

  • ใน Activiti-App ในส่วน KickStart ให้เลือก App จากนั้นเลือก Create App
  • กำหนดข้อมูลทั่วไปของ App จากนั้นกด Create ดังรูป
  • กำหนดสี และรูป
  • รวมถึง Process Definiton ที่ต้องการใช้
  • กด Save มีให้แก้ข้อมูลของ App รวมถึงการกด Publish เพื่อประกาศใช้งาน

หลังจาก Deploy (Publish Process ขึ้นไปแล้ว) ต่อไปจะเป็น Blog ที่ลอง Execute Process ที่ได้สร้างขึ้นมาครับ

 

[BPMN] Activiti สร้าง Unit Test

หลงจาก Blog ตอนที่แล้ว ที่ได้สร้าง Process ของการขอเบิกเงินไปแล้ว ตอนนี้เราต้องมา Proof ก่อนว่า Process ที่ทำนั้น มันใช้งานได้จริงๆ พร้อมที่นำไป Deploy ขึ้น Activiti Server ครับ โดยมีขั้นตอน ดังนี้

Step 1 : กำหนดโครงสร้างไฟล์ที่เกี่ยวข้องกันก่อน

Step 2 : สร้างไฟล์ Config ที่เกี่ยวข้อง

  • สร้างไฟล์แปลง Activiti Project ให้เป็น Maven Project ซึ่งมีไฟล์ pom.xml เพื่อเก็บ Dependency ต่างๆไว้ โดยสำหรับการ Test BPMN ต้องใช้ Dependency ที่จำเป็น ดังนี้
    • activiti-engine : สำหรับ Execute BPMN
    • JUnit : สำหรับทำ Unit Test
    • MySQL Connector/J : ใช้เชื่อมต่อ Database ของ activiti-engine
    • spring framework [Optional] : ในกรณีที่ต้องการใช้ Activiti กับ Spring
    • และสุดท้าย หน้าตาของไฟล์ pom.xml มี Dependency ดังนี้ครับ
  • สร้างไฟล์ activiti.cfg.xml โดยมีการกำหนดค่า ดังนี้

Step 3 : เอาไฟล์ Process มาใส่

  • เอาไฟล์ Process ที่ทำไว้ จาก Blog ตอนที่แล้วจะเป็นไฟล์ Test.bpmn เอามาวางไว้ที่ Path .../src/test/resources/ ดังรูป
  • หรืออาจจะอ้างไปที่ Path ของ project เลยก็ได้ครับ เช่น

Step 4 : สร้าง Unit Test ขึ้นครับ

  • ตั้งโครงใหม่ ให้มันเข้ากับ Activiti 6.0 และ JUnit 5 กันก่อนครับ

โดยใช้ Test แบ่งเป็นช่วงๆ ดังนี้

  • ส่วน @BeforeAll – ทำงานตอน Execute Test ครั้งแรก โดยสร้าง ActivitiRule ขึ้นมา เพื่อเตรียม Activiti-Engine ให้พร้อม
  • ส่วน @BeforeEach และ @AfterEach เป็นส่วนที่ทำงานก่อน และหลัง Test Case แต่ละอัน
    • @BeforeEach – ในที่นี้เป็นการ Deploy Process ที่เพิ่งสร้าง ให้ Activiti-Engine รู้จัก
    • @AfterEach – ในที่นี้เป็นการ ลบ หรือ Clear Process ที่เพิ่ง Deploy ออกจาก Activiti-Engine รู้จัก
  • ส่วน @Test เป็น Test Case ที่เตรียมไว้ ซึ่งมี 5 Test Case ดังนี้
    • TC1 test1ProcessIsStart – บอกว่า Process ที่ Deploy ไปพร้อมใช้งาน หรือไม่ ?
    • TC2 test2AssignValueInVariableBudgetAmount – ตอนที่สร้าง Process ขึ้นมา เราได้ยัดค่าตัวแปร BudgetAmount ลงไป โดยใน Test Case ดูจะดูว่า มันสามารถดึงค่าที่ได้ Pass เข้าไปได้ หรือไม่
    • TC3 test3AssignValueInVariableApproved – ตอนที่สร้าง Process ขึ้นมา เราได้ยัดค่าตัวแปร Approved ลงไป โดยใน Test Case ดูจะดูว่า มันสามารถดึงค่าที่ได้ Pass เข้าไปได้ หรือไม่
    • TC4 test4WhenEmployeeNeedBudgetMoreThan1K – ทดสอบตาม Scenario ที่ได้กำหนดไว้ ดังรูป
      โดย Code สำหรับทดสอบสามารถเขียนได้ ดังนี้
    • TC5 test5WhenEmployeeNeedBudgetLessThanOrEqual1K – ทดสอบตาม Scenario ที่ได้กำหนดไว้ ดังรูป
      โดย Code สำหรับทดสอบสามารถเขียนได้ ดังนี้

Step 5 : ทดสอบ Run Unit Test

  • คลิกขวาที่ UnitTest เลย ชื้อไฟล์ จากนั้น Run As >> JUnit ซึ่งทำเขียน Test ถูกต้อง ได้ผลลัพธ์ ดังนี้

ปัญหาที่เกิด

  • ทดสอบ Run Test แล้วเจอ Error java.lang.NoClassDefFoundError สามารถแก้ไขโดยเพิ่ม JUnit ที่ Java Build Path ดังรูป
  • ตอนนี้ตัว Activiti Framework ยังไม่รองรับ JUnit 5 นะครับ วิธีที่ผมแก้ มันแก้แบบลูกทุ่งไปก่อน เพราะ ตัว Class AcitiviRule มันช่วยทำให้ Test ได้ง่ายขึ้น
  • ลำดับของการ Execute Test ของ JUnit มันมั่วมากครับ