Table 1265 Data Exch. Field Mapping Buf.

App
Base Application
Namespace
System.IO
Versions
17-28

Fields, 11Keys, 1Procedures, 7

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/System/DataExchange/DataExchFieldMappingBuf.Table.al352 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.IO;

using System.Reflection;

table 1265 "Data Exch. Field Mapping Buf."
{
    Caption = 'Data Exch. Field Mapping Buf.';
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Data Exchange Def Code"; Code[20])
        {
            Caption = 'Data Exchange Def Code';
            DataClassification = SystemMetadata;
        }
        field(2; "Data Exchange Line Def Code"; Code[20])
        {
            Caption = 'Data Exchange Line Def Code';
            DataClassification = SystemMetadata;
        }
        field(3; "Table ID"; Integer)
        {
            Caption = 'Table ID';
            DataClassification = SystemMetadata;
        }
        field(4; "Column No."; Integer)
        {
            Caption = 'Column No.';
            DataClassification = SystemMetadata;
        }
        field(5; Type; Option)
        {
            Caption = 'Type';
            DataClassification = SystemMetadata;
            OptionCaption = 'Field,Table';
            OptionMembers = "Field","Table";
        }
        field(10; "Field ID"; Integer)
        {
            Caption = 'Field ID';
            DataClassification = SystemMetadata;
        }
        field(11; "Default Value"; Text[250])
        {
            Caption = 'Default Value';
            DataClassification = SystemMetadata;

            trigger OnValidate()
            var
                DataExchFieldMapping: Record "Data Exch. Field Mapping";
            begin
                TestField(Type, Type::Field);
                DataExchFieldMapping.Get("Data Exchange Def Code", "Data Exchange Line Def Code", "Table ID", "Column No.", "Field ID");
                DataExchFieldMapping.Validate("Default Value", "Default Value");
                DataExchFieldMapping.Modify(true);
            end;
        }
        field(13; Source; Text[250])
        {
            Caption = 'Source';
            DataClassification = SystemMetadata;

            trigger OnValidate()
            var
                DataExchColumnDef: Record "Data Exch. Column Def";
                DataExchLineDef: Record "Data Exch. Line Def";
            begin
                case Type of
                    Type::Field:
                        if not DataExchColumnDef.Get("Data Exchange Def Code", "Data Exchange Line Def Code", "Column No.") then
                            CreateDataExchColumnDef()
                        else begin
                            DataExchColumnDef.Validate(Path, Source);
                            DataExchColumnDef.Modify(true);
                        end;
                    Type::Table:
                        begin
                            DataExchLineDef.Get("Data Exchange Def Code", "Data Exchange Line Def Code");
                            DataExchLineDef.Validate("Data Line Tag", Source);
                            DataExchLineDef.Modify(true);
                        end;
                end;
            end;
        }
        field(20; Caption; Text[250])
        {
            Caption = 'Caption';
            DataClassification = SystemMetadata;
            Editable = false;
        }
        field(22; Depth; Integer)
        {
            Caption = 'Depth';
            DataClassification = SystemMetadata;
        }
        field(23; "Transformation Rule"; Code[20])
        {
            Caption = 'Transformation Rule';
            DataClassification = SystemMetadata;
            TableRelation = "Transformation Rule";

            trigger OnValidate()
            var
                DataExchFieldMapping: Record "Data Exch. Field Mapping";
            begin
                TestField(Type, Type::Field);
                DataExchFieldMapping.Get("Data Exchange Def Code", "Data Exchange Line Def Code", "Table ID", "Column No.", "Field ID");
                DataExchFieldMapping.Validate("Transformation Rule", "Transformation Rule");
                DataExchFieldMapping.Modify(true);
            end;
        }
    }

    keys
    {
        key(Key1; "Data Exchange Def Code", "Data Exchange Line Def Code", "Field ID", "Table ID")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        DataExchColumnDef: Record "Data Exch. Column Def";
        DataExchFieldMapping: Record "Data Exch. Field Mapping";
    begin
        TestField(Type, Type::Field);
        if DataExchFieldMapping.Get("Data Exchange Def Code", "Data Exchange Line Def Code", "Table ID", "Column No.", "Field ID") then
            DataExchFieldMapping.Delete(true);

        if DataExchColumnDef.Get("Data Exchange Def Code", "Data Exchange Line Def Code", "Column No.") then
            DataExchColumnDef.Delete(true);
    end;

    trigger OnInsert()
    var
        DataExchFieldMapping: Record "Data Exch. Field Mapping";
    begin
        TestField(Type, Type::Field);
        if "Column No." = 0 then
            CreateDataExchColumnDef();

        if not DataExchFieldMapping.Get("Data Exchange Def Code", "Data Exchange Line Def Code", "Table ID", "Column No.", "Field ID") then
            CreateFieldMapping();
    end;

    trigger OnRename()
    begin
        // TODO: Test and implement
    end;

    procedure InsertFromDataExchDefinition(var TempDataExchFieldMappingBuf: Record "Data Exch. Field Mapping Buf." temporary; DataExchDef: Record "Data Exch. Def"; var TempSuggestedField: Record "Field" temporary)
    var
        DataExchLineDef: Record "Data Exch. Line Def";
    begin
        DataExchLineDef.SetRange("Data Exch. Def Code", DataExchDef.Code);
        DataExchLineDef.SetRange("Parent Code", '');

        if DataExchLineDef.FindSet() then
            repeat
                InsertFromDataExchDefinitionLine(TempDataExchFieldMappingBuf, DataExchLineDef, TempSuggestedField, 0);
            until DataExchLineDef.Next() = 0;
    end;

    procedure InsertFromDataExchDefinitionLine(var TempDataExchFieldMappingBuf: Record "Data Exch. Field Mapping Buf." temporary; DataExchLineDef: Record "Data Exch. Line Def"; var TempSuggestedField: Record "Field" temporary; NewDepth: Integer)
    var
        DataExchMapping: Record "Data Exch. Mapping";
        ChildDataExchLineDef: Record "Data Exch. Line Def";
    begin
        DataExchMapping.SetRange("Data Exch. Def Code", DataExchLineDef."Data Exch. Def Code");
        DataExchMapping.SetRange("Data Exch. Line Def Code", DataExchLineDef.Code);

        if DataExchMapping.FindSet() then
            repeat
                InsertDataExchLineDefMappingLine(TempDataExchFieldMappingBuf, DataExchMapping, NewDepth);
                InsertFieldMappingDefinition(TempDataExchFieldMappingBuf, DataExchMapping, NewDepth + 1);
                InsertSuggestedFields(TempDataExchFieldMappingBuf, DataExchMapping, TempSuggestedField, NewDepth + 1);
            until DataExchMapping.Next() = 0;

        ChildDataExchLineDef.SetRange("Data Exch. Def Code", DataExchLineDef."Data Exch. Def Code");
        ChildDataExchLineDef.SetRange("Parent Code", DataExchLineDef.Code);

        if ChildDataExchLineDef.FindSet() then
            repeat
                InsertFromDataExchDefinitionLine(TempDataExchFieldMappingBuf, ChildDataExchLineDef, TempSuggestedField, NewDepth + 1);
            until ChildDataExchLineDef.Next() = 0;
    end;

    procedure InsertFieldMappingDefinition(var TempDataExchFieldMappingBuf: Record "Data Exch. Field Mapping Buf." temporary; DataExchMapping: Record "Data Exch. Mapping"; Indentation: Integer)
    var
        DataExchFieldMapping: Record "Data Exch. Field Mapping";
    begin
        DataExchFieldMapping.SetRange("Data Exch. Def Code", DataExchMapping."Data Exch. Def Code");
        DataExchFieldMapping.SetRange("Data Exch. Line Def Code", DataExchMapping."Data Exch. Line Def Code");
        DataExchFieldMapping.SetRange("Table ID", DataExchMapping."Table ID");

        if not DataExchFieldMapping.FindSet() then
            exit;

        repeat
            InsertFieldMappingLineDefinition(TempDataExchFieldMappingBuf, DataExchMapping, DataExchFieldMapping, Indentation);
        until DataExchFieldMapping.Next() = 0;
    end;

    procedure InsertSuggestedFields(var TempDataExchFieldMappingBuf: Record "Data Exch. Field Mapping Buf." temporary; DataExchMapping: Record "Data Exch. Mapping"; var TempSuggestedField: Record "Field" temporary; Indentation: Integer)
    var
        DataExchFieldMapping: Record "Data Exch. Field Mapping";
    begin
        TempSuggestedField.SetRange(TableNo, DataExchMapping."Table ID");

        if not TempSuggestedField.FindSet() then
            exit;

        repeat
            DataExchFieldMapping.SetRange("Data Exch. Def Code", DataExchMapping."Data Exch. Def Code");
            DataExchFieldMapping.SetRange("Data Exch. Line Def Code", DataExchMapping."Data Exch. Line Def Code");
            DataExchFieldMapping.SetRange("Table ID", DataExchMapping."Table ID");
            DataExchFieldMapping.SetRange("Field ID", TempSuggestedField."No.");
            if not DataExchFieldMapping.FindFirst() then begin
                InitializeDataExchangeSetupLine(
                  TempDataExchFieldMappingBuf, DataExchMapping, TempSuggestedField."No.", Indentation, TempSuggestedField."Field Caption");
                TempDataExchFieldMappingBuf.Insert(true);
            end;
        until TempSuggestedField.Next() = 0;
    end;

    procedure InsertFieldMappingLineDefinition(var TempDataExchFieldMappingBuf: Record "Data Exch. Field Mapping Buf." temporary; DataExchMapping: Record "Data Exch. Mapping"; DataExchFieldMapping: Record "Data Exch. Field Mapping"; Indentation: Integer)
    var
        DataExchColumnDef: Record "Data Exch. Column Def";
    begin
        InitializeDataExchangeSetupLine(
          TempDataExchFieldMappingBuf, DataExchMapping, DataExchFieldMapping."Field ID", Indentation, DataExchFieldMapping.GetFieldCaption());
        TempDataExchFieldMappingBuf."Column No." := DataExchFieldMapping."Column No.";
        TempDataExchFieldMappingBuf."Default Value" := DataExchFieldMapping."Default Value";
        TempDataExchFieldMappingBuf."Transformation Rule" := DataExchFieldMapping."Transformation Rule";
        DataExchColumnDef.Get(
          DataExchFieldMapping."Data Exch. Def Code", DataExchFieldMapping."Data Exch. Line Def Code",
          DataExchFieldMapping."Column No.");
        TempDataExchFieldMappingBuf.Source := DataExchColumnDef.Path;
        TempDataExchFieldMappingBuf.Insert(true);
    end;

    local procedure InsertDataExchLineDefMappingLine(var TempDataExchFieldMappingBuf: Record "Data Exch. Field Mapping Buf." temporary; DataExchMapping: Record "Data Exch. Mapping"; Indentation: Integer)
    var
        DataExchDef: Record "Data Exch. Def";
        DataExchLineDef: Record "Data Exch. Line Def";
    begin
        DataExchDef.Get(DataExchMapping."Data Exch. Def Code");
        DataExchLineDef.Get(DataExchMapping."Data Exch. Def Code", DataExchMapping."Data Exch. Line Def Code");
        Clear(TempDataExchFieldMappingBuf);
        TempDataExchFieldMappingBuf.Init();
        TempDataExchFieldMappingBuf."Data Exchange Def Code" := DataExchMapping."Data Exch. Def Code";
        TempDataExchFieldMappingBuf."Data Exchange Line Def Code" := DataExchMapping."Data Exch. Line Def Code";
        TempDataExchFieldMappingBuf.Type := TempDataExchFieldMappingBuf.Type::Table;
        TempDataExchFieldMappingBuf."Table ID" := DataExchMapping."Table ID";
        TempDataExchFieldMappingBuf.Caption := DataExchLineDef.Name;
        TempDataExchFieldMappingBuf.Depth := Indentation;
        TempDataExchFieldMappingBuf.Source := DataExchLineDef."Data Line Tag";
        TempDataExchFieldMappingBuf.Insert();
    end;

    local procedure InitializeDataExchangeSetupLine(var TempDataExchFieldMappingBuf: Record "Data Exch. Field Mapping Buf." temporary; DataExchMapping: Record "Data Exch. Mapping"; FieldID: Integer; Indentation: Integer; NewCaption: Text)
    var
        DataExchDef: Record "Data Exch. Def";
    begin
        DataExchDef.Get(DataExchMapping."Data Exch. Def Code");

        Clear(TempDataExchFieldMappingBuf);
        TempDataExchFieldMappingBuf.Init();
        TempDataExchFieldMappingBuf."Data Exchange Def Code" := DataExchMapping."Data Exch. Def Code";
        TempDataExchFieldMappingBuf."Data Exchange Line Def Code" := DataExchMapping."Data Exch. Line Def Code";
        TempDataExchFieldMappingBuf.Type := TempDataExchFieldMappingBuf.Type::Field;
        TempDataExchFieldMappingBuf."Table ID" := DataExchMapping."Table ID";
        TempDataExchFieldMappingBuf."Field ID" := FieldID;
        TempDataExchFieldMappingBuf.Caption := CopyStr(NewCaption, 1, MaxStrLen(TempDataExchFieldMappingBuf.Caption));
        TempDataExchFieldMappingBuf.Depth := Indentation;
    end;

    procedure SourceAssistEdit(var XMLBuffer: Record "XML Buffer")
    begin
        if PAGE.RunModal(PAGE::"Select Source", XMLBuffer) = ACTION::LookupOK then
            Validate(Source, XMLBuffer.Path);
    end;

    procedure CaptionAssistEdit()
    var
        "Field": Record "Field";
        FieldSelection: Codeunit "Field Selection";
    begin
        Field.SetRange(TableNo, "Table ID");
        if FieldSelection.Open(Field) then begin
            Validate("Field ID", Field."No.");
            Validate(Caption, Field."Field Caption");
        end;
    end;

    local procedure GetLastColumnNo(): Integer
    var
        DataExchColumnDef: Record "Data Exch. Column Def";
    begin
        DataExchColumnDef.SetRange("Data Exch. Def Code", "Data Exchange Def Code");
        DataExchColumnDef.SetRange("Data Exch. Line Def Code", "Data Exchange Line Def Code");
        if DataExchColumnDef.FindLast() then
            exit(DataExchColumnDef."Column No.");

        exit(GetIncrement());
    end;

    local procedure GetIncrement(): Integer
    begin
        exit(10000);
    end;

    local procedure CreateDataExchColumnDef()
    var
        DataExchColumnDef: Record "Data Exch. Column Def";
    begin
        if "Data Exchange Def Code" <> '' then begin
            "Column No." := GetLastColumnNo() + GetIncrement();
            DataExchColumnDef.Init();
            DataExchColumnDef."Data Exch. Def Code" := "Data Exchange Def Code";
            DataExchColumnDef."Data Exch. Line Def Code" := "Data Exchange Line Def Code";
            DataExchColumnDef."Column No." := "Column No.";
            DataExchColumnDef.Path := Source;
            DataExchColumnDef.Insert(true);
        end;
    end;

    local procedure CreateFieldMapping()
    var
        DataExchFieldMapping: Record "Data Exch. Field Mapping";
    begin
        if "Data Exchange Def Code" <> '' then begin
            DataExchFieldMapping.Init();
            DataExchFieldMapping.Validate("Data Exch. Def Code", "Data Exchange Def Code");
            DataExchFieldMapping.Validate("Data Exch. Line Def Code", "Data Exchange Line Def Code");
            DataExchFieldMapping.Validate("Table ID", "Table ID");
            DataExchFieldMapping.Validate("Column No.", "Column No.");
            DataExchFieldMapping.Validate("Field ID", "Field ID");
            DataExchFieldMapping.Validate("Default Value", "Default Value");
            DataExchFieldMapping.Validate("Transformation Rule", "Transformation Rule");
            DataExchFieldMapping.Insert(true);
        end;
    end;
}