[K2 SmartForms]+[SmartObject]-เปลี่ยน SmartBox Services เป็น SQL Server Services

สวัสดีครับ…หลายๆ คนที่เคยเห็นหรือเคยทำ K2 คงจะคุ้นเคยกับ SmartBox services ไม่มากก็น้อย ข้อดีของ SmartBox services ก็คือ ใช้งานง่าย และสร้าง data structure ได้อย่างรวดเร็ว แต่ก็มีข้อเสียสำคัญอยู่ก็คือ data structure ที่สร้างด้วย SmartBox services นั้นจะโดนสร้างอยู่ใน database K2 เลย ในระยะยาวจะทำให้ database K2 ใหญ่ขึ้นเรื่อยๆ และไม่สามารถ archive เฉพาะ data ของ SmartBox service ใน database K2 ออกไปได้ ซึ่งจะมีผลทำให้ performance แย่ลง และ maintain database ยากขึ้น

เราอาจจะมีคำถามว่า แต่ถ้าใช้ไปแล้วจะทำอย่างไรล่ะ?? สิ่งที่เรารู้สึกน่าจะเป็นเพลง จะกลับตัวก็ไม่ได้~ ให้เดินต่อไปก็ไปไม่ถึง~  แต่เดี๋ยวก่อน!!! เรามีทางออกให้คุณอยู่ 3 แบบด้วยกัน

  1. สร้างใหม่หมด – อันนี้เป็นในกรณีที่สร้างไว้ไม่เยอะ และคิดว่า สร้างใหม่ง่ายกว่า
  2. สร้าง SmartObject ทับของเดิม – ทางนี้ง่ายตอนสร้าง SmartObject แต่จะต้องตามไปแก้ rule ใน SmartForms ที่เรียกใช้ด้วย วิธีนี้ใช้ วิธีเดียวกับที่เราใช้ตอนเปลี่ยนแปลง data structure ของ table นั่นเอง
  3. แก้ method ใน SmartObject ให้ชี้ไปที่ใหม่ – ยากกว่าตอนสร้าง SmartObject แต่ไม่ต้องตามไปแก้ rule ใน SmartForms (ในเคสที่ผมทดสอบแบบง่ายๆ ไม่ต้องแก้ แต่ว่าถ้าเป็น application ที่ซับซ้อนยังไม่ได้ทดสอบนะครับ) *แนะนำให้ใช้วิธีนี้จะดีกว่าครับ

 

Common Step

ในการทำทั้งวิธีที่ 2 และ 3 สิ่งที่ต้องทำก่อนจะมีตามนี้ครับ

  • Generate script สร้าง table ที่เราต้องการจะย้ายออกมาจาก SmartBox services ซึ่งสามารถไปดูได้ใน database K2 schema dbo
  • ได้ script มาแล้ว ก็เอามาสร้างใหม่ใน database ที่ต้องการ
  • Register SQL Service Instance ที่เชื่อมต่อกับ database นั้นให้เรียบร้อย

 

สร้าง SmartObject ทับของเดิม

เมื่อทำตาม Common step เรียบร้อยแล้ว ก็ถึงเวลามาแก้ SmartObject ของเรากัน

  • เปิด SQL Service Instance ที่ต้องการ
  • Click ขวาที่ table ที่ต้องการ แล้วเลือก “Create SmartObject”

Create SMO

  • ที่หน้าสร้าง SMO ให้ใส่ชื่อให้ตรงกับ SmartObject เดิม และกดปุ่ม “Get Exisint Guid” เพื่อดึง Guid ของ SmartObject เดิมมา แล้วก็กดปุ่ม “Publish SmartObject”

Get existing GUID

  • เมื่อสร้างเรียบร้อยแล้ว ถ้ามาลองใช้งาน application ดู จะพบว่า บาง action จะ error เป็นเพราะว่า ชื่อ method ของ SmartObject ที่มาจาก SmartBox กับ SQL Service จะใช้คนละชื่อกัน (อย่างเช่น Get List กับ List, Save กับ Update)

Error Get List

  • สิ่งที่ต้องทำถัดไปก็คือ ไปแก้ใน Rule ของ Form และ View ที่เราใช้งาน (จะมี error บอกอยู่หน้า action ที่ต้องแก้) และหลังจากเลือก method ใหม่แล้วก็ต้องมา configure mapping ใหม่ด้วย

Error In Rule

Error In Rule 2

  • เมื่อแก้ไขเสร็จแล้ว application ก็จะใช้งานได้เหมือนเดิมครับ

 

แก้ method ใน SmartObject ให้ชี้ไปที่ใหม่

มาถึงอีกวิธีที่เราแนะนำกันดีกว่า

  • มี 2 วิธีที่จะแก้ method ของ SmartObject คือ แก้ตรงๆ ผ่าน K2 Designer บน web เลย หรือแก้ผ่าน K2 Studio / Visual Studio โดยผมจะแนะนำวิธีแก้ผ่าน K2 Studio / Visual Studio เป็นหลักนะครับ เพราะสามารถทำ composite SmartObject ได้ด้วย (ในกรณีที่มีการทำ Composite SmartObject ไว้ก่อนย้าย)
  • ก่อนอื่นให้ download file SmartObject .sodx ออกมาก่อน โดย click ขวาที่ SmartObject ที่ต้องการแล้วเลือก “To Sodx”

To sodx

  • เมื่อได้ file มาแล้วก็เอามาเปิดโดยใช้ K2 Studio / Visual Studio ให้กดเลือก method ที่ต้องการแก้ไขและกดปุ่ม “Edit”

Edit method

  • ที่หน้า Wizard หน้าแรกให้เลือก “Run the wizard in Advanced Mode”

Advanced Mode

  • ให้กด “Next” ไปจนถึงหน้าเลือก Service Object จะเห็นว่ามี Service Object เดิมอยู่ในกดปุ่ม “Remove” เพื่อลบ Service Object เดิม

Remove

  • เมื่อลบแล้วให้กดปุ่ม “Add” แล้วเลือก Service Object Method ที่ต้องการ

Select Method

  • เมื่อเลือกแล้ว จะมี list ของ property ที่มีใน method ที่เลือกมา ให้กดปุ่ม “Auto Map” เพื่อ map property ของ SmartObject เข้ากับ property ของ Service Object ได้เลย *ที่ใช้ Auto Map ได้ เพราะว่า ชื่อ Property ควรจะเหมือนเดิม แต่ถ้าเรามีแก้ชื่อ field ใน table อาจจะใช้ Auto Map ไม่ได้นะครับ

Auto map

  • ทำเสร็จแล้วก็กดปุ่ม “OK” และ “Finish” จากนั้นก็ทำอย่างนี้กับทุก method จนครบ
  • เมื่อแก้ method เรียบร้อยแล้ว ให้มาดูที่ SmartObject Property  ถ้ายังมี Property ที่ถูกเลือกเป็น Smart Box อยู่ ให้ uncheck ให้หมด

Uncheck SmartBox

  • จากนั้นก็ Deploy SmartObject ที่แก้แล้ว และลองทดสอบ Application ดูครับ

 

K2 version ที่ใช้ทดสอบในบทความนี้เป็น K2 4.6.11 นะครับ แต่คิดว่า น่าจะใช้งานได้ทุก version เพราะ concept จะเหมือนๆ กัน สำหรับคราวนี้ก็ขอลาไปเพียงเท่านี้ครับ 🙂

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s