Table 405 Change Log Entry, source in 29

Source29

src/Layers/W1/BaseApp/System/ChangeLog/ChangeLogEntry.Table.al288 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.Diagnostics;

using Microsoft.Finance.GeneralLedger.Ledger;
using System.Reflection;
using System.Security.AccessControl;

#pragma warning disable AS0039
table 405 "Change Log Entry"
{
    Caption = 'Change Log Entry';
    DrillDownPageID = "Change Log Entries";
    LookupPageID = "Change Log Entries";
    ReplicateData = false;
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Entry No."; BigInteger)
        {
            AutoIncrement = true;
            Caption = 'Entry No.';
        }
        field(2; "Date and Time"; DateTime)
        {
            Caption = 'Date and Time';
        }
        field(3; Time; Time)
        {
            Caption = 'Time';
        }
        field(4; "User ID"; Code[50])
        {
            Caption = 'User ID';
            DataClassification = EndUserIdentifiableInformation;
            TableRelation = User."User Name";
        }
        field(5; "Table No."; Integer)
        {
            Caption = 'Table No.';
            TableRelation = AllObjWithCaption."Object ID" where("Object Type" = const(Table));
        }
        field(6; "Table Caption"; Text[250])
        {
            CalcFormula = lookup(AllObjWithCaption."Object Caption" where("Object Type" = const(Table),
                                                                           "Object ID" = field("Table No.")));
            Caption = 'Table Caption';
            FieldClass = FlowField;
        }
        field(7; "Field No."; Integer)
        {
            Caption = 'Field No.';
            TableRelation = Field."No." where(TableNo = field("Table No."));
        }
        field(8; "Field Caption"; Text[80])
        {
            CalcFormula = lookup(Field."Field Caption" where(TableNo = field("Table No."),
                                                              "No." = field("Field No.")));
            Caption = 'Field Caption';
            FieldClass = FlowField;
            ToolTip = 'Specifies the field caption of the changed field.';
        }
        field(9; "Type of Change"; Enum "Change Log Entry Type")
        {
            Caption = 'Type of Change';
        }
        field(10; "Old Value"; Text[2048])
        {
            Caption = 'Old Value';
            ToolTip = 'Specifies the value that the field had before a user made changes to the field.';
        }
        field(11; "New Value"; Text[2048])
        {
            Caption = 'New Value';
            ToolTip = 'Specifies the value that the field had after a user made changes to the field.';
        }
        field(12; "Primary Key"; Text[250])
        {
            Caption = 'Primary Key';
        }
        field(13; "Primary Key Field 1 No."; Integer)
        {
            Caption = 'Primary Key Field 1 No.';
            TableRelation = Field."No." where(TableNo = field("Table No."));
        }
        field(14; "Primary Key Field 1 Caption"; Text[80])
        {
            CalcFormula = lookup(Field."Field Caption" where(TableNo = field("Table No."),
                                                              "No." = field("Primary Key Field 1 No.")));
            Caption = 'Primary Key Field 1 Caption';
            FieldClass = FlowField;
        }
        field(15; "Primary Key Field 1 Value"; Text[50])
        {
            Caption = 'Primary Key Field 1 Value';
        }
        field(16; "Primary Key Field 2 No."; Integer)
        {
            Caption = 'Primary Key Field 2 No.';
            TableRelation = Field."No." where(TableNo = field("Table No."));
        }
        field(17; "Primary Key Field 2 Caption"; Text[80])
        {
            CalcFormula = lookup(Field."Field Caption" where(TableNo = field("Table No."),
                                                              "No." = field("Primary Key Field 2 No.")));
            Caption = 'Primary Key Field 2 Caption';
            FieldClass = FlowField;
        }
        field(18; "Primary Key Field 2 Value"; Text[50])
        {
            Caption = 'Primary Key Field 2 Value';
        }
        field(19; "Primary Key Field 3 No."; Integer)
        {
            Caption = 'Primary Key Field 3 No.';
            TableRelation = Field."No." where(TableNo = field("Table No."));
        }
        field(20; "Primary Key Field 3 Caption"; Text[80])
        {
            CalcFormula = lookup(Field."Field Caption" where(TableNo = field("Table No."),
                                                              "No." = field("Primary Key Field 3 No.")));
            Caption = 'Primary Key Field 3 Caption';
            FieldClass = FlowField;
        }
        field(21; "Primary Key Field 3 Value"; Text[50])
        {
            Caption = 'Primary Key Field 3 Value';
        }
        field(22; "Record ID"; RecordID)
        {
            Caption = 'Record ID';
            DataClassification = CustomerContent;
        }
        field(25; Protected; Boolean)
        {
            Caption = 'Protected';
            DataClassification = SystemMetadata;
        }
        field(26; "Changed Record SystemId"; Guid)
        {
            DataClassification = SystemMetadata;
        }
        field(27; "Notification Status"; Enum "Monitor Field Notification")
        {
            Caption = 'Notification status';
            DataClassification = SystemMetadata;
        }
        field(28; "Field Log Entry Feature"; Enum "Field Log Entry Feature")
        {
            DataClassification = SystemMetadata;
        }
        field(29; "Notification Message Id"; Guid)
        {
            DataClassification = SystemMetadata;
        }
    }

    keys
    {
        key(Key1; "Entry No.")
        {
            Clustered = true;
        }
        key(Key2; "Table No.", "Primary Key Field 1 Value", "Primary Key Field 2 Value")
        {
        }
        key(Key3; "Table No.", "Date and Time")
        {
        }
#if not CLEANSCHEMA32
        key(Key4; "Notification Message Id")
        {
            Enabled = false;
            ObsoleteReason = 'The key is disabled because Notification Message Id is not used for record retrieval.';
            ObsoleteTag = '29.0';
#if not CLEAN29
            ObsoleteState = Pending;
#else
            ObsoleteState = Removed;
#endif
        }
#endif
        key(key5; "Field Log Entry Feature")
        {
        }
        key(key6; SystemCreatedAt, Protected, "Field Log Entry Feature")
        {
        }
        key(Key7; "Primary Key Field 2 Value", "Table No.", "Primary Key Field 1 Value")
        {
        }
    }

    fieldgroups
    {
    }

    trigger OnInsert()
    begin
        Protected := IsProtected();
    end;

    procedure GetFullPrimaryKeyFriendlyName(): Text
    var
        TableMetadata: Record "Table Metadata";
        RecRef: RecordRef;
        FriendlyName: Text;
        p: Integer;
    begin
        if "Primary Key" = '' then
            exit('');

        // Don't try and get obsoleted table PK name.
        if TableMetadata.Get("Table No.") then
            if TableMetadata.ObsoleteState = TableMetadata.ObsoleteState::Removed then
                exit('');

        // Retain existing formatting of old data
        if (StrPos("Primary Key", 'CONST(') = 0) and (StrPos("Primary Key", '0(') = 0) then
            exit("Primary Key");

        RecRef.Open("Table No.");
        RecRef.SetPosition("Primary Key");
        FriendlyName := RecRef.GetPosition(true);
        RecRef.Close();

        FriendlyName := DelChr(FriendlyName, '=', '()');
        p := StrPos(FriendlyName, 'CONST');
        while p > 0 do begin
            FriendlyName := DelStr(FriendlyName, p, 5);
            p := StrPos(FriendlyName, 'CONST');
        end;
        exit(FriendlyName);
    end;

    procedure GetLocalOldValue(): Text
    begin
        exit(GetLocalValue("Old Value"));
    end;

    procedure GetLocalNewValue(): Text
    begin
        exit(GetLocalValue("New Value"));
    end;

    local procedure GetLocalValue(Value: Text): Text
    var
        AllObj: Record AllObj;
        ChangeLogManagement: Codeunit "Change Log Management";
        RecordRef: RecordRef;
        FieldRef: FieldRef;
        EmptyRecordId: RecordId;
    begin
        if (Value = '') or ("Record ID" = EmptyRecordId) then
            exit(Value);

        AllObj.SetRange("Object Type", AllObj."Object Type"::Table);
        AllObj.SetRange("Object ID", "Table No.");

        if not AllObj.IsEmpty() then begin
            RecordRef.Open("Table No.");
            if RecordRef.FieldExist("Field No.") then begin
                FieldRef := RecordRef.Field("Field No.");
                if ChangeLogManagement.EvaluateTextToFieldRef(Value, FieldRef) then
                    exit(Format(FieldRef.Value, 0, 1));
            end;
        end;

        exit(Value);
    end;

    local procedure IsProtected(): Boolean
    var
        ProtectedRecord: Boolean;
    begin
        ProtectedRecord := "Table No." = DATABASE::"G/L Entry";

        OnAfterIsProtected(Rec, ProtectedRecord);

        exit(ProtectedRecord);
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterIsProtected(var ChangeLogEntry: Record "Change Log Entry"; var ProtectedRecord: Boolean)
    begin
    end;
}
#pragma warning restore AS0039