Table 1214 Intermediate Data Import, source in 29

Source29

src/Layers/W1/BaseApp/System/DataExchange/IntermediateDataImport.Table.al145 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.IO;

using System.Reflection;

table 1214 "Intermediate Data Import"
{
    Caption = 'Intermediate Data Import';
    DataClassification = CustomerContent;

    fields
    {
        field(1; ID; Integer)
        {
            AutoIncrement = true;
            Caption = 'ID';
        }
        field(2; "Data Exch. No."; Integer)
        {
            Caption = 'Data Exch. No.';
            NotBlank = true;
            TableRelation = "Data Exch.";
        }
        field(3; "Table ID"; Integer)
        {
            Caption = 'Table ID';
            NotBlank = true;
            TableRelation = AllObjWithCaption."Object ID" where("Object Type" = const(Table));
        }
        field(4; "Record No."; Integer)
        {
            Caption = 'Record No.';
        }
        field(5; "Field ID"; Integer)
        {
            Caption = 'Field ID';
            TableRelation = Field."No." where(TableNo = field("Table ID"));
        }
        field(6; Value; Text[250])
        {
            Caption = 'Value';
        }
        field(7; "Validate Only"; Boolean)
        {
            Caption = 'Validate Only';
        }
        field(8; "Parent Record No."; Integer)
        {
            Caption = 'Parent Record No.';
        }
        field(16; "Value BLOB"; BLOB)
        {
            Caption = 'Value BLOB';
        }
    }

    keys
    {
        key(Key1; ID)
        {
        }
        key(Key2; "Data Exch. No.", "Table ID", "Record No.", "Field ID")
        {
            Clustered = true;
        }
        key(Key3; "Data Exch. No.", "Table ID", "Field ID")
        {
        }
    }

    fieldgroups
    {
    }

    procedure InsertOrUpdateEntry(EntryNo: Integer; TableID: Integer; FieldID: Integer; ParentRecordNo: Integer; RecordNo: Integer; NewValue: Text[250])
    begin
        if FindEntry(EntryNo, TableID, FieldID, ParentRecordNo, RecordNo) then
            SetValue(NewValue)
        else begin
            Clear(Rec);
            "Data Exch. No." := EntryNo;
            "Table ID" := TableID;
            "Record No." := RecordNo;
            "Field ID" := FieldID;
            SetValueWithoutModifying(NewValue);
            "Parent Record No." := ParentRecordNo;
            "Validate Only" := false;
            Insert();
        end;
    end;

    procedure FindEntry(EntryNo: Integer; TableID: Integer; FieldID: Integer; ParentRecordNo: Integer; RecordNo: Integer): Boolean
    begin
        Reset();

        SetRange("Data Exch. No.", EntryNo);
        SetRange("Table ID", TableID);
        SetRange("Field ID", FieldID);
        SetRange("Parent Record No.", ParentRecordNo);
        SetRange("Record No.", RecordNo);

        exit(FindFirst());
    end;

    procedure GetEntryValue(EntryNo: Integer; TableID: Integer; FieldID: Integer; ParentRecordNo: Integer; RecordNo: Integer): Text[250]
    begin
        if FindEntry(EntryNo, TableID, FieldID, ParentRecordNo, RecordNo) then
            exit(GetValue());

        exit('');
    end;

    procedure GetValue(): Text
    var
        TypeHelper: Codeunit "Type Helper";
        InStream: InStream;
    begin
        if not "Value BLOB".HasValue() then
            exit(Value);
        CalcFields("Value BLOB");
        "Value BLOB".CreateInStream(InStream, TEXTENCODING::Windows);
        exit(TypeHelper.ReadAsTextWithSeparator(InStream, TypeHelper.LFSeparator()));
    end;

    procedure SetValue(NewValue: Text)
    begin
        SetValueWithoutModifying(NewValue);
        Modify();
    end;

    procedure SetValueWithoutModifying(NewValue: Text)
    var
        OutStream: OutStream;
    begin
        Clear("Value BLOB");
        Value := CopyStr(NewValue, 1, MaxStrLen(Value));
        if StrLen(NewValue) <= MaxStrLen(Value) then
            exit; // No need to store anything in the blob
        if NewValue = '' then
            exit;
        "Value BLOB".CreateOutStream(OutStream, TEXTENCODING::Windows);
        OutStream.WriteText(NewValue);
    end;
}