HOSxP

You are here: Home Support BMS Learning Center
  • banner_bms_learning_center1.jpg
  • banner_bms_learning_center2.jpg

BMS-HOSxP ระบบงานห้องเวชระเบียน

วิธีการเข้าสู่ระบบลงทะเบียนผู้ป่วยใหม่ (เวชระเบียน)

กรณีที่ผู้ป่วยไม่เคยมี HN ที่โรงพยาบาล
    สามารถเข้าสู่ระบบลงทะเบียนผู้ป่วยใหม่  ได้ 2 วิธี ดังนี้

วิธีที่ 1 เลือกที่ ICON ด้านบน หรือ กดปุ่ม “Ctrl+F1”  


วิธีที่ 2 รูปแบบของเมนูแบบ Menu & Toolbar โดยการคลิกเลือกที่ระบบผู้ป่วยนอก - ลงทะเบียนผู้ป่วยใหม่

 

ระบบลงทะเบียนผู้ป่วยนอก
  หน้าจอหลักของระบบลงทะเบียนผู้ป่วยนอก
  แสดงหน้าจอการลงทะเบียนใหม่ แถบแรก คือ “ทั่วไป 1”

การเพิ่มข้อมูลเวชระเบียนของผู้ป่วยใหม่
    การลงข้อมูลของผู้ป่วยใหม่มีทั้งหมด ดังนี้
1. แถบ “ทั่วไป 1” เป็นการป้อนข้อมูลที่สำคัญของตัวผู้ป่วย เช่น คำนำหน้าชื่อ ชื่อ สกุล เพศ วันเกิด

แต่ถ้าไม่ทราบวันเกิด ของผู้ป่วย ทราบแต่ อายุเราก็สามารถที่จะลงอายุแล้วหลังจากนั้น วันเกิด โปรแกรมก็จะคำนวณให้เอง โดยการเคาะ Space bar หลังจากนั้นก็ใส่อายุ และ กดปุ่ม “ตกลง”


ช่องของอาชีพ ถ้าไม่ทราบรหัสของอาชีพก็ให้เคาะ Space bar เพื่อที่จะเลือกอาชีพ


ส่วนในช่องภาษา /เชื้อชาติ/สัญชาติ/ศาสนา ถ้าเคาะ Enter ไปเรื่อยๆโปรแกรมก็จะขึ้นเป็น ภาษาไทย,
เชื้อชาติไทย, สัญชาติไทย, ศาสนาพุทธ, แต่ถ้าในช่องเหล่านี้เป็นชาวต่างชาติ ก็ให้เคาะ Space bar ในช่องภาษา /เชื้อชาติ /สัญชาติ /ศาสนา เพื่อทำการเลือก  หมู่เลือด ( A,B,O,AB ) /RH( -, +) / แพ้ยา /ชื่อเล่น

ช่องของเลขที่บัตรประชาชน ถ้าเราทราบก็ใส่ลงไปได้เลยแต่ถ้าเราไม่ทราบก็ให้เราคลิกขวาที่ช่องเลขที่บัตรประชาชนแล้วจะเจอ คำว่า Generate CID  ตัวเลขที่ Generate นี้จะขึ้นต้นด้วย 0

หรือ ถ้าเป็นต่างด้าว ให้ใส่เลขที่บัตรประชาชนเป็น 0 ทั้งหมด และใส่เลขที่ต่างด้าว

 

2.แถบ “ทั่วไป 2”   จะเป็นส่วนที่อยู่ของผู้ป่วย  ใส่บ้านเลขที่ ,หมู่, ตรอก/ซอย/ถนน
ส่วนจังหวัด,อำเภอ,ตำบล,ประเทศ ตามธรรมดาแล้ว ช่องจังหวัดจะขึ้นตามจังหวัดที่ รพ.นั้นๆ แต่ถ้าหากว่าต้องการค้นหาจังหวัด,อำเภอ,ตำบล,ประเทศ ก็ให้เคาะ Space bar แต่ละช่อง และก็ลงรายละเอียดแต่ละช่องทางด้านล่าง

 

