[K2 Five] – 5.2 New Feature Overview

สวัสดีครับ ห่างหายกันไปนานสำหรับ blog ของ K2 ranger วันนี้ผมจะมาเขียนถึง K2 5.2 ที่เพิ่งออกมาเมื่อวันที่ 16 Oct 2018 ว่า มีอะไรเพิ่มเติมมาให้ใช้กันบ้าง ติดตามได้ตามด้านล่างเลยครับ

New Feature

  • Workflow policy – กำหนดได้ว่า workflow instance หรือ step instance มีการ start เยอะกว่าจำนวนที่กำหนด จะทำให้ workflow instance ที่สร้างมาใหม่กลายเป็น error ไป อันนี้เอาไว้ใช้ป้องกันเรื่อง infinite loop ได้ แต่ก็ต้องระวังถ้าเราตั้งใจให้ทำ loop อยู่แล้ว อาจจะมีโอกาสไปเข้า policy นี้ได้

126

  • Workflow Conditional Start Rule – สามารถกำหนด rule สำหรับ start workflow ได้ ถ้า rule ไม่เป็นจริง จะมี error แจ้งเตือนตอน start workflow และ workflow จะไม่ถูก start

001

  • SmartBox Property Indexing – เราสามารถกำหนดได้ว่า จะให้ property ไหนของ SmartBox มี index
  • Save a form as a draft – สามารถ save draft ตอนใช้ K2 mobile แบบ offline mode ได้
  • Permission Delete – สามารถกำหนดได้ว่า ใครสามารถลบ SmartObjects, Views หรือ Forms ไหนได้ (แยกมาจากของเดิมที่ delete จะรวมอยู่ใน modify)

Enhancements

  • Call Sub Workflow – สามารถ start sub workflow แบบ multiple ได้แล้ว และสามารถสร้าง variable จากหน้าต่าง property mapper ได้เลย โดยที่ไม่ต้องเปิด context browser

003

  • Task Step – เพิ่มให้ notification สามารถ CC และ BCC ให้ user คนอื่นได้ และสามารถใส่ information ของ task เช่น link to worklist item, standard action etc. ใน reminder email ได้
  • Move Line Labels – สามารถย้าย label ของ line ได้
  • Data Fields now Variables – ใน workflow ของ K2 Five data field เดิมจะกลายเป็น variable แต่จะมี text บางอย่างที่เปลี่ยนไม่ครบ ตอนนี้ก็เปลี่ยนครบแล้ว เช่น set datafield step เปลี่ยนเป็น set variables
  • SmartObject Get List Custom Filter – สามารถใส่ custom filter ได้ในการเรียก Get List method ของ SmartObject จากเดิมที่มีแค่ return first row กับ all

001-2

  • Server-Side Rule Execution – สามารถเรียกใช้งาน action แบบ server side ได้ จะช่วยทำให้ performance ดีขึ้น เพราะ execute มาจาก server เลย ไม่ต้องสั่งมาจากฝั่ง client
  • Form and View overlay opacity – ทำให้ Form หรือ View จางลงตอนที่ยัง load ข้อมูลไม่เสร็จได้
  • SmartObject Data Access – สามารถกำหนดได้ว่า user ไหนจะเห็นข้อมูลใน SmartObject ได้บ้าง เป็น feature เฉพาะ SmartBox SmartObject
  • K2 Designer Rights – กำหนดสิทธิ์การเข้า site designer ได้

