StartBC.comค้นหาบทเรียน

เพิ่มฟิลด์ด้วย Table Extension และ Page Extension

Table Extension เพิ่มที่เก็บข้อมูล ส่วน Page Extension เพิ่มส่วนที่ผู้ใช้เห็น เราจะเพิ่ม Training note ให้ Customer โดยไม่แก้ object มาตรฐานและใช้ข้อมูลลูกค้าสมมติเท่านั้น

ตรวจเอกสารอ้างอิง: 22 ตุลาคม 2569
บริบท: Business Central · ใช้กับแล็บ on-premises หรือ online Sandbox ตามบท 12 · ตัวอย่าง AL ยังไม่ได้ compile/run กับระบบจริง

เป้าหมายและพื้นฐาน

เมื่อจบ: ขยายข้อมูลและหน้าจอโดยใช้ Extension

พื้นฐานที่ต้องรู้: 12–13

แบบฝึกหลัก: เพิ่มฟิลด์ฝึกบน Customer Card และทดสอบบันทึก

ภาพรวมก่อนลงมือทำ

ภาพสรุปบทเรียน · 14

เชื่อม field จากฐานข้อมูลถึงหน้าจอ

ใช้ชื่อจริงจากไฟล์ AL ของบทนี้

  1. tableextension 50100

    extends Customer → เพิ่ม "SBC Training Note"

  2. pageextension 50100

    extends "Customer Card" → addlast(General)

  3. Rec."SBC Training Note"

    ผูก control บน Page กับ field ที่เพิ่ม

  4. ทดสอบบันทึก

    กรอก SBC-TEST-01 แล้วเปิด Customer เดิมใหม่

สิ่งที่ควรจำTable Extension เพิ่ม schema; Page Extension แสดง field โดยไม่สร้าง schema ซ้ำ

จาก object ใหม่สู่การขยายระบบมาตรฐาน

บท 13 สร้าง Table และ Page ของเราเอง บทนี้ใช้ extends Customer และ extends "Customer Card" เพื่อเพิ่มความสามารถให้ระบบเดิม โดยอ้าง field จาก table ผ่าน Rec."SBC Training Note"

addlast(General) คือจุดวาง control ใน layout ส่วน ApplicationArea และ ToolTip เป็น properties ของหน้าจอ ไม่ได้สร้าง column ในฐานข้อมูล การเพิ่มฟิลด์ที่เก็บข้อมูลจึงต้องทำใน Table Extension ด้วย

Record และ validation: ใน AL การกำหนดค่า field ด้วย := ต่างจาก Record.Validate(...) ซึ่งเรียก validation ของ field; การแก้ค่าบน record variable ก็ยังต้องคำนึงถึงการบันทึกด้วย ห้ามเขียนตรงลงตาราง ledger เพื่อเลียนแบบการ Post ให้ใช้กระบวนการมาตรฐานและจุดขยายที่ระบบรองรับ

ออกแบบฟิลด์ฝึก

ฟิลด์ SBC Training Note เป็น Text[100] มี Caption และ DataClassification = CustomerContent ตัวอย่างไม่เก็บข้อมูลลับ จุดประสงค์คือเรียนการเพิ่มฟิลด์และทดสอบว่าบันทึกได้ ไม่ใช่แทนระบบ note ขององค์กร

ฟิลด์ table ใช้ ID 50100 ในตัวอย่าง และ object IDs ใช้ช่วงที่ README ระบุ ต้องตรวจความว่างและสิทธิ์ใช้ช่วงก่อน การแสดง field บน page ไม่ได้สร้างที่เก็บข้อมูลให้เอง จึงต้องมีทั้ง tableextension และ pageextension

ขั้นตอนเพิ่มและแสดงฟิลด์

  1. เตรียมโปรเจกต์/Symbols ตามบท 12–13 เปิดคลังโค้ด อ่าน README และดาวน์โหลดทั้งชุดเพื่อให้ dependency ครบ
  2. เปิด StartBCCustomer.TableExt.al ตรวจ extends Customer และ field ที่เพิ่ม อ่าน Caption, ชนิดข้อมูล และ DataClassification
  3. เปิด StartBCCustomerCard.PageExt.al ดู layout → addlast(General) และ field ที่อ้าง Rec."SBC Training Note" ApplicationArea ทำให้การแสดงผลตรงกลุ่มที่ระบุ
  4. หากฝึกเฉพาะฟิลด์ ให้ใช้ source ทั้งชุดพร้อม codeunit ที่ Action อ้าง หรือแยก actions/Label ตาม README อย่าคอมไพล์ไฟล์ที่อ้าง object ซึ่งยังไม่มี
  5. ใช้ Go to Definition/Symbols ตรวจว่า General เป็น anchor ของ Customer Card ในเวอร์ชันเป้าหมาย จากนั้น AL: Package ตรวจ Problems
  6. เมื่อ compile ผ่านจึง publish ไป Sandbox เปิด Customer Card ของลูกค้าฝึก ไม่ใช่ Customers list
  7. ใน General หา Training note ใส่ SBC-TEST-01 ออกจากการ์ด แล้วกลับลูกค้ารหัสเดิมเพื่อตรวจค่า เปลี่ยนเป็น SBC-TEST-02 และตรวจซ้ำ

