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 เลย 😛 ไว้นอนไม่หลับอีกเมื่อไหร่จะมาเขียนอีกครับ

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