ในการพัฒนา Dynamics 365 Business Central ด้วยภาษา AL การเข้าใจ FlowFields และ FlowFilters เป็นสิ่งสำคัญมาก เพราะเป็นเครื่องมือที่ช่วยในการคำนวณและกรองข้อมูลในตารางอย่างมีประสิทธิภาพ บทความนี้จะอธิบายรายละเอียดเกี่ยวกับ FlowFields และ FlowFilters พร้อมตัวอย่างการใช้งาน
FlowFields คืออะไร?
FlowFields เป็นชนิดของฟิลด์ในตารางที่ไม่เก็บข้อมูลจริงในฐานข้อมูล แต่จะคำนวณค่าตามต้องการเมื่อถูกเรียกใช้ โดยใช้คุณสมบัติ CalcFormula เพื่อกำหนดวิธีการคำนวณ ฟังก์ชันที่ใช้ได้ประกอบด้วย
- Sum: การรวมผลรวม
- Count: การนับจำนวนรายการ
- Average: การคำนวณค่าเฉลี่ย
- Min: หาค่าน้อยสุด
- Max: หาค่ามากสุด
- Exist: ตรวจสอบการมีอยู่ของรายการ
- Lookup: ค้นหาค่าในฟิลด์อื่น
1. Sum (การรวมผลรวม)
ตัวอย่าง: คำนวณยอดขายรวมของลูกค้า
การสร้าง FlowField ด้วย CalcFormula แบบ Sum
field(50000; "Total Sales"; Decimal)
{
FieldClass = FlowField;
CalcFormula = Sum("Sales Line"."Amount" where("Sell-to Customer No." = field("No.")));
Editable = false;
}
อธิบาย
Sumเป็นฟังก์ชันที่ใช้ในการรวมผลรวมของฟิลด์ที่ระบุ"Sales Line"."Amount"ระบุฟิลด์ Amount จากตาราง Sales Line- เงื่อนไข
where ("Sell-to Customer No."=field("No."))คือการเชื่อมโยงกับลูกค้าปัจจุบัน
2. Count (การนับจำนวนรายการ)
ตัวอย่าง: นับจำนวนคำสั่งซื้อของลูกค้า
การสร้าง FlowField ด้วย CalcFormula แบบ Count
field(50001; "Order Count"; Integer)
{
FieldClass = FlowField;
CalcFormula = Count("Sales Header" where("Sell-to Customer No." = field("No."), "Document Type" = CONST(Order)));
Caption = 'Order Count';
Editable = false;
}
อธิบาย
Countใช้ในการนับจำนวนรายการที่ตรงกับเงื่อนไข"Sales Header"คือตารางที่ใช้ในการนับ- เงื่อนไข
("Sell-to Customer No" = field("No."), "Document Type" = CONST(Order))ระบุว่าต้องเป็นคำสั่งซื้อของลูกค้าปัจจุบันและเป็นประเภทเอกสาร Order
3. Average (การคำนวณค่าเฉลี่ย)
ตัวอย่าง: คำนวณค่าเฉลี่ยยอดขายต่อคำสั่งซื้อของลูกค้า
การสร้าง FlowField ด้วย CalcFormula แบบ Average
field(50002; "Average Order Amount"; Decimal)
{
FieldClass = FlowField;
CalcFormula = Average("Sales Line"."Amount" where("Sell-to Customer No." = field("No.")));
Caption = 'Average Order Amount';
Editable = false;
}
อธิบาย
Averageใช้ในการคำนวณค่าเฉลี่ยของฟิลด์ที่ระบุ- ใช้เงื่อนไขเพื่อกรองข้อมูลที่เกี่ยวข้องกับลูกค้าปัจจุบัน
4. Min (หาค่าน้อยสุด)
ตัวอย่าง: หายอดขายน้อยสุดของลูกค้า
การสร้าง FlowField ด้วย CalcFormula แบบ Min
field(50003; "Minimum Sale Amount"; Decimal)
{
FieldClass = FlowField;
CalcFormula = Min("Sales Line"."Amount" where("Sell-to Customer No." = field("No.")));
Caption = 'Minimum Sale Amount';
Editable = false;
}
อธิบาย
Minใช้ในการหาค่าที่น้อยที่สุดของฟิลด์ที่ระบุ- ใช้สำหรับหายอดขายที่น้อยที่สุดในคำสั่งซื้อของลูกค้า
5. Max (หาค่ามากสุด)
ตัวอย่าง: หายอดขายมากสุดของลูกค้า
การสร้าง FlowField ด้วย CalcFormula แบบ Max
field(50004; "Maximum Sale Amount"; Decimal)
{
FieldClass = FlowField;
CalcFormula = Max("Sales Line"."Amount" where("Sell-to Customer No." = field("No.")));
Caption = 'Maximum Sale Amount';
Editable = false;
}
อธิบาย
Maxใช้ในการหาค่าที่มากที่สุดของฟิลด์ที่ระบุ- ใช้สำหรับหายอดขายที่มากที่สุดในคำสั่งซื้อของลูกค้า
6. Exist (ตรวจสอบการมีอยู่ของรายการ)
ตัวอย่าง: ตรวจสอบว่าลูกค้ามีคำสั่งซื้อหรือไม่
การสร้าง FlowField ด้วย CalcFormula แบบ Exist
field(50005; "Has Orders"; Boolean)
{
FieldClass = FlowField;
CalcFormula = Exist("Sales Header" where("Sell-to Customer No." = field("No."), "Document Type" = CONST(Order)));
Caption = 'Has Orders';
Editable = false;
}
อธิบาย
Existจะคืนค่าtrueหากมีรายการที่ตรงกับเงื่อนไข หรือfalseหากไม่มี- ใช้ในการตรวจสอบว่าลูกค้ามีคำสั่งซื้อหรือไม่
7. Lookup (ค้นหาค่าในฟิลด์อื่น)
ตัวอย่าง: ดึงข้อมูล Email ของผู้ติดต่อ (Contact) ที่เชื่อมโยงกับลูกค้า (Customer)
การสร้าง FlowField ด้วย CalcFormula แบบ Lookup
field(50007; "Contact Email"; Text[100])
{
FieldClass = FlowField;
CalcFormula = Lookup(Contact."E-Mail" where("No." = field("Primary Contact No.")));
Caption = 'Contact Email';
Editable = false;
}
อธิบาย
Lookupใช้ในการดึงค่าจากฟิลด์ในตารางอื่น- ในกรณีนี้ ดึงค่า E-Mail จากตาราง Contact
การคำนวณค่าใน FlowField
FlowField จะไม่คำนวณค่าอัตโนมัติ ต้องเรียกใช้เมธอด CALCFIELDS เพื่อคำนวณค่า
CustomerRec.CalcFields("Total Sales");
ตัวอย่างการใช้งาน
var
CustomerRec: Record Customer;
begin
CustomerRec.SetRange("No.", 'CUST001');
if CustomerRec.FindFirst() then begin
CustomerRec.CalcFields("Total Sales");
Message('Total Sales for %1 is %2', CustomerRec."Name", CustomerRec."Total Sales");
end;
end;
FlowFilters คืออะไร?
FlowFilters เป็นฟิลด์ชนิดพิเศษที่ใช้ในการกรองข้อมูลสำหรับการคำนวณใน FlowFields โดยไม่เก็บข้อมูลจริง แต่ใช้เป็นตัวกรองชั่วคราว
field(50001; "Date Filter"; Date)
{
FieldClass = FlowFilter;
}
การใช้งาน FlowFilter ร่วมกับ FlowField
เมื่อเราต้องการคำนวณยอดขายในช่วงวันที่ที่กำหนด เราสามารถใช้ FlowFilter เพื่อกำหนดช่วงวันที่
ตัวอย่างการเรียกใช้ FlowFilter
field(50000; "Total Sales"; Decimal)
{
FieldClass = FlowField;
CalcFormula = Sum("Sales Line"."Amount" where("Sell-to Customer No." = field("No."),
"Requested Delivery Date" = field("Date Filter")));
Editable = false;
}
ตัวอย่างการใช้งาน FlowFilter ใน Code
var
CustomerRec: Record Customer;
StartDate: Date;
EndDate: Date;
begin
StartDate := DMY2Date(1, 1, 2024);
EndDate := DMY2Date(31, 12, 2024);
CustomerRec.SetRange("No.", 'CUST001');
CustomerRec.SetRange("Date Filter", StartDate, EndDate);
if CustomerRec.FindFirst() then begin
CustomerRec.CalcFields("Total Sales");
Message('Total Sales for %1 from %2 to %3 is %4',
CustomerRec."Name", StartDate, EndDate, CustomerRec."Total Sales");
end;
end;
การสร้าง Procedure ที่ใช้ FlowFields และ FlowFilters
เราสามารถสร้างฟังก์ชันเพื่อคำนวณยอดขายของลูกค้าในช่วงวันที่ที่กำหนดได้
procedure GetTotalSales(CustomerNo: Code[20]; StartDate: Date; EndDate: Date): Decimal
var
CustomerRec: Record Customer;
begin
CustomerRec.SetRange("No.", CustomerNo);
CustomerRec.SetRange("Date Filter", StartDate, EndDate);
if CustomerRec.FindFirst() then begin
CustomerRec.CalcFields("Total Sales");
exit(CustomerRec."Total Sales");
end else
exit(0);
end;
การเรียกใช้ Procedure GetTotalSales
var
TotalSales: Decimal;
begin
TotalSales := GetTotalSales('CUST001', DMY2Date(1, 1, 2023), DMY2Date(31, 12, 2023));
Message('Total Sales is %1', TotalSales);
end;
สรุป
FlowFields และ FlowFilters เป็นเครื่องมือที่ทรงพลังใน AL สำหรับการคำนวณและกรองข้อมูลอย่างมีประสิทธิภาพ การเข้าใจการใช้งานและวิธีการทำงานของพวกมันจะช่วยให้การพัฒนาแอปพลิเคชันเป็นไปอย่างราบรื่นและมีประสิทธิภาพมากขึ้น










