Google Map (Reusable) View

สวัสดีวันแห่งความรักครับ วันนี้มีทริคง่ายๆ ในการใช้ smartform แสดงแผนที่แบบที่ไม่ต้องฝั่งโค๊ดมาฝากครับ

googlemapview-01

ก่อนอื่นต้องเล่่าก่อนว่า K2 Smartform มี control ตัวนึงที่ชื่อว่า Location Service ซึ่งจะช่วยให้เราสามารถ หาพิกัด Lat / Long  คราวนี้พอได้มาแล้ว หลายๆ ครั้งเราอยากจะแสดงให้เห็นเป็นภาพบน map ซึ่ง หลักเราก็มักจะไปใช้ map ของ google ซึ่งมี api มาให้เราใช้งานได้สบายๆ แต่คราวนี้ ถ้าเราไม่อยากเชียนโค๊ดหละทำแบบไหนได้ง่ายสุด โดยที่

  • ถ้าเรียก view นี้ ต้องแสดงที่อยู่ปัจจุบันของเราได้
  • ต้องส่งค่า Lat / Long ไปให้แล้วมีการเปลี่ยนแปลง

พอได้ ฟีเจอร์ที่อยากได้แล้วเราก็มาดูเรื่อง องค์ประกอบ ว่าต้องใช้อะไรบ้าง

  • Google Map Key โดยหาได้จากที่นี่เลย https://developers.google.com/maps/ ใช้ฟรีได้ตามเงื่อนไข google นาจา
  • Certificate ที่ใช้ทำ SSL (https นั่นแหละจ้า)  ของเสียเงินที่ไม่ใช่ Self-Signed Certificate นาจา
  • Content URL control
  • K2 Designer (อันนี้แน่นอนนะ)