3.แถบ “ทั่วไป 3” เป็นการป้อนข้อมูลของผู้ที่มาติดต่อลงทะเบียนให้กับผู้ป่วย และเป็นข้อมูลของบุคคลที่สามารถติดต่อในกรณีที่ผู้ป่วยเกิดปัญหา ช่องชื่อผู้ติดต่อ ถ้าผู้ป่วยมาติดต่อเอง ก็ให้พิมพ์คำว่า “จอ” แล้ว Enter โปรแกรมก็จะดึงชื่อกับที่อยู่ที่เคยลงจาก “ทั่วไป 1”  กับ “ทั่วไป 2”  มาให้
     กรณีที่ เป็นคนอื่นมาแจ้ง ให้พิมพ์ชื่อผู้ที่มาติดต่อ  
     กรณีที่ ผู้ที่มาตอดต่ออยู่บ้านเดียวกันกับผู้ป่วย ก็ให้พิมพ์ว่า “บดก”  กด Enter โปรแกรมจะดึงข้อมูลที่อยู่ผู้ป่วยมาให้
     ส่วนความสัมพันธ์ ก็จะมีช่องให้เลือก


ในช่อง HN มารดาใส่ในกรณีที่เป็นเด็กแรกเกิด โดยการเอาเมาส์ ไปคลิกที่ช่อง และเคาะ space barเพื่อหาชื่อ หรือ HN ของมารดา

ส่วนช่องชื่อบิดา,มารดา,คู่สมรส,CID, ที่อยู่ ก็สามารถระบุได้ถ้าอยู่กันคนละที่อยู่กันก็ใส่ไปได้เลย

หมายเหตุ  ในการเพิ่มผู้ป่วยใหม่ 1 ราย ข้อมูลที่จำเป็นต้องกรอกของผู้ป่วย มีในส่วนของ ทั่วไป 1ทั่วไป 2 ทั่วไป 3 สิทธิการรักษา และตัวเลือกการพิมพ์ โดยไม่จำเป็นต้องกรอกข้อมูลให้ครบทั้ง 11 ส่วนก็ได้ เสร็จแล้วให้ทำการกดปุ่ม “บันทึก”ที่อยู่ด้านบนได้เลย เพื่อเป็นการลดระยะเวลาการทำงาน

 

4.  แถบ "Family" เป็นการป้อนข้อมูลสถานะในครอบครัวของผู้ป่วยจากน้าจอนี้แต่ละช่องจะมี Drop down list ให้เลือกข้อมูล ส่วนช่องน้ำหนัก ใส่กรณีเป็นเด็กแรกเกิด

 

5. แถบ “Note” เป็นการพิมพ์ข้อความเกี่ยวกับผู้ป่วย เพื่อแจ้งไปยังจุดต่างที่ผู้ป่วยจะไปรับบริการคลิกที่เขียน Note

 

จากนั้นก็พิมพ์ข้อความลงในช่อง และ คลิกที่ปุ่ม ตกลง note นี้ก็จะแสดงทุกจุดที่เรียกชื่อคนไข้คนนี้

 

 

หรือถ้าหากต้องการให้แสดงแค่บางจุด

 

หรือต้องการกำหนดวันหมดอายุ

 

หรือต้องการแสดงเฉพาะกลุ่มผู้ใช้งาน

 

6.  แถบ “โรคประจำตัว” เป็นการเก็บข้อมูลในส่วนของโรคประจำตัว และเป็นการเพิ่มข้อมูลผู้ป่วยเข้าคลินิกพิเศษด้วย

 

ถ้าทราบรหัสโรคก็ใส่ลงไปได้ โดยการเคาะ Space bar ที่ช่องโรคประจำตัวและก็ค้นหา ICD10
 กดตกลงเพื่อเลือก หลังจากนั้นก็กดปุ่มเพิ่มเพื่อบันทึก

 

ถ้าหากว่าข้อมูลที่เราลงไปนี้ เราต้องการลบก็ให้คลิกขวาตรงช่องที่เราต้องการลบ

 

 

หลังจากลงข้อมูลเสร็จเรียบร้อยแล้ว

 ****  หมายเหตุ   ถ้ามีการลงข้อมูลในแถบโรคประจำตัวแล้ว ข้อมูลเหล่านี้ก็จะถูกลงทะเบียนในคลินิกพิเศษด้วย

 

7.  แถบ “ประวัติญาติ” เป็นการเก็บข้อมูลในส่วนของญาติผู้ป่วย ว่ามีประวัติการมีโรคประจำตัวอะไรบ้าง เมื่อทำการป้อนข้อมูลแล้วให้ กดปุ่ม “เพิ่มรายการ” หลังจากนั้นก็กด “บันทึก”

 

