Import File into Entity Project through Code - arp6333/xplusplus GitHub Wiki

Original Code

  1. 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();
    }
}
  1. 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;
}
⚠️ **GitHub.com Fallback** ⚠️