ต่อมา เราก็ต้องรู้ว่า การที่จะเรียกแผนที่ Google แล้วให้แสดง Pin แบบภาพข้างบนต้องทำยังไง ซึ่งง่ายมาก URL จะมีโครงสร้างแบบนี้ (ในอนาคตอาจมีการเปลี่ยนแปลงก็ตามดูเอกสารของ Google ได้เลย

https://www.google.com/maps/embed/v1/place?key=GoogleMapAPIKey&q=Lat,Long

พอรู้เช่นนี้แล้ว ง่ายแล้วใช่ปะหล่า เราก็จัดการ เอา control มาวางแบบนี้googlemapview-02

ซึ่งประกอบไปด้วย

คราวนี้เราก็ไปสร้าง Expression ที่ประกอบร่าง URL ขึ้นมา ตามโครงสร้างด้านบน (ด้วยฟังก์ชั่น Concatenate )

googlemapview-03

เพียงเท่านี้ เราก็จะได้ view ที่เก็บไว้ใช้ในการแสดงแผนที่สำหรับทุกๆ แบบฟอร์มที่ต้องการแล้ว

ง่่ายใช่ปะ 🙂

ไปละ

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

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

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

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 ได้ เช่น เลขที่หนังสือหลังจากการอนุมัติเป็นต้น

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
 
คลิ๊กเลยย !!!

K2 Smartform – ThaiBahtText Label Control (แปลงค่าเงินบาทตัวเลขเป็นคำอ่านบาทภาษาไทย)

สวัสดีครับ

หายไปพักนึง ช่วงนี้ทีมยุ่งมากๆเลย ระหว่างที่หายไปก็ได้ไปสร้างงเจ้า SmartForm Custom Control มาหนึ่งตัว โดยการทำงานของมันคือ รับค่าตัวเลข แสดงผลเป็นภาษาไทย ซึ่งก่อนอื่นต้องบอกก่อนว่าโปรเจคนี้ได้แรงบันดาลใจต่อยอดมาจาก โปรเจค GreatFriends ThaiBahtText — https://github.com/greatfriends/ThaiBahtText  (ต้องขอบคุณ อ. สุเทพ มา ณ ที่นี้ด้วยครับที่เขียน dll ดีๆ มาแจกฟรีๆ)

หน้าตาก็จะเป็นประมาณนี้

2015-07-11_1333

แจกไว้แบบ community ครับ มีทั้ง source code มาให้เลย สามารถ แตกออกไป สร้างสรรค์กันต่อได้ตามสะดวก เป็น Creative Common : BY SA NC นะครับ Link source code บน Git Hub

วิธีการลองก็ง่ายมากๆ เข้าไปใน โฟล์ดเดอร์ Debug จะมี batch file ไว้ให้ครับ หรือ ถ้าลืมไปแล้ว อาจจะไปย้อนทบทวน Course K2 extension กันได้ครับ

ซึ่งในตัวที่ปล่อยไว้ จะยัง set style ไม่ได้นะครับ ยังทำไม่เสร็จ (ฮิๆ) ใครว่างช่วยทำเพิ่มเติมจะเป็นพระคุณต่อพี่น้องชาว K2 เป็นอย่างมากครับ เหมือนเดิมครับท่านใดอยากเขียน บทความ หรือแชร์ ทิป เทคนิคดีๆ ติดต่อมาได้ทันทีครับผม

สวัสดีวันจันทร์ ขอให้มีความสุขในการทำงานตลอดอาทิตย์ครับ

[Smartform] – Cached กับ การแสดงผลตอน Runtime

สวัสดีคับ วันนี้ได้รับคำถามมาว่าเวลาตอนทำงานบน Design time ก็แสดงถูกต้องนะ แต่พอตอน Runtime กับไม่เหมือน ไม่เหมือนยังไง มาดูกัน

Runtime-wronglayout

เห็นหน้าจอไปแล้ว แน่นอนว่า ไม่มีใครออกแบบหน้าจอแบบนี้แน่นอน ถึงแม้ว่าจะ อินดี้แค่ไหนก็ตาม ก่อนจะไปถึงการแก้ปัญหา เราต้องทราบก่อนว่า ตัว Smartform ที่สร้างขึ้นมีการเก็บ definition เอาไว้ใน database และเพื่อประสิทธิภาพในการแสดงผล ก่อนที่จะนำไปแสดงผลจะมีการ pack ไฟล์ต่างๆ ที่เกี่ยวข้องลงไปในหนึ่งไฟล์ และมีการทำ Cached เอาไว้ แต่ด้วยบุญไม่พาวาสนาไม่ส่ง ทำให้การแพ็คนั้นผิดพลาด (ซึ่งเกิดขึ้นน้อยมากกกกกกกก…) ดังนั้นตอนที่ มันแสดงผลแล้วผิด ทำยังไงมันก็ไม่หายเพราะมัน cached ตัวที่ผิดไว้นั้นเอง

วิธีแก้ไขเบื้องต้น คือ เข้าไปแก้ไข ค่า Forms.CombinedResources.Cache.Enabled จาก True เป็น False ใน file  web.config ทั้งในส่วนของ Runtime และ Designtime พอแสดงผลได้ถูกต้องแล้ว ก็เปลี่ยนค่ากลับ เท่านั้นเอง ก็จะได้หน้าตา form กลับมาแสดผลอย่างถูกต้องแล้วครับ

Runtime-CorrectLayout

หมายเหตุ Leave Application ที่เห็นเป็น Application ที่มากับชุด K2 Application Accelerator สามารถเข้าไปโหลดมาใช้ได้ฟรีครับ

[Idea] – K2 + SharePoint + SAP

สวัสดีคับ

เชื่อว่าหลายๆ ท่านที่ทำ K2 อาจจะต้องทำการเชื่อมต่อกับ SAP และ SharePoint ซึ่งโดยกระบวนการ จะเป็นการกรอกข้อมูลต่างๆ มีการแนบเอกสาร ผ่านตัว Smartform และเมื่อผ่านกระบวนการอนุมัติเรียบร้อยแล้ว ให้อัพโหลดเอกสารขึ้นไปที่ SharePoint และ โพสข้อมูลกลับไปที่ SAP

แต่บางครั้งผู้ใช้งาน SAP อาจจะต้องการเข้าถึงเอกสารที่ทำการอัพโหลดไว้บน SharePoint จากหน้า SAP Gui ดังภาพ

2015-05-06_0940

เวลาที่ผู้ใช้ SAP ทำการ double click จากหน้า SAP Gui ก็จะเปิดเอกสารบน SharePoint ได้ทันที หากสนใจว่าทำได้อย่างไร มาคุยกันได้ครับ ต้องขอบคุณ พี่ดนัย ที่ช่วยแนะนำเกี่ยวกับ SAP ให้ครับผม

Workspace : Start Process ไม่ได้

สวัสดีครับ

เคยมั๊ยครับเวลาที่ต้องใช้เครื่อง Server เครื่องเดียวในการทำ Development และ UAT

ทุกอย่างเทสผ่านไปด้วยดี แต่พอเริ่ม UAT เท่านั้นแหละ เจอ Error

2015-03-06_0040

หลายๆ เห็นแล้วอาจจะร้องอ๋อ แต่เชื่อว่า คนที่เริ่มทำแรกๆ อาจจะงง เพราะอะไรเหรอ?

  1. ด้วยความเป็น Developer เราชอบใช้ User เดียวในการ develop และ test
  2. ซึ่ง เวลา uat เรามักจะใช้หลายๆ user หลายๆ role เพื่อทำ test ตาม scenario ว่ากระบวนการวิ่งได้อย่างถูกต้อง
  3. และบังเอิญว่าตัว process ของ K2 เนี้ยะ มี permission อยู่  ตามรูปด้านล่าง

2015-03-06_0044

จะเห็นว่า กลุ่มคนที่ Start process ได้มีแค่ Administrator (ซึ่งบางที่เราใช้ Account นี้แหละครับในการ develop) ตอนเทสก็ใช้ account นี้เช่นกัน ซึ่งปกติ คนที่เป็นคน deploy process จะมีสิทธิ์เป็น Admin ของ process โดยอัตโนมัติ และแน่นอนว่า Start process ได้ชัวร์ๆ

เราเลยต้องมาจัดการเพิ่มสิทธ์ลงไปให้ Start ได้แบบนี้

2015-03-06_0032

คราวนี้ จะกำหนดให้เป็น  User หรือ เป็น Group ก็แล้วแต่ Security policy ของแต่ละบริษัทแล้วครับว่าเจ้มจ้นแค่ไหน

สวัสดีครับ

SmartForm : วันที่ วันที่ วันที่

สวัสดีครับ

นอนไม่หลับ เลยมาทำในสิ่งที่ตั้งใจจะทำมาเกือบปีซะที ใช่แล้วเขียน Blog เกี่ยวกับ K2 ซะหน่อย

เริ่มเลยละกัน

เชื่อว่าสำหรับคนที่เป็น Developer ไม่ว่าจะรุ่นใหม่รุ่นเก่า ต้องมักจะเคยเจอปัญหา เกี่ยวกับวันที่ โดยเฉพาะ ประเทศไทยเรา ถ้า Vintage หน่อย ก็จะใช้ Text  เก็บวันที่ แล้ว หน้า UI เก็บเป็น dropdown list สามชิ้น  หรือ เป็น แบบปฏิทินให้เลือกก็สุดแล้วแต่

ก่อนที่จะอ่านต่อไป  ต้องบอกก่อนว่า ถ้าอ่านแล้วไม่เข้าใจ ก็ไม่ต้องกังวลนะครับ เพราะแสดงว่ายังไม่เคยเจอปัญหานี้ ก็ยินดีด้วย server ของท่าน setup ถูกต้องเหมาะสมแล้ว แต่ถ้าอยากอ่านต่อก็ถือว่า เก็บไว้เป็นคลังความรู้เผื่อเจอละกันครับ

กลับมาที่ Smartform ของ K2  ปกติแล้ว เวลาที่เราเก็บข้อมูลเป็นแบบ DateTime เมื่อทำการ สร้างมาเป็น SmartObject แล้วนำไป binding กับ Control Smartform ก็จะฉลาดเลือก Control เป็น Calendar ให้

ความดีงามก็คือ เจ้าตัว Calendar เนี้ยะ มันเลือกแสดงผลได้ตามใจชอบ ไม่ว่าจะ วันเดือนปี ปีเดือนวัน เดือนวันปี แบบสั้นแบบเต็ม ผ่านสิ่งที่เรียกว่า Style แต่มันก็จะฉลาดพอที่จะเก็บวันที่ได้ถูกต้องตามรูปแบบวันที่ที่เรา Set ไว้บน Database.

คราวนี้บางครั้ง Server ที่เรา Set ขึ้นมาเป็น Development ในตอนแรกเราก็มักจะมีแค่ Regional Setting แค่อันเดียว คือ United State หรือ บางครั้ง เตรียมดีหน่อยจะเพิ่ม Thai หรือ เปลี่ยนเป็น Thai เข้าไปด้วย

และด้วยความที่เจ้า K2 เนี้ยะ เวลา setup มันจะไปเช็คค่าพวกนี้ เอามาใส่ใน Configuration ด้วย

เรื่องมันก็มีอยู่ว่า

2015-03-05_2254

อ้าว กดเซฟ แล้ว มี Error แบบนี้ขึ้นมา

“The conversion of a nvarchar data type to a datetime data type, resulted in an out-of-range value. The statment has been terminated”

งานเข้า ทำไงดี?  เริ่มเลยละกัน

  1. ประเด็นของ Error นี้มีอยู่ว่า Smartform พยายามเซฟข้อมูลลงฐานข้อมูลแต่ว่า รูปแบบไม่ถูกต้อง
  2. ก่อนอื่นให้เช็คด้วย SmartObject Service Tester ก่อนครับว่า ทำการเพิ่มข้อมูลลงไปได้มั๊ย ถ้าได้ แสดงว่าไม่ได้มีปัญหาระดับ SmartObject
  3. คราวนี้ก็มาดูก่อนครับว่า ภาษาที่ใช้ในเครื่อง เป็นรูปแบบใด ใน Region Setting ว่าเป็น Format ไหน
    1. ซับซ้อนขึ้นมาหน่อยคือ ถ้าเกิด มีการ remote เข้ามา ก็ต้องให้แน่ใจว่า คนที่ remote เข้ามาใช้ profile ภาษาอันเดียวกับ Service Account ที่ใช้ Run K2 รวมถึง Service Account ของ SQL Server ด้วย
    2. สรุปง่ายๆคือ ค่า setting ของตัวภาษา ควรจะตรงกัน
  4. สมมติว่าตรงแล้ว ก็ให้ไปดูที่ web.config ของ Smartform ทั้งในส่วน Designer และ Runtime ว่า SmartObject.ExecutionCulture มีค่า Culture ตรงตามกับที่เครื่องตั้งไว้หรือไม่

แล้วเจ้าไฟล์นี้อยู่ที่ไหน ถ้าตอน install ไม่ได้ทำอะไรประหลาด คำตอบคืออยู่ที่นี้ครับ (แต่ถ้าเลือกไว้ที่อื่น ก็ตัวใครตัวมันนะครับ 😛  )

2015-03-05_2318

เข้าไปที่ Designer ก่อนเลยเราจะเจอไฟล์ชื่อ Web.Config แน่นอน ก่อนที่จะทำอะไร Backup ไว้เสียก่อน เพราะบางที่ยิ่งแก้ยิ่งเจ๊งกะบ๊ง ก็มี

2015-03-05_2319

คราวนี้เราก็เปิด Editor ตัวไหนก็ได้ด้วย สิทธิ์ Local Admin เป็นอย่างน้อย เพื่อที่จะได้แก้ไขไฟล์ได้ พอเปิดมาแล้วก็หาบรรทัดนี้เลย

2015-03-05_2322

ซึ่งถ้าไม่ตรง เช่น เลือก region ไว้เป็น Thai แต่ค่าเป็น en-US ก็จัดการ แก้เป็น th-TH เป็นต้น จากนั้น Save

เสร็จแล้ว ทำการ Reset IIS แล้วก็ Reset K2 blackpearl service ซักที

แล้วก็ทำการเทส  ถ้าเทส บน designer ผ่านแล้วก็ ไปแก้ที่ Runtime ต่อไป

ประมาณนี้ครับ 🙂

ปอลิง: เปิดมาก็ Trouble shooting Level 300 เลย 😛 ไว้นอนไม่หลับอีกเมื่อไหร่จะมาเขียนอีกครับ

—————————–
ข้อเขียน ความเห็นทั้งหมด เป็นความเห็นแนวทางที่เคยใช้แล้วแก้ปัญหาได้ แต่ไม่ได้หมายความว่าเป็นการแก้ปัญหาอย่างเป็นทางการ ใช้มันด้วยสติและความเสี่ยงของตัวท่านเองนะครับ