How to use K2 menu system with custom values

จากบทความก่อนเรื่อง How to use “Workflow management service” (K2 Five) ของคุณเบนซ์ Thattaporn Setsittichoke มาช่วยเขียน blog แชร์ประสบการณ์ การทำงานบน K2 Five วันนี้มีมาอีก 1 หัวข้อที่น่าสนใจในการใช้งาน K2 Menu System ครับ

ใครยังไม่เคยใช้งานหรือไม่เคยได้ยินตัว K2 Menu System ลองหาอ่าน 5 extensions น่าใช้และฟรี!! ใน K2 Community (ภาคหนึ่ง) ได้ก่อนครับ

มีหลายคนบอกว่า อืมมม… K2 Menu System นี่ใช้งานง่ายมากเลย แค่ Set menu ใส่ link ใส่ภาพ ก็ได้ Menu ไว้ใช้งานแล้ว

แต่ เอ… ถ้าอยากสร้างการมองเห็นแบบ Manage เองหละ โดยไม่ต้องไปพึ่งพวก Group ของ AD เพราะส่วนใหญ่มีปัญหาตรงที่ หลายๆที่นั้นต้องไปคุยกับแผนกนู้นแผนกนี้ กว่าจะสร้าง Group ให้เราได้ก็นานซะเหลือเกิน สร้างคนเข้าไปในกลุ่มให้เราอีก ถ้าเราจัดการเองได้ก็คงไม่ต้องรอขนาดนี้ ซึ่งบทความนี้ผมจะมาบอกวิธีทั้งหมดเลยครับ ว่าสร้างยังไง แต่วิธีเยอะหน่อยนะครับ

***ขั้นตอนจะคล้ายกับ Manual ที่ K2 Menu System ให้ไว้เลยนะครับ แต่ผมเอามาอธิบายให้เข้าใจอีกที***

1. ขั้นตอนแรกให้เราไปสร้าง Table ไว้เลยครับ สร้างไว้ 2 Table นะครับ ไว้สำหรับการ Manage permission ของ menu นะครับ

  • Table แรกเป็น Table สำหรับการจัดกลุ่มของคนครับอันนี้แล้วแต่การ Design แต่ละคนเลยนะครับว่าจะสร้างละเอียดขนาดไหนอยากเก็บอะไรบ้าง
  • Table ที่ 2 จะเป็นการสร้าง Table เพื่อจัดการคนเข้าไปในกลุ่มนะครับ แล้วแต่ Design เช่นกันครับ

(บทความนี้จะสร้างแค่ Basic นะครับเพื่อความเข้าใจง่าย)

ส่วนนี้นำไปสร้างเป็น SMO > List View เพื่อ สร้างหน้า Manage ได้เลยนะครับ ส่วนข้อมูลควรใส่ยังไง ผมจะลองใส่ให้ดูครับ

me03

จากตัวอย่างนะครับ ผมกำหนด ดังนี้ครับ

  • User1 อยู่ที่กลุ่ม Admin
  • User2 อยู่ทั้งสองกลุ่ม Admin,IT
  • User3 อยู่กลุ่ม IT

2. ต่อมา ให้ไปที่ Edit From ที่เราเคยทำตัว Main หลักไว้จะเป็นลักษณะดังภาพ

me04.png

ตรงส่วนนี้เราเห็น Control Picker ตรงไหนไป Edit ที่ View นั้นต่อเลยครับ(เพราะช่วงนี้แต่ละคน Save as มาไม่เหมือนกัน แต่แก้ไขช่วงนี้ได้เหมือนกันนะ)

พอเข้ามา Edit แล้วให้ทำการสร้าง Picker อันใหม่เป็นทางที่ดีกว่าไปเปลี่ยนอันเก่านะ เพื่อไม่ให้กระทบกับอันเก่า ที่เราอาจจะมีการ Save as ไปทำตัวอื่นๆอีก ดังภาพ

me05.png

ทำการ Set SMO เข้ากับ Picker นี้เลย (ใช้ Table UserGroup > ใช้แค่ Group_ID อย่างเดียว) ดังภาพ

me06.png

