วิธีการส่งข้อความจาก 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 ได้นะครับ

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

[K2 SmartForms] – Using Field Property

สวัสดีครับ หายไปนานกับ blog ของ K2 Ranger พอดีวันนี้มีคำถามเข้ามาทาง page K2 Thailand เกี่ยวกับการเลือก field ที่ผูกกับ data source เลยเอามาเขียนให้อ่านกัน

ในส่วนแรกให้เราสร้าง property field เพิ่มใน file .cs

public string Field

{

get

{

return base.GetOption<string>(“Field”, string.Empty);

}

set

{

base.SetOption<string>(“Field”, value, string.Empty);

}

}

จากนั้นก็ไปเพิ่ม property ใน file definition.xml ของ control

<Prop ID=”Field” mappable=”false” friendlyname=”Field” category=”Detail” refreshdisplay=”false” type=”complex” InitializeServerControl=”initializeFieldPropertyConfig” ClearServerControl=”clearFieldConfig” ServerControl=”SourceCode.Forms.Controls.Web.FieldConfiguration.FieldPropertyConfig,SourceCode.Forms.Controls.Web” />

เพิ่มแล้วเรียบร้อยให้ลอง build แล้ว deploy ใหม่ดู เราก็จะสามารถดึง field ที่อยู่ใน SmartObject ที่ผูกกับ view นี้ออกมาได้

Field

FieldSelection

จะมองเห็นเฉพาะ field type ที่ control นี้สามารถใช้งานได้ด้วย

   ส่วนวิธีเอาค่าจาก Field property ไปใช้ต่อ ก็ใช้วิธีเดียวกันกับการดึงค่าใน property อื่นๆ ไปใช้นะครับ สำหรับรอบนี้ขอลาไปเท่านี้ครับ 🙂

 

[K2 SmartForms] – Can’t click OK to finish rule in designer

สวัสดีครับ หลายๆ คนคงเคยเจอปัญหาอยู่บ้าง เวลาเราใส่ action เข้าไปใน SmartForms เยอะๆ จะไม่สามารถกดปุ่ม OK เพื่อ save action ที่เราใส่เข้าไปได้ หรือกดปุ่ม Finish ที่อยู่ใน form ก็ไม่ได้เช่นกัน ถ้าเคยเจอปัญหานี้ เรามีวิธีแก้ไขมาให้ 2 วิธี โดยทั้ง 2 วิธีเป็นการไปแก้ไข configure ใน web.config ของ SmartForms ที่ site designer (อยู่ใน {install dir}\K2 blackpearl\K2 smartforms Designer)

  • แก้ไขค่า MaxRequestLength จากค่า default เป็น “2097151” ซึ่งเป็นค่ามากที่สุดที่ใส่ได้

designer

  • ถ้าใช้วิธีแรกแล้วยังไม่หาย ให้เพิ่ม tag ตามด้านล่างลงไป ภายใต้ tag requestFiltering

<requestLimits maxAllowedContentLength=”300000000″ />

designer2

เมื่อแก้ไขแล้ว ให้ save web.config และ reset IIS จากนั้นลองใช้งานดู ก็น่าจะ save form ได้ตามปกติครับ  🙂

[K2 SmartForms] – Use SmartObject Property in Custom Control (Part II)

