Dynamics 365 Business Central: การใช้งานฟังก์ชัน GetField, GetFieldLengthใน AL Programming

ในบทความนี้ เราจะมาทำความเข้าใจและอธิบายการใช้งานฟังก์ชันสำคัญสามตัวใน Type Helper Codeunit ซึ่งถูกใช้งานใน AL Programming ของ Dynamics 365 Business Central โดยฟังก์ชันทั้งสามที่เราจะกล่าวถึงคือ GetField และ GetFieldLength ซึ่งมีประโยชน์ในการจัดการกับข้อมูลใน Table โดยเฉพาะอย่างยิ่งการจัดการ Field ที่อาจถูกลบ (Obsolete) หรือมีข้อกำหนดพิเศษ

1. การใช้ฟังก์ชัน GetField

ฟังก์ชัน GetField ถูกออกแบบมาให้สามารถดึง Field จาก Table ที่ต้องการโดยใช้หมายเลขของ Table และ Field นอกจากนี้ยังมีการตรวจสอบว่าสถานะของ Field นั้นไม่ถูกลบ (Obsolete)

procedure GetField(TableNo: Integer; FieldNo: Integer; var "Field": Record "Field") Result: Boolean
var
    IsHandled: Boolean;
begin
    IsHandled := false;
    OnBeforeGetField(TableNo, FieldNo, "Field", Result, IsHandled);
    if IsHandled then
        exit(Result);

    exit(Field.Get(TableNo, FieldNo) and (Field.ObsoleteState <> Field.ObsoleteState::Removed));
end;

การทำงาน

  • รับค่า TableNo และ FieldNo เป็นหมายเลข Table และ Field ที่ต้องการค้นหา
  • ทำการเรียก Field จาก Table นั้น หากพบว่ามีการลบ Field (ObsoleteState::Removed) ฟังก์ชันจะส่งค่ากลับเป็น false
  • หาก Field นั้นยังคงใช้งานได้ จะส่งค่ากลับเป็น true

ตัวอย่างการใช้งาน GetField

procedure ValidateFieldInTable(TableNo: Integer; FieldNo: Integer)
var
    FieldRec: Record "Field";
    IsFieldValid: Boolean;
begin
    // เรียกฟังก์ชัน GetField เพื่อตรวจสอบว่าฟิลด์ที่ต้องการมีอยู่ในตารางหรือไม่
    IsFieldValid := TypeHelper.GetField(TableNo, FieldNo, FieldRec);
    
    // หากฟิลด์มีอยู่และไม่ถูกลบ จะทำการแสดงข้อความว่า Field ถูกต้อง
    if IsFieldValid then
        Message('Field %1 from table %2 is valid.', FieldRec."Field Caption", FieldRec.TableName)
    else
        // หากฟิลด์ถูกลบ หรือไม่พบฟิลด์ จะแสดงข้อความแจ้งเตือน
        Message('Field is obsolete or does not exist.');
end;

คำอธิบาย

  • ฟังก์ชัน ValidateFieldInTable ถูกใช้เพื่อตรวจสอบว่า Field ที่ต้องการมีอยู่ใน Table หรือไม่ โดยเรียกใช้ฟังก์ชัน GetField
  • หาก Field นั้นมีอยู่และไม่ถูกลบ (Obsolete) ฟังก์ชันจะทำการแสดงข้อความยืนยันว่าฟิลด์ยังสามารถใช้งานได้
  • หาก Field ถูกลบหรือไม่พบ จะทำการแสดงข้อความว่า Field นี้ไม่สามารถใช้งานได้หรือถูกลบแล้ว

2. การใช้ฟังก์ชัน GetFieldLength

ฟังก์ชัน GetFieldLength ใช้ในการดึงความยาวของ Field ที่ต้องการ โดยฟังก์ชันนี้จะเรียกใช้ GetField เพื่อดึงข้อมูล Field ก่อน แล้วจึงคืนค่าความยาวของ Field นั้นกลับมา

procedure GetFieldLength(TableNo: Integer; FieldNo: Integer) FieldLength: Integer
var
    "Field": Record "Field";
    IsHandled: Boolean;
begin
    IsHandled := false;
    OnBeforeGetFieldLength(Field, FieldLength, IsHandled);
    if IsHandled then
        exit(FieldLength);

    if GetField(TableNo, FieldNo, Field) then
        exit(Field.Len);

    exit(0);
end;

การทำงาน

  • เริ่มจากการเรียก GetField เพื่อตรวจสอบว่า Field ที่ต้องการมีอยู่หรือไม่
  • หาก Field มีอยู่ ฟังก์ชันจะคืนค่าความยาวของ Field (Field.Len)
  • หาก Field ไม่อยู่ จะคืนค่าเป็น 0

ตัวอย่างการใช้งาน GetFieldLength

procedure DisplayFieldLength(TableNo: Integer; FieldNo: Integer)
var
    FieldLength: Integer;
begin
    // เรียกใช้ GetFieldLength เพื่อตรวจสอบความยาวของ Field ที่ระบุ
    FieldLength := TypeHelper.GetFieldLength(TableNo, FieldNo);
    
    // หาก FieldLength มีค่ามากกว่า 0 จะแสดงความยาวของ Field
    if FieldLength > 0 then
        Message('The length of the field is %1.', FieldLength)
    else
        // หากไม่พบ Field หรือ Field ถูกลบออก จะแสดงข้อความแจ้งเตือน
        Message('Field does not exist or is obsolete.');
end;

คำอธิบาย

  • ฟังก์ชัน DisplayFieldLength ใช้ในการดึงความยาวของ Field ที่ระบุด้วยหมายเลข Table และ Field
  • หากฟิลด์มีอยู่ ฟังก์ชันจะส่งค่าความยาวของฟิลด์นั้นกลับมา
  • หากฟิลด์ไม่ถูกพบหรือถูกลบ (Obsolete) จะคืนค่าเป็น 0 และแสดงข้อความแจ้งเตือนว่า Field ไม่สามารถใช้งานได้

สรุป

ฟังก์ชัน GetField และ GetFieldLength เป็นฟังก์ชันที่สำคัญในการจัดการกับ Fields ใน Table โดยเฉพาะเมื่อเราต้องการตรวจสอบว่า Field นั้น ๆ ถูกลบหรือไม่ หรือเพื่อดึงข้อมูลของ Field มาใช้งานต่อ ฟังก์ชันเหล่านี้จะช่วยให้การจัดการข้อมูลใน AL Programming มีประสิทธิภาพมากยิ่งขึ้น

Leave a comment