Dynamics 365 Business Central: การใช้งาน OutStream และ InStream ใน AL Programming

ในการพัฒนา Dynamics 365 Business Central ด้วยภาษา AL (Application Language) การจัดการข้อมูลแบบสตรีม (Stream) เป็นสิ่งสำคัญ โดยเฉพาะเมื่อเราต้องการอ่านหรือเขียนข้อมูลที่มีขนาดใหญ่หรือไม่กำหนดขนาดแน่นอน เช่น ข้อมูลประเภท Blob, ไฟล์, หรือข้อความที่ยาวมากๆ

บทความนี้จะอธิบายรายละเอียดเกี่ยวกับ OutStream และ InStream พร้อมตัวอย่างการใช้งานและรูปแบบการเขียนโปรแกรม

การสร้างฟิลด์ Blob: “Body Response”

field(1; "Body Response"; Blob)
{
    DataClassification = ToBeClassified;
}

คำอธิบาย

  • Field ID (1): หมายเลขของฟิลด์ในตาราง
  • ชื่อฟิลด์ (“Body Response”): ชื่อของฟิลด์ที่ใช้ในการอ้างอิง
  • ประเภทฟิลด์ (Blob): ประเภทข้อมูล Blob ใช้สำหรับเก็บข้อมูลไบนารีหรือข้อมูลที่มีขนาดใหญ่ เช่น ไฟล์, รูปภาพ, หรือข้อความที่ยาวมาก
  • DataClassification: กำหนดการจัดประเภทข้อมูลเพื่อความปลอดภัยและการปฏิบัติตามกฎระเบียบ

การใช้งานร่วมกับ InStream และ OutStream

ฟิลด์ "Body Response" ที่เป็นประเภท Blob ทำหน้าที่เป็นที่เก็บข้อมูลหลักสำหรับการอ่านและเขียนผ่าน InStream และ OutStream ดังนี้:

  • การเขียนข้อมูลลงใน Blob: ใช้ OutStream เพื่อเขียนข้อมูลลงในฟิลด์ Blob
  • การอ่านข้อมูลจาก Blob: ใช้ InStream เพื่ออ่านข้อมูลจากฟิลด์ Blob

OutStream

OutStream เป็น DataType ที่ใช้สำหรับการเขียนข้อมูลลงในสตรีม เมื่อคุณต้องการส่งออกข้อมูลหรือบันทึกข้อมูลลงใน Blob, ไฟล์, หรือสตรีมอื่นๆ คุณจะใช้ OutStream

วิธีการใช้งาน OutStream

  • การสร้าง OutStream: ใช้เมธอด CreateOutStream เพื่อสร้าง OutStream จากตัวแปรหรือฟิลด์ที่รองรับ เช่น Blob, File, หรือ MemoryStream
  • การเขียนข้อมูล: ใช้เมธอดต่างๆ ของ OutStream เช่น WriteText, Write เพื่อเขียนข้อมูลลงในสตรีม

ตัวอย่าง SetResponseText

procedure SetResponseText(pText: Text)
var
    OutStream: OutStream;
begin
    Clear("Body Response");
    "Body Response".CreateOutStream(OutStream, TEXTENCODING::UTF8);
    OutStream.WriteText(Format(pText));
end;

คำอธิบาย

  • Clear("Body Response"); เคลียร์ค่าในฟิลด์ “Body Response” เพื่อเริ่มต้นใหม่
  • "Body Response".CreateOutStream(OutStream, TEXTENCODING::UTF8); สร้าง OutStream จากฟิลด์ “Body Response” โดยกำหนดการเข้ารหัสเป็น UTF8
  • OutStream.WriteText(Format(pText)); เขียนข้อความที่ถูกฟอร์แมตแล้วลงใน OutStream

InStream

InStream เป็น DataType ที่ใช้สำหรับการอ่านข้อมูลจากสตรีม เมื่อคุณต้องการนำเข้าข้อมูลหรืออ่านข้อมูลจาก Blob, ไฟล์, หรือสตรีมอื่นๆ คุณจะใช้ InStream

วิธีการใช้งาน InStream

  • การสร้าง InStream: ใช้เมธอด CreateInStream เพื่อสร้าง InStream จากตัวแปรหรือฟิลด์ที่รองรับ
  • การอ่านข้อมูล: ใช้เมธอดต่างๆ ของ InStream เช่น ReadText, Read เพื่ออ่านข้อมูลจากสตรีม

ตัวอย่าง GetResponseText

procedure GetResponseText(): Text
var
    InStream: InStream;
    ResultText: Text;
begin
    CalcFields("Body Response");
    "Body Response".CreateInStream(InStream, TextEncoding::UTF8);
    InStream.ReadText(ResultText);
    exit(ResultText);
end;

คำอธิบาย

  • CalcFields("Body Response"); คำนวณฟิลด์ “Body Response” เพื่อให้แน่ใจว่าข้อมูลพร้อมสำหรับการอ่าน
  • "Body Response".CreateInStream(InStream, TextEncoding::UTF8); สร้าง InStream จากฟิลด์ “Body Response” โดยกำหนดการเข้ารหัสเป็น UTF8
  • InStream.ReadText(ResultText); อ่านข้อความจาก InStream และเก็บไว้ในตัวแปร ResultText
  • exit(ResultText); ส่งคืนข้อความที่อ่านได้

สรุป

การใช้ OutStream และ InStream กับฟิลด์ Blob ช่วยให้สามารถจัดการข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ โดย OutStream ใช้สำหรับเขียนข้อมูลลงใน Blob และ InStream ใช้สำหรับอ่านข้อมูลจาก Blob เหมาะสำหรับการจัดเก็บและเรียกคืนข้อความหรือไฟล์ใน AL Programming

เคล็ดลับ

  • ควรกำหนด TextEncoding เมื่อสร้างสตรีมเพื่อป้องกันปัญหาการเข้ารหัสของข้อความ
  • อย่าลืมใช้ CalcFields เมื่ออ่านข้อมูลจากฟิลด์ที่เป็น FlowField หรือ Blob

Leave a comment