Original Code
- Create class to import the file into the entity
DMFDefinitionGroupName dataProject; // This will store the name of the data project
/// <summary>
/// Write the file to the data entity.
/// </summary>
/// <param name = "memory">Memory stream to write to.</param>
/// <param name = "fileData">File data to write.</param>
public void writeFile(System.IO.Stream memory, str fileName)
{
SharedServiceUnitFileID fileId;
DMFDefinitionGroup definitionGroup;
DMFDefinitionGroupEntity definitionGroupEntity;
DMFExecutionId executionId;
DMFDefinitionGroupExecution execution;
// Get file into a FileUploadTemporaryStorageResult object
FileUploadTemporaryStorageResult result = File::SendFileToTempStore_GetResult(memory, fileName);
if (result && result.getUploadStatus())
{
fileId = result.getFileId();
definitionGroup = this.findDMFDefinitionGroup();
this.applyTransforms(fileId, definitionGroup);
definitionGroupEntity = this.findDMFDefinitionGroupEntity(definitionGroup);
executionId = DMFUtil::setupNewExecution(definitionGroup.DefinitionGroupName);
// Find execution
execution = DMFDefinitionGroupExecution::find(
definitionGroup.DefinitionGroupName,
definitionGroupEntity.Entity,
executionId,
true
);
execution.FilePath = fileId;
execution.IsTransformed = NoYes::Yes;
execution.IsSelected = NoYes::Yes;
execution.ExecuteTargetStep = NoYes::Yes;
execution.update();
//setPrefix(strFmt("@SYS73667", fileName)); // Used to pass a custom message to the front-end, but I prefer the default message
// Import the file via quick import DMF
DMFQuickImportExport::doPGImport(definitionGroup.DefinitionGroupName, executionId, true);
// Delete file
result.deleteResult();
}
}
- Create helper classes
/// <summary>
/// Find the DMF definition group.
/// </summary>
/// <returns>DMF definition group.</returns>
private DMFDefinitionGroup findDMFDefinitionGroup()
{
DMFDefinitionGroup definitionGroup;
select firstonly definitionGroup
where definitionGroup.DefinitionGroupName == dataProject;
return definitionGroup;
}
/// <summary>
/// Find the DMF definition group entity.
/// </summary>
/// <param name = "_fileName">DMF definition group to use.</param>
/// <returns>DMF definition group entity.</returns>
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;
if (!definitionGroupEntity)
{
throw error(strFmt("@c2c_AccountsReceivable:noEntity", definitionGroup.DefinitionGroupName));
}
return definitionGroupEntity;
}
/// <summary>
/// Apply transforms to use as mapping fields.
/// </summary>
/// <param name = "uploadedStatement">File ID.</param>
/// <param name = "definitionGroup">DMF definition group to use.</param>
/// <returns>DMF local file path.</returns>
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;
}