การที่ Set แบบนี้ เพื่อเราจะใช้ในการ Load User ที่ทำการ Login เข้ามาแล้วทำการดูว่าอยู่กลุ่มไหนบ้าง โดยการใช้ Populate Picker โดยการโยน User เข้าที่ Picker นี้  (สามารถเข้าหน้า Rules ของ View นี้ได้เลยครับ)

me07

me08.png

me09.png

***แต่เดี๋ยวก่อน….. กรณีนี้มีบาง Version ที่ไม่สามารถ Populate ได้ สามารถแก้ไขได้ดังนี้ครับ***

Create Stored มาเพื่อทำการ transfer data ให้ picker สามารถ Return Value ได้ ดังนี้ครับ

me10.png

โดยการสร้าง Parameter Username เพื่อส่งมาจาก Form ช่วง Login และ Return Values ที่เป็นการ Concatenate String กลับไป เมื่อใช้งานผลลัพธ์จะเป็นแบบนี้ครับ

me11.png

เมื่อได้แล้ว เราทำการสร้าง SMO และกลับไปที่ View ตัวที่สร้าง Picker เหมือนเดิมโดยการมา Call ตัวนี้ ดังรูป

me12.png

me13me14

เท่านี้ก็จะได้การ Load ข้อมูลตามที่เรา Set ไว้แล้วครับ โดยสามารถ Run View นี้เพื่อทดสอบการ Return ค่า โดย Login เป็น User ที่ Config ไว้ได้เลย

3. ต่อมา เมื่อได้แล้ว มีคำถามว่า อ่าววว…แล้วเอาไปใช้ตรงไหนต่อหละ แน่นอนครับ เราเข้าไปที่ที่คุ้นเคยกันได้เลยที่นี่ครับ K2 Menu System เพื่อไป Config ตัว Custom Values (K2 Menu System > Menu Items > เลือกเมนูที่ต้องการ)

me15me16

ในส่วนนี้สามารถใส่ Values ตามที่อยากให้ Group นั้นเห็นได้เลยครับ ตัวอย่างเช่น

ผมอยากให้เมนูนี้เห็นแค่ User1 ผมก็จะใส่แค่เลข 1 แต่ถ้าอยากให้ User3 เห็น ผมก็จะใส่แค่เลข 3 ตามที่เราได้ทำการ Manage ไว้ใน Table เลยครับ

ไม่ยากเลยครับแค่นี้ก็จะได้วิธีการ Set K2 Menu System แบบ Custom Values แล้ว แต่ถ้ามีส่วนไหนผมอธิบายไม่เข้าใจ สามารถกระซิบมาหาผมได้เลยครับ ที่ผมมาแชร์บทความนี้เพราะว่าหลายที่ใช้แบบนี้บ่อยและไม่ต้องการ Manage ผ่าน AD สามารถ Manage ที่ table นี้ได้เลย

ใครมีวิธีที่ดีกว่านี้สามารถแนะนำได้เลยนะครับ ขอบคุณมากเลยครับ

*** เพิ่มเติมครับ*** ถ้ามีคำถามว่า Version เก่ามันไม่เป็นแบบนี้หละ

me17.png

Version เก่าจะไม่มีในส่วนของ Custom Values ให้กรอกเราจะต้อง Custom เพิ่มอีกทีนะครับโดยการ เพิ่ม Textbox เข้าไปเพื่อให้ใส่ Values แบบ Version ใหม่นะครับ และทำการเขียน Rule Change เพื่อ Transfer Data เข้าไปที่ Permission Data label ที่ทำการ Update data อีกทีครับ เข้าดังภาพเลยนะครับ

me18me19me20me21me22

หลังจากนั้นก็สามารถใช้งานได้เหมือน Version ใหม่เลยครับ

หรือใครต้องการผูกการใช้งาน K2 Menu System กับ Role สามารถอ่านได้จากบทความนี้ How to use K2 Menu with Role Permission จากคุณโอ๋ ohshiki ครับ

Advertisements

[Management] – Search Role in K2 [EN Version]

Today we’ll take about role in K2. We know that K2 Role use to manage group of user when we didn’t use AD group. We can create and manage role using Management console in workspace (K2 version prior to K2 Five) or using K2 Management site (K2 version 4.7 and K2 Five). But the thing that still missing is search function.

