Showing posts with label DMF. Show all posts
Showing posts with label DMF. Show all posts

Friday, April 26, 2024

create DMF import data project dynamically and map using XML

internal final class DMFImport
{
    /// <summary>
    /// Class entry point. The system will call this method when a designated menu 
    /// is selected or when execution starts and this class is set as the startup class.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
    {
        str fileExtWithoutDot;
        str contentType;
        str fileId;
        guid fileGuid = newGuid();
        DMFDefinitionGroup  definitionGroup;
        DMFDefinitionGroupEntity    definitionGroupEntityTable;
        
        //Creates DMF project
        str _defintionGroupName = "Test8";
        ttsbegin;
        definitionGroup.initValue();
        definitionGroup.DefinitionGroupName = _defintionGroupName;
        definitionGroup.OperationType = DMFOperationType::Import;
        definitionGroup.insert();
        ttscommit;
        
        fileExtWithoutDot = DMFDataSource::getFormatFileExtension('XML-Element');
        contentType     = strFmt('application/%1', fileExtWithoutDot);

        DMFEntity DMFEntity;// = DMFEntity::find("Customer groups");
        select firstonly dmfEntity
            order by dmfEntity.EntityName asc
                where dmfEntity.targetEntity == "CUSTCUSTOMERGROUPENTITY";;

       // str _entityName = "CUSTCUSTOMERGROUPENTITY";
        str _entityName = DMFEntity.EntityName;
        
        str _fileName = "Test8";

        fileId = guid2str(fileGuid);
        str _fileBase64 = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RG9jdW1lbnQ+PENVU1RDVVNUT01FUkdST1VQRU5USVRZPjxDTEVBUklOR1BFUklPRFBBWU1FTlRURVJNTkFNRT48L0NMRUFSSU5HUEVSSU9EUEFZTUVOVFRFUk1OQU1FPjxDVVNUT01FUkFDQ09VTlROVU1CRVJTRVFVRU5DRT48L0NVU1RPTUVSQUNDT1VOVE5VTUJFUlNFUVVFTkNFPjxDVVNUT01FUkdST1VQSUQ+RXhEZWJCUnVwdDwvQ1VTVE9NRVJHUk9VUElEPjxERUZBVUxURElNRU5TSU9ORElTUExBWVZBTFVFPjwvREVGQVVMVERJTUVOU0lPTkRJU1BMQVlWQUxVRT48REVTQ1JJUFRJT04+QWNjb3VudHMgcmVjZWl2YWJsZSBleHRlcm5hbCAtIGJhZCBkZWJ0PC9ERVNDUklQVElPTj48SVNTQUxFU1RBWElOQ0xVREVESU5QUklDRT5ObzwvSVNTQUxFU1RBWElOQ0xVREVESU5QUklDRT48UEFZTUVOVFRFUk1JRD48L1BBWU1FTlRURVJNSUQ+PFRBWEdST1VQSUQ+PC9UQVhHUk9VUElEPjxXUklURU9GRlJFQVNPTj48L1dSSVRFT0ZGUkVBU09OPjwvQ1VTVENVU1RPTUVSR1JPVVBFTlRJVFk+PC9Eb2N1bWVudD4=";
       
        //Creates a file from Base64
        System.Byte[] reportBytes = System.Convert::FromBase64String(_fileBase64);
        System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(reportBytes);

        FileUploadTemporaryStorageStrategy fileUploadStrategy = new FileUploadTemporaryStorageStrategy();
        FileUploadTemporaryStorageResult fileUploadResult = fileUploadStrategy.uploadFile(memoryStream, _fileName,contentType);

        //Adds the entity and file to the DMF Project
        ttsbegin;
        definitionGroupEntityTable.initValue();
        definitionGroupEntityTable.DefinitionGroup = _defintionGroupName;
        definitionGroupEntityTable.Entity = _entityName;
        definitionGroupEntityTable.Source = 'XML-Element';
        definitionGroupEntityTable.SampleFilePath = fileUploadResult.getFileId();
        definitionGroupEntityTable.EntityXMLName = DMFEntity.TargetEntity;

        definitionGroupEntityTable.RunInsertLogic = NoYes::Yes;
        definitionGroupEntityTable.RunValidateWrite = NoYes::Yes;
        DIS_DMFImport::GenerateAndValidateMapping(definitionGroupEntityTable);
        definitionGroupEntityTable.insert();
        ttscommit;

        DMFExecutionId  executionId = DMFUtil::setupNewExecution(_defintionGroupName);
        DMFDefinitionGroupExecution execution = DMFDefinitionGroupExecution::find(_defintionGroupName, definitionGroupEntityTable.Entity,executionId, true);

        //execution.DataProjectId = journalId;
        execution.FilePath = fileId;
        execution.update();

        //DMFQuickImportExport::doPGImport(_defintionGroupName, executionId);
    }