ถ้าหากข้อมูลที่ลงไปไม่ถูกต้อง ต้องการลบ ให้คลิกขวาตรงช่องรายการที่ต้องการลบ

 

8.  แถบ “แฟ้มภาพ” เป็นการเก็บภาพถ่ายของผู้ป่วย

 

รูปที่ได้จากการถ่ายโดยกล้องดิจิตอล คลิกที่ปุ่ม Load image และหารูปที่ถ่ายเอาไว้

 

ถ้าหากมีการต่อกล้องเวปแคม  ก็คลิกที่ปุ่ม Capture เพื่อที่จะถ่ายรูป

 

หากมีการสแกนลายนิ้วมือ โดยการคลิกขวา เลือก เก็บ และ Load

 

9.แถบ “สถานภาพ” ใช้แถบนี้เมื่อผู้ป่วยเสียชีวิตให้คลิกเลือกช่อง ผู้เสียชีวิตก่อน หลังจากนั้นคลิกที่รายละเอียดการเสียชีวิต

เมื่อคลิกที่ปุ่ม รายละเอียดการเสียชีวิต
     1.    ส่วนแรก คือ ข้อมูลของคนไข้ ระบุวันที่เสียชีวิต สาเหตุการเสียชีวิต
     2.    โรคที่คนไข้เป็นอยู่
     3.    สาเหตุอื่นที่เกี่ยวข้อง เป็นผู้ป่วยใน หรือผู้ป่วยตั้งครรภ์ ให้ระบุอายุครรภ์
     4.    ระบุสถานที่เสียชีวิต แหล่งข้อมูล เลขที่เสียชีวิต และแพทย์ผู้ออกใบรับรองการเสียชีวิต
     5.    บันทึก รายละเอียดการเสียชีวิต
     6.    หรือมีการบันทึกข้อมูลไปแล้ว แต่ต้องการลบ ต้องการพิมพ์รายการออกมา หรือผ่านการซันสูตรพลิกศพ (ตายผิดธรรมชาติ)

 

10. แถบ "การเปลี่ยนชื่อ/HN" จะเก็บข้อมูลการเปลี่ยนชื่อหรือ HN เก่า/ใหม่ ของผู้ป่วย

 

กรณี ต้องการดู ประวัติการแก้ไข

 

กรณีต้องการ Scan เอกสารเก็บไว้

 

11. แถบ  “ข้อมูลปกปิด”  จะเก็บชื่อของผู้ป่วยไว้เป็นความลับ โดยจะไม่แสดงชื่อผู้ป่วยขึ้นมา

 

 

ส่วนที่ 2 การลงสิทธิประจำตัวคนไข้ กรอกรายละเอียดสามารถตรวจสอบสิทธิจาก NHSO หรือ Hipdata check

 

ถ้าหากต้องการตรวจสอบสิทธิ์จาก สปสช. ก็คลิกที่ NHSO และใส่ รหัสผู้ใช้งานและรหัสผ่าน

แต่ถ้ามาการเอาข้อมูลของ Hipdata มาลงก็สามารถดูได้โดยการกดที่ Hipdata check

 

ส่วนที่ 3  ตัวเลือกการพิมพ์ เพื่อที่จะ print opdcard ออกมา และส่งตรวจคนไข้เมื่อบันทึก

 

ส่วนที่ 4   ค้นหาข้อมูลจาก Hipdata

 

ส่วนที่ 5 การพิมพ์ใบแทน กรณีที่ opdcard หาย ชำรุด หรือคนไข้ไม่ได้เอามา

 

ส่วนที่ 6 การลงทะเบียนอุบัติเหตุหมู่ เลือกสิทธิ์ที่ใช้ แผนก ห้องตรวจ และบันทึกส่งตรวจ

 

สุดท้าย ถ้าลงรายละเอียดเรียบร้อยแล้วก็บันทึกข้อมูล 

ขึ้นหน้าต่างให้ยืนยันการบันทึก กดตกลง

ถ้ามีการสั่ง Print opdcard เลือกจำนวน copy และกดพิมพ์

 

ถ้ามีการคลิกเลือก ส่งตรวจหลังจากบันทึกก็จะขึ้นหน้าจอดังนี้ โดยการเลือกสิทธิ์ของคนไข้

