Table 2581 Dim Correction Change, source in 29
Source29
src/Layers/W1/BaseApp/Finance/Dimension/Correction/DimCorrectionChange.Table.al180 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.Dimension.Correction;
using Microsoft.Finance.Dimension;
/// <summary>
/// Defines dimension value changes for dimension correction operations. Stores original and new dimension values with change type classification.
/// </summary>
table 2581 "Dim Correction Change"
{
DataClassification = CustomerContent;
fields
{
/// <summary>
/// Reference to the parent dimension correction entry.
/// </summary>
field(1; "Dimension Correction Entry No."; Integer)
{
DataClassification = CustomerContent;
TableRelation = "Dimension Correction"."Entry No.";
}
/// <summary>
/// Code of the dimension being changed in the correction.
/// </summary>
field(2; "Dimension Code"; Code[20])
{
ToolTip = 'Specifies the Dimension Code.';
DataClassification = CustomerContent;
TableRelation = Dimension.Code;
}
/// <summary>
/// Original dimension value that will be replaced in the correction.
/// </summary>
field(3; "Dimension Value"; Text[100])
{
DataClassification = CustomerContent;
TableRelation = "Dimension Value".Name where("Dimension Code" = field("Dimension Code"));
}
/// <summary>
/// New dimension value to replace the original value in the correction.
/// </summary>
field(4; "New Value"; Text[100])
{
DataClassification = CustomerContent;
trigger OnValidate()
var
DimensionValue: Record "Dimension Value";
DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
DimensionManagement: Codeunit DimensionManagement;
begin
if "New Value" = '' then begin
Rec.Validate(Rec."Change Type", Rec."Change Type"::"No Change");
exit;
end;
DimensionCorrectionMgt.VerifyIfDimensionCanBeChanged(Rec);
if Rec."Change Type" <> Rec."Change Type"::Add then
Rec."Change Type" := Rec."Change Type"::Change;
DimensionValue.SetRange("Dimension Code", Rec."Dimension Code");
DimensionValue.SetRange(Code, "New Value");
DimensionValue.FindFirst();
if not DimensionManagement.CheckDim(DimensionValue."Dimension Code") then
Error(DimensionManagement.GetDimErr());
if not DimensionManagement.CheckDimValue(DimensionValue."Dimension Code", DimensionValue.Code) then
Error(DimensionManagement.GetDimErr());
Rec."New Value ID" := DimensionValue."Dimension Value ID";
Rec."New Value" := DimensionValue.Code;
end;
}
/// <summary>
/// Internal ID of the new dimension value for efficient processing.
/// </summary>
field(5; "New Value ID"; Integer)
{
DataClassification = CustomerContent;
}
/// <summary>
/// Type of change operation to perform on the dimension value.
/// </summary>
field(6; "Change Type"; Option)
{
DataClassification = CustomerContent;
OptionMembers = "No Change","Change","Add","Remove";
trigger OnValidate()
var
DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
begin
if Rec."Change Type" = Rec."Change Type"::Remove then
DimensionCorrectionMgt.VerifyIfDimensionCanBeChanged(Rec);
if Rec."Change Type" in [Rec."Change Type"::"No change", Rec."Change Type"::"Remove"] then begin
Clear(Rec."New Value");
Clear(Rec."New Value ID");
end;
end;
}
/// <summary>
/// BLOB field containing serialized dimension values for bulk operations.
/// </summary>
field(10; "Dimension Values"; Blob)
{
DataClassification = CustomerContent;
}
/// <summary>
/// Count of dimension values stored in the dimension values BLOB field.
/// </summary>
field(11; "Dimension Value Count"; Integer)
{
DataClassification = CustomerContent;
}
}
keys
{
key(Key1; "Dimension Correction Entry No.", "Dimension Code")
{
Clustered = true;
}
}
/// <summary>
/// Sets dimension value IDs in the BLOB field for bulk processing operations.
/// </summary>
/// <param name="DimensionValues">List of dimension value IDs to store</param>
procedure SetDimensionValues(DimensionValues: List of [Integer])
var
DimValuesOutStream: OutStream;
DimSetValue: Integer;
DimSetValueFilter: Text;
begin
if DimensionValues.Count() = 0 then begin
Clear(Rec."Dimension Values");
exit;
end;
foreach DimSetValue in DimensionValues do
if DimSetValueFilter = '' then
DimSetValueFilter += Format(DimSetValue)
else
DimSetValueFilter += '|' + Format(DimSetValue);
Rec."Dimension Values".CreateOutStream(DimValuesOutStream);
DimValuesOutStream.WriteText(DimSetValueFilter);
end;
/// <summary>
/// Retrieves dimension value IDs from the BLOB field as a formatted text string.
/// </summary>
/// <returns>Formatted text string containing dimension value IDs</returns>
procedure GetDimensionValues(): Text
var
DimValuesInStream: InStream;
DimSetValueFilter: Text;
begin
Rec.CalcFields(Rec."Dimension Values");
if not Rec."Dimension Values".HasValue() then
exit('');
Rec."Dimension Values".CreateInStream(DimValuesInStream);
DimValuesInStream.ReadText(DimSetValueFilter);
exit(DimSetValueFilter);
end;
}