Print VFP Report with .NET application
สั่งพิมพ์รายงาน FRX บน .NET Framework
การสร้างรายงานด้วยชุด Visual Studio บน .NET มักเลือกใช้ CR (Crystal Report) เป็นหลัก สำหรับ CR นี้จะมีอยู่ในชุด Professional ขึ้นไป เนื่องจากภาษาบน .NET ไม่มี VFP ดังนั้นหากต้องการอัปเกรดระบบงานที่พัฒนาด้วย VFP ไปรันบน .NET Framework ก็จำเป็นต้องเขียนโปรแกรมกันใหม่ทั้งหมด อย่างไรก็ตาม เราสามารถเรียกใช้รายงานต่าง ๆ (*.frx) ที่พัฒนาด้วย VFP จาก .NET โดยตรงก็ได้ ซึ่งวิธีการนี้ก็จะไม่ต้องเสียเวลาแปลงรายงานเป็น CR กันใหม่ทั้งหมด คนที่ใช้ฟอกส์สามารถประยุกต์ใช้สร้างรายงานบน .NET กับ Visual Studio ชุด Express ที่ไม่มี CR ก็ได้น่ะ :-)
ทำไมต้อง .NET
หลักการพัฒนาแอปพลิเคชันที่ไม่ต้องสนใจระบบปฎิบัติการ (OS) ไม่ต้องสนใจแพลตฟอร์ม (Platform) คอนเซ็ปท์เดียวกับ Java นั่นล่ะ ขอให้เครื่องนั้นมี .NET Framework ติดตั้งอยู่เท่านั้น สังเกตว่า Win7 แถม .NET ติดตั้งมาพร้อม ส่วนวินโดวส์อื่นก็ต้องหา .NET Framework มาติดตั้งเพิ่มเติม เพื่อให้เข้าใจง่าย ๆ ก็ให้มองว่า .NET Framework เหมือนกับ Runtime Libraries เพียงแต่มันเอาทุกอย่างมาอัดรวมไว้ทีเดียว เปรียบเสมือนก้อนภูเขาหิมะกลางมหาสมุทร มันจะก้อนโตไปเรื่อย ๆ แล้วก็เคลื่อนตัวช้า ๆ ลง ๆ เรื่อย ๆ การพัฒนาแอปพลิเคชันก็ยังต้องอิงกับเวอร์ชันของ Framework ปัญหาที่ไม่ได้ต่างไปจากของเดิม ขยะเต็มเครื่อง ...
VFP ถึงทางตันเมื่อไร
VFP นั้นประกาศหยุดการพัฒนาแล้ว คนใช้ฟอกส์คงไม่ได้หยุดนิ่งตามไปด้วย ก็ต้องพยายามเรียนรู้เทคโนโลยีใหม่เพิ่มเติม แต่สิ่งที่หลายคนคาดหวังก็คือ ปล่อยให้ VFP เป็น Open Source รันบนลีนุกซ์ชุด Desktop อย่างไรก็ตาม ระหว่างที่ไม่ค่อยมีความหวังนี้ เราก็ยังสามารถประยุกต์ใช้งานฟอกส์ไปจนกว่าจะถึงทางตัน คำถามที่มักถามกันบ่อยก็คือ เมื่อไร ? ให้ลองพิจารณาเรื่องต่อไปนี้
- 32bit : VFP ถูกออกแบบมาให้ทำงานบนโหมด 32 บิต ดังนั้นถ้าในอนาคตทุกคนใช้วินโดวส์ 64 บิตทั้งหมด พูดง่ายว่า OS ไม่รองรับแอปพลิเคชัน 32 บิต เมื่อไร VFP ก็ถึงทางตันเมื่อนั้น
- Unicode: VFP สนับสนุน ANSI ไม่รองรับ UTF8 ดังนั้นถ้าในอนาคตไม่มีใครรับ ANSI เมื่อไร VFP ก็ถึงทางตันเมื่อนั้น
- ODBC : VFP ติดต่อกับฐานข้อมูลได้ทั้งแบบ DBF และระบบฐานข้อมูล DBMS อื่น เช่น MySQL, PostgreSQL, SQL Server เป็นต้น สำหรับ DBF นั้นใช้ไปได้เรื่อย ๆ ไม่มีปัญหา ส่วน DBMS นั้น VFP ใช้วิธี SPT (SQL Pass Thru) ติดต่อกับฐานข้อมูลผ่าน ODBC เป็นหลัก หากในอนาคตไม่มี ODBC เมื่อไร VFP เวอร์ชันต่ำก็จบข่าว ส่วน VFP8/9 ยังไปได้โดยอาศัย OLEDB และ XML กับ CursorAdaptive แทน
- Dotnet: .NET Framework ไม่รองรับคำสั่ง VFP แต่มีเครื่องมือ ToolKit มาเสริมพอถูไถใช้งานได้ อย่างไรก็ตามเขียนใหม่เลยจะดีกว่า เลือกภาษาอะไรก็ได้ ถ้าหากมีพื้นฐานการเขียนโปรแกรมจริงแล้วเขียนภาษาอะไรก็ได้ทั้งนั้นตามสะดวก
VB.NET หรือ C#
VB นั้นไม่แตกต่างกับ VFP มากนัก อย่างไรก็ตามคนทั่วโลกใช้ C# เยอะกว่า เพราะว่า คนเรียนคอมพิวเตอร์จากสถาบันการศึกษามักมีพื้นฐาน C มาก่อน โครงสร้างภาษา C# เขียนสั้น ๆ ง่าย ๆ แต่ไล่ซอร์สโค้ดยาก เหมาะกับนักภาษาศาสตร์มากกว่า สิ่งที่ทำให้คนเริ่มหันมา C# ก็เนื่องจากเมื่อก่อนการพัฒนาเว็บแอปพลิเคชันด้วย ASP ต้องใช้กับ VB ส่วน ASP.NET นั้นรองรับหลากหลายภาษานั่นเอง แต่ไม่ว่าจะเลือก VB หรือ C# ก็เขียนโปรแกรมคำสั่งมากกว่า VFP หลายเท่า ยกตัวอย่างเช่น การบังคับปุ่ม Enter เลื่อนไปฟิลด์ถัดไป หรือไปคอลัมภ์ถัดไป ผ่านมากี่ปีกี่ปี M$ ก็ยังไม่เคยพัฒนา เป็นต้น หลายคนเสียเวลาทำ Input Mask กับ Textbox แค่ตัวเดียวเนี่ยอาจใช้เวลาเป็นปี !
เปรียบเทียบคำสั่ง VB กับ C# คลิกที่นี่
รู้จัก Sharpdev
โดยทั่วไปเรียกว่า #Develop ชื่อเต็มคือ Sharp Develop (ส่วนตัวเรียก #dev หรือ Sharpdev) เป็นเครื่องมือสำหรับพัฒนาแอปพลิเคชันบน .NET Framework ทำนองเดียวกับ Visual Studio สำหรับ Sharpdev เป็น Open Source ฟรี เร็ว และใช้งานง่าย ตัวนี้จะให้ความรู้สึกเหมือนกับ VFP9 ยังงัยอย่างงั้น ที่สำคัญคือ มันไม่กินอภิมหาทรัพยากรเหมือนกับ Visual Studio ของ M$
- ฟรี เร็ว ใช้ง่าย ไม่หน่วงเครื่อง
- มีแปลงภาษา C# <=> VB ฯลฯ
.NET Application กับ VFP Report
หลักการทั่วไปคือ โปรแกรมที่พัฒนาด้วย .NET สร้างไฟล์ข้อมูลชั่วคราวในรูปแบบ XML เก็บไว้ก่อนด้วย WriteXml Method ของ DataSet หลังจากนั้นก็สั่งให้รันโปรแกรมที่พัฒนาด้วย VFP อ่านไฟล์ข้อมูล XML ดังกล่าว แปลงเป็น Cursor ด้วยคำสั่ง XMLTOCURSOR() และพิมพ์ออกเป็นรายงานต่อไป สำหรับวิธีการนี้เรียกใช้งานโปรแกรม VFP ใน .NET โดยผ่านคำสั่ง Process ตรงๆ พูดง่าย ๆ ก็คือ ไม่ต้องติดต่อผ่าน COM จึงไม่ต้อง Register ไม่ต้องสร้างตัวเชื่อมหรือ Interop Assembly (.dll) ของ VFP ใด ๆ ให้ยุ่งยาก เพียงแต่ในเครื่องนั้นต้องติดตั้ง VFP Runtime Library ไว้ด้วย
การพัฒนาแอปพลิเคชันจะแบ่งออกเป็น 2 ส่วน คือ ส่วนการออกแบบฟอร์ม (Form Designer) พัฒนาบน .NET ด้วย Sharpdev และส่วนออกแบบรายงาน (Report Designer) พัฒนาด้วย VFP พูดเป็นนัยว่า เราจะใช้ VFP แทน Crystal Report นั่นล่ะ ประโยชน์ของการออกรายงานด้วย VFP ประการหนึ่งก็คือ เราสามารถแก้ไขฟอร์มรายงาน (*.frx) ขณะรันไทม์ด้วยคำสั่ง MODI REPORT ได้ด้วย
ตัวอย่างฟอร์มป้อนข้อมูล
เพื่อให้เข้าใจหลักการทำงานของเครื่องมือแต่ละตัวดังกล่าวข้างต้น ขอยกตัวอย่างฟอร์มบันทีกข้อมูลหลักทั่วไป ซึ่งมักจะต้องประกอบด้วย ปุ่มเพิ่ม/แก้ไข/ลบข้อมูล ปุ่มเลื่อนรายการไปข้างหน้าถอยหลัง ปุ่มค้นหา และพิมพ์รายงาน ดังรูป
อ่านบทความนี้ควบคู่กับเรื่อง หลากหลายวิธีในการสร้างฟอร์มป้อนข้อมูลแบบ Client/Server
ฟอร์มทะเบียนพนักงาน (C#)
ฟอร์มค้นหารายชื่อพนักงาน (C#)
ฟอร์มเลือกข้อมูลก่อนพิมพ์รายงาน (C#)
รายงานทะเบียนพนักงานด้วย VFP (*.FRX)
โครงสร้างฐานข้อมูลตัวอย่าง (Sample)
ฐานข้อมูลที่ต้องใช้กับฟอร์มบันทึกข้อมูลข้างต้น ประกอบด้วย 2 ตาราง ดังนี้
- ชื่อตาราง: t_employee
ชื่อฟิลด์ ความหมาย ประเภทข้อมูล ขนาด c_code รหัสพนักงาน ข้อความ 10 ตัวอักษร c_name ชื่อพนักงาน ข้อความ 100 ตัวอักษร c_sex เพศ ข้อความ 5 ตัวอักษร c_province จังหวัด ข้อความ 30 ตัวอักษร c_phone เบอร์ติดต่อ ข้อความ 30 ตัวอักษร c_birthdate วันเกิด วันที่ c_startdate วันเริ่มงาน วันที่ c_department แผนก ข้อความ 30 ตัวอักษร c_position ตำแหน่ง ข้อความ 30 ตัวอักษร c_salary เงินเดือน ตัวเลข 10 หลัก (ทศนิยม 2 ตำแหน่ง) หมายเหตุ - กำหนด Primary Key คือ ฟิลด์ c_code
- ชื่อตาราง: t_lookup
ชื่อฟิลด์ ความหมาย ประเภทข้อมูล ขนาด c_table รหัสตาราง (01-จังหวัด 02-แผนก) ข้อความ 5 ตัวอักษร c_value ค่าในแต่ละตาราง ข้อความ 30 ตัวอักษร ตัวอย่าง
c_table c_value 01 กระบี่ 01 ขอนแก่น 02 บัญชี 02 การตลาด
SQL Server
- ตัวอย่างโปรเจ็กต์ .NET นี้ใช้กับ SQL Server หากต้องการใช้กับฐานข้อมูลอื่นให้แก้ไขในซอร์สโค้ดเอง
- อ่านเพิ่มเติมเรื่องการเขียนคำสั่งติดต่อฐานข้อมูลด้วย ADO.NET [ คลิกที่นี่ ]
- ดาวน์โหลด SQL Server ชุด Express [ คลิกที่นี่ ]
- สร้างฐานข้อมูลโดยใช้ SQL Server Management Studio ( สำหรับชุด Express คลิกที่นี่ )
- ดาวน์โหลด ไฟล์ฐานข้อมูลตัวอย่าง (Sample.MDF) [ คลิกที่นี่ ]
I. โครงสร้างโปรเจ็กต์ตัวอย่างในวิชวลฟอกส์โปร (VFP9)
[ VfoxPrint.EXE ]แต่ละโปรเจ็กต์ (.pjx) มีรูปแบบโครงสร้างของส่วนประกอบต่าง ๆ เหมือนกัน ดังนี้
Programs | main.prg | โปรแกรมหลัก ฟังก์ชันและโพรซิเยอร์ต่าง ๆ |
Reports | em001.frx | รายงานทะเบียนพนักงาน |
ตัวอย่าง โปรแกรมหลัก (main.prg)
II. โครงสร้างโปรเจ็กต์ตัวอย่างใน Sharpdev (C#)
[ Sample_cs.EXE ]แต่ละโปรเจ็กต์ (.csproj) มีรูปแบบโครงสร้างของส่วนประกอบต่าง ๆ เหมือนกัน ดังนี้
Programs | Program.cs | โปรแกรมหลัก ฟังก์ชันและโพรซิเยอร์ต่าง ๆ |
Forms | em001.cs | ฟอร์มทะเบียนพนักงาน |
em101.cs | ฟอร์มค้นหารายชื่อพนักงาน | |
em201.cs | ฟอร์มเลือกข้อมูลก่อนพิมพ์รายงาน |
ตัวอย่าง การสั่งพิมพ์รายงานด้วย VFP (em201.cs)
III. ทดสอบการทำงาน (Test Run)
- ดาวน์โหลดโปรเจ็กต์ตัวอย่างด้านล่าง แตกไฟล์ไว้ในเครื่อง
- เปิดโฟลเดอร์ Data สร้างฐานข้อมูล Sample ไว้ที่เครื่องไหนก็ได้ตามสะดวก
- เปิดโฟลเดอร์ TestRun แก้ไขไฟล์ dbconnect.txt ระบุ ConnectionString ชื่อฐานข้อมูล ชื่อเครื่องและล็อกอินให้ถูกต้อง
- ถ้าเครื่องที่จะรันโปรแกรมไม่มี .NET Framework และ VFP9 Runtime Library ก็ให้ดาวน์โหลดไฟล์ด้านล่างติดตั้งให้เรียบร้อยก่อน
- รันโปรแกรม Sample_cs.EXE เพิ่มข้อมูล | คลิกปุ่มพิมพ์รายงาน ...
- โปรเจ็กต์พร้อมซอร์สโค้ดของ .NET และ VFP อยู่ในโฟลเดอร์ Sharpdev และ Vfoxprint ตามลำดับ
- ทดสอบโปรเจ็กต์ใน Sharpdev ให้เลือกเมนู Build | Edit configurations/platforms เลือก Debug
- สามารถใช้ VS2008 หรือ Microsoft Visual Studio 2008 กับตัวอย่างโปรเจ็กต์ Sharpdev นี้ก็ได้
- ดาวน์โหลด โปรเจ็กต์ตัวอย่าง Sharpdev (VB และ C#) + VFP Reports
- ดาวน์โหลด Sharp Develop [ คลิกที่นี่ ]
- ดาวน์โหลด SQL Server ชุด Express [ คลิกที่นี่ ]
- ดาวน์โหลด M$ Service Pack [ คลิกที่นี่ ]
- ดาวน์โหลด NET Framework [ คลิกที่นี่ ]
- ดาวน์โหลด VFP9 Runtime Library [ คลิกที่นี่ ]
ความคิดเห็น
แสดงความคิดเห็น