หน้าของการส่งตรวจคนไข้
      1.  ข้อมูลของไข้
      2.  การมาของคนไข้
      3.  สิทธิ์ของคนไข้ สามารถเปลี่ยนสิทธิ์ หรือ เพิ่ม แก้ไข ลบสิทธิ์ จากหน้านี้ได้
      4.  ส่งตรวจคนไข้ไปที่ห้องไหน เลขที่บัตรประชาชนของคนไข้ หรือต้องการพิมพ์ใบสั่งยา บัตรคิว หรือต้องการตรวจสอบสิทธิ์จากน้านี้ก็ได้เหมือนกันจากปุ่ม NHSO หรือ Hipdata
      5.  ใส่ส่วนของการแสดงรูปภาพคนไข้ และสามารถถ่ายภาพจากหน้าจอนี้ก็ได้
      6.  เลือกประเภทคนไข้ ความเร่งด่วนในการส่งตรวจ

 

7.การบันทึก หรือ "สั่ง Admit คนไข้"  ลงข้อมูลการสั่ง Admit คนไข้โดยใส่ชื่อแพทย์ผู้สั่ง Admit, อาการสำคัญ ,สั่ง Admit ที่ตึก

หรือถ้าไม่ได้สั่ง Admit คนไข้ก็ให้ บันทึกเพื่อส่งตรวจ

ขึ้นหน้าให้ยื่นยันการบันทึกส่งตรวจ กดบันทึก

 

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

 

กรณีที่เป็นที่เป็นผู้ป่วยรายเก่า
     สามารถเข้าระบบ บันทึกส่งตรวจได้ 2 วิธี  ดังนี้
วิธีที่ 1  เลือกที่ ICON ด้านบน หรือ กดปุ่ม Ctrl+F1

วิธีที่ 2  รูปแบบของเมนูแบบ Menu & Toolbar โดยการคลิกเลือกที่  
ระบบผู้ป่วยนอก---->ลงทะเบียนผู้ป่วยใหม่

หลังจากนั้นก็ใส่ HN ของคนไข้ เพื่อเรียกส่งตรวจ

เลือกส่งต่อไปที่ห้องไหน แต่ถ้าไม่ทราบเลขที่บัตรประชาชนก็ให้คลิกขวา Generate new CID
และบันทึกส่งตรวจคนไข้



กรณีที่ส่งตรวจไปแล้วต้องการเรียกมาแก้ไข
ใส่ HN ที่ต้องการเรียกมาแก้ไข หรือต้องการลบการมาครั้งนี้ของคนไข้ หรือว่าต้องการส่งตรวจเพิ่ม
กรณี เลือกเพิ่มรายการใหม่  คือ เป็นการส่งตรวจผู้ป่วยเพิ่มอีก Visit
กรณี เลือกแก้ไขข้อมูลเก่า  คือ เป็นการเลือกรายชื่อผู้ป่วยที่ส่งตรวจไปแล้ว กลับมาส่งตรวจใหม่อีกครั้ง หรือลบการมาครั้งนี้ของผู้ป่วย

กรณี ต้องการลบการมาครั้งนี้ กด ลบรายการ

 

การเปลี่ยน HN   เข้าไปที่ Tool -------> เปลี่ยนหมายเลข HN




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

แต่ถ้า HN ใหม่ยังไม่มีใครใช้ ก็จะไม่มีข้อความเตือน หลังจากนั้นก็กดที่ปุ่ม เปลี่ยน

การรวม HN     เข้าไปที่ Tool ------> รวมหมายเลข HN

HN ที่ต้องการรวม คือ HN เก่า คลิกที่ค้นหา รวมไปไว้กับหมายเลข คือ หมายเลข HN ที่ต้องการเก็บไว้ใช้ โดยคลิกที่ค้นหา และทำการ รวม

คลิกค้นหา รายชื่อผู่ป่วยที่จะทำการรวม HN

 

การส่งตรวจคนไข้ล่วงหน้า
คือ การที่จะส่งตรวจล่วงหน้าได้นั้นจะต้องมีการนัดคนไข้ล่วงหน้า ถึงจะทำการส่งตรวจได้
เข้าไปที่ ระบบผู้ป่วยนอก ------------> รายการนัดผู้ป่วย

เลือกช่วงวันที่นัด , คลินิก,แพทย์ผู้นัด,ห้องตรวจ หลังจากนั้นก็คลิกที่ “แสดงรายชื่อผู้ป่วยที่นัดมา”
รายชื่อคนที่ถูกนัดมาจะแสดงทางด้านล่าง หลังจากนั้นก็คลิกที่ปุ่ม “ออกรายการ Visit ล่วงหน้า”