Imagine that if we have more than 100 roles in system and want to add/remove user in role or want to know which user belong to which role? How can we solve this problem? Today I got a tool for you. Please follow below step

  • Create stored procedure using script below in any database that can reach K2. You can also create in K2 database but please be aware. Because when we upgrade version or patch the stored procedure may be disappear.

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

After deploy you can use form at {url}/Runtime/Runtime/Form/UserRole.Form/

Hope this can help you when working with role 🙂

[Management] – Search Role ใน K2 [TH Version]

สวัสดีครับ ไม่ได้มา update blog ซะนาน วันนี้มาด้วยเรื่องของ role ใน K2 หลายๆ คนคงทราบอยู่แล้วว่า Role ไว้ใช้เวลาที่เราอยากส่งงานไปหาคนหลายๆ คน แต่เราไม่มี group บน AD ก็เลยมาใช้ระบบจัดการใน K2 แทน วิธีใช้งานก็ไม่ยาก สามารถเข้าไปเพิ่ม Role ผ่านหน้า workspace (ก่อน K2 Five) หรือผ่านหน้า Management (K2 4.7 และ K2 Five) ได้เลย แต่สิ่งที่หายไปสำหรับ Role ใน K2 นี้ก็คือ ไม่มี function ในการ search นั่นเอง

ลองนึกถึงเวลาที่เรามี Role เยอะๆ มากกว่า  100 ขึ้นไป (จริงๆ แค่ประมาณสิบปลายๆ ก็แย่แล้ว) แล้วต้องการเข้าไปแก้ไขคนใน role หรืออยากจะรู้ว่า user นี้อยู่ใน Role ไหนบ้าง จะทำยังไงดี?? วันนี้เรามี tool มีนำเสนอ โดยทำตาม step ด้านล่าง

  • สร้าง stored procedure ตาม script ด้านล่างใน database ที่เห็น database K2 จะสร้างไว้ใน database K2 ก็ได้ แต่ว่า ถ้ามีการ upgrade version หรือ patch stored procedure นี้อาจจะหายไปได้

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

เมื่อ deploy แล้วสามารถใช้งาน form ได้ที่ {url}/Runtime/Runtime/Form/UserRole.Form/

หวังว่า จะช่วยทำให้ชีวิตในการใช้ Role ของทุกคนง่ายขึ้นนะครับ 🙂

การสร้าง Custom Worklist แบบ Step by step (No coding)

การใช้งาน K2 กับ Worklist เป็นของคู่กันมานานนม ตั้งแต่สมัยใช้งานบน workspace จนมาถึงปัจจุบันก็มี worklist control ใน SmartForms ให้ใช้

โดยปกติ worklist control มี field ที่เกี่ยวกับการทำงานของ workflow เช่น Folio, Activity Name, Task Start Date และอื่น ๆ ให้เลือกแสดงได้อยู่แล้ว ซึ่งการใช้งานจริงเรามักอยากได้ worklist ที่มีข้อมูล ของระบบนั้นมาแสดงด้วย โดยทางออกที่เรามักจะทำกันคือการใส่ค่าแปะไว้ใน folio ของ workflow บางที Folio มันก็จะยาว ๆ หน่อยอ่ะนะ (- -“)

Leave00.png

แต่ในวันนี้มานำเสนออีกช่องทางครับ เป็นวิธีการทำ worklist ที่สามารถดึงข้อมูลระบบอื่นมาแสดงด้วย ในตัวอย่างจะเป็น worklist ของ ระบบ Leave request โดยจะมีข้อมูลประเภทการลา วันที่เริ่มลาจนถึงวันที่สิ้นสุด มาแสดงใน worklist ได้ด้วย ผลลัพท์ได้มีหน้าตาตามนี้ครับ

Leave11.png

สิ่งที่ใช้ในการทำ: Worklist Service Broker, Composite SmartObjects

