วิธีการส่งข้อความจาก K2 ไปยัง Line Notify

วันนี้ได้รับการแชร์อีกหนึ่ง solution ดี ๆ จาก K.Susy มาแชร์ ว่าถ้าเราต้องการ ส่งข้อความจาก K2 ไปยัง Line Notify จะทำได้อย่างไร

วิธีการส่งข้อความจาก K2 ไปยัง Line Notify

การออกแบบ SW ปัจจุบันนอกจากจะออกแบบให้ใช้งานง่าย ผลลัพธ์ถูกต้อง ประมวลผลได้รวด มีความสวยงาม แล้วยังมีอีกสิ่งหนึ่งที่เราต้องคำนึงถึงคือ พฤติกรรมของ User ปัจจุบัน User โดยส่วนใหญ่มัก Check Line บ่อยครั้งมากกว่า E-mail บริษัทเสียอีก ดังนั้นวันนี้ขอยกตัวอย่างแบบง่ายๆ ไม่ Advance จนเกินไปแล้วค่อยนำไปประยุกต์ใช้กันค่ะ (ถ้าทำแบบ Advance ใช้โดย Control Picker อันนี้ต้องเขียน Store Procedure FOR XML PATH  และ for each item ใน K2)  เพื่อเป็นการไม่เสียเวลาเรามาทำแบบง่ายๆ ตามขั้นตอนดังนี้ค่ะ

1.ขอ Token Line ตัวอย่างการขอลองทำตามคลิปนี้ดูค่ะ  

https://www.youtube.com/watch?v=zEuclsztXFA

2.เมื่อได้ Token ก็นำ Token ไปเก็บไว้ที่ DB