ได้รายชื่อแล้วก็คลิกที่  “ส่งตรวจ”   ถ้าหากว่าคนไข้คนนั้นมีการสั่ง Lab, X-Ray ล่วงหน้า รายการเหล่านั้นก็จะขึ้นแสดงที่ ห้อง Lab และห้อง X-Ray

เมื่อส่งตรวจแล้วก็จะมีหน้าจอให้ยืนยันการส่งตรวจ

การ Patch Intraweb ให้ทำงานเป็น Page mode ได้จริงๆ

Intraweb เป็น web framework ใน delphi ที่ถูกออกแบบโดยใช้ concept what you see is what you get ที่มีมานานแล้ว concept นี้เป็นอะไรที่ถือว่า Advance มากๆ เมื่อหลายๆ ปี มาแล้ว (ตั้งแต่สมัย Delphi 7) และถึงตอนนี้ก็ยังคง Concept แบบนั้นอยู่

ปัญหาหลักๆ ของ Intraweb อยู่ที่ระบบภายในของมันเอง ซึ่งถูกออกแบบมาเพื่อนักพัฒนาที่ถนัดเขียนภาษา Delphi (Object Pascal) แต่จำเป็นต้องพัฒนา Web application แล้วไม่อยากไปใช้ php หรือ asp.net ถือว่ามี Learning curve ต่ำมากในการพัฒนา Web application โดย ตัว Intraweb component จะทำการ Render Component ที่ออกแบบไว้ใน IDE Form Designer ของ Delphi ให้กลายเป็น HTML+Java script เพื่อแสดงผลใน Web browser ได้ โดย Application ที่พัฒนาโดยใช้ Intraweb นั้น จะสามารถทำงานได้ในแบบที่เป็น Stand alone Web server (ผ่าน Indy http server) หรือ จะ compile ให้เป็น isapi แล้วไปใช้งานใน iis ก็ได้

 

ปัญหาของนักพัฒนาที่เมื่อใช้ Intraweb ใช้ไปสักระยะหนึ่งแล้วต้องเจอ ก็คือระบบการสื่อสารระหว่าง Web Browser และ Web Server ของ Intraweb นั้น จะทำได้โดยผ่าน Event ของ Component ใน Intraweb เท่านั้น ซึ่งปัญหานี้ค่อนข้างมีผลอย่างมากกับการพัฒนาโดยใช้ Web technology ใหม่ๆ อย่างเช่น JQuery ที่รองรับการเรียกใช้งาน ajax โดยที่ไม่ต้อง Refresh หน้าของ web page ได้

ถึงแม้ว่า Intraweb จะมีระบบรองรับการทำงานแบบ AJAX อยู่แล้ว แต่ระบบที่ว่านี้ ก็ต้องถูกเรียกใช้งานผ่าน Component ของ Intraweb เช่นเดียวกัน  เราลองมาดูว่าปัญหาตัวแรกของ Intraweb กันนะครับ

1. การ Submit form  การเกิด Event ของ Component ใน Intraweb นั้นจะเกิดในฝั่ง client (Web browser) แล้วส่ง active property ของ Component ทุกตัวกลับไปยัง Intraweb server ผ่านการ Submit form เพื่อที่ฝั่ง server จะได้ตรวจสอบได้ถูกว่าค่าต่างๆ ของ component แต่ละตัวมีสถานะเป็นอย่างไร ซึ่งปัญหาของการทำงานแบบนี้ก็คือ การเกิด Event แต่ละครั้ง จะมีการส่งข้อมูลเป็นจำนวนมากผ่านการ Submit Form ไปยัง Web browser เราจะเห็นปัญหานี้ชัดเจนหากใน Form นั้นๆ มี Component มากๆ จะใช้เวลามากเป็นพิเศษในการรอข้อมูลจาก web server

