Page 1523 Workflow Response Options, source in 29

Source29

src/Layers/W1/BaseApp/System/Workflow/WorkflowResponseOptions.Page.al493 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Automation;

using System.Reflection;

page 1523 "Workflow Response Options"
{
    Caption = 'Workflow Response Options';
    PageType = CardPart;
    ShowFilter = false;
    SourceTable = "Workflow Step Argument";

    layout
    {
        area(content)
        {
            group(Control5)
            {
                ShowCaption = false;
                group(Control14)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 0';
                    field(NoArguments; NoArguments)
                    {
                        ApplicationArea = Suite;
                        Editable = false;
                        ShowCaption = false;
                    }
                }
                group(Control7)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 1';
                    field("General Journal Template Name"; Rec."General Journal Template Name")
                    {
                        ApplicationArea = Suite;
                        ShowMandatory = true;
                        ToolTip = 'Specifies the name of the general journal template that is used for this workflow step argument.';

                        trigger OnValidate()
                        begin
                            CurrPage.Update(true)
                        end;
                    }
                    field("General Journal Batch Name"; Rec."General Journal Batch Name")
                    {
                        ApplicationArea = Suite;
                        ShowMandatory = true;
                        ToolTip = 'Specifies the name of the general journal batch that is used for this workflow step argument.';

                        trigger OnValidate()
                        begin
                            CurrPage.Update(true)
                        end;
                    }
                }
                group(Control8)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 2';
                    field(NotifySender2; Rec."Notify Sender")
                    {
                        ApplicationArea = Suite;
                        Caption = 'Notify Sender';
                        ToolTip = 'Specifies if the approval sender will be notified in connection with this workflow step argument.';

                        trigger OnValidate()
                        begin
                            CurrPage.Update(true)
                        end;
                    }
                    field("Link Target Page Approvals"; Rec."Link Target Page")
                    {
                        ApplicationArea = Suite;
                        Caption = 'Link Target Page';
                        ToolTip = 'Specifies a specific page that opens when a user chooses the link in a notification. If you do not fill this field, the page showing the involved record will open. The page must have the same source table as the record involved.';
                    }
                    field("Custom Link Approvals"; Rec."Custom Link")
                    {
                        ApplicationArea = Suite;
                        Caption = 'Custom Link';
                        ToolTip = 'Specifies a link that is inserted in the notification to link to a custom location.';
                    }
                }
                group(Control23)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 3';
                    field(NotifySender3; Rec."Notify Sender")
                    {
                        ApplicationArea = Suite;
                        Caption = 'Notify Sender';
                        ToolTip = 'Specifies if the approval sender will be notified in connection with this workflow step argument.';

                        trigger OnValidate()
                        begin
                            CurrPage.Update(true)
                        end;
                    }
                    field("Notification User ID"; Rec."Notification User ID")
                    {
                        ApplicationArea = Suite;
                        Caption = 'Recipient User ID';
                        Editable = not Rec."Notify Sender";
                        ShowMandatory = not Rec."Notify Sender";
                        ToolTip = 'Specifies the ID of the user that will be notified in connection with this workflow step argument.';

                        trigger OnValidate()
                        begin
                            CurrPage.Update(true)
                        end;
                    }
                    field("Notification Entry Type"; Rec."Notification Entry Type")
                    {
                        ApplicationArea = Suite;
                        Caption = 'Notification Entry Type';
                        ToolTip = 'Specifies the type of the notification.';
                    }
                    field("Link Target Page"; Rec."Link Target Page")
                    {
                        ApplicationArea = Suite;
                        Caption = 'Link Target Page';
                        ToolTip = 'Specifies a specific page that opens when a user chooses the link in a notification. If you do not fill this field, the page showing the involved record will open. The page must have the same source table as the record involved.';
                    }
                    field("Custom Link"; Rec."Custom Link")
                    {
                        ApplicationArea = Suite;
                        ToolTip = 'Specifies a link that is inserted in the notification to link to a custom location.';
                    }
                }
                group(Control6)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 4';
                    field(MessageField; Rec.Message)
                    {
                        ApplicationArea = Suite;
                        Caption = 'Message';
                        ToolTip = 'Specifies the message that will be shown as a response.';

                        trigger OnValidate()
                        begin
                            CurrPage.Update(true)
                        end;
                    }
                }
                group(Control10)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 5';
                    field("Show Confirmation Message"; Rec."Show Confirmation Message")
                    {
                        ApplicationArea = Suite;
                        ToolTip = 'Specifies that a confirmation message is shown to users after they request an approval.';
                    }
                    field("Due Date Formula"; Rec."Due Date Formula")
                    {
                        ApplicationArea = Suite;
                        ToolTip = 'Specifies in how many days the approval request must be resolved from the date when it was sent.';
                    }
                    field("Delegate After"; Rec."Delegate After")
                    {
                        ApplicationArea = Suite;
                        ToolTip = 'Specifies if and when an approval request will automatically be delegated to the relevant substitute. You can select to automatically delegate one, two, or five days after the date when the approval was requested.';
                    }
                    field("Approver Type"; Rec."Approver Type")
                    {
                        ApplicationArea = Suite;
                        ToolTip = 'Specifies who is notified first about approval requests.';

                        trigger OnValidate()
                        begin
                            SetVisibilityOptions();
                            CurrPage.Update(true)
                        end;
                    }
                    group(Control4)
                    {
                        ShowCaption = false;
                        Visible = ShowApprovalLimitType;
                        field("Approver Limit Type"; Rec."Approver Limit Type")
                        {
                            ApplicationArea = Suite;
                            ToolTip = 'Specifies how approvers'' approval limits affect when approval request entries are created for them. A qualified approver is an approver whose approval limit is above the value on the approval request.';

                            trigger OnValidate()
                            begin
                                CurrPage.Update(true)
                            end;
                        }
                    }
                    group(Control18)
                    {
                        ShowCaption = false;
                        Visible = not ShowApprovalLimitType;
                        field("Workflow User Group Code"; Rec."Workflow User Group Code")
                        {
                            ApplicationArea = Suite;
                            ShowMandatory = true;
                            ToolTip = 'Specifies the workflow user group that is used in connection with this workflow step argument.';

                            trigger OnValidate()
                            begin
                                CurrPage.Update(true)
                            end;
                        }
                    }
                    group(Control34)
                    {
                        ShowCaption = false;
                        Visible = ShowApproverUserId;
                        field(ApproverId; Rec."Approver User ID")
                        {
                            ApplicationArea = Suite;
                            Caption = 'Approver ID';
                            ShowMandatory = true;
                            ToolTip = 'Specifies the approver.';

                            trigger OnValidate()
                            begin
                                CurrPage.Update(true)
                            end;
                        }
                    }
                    field(ApprovalUserSetupLabel; ApprovalUserSetupLabel)
                    {
                        ApplicationArea = Suite;
                        Editable = false;
                        ShowCaption = false;

                        trigger OnDrillDown()
                        begin
                            PAGE.RunModal(PAGE::"Approval User Setup");
                        end;
                    }
                }
                group(Control27)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 6';
                    field(TableFieldRevert; TableFieldCaption)
                    {
                        ApplicationArea = Suite;
                        Caption = 'Field';
                        ShowMandatory = true;
                        ToolTip = 'Specifies the field in which a change can occur that the workflow monitors.';

                        trigger OnLookup(var Text: Text): Boolean
                        begin
                            GetEventTable();
                            Text := LookupFieldCaption(Format(Rec."Table No."), '');
                            exit(Text <> '')
                        end;

                        trigger OnValidate()
                        begin
                            ValidateFieldCaption();
                        end;
                    }
                }
                group(Control29)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 7';
                    field(ApplyAllValues; ApplyAllValues)
                    {
                        ApplicationArea = Suite;
                        Caption = 'Apply All New Values';
                        ToolTip = 'Specifies that all the new, approved values will be applied to the record.';

                        trigger OnValidate()
                        begin
                            if ApplyAllValues then begin
                                Rec."Table No." := 0;
                                Rec."Field No." := 0;
                                CurrPage.Update(true);
                            end;
                        end;
                    }
                    group(Control32)
                    {
                        ShowCaption = false;
                        Visible = not ApplyAllValues;
                        field(TableFieldApply; TableFieldCaption)
                        {
                            ApplicationArea = Suite;
                            Caption = 'Field';
                            ShowMandatory = true;
                            ToolTip = 'Specifies the field in which a change can occur that the workflow monitors.';

                            trigger OnLookup(var Text: Text): Boolean
                            begin
                                Text := LookupFieldCaptionForApplyNewValues();
                                exit(Text <> '')
                            end;

                            trigger OnValidate()
                            begin
                                ValidateFieldCaption();
                            end;
                        }
                    }
                }
                group(Control35)
                {
                    ShowCaption = false;
                    Visible = Rec."Response Option Group" = 'GROUP 8';
                    field("Response Type"; Rec."Response Type")
                    {
                        ApplicationArea = Suite;
                        ToolTip = 'Specifies the response type for the workflow response. You cannot set options for this.';

                        trigger OnValidate()
                        begin
                            SetVisibilityOptions();
                            CurrPage.Update(true)
                        end;
                    }
                    group(Control37)
                    {
                        ShowCaption = false;
                        Visible = ShowResponseUserID;
                        field(ResponseUserId; Rec."Response User ID")
                        {
                            ApplicationArea = Suite;
                            Caption = 'Response User ID';
                            ShowMandatory = true;
                            ToolTip = 'Specifies the user necessary for an acceptable response.';

                            trigger OnValidate()
                            begin
                                CurrPage.Update(true);
                            end;
                        }
                    }
                }
            }
        }
    }

    actions
    {
    }

    trigger OnAfterGetCurrRecord()
    begin
        SetVisibilityOptions();
        GetEventTable();
        Rec.CalcFields("Field Caption");
        TableFieldCaption := Rec."Field Caption";
        ApplyAllValues := (Rec."Field No." = 0);
    end;

    trigger OnAfterGetRecord()
    begin
        SetVisibilityOptions();
    end;

    trigger OnFindRecord(Which: Text): Boolean
    begin
        exit(Rec.Find(Which));
    end;

    trigger OnOpenPage()
    var
        ApprovalUserSetup: Page "Approval User Setup";
    begin
        NoArguments := NoArgumentsTxt;
        ApprovalUserSetupLabel := StrSubstNo(OpenPageTxt, ApprovalUserSetup.Caption);
        Rec.HideExternalUsers();
    end;

    var
        NoArguments: Text;
        NoArgumentsTxt: Label 'You cannot set options for this workflow response.';
        ShowApprovalLimitType: Boolean;
        ShowApproverUserId: Boolean;
        ApprovalUserSetupLabel: Text;
        OpenPageTxt: Label 'Open %1', Comment = '%1 is the page that will be opened when clicking the control';
        TableFieldCaption: Text;
        ApplyAllValues: Boolean;
        ShowResponseUserID: Boolean;

    local procedure GetEventTable()
    var
        WorkflowStep: Record "Workflow Step";
        WorkflowStepEvent: Record "Workflow Step";
        WorkflowEvent: Record "Workflow Event";
    begin
        if Rec."Table No." <> 0 then
            exit;
        WorkflowStep.SetRange(Argument, Rec.ID);
        if WorkflowStep.FindFirst() then
            if WorkflowStep.HasParentEvent(WorkflowStepEvent) then begin
                WorkflowEvent.Get(WorkflowStepEvent."Function Name");
                Rec."Table No." := WorkflowEvent."Table ID";
            end;
    end;

    local procedure SetVisibilityOptions()
    begin
        Rec.CalcFields("Response Option Group");
        ShowApprovalLimitType := Rec."Approver Type" <> Rec."Approver Type"::"Workflow User Group";
        ShowApproverUserId := ShowApprovalLimitType and (Rec."Approver Limit Type" = Rec."Approver Limit Type"::"Specific Approver");
        ShowResponseUserID := Rec."Response Type" = Rec."Response Type"::"User ID";
        OnAfterSetVisibilityOptions(Rec, ShowApprovalLimitType, ShowApproverUserId, ShowResponseUserID);
    end;

    local procedure LookupFieldCaption(TableNoFilter: Text; FieldNoFilter: Text): Text
    var
        "Field": Record "Field";
        FieldSelection: Codeunit "Field Selection";
    begin
        Field.FilterGroup(2);
        Field.SetFilter(Type, StrSubstNo('%1|%2|%3|%4|%5|%6|%7|%8|%9|%10|%11|%12',
            Field.Type::Boolean,
            Field.Type::Text,
            Field.Type::Code,
            Field.Type::Decimal,
            Field.Type::Integer,
            Field.Type::BigInteger,
            Field.Type::Date,
            Field.Type::Time,
            Field.Type::DateTime,
            Field.Type::DateFormula,
            Field.Type::Option,
            Field.Type::Duration));
        Field.SetRange(Class, Field.Class::Normal);

        Field.SetFilter(TableNo, TableNoFilter);
        Field.SetFilter("No.", FieldNoFilter);
        if FieldSelection.Open(Field) then begin
            Rec."Table No." := Field.TableNo;
            exit(Field."Field Caption");
        end;
        exit('');
    end;

    local procedure LookupFieldCaptionForApplyNewValues(): Text
    var
        WorkflowStepApply: Record "Workflow Step";
        WorkflowStepRevert: Record "Workflow Step";
        WorkflowStepArgument: Record "Workflow Step Argument";
        WorkflowResponseHandling: Codeunit "Workflow Response Handling";
        FilterForField: Text;
        FilterForTable: Text;
        Separator: Text[1];
        AddSeparator: Boolean;
    begin
        WorkflowStepApply.SetRange(Argument, Rec.ID);
        if WorkflowStepApply.FindFirst() then begin
            WorkflowStepRevert.SetRange("Workflow Code", WorkflowStepApply."Workflow Code");
            WorkflowStepRevert.SetRange("Function Name", WorkflowResponseHandling.RevertValueForFieldCode());

            if WorkflowStepRevert.FindSet() then
                repeat
                    WorkflowStepArgument.Get(WorkflowStepRevert.Argument);
                    if WorkflowStepArgument."Field No." <> 0 then begin
                        if AddSeparator then
                            Separator := '|';
                        AddSeparator := true;
                        FilterForTable += Separator + Format(WorkflowStepArgument."Table No.");
                        FilterForField += Separator + Format(WorkflowStepArgument."Field No.");
                    end;
                until WorkflowStepRevert.Next() = 0;

            exit(LookupFieldCaption(FilterForTable, FilterForField));
        end;
        exit('');
    end;

    local procedure ValidateFieldCaption()
    var
        "Field": Record "Field";
    begin
        if TableFieldCaption <> '' then begin
            Field.SetRange(TableNo, Rec."Table No.");
            Field.SetRange("Field Caption", TableFieldCaption);
            Field.FindFirst();
            Rec."Field No." := Field."No.";
        end else
            Rec."Field No." := 0;

        CurrPage.Update(true);
    end;

    [IntegrationEvent(true, false)]
    local procedure OnAfterSetVisibilityOptions(var WorkflowStepArgument: Record "Workflow Step Argument"; var ShowApprovalLimitType: Boolean; var ShowApproverUserId: Boolean; var ShowResponseUserID: Boolean)
    begin
    end;
}