Report 39 Copy Financial Report
- App
- Base Application
- Namespace
- Microsoft.Finance.FinancialReports
- Versions
- 21-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Finance/FinancialReports/CopyFinancialReport.Report.al173 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.Finance.FinancialReports;
using System.Telemetry;
/// <summary>
/// Creates copy of existing financial report with same configuration and filters.
/// Enables duplication of complete financial report setup for new reporting scenarios.
/// </summary>
report 39 "Copy Financial Report"
{
Caption = 'Copy Financial Report';
ProcessingOnly = true;
dataset
{
dataitem(SourceFinancialReport; "Financial Report")
{
DataItemTableView = sorting(Name) order(ascending);
trigger OnAfterGetRecord()
var
FinancialReport: Record "Financial Report";
begin
FinancialReport.Get(CopySourceFinancialReportName);
CreateNewFinancialReport(NewFinancialReportName, FinancialReport);
end;
trigger OnPreDataItem()
begin
AssertNewFinancialReportNotEmpty();
AssertNewFinancialReportNotExisting();
AssertSourceFinancialReportNotEmpty();
AssertSourceFinancialReportExists(SourceFinancialReport);
end;
}
}
requestpage
{
layout
{
area(content)
{
group(Options)
{
Caption = 'Options';
field(NewFinancialReportNameField; NewFinancialReportName)
{
ApplicationArea = Basic, Suite;
Caption = 'New Financial Report Name';
NotBlank = true;
ToolTip = 'Specifies the name of the new financial report after copying.';
}
field(SourceAccountScheduleName; CopySourceFinancialReportName)
{
ApplicationArea = Basic, Suite;
Caption = 'Source Financial Report Name';
Enabled = false;
NotBlank = true;
ToolTip = 'Specifies the name of the existing financial report to copy from.';
}
}
}
}
actions
{
}
trigger OnOpenPage()
begin
AssertSourceFinancialReportOnlyOne(SourceFinancialReport);
if SourceFinancialReport.FindFirst() then
CopySourceFinancialReportName := SourceFinancialReport.Name;
end;
}
labels
{
}
trigger OnPostReport()
begin
Message(CopySuccessMsg);
end;
var
NewFinancialReportName: Code[10];
CopySuccessMsg: Label 'The new financial report has been created successfully.';
MissingSourceErr: Label 'Could not find a financial report with the specified name to copy from.';
NewNameExistsErr: Label 'The new financial report already exists.';
NewNameMissingErr: Label 'You must specify a name for the new financial report.';
CopySourceFinancialReportName: Code[10];
CopySourceNameMissingErr: Label 'You must specify a valid name for the source financial report to copy from.';
MultipleSourcesErr: Label 'You can only copy one financial report at a time.';
CopyEventTxt: Label 'Financial Report Definition copied: %1', Comment = '%1 = financial report name', Locked = true;
local procedure AssertNewFinancialReportNotEmpty()
begin
if IsEmptyName(NewFinancialReportName) then
Error(NewNameMissingErr);
end;
local procedure AssertNewFinancialReportNotExisting()
var
FinancialReport: Record "Financial Report";
begin
if FinancialReport.Get(NewFinancialReportName) then
Error(NewNameExistsErr);
end;
local procedure CreateNewFinancialReport(NewName: Code[10]; FinancialReportName: Record "Financial Report")
var
FinancialReport: Record "Financial Report";
begin
if FinancialReport.Get(NewName) then
exit;
FinancialReport.Init();
FinancialReport.TransferFields(FinancialReportName);
FinancialReport.Name := NewName;
FinancialReport.Insert();
LogUsageTelemetry(FinancialReportName.Name, NewName);
end;
local procedure IsEmptyName(ScheduleName: Code[10]) IsEmpty: Boolean
begin
IsEmpty := ScheduleName = '';
end;
local procedure AssertSourceFinancialReportNotEmpty()
begin
if IsEmptyName(CopySourceFinancialReportName) then
Error(CopySourceNameMissingErr);
end;
local procedure AssertSourceFinancialReportExists(FinancialReportName: Record "Financial Report")
begin
if not FinancialReportName.Get(CopySourceFinancialReportName) then
Error(MissingSourceErr);
end;
local procedure AssertSourceFinancialReportOnlyOne(var FinancialReportName: Record "Financial Report")
var
FinancialReport: Record "Financial Report";
begin
FinancialReport.CopyFilters(FinancialReportName);
if FinancialReport.Count > 1 then
Error(MultipleSourcesErr);
end;
local procedure LogUsageTelemetry(SourceCode: Code[10]; NewCode: Code[10])
var
FeatureTelemetry: Codeunit "Feature Telemetry";
TelemetryDimensions: Dictionary of [Text, Text];
begin
TelemetryDimensions.Add('ReportId', Format(CurrReport.ObjectId(false), 0, 9));
TelemetryDimensions.Add('ReportName', CurrReport.ObjectId(true));
TelemetryDimensions.Add('UseRequestPage', Format(CurrReport.UseRequestPage()));
TelemetryDimensions.Add('SourceReportDefinitionCode', SourceCode);
TelemetryDimensions.Add('NewReportDefinitionCode', NewCode);
FeatureTelemetry.LogUsage('0000OKX', 'Financial Report', StrSubstNo(CopyEventTxt, SourceCode), TelemetryDimensions);
end;
}