2. การสร้าง Hyperlink ไปยังหน้าอื่นๆ  ปัญหาแรกของนักพัฒนาที่ใช้ Intraweb ก็คือไม่สามารถสร้าง Hyperlink ไปยังหน้าอื่นๆ ได้โดยตรง เนื่องจากระบบของ Intraweb นั้น ในแต่ละหน้าที่ Web browser มองเห็นเกิดจากการสร้าง Form เอาไว้ที่ฝั่ง Web server และถูกออกแบบให้แสดงผลในหน้าที่ถูกสร้างเอาไว้แบบ Stack แล้วนำหน้าบนสุดของ Stack ส่งไปให้ Web Browser นักพัฒนาไม่สามารถใส่ Hyperlink ในรูปแบบของ <a href="/page2">Goto page 2</a> เอาไว้ในระบบของ Intraweb ได้  จะต้องสร้าง Event ให้กับ Component ของ Intraweb แล้วเรียกใช้ Method WebApplication.CreateForm(xxx) ของ Intraweb เพื่อสร้าง Form ส่งกลับไปให้ Web browser เท่านั้น

3. การสร้าง Back end support function บางครั้งเราต้องการสร้าง function ในฝั่ง web server ให้ส่งข้อมูลกลับมายัง Web browser ผ่าน AJAX โดยมี url /get_data?id=10 แต่ในระบบของ Intraweb นั้นมันทำได้ยากเหลือเกิน เพราะต้องไปเขียนเอาไว้ใน Event onBeforeDispatch ของ ServerController

ปัญหาแค่ 3 ข้อนี้ บางครั้งก็ทำให้นักพัฒนาเบื่อกับ Intraweb ได้เหมือนกันครับ ถ้าปัญหาใหญ่ๆ 3 ข้อนี้ถูกแก้ไขได้ มันก็จะทำให้ Intraweb น่าใช้งานมากขึ้นอีกหลายเท่าตัวเลยที่เดียว  หลังจากที่ผมได้ใช้ Intraweb ในหลายๆ โครงการผมก็ได้เจาะลึกเข้าไปในระบบของ Intraweb ขึ้นเรื่อยๆ จนกระทั้งซื้อ Support Service ที่เรียกว่า Ultimate package จาก Atozed เพื่อเข้าถึง Source code ของ Intraweb ได้

สุดท้าย ผมก็หาวิธีที่จะแก้ไขปัญหา 3 ข้อนี้ได้ ถึงแม้ว่ามันจะไม่ใช่แบบที่ดีที่สุด แต่มันก็ใช้ได้ครับ

คราวนี้เรามาลองดูว่าจะแก้ปัญหาแต่ละข้อได้อย่างไร เราจะใช้วิธีไหนในการแก้ปัญหานี้ดี จริงๆ แล้วการแก้ปัญหานี้จะทำได้ก็ต้องเข้าไปแก้ไข Source code ของ Intraweb แต่หากไม่มี Source code ของ Intraweb ล่ะ จะทำอย่างไรดี  วิธีการที่ผมคิดออกก็มีหลายวิธีครับ ตั้งแต่การเขียน Class helper ไปจนถึงการ Patch code ของ Intraweb ในระบบ compile ของ delphi นั้น เราสามารถเขียน method ไปทับ class ไหนๆ ก็ได้ ซึ่งเรียกว่า Code redirect เป็นการสร้าง method ขึ้นมาใหม่แล้วกำหนดให้ method pointer ตัวเก่าชี้มาใช้งานที่ตัวใหม่ครับ วิธีการนี้ทำให้เราสามารถแก้ไขบางส่วนของ Code ใน Unit ที่ถูก Compile ไปแล้วโดยไม่ต้องทำการ Compile unit นั้นใหม่ ซึ่งจะมีประโยชน์อย่างมากในกรณีที่เราไม่มี Source code ของ unit เก่า แต่จำเป็นต้องแก้ไข code บางส่วน  ตัวอย่างของระบบที่ทำงานแบบนี้ก็ได้แก่ FastCode project หรือ FastMM project ครับที่ได้ทำการสร้าง method ที่ทำงานได้เร็วกว่าเดิมไปแทนที่ของเก่าที่อยู่ใน rtl ของ delphi

