Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

在 Business Central 用 AL 實作按鍵來新增所有資料 的客製程式中,有一個按鍵 DeleteAllRecords 是用來 刪除 Basic Table 裡所有資料。
action(DeleteAllRecords)
{
Caption = '刪除所有資料';
Image = Delete;
trigger OnAction()
var
RecRef: RecordRef;
ConfirmDeleteAll: Boolean;
begin
ConfirmDeleteAll := Dialog.Confirm(
'是否刪除所有的資料?',
false
);
if ConfirmDeleteAll then begin
RecRef.Open(Database::"Basic Table");
RecRef.DeleteAll();
RecRef.Reset();
Message('已清空 Basic Table 資料');
end;
end;
}為了讓 action(DeleteAllRecords) 邏輯可以重複使用,我們將其程式碼移到一個 Codeunit 中。這樣,這個功能就可以被其他頁面、報表或 Codeunit 呼叫。
codeunit 60100 "Basic Table Tools"
{
// 讓此 Codeunit 可以在不需要執行環境的情況下呼叫 (例如從 Web Service)
// 但在這個簡單的案例中,可以省略此屬性。
// CodeunitType = Normal;
// 此函數負責清空 "Basic Table" 的所有記錄
procedure DeleteAllBasicTableRecords()
var
RecRef: RecordRef;
ConfirmDeleteAll: Boolean;
begin
ConfirmDeleteAll := Dialog.Confirm(
'是否刪除所有的資料?',
false
);
if ConfirmDeleteAll then begin
// 開啟目標 Table (Basic Table)
RecRef.Open(Database::"Basic Table");
// 刪除 Table 中的所有記錄
RecRef.DeleteAll();
// 重設 RecordRef,釋放資源 (雖然非必須,但保持良好習慣)
RecRef.Reset();
// 顯示成功訊息
Message('已清空 Basic Table 資料');
end;
end;
}
BasicTablePage.al)接下來,我們需要修改 page 60100 "Basic Table Page" 中的 action(DeleteAllRecords),讓它呼叫新的 Codeunit 函數。
//程式碼片段
area(Processing)
{
action(DeleteAllRecords)
{
Caption = '刪除所有資料';
Image = Delete;
trigger OnAction()
var
BasicTableTools: Codeunit "Basic Table Tools"; // 宣告新的 Codeunit 變數
begin
BasicTableTools.DeleteAllBasicTableRecords();
end;
}
}這樣子就可以只維護 BasicTableTools.DeleteAllBasicTableRecords(); 裡的程式,不需要每支程式去修改了。