[Trouble Shooting] – How to solve SmartForms Worklist Control Infinite Spinning

สวัสดีครับ รอบนี้มาคั่นเวลา custom control series นิดหน่อย เนื่องจากเมื่อเช้าได้ช่วยลูกค้าแก้ปัญหา worklist control ของ SmartForms ไม่แสดง worklist ได้แต่หมุนค้างตามรูปด้านล่าง

infiniteworklist01

อย่างแรกที่เราควรไปดูคือ worklist ใน workspace ทำงานได้ไหม? และสามารถใช้งาน service อื่นของ K2 ได้หรือไม่? (service อื่น เช่น start workflow, ใช้งานหน้าจอ SmartForm ที่ไม่มี worklist) ถ้าตรวจสอบแล้วใช้งานได้ ให้ไปดู Web Service URL กับ Web Service URL SSL ใน Environment Library ว่า มีการ set ค่า default ไว้หรือเปล่า?

infiniteworklist02

ถ้าเป็นตามรูปด้านบนที่ไม่ได้ set ไว้ ก็ให้เลือก set อันใดอันหนึ่งให้เป็น default จากนั้น restart service K2 ก็จะสามารถใช้งาน worklist control ของ SmartForms ได้ตามปกติครับ (ถ้ายังไม่ได้ให้ลอง reset IIS กับ clear browser cache ด้วยนะครับ)

ก็ขอจบ tip สั้นๆ ไว้เพียงเท่านี้ ไว้เจอกันใหม่รอบหน้าครับ 😀

Advertisements

[K2API] SmartObject Error ว่า Exception of type ‘SourceCode.SmartObjects.Client.SmartObjectException’ was thrown.???

วันนี้เรากลับมานำเสนอ KB สำหรับเหล่าชาวขาเดฟผู้เรียกใช้งาน K2 API ในส่วนของการต่อ SmartObjects กันบ้างนะครับ

เริ่มด้วยตัวอย่างจากโค้ดข้างล่าง เป็นการดึงข้อมูลจาก SmartObjects ที่ชื่อว่า Comments ขึ้นมาเก็บใน DataTable

SMOGetList1

ทำงานไปก็ใช้งานได้ปกติครับ แต่วันดีคืนร้าย เกิดมี error ขึ้นมาในส่วนนี้จะทำยังไง …ไม่ต้องตกใจเราเขียน try-catch ให้มี exception ออกมาแล้วนี่นา เดี๋ยวไปเช็คใน log เอาละกัน

SMOGetListError0

SMOGetListError

อ่าว..แย่ล่ะสิ Exception ที่ใช้กันมานมนาน ฟ้องว่า “Exception of type ‘SourceCode.SmartObjects.Client.SmartObjectException’ was thrown.” แต่ดันไม่ได้บอกว่ามัน error ที่ไหน ใน InnerException ก็ไม่มีซะด้วย

พระเอกข้างเราคือโค้ดด้านล่างนี้เลยครับ เอาไปใส่แทน catch (Exception ex) ไปเลย

catch (SmartObjectException soe)
 {
 StringBuilder errorMessage = new StringBuilder();
 foreach (SmartObjectExceptionData smartobjectExceptionData in soe.BrokerData)
 {
 string message = smartobjectExceptionData.Message;
 string service = smartobjectExceptionData.ServiceName;
 string serviceGuid = smartobjectExceptionData.ServiceGuid;
 string severity = smartobjectExceptionData.Severity.ToString();
 string innermessage = smartobjectExceptionData.InnerExceptionMessage;
 errorMessage.AppendLine("Service: " + service);
 errorMessage.AppendLine("Service Guid: " + serviceGuid);
 errorMessage.AppendLine("Severity: " + severity);
 errorMessage.AppendLine("Error Message: " + message);
 errorMessage.AppendLine("InnerException Message: " + innermessage);
 }
 throw soe;
 }

มาทดสอบใหม่อีกครั้งกันครับ

SMOGetListError2

