How to use K2 Menu with Role Permission

ในกรณีปกติแล้ว K2 Menu สามารถกำหนด Permission ในการเห็นแต่ละ Menu ได้ 3 ลักษณะคือ

  1. Everyone
  2. Active Directory Group
  3. Custom Security

Reference: https://www.dropbox.com/s/k5alk0if414lxxz/K2%20Menu%20System%20User%20Manual%20v1.0.1.pdf?dl=0

ซึ่งในบางกรณี เรามีความต้องการที่จะ Set K2 Menu Permission ตาม K2 Roles ที่เรามีการ Set อยู่แล้ว เราจะทำอย่างไรดี

Blog นี้จะเป็น Walk through Step ว่าเราจะเปลี่ยนจาก Custom Security มาเป็น K2 Roles ได้อย่างไร

Assumption

ควรจะมีความเข้าใจการทำงานของ Custom Security ของ K2 Menu ก่อน

K2Menu

หลักการสรุปของ K2 Menu Permission แบบ Custom Security ก็คือ เราสามารถ set ค่าว่าในแต่ละ menu จะต้องมี Custom Security อะไร ตอน Set menu

แล้วก็เราต้องเอาชื่อคนไป Resolve Table Permission อะไรซักอย่างเพื่อดูว่าคนๆนั้นมีค่า Permission ตรงกับ Menu มั้ย เช่น เรา set Menu A มีค่า custom security = 1,2 แล้วเราไป resolve ชื่อคนๆนั้น ว่ามี permission เป็น 1 เมื่อเอา 2 ค่านี้มาเปรียบเทียบกัน คนๆนี้ ก็จะสามารถเห็น Menu A ได้

เมื่อเราเข้าใจหลักการนี้ ก็ง่ายล่ะ เราก็แค่เปลี่ยนค่า 1,2 พวกนั้นเป็นชื่อ K2 Roles แทน แล้วตอน resolve ว่าคนๆนั้นมี permission อะไร ก็ไป resolve ว่าคนๆนั้น อยู่ Role อะไรแทน … เอ้าเริ่ม

  1. เปลี่ยนจากค่า Custom Security เป็นค่า Role โดยไปแก้ที่ K2MenuSystem.Level1MenuItems View โดยให้ไป get ค่า roles แทน ซึ่งอ้างอิง UMRole ได้เลย ฝั่ง setting ก็ทำแค่นี้

GetRoles

UMROLE2.

2. ฝั่ง resolve คนว่าอยู่ group ไหน ต้องอาศัย StoreProcedure นิดหน่อย ซึ่งมีเขียนใน K2Ranger ไว้แล้ว ตามนี้

CREATE PROCEDURE [dbo].[sp_FindRoleByUser] (

@pUserName NVARCHAR(447)

) AS

BEGIN

SELECT i.[Name]

FROM   [K2].[Identity].[Identity] i

INNER JOIN    [K2].[Identity].[RoleItem] r

ON     i.ID = r.IdentityID

WHERE  i.[Type] = 2

AND    r.[FQN] = @pUserName

END

เมื่อเราสร้าง Store Procedure นี้เสร็จ ก็ไปสร้าง SmartObject แล้วก็เอาคนไป Resolve เป็น Role ผ่าน Template View ที่ชื่อว่า K2MenuSystem.UserMemberShipCheck

membershipcheck

เท่านี้ก็ได้แล้ว คือหลังบ้าน set เป็น roles ส่วนหน้าบ้านก็เอาคนไป resolve กลับมาเป็น Roles

ถ้าใครเคยทำ Custom Security แบบปกติ… อ่าน blog นี้ก็น่าจะทำ Custom Security แบบ Roles ได้ไม่ยากเลยยยยย

Advertisements

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 กันได้ล่ะ

ทำหน้า Search View เพื่อสนับสนุนการ Search พร้อมกันหลาย fields ด้วย Store Procedure Smart Object

ในกรณีที่เราต้องการสร้าง Search View จาก Smart Object ของ K2 นั้น ในกรณีปกติ เราก็จะสร้าง list view ซึ่งก็จะสามารถ Search ได้ด้วยการใช้ Filter หรือ Quick Search ที่จะให้เราเลือก Field ได้

แต่ในกรณีที่เราต้องการสร้างหน้า Search form ที่ต้องการให้ Search ได้หลายๆ Field พร้อมกันล่ะ ต้องทำยังไง

เมื่อลองคิดไปคิดมา ก็จะเห็นว่า Solution ที่ตรงไปตรงมาที่สุดก็คือ ไปสร้าง View ที่มี textbox หลายๆตัว แล้วก็เขียน Rules ครอบ ว่าถ้า textbox ไหนมีค่า ก็เอามา AND แล้ว Search พร้อมกัน

แต่เมื่อคิดดีๆ วิธีนี้จะยุ่งยากมาก ตอนที่เขียน rules ยิ่งมี Field เยอะ rules ยิ่ง complex

วันนี้เรามาเสนอทางวิธีการสร้าง Search View แล้วใช้ Store Procedure Smart Object ช่วย

