Prerequisites:
- Data entity.
- Setup an import project on DMF
Code:
public static void main(Args args)
{
SharedServiceUnitFileID fileId;
DMFDefinitionGroupName dmfDefinitionGroupName;
DialogGroup dialogGroup = dialog.addGroup("@SYS54759");
dataProjControlControl = dialog.addFieldValue(extendedTypeStr(DMFDefinitionGroupName),dmfDefinitionGroupName,"@ApplicationFoundation:DMFDataProjects","Data project selection");
dataProjControlControl.control().registerOverrideMethod(methodStr(FormStringControl,lookup),methodStr(demoClass,lookupDataProject),this);
FormBuildControl formBuildControl = dialog.formBuildDesign().control(dialogGroup.name());
fileUploadControl = formBuildControl.addControlEx(classstr(FileUpload), FileUploadControlLabel);
fileUploadControl.fileNameLabel("Upload file");
fileUploadControl.baseFileUploadStrategyClassName(classStr(FileUploadTemporaryStorageStrategy));
FileUploadTemporaryStorageResult fileUploadResult = fileUploadControl.getFileUploadResult();
if (fileUploadResult != null && fileUploadResult.getUploadStatus())
{
uploadFileID = fileUploadResult.getFileId();
dmfDefinitionGroupName = dataProjControlControl.value();
DMFDefinitionGroup definitionGroup = this.findDMFDefinitionGroup(dmfDefinitionGroupName);
this.applyTransforms(fileId,definitionGroup);
DMFDefinitionGroupEntity definitionGroupEntity = this.findDMFDefinitionGroupEntity(definitionGroup);
DMFExecutionId executionId = DMFUtil::setupNewExecution(definitionGroup.DefinitionGroupName);
DMFDefinitionGroupExecution execution = DMFDefinitionGroupExecution::find(definitionGroup.DefinitionGroupName, definitionGroupEntity.Entity,
executionId, true);
//execution.DataProjectId = journalId;
execution.FilePath = fileId;
execution.update();
DMFQuickImportExport::doPGImport(definitionGroup.DefinitionGroupName, executionId);
this.deleteFile(fileId);
}
}
private void lookupDataProject(FormStringControl _formControl)
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(DMFDefinitionGroup), _formControl);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource = query.addDataSource(tableNum(DMFDefinitionGroup));
queryBuildDataSource.addRange(fieldNum(DMFDefinitionGroup,OperationType)).value(SysQuery::value(DMFOperationType::Import));
QueryBuildDataSource qbds = queryBuildDataSource.addDataSource(tableNum(DMFDefinitionGroupEntity));
qbds.joinMode(JoinMode::ExistsJoin);
qbds.relations(false);
qbds.addLink(fieldNum(DMFDefinitionGroup, DefinitionGroupName), fieldnum(DMFDefinitionGroupEntity, DefinitionGroup));
qbds = qbds.addDataSource(tableNum(DMFEntity));
qbds.joinMode(JoinMode::ExistsJoin);
qbds.relations(false);
qbds.addRange(fieldNum(DMFEntity, TargetEntity)).value(enitityname);
qbds.addLink(fieldNum(DMFDefinitionGroupEntity, Entity), fieldnum(DMFEntity, EntityName));
sysTableLookup.addLookupfield(fieldNum(DMFDefinitionGroup, DefinitionGroupName));
sysTableLookup.addLookupfield(fieldNum(DMFDefinitionGroup, Description));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
3. Main methods
private DMFDefinitionGroup findDMFDefinitionGroup(DMFDefinitionGroupName dmfDefinitionGroupName)
{
DMFDefinitionGroup definitionGroup;
select firstonly definitionGroup
where definitionGroup.DefinitionGroupName == dmfDefinitionGroupName;
return definitionGroup;
}
private DMFLocalFilePath applyTransforms(
SharedServiceUnitFileID _uploadedStatement,
DMFDefinitionGroup _definitionGroup)
{
DMFDefinitionGroupEntity definitionGroupEntity = this.findDMFDefinitionGroupEntity(_definitionGroup);
DMFExecutionId executionId = DMFUtil::setupNewExecution(_definitionGroup.DefinitionGroupName);
DMFDefinitionGroupExecution execution = DMFDefinitionGroupExecution::find(
_definitionGroup.DefinitionGroupName,
definitionGroupEntity.Entity,
executionId,
true);
execution.IsTransformed = NoYes::No;
DMFLocalFilePath filePath = execution.applyTransforms(_uploadedStatement);
DMFExecution e = DMFExecution::find(executionId, true);
e.delete();
return filePath;
}
private DMFDefinitionGroupEntity findDMFDefinitionGroupEntity(DMFDefinitionGroup _definitionGroup)
{
DMFDefinitionGroupEntity definitionGroupEntity;
DMFEntity dmfEntity;
select firstonly RecId, Entity from definitionGroupEntity exists join dmfEntity
where definitionGroupEntity.DefinitionGroup == _definitionGroup.DefinitionGroupName
&& dmfEntity.EntityName == definitionGroupEntity.Entity
&& dmfEntity.TargetEntity == entityname;
if (!definitionGroupEntity)
{
throw error(strFmt("@DMF:DMFNoEntityExists", _definitionGroup.DefinitionGroupName));
}
return definitionGroupEntity;
}
private void deleteFile(SharedServiceUnitFileID _fileId)
{
FileUploadTemporaryStorageResult result = new FileUploadTemporaryStorageResult('', '', true, '', '', _fileId);
result.deleteResult();
}
Output:
Thanks and cheers,
-Sami