คราวนี้เห็นรายละเอียดครบเลย ว่า error ที่ SmartBoxService และ error ฟ้องว่าชื่อคอลัมน์ของ smartobjects ที่ชื่อ “Comments” มันไม่ถูกนะ ..สงสัยจะมีคนเปลี่ยนชื่อคอลัมน์ใน database

หวังว่าจะช่วยให้ debug กันง่ายขึ้นครับ ผมขอไปหาคนที่มาเปลี่ยนชื่อคอลัมน์ก่อน -“-

 

[Trouble Shooting] – K2 ส่ง Notification Email ไม่ได้ #ภาคสอง

จากบทความที่แล้วเรื่อง [Trouble Shooting] – K2 ส่ง Notification Email ไม่ได้ วันนี้มาต่อภาคสอง ลงลึกกันอีกนิดนึง สำหรับการส่งแจ้งเตือน (notification) แล้ว Email ไม่ออกนะครับ(ใครยังไม่ได้อ่านตอนแรก ย้อนไปอ่านก่อนนะ)

  1. ตรวจสอบใน K2 Workspace -> Management Console -> Environment Library > … > [Environment Name] > Environment Fields
      • ตรวจสอบว่าใน Mail Server กับ From Address มีค่าใน Value และ Default เป็น True

    workspace

  2. ใช้คำสั่ง telnet จากเครื่อง K2 ไปยังเครื่อง Mail Server ตาม port ที่ใช้งาน (โดยปกติ smtp จะใช้ port 25 หรือ 587)
      • telnet [mail server name] [port]

    telnet

    • ถ้าขึ้นตามรูปคือ ไม่สามารถ ต่อไปยัง mail server ได้ ให้ลองติดต่อทีมที่ดูแล network หรือ firewall ให้เปิด port ดูครับ
    • เพิ่มเติม วิธีลง telnet client
  3. เข้าเครื่อง database ของ K2 ไปตรวจสอบที่ตารางตามนี้
      • EventBus.CustomEvent: ตารางนี้จะเก็บ ชื่อ process และ activity name ที่เราเรียกใช้งาน notification ให้ลองหาดูว่ามีชื่อ process ที่เรา deploy หรือไม่ ถ้าไม่เจอให้เปิดโปรเจคมา configure ตัว event ที่เรียกใช้งาน notification ใหม่และ deploy อีกที

    db-customevent

      • EventBus.ClientRecorderError: ตารางนี้จะเก็บ error ที่เกิดขึ้นตอนจะส่งอีเมล์ผ่าน MSMQ ถ้าเจอ error อะไรประหลาด ๆ ให้เอาไปหาในอากู๋ต่อครับ

    db-recordError

สุดท้ายถ้ายังไม่ได้รับอีเมล์ ขอยกประโยคเดิมมาอีกที

ถ้าทำตามด้านบนทั้งหมดแล้วยังไม่หาย ก็เปิด ticket เถอะครับ และบอกไปใน ticket ด้วยว่า เราทำอะไรไปบ้างแล้ว

หวังว่าทุกท่านจะได้รับอีเมล์นะครับ สวัสดีครับ 🙂

[Trouble Shooting] – K2 ส่ง Notification Email ไม่ได้

ไม่ได้เขียน blog เกี่ยวกับ K2 ซะนาน ตั้งแต่ k2underground.com เปลี่ยนเป็น community.k2.com ก็ไม่มีที่เขียนอีกเลย ถ้าใครเคยติดตาม blog เก่า (จะมีไหมเนี่ย 555) จะรู้ว่า ผมชอบเขียนเกี่ยวกับปัญหาที่มีคนถามเข้ามาว่า เจออย่างนี้แก้อย่างไร วันนี้ก็เช่นกัน

