Codeunit 1204 Map Data Exch. To RapidStart, source in 29
Source29
src/Layers/W1/BaseApp/System/RapidStart/MapDataExchToRapidStart.Codeunit.al132 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.IO;
codeunit 1204 "Map Data Exch. To RapidStart"
{
trigger OnRun()
begin
end;
var
TempDataExchRapidStartBuffer: Record "DataExch-RapidStart Buffer" temporary;
TargetTableFieldDefinitionMustBeSpecifiedErr: Label 'You must specify a target table for the column definition.';
procedure ProcessAllLinesColumnMapping(DataExch: Record "Data Exch."; TargetRapidstartPackageCode: Code[20])
var
DataExchLineDef: Record "Data Exch. Line Def";
begin
TempDataExchRapidStartBuffer.Reset();
TempDataExchRapidStartBuffer.DeleteAll();
DataExchLineDef.SetRange("Data Exch. Def Code", DataExch."Data Exch. Def Code");
DataExchLineDef.SetRange("Parent Code", '');
if DataExchLineDef.FindSet() then
repeat
ProcessColumnMapping(DataExch, DataExchLineDef, TargetRapidstartPackageCode);
until DataExchLineDef.Next() = 0;
end;
local procedure ProcessColumnMapping(DataExch: Record "Data Exch."; DataExchLineDef: Record "Data Exch. Line Def"; TargetRapidstartPackageCode: Code[20])
var
DataExchField: Record "Data Exch. Field";
NewConfigPackageRecord: Record "Config. Package Record";
ChildDataExchLineDef: Record "Data Exch. Line Def";
CurrentLineNo: Integer;
begin
DataExchField.SetRange("Data Exch. No.", DataExch."Entry No.");
DataExchField.SetRange("Data Exch. Line Def Code", DataExchLineDef.Code);
if not DataExchField.FindSet() then
exit;
CurrentLineNo := -1;
repeat
InsertRecordDefinition(DataExchField, DataExchLineDef, NewConfigPackageRecord, CurrentLineNo, TargetRapidstartPackageCode);
InsertDataValues(DataExchField, DataExchLineDef, TargetRapidstartPackageCode, NewConfigPackageRecord);
until DataExchField.Next() = 0;
// Process Child Line Definitions
ChildDataExchLineDef.SetRange("Data Exch. Def Code", DataExchLineDef."Data Exch. Def Code");
ChildDataExchLineDef.SetRange("Parent Code", DataExchLineDef.Code);
if not ChildDataExchLineDef.FindSet() then
exit;
repeat
ProcessColumnMapping(DataExch, ChildDataExchLineDef, TargetRapidstartPackageCode);
until ChildDataExchLineDef.Next() = 0;
end;
local procedure InsertRecordDefinition(DataExchField: Record "Data Exch. Field"; DataExchLineDef: Record "Data Exch. Line Def"; var NewConfigPackageRecord: Record "Config. Package Record"; var CurrentLineNo: Integer; TargetRapidstartPackageCode: Code[20])
var
DataExchFieldMapping: Record "Data Exch. Field Mapping";
PreviousConfigPackageRecord: Record "Config. Package Record";
begin
// Check if definition is already inserted
if CurrentLineNo = DataExchField."Line No." then
exit;
// Find the table definition we need to write to.
DataExchFieldMapping.SetRange("Data Exch. Def Code", DataExchLineDef."Data Exch. Def Code");
DataExchFieldMapping.SetRange("Data Exch. Line Def Code", DataExchLineDef.Code);
DataExchFieldMapping.SetRange("Table ID", DATABASE::"Config. Package Data");
DataExchFieldMapping.SetFilter("Column No.", '>0');
if not DataExchFieldMapping.FindFirst() then
Error(TargetTableFieldDefinitionMustBeSpecifiedErr);
CurrentLineNo := DataExchField."Line No.";
// Initialize new record
Clear(NewConfigPackageRecord);
NewConfigPackageRecord.Init();
NewConfigPackageRecord.Validate("Package Code", TargetRapidstartPackageCode);
NewConfigPackageRecord.Validate("Table ID", DataExchFieldMapping."Target Table ID");
// Get last used No.
PreviousConfigPackageRecord.Init();
PreviousConfigPackageRecord.SetRange("Table ID", DataExchFieldMapping."Target Table ID");
PreviousConfigPackageRecord.SetRange("Package Code", TargetRapidstartPackageCode);
if PreviousConfigPackageRecord.FindLast() then
NewConfigPackageRecord.Validate("No.", PreviousConfigPackageRecord."No." + 1)
else
NewConfigPackageRecord.Validate("No.", 1);
if DataExchField."Parent Node ID" <> '' then begin
TempDataExchRapidStartBuffer.SetRange("Node ID", DataExchField."Parent Node ID");
TempDataExchRapidStartBuffer.FindFirst();
NewConfigPackageRecord.Validate("Parent Record No.", TempDataExchRapidStartBuffer."RapidStart No.");
end;
NewConfigPackageRecord.Insert();
// Update buffer with new line
TempDataExchRapidStartBuffer.Init();
TempDataExchRapidStartBuffer."Node ID" := DataExchField."Node ID";
TempDataExchRapidStartBuffer."RapidStart No." := NewConfigPackageRecord."No.";
TempDataExchRapidStartBuffer.Insert();
end;
local procedure InsertDataValues(DataExchField: Record "Data Exch. Field"; DataExchLineDef: Record "Data Exch. Line Def"; TargetRapidstartPackageCode: Code[20]; ConfigPackageRecord: Record "Config. Package Record")
var
DataExchFieldMapping: Record "Data Exch. Field Mapping";
ConfigPackageData: Record "Config. Package Data";
begin
if DataExchField."Column No." < 1 then
exit;
DataExchFieldMapping.Get(
DataExchLineDef."Data Exch. Def Code", DataExchLineDef.Code, DATABASE::"Config. Package Data", DataExchField."Column No.");
ConfigPackageData.Init();
ConfigPackageData.Validate("Package Code", TargetRapidstartPackageCode);
ConfigPackageData.Validate("Table ID", DataExchFieldMapping."Target Table ID");
ConfigPackageData.Validate("No.", ConfigPackageRecord."No.");
ConfigPackageData.Validate("Field ID", DataExchFieldMapping."Target Field ID");
ConfigPackageData.Validate(Value, DataExchField.Value);
ConfigPackageData.Insert(true);
end;
}