I do not know why but standard DMF writer does not update its batch task progress. It is really dull to run DMF target step and see 0% progress for long time trying to guess only what ETA is.
Fortunately it is easy to fix. The whole idea is simple: init a server side progress and update it every time the next record is processed.
DMFEntityWriter class
Fortunately it is easy to fix. The whole idea is simple: init a server side progress and update it every time the next record is processed.
DMFEntityWriter class
private void myProgressServerInit(RefRecId _startRecId, RefRecId _endRecId) { if(xSession::isCLRSession()) { // this progress just updates percentage in Batch task form myProgressServer = RunbaseProgress::newServerProgress(1, newGuid(), -1, DateTimeUtil::minValue()); myProgressServer.setTotal(_endRecId - _startRecId); } }
public container write(DMFDefinitionGroupExecution _definitionGroupExecution, DMFdefinationGroupName _definitionGroup, DMFExecutionID _executionId, DMFEntity _entity, boolean _onlyErrored, boolean _onlySelected, RefRecId _startRefRecId = 0, RefRecId _endRefRecId = 0, boolean _isCompare = false, DmfStagingBundleId _bundleId = 0) { Common target; ... if (_entity.TargetIsSetBased) { ... } else { ... while (nextStartRecId <= lastRecId) { ... try { this.myProgressServerInit(startRefRecId, endRefRecId); ... while select staging where staging.(defGroupFieldId) == _definitionGroup && staging.(execFieldId) == _executionId && ( (!_onlyErrored && !_onlySelected) || (_onlyErrored && staging.(transferStatusFieldId) == DMFTransferStatus::Error) || (_onlySelected && staging.(selectedFieldId) == NoYes::Yes) ) join tmpStagingRecords where tmpStagingRecords.RecId >= startRefRecId && tmpStagingRecords.RecId <= endRefRecId && tmpStagingRecords.StagingRecordRecId == staging.RecId { try { this.myProgressServerIncCount(); ... } catch { ... } } } this.myProgressServerKill(); } ... return [newCount, updCount, stagingLogRecId,msgDisplayed]; }
No comments:
Post a Comment