Table 333 Column Layout Name
- App
- Base Application
- Namespace
- Microsoft.Finance.FinancialReports
- Versions
- 17-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Finance/FinancialReports/ColumnLayoutName.Table.al264 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 Microsoft.Finance.Analysis;
using Microsoft.Finance.GeneralLedger.Setup;
using System.Environment;
using System.IO;
using System.Telemetry;
/// <summary>
/// Defines named column layout configurations for account schedule financial reporting.
/// Contains metadata and analysis view associations for column layout definitions used in financial reports.
/// </summary>
/// <remarks>
/// Key relationships: Column Layout lines, Analysis Views for dimensional reporting.
/// Extensible via table extensions for additional column layout metadata and configuration options.
/// Supports XML import/export functionality for column layout template exchange.
/// </remarks>
table 333 "Column Layout Name"
{
Caption = 'Financial Report Column Definition';
DataCaptionFields = Name, Description;
LookupPageID = "Column Layout Names";
DataClassification = CustomerContent;
fields
{
/// <summary>
/// Unique identifier for the column layout definition used in account schedule reporting.
/// </summary>
field(1; Name; Code[10])
{
Caption = 'Name';
NotBlank = true;
ToolTip = 'Specifies the unique name (code) of the financial report column definition. You can use up to 10 characters.';
}
/// <summary>
/// Descriptive text explaining the purpose and content of the column layout definition.
/// </summary>
field(2; Description; Text[80])
{
Caption = 'Description';
ToolTip = 'Specifies a description of the financial report columns definition. The description is not shown on the final report but is used to provide more context when using the definition.';
}
/// <summary>
/// Analysis view name for dimensional analysis and extended reporting capabilities.
/// </summary>
field(4; "Analysis View Name"; Code[10])
{
Caption = 'Analysis View Name';
TableRelation = "Analysis View";
ToolTip = 'Specifies the name of the analysis view you want the column definition to use. This field is optional.';
}
/// <summary>
/// Extended internal description for additional context and documentation of column layout usage.
/// </summary>
#if not CLEAN28
#pragma warning disable AS0086
#endif
field(5; "Internal Description"; Text[500])
#if not CLEAN28
#pragma warning restore AS0086
#endif
{
Caption = 'Internal Description';
ToolTip = 'Specifies the internal description of the column definition. The internal description is not shown on the final report but is used to provide more context when using the definition.';
}
field(6; Status; Code[10])
{
Caption = 'Status';
DataClassification = CustomerContent;
TableRelation = "Financial Report Status";
ToolTip = 'Specifies the status code for the column definition. The status code helps you organize the lifecycle of your column definitions.';
}
field(7; "Status Blocked"; Boolean)
{
CalcFormula = exist("Financial Report Status" where("Code" = field(Status), "Blocked" = const(true)));
Caption = 'Status Blocked';
Editable = false;
FieldClass = FlowField;
ToolTip = 'Specifies the status code is a blocked status.';
}
}
keys
{
key(Key1; Name)
{
Clustered = true;
}
}
fieldgroups
{
fieldgroup(DropDown; Name, Description, "Analysis View Name")
{
}
}
trigger OnRename()
var
GLSetup: Record "General Ledger Setup";
FinancialReportUserFilters: Record "Financial Report User Filters";
GLSetupModified: Boolean;
begin
if GLSetup.Get() then begin
if GLSetup."Fin. Rep. Bal. Sheet Column" = xRec.Name then begin
GLSetup."Fin. Rep. Bal. Sheet Column" := Rec.Name;
GLSetupModified := true;
end;
if GLSetup."Fin. Rep. Net Change Column" = xRec.Name then begin
GLSetup."Fin. Rep. Net Change Column" := Rec.Name;
GLSetupModified := true;
end;
if GLSetupModified then
GLSetup.Modify();
end;
FinancialReportUserFilters.SetRange("Column Definition", xRec.Name);
FinancialReportUserFilters.ModifyAll("Column Definition", Rec.Name);
end;
trigger OnDelete()
begin
ColumnLayout.SetRange("Column Layout Name", Name);
ColumnLayout.DeleteAll();
end;
var
ColumnLayout: Record "Column Layout";
PackageImportErr: Label 'The imported package is not valid.';
TelemetryEventTxt: Label 'Financial Report Column Definition %1: %2', Comment = '%1 = event type, %2 = column definition', Locked = true;
/// <summary>
/// Exports column layout definition and related columns to XML format for template sharing and backup.
/// Creates configuration package containing column layout name and all associated column layout lines.
/// </summary>
procedure XMLExchangeExport()
var
ConfigPackage: Record "Config. Package";
ConfigXMLExchange: Codeunit "Config. XML Exchange";
ConfigPackageCode: Code[20];
begin
ConfigPackageCode := AddColumnDefinitionToPackage(Rec.Name);
ConfigPackage.Get(ConfigPackageCode);
ConfigXMLExchange.ExportPackage(ConfigPackage);
LogImportExportTelemetry(Name, 'exported');
end;
/// <summary>
/// Imports column layout definition from XML file and applies configuration to create new column layouts.
/// Validates imported package structure and creates column layout name with associated column lines.
/// </summary>
procedure XMLExchangeImport()
var
ConfigXMLExchange: Codeunit "Config. XML Exchange";
PackageCode: Code[20];
begin
if ConfigXMLExchange.ImportPackageXMLFromClient() then begin
PackageCode := ConfigXMLExchange.GetImportedPackageCode();
ApplyPackage(PackageCode);
end;
end;
local procedure ApplyPackage(PackageCode: Code[20])
var
ConfigPackage: Record "Config. Package";
ConfigPackageTable: Record "Config. Package Table";
ConfigPackageMgt: Codeunit "Config. Package Management";
NewName: Code[10];
begin
if not ConfigPackage.Get(PackageCode) then
Error(PackageImportErr);
NewName := GetNewColumnDefinitionName(PackageCode);
if NewName = '' then
Error(PackageImportErr);
ConfigPackageTable.SetRange("Package Code", PackageCode);
ConfigPackageMgt.ApplyPackage(ConfigPackage, ConfigPackageTable, false);
LogImportExportTelemetry(NewName, 'imported');
end;
local procedure GetNewColumnDefinitionName(PackageCode: Code[20]): Code[10]
var
ColumnLayoutName: Record "Column Layout Name";
FinancialReportMgt: Codeunit "Financial Report Mgt.";
NewFinancialReport: Page "New Financial Report";
ColumnDefinitionNameFromPackage: Code[10];
NewName: Code[10];
begin
ColumnDefinitionNameFromPackage := GetColumnDefinitionNameFromImportedPackage(PackageCode);
if ColumnDefinitionNameFromPackage = '' then
exit('');
if not ColumnLayoutName.Get(ColumnDefinitionNameFromPackage) then
exit(ColumnDefinitionNameFromPackage);
NewFinancialReport.Set('', '', ColumnDefinitionNameFromPackage);
if NewFinancialReport.RunModal() = Action::OK then begin
NewName := NewFinancialReport.GetColumnLayoutName();
if NewName <> '' then
FinancialReportMgt.RenameColumnLayoutInPackage(PackageCode, ColumnDefinitionNameFromPackage, NewName);
exit(NewName);
end;
end;
local procedure GetColumnDefinitionNameFromImportedPackage(PackageCode: Code[20]): Code[10]
var
ConfigPackageData: Record "Config. Package Data";
ConfigPackageField: Record "Config. Package Field";
begin
if not ConfigPackageField.Get(PackageCode, Database::"Column Layout Name", Rec.FieldNo(Name)) then
exit('');
ConfigPackageData.SetLoadFields(Value);
ConfigPackageData.SetRange("Package Code", PackageCode);
ConfigPackageData.SetRange("Table ID", Database::"Column Layout Name");
ConfigPackageData.SetRange("Field ID", Rec.FieldNo(Name));
if ConfigPackageData.FindFirst() then
exit(CopyStr(ConfigPackageData.Value, 1, 10));
end;
local procedure AddColumnDefinitionToPackage(ColumnLayoutNameCode: Code[10]) PackageCode: Code[20]
var
ConfigPackage: Record "Config. Package";
ConfigPackageTable: Record "Config. Package Table";
ConfigPackageField: Record "Config. Package Field";
ConfigPackageFilter: Record "Config. Package Filter";
ConfigPackageManagement: Codeunit "Config. Package Management";
PackageNameTxt: Label 'Column Definition - %1', Comment = '%1 - The name of the exported column definition';
PackageCodeTok: Label 'COL.DEF.%1', Locked = true;
begin
PackageCode := CopyStr(StrSubstNo(PackageCodeTok, ColumnLayoutNameCode), 1, MaxStrLen(PackageCode));
if ConfigPackage.Get(PackageCode) then
ConfigPackage.Delete(true);
ConfigPackageManagement.InsertPackage(ConfigPackage, PackageCode, StrSubstNo(PackageNameTxt, ColumnLayoutNameCode), true);
ConfigPackageManagement.InsertPackageTable(ConfigPackageTable, PackageCode, Database::"Column Layout Name");
ConfigPackageManagement.InsertPackageFilter(ConfigPackageFilter, PackageCode, Database::"Column Layout Name", 0, Rec.FieldNo(Name), ColumnLayoutNameCode);
ConfigPackageManagement.InsertPackageTable(ConfigPackageTable, PackageCode, Database::"Column Layout");
ConfigPackageManagement.InsertPackageFilter(ConfigPackageFilter, PackageCode, Database::"Column Layout", 0, ColumnLayout.FieldNo("Column Layout Name"), ColumnLayoutNameCode);
if ConfigPackageField.Get(PackageCode, Database::"Column Layout Name", Rec.FieldNo("Analysis View Name")) then
ConfigPackageField.Delete();
end;
local procedure LogImportExportTelemetry(DefinitionName: Text; Action: Text)
var
EnvironmentInfo: Codeunit "Environment Information";
FeatureTelemetry: Codeunit "Feature Telemetry";
TelemetryDimensions: Dictionary of [Text, Text];
begin
if not EnvironmentInfo.IsSaaS() then
exit;
TelemetryDimensions.Add('ColumnDefinitionCode', DefinitionName);
FeatureTelemetry.LogUsage('0000ONQ', 'Financial Report', StrSubstNo(TelemetryEventTxt, Action, DefinitionName), TelemetryDimensions);
end;
}