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