Table 1237 Transformation Rule, source in 29
Source29
src/Layers/W1/BaseApp/System/DataExchange/TransformationRule.Table.al558 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.IO;
using System.Reflection;
table 1237 "Transformation Rule"
{
Caption = 'Transformation Rule';
DataCaptionFields = "Code", Description;
LookupPageID = "Transformation Rules";
DataClassification = CustomerContent;
fields
{
field(1; "Code"; Code[20])
{
Caption = 'Code';
NotBlank = true;
}
field(2; Description; Text[100])
{
Caption = 'Description';
}
field(3; "Transformation Type"; Enum "Transformation Rule Type")
{
Caption = 'Transformation Type';
trigger OnValidate()
begin
if Rec."Transformation Type" <> xRec."Transformation Type" then begin
"Find Value" := '';
"Replace Value" := '';
"Start Position" := 0;
Length := 0;
"Ending Text" := '';
"Starting Text" := '';
end;
if not IsDataFormatUpdateAllowed() then begin
"Data Format" := '';
"Data Formatting Culture" := '';
end;
end;
}
field(10; "Find Value"; Text[250])
{
Caption = 'Find Value';
trigger OnValidate()
begin
if Rec."Find Value" <> '' then
ValidateTransformationRuleField(Rec.FieldNo("Find Value"));
end;
}
field(11; "Replace Value"; Text[250])
{
Caption = 'Replace Value';
trigger OnValidate()
begin
if Rec."Replace Value" <> '' then
ValidateTransformationRuleField(Rec.FieldNo("Replace Value"));
end;
}
field(12; "Starting Text"; Text[250])
{
Caption = 'Starting Text';
trigger OnValidate()
begin
if Rec."Starting Text" <> '' then
ValidateTransformationRuleField(Rec.FieldNo("Starting Text"));
end;
}
field(13; "Ending Text"; Text[250])
{
Caption = 'Ending Text';
trigger OnValidate()
begin
if Rec."Ending Text" <> '' then
ValidateTransformationRuleField(Rec.FieldNo("Ending Text"));
end;
}
field(15; "Start Position"; Integer)
{
BlankZero = true;
Caption = 'Start Position';
trigger OnValidate()
begin
if Rec."Start Position" <> 0 then
ValidateTransformationRuleField(Rec.FieldNo("Start Position"));
end;
}
field(16; Length; Integer)
{
BlankZero = true;
Caption = 'Length';
trigger OnValidate()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnValidateLengthOnBeforeTestTransformationType(Rec, xRec, IsHandled);
if IsHandled then
exit;
if Rec.Length <> 0 then
ValidateTransformationRuleField(Rec.FieldNo(Length));
end;
}
field(18; "Data Format"; Text[100])
{
Caption = 'Data Format';
trigger OnValidate()
begin
if not IsDataFormatUpdateAllowed() then
TestField("Data Format", '');
if Rec."Data Format" <> '' then
ValidateTransformationRuleField(Rec.FieldNo("Data Format"));
end;
}
field(20; "Data Formatting Culture"; Text[10])
{
Caption = 'Data Formatting Culture';
trigger OnValidate()
begin
if not IsDataFormatUpdateAllowed() then
TestField("Data Formatting Culture", '');
if Rec."Data Formatting Culture" <> '' then
ValidateTransformationRuleField(Rec.FieldNo("Data Formatting Culture"));
end;
}
field(30; "Next Transformation Rule"; Code[20])
{
Caption = 'Next Transformation Rule';
TableRelation = "Transformation Rule".Code;
}
field(50; "Table ID"; Integer)
{
Caption = 'Table ID';
trigger OnLookup()
var
ConfigValidateMgt: Codeunit "Config. Validate Management";
begin
ConfigValidateMgt.LookupTable("Table ID");
if "Table ID" <> 0 then
Validate("Table ID");
end;
trigger OnValidate()
begin
CalcFields("Table Caption");
if Rec."Table ID" <> 0 then
ValidateTransformationRuleField(Rec.FieldNo("Table ID"));
end;
}
field(51; "Table Caption"; Text[250])
{
Caption = 'Table ID';
CalcFormula = lookup(AllObjWithCaption."Object Caption" where("Object Type" = const(Table),
"Object ID" = field("Table ID")));
Editable = false;
FieldClass = FlowField;
}
field(52; "Source Field ID"; Integer)
{
Caption = 'Source Field ID';
TableRelation = Field."No." where(TableNo = field("Table ID"));
trigger OnValidate()
begin
if ("Source Field ID" <> 0) and ("Target Field ID" = "Source Field ID") then
FieldError("Source Field ID");
CalcFields("Source Field Caption");
if Rec."Source Field ID" <> 0 then
ValidateTransformationRuleField(Rec.FieldNo("Source Field ID"));
end;
}
field(53; "Source Field Caption"; Text[250])
{
Caption = 'Source Field Caption';
CalcFormula = lookup(Field."Field Caption" where(TableNo = field("Table ID"),
"No." = field("Source Field ID")));
Editable = false;
FieldClass = FlowField;
}
field(54; "Target Field ID"; Integer)
{
Caption = 'Target Field ID';
TableRelation = Field."No." where(TableNo = field("Table ID"));
trigger OnValidate()
begin
if ("Target Field ID" <> 0) and ("Target Field ID" = "Source Field ID") then
FieldError("Target Field ID");
CalcFields("Target Field Caption");
if Rec."Target Field ID" <> 0 then
ValidateTransformationRuleField(Rec.FieldNo("Target Field ID"));
end;
}
field(55; "Target Field Caption"; Text[250])
{
Caption = 'Target Field Caption';
CalcFormula = lookup(Field."Field Caption" where(TableNo = field("Table ID"),
"No." = field("Target Field ID")));
Editable = false;
FieldClass = FlowField;
}
field(56; "Field Lookup Rule"; Option)
{
Caption = 'Field Lookup Rule';
OptionMembers = Target,"Original If Target Is Blank";
trigger OnValidate()
begin
ValidateTransformationRuleField(Rec.FieldNo("Field Lookup Rule"));
end;
}
field(57; Precision; Decimal)
{
AutoFormatType = 0;
Caption = 'Precision';
DecimalPlaces = 0 : 10;
trigger OnValidate()
begin
if Rec.Precision <> 0 then
ValidateTransformationRuleField(Rec.FieldNo(Precision));
end;
}
field(58; Direction; Text[1])
{
Caption = 'Direction';
trigger OnValidate()
begin
if Rec.Direction <> '' then
ValidateTransformationRuleField(Rec.FieldNo(Direction));
end;
}
field(70; "Extract From Date Type"; Enum "Extract From Date Type")
{
Caption = 'Extract From Date Type';
trigger OnValidate()
begin
ValidateTransformationRuleField(Rec.FieldNo("Extract From Date Type"));
end;
}
}
keys
{
key(Key1; "Code")
{
Clustered = true;
}
}
fieldgroups
{
}
trigger OnInsert()
begin
CheckMandatoryFields();
end;
trigger OnModify()
begin
CheckMandatoryFields();
end;
var
UNIXTIMESTAMPTxt: Label 'UNIXTIMESTAMP', Comment = 'Assigned to Transformation.Code field for Unix Timestamp';
UNIXTimeStampDescTxt: Label 'Transforming UNIX timestamp to text format.';
UPPERCASETxt: Label 'UPPERCASE', Comment = 'Assigned to Transformation.Code field for Upper case';
UpperCaseDescTxt: Label 'Upper Case Text';
LOWERCASETxt: Label 'LOWERCASE', Comment = 'Assigned to Transformation.Code field for Lower case';
LowerCaseDescTxt: Label 'Lower Case Text';
TITLECASETxt: Label 'TITLECASE', Comment = 'Assigned to Transformation.Code field for Title case';
TitleCaseDescTxt: Label 'Title Case Text';
TRIMTxt: Label 'TRIM', Comment = 'Assigned to Transformation.Code field for Trim';
TrimDescTxt: Label 'Trim Text';
FOURTH_TO_SIXTH_CHARTxt: Label 'FOURTH_TO_SIXTH_CHAR', Comment = 'Assigned to Transformation.Code field for getting the 4th to 6th characters in a string';
FourthToSixthCharactersDescTxt: Label 'Fourth to Sixth Characters Text';
YYYYMMDDDateTxt: Label 'YYYYMMDD_DATE', Comment = 'Assigned to Transformation.Code field for converting dates from yyyyMMdd format';
YYYYMMDDDateDescTxt: Label 'yyyyMMdd Date Text';
YYYYMMDDHHMMSSTxt: Label 'YYYYMMDDHHMMSS_FMT', Comment = 'Assigned to Transformation.Code field for converting dates from yyyyMMdd format';
YYYYMMDDHHMMSSDescTxt: Label 'yyyyMMddHHmmss Date/Time Format';
ALPHANUMERIC_ONLYTxt: Label 'ALPHANUMERIC_ONLY', Comment = 'Assigned to Transformation.Code field for getting only the Alphanumeric characters in a string';
AlphaNumericDescTxt: Label 'Alphanumeric Text Only';
DKNUMBERFORMATTxt: Label 'DK_DECIMAL_FORMAT', Comment = 'Assigned to Transformation.Code field for getting decimal formatting rule for Danish numbers';
DKNUMBERFORMATDescTxt: Label 'Danish Decimal Format';
USDATEFORMATTxt: Label 'US_DATE_FORMAT', Comment = 'Assigned to Transformation.Code field for getting date formatting rule from U.S. dates';
USDATEFORMATDescTxt: Label 'U.S. Date Format';
USDATETIMEFORMATTxt: Label 'US_DATETIME_FORMAT', Comment = 'Assigned to Transformation.Code field for getting date formatting rule from U.S. dates';
USDATETIMEFORMATDescTxt: Label 'U.S. Date/Time Format';
DeleteNOTPROVIDEDTxt: Label 'DELETE_NOTPROVIDED', Comment = 'NOTPROVIDED should stay in english because it is a constant value. DELETE should be translated.';
DeleteNOTPROVIDEDDescriptionTxt: Label 'Delete NOTPROVIDED value', Comment = 'NOTPROVIDED should stay in english because it is a constant value. ''Delete'' and ''value'' should be translated.';
#if not CLEAN28
AppendSpaceTxt: Label 'ADDSPCEND', Locked = true;
AppendSpaceDescriptionTxt: Label 'Adds a single empty space character to the end of the input string.', MaxLength = 100;
#endif
procedure CreateDefaultTransformations()
begin
InsertRec(UPPERCASETxt, UpperCaseDescTxt, "Transformation Type"::Uppercase, 0, 0, '', '');
InsertRec(LOWERCASETxt, LowerCaseDescTxt, "Transformation Type"::Lowercase, 0, 0, '', '');
InsertRec(TITLECASETxt, TitleCaseDescTxt, "Transformation Type"::"Title Case", 0, 0, '', '');
InsertRec(TRIMTxt, TrimDescTxt, "Transformation Type"::Trim, 0, 0, '', '');
InsertRec(FOURTH_TO_SIXTH_CHARTxt, FourthToSixthCharactersDescTxt, "Transformation Type"::Substring, 4, 3, '', '');
InsertRec(YYYYMMDDDateTxt, YYYYMMDDDateDescTxt, "Transformation Type"::"Date Formatting", 0, 0, 'yyyyMMdd', '');
InsertRec(YYYYMMDDHHMMSSTxt, YYYYMMDDHHMMSSDescTxt, "Transformation Type"::"Date and Time Formatting", 0, 0, 'yyyyMMddHHmmss', '');
InsertRec(ALPHANUMERIC_ONLYTxt, AlphaNumericDescTxt, "Transformation Type"::"Remove Non-Alphanumeric Characters", 0, 0, '', '');
InsertRec(DKNUMBERFORMATTxt, DKNUMBERFORMATDescTxt, "Transformation Type"::"Decimal Formatting", 0, 0, '', 'da-DK');
InsertRec(USDATEFORMATTxt, USDATEFORMATDescTxt, "Transformation Type"::"Date Formatting", 0, 0, '', 'en-US');
InsertRec(USDATETIMEFORMATTxt, USDATETIMEFORMATDescTxt, "Transformation Type"::"Date and Time Formatting", 0, 0, '', 'en-US');
InsertRec(UNIXTIMESTAMPTxt, UNIXTimeStampDescTxt, "Transformation Type"::Unixtimestamp, 0, 0, '', '');
OnCreateTransformationRules();
InsertFindAndReplaceRule(
DeleteNOTPROVIDEDTxt, DeleteNOTPROVIDEDDescriptionTxt, "Transformation Type"::"Regular Expression - Replace",
'NOTPROVIDED', '', '');
end;
procedure ValidateTransformationRuleField(FieldNo: Integer)
var
TransformationRule: Interface "Transformation Rule";
begin
TransformationRule := Rec."Transformation Type";
TransformationRule.ValidateTransformationRuleField(FieldNo, Rec, xRec);
end;
procedure IsDataFormatUpdateAllowed(): Boolean
var
TransformationRule: Interface "Transformation Rule";
IsHandled: Boolean;
DataFormatUpdateAllowed: Boolean;
begin
IsHandled := false;
OnBeforeIsDataFormatUpdateAllowed(CurrFieldNo, DataFormatUpdateAllowed, IsHandled);
if IsHandled then
exit(DataFormatUpdateAllowed);
TransformationRule := Rec."Transformation Type";
exit(TransformationRule.IsDataFormatUpdateAllowed());
end;
procedure InsertRec(NewCode: Code[20]; NewDescription: Text[100]; NewTransformationType: Enum "Transformation Rule Type"; NewStartPosition: Integer; NewLength: Integer; NewDataFormat: Text[100]; NewDataFormattingCulture: Text[10])
var
TransformationRule: Record "Transformation Rule";
begin
if TransformationRule.Get(NewCode) then
exit;
TransformationRule.CreateRule(
NewCode, NewDescription, NewTransformationType, NewStartPosition, NewLength, NewDataFormat, NewDataFormattingCulture);
end;
procedure CreateRule(NewCode: Code[20]; NewDescription: Text[100]; NewTransformationType: Enum "Transformation Rule Type"; NewStartPosition: Integer; NewLength: Integer; NewDataFormat: Text[100]; NewDataFormattingCulture: Text[10])
begin
Init();
Validate(Code, NewCode);
Validate(Description, NewDescription);
Validate("Transformation Type", NewTransformationType);
Validate("Start Position", NewStartPosition);
Validate(Length, NewLength);
Validate("Data Format", NewDataFormat);
Validate("Data Formatting Culture", NewDataFormattingCulture);
Insert(true);
end;
procedure InsertFindAndReplaceRule(NewCode: Code[20]; NewDescription: Text[100]; NewTransformationType: Enum "Transformation Rule Type"; NewFindValue: Text[250]; NewReplaceValue: Text[250]; NextTransformationRule: Code[20])
var
TransformationRule: Record "Transformation Rule";
begin
if TransformationRule.Get(NewCode) then
exit;
TransformationRule.ReplaceRule(NewCode, NewDescription, NewTransformationType, NewFindValue, NewReplaceValue, NextTransformationRule);
end;
procedure ReplaceRule(NewCode: Code[20]; NewDescription: Text[100]; NewTransformationType: Enum "Transformation Rule Type"; NewFindValue: Text[250]; NewReplaceValue: Text[250])
begin
Init();
Validate(Code, NewCode);
Validate(Description, NewDescription);
Validate("Transformation Type", NewTransformationType);
Validate("Find Value", NewFindValue);
Validate("Replace Value", NewReplaceValue);
Insert(true);
end;
procedure ReplaceRule(NewCode: Code[20]; NewDescription: Text[100]; NewTransformationType: Enum "Transformation Rule Type"; NewFindValue: Text[250]; NewReplaceValue: Text[250]; NextTransformationRule: Code[20])
begin
Init();
Validate(Code, NewCode);
Validate(Description, NewDescription);
Validate("Transformation Type", NewTransformationType);
Validate("Find Value", NewFindValue);
Validate("Replace Value", NewReplaceValue);
Validate("Next Transformation Rule", NextTransformationRule);
Insert(true);
end;
procedure TransformText(OldValue: Text): Text
var
NextTransformationRule: Record "Transformation Rule";
TransformationRule: Interface "Transformation Rule";
NewValue: Text;
begin
NewValue := OldValue;
TransformationRule := Rec."Transformation Type";
TransformationRule.TransformText(Rec, OldValue, NewValue);
if "Next Transformation Rule" <> '' then
if NextTransformationRule.Get("Next Transformation Rule") then
NewValue := NextTransformationRule.TransformText(NewValue);
OnAfterTransformText(Rec, OldValue, NewValue);
exit(NewValue);
end;
procedure GetFourthToSixthSubstringCode(): Code[20]
begin
exit(FOURTH_TO_SIXTH_CHARTxt);
end;
procedure GetUSDateFormatCode(): Code[20]
begin
exit(USDATEFORMATTxt);
end;
procedure GetUSDateTimeFormatCode(): Code[20]
begin
exit(USDATETIMEFORMATTxt);
end;
procedure GetUppercaseCode(): Code[20]
begin
exit(UPPERCASETxt);
end;
procedure GetLowercaseCode(): Code[20]
begin
exit(LOWERCASETxt);
end;
procedure GetTitlecaseCode(): Code[20]
begin
exit(TITLECASETxt);
end;
procedure GetTrimCode(): Code[20]
begin
exit(TRIMTxt);
end;
procedure GetAlphanumericCode(): Code[20]
begin
exit(ALPHANUMERIC_ONLYTxt);
end;
procedure GetDanishDecimalFormatCode(): Code[20]
begin
exit(DKNUMBERFORMATTxt);
end;
procedure GetYYYYMMDDCode(): Code[20]
begin
exit(YYYYMMDDDateTxt);
end;
procedure GetYYYYMMDDHHMMSSCode(): Code[20]
begin
exit(YYYYMMDDHHMMSSTxt);
end;
procedure GetDeleteNOTPROVIDEDCode(): Code[20]
begin
exit(DeleteNOTPROVIDEDTxt);
end;
#if not CLEAN28
[Obsolete('This is an unused procedure.', '28.0')]
procedure GetAppendSpaceCode(): Code[20]
begin
exit(AppendSpaceTxt);
end;
#endif
procedure EditNextTransformationRule()
var
TransformationRule: Record "Transformation Rule";
begin
if "Next Transformation Rule" = '' then
exit;
TransformationRule.Get("Next Transformation Rule");
PAGE.Run(PAGE::"Transformation Rule Card", TransformationRule);
end;
local procedure CheckMandatoryFields()
var
TransformationRule: Interface "Transformation Rule";
begin
TransformationRule := Rec."Transformation Type";
TransformationRule.CheckMandatoryFieldsInTransformationRule(Rec);
end;
#if not CLEAN28
[Obsolete('This is an unused procedure.', '28.0')]
procedure InsertAppendSpaceTransformation()
begin
InsertFindAndReplaceRule(AppendSpaceTxt, AppendSpaceDescriptionTxt, "Transformation Type"::"Regular Expression - Replace", '$', ' ', '');
end;
#endif
[IntegrationEvent(false, false)]
procedure OnTransformation(TransformationCode: Code[20]; InputText: Text; var OutputText: Text)
begin
end;
[IntegrationEvent(false, false)]
procedure OnCreateTransformationRules()
begin
end;
[IntegrationEvent(true, false)]
local procedure OnBeforeIsDataFormatUpdateAllowed(FieldNumber: Integer; var DataFormatUpdateAllowed: Boolean; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
procedure OnValidateLengthOnBeforeTestTransformationType(var TransformationRule: Record "Transformation Rule"; xTransformationRule: Record "Transformation Rule"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterTransformText(var TransformationRule: Record "Transformation Rule"; OldValue: Text; var NewValue: Text)
begin
end;
}