[K2 SmartForms] – Confirmation Popup Trick

สวัสดีครับอาจจะมีหลายๆท่านงงหรือสงสัยกับการเรียกใช้ rule Get confirmation เพื่อแสดงข้อความ Pop up แจ้งเตือน User หากท่านใดไม่งงแล้วก็เลื่อนไปดู trick ด้านล่างๆได้เลยนะครับข้ามการใช้ไปได้เลยโดยการแสดง popup ของ K2 SMF เนี่ยเราสามารถเรียกใช้ได้ผ่าน rule Get confirmation ดังภาพด้านล่างครับ
get-confirm-1
get-confirm-2

หลายๆท่านอาจจะเจอปัญหาว่าหากมีการ config rule อื่นๆที่มีการ validate เพิ่มเติมต่อจาก rule Get confirmation เมื่อใช้งานจริงเวลา กด cancel ใน pop up comfirm แล้ว Rule ที่เหลืออยู่ยัง execute ทำงานต่อไปซึ่งไม่ถูกต้องจริงๆแล้วหลักการทำงานที่จะทำงานถูกต้องต้อง Config แบบนี้ครับคือ เพิ่ม advanced condition ที่โดยใส่เงื่อนไข 1=1 เข้าไป   get-confirm-2-1  จากนั้น config rule ตาม รูปภาพ ด้านล่างครับ เราสามารถเรียก rule อื่นๆหลังจาก User กด cancel ได้หรือไม่อยากให้ทำอะไรก็เพิ่ม rule transfer data ไปเฉยๆได้ครับ
get-confirm-3

ตอนทำงานจริงนั้นเรามันจะมีการ validate ค่าเป็นจำนวนมากหากทำตามวิธีด้านบนจะค่อนข้างยุ่งยากครับ technic ที่เราสามารถทำได้คือให้ rule ที่มีการ validate มากมายหลายแหล่เป็น Fucntion หรือ rule ลอยๆแทนซะยกตัวอย่างเช่น ผมทำการ validate มากมายจากนั้น Hilight สีนำเงินผมตั้งชื่อ Rule ชุดนี้ว่า FnSaveMainForm ดังภาพด้านล่างจากนั้นกด Save
get-confirm-4

จากนั้นที่ปุ่มเราต้องการแสดง Pop up Confirm ให้ใช้วิธีเรียก Execute another rule แทนดังภาพ ด้วยวิธีนี้การทำงานของ Pop up จะถูกต้องครับ
get-confirm-5

ทีนี้มีคำถามว่า Comfirm pop up สามารถ เพิ่ม size popup ,ใส่ header ,ใส่ template ,ใส่ค่าตัวแปร บลาๆๆ ไปได้ไหม???
คำตอบคือ ไม่ได้ครับ!!! 5555+

แต่เรามีทางออกให้ดังนี้คือแต้นแต๊นนนนน ใช้ rule Show a message แทนซิคร้าบพี่น้องง
get-confirm-6

แต่มีข้อแม้คือต้องเลือก Message Type เป็น Confirmation นะครับ ทีนี้เราสามารถลาก Control ต่างๆมายำใส่ในนี้ได้เลยแม้กระทั้งใส่ Tag Html เพื่อการแสดงผลที่ต้องการก็ยังได้เรื่อง size ก็สามารถปรับได้อีกทั้งการทำงานยังเหมือนกับใช้ rule Get confirmation ทุกประการครับ
get-confirm-7

เอาละลองกดดูจากที่ Config ได้ผลลัพตามภาพเลยครับผม
get-confirm-8

วันหลังจะมาแชร์ทริคอื่นๆอีกนะครับ บ้ายบาย

Test on K2 version
4.7
4.6.11

 

[K2 SmartForms] Log Out Button

สวัสดีครับทุกท่านครับ วันนี้มาเสนอ solution สำหรับทำปุ่ม logout ซึ่งก่อนที่จะทำ solution นี้อาจจะต้อง set K2 SmartForms ไปใช้ form authentication ก่อนนะครับ ซึ่งสามารถดูรายละเอียดตามนี้ครับ [K2 SmartForms] – เรื่องเกี่ยวกับ Authentication

