Record-Level Replication
General information
By default, replication processes all records from given table, and while processing incremental replication, only recently modified records are exported.
It may be however necessary to specify a certain subset of records that should be replicated to certain receivers.
Using Record-level Replication, every receiver has to manually mark which records they want to receive.
Enable Record-Level
To enable Record-level Replication feature it is necessary to develop extension with new action with following way:
pageextension 50100 "ITI MDMS Item List" extends "Item List"
{
actions
{
addlast(processing)
{
action(Receivers)
{
ApplicationArea = All;
Caption = 'Receivers';
ToolTip = 'Allow to specify Receivers for current record';
Image = Company;
trigger OnAction()
var
RecordLevelMgt: Codeunit "ITI MDMS Record-Level Mgt.";
begin
Clear(RecordLevelMgt);
RecordLevelMgt.OpenRecordReceivers(RecordId());
end;
}
}
}
}
Uwaga
Any table can be used in Record-Level functionality.
Table using for Record-Level need to be specified on the Record-Level Active Tables list available on the MDMS Setup.
That information is necessary to proper generation of Tracking Log Entries.
The following fields can be set up:
Table No.
Specifies Record-Level Table No.
Record-Level Filtering
Specifies whether Record-Level is only way to filtering replication process. That option can speed up full replication process.
Include Childs on Subscribe
Specifies when record is subscribe then all childs from Data Set are included.
Check Receiver Permissions
Specifies whether display records on the Record Receivers page are limited based on Receiver Permissions.
OnBeforeExportRecord event contains information whether record-level is used. Variable value can be changed to exclude record from record-level.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"ITI Replication Mgt.", 'OnBeforeExportRecord', '', false, false)]
local procedure OnBeforeExportRecord(ReplicationNo: Code[20]; ReceiverNo: Code[20]; ExportedRecord: RecordRef; IncludeRecord: Boolean; var OverrideIncludeRecord: Boolean; var NewIncludeRecord: Boolean; var UseRecordLevel: Boolean)
begin
if ExportedRecord.Number() in [Database::Customer, Database::Item] then
UseRecordLevel := false;
end;
Setup Record Receivers
When external extension mark table to be used in Record-Level then records will be replicate only if it is marked for specific Receiver.
Uwaga
Please remember that Receivers action will appear on the list only when it is develop by external extension.
To see a list of Record Receivers user needs to run Receivers action. Following window appears:
Record Receivers window contains following columns:
Receiver No.
Contains Receiver code,
Is Replicated
Specifies whether record is being replicated,
Only marked records are replicated.
Following functions are available in Record Receivers window allowing users to easily subscribe or unsubscribe for many Receivers at once:
Subscribe All,
Usubscribe All,
Uwaga
Above functionality may cover any table from the database, therefore it is built in very general way.
Additional functionalities
In codeunit "ITI MDMS Record-Level Mgt." there are two additional functions whch allows to mark/unmakr Record Receiver.
- SetRecordForAllReceivers - function mark/unmark all Record Receivers for given RecordId.
[EventSubscriber(ObjectType::Table, Database::Item, 'OnAfterInsertEvent', '', false, false)]
local procedure OnAfterInsertItemEvent(var Rec: Record Item; RunTrigger: Boolean)
var
MDMSRecordLevelMgt: Codeunit "ITI MDMS Record-Level Mgt.";
begin
MDMSRecordLevelMgt.SetRecordForAllReceivers(Rec.RecordId(), true);
end;
- SetRecordReceiver - function mark/unmark Record Receivers for given RecordId and Reciever code.
[EventSubscriber(ObjectType::Table, Database::Item, 'OnAfterInsertEvent', '', false, false)]
local procedure OnAfterInsertItemEvent(var Rec: Record Item; RunTrigger: Boolean)
var
MDMSRecordLevelMgt: Codeunit "ITI MDMS Record-Level Mgt.";
begin
MDMSRecordLevelMgt.SetRecordForAllReceivers(Rec.RecordId(), 'DK', true);
end;
- OnAfterSetRecordReceiver - Event publisher invoked after Record Recevier is set/unset.
[EventSubscriber(ObjectType::Codeunit, Codeunit::"ITI MDMS Record-Level Mgt.", 'OnAfterSetRecordReceiver', '', false, false)]
local procedure OnAfterSetRecordReceiver(var RecordReceiver: Record "ITI Record Receiver"; IsReplicated: Boolean)
begin
end;
Cleanup Record Receivers
Report Clear Record Receivers is available on the MDMS Setup.
When Cleanup Record Receivers is marked on the MDMS Setup then Record Receivers are delete after record is deleted from master.