kb002722-1

  • SharePoint Service Instance – หลักๆ คือทำให้ reuse กับ site ที่มี structure เหมือนกันได้ง่ายขึ้น รายละเอียดยาวๆ อ่านต่อเองได้ใน help นะครับ
  • Salesforce Service Instance – เพิ่มการเชื่อมต่อกับ Salesforce sandbox ทำให้เทสได้ง่ายขึ้น
  • Exchange Online Service Instance – สามารถใช้ On Behalf parameter สำหรับการสร้าง appointment และ task
  • REST Broker – เพิ่ม service key ที่ทำให้ customize header token ได้ และ support numeric operationID ที่ทำให้ใช้ swagger จาก Microsoft Cognitive Services APIs ได้แบบไม่มี error
  • Application Forms – ไม่ต้องย้าย folder ในการวาง form แล้ว แค่เลือกให้เป็น Application Form ก็พอ
  • Deployment Validation – ในส่วนของการ deploy SmartObject ต่อกับ SharePoint ก่อนหน้านี้จะไม่ยอมให้ deploy ถ้า structure ไม่ตรงกันทุกอย่าง แต่ใน version นี้จะยอมให้ deploy เช่น list เดิมมี id, description ส่วน list ใหม่มี id, description, sort จะ deploy ได้ โดย map แค่ columns ที่ตรงกันให้
  • Deployment logging – เป็น log ของการ deploy package เข้าระบบ ดูได้จาก stored procedure ใน database

093

  • View Flow – Click to reports – ก่อนหน้านี้ View Flow ของ K2 Five จะกดอะไรไม่ได้ ตอนนี้เวลากดจะเปิดหน้า report ที่เป็นรายละเอียดของ flow instance นั้น

สำหรับ K2 5.2 ในตอนที่ออกมา มี Fix Pack 1 ออกมาพร้อมกันด้วยนะครับ ถ้าใครจะลงก็ให้ลง Fix Pack 1 หลังจากลง K2 5.2 ด้วยนะครับ สำหรับรายละเอียดแบบเต็มๆ สามารถดูได้ใน link ด้านล่างครับ

https://help.k2.com/onlinehelp/k2five/userguide/5.2/default.htm#Whats-New-Five/Whats-New-Five.htm

ถ้าได้ลองกันแล้วมี feedback อะไรก็มา post คุยกันได้นะครับ ไว้เจอกันใหม่คราวหน้าครับ

Advertisements

ว่าด้วยเรื่องการแสดง Paging ใน Listview

วันนี้มาว่ากันด้วยเรื่อง paging ใน listview นะครับ โดยปกติในหน้าจอ View Settings ของ listview เราสามารถใส่ paging ได้ (ใครหาไม่เจอ เข้าหน้า design listview แล้วหารูปเฟืองนะครับ) ตามรูปด้านล่างผมใส่ให้แสดง 10 รายการต่อ 1 หน้า

setting

ตอนที่ใช้งานมีข้อสังเกตว่า ด้านล่างของ list view มีเลขบอกนะ ว่าเปิดอยู่หน้าไหนอยู่ แต่ไม่ได้แสดงหน้าทั้งหมดที่มี และไม่สามารถกระโดดข้ามไปหน้าสุดท้ายได้เลย

listview

กลไกการทำงานส่วนนี้ ทำเพื่อเพิ่มความเร็วในการโหลดหน้าจอครับ ซึ่งถ้าเราใส่ไว้ว่าให้โหลดหน้าละ 10 รายการ ตอนดึงข้อมูลมาจากฐานข้อมูล ก็จะดึงแค่ 10 รายการ แต่กรณีที่เราต้องการให้แสดงจำนวนหน้าทั้งหมดจริงๆ เราสามารถไปปรับ setting ได้ โดยไปแก้ไขที่ไฟล์ C:\Program Files (x86)\K2 blackpearl\K2 smartforms Runtime\web.config (อย่าลืม backup ไฟล์ทุกครั้งก่อนแก้ไขนะครับ)

<add key=”SmartObject.RuntimeListViewRowCount” value=”false” />

แก้เป็น

<add key=”SmartObject.RuntimeListViewRowCount” value=”true” />

Save ไฟล์ และทดสอบผล แสดงจำนวน page ทั้งหมด แล้ว 🙂

listview2

