Table 8612 Config. Question, source in 29

Source29

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

namespace System.IO;

using System.Reflection;

table 8612 "Config. Question"
{
    Caption = 'Config. Question';
    ReplicateData = false;
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Questionnaire Code"; Code[10])
        {
            Caption = 'Questionnaire Code';
            Editable = false;
            TableRelation = "Config. Questionnaire".Code;
        }
        field(2; "Question Area Code"; Code[10])
        {
            Caption = 'Question Area Code';
            Editable = false;
            TableRelation = "Config. Question Area".Code where("Questionnaire Code" = field("Questionnaire Code"));
        }
        field(3; "No."; Integer)
        {
            Caption = 'No.';
            MinValue = 1;
        }
        field(4; Question; Text[250])
        {
            Caption = 'Question';
        }
        field(5; "Answer Option"; Text[250])
        {
            Caption = 'Answer Option';
            Editable = false;
        }
        field(6; Answer; Text[250])
        {
            Caption = 'Answer';

            trigger OnLookup()
            begin
                AnswerLookup();
            end;

            trigger OnValidate()
            var
                TempConfigPackageField: Record "Config. Package Field" temporary;
                ConfigValidateMgt: Codeunit "Config. Validate Management";
                ConfigPackageManagement: Codeunit "Config. Package Management";
                RecRef: RecordRef;
                FieldRef: FieldRef;
                ValidationError: Text;
            begin
                if ("Field ID" <> 0) and (Answer <> '') then begin
                    RecRef.Open("Table ID", true);
                    FieldRef := RecRef.Field("Field ID");
                    ValidationError := ConfigValidateMgt.EvaluateValue(FieldRef, Answer, false);
                    if ValidationError <> '' then
                        Error(ValidationError);

                    Answer := Format(FieldRef.Value);

                    ConfigPackageManagement.GetFieldsOrder(RecRef, '', TempConfigPackageField);
                    ValidationError := ConfigPackageManagement.ValidateFieldRefRelationAgainstCompanyData(FieldRef, TempConfigPackageField);
                    if ValidationError <> '' then
                        Error(ValidationError);
                end;
            end;
        }
        field(7; "Table ID"; Integer)
        {
            Caption = 'Table ID';
        }
        field(8; "Field ID"; Integer)
        {
            Caption = 'Field ID';

            trigger OnLookup()
            begin
                FieldLookup();
            end;
        }
        field(9; Reference; Text[250])
        {
            Caption = 'Reference';
            ExtendedDatatype = URL;
        }
        field(10; "Question Origin"; Text[30])
        {
            Caption = 'Question Origin';
        }
        field(11; "Field Name"; Text[30])
        {
            CalcFormula = lookup(Field.FieldName where(TableNo = field("Table ID"),
                                                        "No." = field("Field ID")));
            Caption = 'Field Name';
            Editable = false;
            FieldClass = FlowField;

            trigger OnLookup()
            begin
                FieldLookup();
            end;
        }
        field(12; "Field Caption"; Text[250])
        {
            CalcFormula = lookup(Field."Field Caption" where(TableNo = field("Table ID"),
                                                              "No." = field("Field ID")));
            Caption = 'Field Caption';
            Editable = false;
            FieldClass = FlowField;

            trigger OnLookup()
            begin
                FieldLookup();
            end;
        }
    }

    keys
    {
        key(Key1; "Questionnaire Code", "Question Area Code", "No.")
        {
            Clustered = true;
        }
        key(Key2; "Questionnaire Code", "Question Area Code", "Field ID")
        {
        }
        key(Key3; "Table ID", "Field ID")
        {
        }
    }

    fieldgroups
    {
    }

    var
#pragma warning disable AA0470
        QuestionAlreadyExistsErr: Label 'Question no. %1 already exists for the field %2.';
#pragma warning restore AA0470

    procedure FieldLookup()
    var
        ConfigQuestion1: Record "Config. Question";
        ConfigQuestionArea: Record "Config. Question Area";
        "Field": Record "Field";
        ConfigQuestionnaireMgt: Codeunit "Questionnaire Management";
        ConfigPackageMgt: Codeunit "Config. Package Management";
        FieldSelection: Codeunit "Field Selection";
    begin
        ConfigQuestionArea.Get("Questionnaire Code", "Question Area Code");

        if ConfigQuestionArea."Table ID" = 0 then
            exit;

        ConfigPackageMgt.SetFieldFilter(Field, ConfigQuestionArea."Table ID", 0);
        if FieldSelection.Open(Field) then begin
            "Table ID" := Field.TableNo;
            "Field ID" := Field."No.";

            ConfigQuestion1.SetRange("Questionnaire Code", "Questionnaire Code");
            ConfigQuestion1.SetRange("Question Area Code", "Question Area Code");
            ConfigQuestion1.SetRange("Table ID", "Table ID");
            ConfigQuestion1.SetRange("Field ID", "Field ID");
            if ConfigQuestion1.FindFirst() then begin
                "Field ID" := 0;
                ConfigQuestion1.CalcFields("Field Caption");
                Error(QuestionAlreadyExistsErr, ConfigQuestion1."No.", ConfigQuestion1."Field Caption");
            end;

            if Question = '' then
                Question := Field."Field Caption" + '?';
            "Answer Option" := ConfigQuestionnaireMgt.BuildAnswerOption("Table ID", "Field ID");
            CalcFields("Field Name", "Field Caption");
        end;
    end;

    local procedure AnswerLookup()
    var
        ConfigPackageData: Record "Config. Package Data";
        ConfigValidateMgt: Codeunit "Config. Validate Management";
        ConfigPackageDataPage: Page "Config. Package Data";
        RelatedTableID: Integer;
        RelatedFieldID: Integer;
    begin
        ConfigValidateMgt.GetRelationInfoByIDs("Table ID", "Field ID", RelatedTableID, RelatedFieldID);
        if RelatedTableID <> 0 then begin
            ConfigPackageData.SetRange("Table ID", RelatedTableID);
            ConfigPackageData.SetRange("Field ID", RelatedFieldID);

            Clear(ConfigPackageDataPage);
            ConfigPackageDataPage.SetTableView(ConfigPackageData);
            ConfigPackageDataPage.LookupMode := true;
            if ConfigPackageDataPage.RunModal() = ACTION::LookupOK then begin
                ConfigPackageDataPage.GetRecord(ConfigPackageData);
                Answer := CopyStr(ConfigPackageData.Value, 1, MaxStrLen(Answer));
            end;
        end;
    end;

    procedure LookupValue(): Text
    var
        RecRef: RecordRef;
        FieldRef: FieldRef;
    begin
        if "Table ID" > 0 then begin
            RecRef.Open("Table ID");
            RecRef.FindFirst();
            FieldRef := RecRef.Field("Field ID");
            exit(Format(FieldRef.Value));
        end;
    end;
}