Step by step

  1. ติดตั้ง Worklist Service Broker (ตามไป download ได้ตามลิ้งค์ด้านบนครับ)
    • WorklistService
  2. เพิ่ม field ProcessInstanceID ในตาราง leave request (ใน workflow เพิ่ม SmartObjects Event ให้ไป update ค่า ProcessInstanceID หลังจากส่งงานเข้า workflow ไปแล้วด้วย)
    •  Leave-table
  3. สร้าง composite SmartObject เชื่อมกันระหว่าง Leave Request  และ WorklistService
    • เปิด K2 Studio, สร้าง SmartObject ตั้งชื่อ LeaveRequestWorklist
    • Leave1.png
    • กด Add Method, เลือก Run the wizard in Advance Mode แล้ว กด Next
    • Leave6.png
    • ตั้งชื่อ method ว่า Get Leave Request Worklist แล้วกด Next
    • Leave3.png
    • ในหน้า Configure Method Parameter กด Next (ไม่ต้องสร้าง parameter)
    • ในหน้า Service Method Object กด Add
    • Leave13.png
    • ในหน้า Add Service Method กด Add เลือกไปที่ Service Object Server -> [SQL Service Instance Name] -> Table -> Leave Request -> List
    • Leave4.png
    • กด Create All เพื่อสร้าง properties แล้วกด OK
    • Leave3.png
    • โปรแกรมจะกลับมาที่หน้า Service Method Object กด Add อีกครั้ง
    • Leave12.png
    • ในหน้า Add Service Method กด Add เลือกไปที่ Service Object Server -> Worklist Server -> Basic Worklist Item -> Get Worklist Items
    • Leave7.png
    • กด Create All เพื่อสร้าง properties แล้วกด OK
    • กด Next
    • ในหน้า Setup Service Method Link กด Add
    • Leave9.png
    • ในหน้า Add Service Method Link เลือกปรับค่าดังนี้
      • Service Object Method: Leave Request.List
      • Link Type: Matching Value in both objects
      • Service Object Method: Worklist Service.GetWorklistItems
    • ในส่วนของ Property Name เลือกไปที่ ProcessInstanceID แล้วกด Assign เลือกไปที่ Process InstanceID ตามรูป
    • Leave10.png
    • กด OK
    • กด Next, กด Finish
    • Deploy SmartObjects
  4. ทดสอบและนำ SmartObjects ไปสร้าง ListView, form ต่อเพื่อใช้งาน
    • ตอนเรียกใช้งานก็เรียกผ่าน method ที่เราสร้างขึ้นครับ มันจะได้เฉพาะงานจาก worklist เท่านั้น แล้วจะไป join กับ field จากตาราง Leave Request
    • Field ที่ใช้ฝั่งของ worklist จะมีดังนี้ครับ
      • Link: เป็น URL ที่ส่งมาจาก workflow สำหรับเปิดหน้าฟอร์มเข้าไปอนุมัติ
      • Folio: ชื่อ folio ของ workflow นั้น ๆ
    • Leave11

 

สรุปข้อดีของการทำ custom worklist

  • เพิ่ม field จากฐานข้อมูลมาแสดงผลได้
  • สามารถใช้ฟังก์ชั่นของ list view ได้ เช่น การ sorting, filter, paging

แต่ก็มีข้อจำกัดของการทำ custom worklist นะ

  • ไม่สามารถใช้ function ที่ติดมากับ worklist control ได้ เช่น  Redirect, Delegate, Out of office (ทำได้แต่ต้องเขียนเพิ่มเอง)
  • ต้องสร้าง SmartObjects และ form แยกสำหรับแต่ละระบบ

 

การสร้าง custom worklist ขั้นตอนก็มีดังที่กล่าวไปข้างต้น รวมถึงมีทั้งข้อดีข้อเสีย ทั้งนี้ขอให้เลืิอกนำไปใช้ให้เหมาะสมกับงานของเราครับ 🙂

5 extensions น่าใช้และฟรี!! ใน K2 Community (ภาคสอง)

จากที่ได้รวบรวม 5 extensions น่าใช้และฟรี!! ใน K2 Community (ภาคหนึ่ง) ไปใน blog ก่อนหน้า ซึ่งได้แนะนำ extensions ส่วนใหญ่ที่เป็น control ไว้ใช้งานที่หน้าบ้าน blog นี้จะขอรวม extension หลังบ้านบ้างครับ ไปดูกันเลยว่ามีตัวไหนน่าสนใจบ้าง

ลำดับที่หนึ่ง: File service broker V2.0 (Download link)