    /// <summary>
    /// Generates mapping for a definition group entity.
    /// </summary>
    /// <param name = "definitionGroupEntity">The definition group entity to generate mapping for.</param>
    public static void GenerateAndValidateMapping(DMFDefinitionGroupEntity definitionGroupEntity)
    {
        // Generate the mapping
        DMFXmlGeneration::generateMappingV2(definitionGroupEntity, '', true, true, false);

        // Validate generated mapping
        DMFQuickImportExport::validateXML(definitionGroupEntity.Source,
                definitionGroupEntity.SampleFilePath,
                definitionGroupEntity.Entity,
                definitionGroupEntity);
    }

}

Thursday, April 11, 2024

Computed column in View/DataEntity

private static server str compPurchQtyInvoiced()
{
	//return SysComputedColumn::sum(SysComputedColumn::returnField(
	//        tableStr(InboundOrderLinesOverview),
	//        identifierStr(InventTransPurchLine),
	//    fieldStr(InventTrans, Qty)));

	SysDictTable InventTrans = new SysDictTable(tableNum(InventTrans));
	SysDictTable InventTransOriginPurchLineLoc = new SysDictTable(tableNum(InventTransOriginPurchLine));
	str          val;

	str     inventtransid = SysComputedColumn::returnField(dataentityviewstr(InboundOrderLinesOverview), identifierstr(PurchLine), fieldstr(PurchLine, InventTransId));

	//select SUM(QTY) from inventtrans
	//    join InventTransOriginPurchLine on InventTransOriginPurchLine.INVENTTRANSORIGIN = inventtrans.INVENTTRANSORIGIN
	//    where InventTransOriginPurchLine.PURCHLINEINVENTTRANSID = 'L00834739'
	//    AND inventtrans.STATUSRECEIPT in (1,2)


	val = strFmt("select SUM(%1) from %2 join %3 on %3.%4 = %2.%5 where %3.%6 = %7 AND %2.%8 = %9",
		InventTrans.fieldName(fieldNum(InventTrans, Qty), DbBackend::Sql),
		InventTrans.name(DbBackend::Sql),
		InventTransOriginPurchLineLoc.name(DbBackend::Sql),
		InventTransOriginPurchLineLoc.fieldName(fieldNum(InventTransOriginPurchLine, INVENTTRANSORIGIN), DbBackend::Sql),
		InventTrans.fieldName(fieldNum(InventTrans, INVENTTRANSORIGIN), DbBackend::Sql),
		InventTransOriginPurchLineLoc.fieldName(fieldNum(InventTransOriginPurchLine, PURCHLINEINVENTTRANSID), DbBackend::Sql),
		inventtransid,
		InventTrans.fieldName(fieldNum(InventTrans, StatusReceipt), DbBackend::Sql),
		SysComputedColumn::returnLiteral(1));

	return val;
}

Table browser URL in D365FO

Critical Thinking icon icon by Icons8