เมื่อเราทำการติดตั้ง K2 Smartform เสร็จแล้วใน site K2 runtime หรือว่า K2 designer จะมี folder _trust สังเกตุเห็นว่ามี logout.aspx และ login.aspx อยู่ดังภาพ

logout-1

ทีนี้สิ่งที่เราจะทำก็คือสร้าง ปุ่มขึ้นมา 1 ปุ่มเพื่อทำเป็นปุ่ม logout แล้วทำการ Config rule ดังภาพครับ
logout-2

logout-3

Base URL:  https://k2.denallix.com/Runtime/_trust/logout.aspx
Note : [K2 url]/Runtime/_trust/logout.aspx or [K2 url]/Designer/_trust/logout.aspx

 จากนั้นลองมา Test ที่ Runtime กันครับ เมื่อเราทำการกดปุ่มที่เรา Config เสร็จแล้วหน้า Page K2 จะขึ้นให้ทำการ login User ดังรูปครับ ซึ่ง session ของ User ที่ทำการ login อยู่ขณะนั้นจะถูก clear ทิ้งทันทีถึงแม้ว่าเรากำลังเปิด tab อื่นๆอยู่หากไปทำการ refresh tab อื่น หน้าจอจะกลับไปแสดงหน้า login อยู่ดีครับ
logout-4

เมื่อทำการ login อีกครั้งโดยยังไม่ปิด browser จะปรากฎ page default ของ K2 SmartForm ดังภาพครับ
logout-5
ซึ่งจะมีคำถามต่อมาว่า อ้าววววว สามารถให้ไปหน้าที่เราต้องการหลังจาก login อีกครั้งไหมคำตอบคือได้ครับทางออกมี 2 วิธีเท่าที่ทราบตอนนี้คือ

1.ทำการ  แก้ไข file default.aspx  ซึ่ง file อยู่ที่ Path “C:\Program Files (x86)\K2 blackpearl\K2 smartforms Runtime\default.aspx”
โดยทำการเพิ่ม java script เพื่อให้ redirect ไปหน้าที่เราต้องการครับ

ก่อนแก้ไข  default.aspx
logout-6

เพิ่ม java script ลงใน tag </head>

function redirect() {
window.location.assign(“~/form/Test+Logout/”)
}

เพิ่ม  onload ลงใน tag </body>
<body onload=”redirect();”>

หลังทำการเพิ่ม Java script  file default.aspx
logout-7

2. Config rule ให้ navigate ไป [K2 url]/Runtime/_trust/login.aspx แทนพร้อมทั้งระบุ parameter ReturnUrl หน้า page ที่ต้องการให้ไปหลังจากทำการ login อีกครั้ง สามารถดูรายละเอียดได้ด้านล่างครับ

logout-8

Comfig Parameter

Name value
ReturnUrl %2FRuntime%2FRuntime%2FForm%2FTest+Logout%2F
_sessionUpdate  1

Note :  %2FRuntime%2FRuntime%2FForm%2F[SmartFormSystemName]%2F

หากมีท่านใดเจอแนวทางอื่นสามารถแนะนำเข้ามาได้ครับ  🙂

Test on K2 version
4.7
4.6.11

[K2 SmartForms] Custom Error Message in App_Globalresources

ก่อนอื่นต้องบอกก่อนนะครับว่า สำหรับ Error  Message ที่ผมนำมาเปลี่ยนให้ดูนั้นเป็นเพียงส่วนนึงเท่านั้นนะครับ ต้องลองเข้าไปดูนะครับ จะมี Message อีกหลายๆตัวที่คุ้นหน้าคุ้นตากันเป็นอย่างดีแน่นอนครับ  จากรูป List View ด้านล่าง ผมเลือกใช้ Quick Search เพื่อค้นหาค่าจากคอลัมน์ที่มี Data Type เป็น int นะครับ จะเห็นว่าเจ้า K2 Smart forms จะแสดง Error เป็น ภาษาอังกฤษ ซึ่งบางคนอาจจะเคยเจอคำถามจาก user ว่าเปลี่ยนได้ไหม ซึ่งแน่นอนครับ มันเปลี่ยนได้

1

