[C#, Office Add in] เปิด Feature Debug Mode ให้กับตัว Excel Add-in (VSTO) ของเรา

เวลาเราทำตัว Add-in สำหรับ Microsoft Office นะครับ บ่อยครั้งเลย ที่เราเอาตัวที่ Build เรียบร้อยแล้ว ไป Deploy ที่เครื่อง User แต่ปรากฏว่า มันเงียบ….. แล้วตรูจะไปต่อยังไงเนี่ยยย วันนี้ผมมีทริปในการ Set ค่า เพื่อเปิด Debug Mode ของ VSTO ครับ Note: สำหรับ KM นี้ใช้กับ .NET Framework เท่านั้นครับ

[C#, Office Add in] Registry Key ที่เกี่ยวข้องกับ VSTO

สำหรับตอนนำ Add-in ไปติดตั้ง หากลงผ่านตัว Setup แล้วระบบสร้างตัว Registry ที่เกี่ยวข้องที่ลง Registry ที่ Path ดังนี้ครับ โดยสำหรับ Office ทุกตัวยกเว้น Visio ครับ ส่วนสำหรับตัว Visio นะครับ เครื่องที่ไม่มี ก็ไม่ต้องตกใจนะครับ เพียงแค่นำ Script Registry ชุดนี้ไป Save เป้น .reg แก้ค่าที่เกี่ยวข้อง และรันมันครับ

[C#, Office Add in] วิธีแก้ปัญหาเมื่อลง VSTO ไม่ได้

สำหรับ Developer ที่ทำส่วนเสริมให้กับ Office หลายคนอาจจะเข้าใจว่ามีแต่ตัว VBA อย่างเดียวนะครับ แต่จริงๆแล้วเนี่ย MS Office สามารถให้เราปรับแต่ง Customize เพิ่มความสามารถด้วย .Net Framework ได้เหมือนกันนะครับ โดยเรียกรวมเป็น Office Add-in ซึ่งเมื่อ Code เสร็จ พอจะนำไปติดตั้งเราต้องลงตัว Visual Studio Tools for Office Runtime (VSTO)  เกริ่นมานานพอควรและ แต่เมื่อนำไปลงทดสอบที่ Site งาน พอดีดันไปเจอเครื่อง Windows 7 เครื่องนึงที่ลงไม่สำเร็จครับ โดยมี Message แจ้ง “Generic trust failure” ดังรูปครับ สำหรับวิธีแก้ปัญหามี 2 วิธี ดังนี้ครับ แบบง่ายครับ Run โปรแกรม rootsupd.exe (ตาม Version ของ Windows นะครับ) จากนั้น Restart และลงตัว .Net Framework ใหม่ครับ เสร็จแล้วก็ลงตัว VSTO อีกทีครับ ถ้าแบบแรกไม่สำเร็จต้องแก้จาก Registry ครับ เปิด Regedit ไปยัง Path [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing] ลบ Entry ชื่อ “State” จากนั้นลง ลงตัว .Net Framework ใหม่ครับ แล้วก็ Restart ทดสอบลงตัว VSTO ใหม่ครับ

[DB2] Toad กับการแสดงข้อมูลประเภท CLOB ในผลลัพธ์ที่ได้จากการ SELECT

IBM DB2

ก่อนอื่นที่เราจะมาดูพวก Setting ใน TOAD กัน เราต้องรู้ก่อนนะครับว่า CLOB คือ Character Large Object แปลตรงตัวเลยครับ เป็นชนิดช้อมูลที่เก็บตัวอักษรเยอะๆมากๆครับของ DB2 ถ้าใน SQL Server จะเป็น Type Text ครับ เนื่องจากข้อมูลมันใหญ่มากๆครับ ตัว Toad เลยจึงไม่สนใจ Field ประเภทนี้ เมื่อเราได้ SELECT ข้อมูลครับ และเพิ่มความเร็วใจการทำงานของ Toad ด้วยครับ โดยแสดงเป็นคำว่า (Excluded)  ดังรูป สำหรับการเปิดโปรแกรม Toad แสดงข้อมูลประเภท CLOB สามารถปรับการตั้งค่าได้ในโปรแกรม ดังนี้ครับ

[DB2] SQL1159 Initialization error with DB2 .NET Data Provider / SQLSTATE IM004, Error Reason Code 10

black and white piano keys

พอดี Application ที่ทำตัวเป็นลูกครึ่งผมระหว่างระบบเก่า และใหม่ จึงมีการเชื่อมต่อเข้ากับ DB2 2 แบบ ได้แก่ ODBC และ DB2 .NET Data Provider และพบ Error ดังนี้ สำหรับตัว ODBC มีรูปแบบ Error ดังนี้ รูปแบบ Error สำหรับตัว ODBC การแก้ไข: ให้ไปเพิ่มสิทธิของ User ที่ใช้งาน Application ให้อยู่ในกลุ่ม DB2ADMNS หรือ DB2USERS ครับ สำหรับตัว DB2 .NET Data Provider มีรูปแบบ Error ดังนี้ รูปแบบ Error สำหรับตัว DB2 .NET Data Provider การแก้ไข: ให้ไปเพิ่มสิทธิของ User ที่ใช้งาน Application ให้อยู่ในกลุ่ม DB2ADMNS หรือ DB2USERS ครับ ตรวจสอบวาง DLL db2app.dll หรือ db2app64.dll (แล้วแต่บิตของ Windows เป็น 32 หรือ 64 บิต) ไว้ในโฟลเดอร์เดียวกับ Application ของเรา และอย่าลืมตรวจสอบ เวอร์ชั่นของตัว ibm.data.db2.dll ให้สอดคล้องกับตัว db2app.dll หรือ db2app64.dll ด้วยนะครับ Reference SQL1000 – SQL1249 – IBM Documentation SQL1159 rc=10 when running a DB2 .NET application (ibm.com)

[Hudson, Jenkins] ใส่ไฟล์เพิ่มเข้าไปใน E-Mail แจ้งเตือน

jenkins

สำหรับ Blog ผมได้เขียนเกี่ยวกับการนำ Build Log ที่ได้จาก VB6 ไปใส่ใน Console Log ของตัว CI ครับ แต่ว่ามันทำไม่ได้ ผมเลยใช้วิธีง่ายๆเลยครับ แนบไฟล์ log ของการ Build ไปกับ Email ซะเลย 555 โดยมีขั้นตอน ดังนี้ สิ่งที่ต้องมี ขั้นตอนการ Config ครับ

ลองใช้ Hudson (ปัจจุบัน Jenkins) กับ Platform VB6

jenkins

พอดีเห็นงานที่บริษัทมันยุ่งยากมากกับการ Build Legacy Code เก่าอย่าง VBุ6 ที่มีปัญหามากมาย โดยย้าย Code จาก Microsoft Source Safe มายัง SVN แล้ว จากนั้นเชื่อมกับตัว Continuous Integration อย่าง Hudson ครับ เพื่อแก้ไขปัญหา ดังนี้ ลดข้อผิดพลาดจากการ Check In Source Code โดยทำให้ตัว CI Server ทดสอบ Build และแจ้งผลหากมีข้อผิดพลาด ทำ Automate Build ของ VB6 เพื่อลดการจากการอัตโนมือ ซึ่งมีข้ออผิดพลาดสูง และจากข้อที่แล้วที่มีการ Build สม่ำเสมอทำให้เราเอาตัว .exe หรือ DLL เหล่านั้นมาใช้ได้เลย โดยต้องมี ทำ Build Tools มาครอบ vb6.exe ดังนี้ pingkunga/VB6AutoBuildApp: VB6AutoBuildApp (github.com) //ได้ย้าย Code จาก svn > GitHub เลยมา Update Blog อีกที เพิ่ม job ใน Jenkins ให้มาเรียกตัว Build Tools พยายามทำ UI Test ถ้าทำได้ เพราะเท่าที่ลองหาข้อมูลดู Nunit กับ TestStack ในการทำ Test แบบ UI Test น่าจะมีความเป็นไปได้สูงสุด เพราะการไปปรับ Code ให้ VB6 รองรับ UnitTest เสียเวลามากเกินไป ยอม Rewrite เป็น…

[C#] Constants Interfaces ของ Java เทียบเท่ากับอะไรใน C#

ก่อนจะมาเข้าเรื่องของ C# กันลองย้อนไปทาง Java ก่อน โดยเจ้าภาษา Java นี่ มันไม่มี Global Variables ให้ ซึ่งถ้าเราต้องการ Set ค่าคงที่แล้วต้องการให้ทุก Class เห็น และสามารถใช้งานได้ เราต้องทำ Constants Interfaces มองง่ายๆเลย คือ Interface ที่มีแต่ Constant แหละ ตามตัวอย่างเลย มาทาง C# บ้าง ทำไม่ได้ครับ (ส่วนตัว ผมคิดว่าดีที่ C# ทำไม่ได้อ่า) เพราะมันแปลกๆกับการเอา Interface มาเก็บ Const และถ้ามีการจัดหมวดหมู่เยอะนี้ implement กันตาย แถมเป็น Anti-Pattern (ตามความเข้าใจของผม Interface ควรกำหนดการทำ มากกว่าจะไปกำหนด Data และพอทำเป็น Interface มันดันกลายเป็นการทำ public API ให้ชาวบ้านเห็นอีก โดยทางฝั่ง Java เองแนะนำให้ใช้เป็น static import แทนครับ) วกกลับมาสำหรับ C# ถ้าจำเป็นต้องทำให้ทำเป็น abstract class แทนครับ ดังตัวอย่าง แต่สำหรับเคสนี้ ควรทำเป็น Static Class (ใน C# กับ Java ไม่เหมือนกันนะครับ) ทำเป็น Global Variable ดีกว่านะครับ แต่ควรวางให้มันเห็นทั้ง Solution นะครับ (พอดีเคสที่ทำงานจริงไปเจอตอเข้า เพราะ ดันไปวาง static class ให้ project A ในชั้น UI และพอจะนำมาให้กับอีก project B ในชั้น Service พวก Business…

[JAVA] Shallow Copy กับ Deep Copy

จากบทความที่แล้วนะครับ จะเป็นการใช้แนวคิด Shallow Copy กับ Deep Copy ใน .Net Framework ภาษา C# ครับ คราวนี้มาถึงตาม Java บ้างครับ เปิดมาที่ Code เลยครับ ใน Blog ผมเตรียม Class Person ไว้ โดยมี Get / Set ปกติ และทำ จริงๆ ถ้าไม่อยากเขียนแบบนี้มันมีตัว BeanUtils.copyProperties ที่ช่วยทำ Shallow Copy ให้ครับ แต่มันมีความพิสดารของ Spring / Apache Common Param มันจะสลับกันครับ Ref: Result

Shallow Copy กับ Deep Copy มีประโยชน์อย่างไรบ้าง

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