การสร้าง Code redirect ที่จะไปแทนที่ method ใดๆ ได้นั้น จำเป็นที่จะต้องทราบ Source code ของ method นั้นๆ ด้วยครับ ซึ่งในกรณีของ Intraweb โชคดีที่ผมเข้าถึงได้ผ่าน Ultimate support channel สิ่งที่ผมต้องเข้าไปแก้นั้นมีหลายจุดครับ ซึ่งเป้าหมายก็คือเปลี่ยนวิธีการทำงานของ Intraweb บางส่วนให้รองรับการเข้าถึงหน้า (Form) ได้จาก URL โดยไม่ต้องผ่าน Event ของ Component ใน Form ครับ โดยผมต้องการให้แสดง Form2 ได้จาก URL คล้ายๆ แบบนี้ http://server-ip:8888/showform?name=Form2  และหากใน Form2 มี property ที่สามารถรับค่าได้ผมก็อาจจะส่งค่าไปกับ URL ด้วยเลยดังนี้ http://server-ip:8888/shorform?name=Form2&KeyID=10 ซึ่งวิธีการนี้แทบจะเป็นไปไม่ได้เลยหากใช้ Delphi 7 ลงไป แต่โชคดีที่ตั้งแต่ Delphi 2010 เป็นต้นมาได้มีการพัฒนาระบบ RTTI ใหม่ และเราก็จะใช้ระบบ RTTI นี้เข้ามาช่วยให้การทำงานแบบนี้เป็นจริงขึ้นมาได้ครับ

ก่อนจะไปที่ RTTI เรามาดูวิธีการเขียน Code redirect กันก่อนนะครับว่าจะเขียนได้อย่างไร อันดับแรกจะต้องใช้  Unit ที่ทำหน้าที่ในการ Redirect code ครับ Download ได้จากที่นี่ครับ <CodeRedirect.pas> ส่วนวิธีการเขียน Code Redirect นั้นง่ายมากครับ โดยเราต้องทำการประกาศ Class ขึ้นมาใหม่ก่อนสักตัวหนึ่งที่มี การประกาศ Function ให้เหมือนกับ Class ที่เราต้องการ patch จากนั้นก็ทำการ patch ในส่วน Initialization ของ unit ครับ ตัวอย่างดังนี้ครับ

สมมุติว่าผมอยากจะแก้ไขระบบ Generate Session ID ของ Intraweb ที่เป็นรหัสแบบสุ่ม ให้เป็นวันที่และเวลา+ID สุ่ม แทน ผมก็ต้องเขียน Patch แบบนี้ครับ

[Example Code 1]

ส่วน Code ทั้งหมดที่ต้องเข้าไปแก้ มีอยู่ 3 จุด ได้แก่

[Example Code 2]

[Example Code 3]

[Example Code 4]

 

แล้ว RTTI จะมาช่วยได้อย่างไร ลองนึกถึงหากเราต้องการสร้าง Form ขึ้นมาสัก Form หนึ่ง โดยใช้ String ในการอ้างถึงชื่อ Form ที่ต้องการสร้างดูสิครับ ถ้าใช้ Techinique โดยปกติของ Delphi ก็คงจะไม่มีทางทำได้แต่ RTTI ตัวใหม่นี้ช่วยให้ทำขึ้นมาได้ (เอาไว้ว่างๆ ผมจะเขียนเกี่ยวกับ RTTI ให้อ่านกันนะครับ)

 

 

<to be continued>

การติดตั้งโปรแกรม HOSxP

การติดตั้งโปรแกรม HOSxP

วิธีการเขียนคำสั่งให้นำข้อมูลจาก Image Server มาแสดงในรายงาน

 

ตัวอย่างชุดคำสั่งที่ต้องเขียน

procedure DetailBeforeGenerate;
var cds:tclientdataset;
begin
   cds:=tclientdataset.create(nil);
   cds.HOSxP_GetDataset_ImageServer('select * from opdscan where hn="xxx"');
   cds.AssignDataToPipeLineLink5;
   cds.free;
  
end;

ตัและเนื่องจาก DataPipeLine5 จะต้องมีข้อมูลก่อน ดังนั้น Event GlobalOnCreate ของ Report นี้จึงต้องกำหนดให้ DBPipeLineLink5 มีข้อมูลก่อนด้วย ดังตัวอย่าง

procedure GlobalOnCreate;
var cds:tclientdataset;
begin
   cds:=tclientdataset.create(nil);
   cds.HOSxP_GetDataset_ImageServer('select * from patient_image limit 0');
   cds.AssignDataToPipeLineLink5;
   cds.free;
end;

หลังจากที่เขียนเสร็จแล้ว ให้วาง DBImage เอาไว้ใน Band Detail แล้วกำหนด DataPipeLine ไปที่ DBPipeLine5 แล้วเลือกกำหนด Field ให้ชี้ไปยัง Blob field ที่เก็บข้อมูลรูปภาพเอาไว้

Subcategories