ซึ่งพวกข้อความนี้จะเก็บเป็น  App_Globalresources อยู่ที่ Folder
[InstallDrive:]\Program Files (x86)\K2 blackpearl\K2 SmartForms Runtime\App_Globalresources\RuntimeMessages.resx  ครับ  ซึ่งแน่ก่อนจะเปลี่ยนแนะนำให้ backup file ไว้ก่อนนะครับ  ถ้าลองเปลี่ยนไฟล์มาดูจะพบข้อความ ที่หลายๆคนน่าจะเคยเห็นตอนใช้งาน K2 นะครับ ก็ลองเลือกเปลี่ยนกันดูนะครับ เปลี่ยนแล้วก็ Save File ด้วยละครับ

3

ผมทดลองเปลี่ยนจากข้อความภาษาอังกฤษมาเป็นภาษาไทย ดูอ่านเข้าใจง่ายขึ้นครับ  ยังไงก็ลองเก็บไว้เป็นอีกทางเลือกนึงละกันนะครับ เผื่อเจอคำถามจาก user ว่าเปลี่ยน ได้ไหม อิอิ

4

ขอบคุณที่สละเวลามาอ่านนะครับ ยังไงมีเรื่องราวดีๆจะเก็บมาแชร์ให้อีกนะครับ บายๆครับ

[K2 SmartForms] – วิธีทำให้ click หรือ double click ที่ worklist control เพื่อเปิด Form

วันนี้ขออธิบายอย่างมาไวไปเร็ว ถึงวิธีที่ทำให้ worklist control สามารถกดเพื่อเปิดงานได้เลย โดยไม่ต้องกดที่เมนูแล้วเลือก Open Form นะครับ

worklist3

  1. สร้าง form แล้วลาก worklist control ไปแปะ
  2. Configure Rule ตามรูปเลยครับ
      • When Worklist is Clicked
      • Navigate to URL

    worklist1

  3. เข้าไป configure ใน rule Navigate to URL
      • ใน Context Browser ให้ไปที่ Form -> Control -> Worklist -> Data แล้วหา field ชื่อ Worklist item URL มาลากใส่ใน Base URL
      • Open In แก้เป็น New Window (or Tab)

    worklist2

  4. เสร็จแล้วครับ 🙂 ทดสอบดูแล้ว …ไม่ว่าเรากดที่ field ไหนใน worklist control ก็จะเปิดหน้า form มาให้เราทำการอนุมัติได้ครับ

*ทดสอบบน K2 4.6.11 นะครับ

[K2 Smart Forms] Dropdownlist Control Sort

สวัสดีครับ วันนี้จะมาว่ากันด้วยเรื่องการทำ sort data กับ  SQL Collation  ซึ่งแต่ละแบบก็จะมีผลลัพธ์ของการ sort ข้อมูลกับตัว dropdownlist ที่แตกต่างกัน
ที่เขียนกระทู้นี้ขึ้นมาเพราะผมไปเจอปัญหาว่า ต้องการ sort ข้อมูล master data
ที่ตัว dropdownlist ให้เรียงตามลำดับตัวอักษร ก-ฮ   ซึ่งวิธีทั่วไปก็แน่นอนว่าเราต้องไปที่
rule populate Drop-Down List Control with Data  และเลือกใช้ sort ค่าใน column
ที่ต้องการซึ่งไอเจ้าข้อมูลดังกล่าวที่เป็น master data เนี่ย โดยทั่วไปแล้วเราก็จะสร้าง ก้อน database ไว้เพื่อเก็บข้อมูลซึ่งถ้าเราสร้างโดยไม่คิดอะไรก็กดสร้างมันขึ้นมา สร้าง Table ใส่ข้อมูล ผูกเข้ากับ smo เพื่อดึงมาใช้ที่ dropdownlist  ซึ่งถ้าตามสเต๊ปการ Config ที่หน้าจอแล้วมันก็ควรจะเรียงให้เพราะสั่ง sort มันแล้ว แต่สิ่งที่เกิดคือมันไม่เรียงนะซิครับ
EN2

Untitled

ซึ่งสาเหตุที่ไม่เรียงก็เกิดจากเจ้าตัว sql collation ของเราที่กำหนดไว้ตั้งแต่แรกนี่แหละ ซึ่งถ้าลองไปเช็คดูที่ก้อน Database จะเป็น Type เหมือนในรูปภาพครับ

