Table 8616 Config. Package Field

App
Base Application
Namespace
System.IO
Versions
17-28

Fields, 17Keys, 4Procedures, 3Events, 6

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/System/RapidStart/ConfigPackageField.Table.al376 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.IO;

using System.Reflection;

table 8616 "Config. Package Field"
{
    Caption = 'Config. Package Field';
    ReplicateData = false;
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Package Code"; Code[20])
        {
            Caption = 'Package Code';
            NotBlank = true;
            TableRelation = "Config. Package";
        }
        field(2; "Table ID"; Integer)
        {
            Caption = 'Table ID';
            NotBlank = true;
            TableRelation = AllObjWithCaption."Object ID" where("Object Type" = const(Table));
        }
        field(3; "Field ID"; Integer)
        {
            Caption = 'Field ID';
            NotBlank = true;
            TableRelation = Field."No." where(TableNo = field("Table ID"));
            ValidateTableRelation = false;

            trigger OnValidate()
            begin
                ValidateFieldIDTableRelation();
            end;
        }
        field(4; "Field Name"; Text[30])
        {
            Caption = 'Field Name';

            trigger OnValidate()
            begin
                "XML Field Name" := GetUniqueElementName("Field Name");
            end;
        }
        field(5; "Field Caption"; Text[250])
        {
            Caption = 'Field Caption';
        }
        field(6; "Validate Field"; Boolean)
        {
            Caption = 'Validate Field';

            trigger OnValidate()
            var
                ShouldRunCheck: Boolean;
                IsHandled: Boolean;
            begin
                IsHandled := false;
                OnBeforeValidateValidateField(Rec, IsHandled);
                if IsHandled then
                    exit;

                ShouldRunCheck := not Dimension;
                OnValidateFieldOnValidateOnAfterCalcShouldRunCheck(Rec, ShouldRunCheck);
                if ShouldRunCheck then begin
                    if "Validate Field" then
                        ThrowErrorIfFieldRemoved();
                    UpdateFieldErrors();
                end;
            end;
        }
        field(7; "Include Field"; Boolean)
        {
            Caption = 'Include Field';

            trigger OnValidate()
            var
                ShouldRunCheck: Boolean;
                IsHandled: Boolean;
            begin
                IsHandled := false;
                OnBeforeValidateIncludeField(Rec, IsHandled);
                if IsHandled then
                    exit;
                ShouldRunCheck := not Dimension;
                OnIncludeFieldOnValidateOnAfterCalcShouldRunCheck(Rec, ShouldRunCheck);
                if ShouldRunCheck then begin
                    if xRec."Include Field" and not "Include Field" and "Primary Key" then
                        Error(PrimaryKeyRequiredErr, "Field Caption");
                    if "Include Field" then
                        ThrowErrorIfFieldRemoved();
                    "Validate Field" := "Include Field";
                    UpdateFieldErrors();
                end;
            end;
        }
        field(8; "Localize Field"; Boolean)
        {
            Caption = 'Localize Field';
        }
        field(9; "Relation Table ID"; Integer)
        {
            Caption = 'Relation Table ID';
            Editable = false;
            TableRelation = AllObjWithCaption."Object ID" where("Object Type" = const(Table));
        }
        field(10; "Relation Table Caption"; Text[250])
        {
            CalcFormula = lookup(AllObjWithCaption."Object Name" where("Object Type" = const(Table),
                                                                        "Object ID" = field("Relation Table ID")));
            Caption = 'Relation Table Caption';
            Editable = false;
            FieldClass = FlowField;
        }
        field(11; Dimension; Boolean)
        {
            Caption = 'Dimension';
            Editable = false;
        }
        field(12; "Primary Key"; Boolean)
        {
            Caption = 'Primary Key';
            Editable = false;
        }
        field(13; "Processing Order"; Integer)
        {
            Caption = 'Processing Order';
        }
        field(14; "Create Missing Codes"; Boolean)
        {
            Caption = 'Create Missing Codes';

            trigger OnValidate()
            begin
                if "Create Missing Codes" then
                    TestField("Relation Table ID");
            end;
        }
        field(15; "Mapping Exists"; Boolean)
        {
            CalcFormula = exist("Config. Field Map" where("Package Code" = field("Package Code"),
                                                               "Table ID" = field("Table ID"),
                                                               "Field ID" = field("Field ID")));
            Caption = 'Mapping Exists';
            Editable = false;
            FieldClass = FlowField;
        }
        field(16; AutoIncrement; Boolean)
        {
            Caption = 'AutoIncrement';
            DataClassification = SystemMetadata;

            trigger OnValidate()
            begin
                TestField("Primary Key", false);
                TestFieldIsInteger();
            end;
        }
        field(20; "XML Field Name"; Text[30])
        {
            Caption = 'XML Field Name';
            DataClassification = SystemMetadata;
        }
    }

    keys
    {
        key(Key1; "Package Code", "Table ID", "Field ID")
        {
            Clustered = true;
        }
        key(Key2; "Package Code", "Table ID", "Include Field")
        {
        }
        key(Key3; "Package Code", "Table ID", "Validate Field")
        {
        }
        key(Key4; "Package Code", "Table ID", "Processing Order")
        {
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    begin
        DeleteConfigFieldMap();
    end;

    var
#pragma warning disable AA0470
        PrimaryKeyRequiredErr: Label '%1 is part of the primary key and must be included.';
        FieldValueNotExistErr: Label '%1 value ''%2'' does not exist.';
#pragma warning restore AA0470
        UpdateValErrsTxt: Label 'Updating validation errors';
        MustBeIntegersErr: Label 'must be Integer or BigInteger';

    local procedure UpdateFieldErrors()
    var
        ConfigPackageData: Record "Config. Package Data";
        ConfigPackageField: Record "Config. Package Field";
        TempConfigPackageTable: Record "Config. Package Table" temporary;
        ConfigPackageRecord: Record "Config. Package Record";
        ConfigPackageMgt: Codeunit "Config. Package Management";
        ConfigValidateMgt: Codeunit "Config. Validate Management";
        ConfigProgressBar: Codeunit "Config. Progress Bar";
        RecRef: RecordRef;
        FieldRef: FieldRef;
        ErrorText: Text[250];
        ShouldRunCheck: Boolean;
    begin
        ShouldRunCheck := not Dimension;
        OnUpdateFieldErrorsOnAfterCalcShouldRunCheck(Rec, ShouldRunCheck);
        if ShouldRunCheck then begin
            if "Include Field" then begin
                RecRef.Open("Table ID", true);
                FieldRef := RecRef.Field("Field ID");
            end;
            ConfigPackageData.SetRange("Package Code", "Package Code");
            ConfigPackageData.SetRange("Table ID", "Table ID");
            ConfigPackageData.SetRange("Field ID", "Field ID");
            if ConfigPackageData.FindSet() then begin
                ConfigProgressBar.Init(ConfigPackageData.Count, 1, UpdateValErrsTxt);
                repeat
                    ConfigProgressBar.Update(ConfigPackageData.Value);
                    ConfigPackageRecord.Get(
                      ConfigPackageData."Package Code", ConfigPackageData."Table ID", ConfigPackageData."No.");
                    ConfigPackageMgt.CleanFieldError(ConfigPackageData);
                    if "Include Field" then begin
                        ErrorText := CopyStr(ConfigValidateMgt.EvaluateValue(FieldRef, ConfigPackageData.Value, false), 1, MaxStrLen(ErrorText));
                        ConfigPackageMgt.FieldError(ConfigPackageData, ErrorText, 0);
                        if "Validate Field" then begin
                            Clear(TempConfigPackageTable);
                            ConfigPackageField.Init();
                            ConfigPackageField.Reset();
                            ConfigPackageField.SetRange("Package Code", "Package Code");
                            ConfigPackageField.SetRange("Table ID", "Table ID");
                            ConfigPackageField.SetRange("Field ID", "Field ID");
                            if not ConfigPackageMgt.ValidateFieldRelationInRecord(
                                 ConfigPackageField, TempConfigPackageTable, ConfigPackageRecord, RecRef)
                            then
                                ConfigPackageMgt.FieldError(ConfigPackageData, StrSubstNo(FieldValueNotExistErr, FieldRef.Caption, ConfigPackageData.Value), 0);
                        end;
                    end;
                until ConfigPackageData.Next() = 0;
                ConfigProgressBar.Close();
            end;
        end;
    end;

    local procedure DeleteConfigFieldMap()
    var
        ConfigFieldMap: Record "Config. Field Map";
    begin
        ConfigFieldMap.SetRange("Package Code", "Package Code");
        ConfigFieldMap.SetRange("Table ID", "Table ID");
        ConfigFieldMap.SetRange("Field ID", "Field ID");
        ConfigFieldMap.DeleteAll();
    end;

    procedure GetRelationTablesID() Result: Text
    var
        TableRelationsMetadata: Record "Table Relations Metadata";
    begin
        TableRelationsMetadata.SetRange("Table ID", "Table ID");
        TableRelationsMetadata.SetRange("Field No.", "Field ID");
        if TableRelationsMetadata.FindSet() then
            repeat
                Result += Format(TableRelationsMetadata."Related Table ID") + '|';
            until TableRelationsMetadata.Next() = 0;
        exit(DelChr(Result, '>', '|'));
    end;

    local procedure TestFieldIsInteger()
    var
        "Field": Record "Field";
    begin
        if Field.Get("Table ID", "Field ID") then
            if not (Field.Type in [Field.Type::BigInteger, Field.Type::Integer]) then
                Field.FieldError(Type, MustBeIntegersErr);
    end;

    local procedure ThrowErrorIfFieldRemoved()
    var
        "Field": Record "Field";
        TypeHelper: Codeunit "Type Helper";
    begin
        Field.Get("Table ID", "Field ID");
        TypeHelper.TestFieldIsNotObsolete(Field);
    end;

    procedure GetElementName(): Text[250]
    var
        ConfigXMLExchange: Codeunit "Config. XML Exchange";
    begin
        if "XML Field Name" <> '' then
            exit("XML Field Name");

        exit(ConfigXMLExchange.GetElementName("Field Name"));
    end;

    procedure GetValidatedElementName(): Text
    var
        ConfigValidateMgt: Codeunit "Config. Validate Management";
    begin
        exit(ConfigValidateMgt.CheckName(GetElementName()));
    end;

    local procedure GetUniqueElementName(FieldName: Text[30]): Text[30]
    var
        ConfigPackageField: Record "Config. Package Field";
        ConfigXMLExchange: Codeunit "Config. XML Exchange";
        ElementName: Text[30];
        NewFieldName: Text;
    begin
        ElementName := CopyStr(ConfigXMLExchange.GetElementName(FieldName), 1, MaxStrLen(ElementName));
        ConfigPackageField.SetRange("Package Code", "Package Code");
        ConfigPackageField.SetRange("Table ID", "Table ID");
        ConfigPackageField.SetFilter("Field ID", '<>%1', "Field ID");
        ConfigPackageField.SetRange("XML Field Name", ElementName);
        if not ConfigPackageField.IsEmpty() then begin
            NewFieldName := IncStr(FieldName);
            if NewFieldName = '' then
                NewFieldName := FieldName + '1';
            exit(GetUniqueElementName(CopyStr(NewFieldName, 1, MaxStrLen(FieldName))));
        end;

        exit(ElementName);
    end;

    local procedure ValidateFieldIDTableRelation()
    var
        FieldRec: Record Field;
        ShouldValidate: Boolean;
    begin
        ShouldValidate := not Dimension;
        OnBeforeValidateFieldIDTableRelation(Rec, ShouldValidate);
        if ShouldValidate then
            FieldRec.Get("Table ID", "Field ID");
    end;

    [IntegrationEvent(false, false)]
    local procedure OnIncludeFieldOnValidateOnAfterCalcShouldRunCheck(var ConfigPackageField: Record "Config. Package Field"; var ShouldRunCheck: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeValidateIncludeField(var ConfigPackageField: Record "Config. Package Field"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeValidateValidateField(var ConfigPackageField: Record "Config. Package Field"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeValidateFieldIDTableRelation(var ConfigPackageField: Record "Config. Package Field"; var ShouldValidate: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnValidateFieldOnValidateOnAfterCalcShouldRunCheck(var ConfigPackageField: Record "Config. Package Field"; var ShouldRunCheck: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnUpdateFieldErrorsOnAfterCalcShouldRunCheck(var ConfigPackageField: Record "Config. Package Field"; var ShouldRunCheck: Boolean)
    begin
    end;
}