K2 Role Refresh with Worklist

ใน workflow ของ K2 ส่วนของ User Task (ถ้าใน K2 blackpearl จะเป็น Client Event) เราจะสามารถ set ได้ว่า จะส่งงานไปหาใครบ้าง?

ใน K2 Five เราจะเรียกว่า Recipients ส่วนใน K2 blackpearl จะเรียกว่า Destination Rule

Recipients

เราจะ configure การส่งงานได้ตามนี้ (เรียงจากบนลงล่างตามรูป)

  • User

เป็น user อะไรก็ได้ที่ K2 มองเห็น อาจจะมาจาก AD, SQL, LDAP etc.

การส่งงานไปให้ จะเป็นการส่งให้ user เดียวเท่านั้น

  • Group

เป็น group อะไรก็ได้ที่ K2 มองเห็น ปกติก็จะมีแต่ AD Group แต่ก็มาจากอย่างอื่นได้ ถ้า identity provider นั้นมี group (SQL ของ K2 ก็มี group นะครับ แต่ไม่ค่อยมีคนใช้)

K2 จะวิ่งไปดูใน identity provider ว่า ใน group นี้มี user อะไรอยู่บ้าง และส่งงานไปให้ user ทั้งหมดที่อยู่ใน group นั้น แต่ถ้ามีการเปลี่ยนแปลง user ใน group หลังจากส่งงานไปแล้ว ก็จะไม่มีผลต่องานที่ส่งไปแล้ว จะมีผลกับงานที่ส่งใหม่หลังการเปลี่ยนแปลงเท่านั้น

  • Role

Role ที่สร้างไว้ใน K2 เดี๋ยวเราค่อยมาดูในรายละเอียดด้านล่างกันอีกทีว่า มาจากอะไรได้บ้าง

ในส่วนของการส่งงานจะเหมือนกับ Group ที่ K2 จะไปดูใน identity provider ว่า มี user อะไรบ้าง แต่จะต่างกันตรงที่มี option ให้ K2 ไปดูว่า มีอะไรเปลี่ยนแปลงใน Role นี้ไหม ถ้าเปลี่ยนแปลง K2 จะเปลี่ยนแปลงการส่งงานให้

  • SmartObject

สามารถดึง username มาจากข้อมูลที่เราเก็บไว้ (อาจจะอยู่ใน table หรืออื่นๆ) มาใส่เป็นการส่งงานในนี้ได้

การส่งงานของแบบ SmartObject K2 จะไป execute SmartObject ที่เราเลือกไว้ และเอาชื่อ user มาส่งงาน

Role Member Assignment

ก่อนจะไปดู feature ของ Role กันต่อ เรามาดูกันก่อนว่า เราสามารถใส่อะไรเป็น member หรือคนที่อยู่ใน Role นี้ได้บ้าง?

ใน Role เราสามารถ add member ได้ 2 แบบคือ User กับ Group ตามรูปด้านล่าง

Role’s member user type

กับอีกส่วนคือ สามารถเลือกได้ว่า จะเอา user มาจาก identity provider อันไหน

Role’s member user security label

แสดงว่า ใน Role เราสามารถ add user หรือ group จาก identity provider ไหนก็ได้ที่ K2 รู้จัก

Role Additional Feature

ทีนี้เรามาพูดถึง feature ที่ Role มีแต่ Recipients แบบอื่นๆ ไม่มีกันบ้าง นั่นคือ ให้ K2 ไปดูการเปลี่ยนแปลง member ใน Role และส่งงานเพิ่ม หรือดึงงานกลับ โดยดูจากการเปลี่ยนแปลงที่เกิดขึ้น

Feature ที่ว่า คือ “Refresh with worklist” นั่นเอง ถ้าใน K2 blackpearl เราจะเรียกว่า “Dynamic” ทั้งคู่ทำงานแบบเดียวกัน ดังนั้นสิ่งที่เขียนใน blog นี้ใช้ได้ทั้งของ K2 Five และ K2 blackpearl นะครับ

Roles List

โดยการเปลี่ยนแปลงที่ว่า มีด้วยกัน 2 แบบ

  • ถ้าเพิ่ม member เข้าไป K2 จะส่งงานไปให้ member คนที่ถูกเพิ่มเข้ามา
  • ถ้าเอา member ออกไป K2 จะดึงงานออกจาก member คนที่ถูกเอาออก

การส่งงานเพิ่ม หรือดึงงานออกจะมี condition เพิ่มเติมอีกหน่อยคือ

  • ในกรณีที่ user กดรับงานไปแล้ว ถ้า user นั้นถูกลบออกจาก Role งานจะไม่ถูกดึงออกไป จะยังคงอยู่กับ user นั้น
  • ในกรณีที่ user ยังไม่ได้กดรับงาน แต่เห็นงานใน worklist แล้ว ถ้า user นั้นถูกลบออกจาก Role งานจะหายไปจาก worklist ของ user นั้น

การส่งงานเพิ่ม หรือดึงงานออก จะไม่ได้ทำแบบ real time แต่จะมีระยะเวลาที่ K2 จะเข้าไปดูการเปลี่ยนแปลงใน Role อยู่ โดยสามารถดูได้จากเมนู Roles ของ Process ใน K2 Management Site (Workflow Server -> Workflow -> [Workflow Name])

Workflow Roles Setting

โดย option ที่เรา set ได้จะมี 2 อย่างคือ

  • Interval — ระยะเวลาที่ K2 จะเข้าไปดูการเปลี่ยนแปลง Role มีหน่วยเป็นวินาที แนะนำให้กำหนดเป็นอย่างต่ำ 4 ชั่วโมงขึ้นไป เพราะถ้าเรากำหนดน้อยๆ K2 จะทำงานเยอะขึ้น
  • Refresh with worklist — สามารถกำหนดได้ว่า จะใช้ Feature นี้ไหม ถ้าใน global role เป็น Refresh with worklist แต่ใน workflow นี้ เราไม่อยากใช้ Feature นี้ก็ให้เอาออก

Caution!!!

จากที่เขียนไปด้านบน การใช้ Feature นี้ก็ค่อนข้างสะดวกนี้ เพราะงานจะเปลี่ยนแปลงแบบ dynamic แต่ก็แลกมากับการทำงานของ server จะหนักขึ้น เพราะต้องมีการตรวจสอบบ่อยๆ ว่า มีใครเปลี่ยนแปลงใน Role บ้าง ดังนั้นถ้าจะใช้ Feature นี้ ก็ควรดูตาม requirement ให้ดีว่า ต้องใช้จริงๆ หรือไม่ครับ