EN
ซึ่งถ้าเราจะ sort ตัวอักษรภาษาไทยอาจจะมีปัญหาเหมือนเคสตัวอย่างที่ผมบอกไปตามข้างบนครับ โดยสิ่งที่ผมแก้ก็คือไปเปลี่ยนเจ้าตัว sql collation ตัวนี้ให้เป็นภาษาไทยซะ
TH

ลองแล้วเปิดหน้าฟอร์มดูสิ่งที่แตกต่างคือที่ Drop-Down List ทำการ sort ค่าให้

TH2

เผื่อมาขาเดฟท่านไหนเคยเจอปัญหาแบบนี้ลองแก้ด้วยวิธีนี้ดูครับ แต่บางทีการเปลี่ยน sql collation ของก้อน database ก็อาจจะไม่ใช่เรื่องง่ายเพราะบางครั้งอาจจะมีข้อมูลเยอะละก็ format data ที่แตกต่างกันไปของแต่
ละที่ ที่ใช้งาน ยังไงก็ฝากเพื่อนๆขาเดฟ ไว้เป็นข้อระวังเพิ่มเติมตอนทำโปรเจคแล้วกันนะครับ

 

ขอบคุณครัช

[K2 Advance SmartObject] เปลี่ยน Method Binding ไปยัง Data Source ใหม่ ด้วย Package Deployment

สวัสดีครัช  แน่นอนว่า advance smart object เป็นสิ่งที่เหล่าเดฟเลือกใช้ในโปรเจคของท่าน
แต่ถ้าวันนึง Data Source ปลายทางของท่านเกิดมีการเปลี่ยนแปลงไม่ว่าจะย้าย Server หรือย้ายก้อน database    เจ้าตัว smart object นี่คงต้องย้ายตาม  แต่ไม่ยากอย่างที่คิด ด้วย Tool เทพที่ชื่อ K2 Package and Deployment นี่แหละคับ สามารถเปลี่ยนได้ในพริบตา   มาลองดูวิธีกันครับ
จากตัวอย่าง ผมสร้าง smart object โดยมีปลายทางชี้ ไป Table ที่อยู่บน
SQL server ชื่อ DB Server 1  ดังในรูปเลยครับ

2

ซึ่งวันนี้เกิดมีการเปลี่ยนแปลงตัว SQL Server อย่างที่บอก แน่นอนอยากแรกคือเราต้อง Register Service Instance ไปยัง Server ใหม่ที่ต้องการ และทำการย้าย Schema ตามไปด้วย โดยไม่ว่าจะเป็น Schema , Store Procedure ,View ต้องเป็นชื่อเดียวกันนะครับ

1

จากนั้นก็เปิดตัว K2 package and Deployment  ทำการ Create Package โดยเรียกไปที่ smartobjecgt ที่เราต้องการจะย้าย เช็คให้ชัวร์ด้วยเราเลือก Service Instance ตัวเดิม ติดมากับ package ด้วย

3

เมื่อได้ package แล้วให้เปิดตัว K2 package and Deployment อีกครั้ง คราวนี้เราจะมาทำการดีพลอย ตัว package ที่สร้างขึ้น  ตอนที่จะเลือก package ที่จะดีพลอจะเห็นตัว smartobject จะติด service instance ตัวเก่ามาด้วย ตรงนี้เราคลิ๊กขวาละเลือก Over Write Instance ซะนึงที

4

จากนั้นให้คลิ๊กขวาอีกทีเลือกไปที่ Configure คราวนี้เราจะเลือกชี้ไปที่ Service Instance ตัวใหม่ที่เราทำการ Register มาก่อนหน้านี้ เลือกเสร็จแล้วให้กดดีพลอย

5

เมื่อดีพลอยสำเร็จให้กลับไปเช็คที่ K2 Designer เลือกไปที่ Smart Object จะเห็น ตัว Service ที่ผูกไว้กับ Smart Object ได้เปลี่ยนไป

6

เสร็จแล้วก็ลองเทส execute smart object กันดูครับ

step ก็มีประมานนี้ครับ หลักๆ ก็ต้องย้าย schema , view , store procedure ให้เหมือน environment เก่า
และชื่อก็เหมือนเดิมจะดีที่สุดครับ

Update File ใน SmartObject ผ่าน SmartFileProperty

