Page 1560 Report Settings

App
Base Application
Namespace
System.Environment.Configuration
Versions
17-28
Source table
2000000196

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/ReportSettings.Page.al260 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 System.Environment.Configuration;

using Microsoft.Foundation.Reporting;
using System.Reflection;
using System.Security.AccessControl;

page 1560 "Report Settings"
{
    // RENAME does not work when primary key contains an option field, in this case "Object Type".
    // Therefore DELETE / INSERT is needed as "User Name" is part of the primary key.

    AccessByPermission = TableData "Object Options" = IMD;
    ApplicationArea = Basic, Suite;
    Caption = 'Report Settings';
    InsertAllowed = false;
    PageType = List;
    ShowFilter = false;
    SourceTable = "Object Options";
    UsageCategory = Administration;

    layout
    {
        area(content)
        {
            repeater(Group)
            {
                field(Name; Rec."Parameter Name")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Name';
                    ToolTip = 'Specifies the name of the settings entry.';
                }
                field("Report ID"; Rec."Object ID")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Report ID';
                    MinValue = 1;
                    TableRelation = if ("Object Type" = const(Report)) "Report Metadata".ID;
                    ToolTip = 'Specifies the ID of the report that uses the settings.';

                    trigger OnValidate()
                    begin
                        ValidateObjectID();
                        LookupObjectName(Rec."Object ID", Rec."Object Type");
                    end;
                }
                field("Report Name"; ReportName)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Report Name';
                    Editable = false;
                    ToolTip = 'Specifies the name of the report that uses the settings.';
                }
                field("User Name"; Rec."User Name")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Assigned to';
                    Enabled = not LastUsed;
                    TableRelation = User."User Name";
                    ToolTip = 'Specifies who can use the report settings. If the field is blank, the settings are available to all users.';

                    trigger OnValidate()
                    begin
                        if Rec."User Name" <> '' then
                            Rec."Public Visible" := false
                        else
                            Rec."Public Visible" := true;
                    end;
                }
                field("Created By"; Rec."Created By")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Created by';
                    Editable = false;
                    TableRelation = User."User Name";
                    ToolTip = 'Specifies the name of the user who created the settings.';
                }
                field("Public Visible"; Rec."Public Visible")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Shared with all users';
                    Enabled = not LastUsed;
                    ToolTip = 'Specifies whether the report settings are available to all users or only the user assigned to the settings.';

                    trigger OnValidate()
                    begin
                        if Rec."Public Visible" then
                            Rec."User Name" := ''
                        else
                            Rec."User Name" := Rec."Created By";
                    end;
                }
                field("Company Name"; Rec."Company Name")
                {
                    ApplicationArea = Basic, Suite;
                    ToolTip = 'Specifies the company to which the settings belong.';
                }
            }
        }
    }

    actions
    {
        area(processing)
        {
            action(NewSettings)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'New';
                Image = New;
                ToolTip = 'Create a new report settings entry that sets filters and options for a specific report. ';

                trigger OnAction()
                var
                    ObjectOptions: Record "Object Options";
                    CustomLayoutReporting: Codeunit "Custom Layout Reporting";
                    PickReport: Page "Pick Report";
                    OptionDataTxt: Text;
                begin
                    PickReport.SetReportObjectId(Rec."Object ID");
                    if PickReport.RunModal() <> ACTION::OK then
                        exit;

                    PickReport.GetObjectOptions(ObjectOptions);
                    OptionDataTxt := CustomLayoutReporting.GetReportRequestPageParameters(ObjectOptions."Object ID");
                    OptionDataTxt := REPORT.RunRequestPage(ObjectOptions."Object ID", OptionDataTxt);
                    if OptionDataTxt <> '' then begin
                        UpdateOptionData(ObjectOptions, OptionDataTxt);
                        ObjectOptions.Insert(true);
                        Rec := ObjectOptions;
                    end;
                end;
            }
            action(CopySettings)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Copy';
                Image = Copy;
                ToolTip = 'Make a copy the selected report settings.';

                trigger OnAction()
                var
                    ObjectOptions: Record "Object Options";
                begin
                    if Rec."Option Data".HasValue() then
                        Rec.CalcFields("Option Data");

                    ObjectOptions.TransferFields(Rec);
                    ObjectOptions."Parameter Name" := CopyStr(StrSubstNo(CopyTxt, Rec."Parameter Name"), 1, MaxStrLen(ObjectOptions."Parameter Name"));
                    ObjectOptions.Insert(true);
                end;
            }
            action(EditSettings)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Edit';
                Enabled = not LastUsed;
                Image = Edit;
                ToolTip = 'Change the options and filters that are defined for the selected report settings.';

                trigger OnAction()
                var
                    OptionDataTxt: Text;
                begin
                    OptionDataTxt := REPORT.RunRequestPage(Rec."Object ID", GetOptionData());
                    if OptionDataTxt <> '' then begin
                        UpdateOptionData(Rec, OptionDataTxt);
                        Rec.Modify(true);
                    end;
                end;
            }
        }
        area(Promoted)
        {
            group(Category_Report)
            {
                Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
            }
            group(Category_Category4)
            {
                Caption = 'Manage', Comment = 'Generated from the PromotedActionCategories property index 3.';

                actionref(NewSettings_Promoted; NewSettings)
                {
                }
                actionref(CopySettings_Promoted; CopySettings)
                {
                }
                actionref(EditSettings_Promoted; EditSettings)
                {
                }
            }
        }
    }

    trigger OnAfterGetCurrRecord()
    begin
        LastUsed := Rec."Parameter Name" = LastUsedTxt;
    end;

    trigger OnAfterGetRecord()
    begin
        LookupObjectName(Rec."Object ID", Rec."Object Type");
    end;

    var
        CopyTxt: Label 'Copy of %1', Comment = '%1 is the Parameter Name field from the Object Options record';
        LastUsedTxt: Label 'Last used options and filters', Comment = 'Translation must match RequestPageLatestSavedSettingsName from Lang.resx';
        LastUsed: Boolean;
        ObjectIdValidationErr: Label 'The specified object ID is not valid; the object must exist in the application.';
        ReportName: Text;
        EmptyOptionDataErr: Label 'Option Data is empty.';

    local procedure ValidateObjectID()
    var
        AllObj: Record AllObj;
    begin
        if not AllObj.Get(Rec."Object Type", Rec."Object ID") then
            Error(ObjectIdValidationErr);
    end;

    local procedure LookupObjectName(ObjectID: Integer; ObjectType: Option)
    var
        AllObjWithCaption: Record AllObjWithCaption;
    begin
        if AllObjWithCaption.Get(ObjectType, ObjectID) then
            ReportName := AllObjWithCaption."Object Caption"
        else
            ReportName := '';
    end;

    local procedure UpdateOptionData(var ObjectOptions: Record "Object Options"; OptionDataTxt: Text)
    var
        OutStream: OutStream;
    begin
        if OptionDataTxt = '' then
            Error(EmptyOptionDataErr);

        Clear(ObjectOptions."Option Data");
        ObjectOptions."Option Data".CreateOutStream(OutStream, TEXTENCODING::UTF8);
        OutStream.WriteText(OptionDataTxt);
    end;

    local procedure GetOptionData() Result: Text
    var
        InStream: InStream;
    begin
        if Rec."Option Data".HasValue() then begin
            Rec.CalcFields("Option Data");
            Rec."Option Data".CreateInStream(InStream, TEXTENCODING::UTF8);
            InStream.ReadText(Result);
        end;
    end;
}