แต่เดี๋ยวก่อน!! ทดสอบแล้วอย่าเพิ่งรีบเอาไปใช้จริงนะครับ ขอให้อ่าน note ตามนี้ก่อนใช้งานครับ

  1. เวลาที่ใช้ในการโหลดหน้าจอจะเพิ่มขึ้น อย่างที่บอกไปตอนต้นว่ากลไกนี้มีเพื่อเพิ่มความเร็วในการโหลด ผมลองจับเวลาในการโหลด list view 2 ชุดข้อมูล
    • Listview แสดง 2 column จำนวน 20,000 กว่ารายการ พบว่าใช้เวลาเฉลี่ยในการเปิดหน้าจอเปิดขึ้นจาก 1.59 วินาทีเป็น 1.76 วินาที (เพิ่มราว ๆ 10%)
    • Listview แสดง 4 column จำนวน 100,000 กว่ารายการ พบว่าใช้เวลาเฉลี่ยในการเปิดหน้าจอเปิดขึ้นจาก 4.58 วินาทีเป็น 6.02 วินาที (เพิ่มราว ๆ 30%)
  2. Setting ตัวนี้เป็น setting กลาง แปลว่าถ้าแก้ไปแล้วจะมีผลกับทุก ๆ หน้าจอครับ (list view, รวมไปถึง picker control ด้วย)

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

Test with K2 4.6.11

[K2 SmartForms] – Performance Improvement

สวัสดีครับ พอดีช่วงนี้มีโอกาสไปทำ performance improvement ให้ลูกค้าที่หนึ่ง เลยถือโอกาสมาเล่าส่วนที่น่าสนใจให้ฟังกัน ก่อนจะอ่านบทความนี้ ควรจะอ่าน link ตามด้านล่างนี้ก่อน

หลังจากอ่านตาม link ด้านบนแล้ว เราก็จะทราบว่า ถ้าเป็นการ load data ตอนเปิด form ทั่วๆ ไป ควรจะใช้เป็น asynchronous ทั้งหมด ยกเว้นในกรณีต้องการใช้ข้อมูลที่เรา load มาก่อนหน้านี้ทำงาน ถึงจะต้องไปใช้ sequential ที่เป็น then แทน

ส่วนที่น่าสนใจคือ ใน version หลังๆ ของ K2 event ตอน load form จะมี Initializing และ Initialized โดย Initializing จะทำงานตอนเปิด form ส่วน Initialized จะทำงานหลัง Initializing อีกที จากบทความ http://www.datalytyx.com/how-to-improve-k2-smartforms-performance/ แนะนำว่า ถ้ามีการ load data ต่างๆ เช่น ดึงข้อมูลเข้า dropdownlist ให้ไปทำที่ Initialized ส่วน Initializing ใช้สำหรับ set property ต่างๆ และ action ใน Initializing ควรจะทำเป็น asynchronous ทั้งหมด

 

ส่วนถัดมาที่เราสามารถทำได้คือ layer ที่เป็น IIS แล้ว ซึ่งที่เคยลองจะมีตามด้านล่าง

  • ตอน set up K2 ถ้าตาม default เราจะไม่ค่อยแยก application pool ของ designer site กับ runtime site ออกจากกัน ให้ลองแยกออกมาดู เพราะเราจะปรับ Maximum Worker Process เพิ่มขึ้น (ค่า default เป็น 1) โดยจะปรับเป็นเท่าไหร่นั้น ต้องดู resource ของเครื่องด้วย เพราะการปรับส่วนนี้จะทำให้กิน memory เพิ่มขึ้น

Maximum Worker Processes

  • ปิด IIS Logging ของ runtime site เพื่อลดเวลาในการทำงานของ IIS

 

เท่าที่ลองดู การ tuning ในส่วนของ rule ของ K2 จะเห็นผลเยอะกว่าที่ tune ในส่วน IIS ดังนั้นควรจะ focus ในการ improve performance ของส่วน rule ใน K2 ก่อน ซึ่งใน blog นี้จะไม่ได้พูดถึงมาก เพราะสามารถหาอ่านได้ใน link ที่แจ้งไปตอนต้นครับ แต่อย่างไรก็ดีต้องไม่ลืมว่า การออกแบบหน้าจอ และ behavior ในการทำงานเป็นสิ่งสำคัญในการที่ form จะมี performance ที่ดีหรือไม่ดีครับ แล้วพบกันใหม่ครั้งหน้านะครับ