There are often requirements where we need to perform some operation(s) Just after target data is inserted/updated fully for all records.
There is a method that can be used at Entity level known as postTargetProcess
Drawback of this method is that It only can be used with Data management framework in non-set based entities.
It can also not be used with Odata operations.
Method can be implemented as below
public class SaddafDemoEntity extends common
{
/// <summary>
/// Post insert into target
/// </summary>
/// <param name = "_dmfDefinitionGroupExecution">DMFDefinitionGroupExecution</param>
public static void postTargetProcess(DMFDefinitionGroupExecution _dmfDefinitionGroupExecution)
{
TestHeaderTable headerTable;
SaddafDemoStaging staging;
select firstonly forupdate integrationImportTable
where integrationImportTable.DMFExecutionId == _dmfDefinitionGroupExecution.ExecutionId;
select count(Recid) from staging
where staging.DefinitionGroup == _dmfDefinitionGroupExecution.DefinitionGroup
&& staging.ExecutionId == _dmfDefinitionGroupExecution.ExecutionId
&& staging.TransferStatus == DMFTransferStatus::Completed;
ttsbegin;
headerTable.RecordCount = staging.RecId
headerTable.update();
ttscommit;
}
}
For Entities using set based operations, we have a tricky workaround by using an Post event handler for a write method of DmfEntityWriter class. [PostHandlerFor(classStr(DmfEntityWriter), methodStr(DmfEntityWriter, write))]
public static void DmfEntityWriter_Post_write(XppPrePostArgs args)
{
DMFDefinitionGroupExecution dmfDefinitionGroupExecution = args.getArg('_definitionGroupExecution');
str entityName = dmfDefinitionGroupExecution.EntityXMLName;
switch (entityName)
{
case 'SaddafDemoEntity':
TestHeaderTable headerTable;
SaddafDemoStaging staging;
select firstonly forupdate integrationImportTable
where integrationImportTable.DMFExecutionId == dmfDefinitionGroupExecution.ExecutionId;
select count(Recid) from staging
where staging.DefinitionGroup == dmfDefinitionGroupExecution.DefinitionGroup
&& staging.ExecutionId == dmfDefinitionGroupExecution.ExecutionId
&& staging.TransferStatus == DMFTransferStatus::Completed;
ttsbegin;
headerTable.RecordCount = staging.RecId
headerTable.update();
ttscommit;
break;
}
}
Unfortunately there is nothing similar for Odata, but Odata has its own set of capabilities to supersede all shortcomings.
No comments:
Post a Comment