แบบฝึกและเกณฑ์ผ่าน

จด Customer No., ข้อความก่อน/หลัง และผลหลังออก/เปิดหน้าใหม่ เกณฑ์ผ่านคือฟิลด์ปรากฏในตำแหน่งที่เพิ่ม ค่าอยู่กับลูกค้ารายนั้น และลูกค้าฝึกอีกรายไม่แสดงค่าของรายแรก

ลองเปลี่ยนเฉพาะ Caption ในโปรเจกต์ฝึก Package/publish version ใหม่ แล้วอธิบายความต่างระหว่างชื่อ field ภายในกับ Caption ที่ผู้ใช้เห็น ไม่เปลี่ยน ID หรือชนิดข้อมูลเพื่อทดสอบกับข้อมูลที่ต้องเก็บ

ผลที่คาดหวังและข้อจำกัด

เมื่อทดลองสำเร็จใน tenant ของคุณ ค่า Text จะถูกเก็บในส่วนขยายของ Customer และแสดงบน Customer Card การลบ/ถอน Extension อาจกระทบข้อมูลที่ฟิลด์เพิ่มไว้ ต้องให้ผู้ดูแลกำหนดวิธีจัดการข้อมูลฝึกก่อน ไม่ถอนในบริษัทจริง

StartBC ยังไม่ได้รันชุดนี้กับ Symbols ของ tenant เป้าหมาย จึงต้องยืนยัน anchors, compatibility และสิทธิ์จาก compiler/ระบบจริง

Source AL ที่ใช้ในบทนี้

StartBCCustomer.TableExt.al
tableextension 50100 "SBC Customer" extends Customer
{
    fields
    {
        field(50100; "SBC Training Note"; Text[100])
        {
            Caption = 'Training note';
            DataClassification = CustomerContent;
        }
    }
}

ดาวน์โหลด StartBCCustomer.TableExt.al

StartBCCustomerCard.PageExt.al
pageextension 50100 "SBC Customer Card" extends "Customer Card"
{
    layout
    {
        addlast(General)
        {
            field(SBCTrainingNote; Rec."SBC Training Note")
            {
                ApplicationArea = All;
                ToolTip = 'Specifies a note used only for the StartBC training exercise.';
            }
        }
    }
    actions
    {
        addlast(Processing)
        {
            action(SBCShowTrainingAmount)
            {
                Caption = 'Calculate training amount';
                ApplicationArea = All;
                Image = Calculate;
                ToolTip = 'Calculates a training amount without posting a document.';
                trigger OnAction()
                var
                    Calculation: Codeunit "SBC Calculation";
                begin
                    Message(TrainingAmountMsg, Calculation.CalculateAmount(2, 150));
                end;
            }
        }
    }
    var
        TrainingAmountMsg: Label 'Training amount: %1';
}

ดาวน์โหลด StartBCCustomerCard.PageExt.al

ดูชุดโค้ดและ README ทั้งหมด

ปัญหาพบบ่อย

ฟิลด์ไม่แสดง
ตรวจหน้า Customer Card, บริษัท, เวอร์ชันแอปที่ติดตั้ง สิทธิ์ และการปรับแต่งหน้าของผู้ใช้
หา anchor General ไม่พบ
ดู definition ของ page จาก Symbols ที่ดาวน์โหลดแล้วเลือก anchor ที่เหมาะกับเวอร์ชันนั้น ไม่ลบ layout ทิ้งเพื่อให้ Package ผ่าน
field ID หรือชื่อชน
ปรับช่วง ID/ชื่อ prefix ที่ทีมจัดสรร และจุดอ้างใน Page ให้ตรงกันก่อนมีข้อมูลจริง ไม่ rename schema เดิมโดยไม่มีแผน upgrade

เอกสารอ้างอิงทางการ

อ่านประกอบและตรวจชื่อเมนู/ข้อจำกัดของเวอร์ชันที่คุณใช้ เอกสารเดิมตรวจ 22 ตุลาคม 2569; เอกสารติดตั้งและพื้นฐาน Developer ที่เพิ่มตรวจ 4 พฤศจิกายน 2569