How to update Folio from workflow management dll

พอดีได้ Requirements จากลูกค้ามาว่า ต้องการที่จะ Update Folio ของ Process Instance ที่วิ่งอยู่ในกระบวนการ เพื่อให้คนที่ได้รับงาน สามารถรับทราบถึง Status ของงานผ่าน Folio ได้ จึงได้มาศึกษาเรื่องของการใช้ dll เพื่อไป Update Folio

ซึ่ง dll ที่จะต้องใช้มีประมาณนี้ครับ

  • SourceCode.HostClientAPI เอาไว้ใช้ในการสร้าง Connection String และ Open Connection ไปหา K2 Server
  • SourceCode.SmartObject.Client เอาไว้ใช้ Query ข้อมูล SmartObject
  • SourceCode.Workflow.Client เอาไว้ใช้ในการเข้าถึงข้อมูลของแต่ Process Instance เพื่อทำการ Update ค่าต่างๆ
  • SourceCode.Workflow.Management เอาไว้ใช้ในการจัดการ Process Instance เช่น Start, Delete Process

ใน Requirements นี้ ได้ตัดสินใจไปใช้แนวทางสร้าง Custom Assembly ขึ้นมา เพื่อทำการ Update ครับ

เริ่มแรก เมื่อเราสร้าง Class Library project ขึ้นมาแล้ว ก็ให้ Add Reference ที่บอกข้างต้น โดย dll เหล่านี้ อยู่ที่ %K2_Home%/Bin

ต่อสร้าง ConnectionString จาก Object SCConnectionStringBuilder ประมาณนี้

SCConnectionStringBuilder K2Con = new SCConnectionStringBuilder();
K2Con.Host = “localhost”;
K2Con.Port = 5252;
K2Con.IsPrimaryLogin = true;
K2Con.Integrated = true;

สังเกตว่าจะใช้ Port 5252 เพราะว่า Port 5252 นี้จะเชื่อมต่อกับ Port Workflow Management

ในกรณีที่เราต้องการเชื่อมต่อ SmartObject ก็ใช้ Port 5555 ตามปกติครับ

หลังจากนั้นทำการเปิด Connection ไปหา K2 Server ด้วย Connection String ที่ set ไว้

SourceCode.Workflow.Client.Connection connection = new SourceCode.Workflow.Client.Connection();
connection.Open(“localhost”, K2Con.ToString());

ต่อมาก็ get Process Instance ที่ต้องการ โดยจะต้องอ้างอิง ID แล้วก็สั่ง update ได้ตรงๆเลย

SourceCode.Workflow.Client.ProcessInstance processInstance = connection.OpenProcessInstance(processInstanceID);
processInstance.Folio = “NEW FOLIO”;
processInstance.Update();

สุดท้ายอย่าลืม add try catch แล้วก็ปิด Connection ทุกครั้งด้วยนะครับ

พอเราได้ dll ตัวนี้มาแล้ว ก็เอาเข้าไป Register กับ EndPointAssembly แล้วก็สร้าง SmartObject มาใช้งานได้เลย

ของแถม

บางกรณีเราต้องการ Delete Process Instance บ้าง วิธีทำก็คล้ายๆข้างต้นเลยครับ แต่ต้องใช้ SourceCode.Workflow.Management เพราะเป็นตัวจัดการ ของแต่ละ Process Instance

วิธีทำก็สร้าง Connection String และ  Open Connection คล้ายๆเดิม

SourceCode.Workflow.Management.WorkflowManagementServer wms = new SourceCode.Workflow.Management.WorkflowManagementServer();
wms.Open(K2ConProcess.ToString());

หลังจากนั้นก็ลบได้เลยยยยยย

wms.DeleteProcessInstances(deleteProcessInstanceID, true);

วันนี้ก็พอแค่นี้ครับ น่าจะสามารถ update folio, ลบ Process Instance ผ่าน dll กันได้ล่ะ

Advertisements