Use this event to
...
An alternative to DataTables is listValues that is aimed at very short lists that will never change, and is not likely to be reused (ie. custom optionvalues).has advantages and disadvantages as compared to DataTables:
DataTable | listValues |
---|---|
Static, loaded only once at login | Can be dynamic, is created at time of XmlResponse |
Can be reused, is referenced only by its key (DataTableId) | Lists must be created and sent with XmlResponse |
Most efficient, is created and loaded only once on login | Less efficient, in particular if lists are large |
Can contain multiple fields per entry ie. Code and Name | Contains only one field per entry |
Requires this addtional eventsubscriber to create the DataTable | Requires no extra eventSubscriber to create the list |
Consider using Steps.Create_ListStepFromListValues()
or HeaderField.Create_ListFieldFromListValues()
if your lists are short and will never change (ie. optionvalues), needs to be dynamic - and do not require multiple fields per entry.
See also: OnGetReferenceData_OnAfterAddDataTableEntry
...
Template
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAddDataTables', '', true, true)]
procedure OnGetReferenceData_OnAddDataTables(var _DataTable: Record "MOB DataTable Element")
begin
with _DataTable do begin
InitDataTable('MyCustomDataTableId'); // Replace with your own dataTable identifier to be used with Set_dataTable(...) from Steps and HeaderConfigurations
// Create your DataTable entries here
// ...
;
end;
end;
Example (1)
// [Example] 01 - Create new custom DataTable based on BC table using a Create_XXX template
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAddDataTables', '', true, true)]
procedure My01OnGetReferenceData_OnAddDataTables(var _DataTable: Record "MOB DataTable Element")
var
CountryRegion: Record "Country/Region";
begin
with _DataTable do begin
InitDataTable('MyCountries');
if CountryRegion.FindFirst() then
repeat
Create_CodeAndName(CountryRegion.Code, CountryRegion.Name);
until CountryRegion.Next() = 0;
end;
end;
Example (2)
// [Example] 02 - Create new custom DataTable based on with no use of templates
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAddDataTables', '', true, true)]
procedure My02OnGetReferenceData_OnAddDataTables(var _DataTable: Record "MOB DataTable Element")
var
CountryRegion: Record "Country/Region";
begin
with _DataTable do begin
InitDataTable('MyCountryDetails');
if CountryRegion.FindFirst() then
repeat
Create();
SetValue('Code', CountryRegion.Code);
SetValue('ISOCode', CountryRegion."ISO Code");
SetValue('EUCode', CountryRegion."EU Country/Region Code");
until CountryRegion.Next() = 0;
end;
end;
Example (3)
// [Example] 03 - Create new custom DataTable based on optionfield
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Reference Data", 'OnGetReferenceData_OnAddDataTables', '', true, true)]
procedure My03OnGetReferenceData_OnAddDataTables(var _DataTable: Record "MOB DataTable Element")
var
SalesHeader: Record "Sales Header";
OptionIdx: Integer;
begin
with _DataTable do begin
InitDataTable('MyDocumentTypes');
for OptionIdx := SalesHeader."Document Type"::Quote to SalesHeader."Document Type"::"Return Order" do begin
SalesHeader."Document Type" := OptionIdx;
Create();
SetValue('DocumentType', Format(SalesHeader."Document Type"));
end;
end;
end;
Filter by label (Content by label) | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...