Table 5089 Contact Profile Answer, source in 29

Source29

src/Layers/W1/BaseApp/CRM/Profiling/ContactProfileAnswer.Table.al276 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.CRM.Profiling;

using Microsoft.CRM.Contact;

table 5089 "Contact Profile Answer"
{
    Caption = 'Contact Profile Answer';
    DataClassification = CustomerContent;
    DrillDownPageID = "Profile Contacts";

    fields
    {
        field(1; "Contact No."; Code[20])
        {
            Caption = 'Contact No.';
            ToolTip = 'Specifies the number of the contact to which you have assigned this questionnaire.';
            NotBlank = true;
            TableRelation = Contact;

            trigger OnValidate()
            var
                Cont: Record Contact;
            begin
                if Cont.Get("Contact No.") then
                    "Contact Company No." := Cont."Company No."
                else
                    "Contact Company No." := '';
            end;
        }
        field(2; "Contact Company No."; Code[20])
        {
            Caption = 'Contact Company No.';
            NotBlank = true;
            TableRelation = Contact where(Type = const(Company));
        }
        field(3; "Profile Questionnaire Code"; Code[20])
        {
            Caption = 'Profile Questionnaire Code';
            NotBlank = true;
            TableRelation = "Profile Questionnaire Header";

            trigger OnValidate()
            var
                ProfileQuestnHeader: Record "Profile Questionnaire Header";
            begin
                ProfileQuestnHeader.Get("Profile Questionnaire Code");
                "Profile Questionnaire Priority" := ProfileQuestnHeader.Priority;
            end;
        }
        field(4; "Line No."; Integer)
        {
            Caption = 'Line No.';
            TableRelation = "Profile Questionnaire Line"."Line No." where("Profile Questionnaire Code" = field("Profile Questionnaire Code"),
                                                                           Type = const(Answer));

            trigger OnValidate()
            var
                ProfileQuestnLine: Record "Profile Questionnaire Line";
            begin
                ProfileQuestnLine.Get("Profile Questionnaire Code", "Line No.");
                "Answer Priority" := ProfileQuestnLine.Priority;
            end;
        }
        field(5; Answer; Text[250])
        {
            CalcFormula = lookup("Profile Questionnaire Line".Description where("Profile Questionnaire Code" = field("Profile Questionnaire Code"),
                                                                                 "Line No." = field("Line No.")));
            Caption = 'Answer';
            ToolTip = 'Specifies your contact''s answer to the question.';
            Editable = false;
            FieldClass = FlowField;
        }
        field(6; "Contact Company Name"; Text[100])
        {
            CalcFormula = lookup(Contact."Company Name" where("No." = field("Contact No.")));
            Caption = 'Contact Company Name';
            ToolTip = 'Specifies the name of the company for which the contact works, if the contact is a person.';
            Editable = false;
            FieldClass = FlowField;
        }
        field(7; "Contact Name"; Text[100])
        {
            CalcFormula = lookup(Contact.Name where("No." = field("Contact No.")));
            Caption = 'Contact Name';
            ToolTip = 'Specifies the name of the contact to which you have assigned the questionnaire.';
            Editable = false;
            FieldClass = FlowField;
        }
        field(8; "Profile Questionnaire Priority"; Enum "Profile Questionnaire Priority")
        {
            Caption = 'Profile Questionnaire Priority';
            ToolTip = 'Specifies the priority of the questionnaire that the profile answer is linked to. There are five options: Very Low, Low, Normal, High, and Very High.';
            Editable = false;
        }
        field(9; "Answer Priority"; Enum "Profile Answer Priority")
        {
            Caption = 'Answer Priority';
            ToolTip = 'Specifies the priority of the profile answer. There are five options:';
        }
        field(10; "Last Date Updated"; Date)
        {
            Caption = 'Last Date Updated';
            ToolTip = 'Specifies the date when the contact profile answer was last updated. This field shows the first date when the questions used to rate this contact has been given points.';
        }
        field(11; "Questions Answered (%)"; Decimal)
        {
            AutoFormatType = 0;
            BlankZero = true;
            Caption = 'Questions Answered (%)';
            DecimalPlaces = 0 : 0;
        }
        field(5088; "Profile Questionnaire Value"; Text[250])
        {
            Caption = 'Profile Questionnaire Value';
        }
    }

    keys
    {
        key(Key1; "Contact No.", "Profile Questionnaire Code", "Line No.")
        {
            Clustered = true;
        }
        key(Key2; "Contact No.", "Answer Priority", "Profile Questionnaire Priority")
        {
        }
        key(Key3; "Profile Questionnaire Code", "Line No.")
        {
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        Contact: Record Contact;
        ProfileQuestnLine: Record "Profile Questionnaire Line";
    begin
        ProfileQuestnLine.Get("Profile Questionnaire Code", QuestionLineNo());
        ProfileQuestnLine.TestField("Auto Contact Classification", false);

        if PartOfRating() then begin
            Delete();
            UpdateContactClassification.UpdateRating("Contact No.");
            Insert();
        end;

        Contact.TouchContact("Contact No.");
    end;

    trigger OnInsert()
    var
        Contact: Record Contact;
        ContProfileAnswer: Record "Contact Profile Answer";
        ProfileQuestnLine: Record "Profile Questionnaire Line";
        ProfileQuestnLine2: Record "Profile Questionnaire Line";
        ProfileQuestnLine3: Record "Profile Questionnaire Line";
        PerformCheck: Boolean;
    begin
        ProfileQuestnLine.Get("Profile Questionnaire Code", "Line No.");
        ProfileQuestnLine.TestField(Type, ProfileQuestnLine.Type::Answer);

        ProfileQuestnLine2.Get("Profile Questionnaire Code", QuestionLineNo());
        ProfileQuestnLine2.TestField("Auto Contact Classification", false);

        PerformCheck := not ProfileQuestnLine2."Multiple Answers";
        OnInsertOnBeforeMutipleAnswerCheck(Rec, ProfileQuestnLine, ProfileQuestnLine2, PerformCheck);
        if PerformCheck then begin
            ContProfileAnswer.Reset();
            ProfileQuestnLine3.Reset();
            ProfileQuestnLine3.SetRange("Profile Questionnaire Code", "Profile Questionnaire Code");
            ProfileQuestnLine3.SetRange(Type, ProfileQuestnLine3.Type::Question);
            ProfileQuestnLine3.SetFilter("Line No.", '>%1', ProfileQuestnLine2."Line No.");
            if ProfileQuestnLine3.FindFirst() then
                ContProfileAnswer.SetRange(
                  "Line No.", ProfileQuestnLine2."Line No.", ProfileQuestnLine3."Line No.")
            else
                ContProfileAnswer.SetFilter("Line No.", '>%1', ProfileQuestnLine2."Line No.");
            ContProfileAnswer.SetRange("Contact No.", "Contact No.");
            ContProfileAnswer.SetRange("Profile Questionnaire Code", "Profile Questionnaire Code");
            if not ContProfileAnswer.IsEmpty() then
                Error(Text000, ProfileQuestnLine2.FieldCaption("Multiple Answers"));
        end;

        if PartOfRating() then begin
            Insert();
            UpdateContactClassification.UpdateRating("Contact No.");
            Delete();
        end;

        Contact.TouchContact("Contact No.");
    end;

    trigger OnModify()
    var
        Contact: Record Contact;
    begin
        Contact.TouchContact("Contact No.");
    end;

    trigger OnRename()
    var
        Contact: Record Contact;
    begin
        if xRec."Contact No." = "Contact No." then
            Contact.TouchContact("Contact No.")
        else begin
            Contact.TouchContact("Contact No.");
            Contact.TouchContact(xRec."Contact No.");
        end;
    end;

    var
        UpdateContactClassification: Report "Update Contact Classification";

#pragma warning disable AA0074
#pragma warning disable AA0470
        Text000: Label 'This Question does not allow %1.';
#pragma warning restore AA0470
#pragma warning restore AA0074

    procedure Question(): Text[250]
    var
        ProfileQuestnLine: Record "Profile Questionnaire Line";
    begin
        if ProfileQuestnLine.Get("Profile Questionnaire Code", QuestionLineNo()) then
            exit(ProfileQuestnLine.Description)
    end;

    local procedure QuestionLineNo(): Integer
    var
        ProfileQuestnLine: Record "Profile Questionnaire Line";
    begin
        ProfileQuestnLine.Reset();
        ProfileQuestnLine.SetRange("Profile Questionnaire Code", Rec."Profile Questionnaire Code");
        ProfileQuestnLine.SetFilter("Line No.", '<%1', Rec."Line No.");
        ProfileQuestnLine.SetRange(Type, ProfileQuestnLine.Type::Question);
        if ProfileQuestnLine.FindLast() then
            exit(ProfileQuestnLine."Line No.")
    end;

    local procedure PartOfRating(): Boolean
    var
        Rating: Record Rating;
        ProfileQuestnLine: Record "Profile Questionnaire Line";
        ProfileQuestnLine2: Record "Profile Questionnaire Line";
    begin
        Rating.SetCurrentKey("Rating Profile Quest. Code", "Rating Profile Quest. Line No.");
        Rating.SetRange("Rating Profile Quest. Code", "Profile Questionnaire Code");

        ProfileQuestnLine.Get("Profile Questionnaire Code", "Line No.");
        ProfileQuestnLine.Get("Profile Questionnaire Code", ProfileQuestnLine.FindQuestionLine());

        ProfileQuestnLine2 := ProfileQuestnLine;
        ProfileQuestnLine2.SetRange(Type, ProfileQuestnLine2.Type::Question);
        ProfileQuestnLine2.SetRange("Profile Questionnaire Code", ProfileQuestnLine2."Profile Questionnaire Code");
        if ProfileQuestnLine2.Next() <> 0 then
            Rating.SetRange("Rating Profile Quest. Line No.", ProfileQuestnLine."Line No.", ProfileQuestnLine2."Line No.")
        else
            Rating.SetFilter("Rating Profile Quest. Line No.", '%1..', ProfileQuestnLine."Line No.");

        exit(not Rating.IsEmpty());
    end;

    [IntegrationEvent(false, false)]
    local procedure OnInsertOnBeforeMutipleAnswerCheck(var ContactProfileAnswer: Record "Contact Profile Answer"; var ProfileQuestionnaireLine: Record "Profile Questionnaire Line"; var ProfileQuestionnaireLine2: Record "Profile Questionnaire Line"; var PerformCheck: Boolean);
    begin
    end;
}