ในการพัฒนา 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” โดยกำหนดการเข้ารหัสเป็น UTF8OutStream.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” โดยกำหนดการเข้ารหัสเป็น UTF8InStream.ReadText(ResultText);อ่านข้อความจาก InStream และเก็บไว้ในตัวแปรResultTextexit(ResultText);ส่งคืนข้อความที่อ่านได้
สรุป
การใช้ OutStream และ InStream กับฟิลด์ Blob ช่วยให้สามารถจัดการข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ โดย OutStream ใช้สำหรับเขียนข้อมูลลงใน Blob และ InStream ใช้สำหรับอ่านข้อมูลจาก Blob เหมาะสำหรับการจัดเก็บและเรียกคืนข้อความหรือไฟล์ใน AL Programming
เคล็ดลับ
- ควรกำหนด TextEncoding เมื่อสร้างสตรีมเพื่อป้องกันปัญหาการเข้ารหัสของข้อความ
- อย่าลืมใช้
CalcFieldsเมื่ออ่านข้อมูลจากฟิลด์ที่เป็น FlowField หรือ Blob