สวัสดีครับ พอดีมี Code Review กันในกลุ่มน้องๆ เลยเอา Solution นี้มาแชร์ครับ เป็นการ update เนื้อไฟล์ ผ่าน SmartFileProperty อันนี้เป็นวิธีที่เราใช้แปะ Signature และเขียน Activity log ไว้ในเนื้อเอกสารครับหลังจากการอนุมัติ  เนื้อหาต้นฉบับ

สำหรับ SmartObject ที่มีการเก็บ File เป็นหนึ่งใน Property ของ SmartObject นั้น เราสามารถดึง File ผ่าน SmartFileProperty มาแก้ไขเนื้อไฟลได้ในระหว่าง Workflow ยกตัวอย่าง Business Scenario ที่น่าจะเกิดขึ้นได้ดังนี้

  • ต้องการสร้างหน้าสรุปผล หลังจากเอกสารผ่านการอนุมัติเป็นที่เรียบร้อย เช่น มีการแปะ Log Activity ที่หน้าแรกว่า เอกสารผ่านการอนุมัติเมื่อวันไหน, Flow ในการเดินของเอกสารเป็นอย่างไร, ใครเป็นผู้อนุมัติในแต่ละขั้น
  • ต้องการ Stamp Signature หลังจากที่เอกสารผ่านการอนุมัติ

โดยวิธีที่เราจะเข้าไปแก้เนื้อไฟล์ของ SmartObject นั้น สามารถทำได้ผ่าน SmartFileProperty โดยมีขั้นตอนดังนี้

  • เริ่มต้นที่การไปดึงค่า file ออกมาจาก SmartObject  โดยอ้างอิงจาก path
  • แปลง file เป็น byte (ตัวอย่างคือ แปลงแล้ว parse เป็น pdfDocument)

byte[] pdfBytes = File.ReadAllBytes(@path);
PdfDocument pdf = new PdfDocument(pdfBytes);

  • เมื่อเราได้ Object File มาแล้วเราก็สามารถแก้ไขเนื้อใน pdf ได้ โดยในตัวอย่างนี้จะเป็นการแปะรูปลายเซ็นไปที่ตำแหน่งที่ต้องการ

Image firstApproverSignature = new Image(@firstApproverSignaturePath, 0, height – 50, 0.5f);
page.Elements.Add(firstApproverSignature);
//get approver timestamp from Activity Instance Destination
DateTime ts = DateTime.Parse(getProcessTimestamp(smoServer, processID, “First level Review”));
page.Elements.Add(new Label(ts.ToString(“G”, thInfo), 10, height – 30, 100, 20, Foxit.PDF.Font.LoadSystemFont(“leelawadee”)));

  • เมื่อเราเพิ่มเนื้อหาใน File เสร็จแล้ว เราก็ Update กลับไปที่ SmartObject เหมือนเดิมผ่าน SmartFileProperty

SmartFileProperty smartFile = (SmartFileProperty)smo.Properties[“File”];
byte[] stampFile = document.Draw();
smartFile.Content = System.Convert.ToBase64String(stampFile);
smo.MethodToExecute = “Save”;
smoServer.ExecuteScalar(smo);

เท่านี้เราก็สามารถ Update File ที่เก็บอยู่ใน SmartObject ได้ ซึ่งใน K2 Version 4.7 จะมี REST Service ขึ้นมา จึงคาดว่าน่าจะใช้ประโยชน์ในรูปแบบ Word Event ได้อีกด้วย เช่น มีการแปะ Word Control แล้วก็ update ผ่าน SmartObject ได้ เช่น เลขที่หนังสือหลังจากการอนุมัติเป็นต้น

[SmartObject] – K2 & Oracle Stored Procedure

สวัสดีครับขาเดปทุกท่าน บางท่านอาจจะเคยใช้เจ้าตัว K2 Smartobject เนี่ยต่อกับ
Oracle มาบ้างหรือ หรือบางท่านก็อาจจะยังไม่เคยใช้ ซึ่งแน่นอนในกรณีถ้าต้องการ
ดึงข้อมูลเยอะๆจากหลาย Table เจ้าตัว Store Procedure นี้น่าจะเป็นทางเลือกแรกๆ
ที่เหล่าขาเดปจะหยิบนำมาใช้อย่างแน่นอน ซึ่งในวันนี้ผมก็จะแนะนำวิธีการ
เขียน Oracle Store Procedure สำหรับดึงข้อมูลออกเป็น Object
เพื่อตัวอย่างให้เหล่าขาเดปได้ดูกันนะคับ หลักๆของมันก็อยู่ที่ตัว oracle statement
ของเรานี่แหละครับ มาดูกันเลยครับ