3.เปิด Visual Studio เพื่อสร้าง C# Class Library (.NET Framework 4.6.1)  แล้วนำ Source Code นี้ไปวาง  หลังจากนั้นให้ทำการ Build Solution เพื่อให้ได้ class.dll ซึ่งสามารถเข้าไป Copy ใน Folder …\bin\Debug ได้ตาม Path Project ที่เราสร้างไว้

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace IA_LineNotify
{
    public static class LineNotify
    {
        public static void lineNotify(string msg, string Token_user)
        {
            try
            {
                var request = (HttpWebRequest)WebRequest.Create("https://notify-api.line.me/api/notify");
                var postData = string.Format("message={0}", msg);
                var data = Encoding.UTF8.GetBytes(postData);

                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
                request.Headers.Add("Authorization", "Bearer " + Token_user);

                using (var stream = request.GetRequestStream()) stream.Write(data, 0, data.Length);
                var response = (HttpWebResponse)request.GetResponse();
                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

4. Copy File .dll ไปวางไว้ใน Server

5.สร้าง Service Type ให้เปิด K2 Management>Integration>Service Types>New>Service:เลือก AssemblyServiceBroker

6.สร้าง Service Instance ให้เปิด K2 Management>Integration>Service Instances>New>และให้เลือกตามตัวอย่างภาพ

7.เปิด K2 Designer สร้างแบบ Advance Smart Object เพื่อทำ smo Line Notify ตามภาพ

8. สร้าง Store/View/เรียกผ่าน Table โดยตรงก็ได้ขึ้นอยู่กับความเหมาะสม ตัวอย่างนี้เราเรียกผ่าน Store procedure เมื่อสร้างเสร็จอย่าลืม Refresh Service Instance ด้วยค่ะ

9.สร้าง Smart Object เพื่อให้   K2 Connect Store Procedure ให้เปิด K2 Designer แล้วทำสร้าง Advance Smart Object

10. เปิด K2 Designer เพื่อสร้าง Item View ตัวอย่างตามรูป

11. สร้าง Rule ให้กับ Button ตัวอย่างเช่น

12. Run View แล้วลองกดปุ่ม Send Line Notify ดูกันนะคะ

ก็จบไปสำหรับเนื้อหาในการต่อ K2 เข้ากับ Line notify แล้วนะครับ ต้องขอบคุณและชื่นชมคุณ Susy จริง ๆ ใครยังไม่ได้อ่าน บทความก่อนหน้าเรื่อง How to Export From Listview to Excel Template ไปตามอ่านได้ในลิ้งค์นะครับ

ถ้าท่านไหนมีเทคนิคการใช้งานดี ๆ แบบนี้ก็สามารถแชร์มาให้กับ community ได้นะครับ

สำหรับวันนี้ สวัสดีครับ

How to Export From Listview to Excel Template

สำหรับ K2 Five ตั้งแต่ version 5.1 ขึ้นไป จะมีความสามารถในการ Export List to Excel อยู่แล้วครับ แต่ในกรณีที่เราต้องการ export excel แบบมีการเตรียม format ไว้ก่อน ต้องทำอย่างไรบ้าง วันนี้ได้รับเกียรติจาก K.Susy มาแชร์ ว่าต้องทำอย่างไรบ้าง เชิญติดตามได้เลยครับ

           สวัสดีค่ะวันนี้เรามาแชร์ประสบการณ์ดีๆ  ใน K2 กันคะ คุณเคยเจอไหมที่ลูกค้าอยากได้   Report  Excel สวยงามแบบนี้ เรามาดูขั้นตอนการทำกันเลยค่ะ

 ขั้นตอนที่ 1 การติดตั้ง และตั้งค่าใน K2 Management

1.1 ติดตั้ง  “Microsoft Access Database Engine.exe”  ซึ่งเป็น Service ให้ SQL Server ติดต่อกับ Excel  ได้เราสามารถ download ที่ https://www.microsoft.com/en-us/download/details.aspx?id=13255

ภาพที่ 1 ติดตั้ง  Microsoft Access Database Engine

1.2 Config K2 ใน  Management ส่วนที่เป็น Service Instance กำหนดให้ Suppress Transection = True  และ User ที่ Connect DB ต้องเป็น Admin นะคะ ไม่งั้นเวลาเรา Execute  Store Procedure ผ่าน K2 จะ   Error   ค่ะ

ภาพที่ 2 การ Config  K2 Service Instance

1.3 ติดตั้ง Excel/CSV Import File Service Broker สามารถ download ได้ที่

https://community.nintex.com/t5/K2-Five-blackpearl/Excel-CSV-Import-Service-Broker/ta-p/176973 (เมื่อโหลดเสร็จจะมีตัวอย่างการตั้งค่า K2 Management อย่าลืมทำกันนะคะ)

ภาพที่ 3 ติดตั้ง Service File Broker และการ Add Service Type

ขั้นตอนที่ 2 การออกแบบ Excel Template ตามที่เราต้องการ

การออกแบบ Template Excel นั้นสิ่งสำคัญคือ Data Type ใน Excel ต้อง Match กับ Data Type ใน DB หากไม่ได้นำไปใช้คำนวณสูตรใดๆ แนะนำ Set  Column เป็น Text ไปเลยค่ะ  ส่วนที่เป็น Input data ที่จะนำข้อมูลจาก ListView มาแสดงนั้น ไม่ควรตีตาราง/หรือตีเส้น ต้องปล่อยให้เป็น Cell ว่างๆ เพราะจะทำให้ข้อมูลที่ส่งมาจาก DB ถูกต่อท้ายที่เรากระทำการใส่สี/ตีเส้นทันที 

ภาพที่ 4 ตัวอย่าง Excel Template

หากกรณีเราถ้าต้องการให้ส่วนที่เป็น  Input data ตีเส้น/ใสสีให้สวยงามแนะนำให้ใช้ Rule วันนี้เราก็มี ตัวอย่างการใช้ Rule มาดูกันเลยค่ะ

ภาพที่ 5 วิธีการตีเส้นให้กับตาราง Input data ด้วย Rule

*Highlight  Column ที่ต้องการก่อนเลือก “Conditional Formatting”

ภาพที่ 6 วิธีการเปลี่ยน สีพื้นหลัง row เมื่อ data ใน Row ไม่เหมือนกับ Row ด้านบน

Highlight  Column ที่ต้องการก่อนเลือกแล้วไปที่  “Conditional Formatting”  วิธีนี้เราจะใช้เทคนิคการ MOD แต่ใน Excel เราจะสร้าง Column MOD รองรับไว้ก็พอไม่ต้องเขียนสูตร MOD ใน Excel เพราะเราจะไปทำใน DB แทน และอย่าลืม Hide Column MOD ด้วยนะคะ

ขั้นตอนที่ 3 สร้าง Folder ใน Server  และ Copy Excel Template ที่เราเตรียมไว้

 เมื่อเราทำการสร้าง Excel Template เสร็จแล้วให้นำไฟล์ Excel ไปวางไว้ใน Server Path ที่เราต้องการได้เลยค่ะ ในที่นี้จะทำ 2 Folder ค่ะ (Folder หนึ่งไว้สำหรับเก็บ Template Excel ต้นฉบับ และ อีก Folder ไว้เก็บไว้ Excel ที่ Gen เสร็จแล้วค่ะ)  

ภาพที่ 7 ตัวอย่างการนำ Excel Template ไปวางไว้ใน Server

ขั้นตอนที่ 4 การเขียน Store Procedure ใน K2 Designer

ตัวอย่าง การเขียน SQL Command ใน Store Procedure
*ข้อควรระวังหาก Module นี้มี User ใช้มากกว่า 1 คนชื่อ File ที่ Genไม่ควรซ้ำกัน แนะนำไปประยุกต์ใช้กันเองนะคะอันนี้เป็นแค่ตัวอย่าง และอย่าลืมตั้ง Password ให้ยากต่อการเดาด้วยนะคะเพราะเราจะเปิด Cmdshell ใช้งาน

USE [Your_DBNAME]
GO
/****** Object:  StoredProcedure [dbo].[Procedure_ExportToExcelTemplate]    Script Date: 9/25/2021 12:03:34 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Procedure_ExportToExcelTemplate]  AS
begin
-----กรณี cmdshell เขียนถูกต้องแต่ error ให้ run คำสั่งนี้
--exec sp_configure 'show advanced options', 1
--reconfigure
--exec sp_configure 'xp_cmdshell', 1
--reconfigure
--exec sp_configure 'show advanced options', 0
--reconfigure

-----กรณี Openrowset excel เขียนถูกต้องแต่ error ให้ run คำสั่งนี้
--sp_configure ‘show advanced options’, 1;
--RECONFIGURE;
--sp_configure ‘Ad Hoc Distributed Queries’, 1;
--RECONFIGURE;
--GO

--คำสั่ง Copy File จาก Excel Template ไปเก็บไว้อีก Floder เพื่อเก็บไว้ที่ Gen เสร็จเรียบร้อย
exec master..xp_cmdshell 'del C:\K2\TestExcelTemplate\FileGenerate\FileGenerateExcel.xlsx'
exec master..xp_cmdshell 'copy  C:\K2\TestExcelTemplate\Template\FileGenerateExcel.xlsx C:\K2\TestExcelTemplate\FileGenerate'  
--คำสั่ง Query ข้อมูลจาก DB แล้วนำไป insert ข้อมูลใส่ Excel Template
insert into 
OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0 Xml; HDR=yes; Database=C:\K2\TestExcelTemplate\FileGenerate\FileGenerateExcel.xlsx',[Sheet1$])
--query ข้อมูลให้ตรง Column ใน Excel
select 
 [Year] 
,[field_id]
,[Field_Name] 
,[Field_Name_abbr] 
,[FieldQue_Name]
,[Score] 

--*MOD หาค่า เศษ 1 กับ 0 แต่ในที่นี้เราจะแปลง 0=A ,1=B เนื่องจากถ้าเราใช้ 0,1 Column ที่เป็นค่าว่างจะถูกเทสีไปด้วยซึ่งเราไม่ต้องการ
--เทคนิคง่ายๆ ก็คือ แปลงให้เป็น A,B
,CASE
  WHEN (DENSE_RANK() OVER (ORDER BY a.[field_id])%2)= 0
  THEN 'A'
  ELSE 'B'
END  as [MOD] 
FROM  [Plan_MT_Question_Field] a

end;

ขั้นตอนที่ 5 สร้าง SmartObject ใน K2 Designer

5.1 สร้าง Smart Object ไว้สำหรับให้ K2 Execute Store Procedure

5.2 สร้าง SmartObject เพื่อเรียกใช้ File Service Broker ที่ใช้สำหรับ Download File จาก Server

5.3 สร้าง SmartObject ให้ ListView

ขั้นตอนที่ 6 สร้าง View ใน K2 Designer

6.1 สร้าง View เพื่อแสดงข้อมูล

6.2 สร้าง View ให้ File Broker

ขั้นตอนที่ 7 การสร้าง Form ใน K2 Designer

ผลลัพธ์ไฟล์ Excel ออกมาสวยงามในแบบที่เราสั่งได้

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 ครับ

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 ได้ไม่ยากเลยยยยย

How to use “Workflow management service” (K2 Five)

สวัสดีเพื่อน ๆ ชาว K2 Ranger ทุกท่านครับ วันนี้มีโอกาสได้รับบทความจากคุณเบนซ์ Thattaporn Setsittichoke มาช่วยเขียน blog แชร์ประสบการณ์ การทำงานบน K2 Five

จะมี feature อะไรใหม่บน K2 Five มาช่วยเราทำงานกันบ้าง เชิญติดตามได้เลยครับผม


ผมจะมาแชร์บทความที่บางคนอาจจะรู้อยู่แล้วนะครับ (ที่เคยลองใช้งาน) ซึ่ง k2 management เท่าที่จำได้ และใช้งานมาจะมีเกิดขึ้นตั้งแต่ Version 4.7 ขึ้นไปครับ แต่มันพิเศษตรงที่ มี Service Object (ไม่แน่ใจนะครับว่าก่อนหน้านี้มีให้ใช้ไหม ถ้ามีต้องขออภัย) ให้เราใช้งานด้วย

ซึ่งแต่ก่อนเราจะต้องทำการพึ่งพา API เช่นตัวที่ผมมีการใช้งานคือพวก Redirect, Delegate หรือ Goto Activity ต่างๆ ต้องทำการ Custom เพื่อช่วยการทำงานในส่วนนี้ เช่นการ Goto Activity จะต้องเขียนแบบนี้เป็นต้น (หลายคนคงเคยทำเหมือนกัน)

b1.png

แต่ใน SmartObjects – Service – Tester (หลายคนคงเคยใช้แล้วจะอยู่ใน C:\Program Files (x86)\K2 blackpearl\Bin นะครับ) มีให้ใช้งานกันแล้วครับ ซึ่งมีอะไรให้ใช้งานบ้างสามารถเข้าไปดูกันได้เลยครับ ดังภาพ

b2

จะมี method GotoActivity ให้ใช้ได้เลย ไม่ต้องเขียน API เองแล้ว 🙂

S__6545428.jpg

นอกจาก Workflow ที่ผมเข้า ยังมีตัวอื่นอยากให้ลองเอาไปใช้งานตามชื่อที่ต้องการได้เลยครับ มีให้ใช้งานเยอะมากครับ กันอีกเยอะเลยนะครับลองเล่นกันดูครับ และสามารถนำมาแชร์กันได้ครับ

เพิ่มเติมนะครับ ถ้ามีเกิดคำถามขึ้นว่า แล้วนำไปใช้งานยังไง? สามารถที่จะ Create เป็น SmartObject ตาม Category ที่ต้องการได้เลยครับ โดยการคลิกขวา และทำการ Create Smart Object ครับ

b3.png

หวังว่าบทความนี้เป็นประโยชน์ครับ และไม่ต้องเสียเวลาในการมา Custom กันครับ (ซึ่งผมทำได้เสียเวลาทำไปแล้ว 555)

ใครมีตัวไหนที่ใช้งานเจ๋งๆและมีประโยชน์ บอกกันด้วยนะครับ ขอบคุณครับ ^^


สุดท้ายนี้ ขอขอบคุณเบนซ์อีกรอบ สำหรับบทความดีๆ แบบนี้ครับ

benz

รูปประกอบคุณเบนซ์ เผื่อเจอหน้าจะทักทาย สอบถามได้เต็มที่ครับ 🙂

Workflow Schedule ของเล่นบน Management Site ที่แอบซ่อนอยู่

สวัสดีครับ วันนี้ก็จะมาแนะนำ Feature ที่น่าสนใจอีกหนึ่งตัวนะครับ นั่นก็คือ Workflow Schedule ซึ่งเจ้านี้ความสามารถก็คือเราสามารถตั้ง Job Schedule สั่งให้ Start workflow ได้ตามใจชอบนั่นเอง ก็คือมันมาช่วยเราโดยที่เราไม่ต้องมานั่งเขียน coding เพื่อสร้าง Batch ขึ้นมาแหละครับ แล้วเราจะสร้างมันได้ที่ไหนต้องบอก Feature นี้จะติดมากับ K2 Management Site บน K2 Version 4.7 ครับ

1
ถ้าจะถามว่า Management Site คืออะไรมันถ้าเทียบง่ายๆมันคล้ายกับ workspace เดิมของเรานี่แหละ คร่าวๆก็จะมีกาเราก็สามารถจัดการ Permission workflow , Manage Instance workflow , Goto Activity และอื่นๆครับ ที่นี่มาถึงตัว Workflow Schedule  ที่เราพูดถึงกันมาดูวิธีการสร้างกันครับ
เมื่อเข้ามาใน Management site เมนูนี้จะอยู่ภายใต้ workflow Server นะครับ เมื่อเรากด New พร้อมที่จะเริ่มสร้างละ มาดูกันครับว่าเราต้องใส่อะไรบ้างถ้าอยากจะสร้าง Schedule
1. ScheduleName  ชื่อของ Job ที่เราจะสร้าง
2. เลือก Workflow ที่จะให้ Job  เลือกเพื่อสั่ง StartWorkflow
3. Workflow Detail  ในกรณีที่เรามี Data Field ที่จะส่งเข้าไป workflow เราสามารถส่งค่าเข้าไปได้ครับ

2

4.  Folio เลือกได้ว่าใช้เป็นวันที่ หรือ Text ที่ต้องการครับ
5.  Pattern  เลือกรูปแบบของ Job ที่ต้องการได้ เช่น ทำงานวันละครั้ง , เดือนละครั้ง หรือถ้าเป็น               Interval สามารถเลือกได้ว่าจะให้รันทุกๆนาที ชั่วโมง หรือวัน

4

6. Range   เลือกได้ว่าจะเริ่มรันวันไหน หรือจะให้สิ้นสุดวันไหน ครับ

เมื่อกำหนดค่าแล้วก็กด OK ได้เลยครับ เราจะได้ Schedule พร้อมทำงานกันแล้วครับ โดยสังเกตุที่ Enable นะครับ จะเป็น True คือพร้อมทำงาน จากนั้นก็รอเวลาตามที่ Config ไว้เลยครับ

5

เมื่อครบกำหนดเวลาลองเช็คที่ Column Success ดูนะครับ จะมี Result แจ้งอยู่ว่ามีการทำงานไปทั้งหมดกี่ครั้งครับ จากตั้วอย่างก็จะมี 2 Items คือมีการสั่ง Start workflow ไปแล้ว 2 ครั้ง

6

หรือจะเช็คที่ Instance ใน workflow ก็ได้นะครับ

7

ทั้งหมกก็คือเจ้าตัว Workflow Schedule นะครับ ก็หวังว่า Feature นี้อาจจะเข้ามาเป็นตัวช่วยให้สะดวกมากขึ้นนะครับ หากต้องพบเจอเงื่อนไขโปรแกรมในลักษณะที่เป็น job การทำงานที่ต้องมาสั่ง Start Workflow ครับ ขอบคุณครับ

ย้อน version ของ K2 component ยังไงกันนะ?

Blog นี้เริ่มจากคำถามจากทางบ้านนะครับ ว่าในการพัฒนา K2 เห็นมีการเก็บ version ไว้ ทั้ง Workflow , SmartForm และ SmartObject

version.png

แต่ยังหาวิธีการย้อน version ไม่เจอว่าต้องทำยังไง ใน blog นี้เลยจะบอกวิิธีการของแต่ละส่วนครับ

1. Workflow

เริ่มด้วยการย้อน version ของ workflow ก่อนนะครับ เพราะเป็นส่วนที่ทำได้ง่ายที่สุดแล้ว เราสามารถเข้าไปดู version ของ workflow ได้ผ่านทาง K2 Workspace หรือ K2 Management (สำหรับ version 4.7 ขึ้นไป)

สำหรับ K2 Workspace ไปที่เมนู [Server name] -> Workflow Server -> Processes -> [Process Name] -> Versions

processVersion.png

สำหรับ K2 Management ไปที่ Workflow Server -> [Workflow name] แล้วกดที่ tab Versions

processVersion47

โดยในทั้งสองไซต์ เราสามารถเลือกย้อน version ในการทำงานของ workflow ได้โดยเลือกกดที่ Set as default (มีผลเฉพาะกับ workflow ที่ยังไม่ start มานะครับ) และสามารถเลือก Download workflow version นั้น มาแก้ไขได้อีกด้วย

2. SmartForm

การย้อน version ของ smartform สามารถทำได้โดยใช้ stored procedure ที่ชื่อ Form.mRevertToVersion โดยสามารถย้อนได้ทั้ง View และ Form

สามารถตามไปอ่านวิธีการ step by step ได้ที่ -> How to roll back to a deleted or previous version of a View or a Form

3. SmartObjects

SmartObject นั้นเก็บโครงสร้างอยู่ที่ database ของ K2 แยกตาม version ที่ deploy ไป ดังนั้นการย้อน version SmartObject นั้นต้องทำตรงที่ database เลย โดยไม่ได้มี stored procedure ช่วย เหมือนการย้อน SmartForm

วิธีการทำก็คือ ต้องใช้ SQL Command ในการ update โดยนำ XML ใน SmartObjectXML ของ version ที่ต้องการย้อนกลับไป นำมาอัพเดทให้ version ล่าสุดนั่นเอง

smoVersion.png

ย้อน version SmartForm กับ SmartObject เป็นการทำงานตรงกับ database ของ K2 ซึ่งอาจมีโอกาสเกิดความผิดพลาดกับ database แนะนำว่าไม่ควรทำบนเครื่อง Production และให้ backup database K2 ทั้งก้อน ก่อนจะเริ่มทำนะครับ

การสร้าง 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 (ภาคหนึ่ง)

อีกหนึ่งความสามารถของ K2 คือส่วนของ Extension หรือการ customize ความสามารถในการทำงานของ K2 เช่น การเขียน custom control ดังที่เคยเขียนไปใน blog ก่อนหน้า

แต่เดี๋ยวก่อน…ก่อนจะเริ่มลงมือเขียนตั้งแต่ต้น ผมขอแนะนำให้ไปส่องดูที่ K2 Community ดูก่อน ว่ามีคนทำไว้แล้วหรือไม่ จะได้ไม่ต้องเริ่มเองใหม่ทั้งหมดเนอะ โดย Blog ภาคแรกนี้ได้รวม extension น่าใช้งานในส่วนของ control หน้าบ้านเอาไว้ 5 ลำดับ (ตามความชอบใจของผู้เขียน)

ลำดับที่หนึ่ง: Highchart (Download Link)

แจ่มแจ๋วและน่าใช้สุด ๆ กับ Highchart Control ที่ช่วยสร้าง report จาก smart object ได้ง่ายดาย ดึงข้อมูลขึ้นมาผ่าน ADO.Query นะครับ (ใช้ไม่ยากหรอกนา เขียนคล้ายๆ SQL Statement นั่นแล)

Example_LineChart

***  Hightchart requires a license for commercial use ***

ลำดับที่สอง: K2 Menu System (Download Link)

K2 นั้นมี Workdesk ที่เป็นลักษณะของ portal ที่รวมเมนูให้ใช้งานกันได้ฟรี ๆ อยู่แล้ว แต่ถ้าเราอยากลองใช้เมนูที่มีลูกเล่นมากขึ้น, แสดงเมนูได้ทั้งด้านบน ด้านข้าง, เปลี่ยน stylesheet ได้มากกว่าเดิม… K2 Menu system เป็นอีกหนึ่งตัวเลือกในการทำ portal ของคุณได้อย่างแน่นอน

original

ลำดับที่สาม: Form Progress Bar (Download Link)

“View flow ดูบน IE ไม่ได้?” , “View flow ดูแล้วเข้าใจยากจัง มีที่ดูง่ายกว่านี้มั้ย?”

คำตอบคือ มีครับ 🙂 ไป download มาติดตั้งตาม link ข้างบนได้เลย หน้าตาจะเป็นลักษณะรูปขั้นตอนการทำงาน สีเขียวคือทำไปแล้ว และสีฟ้าคือรอการพิจารณาอยู่ ทำให้เราสามารถเช็คได้ว่างานไปค้างอยู่ที่ไหนแบบไม่ซับซ้อนและเข้าใจได้ง่ายดี

9-23-2015 12-12-22 PM.png

ลำดับที่สี่: Digital Signature V2 (Download Link)

ถ้าสวมหมวก developer คุยกัน…กี่ครั้งแล้วที่เราบอกผู้ใช้งานว่ามี digital signature ในระบบเรา แล้วเราก็เอารูปลายเซ็นต์มาแปะที่หน้าจอ… ครั้งนี้แหล่ะครับ เราจะได้ให้เค้าเซ็นต์จริงๆ แล้วนะ

sign

และลำดับที่ห้า: Multilingual smartforms (Download Link)

อยากใช้งานหน้าจอ smartform ได้หลายภาษา ทำยังไงดูตัวอย่างการ configure และการใช้ตาม video เลย

ทุก extension จะมีคู่มือการติดตั้งและการใช้งานให้ อ่านก่อนใช้นะจ้ะ

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

List View Scroll bar with JS

หลายคนคงเคยเจอปัญหากับการแสดงผลของ list view ในกรณีที่มีคอลัมน์ใช้งานเยอะๆ คอลัมน์จะมีความกว้างน้อยทำให้การใช้งานค่อนข้างสะดวกจะไม่สะดวก ซึ่งผมก็เจอปัญหานี้เช่นกันโดยผมใช้เจ้าตัว Java Script เข้ามาช่วยเพื่อให้ UI ของเรา มีหน้าตาที่ดูง่ายยิ่งขึ้น ซึ่งผมมีปัญหากับ List view ที่ต้อง
แสดงผลคอลัมน์เป็นจำนวน 20 คอลัมน์ ซึ่งเมื่อแสดงผลก็เป็นอย่างที่เห็นแหละครับ ดูกันไม่รู้เรื่องเลยว่าอะไรเป็นอะไร

SB1

อย่ารอช้ามาดูวิธีกันเลยครับว่าจะเอาเจ้า JS มาช่วยยังไง

  1. ไปที่ฟอร์มที่มีการใช้งาน List View สร้าง Data Label ขึ้นมาหนึ่งตัวครับSB2
  2.  จากนั้นให้ดำเนินการใส่ Expression ให้กับตัว Data Label ที่เราสร้างขึ้นมานะครับ โดยใน Expression เราจะใส่ JS เข้าไปนี่แหละSB3
  3. ดำเนินการใส่ Script ได้เลยครับSB4

Script ที่เราจะใช้คือ

SB9

สำหรับ  name=’ScollBar.Form Area Item‘ จะเป็น name ของ view ที่เราต้องการจะให้มี scroll bar นะครับ ซึ่งถ้าเราหาไม่เจอว่าไอเจ้าชื่อ name ของ view เนี่ยอยู่ตรงไหนให้ดูที่หน้าฟอร์มได้นะครับ โดยจะอยู่ในส่วนของ Properties ด้านขวามือครับ สามารถ copy ไปวางใน script ได้เลยครับ

SB5

เมื่อดำเนินการใส่ Script ที่ Expression เสร็จเรียบร้อยแล้วให้ดำเนินการในขั้นตอนถัดไปได้เลยครับ

4. ให้เลือกไปที่ List View นะครับ โดยขั้นตอนนี้เราจะใส่ความกว้างของ List View ครับ โดยเราสามารถใส่ได้ตามใจชอบนะครับ ว่าอยากให้ List View ของมีความกว้างเท่าไร โดยสามารถปรับความกว้างได้ที่ Properties ของ List View ครับ  ซึ่งจากตัวอย่างผมใส่เป็น 2400px ครับ เพราะผมมีคอลัมน์ค่อนข้างเยอะ ยังไงก็ลองปรับให้เข้ากับหน้าจอที่จะนำไปใช้งานดูครับ

SB6

เสร็จแล้วก็ถึงเวลา RUN Test ดูครับ จะเห็นว่าจะมี Scroll Bar เกิดขึ้นอยู่ด้านล่าง และ คอลัมน์ขยายความกว้างตาม Header ซึ่งก็ค่อนข้างดูง่ายขึ้นกว่าเดิม ยังไงถ้าท่านใดเจอปัญหาการแสดงผลของ list view แบบนี้ลองนำไปใช้ดูกันนะครับ หวังว่าคงจะเป็นประโยชน์กันนะครับ

SB7

SB8