วิธีทำมีดังนี้

  1.  ไปสร้าง Store Procedure ที่รับ Parameter หลายๆ Field ใน MSSQL (ใน SQL Management Studio มี tools ที่ช่วยสร้าง Store procedure อยู่แล้ว)

2. เมื่อเราสร้างและทดสอบ Store procedure ของเราแล้ว ว่าเวลารับ parameter มา query ได้ถูกต้อง งานของเราก็เสร็จไปแล้วกว่า 50%

(ความคิดเห็นส่วนตัว: เราสามารถเขียน Store Procedure handle กรณีที่มีหลายๆ Field ได้ดีกว่าไปเขียน Rules บน K2 เช่น จากตัวอย่างข้างล่าง คือถ้ามีค่า ก็เอาไป And ไม่มีค่า ก็ set เป็น NULL)

3. เรา Create SmartObject ผ่าน Store Procedure ที่เราสร้างผ่าน Smart Object Service Tester (SQL Server Service -> Stored Procedures -> Create Smart Object

4. เมื่อเราได้ Smart Object เราก็ไปสร้าง view ได้ ซึ่งจะมี Method List ไว้ให้เราใช้

5. พอเราสร้าง Form เสร็จ เราก็ไปสร้าง Rules ตอนที่ กด submit Search ให้เอาค่าจาก textbox แต่ละช่องไปเป็น Parameter ใน View ที่เราสร้างมาจาก Store Procedure Smart Object

ซึ่งผลที่ได้ก็คือเป็นการ Execute View Method ที่รับ Parameter ได้หลายตัวนั้นเอง

เราก็เลยทำ Search View แบบหลายๆ Field ได้สะดวกมากๆ

ปล. รูปและเนื้อหาส่วนใหญ่ในนี้เอามาจาก http://community.k2.com/t5/K2-blackpearl/Filter-List-View-based-on-Text-Box-Value/td-p/82761 ซึ่งเขียนดีอยู่แล้ว ไปอ่านกันได้เลย

K2 OnPremise + SharePoint Online

สวัสดีครับชาว K2 Ranger ทุกท่าน

พอดีได้มีโอกาสทำการเชื่อมต่อระหว่าง K2 On Premise กับ SharePoint 365 จึงอยากมาแชร์ช้อมูลครับ

Scenario

  1. มี K2 On Premise
  2. มี SharePoint Team Site อยู่บน Office 365  (เคสนี้ยังไม่ได้ทำ Office 365 เป็นแบบ Hybrid)
  3. ต้องการสร้าง Approval Workflow ในกรณีที่ต้องการเปลี่ยนเบอร์โทรศัพท์ใน Contact List

โดยสิ่งที่เราทำ ก็คือ เราเชื่อมต่อ K2 กับ SharePoint ด้วยการใช้ SharePoint Contant Broker ในการสร้าง Service Instance

K2SPO

ทริกเล็กน้อยคือ การกำหนดค่า “Office 365 – Required”  ให้เป็น “true”  (ค่า default จะเป็น false)

K2SPO-00

หลังจากนั้นก็เหมือนวิธีการปกติเลยครับ ซึ่งจะมีการกำหนด System Name, Display Name, Description, GUID ของ Service Instance แบบที่เคยทำกัน และเราก็จะสามารถสร้าง SmartObject เชื่อมต่อกับ List บน SharePoint Online ได้แล้ว

K2SPO-01

ซึ่งนี้เป็นขั้นตอนที่สำคัญที่สุดแล้วครับ หลังจากการเชื่อมต่อได้แล้ว เราก็จะสามารถเชื่อมกับ List ผ่าน SmartObject ได้ พอเราสร้าง SmartObject ในการเชื่อมต่อได้แล้ว สิ่งที่เหลือก็เพียงแค่การสร้าง SmartForm, Workflow บน K2 On Premise ครับ

K2SPO-02

เพียงเท่านี้ เราก็สามารถ update ค่าจาก K2 SmartForm ของเราไป Update ค่าบน SharePoint 365 ได้ล่ะ

K2SPO-04

K2SPO-03

หวังว่าจะมีประโยชน์บ้างครับ กับลูกค้าที่มี K2 และใช้ SharePoint Online หรือ Office 365

Amornthep Chanajarunwit

Business Development Consultant

[Smart Object] – K2 & MySQL (แบบไทย)

 

สวัสดีครับ ก่อนอื่นต้องขอต้อนรับ นักเขียนหน้าใหม่ ซึ่งขอเป็น Ranger สีดำ คุณโอ๋ แห่งค่าย Venteck นะครับ พอดีคุณโอ๋ มาขอไกด์ไลน์การต่อกับ MySQL แล้วไปลองดู พอได้ความก็เลยเขียนมาเล่าให้เราฟัง เราเห็นว่ามีประโยชน์ดี ก็ไม่รอช้า (จริงๆ ก็นานแล้วแต่เพิ่งมีเวลา) นำมาแปะไว้โดยไว  เชิญเสพโดยพลัน

clip_image002[5]

Continue reading [Smart Object] – K2 & MySQL (แบบไทย)