เนื่องจากการส่ง email ของ K2 หลักๆ มี 2 แบบ คือ ส่งแจ้งเตือน (notification) เวลาที่มีงานมาถึง และส่งด้วย email event (จริงๆ มีอีกทางที่ส่งจาก SmartForms แต่ไม่ขอพูดถึง เพราะเท่าที่เคยลองยังไม่ค่อยเสถียรเท่าไหร่) หลายๆ คนเคยมีคำถามว่า ทำไมสามารถส่ง email โดยใช้ email event ได้ แต่ทำไม email จาก notification ส่งไม่ได้ อาจจะมี case กลับกันบ้าง แต่ก็ไม่เยอะเท่า case นี้ ก่อนจะไปถึงช่วงการตรวจสอบเพื่อแก้ปัญหา เราต้องรู้กันก่อนว่า การทำงานของ notification ต่างกับ email event อย่างไร…

email event จะทำการส่ง email ผ่าน smtp ที่เราทำการ set ไว้ตรงๆ เลย ดังนั้นถ้าเราส่ง email ไม่ออกในกรณีที่ส่งด้วย email event การหาปัญหาจะทำได้ง่ายกว่า เพราะจะมี error ใน workflow อยู่ใน error profile ซึ่งจะมี error message ชัดเจน การแก้ปัญหาในกรณีนี้ ส่วนใหญ่จะเป็นการดูว่า K2 server สามารถเชื่อมต่อกับ smtp server ได้ไหม โดยใช้ telnet กับการตรวจสอบ setting ของ smtp ผ่าน tool connectionstringeditor ของ K2 (อยู่ใน {install directory}\K2 blackpearl\Host Server\Bin)

ส่วนของ notification จะทำงานผ่าน MSMQ และ MSMQ จะเป็นคนส่งให้ smtp อีกรอบหนึ่ง (จริงๆ ใน process มีเยอะกว่านี้ ถ้าสนใจรายละเอียดดูได้จาก http://help.k2.com/onlinehelp/k2blackpearl/userguide/4.6.8/webframe.html#reference_-_notification_event_overview.html#tracksearch=msmq) ดังนั้นจะไม่มี error ใน error profile แต่ถ้าส่งไม่ได้ จะไม่ได้ email เลย ซึ่งปัญหาส่วนใหญ่ที่เจอคือ MSMQ ทำงานไม่ปกติ อาจจะเนื่องจากการ setting หรือจากการทำงานของ windows server เอง ถ้าเจออย่างนี้ให้ทำการแก้ปัญหาตาม step ด้านล่าง

1. ตรวจสอบว่า MSMQ ได้ถูก configure ไว้ใน server อย่างถูกต้องหรือไม่ โดยตรวจสอบตาม step การ setup ตาม http://help.k2.com/onlinehelp/k2blackpearl/icg/4.6.8/webframe.html#msmq.html#tracksearch=msmq และ http://help.k2.com/onlinehelp/k2blackpearl/icg/4.6.8/webframe.html#msmq_settings.html#tracksearch=msmq

2. ให้ดูใน Public Queues ของ Server ว่า Queue Eventbus และ Eventbus Error ถูกสร้างขึ้นมาหรือไม่

public queue

3. ตรวจสอบสิทธิ์ใน Public Queues ว่า K2 service account มีสิทธิ์ Full Control ใน queue หรือไม่

permission

4. ตรวจสอบ MSDTC ว่า configure ไว้ถูกต้องหรือไม่ โดยตรวจสอบได้ตาม http://help.k2.com/onlinehelp/k2blackpearl/icg/4.6.8/webframe.html#MSDTC.html

5. ถ้าตรวจสอบว่า ด้านบน configure ไว้ถูกต้องแล้ว ให้ลอง restart server ดู เพราะเคยเจอ case ที่ MSMQ มีปัญหาจากการทำงานของ windows เมื่อทำการ restart MSMQ สามารถกลับมาทำงานปกติได้

6. ถ้าทำตามด้านบนทั้งหมดแล้วยังไม่หาย ก็เปิด ticket เถอะครับ และบอกไปใน ticket ด้วยว่า เราทำอะไรไปบ้างแล้ว

หวังว่า บทความนี้จะช่วยอะไรได้บ้าง แล้วพบกันใหม่คราวหน้าครับ 🙂