สวัสดีครับ เรามาต่อจากคราวที่แล้วที่เราสามารถเรียกหน้า configure SmartObject ขึ้นมาแสดงได้แล้ว (ถ้ายังไม่ได้เคยอ่าน ดูได้จาก https://k2ranger.wordpress.com/2017/02/20/k2-smartforms-use-smartobject-property-in-custom-control-part-i/  พอแสดงได้แล้ว ในหน้า configure จะมีให้เลือกอยู่ 2 แบบด้วยกัน คือ เลือกเป็น static หรือ SmartObject ในวันนี้เราจะมาพูดในส่วนของ static ก่อน

ในตอนที่แล้ว เราเพิ่ม property ไว้ใน xml หลาย property แต่ยังไม่ได้สร้าง property จริงๆ ใน coding ให้เราไปสร้าง property ใน file .cs ของเราเพิ่ม โดยในการใช้งานส่วนของ static จะใช้แค่ 2 properties ตามด้านล่าง คือ DataSourceType กับ FixedListItems

public string DataSourceType

{

get

{

                return this.GetOption<string>(“dataSourceType”, string.Empty);

}

set

{

                this.SetOption<string>(“dataSourceType”, value, string.Empty);

}

}

public string FixedListItems

{

get

{

                return this.GetOption<string>(“FixedListItems”, string.Empty);

}

set

{

                this.SetOption<string>(“FixedListItems”, value, string.Empty);

}

}

เมื่อเพิ่มแล้วให้เรามาดูเพิ่ม checking ใน method CreateChildControls ในตัวอย่างด้านล่างนี้ ผมจะเช็คว่า ค่าใน DataSourceType เป็น static หรือเปล่า? ถ้าเป็น static ก็จะตรวจสอบ FixedListItems ต่อว่า มีค่าไหม?

ccb4-01

ถ้ามีค่า ก็จะทำการ Deserialize xml (เนื่องจากเวลาเราสร้าง list item เก็บไว้ จะเก็บไว้ใน format ของ xml) ออกมาเป็น list จากนั้นก็วน loop เพื่อ add เข้า dropdownlist เพื่อแสดงค่า และในส่วนสุดท้ายต้องไม่ลืม add dropdownlist เข้าไปใน control ที่จะ render ด้วย (ใน class ผมมีไปประกาศ ddl เป็น dropdownlist แบบ private ไว้ เพื่อเอามาใช้แสดงผลด้วย)

this.ddl = new DropDownList();

if (this.DataSourceType.Equals(“static”, StringComparison.InvariantCultureIgnoreCase))

{

if (!string.IsNullOrEmpty(this.FixedListItems))

{

using (StringReader reader = new StringReader(this.FixedListItems))

{

bool flag = true;

List<StaticItem> list = null;

                        if (this.FixedListItems.StartsWith(“[“))

{

JavaScriptSerializer serializer = new JavaScriptSerializer();

try

{

list = serializer.Deserialize<List<StaticItem>>(this.FixedListItems);

}

catch (ArgumentException)

{

flag = false;

}

if (flag)

{

foreach (StaticItem item in list)

{

ddl.Items.Add(new ListItem(HttpUtility.HtmlEncode(item.Display), HttpUtility.HtmlEncode(item.Value)));

}

this.Controls.Add(ddl);

}

}

else

                        {

flag = false;

                        }

}

}

}

ในกรณีที่ใส่ code ไปแล้วติด reference บางตัวที่หาไม่เจอ ให้ลอง add dll SourceCode.Forms.Utilities เพิ่มเข้ามาใน project แล้วก็ add using ตามด้านล่างเข้าไปใน coding ของ control เพิ่ม

using SourceCode.Forms.Controls.Web.SDK;

using SourceCode.Forms.Controls.Web.SDK.Attributes;

using System.IO;

using System.Web.Script.Serialization;

using SourceCode.Forms.Utilities;

using System.Xml;

เมื่อทำการ deploy เรียบร้อยก็มาทดสอบกัน โดยใส่ข้อมูลเป็น static list

ccb4-02

ccb4-03

จะเห็นว่า ข้อมูลถูกแสดงออกมาอย่างที่อยากได้ใน dropdownlist แต่ถ้าอยากเอาข้อมูลออกมาใช้งานต่อ ก็ต้องไป implement javascript เพื่อ get ค่าจาก control ออกมาอีกรอบนะครับ สำหรับคราวนี้ก็ขอจบการดึง data จาก static list มาแสดงใน control แต่เพียงเท่านี้ แล้วค่อยมาต่อกันรอบหน้าสำหรับการดึงข้อมูลจาก SmartObject มาแสดงครับ 🙂

 

[K2 SmartForms] – Use SmartObject Property in Custom Control (Part I)

สวัสดีครับ กลับมาคราวนี้เราจะมาคุยกันต่อเรื่อง property ของ custom control กัน จาก blog คราวที่แล้วเราได้ลองสร้าง property ที่เป็นแบบทั่วไป (type เป็น string, number, boolean etc.) กันไปแล้ว แต่จะมีอีกคำถามว่า ถ้าเราอยากทำ control ที่ดึงข้อมูลจาก SmartObject ล่ะจะทำได้ยังไงบ้าง?

ccb3-01

นี่แหละหน้าตาแบบที่เราอยากได้

    วิธีการเพิ่มเข้าไปก็จะเหมือนกับแบบทั่วไป คือเพิ่มเข้าไปใน xml schema ของ control ที่เราสร้าง

  • ส่วนแรกเป็นการเพิ่ม DataSourceType ที่น่าสนใจคือ เราต้องระบุ type เป็น “complex” และต้องระบุ serverControlType, InitializeServerControl, ClearServerControl และ ServerControl attribute เข้าไป ซึ่งส่วนนี้จะเป็นการเรียกใช้ control ที่ SmartForms มีมาอยู่แล้ว มาแสดงอยู่ใน property ของ control

<Prop ID=”DataSourceType” mappable=”false” friendlyname=”Type” type=”complex” serverControlType=”property” category=”Data Source” refreshdisplay=”true” InitializeServerControl=”initCommonDataSourceConfig” ClearServerControl=”clearComplexPropertyConfig” ServerControl=”SourceCode.Forms.Controls.Web.PropertyConfiguration.AssociationPropertyConfig,SourceCode.Forms.Controls.Web” />

  • ใน option ของการเลือก SmartObject จะมีให้กำหนดเป็น static list ได้ property FixedListItems จะเป็นตัวที่ไว้ใช้เก็บ static list ที่เรากำหนด

<Prop ID=”FixedListItems” mappable=”false” friendlyname=”Items” type=”string” serverControlType=”property” category=”Data Source” ReadOnly=”true” />

  • AssociationSO ไว้เก็บ SmartObject ที่เราเลือกใช้

<Prop ID=”AssociationSO” mappable=”false” friendlyname=”SmartObject” type=”string” serverControlType=”smartobject” category=”Data Source” ReadOnly=”true” />

  • AssociationMethod ไว้เก็บ method ที่เราเลือกใช้

<Prop ID=”AssociationMethod” mappable=”false” friendlyname=”Method” type=”string” serverControlType=”listmethod” category=”Data Source” ReadOnly=”true” />

  • ValueProperty ไว้เก็บ property ที่เราเลือกมาเป็น value ของ control

<Prop ID=”ValueProperty” mappable=”false” friendlyname=”Value” type=”string” serverControlType=”property” category=”Data Source” ReadOnly=”true” />

  • DisplayTemplate ไว้เก็บ property ที่เราเลือกมาเป็น display ของ control

<Prop ID=”DisplayTemplate” mappable=”false” friendlyname=”Display” type=”string” serverControlType=”property” category=”Data Source” ReadOnly=”true” />

ที่ใส่ไปด้านบนจะเป็นเฉพาะส่วนที่เราต้องการใช้งาน แต่จริงๆ แล้วยังมี property ส่วนอื่นที่ใช้ได้เพิ่มเติม อย่างเช่น lookup ข้อมูลจาก SmartObject ที่ทำ Association ไว้ หรือ filter ข้อมูลจากการ list control อื่น ซึ่งยังไม่พูดถึงตอนนี้ ถ้าเราใส่เพิ่มเข้าไปใน file .xml ของ control แล้ว ให้ลอง build แล้ว deploy ดู เมื่อลอง add control เข้ามาแล้วไปดูที่ property จะเห็นรูปตามด้านล่าง

ccb3-02

เมื่อกดปุ่ม … ก็จะได้ popup ส่วนที่เป็นการเลือก SmartObject ขึ้นมา จะเห็นว่า มีให้เลือกเป็น static list และเลือกจาก SmartObject

ccb3-03

เมื่อเราเลือก SmartObject ที่ต้องการแล้วกดปุ่ม OK  ข้อมูลที่เลือกไว้ก็จะแสดงอยู่ในหน้า property

ccb3-04

มาถึงตรงนี้ เราก็จะได้ control ที่สามารถเก็บ SmartObject ที่ต้องการใช้ได้แล้ว ส่วนการเอาค่าที่เก็บไว้ไปใช้งานเราจะมาต่อกันรอบหน้าครับ 🙂

[K2 SmartForms] – Add property for your custom control

สวัสดีครับ กลับมาต่อกันใน blog ที่สองของ series การเขียน custom control ด้วยตนเอง (!? หืมม เคยตั้งชื่อด้วยเหรอออ = =’) ในคราวนี้ เราจะมาลองเพิ่ม property ง่ายๆ ให้ control ของเรากัน ถ้าใครยังไม่รู้วิธีสร้าง custom control project ให้ไปดูที่ blog แรกก่อนนะครับ (https://k2ranger.wordpress.com/2017/01/26/k2-smartforms-custom-control-for-beginner/)

ตอนที่สร้าง control มาจาก template เราจะได้ control default มาเป็น textbox ดังนั้นใน blog นี้ ผมจะเพิ่ม property ให้ textbox นี้กลายเป็น password textbox ได้ โดยสิ่งที่ต้องทำอย่างแรกคือ เปิด file xml ของ control ขึ้นมา

ccb2-01

จากนั้นให้หา section “Properties” แล้ว add property เพิ่มเข้าไป โดยมีรายละเอียดตามด้านล่าง

  • ID => ชื่อของ property
  • friendlyname =>label ที่จะปรากฏอยู่ในช่อง property ของ control
  • type => datatype ของ property ในกรณีนี้อยากได้แค่ checkbox ก็ใส่เป็น boolean ไป
  • category => แสดง control ใน category ไหน
<Prop ID="DisplayPasswordStyle" friendlyname="Display password style" type="bool" category="General" />

ccb2-02

ขั้นถัดไปให้ไปเปิด file .cs แล้วใส่ get set method สำหรับกำหนดค่า property ที่เราเพิ่มเข้ามา ในส่วนนี้ class ของ K2 ที่เรา inherit มา จะมี method สำหรับ get กับ set ค่าให้อยู่แล้ว ชื่อ GetOption กับ SetOption

public bool DisplayPasswordStyle
{
            get
            {
                return this.GetOption<bool>("displaypasswordstyle", true);
            }
            set
            {
                this.SetOption<bool>("displaypasswordstyle", value, true);
            }
}

 

ccb2-03

ส่วนสุดท้ายที่เราต้องทำคือ ควบคุมการ render control ในส่วนนี้จะมีอยู่ 2 methods ที่ใช้ได้คือ CreateChildControls กับ RenderContents (ถ้าใครเคยเขียน web part ของ SharePoint มาก่อน ก็น่าจะคุ้นเคยกับ method พวกนี้อยู่ เพราะจะทำงานแบบเดียวกัน) แต่แนะนำให้ใช้ CreateChildControls จะง่ายกว่า

ในส่วนนี้ผมจะตรวจสอบว่า มีการเลือกให้ Display เป็น password ไหม ถ้าเลือกให้ display เป็น password ก็จะใส่ attribute เพิ่มเข้าไป

if (DisplayPasswordStyle)
{
    base.Attributes["type"] = "password";
}

ccb2-04

เมื่อทำตามครบแล้ว ให้ build solution จากนั้นก็ deploy เข้า server K2 โดยการ deploy ก็ทำไม่ยาก เพราะใน template จะทำ file .bat สำหรับคำสั่ง copy dll และ register control เข้า server ให้แล้ว (ใน .bat จะ copy ไปที่ drive c: นะครับ ถ้าใครลง K2 ไว้ drive อื่น หรือไม่ใช่ folder default จะต้องแก้ file .bat อีกที) file .bat จะอยู่ใน bin folder ของ project ที่เราสร้าง จะมีชื่อว่า “RegisterCustomControl”

ccb2-05

ให้รัน .bat รอจนขึ้น Complete ตามด้านล่าง แสดงว่า การ deploy เสร็จเรียบร้อย

ccb2-06

สุดท้ายคือ การทดสอบ เมื่อเราเปิดหน้า designer จะเจอ control ที่เรา register มา เมื่อลากมาวาง ก็จะเห็น property ที่เราเพิ่มเข้ามา

ccb2-07

ถ้าเราเลือกให้แสดงผลเป็น password control ก็จะแสดงค่าที่พิมพ์เป็น * แทนที่จะเป็นตัวอักษรปกติ

ccb02-08

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

[K2 SmartForms] – Custom Control for Beginner

สวัสดีครับ กลับมาคราวนี้เรามาเจอกันกับการเขียน SmartForms Custom Control ที่หลายๆ คนอยากรู้กัน ใน blog แรกของ series SmartForms Custom Control นี้ จะเน้นที่การอธิบายวิธีการเตรียมตัว กับส่วนประกอบของ custom control กันก่อน

ก่อนที่จะเริ่มเขียนกัน ให้ไป download Visual Studio Template จาก http://community.k2.com/t5/K2-blackpearl/Visual-Studio-Project-Templates-for-K2-blackpearl-Extensions/ba-p/1081 ซะก่อน (เลือก template version ตาม Visual Studio ที่เราจะใช้ด้วยนะครับ) การมี template จะช่วยให้เราสร้าง custom control ได้ง่ายขึ้น

หลังจาก download และลงเรียบร้อยแล้ว เราก็มาเริ่มขั้นแรกคือ สร้าง Custom Control Project ขึ้นมา โดยให้เลือกเป็น “Custom SmartForm Control Project”

01

หลังจากสร้างแล้ว เราจะได้ project หน้าตาตามด้านล่าง

ccb01

จะเห็นว่า project template add batch file สำหรับ register control มาให้ด้วย รวมถึง signing key ที่จำเป็นในการสร้าง custom control สิ่งที่เราจะทำถัดไปคือ add new item เข้ามาใหม่ ในส่วนของ SmartForms จะมี 2 แบบคือ Server Control กับ Client Control ในกรณีของเราให้เลือกเป็น Client Control

ccb03

หลังจาก Add Client Control มาแล้ว เราจะได้ folder เพิ่มเข้ามา พร้อมทั้ง file ที่ต้องใช้ในการทำ custom control คือ

  1. File .cs => สำหรับใส่คำสั่งที่เป็น server side
  2. File .xml => สำหรับ register control เข้ากับ K2 โดยจะมีรายละเอียดต่างๆ ของ control
  3. File .js => สำหรับใส่คำสั่งที่เป็น client side (มีได้มากกว่า 1 file)
  4. File .css => สำหรับใส่ stylesheet เฉพาะของ control (มีได้มากกว่า 1 file)

ccb02

โดย file .xml, .js และ .css ต้องเลือก property ของ Build Action ของ file เป็น “Embedded Resource” ด้วย (file ที่ template สร้างให้จะเป็น Embedded Resource) อยู่แล้ว

ccb04

สำหรับ blog แรกเกี่ยวกับ Custom Control ขอจบที่การอธิบายส่วนประกอบเท่านี้ก่อน ส่วนครั้งหน้าเราจะทำเริ่มทำ custom control จริงๆ กันครับ 🙂

 

 

[K2 SmartForms] – Tip สำหรับการแก้ stylesheet

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

ก่อนอื่นใน K2 SmartForms พวก resource files ต่างๆ รวมถึง stylesheet จะถูกรวมแล้วส่งมาที่ client เป็น file เพียงไม่กี่ file ซึ่งตรงนี้จะทำให้เราหา stylesheet ได้ยากขึ้น ถ้าเราไปหาด้วย developer tool ของ browser เราจะได้ข้อมูลตามด้านล่าง

style-combine

เมื่อกดเข้าไปใน CombinedResource link ก็จะได้ข้อมูลด้านล่าง

style-combine-2

จะเห็นว่ายังพอจะหาข้อมูลได้ เพียงแต่อาจจะดูยากไปซักหน่อย แต่ถ้าเราอยากดูง่ายขึ้นก็มีวิธีคือ ไปแก้เปลี่ยนค่าของ config ที่ชื่อ “Forms.PostRenderCombining.Enabled” และ “UseBundledFiles” ที่อยู่ใน web.config ของ SmartForms ให้เป็น “false” ซะ จะเป็น site designer หรือ runtime ก็ได้ ขึ้นกับว่า เรา ใช้ site ไหนในการหา stylesheet (reference http://help.k2.com/onlinehelp/k2smartforms/devref/4.6.11/default.htm#web_config_Performance.html%3FTocPath%3DConfiguration%2520Reference%7CSmartForms%2520WebSite%2520web.config%7C_____2)  เมื่อแก้เรียบร้อยให้ reset IIS แล้วลองเข้าใหม่ จะได้ผลตามด้านล่าง

style-not-combine

จะเห็นว่า แทนที่จะเห็นเป็นชื่อ CombineResouce ก็จะเห็นเป็นชื่อของ stylesheet นั้นเลย และเมื่อเรา click link เข้าไปก็จะเห็น class ที่ใช้แบบชัดเจน ก็จะหาที่แก้ไขได้ง่ายขึ้น

style-not-combine-2

คิดว่า น่าจะช่วยให้แก้ไข stylesheet ได้ง่ายขึ้นนะครับ แล้วพบกันใหม่คราวหน้าครับ 🙂

[Patch] – K2 4.7 Release Note แบบไทยๆ

สวัสดีครับ หายหน้าหายตาไปนาน รอบนี้กลับมาพร้อมกับ major release ของ K2 ซึ่งก็คือ K2 4.7 นั่นเอง สำหรับรอบนี้ผมอาจจะเขียนเป็น overview ก่อนว่า K2 มีอะไรใหม่ๆ ออกมาบ้าง และค่อยไปลงลึกในแต่ละส่วนใน blog ถัดๆ ไป (จะได้เขียนไหม 555) แล้วกัน ถ้าใครอยากดู release note แบบเต็มๆ ก็สามารถดูได้ที่ http://help.k2.com/kb001745 และสำหรับ compatible matrix ของ K2 4.7 สามารถดูได้ที่ http://help.k2.com/blackpearl/support-matrix ครับ

 

    OS and Software Support

  •     OS – ไม่ support Windows 2008 R2 แล้ว ส่วนฝั่ง client ก็ต้องเป็น Windows 8.1 ขึ้นไป

server-support

client-support

  •    SQL – Support Azure SQL Database แล้ว minimum เป็น Azure SQL S2 และ recommend เป็น Azure SQL P1 ซึ่งจะ support เฉพาะการลง K2 ใหม่เท่านั้น ไม่สามารถนำ database เก่าจาก SQL version อื่นมา restore แล้ว upgrade ได้  ถ้าเป็น on-premise support SQL Server 2016 เรียบร้อย ส่วน SQL Server 2008 R2 ไม่ support แล้วตามๆ กันไปกับ Windows 2008 R2

sql-support

  • SharePoint –  Support SharePoint 2016 แล้ว ส่วน SharePoint 2010 หมดการ support
  • Visual Studio – Support Visual Studio 2015 และ 2013
  • .NET Framework – Require ว่าต้องลง 4.6.1 แต่ตรงนี้ควรระวังนิดนึงนะครับ เพราะ K2 4.6.11 ไม่ support .NET Framework 4.6.1 ดังนั้น ถ้า upgrade ต้องดู step rollback ดีๆ
  • Exchange – Support Exchange 2013 – 2016
  • InfoPath – ไม่มี support แล้วใน K2 4.7
  • Oracle – Support Oracle 12c (Release 1) ลงไปถึง Oracle 11g (Release 1)
  • Browser – ทั้ง Design time และ Runtime support IE 11 อย่างเดียว ไม่มีวี่แววของ Microsoft Edge โดยรายละเอียดของ version support ตามด้านล่าง

Internet Explorer 11.0.10240.17071
Chrome 53.0.2785.101 m
Firefox 48.0.2
Safari Version 9.1.2 (Windows support deprecated. Latest Safari version is only supported on Mac)

 What’s New

K2 blackpearl

  • REST Endpoint Broker with Swagger support
  • Package and Deployment
    • สามารถทำการ Package by Reference ได้ ซึ่ง feature นี้จะทำให้ไม่ต้อง package ทุก items ลงไปใน package เดียวกัน
    • Performance enhancement
    • Package Analyzer – ไม่มีให้เลือก Full Analysis กับ Partial Analysis อีกต่อไป และ ‘Automatically analyse after each change’ จะไม่เป็น default option ซึ่งจะช่วยให้ performance ในการทำงานเร็วขึ้น
  • K2 Workspace – Management console ใน K2 Workspace จะมี site แยกมาเป็น K2 Management Site (Management console เดิมจะยังสามารถใช้งานได้ใน K2 4.7 แต่ recommend ให้เปลี่ยนไปใช้ K2 Management Site แทน เพราะต่อไปน่าจะถูกเอาออก)

4-7-dashboard

  • Out of Office Notification – มีการส่ง email notify ให้คนที่ถูก forward งานไปให้จากการทำ Out of Office
  • Activity and Event System Name – ตอนนี้ Activity กับ Event มีการใช้ concept ของ System Name แล้ว เพื่อให้ไม่มีปัญหาตอนทำ package and deployment กรณีที่มีการเปลี่ยนแปลงชื่อ Activity หรือ Event

K2 smartforms

  • Dependencies – เพิ่ม dependencies check report สำหรับดูว่า มี item อะไรที่มีปัญหา หรือต้องทำการแก้ไขก่อนการทำ package
  • Controls
    • Barcode – Capture barcode ผ่าน K2 Mobile app (iOS)
    • Image Annotation – ถ่ายรูปแล้วใส่ annotation ผ่าน K2 Mobile app (iOS)
    • Tree Control – เพิ่ม keyboard navigation, search, Async loading
    • Worklist Control – Sorting Status column ได้
  • Runtime performance improvement
  • SmartForms email – ปรับไปใช้ configure เดียวกับของ K2 blackpearl และถ้า error จะมี log อยู่ใน hostserver log แล้ว
  • Installer – K2 SmartForms Control Pack ถูก merge เข้ากับ K2 SmartForms แล้ว ทำให้ run setup ครั้งเดียวได้

 

จะเห็นว่า ส่วนที่น่าสนใจและน่าจะกระทบกับการทำงานเยอะๆ จะเป็น K2 Management Site, Dependencies check report ของ SmartForms และ Package Deployment ที่มีการปรับปรุงให้ดีขึ้น แล้วจะมาเขียนรายละเอียดให้อ่านกันอีกรอบนะครับ สำหรับวันนี้ขอจบแต่เพียงเท่านี้ครับ 🙂

Smartform Thought: ซ่อนแสดงทำแบบไหนดี?

สวัสดีครับ หลังจากปล่อยให้ Ranger ท่านอื่นเขียนเรื่องหนักมานาน วันนี้เรามาเรื่องเบาๆ บ้างดีกว่า วันนี้เรามาเบาๆ เกี่ยวกับ การใช้ Rule เพื่อให้เหมาะสมตามสถานะการณ์กันครับ

Continue reading Smartform Thought: ซ่อนแสดงทำแบบไหนดี?