Table 5384 Man. Int. Field Mapping, source in 29
Source29
src/Layers/W1/BaseApp/Integration/SynchEngine/ManIntFieldMapping.Table.al202 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.Integration.SyncEngine;
using Microsoft.Integration.Dataverse;
using System.IO;
using System.Reflection;
table 5384 "Man. Int. Field Mapping"
{
DataClassification = SystemMetadata;
fields
{
field(5; Name; Code[20])
{
Caption = 'Name';
DataClassification = SystemMetadata;
NotBlank = true;
}
field(10; "Table Field No."; Integer)
{
Caption = 'Table Field';
DataClassification = SystemMetadata;
}
field(20; "Table Field Caption"; Text[80])
{
Caption = 'Table Field Caption';
ToolTip = 'Specifies the name of the field in Business Central.';
DataClassification = SystemMetadata;
}
field(30; "Integration Table Field No."; Integer)
{
Caption = 'Integration Table Field';
DataClassification = SystemMetadata;
}
field(40; "Int. Table Field Caption"; Text[80])
{
Caption = 'Integration Table Field Caption';
ToolTip = 'Specifies the name of the integration field to map to the Business Central field.';
DataClassification = SystemMetadata;
}
field(41; "Integration Table Field Name"; Text[80])
{
Caption = 'Integration Field Name';
DataClassification = SystemMetadata;
}
field(50; "Direction"; Option)
{
Caption = 'Direction';
ToolTip = 'Specifies the synchronization direction.';
DataClassification = SystemMetadata;
OptionCaption = 'Bidirectional,ToIntegrationTable,FromIntegrationTable';
OptionMembers = Bidirectional,ToIntegrationTable,FromIntegrationTable;
}
field(60; "Const Value"; Text[50])
{
Caption = 'Const Value';
ToolTip = 'Specifies the constant value that the mapped field will be set to.';
DataClassification = SystemMetadata;
}
field(70; "Validate Field"; Boolean)
{
Caption = 'Validate Field';
ToolTip = 'Specifies if the field should be validated during assignment.';
DataClassification = SystemMetadata;
}
field(80; "Validate Integr. Table Field"; Boolean)
{
Caption = 'Validate Integration Table Field';
ToolTip = 'Specifies if the field should be validated during assignment in the integration table.';
DataClassification = SystemMetadata;
}
field(90; "Transformation Rule"; Code[20])
{
Caption = 'Transformation Rule';
ToolTip = 'Specifies a rule for transforming imported text to a supported value before it can be mapped to a specified field in Microsoft Dynamics 365.';
DataClassification = SystemMetadata;
TableRelation = "Transformation Rule";
}
}
keys
{
key(Key1; "Name", "Table Field No.", "Integration Table Field No.")
{
Clustered = true;
}
}
var
FieldTypeNotTheSameErr: Label 'The field %1 with type %2 must have the same type as field %3 (%4).', Comment = '%1 - field name, %2 - field type, %3 - field name, %4 - field type';
internal procedure GetAllValidFields(var Field: Record "Field"; IntegrationTable: Boolean; IntegrationMappingName: Code[20]; TableNo: Integer)
var
IntegrationFieldMapping: Record "Integration Field Mapping";
TextBuilder: TextBuilder;
begin
Field.SetRange(ObsoleteState, Field.ObsoleteState::No);
Field.SetRange(Class, Field.Class::Normal);
Field.SetFilter(Type, '%1|%2|%3|%4|%5|%6|%7|%8|%9|%10|%11|%12',
Field.Type::BigInteger,
Field.Type::Boolean,
Field.Type::Code,
Field.Type::Date,
Field.Type::DateFormula,
Field.Type::DateTime,
Field.Type::Decimal,
Field.Type::Duration,
Field.Type::GUID,
Field.Type::Integer,
Field.Type::Option,
Field.Type::Text);
//Filder fields that are in field mapping table
IntegrationFieldMapping.SetRange("Integration Table Mapping Name", IntegrationMappingName);
if IntegrationFieldMapping.FindSet() then
repeat
if TextBuilder.Length = 0 then begin
if IntegrationTable then
TextBuilder.Append('<>' + Format(IntegrationFieldMapping."Integration Table Field No."))
else
TextBuilder.Append('<>' + Format(IntegrationFieldMapping."Field No."));
end else
if IntegrationTable then
TextBuilder.Append('&<>' + Format(IntegrationFieldMapping."Integration Table Field No."))
else
TextBuilder.Append('&<>' + Format(IntegrationFieldMapping."Field No."));
until IntegrationFieldMapping.Next() = 0;
//Filter fields that are already selected
if xRec.FindSet() then
repeat
if TextBuilder.Length = 0 then begin
if IntegrationTable then
TextBuilder.Append('<>' + Format(xRec."Integration Table Field No."))
else
TextBuilder.Append('<>' + Format(xRec."Table Field No."));
end else
if IntegrationTable then
TextBuilder.Append('&<>' + Format(xRec."Integration Table Field No."))
else
TextBuilder.Append('&<>' + Format(xRec."Table Field No."));
until xRec.Next() = 0;
if TextBuilder.Length = 0 then
Field.SetFilter("No.", '..1999999999')
else
Field.SetFilter("No.", TextBuilder.ToText() + '&..1999999999');
end;
internal procedure GetAllValidIntegrationFields(var IntegrationField: Record "Integration Field"; IntegrationMappingName: Code[20]; TableNo: Integer)
var
Field: Record "Field";
CDSIntegrationMgt: Codeunit "CDS Integration Mgt.";
begin
Field.SetRange(TableNo, TableNo);
GetAllValidFields(Field, true, IntegrationMappingName, TableNo);
if Field.FindSet() then
repeat
IntegrationField."Table No." := Field.TableNo;
IntegrationField."Field Name" := Field.FieldName;
IntegrationField."Field Caption" := Field."Field Caption";
IntegrationField."Field No." := Field."No.";
IntegrationField.IsRuntime := false;
IntegrationField.Insert();
until Field.Next() = 0;
CDSIntegrationMgt.GetEntityFields(TableNo, IntegrationField);
end;
internal procedure CompareFieldType(LocalField: Record Field; IntegrationField: Record Field)
begin
if LocalField.Type = IntegrationField.Type then
exit;
if ((LocalField.Type = LocalField.Type::Code) or
(LocalField.Type = LocalField.Type::Text) or
(LocalField.Type = LocalField.Type::BLOB)) and
((IntegrationField.Type = IntegrationField.Type::Code) or
(IntegrationField.Type = IntegrationField.Type::Text) or
(IntegrationField.Type = IntegrationField.Type::BLOB))
then
exit;
if LocalField.Type <> IntegrationField.Type then
Error(FieldTypeNotTheSameErr, IntegrationField."Field Caption", IntegrationField.Type, LocalField."Field Caption", LocalField.Type);
end;
internal procedure CreateRecord(IntegrationMappingName: Code[20]; TableFieldNo: Integer; IntegrationTableFieldNo: Integer; lDirection: Option; ConstValue: Text[50]; ValidateField: Boolean; ValidateIntegrTableField: Boolean; TransformationRule: Code[20])
begin
Init();
Name := IntegrationMappingName;
"Table Field No." := TableFieldNo;
"Integration Table Field No." := IntegrationTableFieldNo;
Direction := lDirection;
"Const Value" := ConstValue;
ValidateField := ValidateField;
ValidateIntegrTableField := ValidateIntegrTableField;
"Transformation Rule" := TransformationRule;
Insert(true);
end;
}