Broker ตัวนี้ช่วยให้คุณสามารถเก็บไฟล์ลงบน server หรือ shared drive แทนที่จะเก็บลง database ได้อย่างง่ายดาย ใน version 2.0 นี้ยังเพิ่มความสามารถในการ ดึงไฟล์มาทั้ง folder ได้อีกด้วยนะ

FileSystem.png

ลำดับที่สอง: Excel Import and Excel Export

รวมมากัน 2 รายการเลยทีเดียว สำหรับการทำงานร่วมกับ Excel ไฟล์ เริ่มด้วย Excel Import (Download Link) เอาไว้สำหรับ upload file excel เข้า smart object  จากตัวอย่างในรูป เราจะเอาข้อมูลในไฟล์ TestData.xlsx ไปเข้า smartobject ชื่อ soExcelTest

excel

หลังจากมีการ import เข้า smartobject ไปแล้ว บางครั้งเราก็ต้องการเอาข้อมูลออกมาในรูปแบบของ Excel file เพื่อเอาไปใช้ทำงานต่อ ก็ใช้งานผ่านตัวนี้ได้เลย Excel Export (Download Link) ตัวนี้เป็น Control บน smartform นะ

แถมอีกตัว Excel Service Broker (Download Link) ข้างในจะมี method ให้ใช้งานประกอบไปด้วย GetCellValue, SaveCellValue, GetWorksheetNames และ GetWorksheetValues ตัวนี้จะต่างจากตัวที่ import excel เข้ามาเพราะเป็นการดึงค่าหรือบันทึกค่าตรง ๆ ลง excel file เลย

ลำดับที่สาม: Datafield Editor (Download Link)

Datafield เป็นตัวแปรที่เราสร้างขึ้นเพื่อไว้เก็บค่าต่าง ๆ ในการทำงานบน workflow ทั้งดึงค่ามาใช้ผ่าน smartobject หรือคำนวณค่าต่าง ๆ ใน workflow เอง ทีนี้ถ้า start workflow ไปแล้วเกิดมีการทำงานดึงค่าผิดขึ้นมา แล้วเรายังอยากให้ workflow นี้ทำงานต่อได้ เราสามารถใช้โปรแกรมนี้ในการเข้าไปแก้ไขค่านี้ตรง ได้เลย (แต่ทางที่ดี ก็ควรแก้ workflow ให้มันทำงานถูกต้องนะ จะได้ไม่ต้องมาตามแก้ทุกงาน)

datafield edtior

ลำดับที่สี่: ODBC Service Broker (Download Link)

จาก Blog [Smart Object] – K2 & MySQL (แบบไทย) ก่อนหน้าที่จะดึงข้อมูลจาก MySQL ก็ใช้ความสามารถของ ODBC เป็นตัวกลางในการเชื่อมต่อนีแหล่ะ

clip_image0025.jpg

ลำดับที่ห้า: Worklist service broker (Download Link)

สุดท้ายกับ Worklist Service Broker ตัว extension นี้ช่วยให้เราสามารถดึงข้อมูล worklist ขึ้นมาผ่าน smartobject ได้ นอกจากนี้ยังสามารถสั่ง action หรือ reditect ได้อีกด้วย

WorklistService

แต่งานส่วนใหญ่ที่เอา extension นี้มาใช้เพื่อทำ worklist ที่ต้องการแสดงคอลัมน์ที่เก็บไว้ในฐานข้อมูลอื่นมาแสดงด้วย ไว้วันหลังมีโอกาสจะมาเขียนวิธีการทำให้ดูนะครับ

ของใน Community โหลดมาใช้งาน ถ้าเจอบั๊ก เปิด ticket ไม่ได้นะ แต่สามารถโพสต์ถามใน community, Email ไปถามเจ้าของ extension หรือส่วนใหญ่เจ้าของก็มักจะแจก source code ให้เรามาด้วยอยู่แล้ว จะเอามา debug เพื่อแก้หรือเขียนเพิ่มไปเลยก็ได้ครับ

ไว้ถ้าได้ไปเจอ extension ตัวไหนน่าสนใจอีก จะนำมาแชร์กันอีกนะครับ วันนี้ลาไปก่อน สวัสดีครับ 🙂