–> ขั้นแรกผมก็ปั้น statement ขึ้นมาก่อนซึ่งในตัวอย่างก็เป็น statement ง่ายๆนะครับ
ส่งparameter เข้าดึงข้อมูลที่ตรงเงื่อนไขออกมา ซึ่งหลักๆมันก็จะอยู่เราเอาเจ้าตัว cursor
นี่แหละมาครับมาเก็บ ผลลัพธ์เพื่อ return ซึ่งในเงื่อนไขจะ where หรือ join อะไรก็ตามสบายเลยนะครับ

OracleSP1 –> เรามาลองทดสอบดู Store Procedure ที่เขียนกันครับ OracleSP2

–> มาถึงขั้นตอนการดึง Store Procedure มาใช้กับ Smart Object นะครับ ก็เหมือนปกติครับ
ตอนสร้างเลือกเป็น Advance Smart Object

OracleSP3

–> ในส่วนของ method  ก็เลือกไปยัง Oracle Store Procedure ที่สร้างไว้ ทำการ map ตัว input และ output  ให้เรียบร้อยครับ

OracleSP4

–> ก็ได้เวลามาลองดูผลลัพธ์ของตัว smart object ที่สร้างไว้แล้วนะครับ

OracleSP5

สุดท้ายนี้ก็หวังว่า เจ้าตัวนี้ก็น่าจะเข้ามาช่วยเป็นทางเลือกนึงสำหรับขาเดปที่กำลังพัฒนาโปรแกรมต่อ Oracle นะครับ เนื่องจากน่าจะ Performance ที่ดีกว่าการใช้ Views นะครับ

สนุกกับการทำงานครับขาเดปทุกท่าน   ก่อนจากกันผมมีเรื่องราวมาฝากครับ

เรื่องมันมีอยู่ว่าผมไปเที่ยวเกาะเสม็ดมาครับ หลังจากกลับมาผมก็มาคุยกับเพื่อนครับ

ผม: เมื่อเสาอาทิตย์ ตรูพาแฟนไปเที่ยวเสม็ดมา
เพื่อน: เหรอๆ ไปเสม็ด เสร็จทุกรายป่ะวะ
ผม: โอ้โห้ ไม่อยากจะบอก กลางคืนนี่ ไม่ได้นอนเลย
เพื่อน: เห้ย  สมชื่อชื่อคำคมเกาะเสม็ดเลยจดิวะ (เสม็ด เสร็จทุกราย) ฟืบฟาบกันถึงเช้าเลยอะดิ
ผม:  หึ ป่าวอะ  ตรูไปเช้า-เย็นกลับ
เพื่อน: แฺฮ่

 

ขอบคุณครับ
Jimmy

 

 

 

 

K2 Online Material

สวัสดีครับ ในช่วงปีทีผ่านมามี นักพัฒนา องค์กรต่างๆ รวมถึงบริษัททีให้บริการสร้างซอฟต์แวร์โดยใช้ K2 blackpearl มีเพิ่มขึ้นค่อนข้างมาก ถึงแม้ว่าเราจะมีเทรนนิ่งประจำทุกเดือน (ซึ่งก็เต็มทุกเดือน) แต่ถ้าต้องรีบใช้จะทำยังไงดีหละ  ผมเลยขอเอาลิงค์ต่างๆ ที่เป็น resource ในการเรียนรู้ K2 มาฝากครับ

Step by Step สำหรับมือใหม่หัดคลิ๊ก – http://bit.ly/K2Tutorial

เน้นๆ แบบทุกซอกทุกมุม เพือสอบ K2 Certificate

K2 blackpearl Core – http://bit.ly/K2BlackpearlCore
K2 Smartforms builder – http://bit.ly/K2SmartformsBuilder
K2 Blackpearl Extension – http://bit.ly/K2BlackpearlExtensions
K2 Connect – http://bit.ly/K2Connect
 
คลิ๊กเลยย !!!