D365FO – AX – Update Data Entity Target Entity fields with X++

Imagine you want to set the value of a field of the Target Entity of a Data Entity with X ++ code

You have to create an extension class that extends the data Entity, extends “mapEntityToDataSource” method and add your code inside.

[ExtensionOf(tableStr(PurchPurchaseOrderHeaderV2Entity))] //Extends Data Entity
final class Al0PurchPurchaseOrderHeaderV2Entity_Extension
{
    public void mapEntityToDataSource(DataEntityRuntimeContext _entityCtx, DataEntityDataSourceRuntimeContext _dataSourceCtx) //Extends method
    {
        switch (_dataSourceCtx.name())
        {
            case dataEntityDataSourceStr(PurchPurchaseOrderHeaderV2Entity, PurchTable):
            PurchPurchaseOrderHeaderV2Entity purchPurchaseOrderHeaderV2Entity = _entityCtx.getEntityRecord(); //Get Data Entity buffer (Source Entity)
            PurchTable purchTable = _dataSourceCtx.getBuffer(); //Get Target Entity buffer
            purchTable.MatchingAgreement = PurchAgreementHeader::findAgreementId(purchPurchaseOrderHeaderV2Entity.Al0PurchAgreementRef).RecId; //Set Target entity field 
         
            break;
        }
        
        next mapEntityToDataSource(_entityCtx, _dataSourceCtx);
    }

One response to “D365FO – AX – Update Data Entity Target Entity fields with X++”

  1. Francesco Avatar
    Francesco

    Hi all,
    I’ve spent a lot of time trying to Update Data Entity Targets in a D365 environment.
    In my case, I had to update new custom fields added to both Entity/Target.

    I solved using the code above but calling the next as first statement in the extended method (mapEntityToDataSource).

    So my code looked like this:

    public void mapEntityToDataSource(DataEntityRuntimeContext _entityCtx, DataEntityDataSourceRuntimeContext _dataSourceCtx)
    {
    next mapEntityToDataSource( _entityCtx, _dataSourceCtx);

    if(_entityCtx.getDatabaseOperation() == DataEntityDatabaseOperation::YourOperation)
    {
    if (_dataSourceCtx.name() == dataEntityDataSourceStr(YourEntity, YourEntityDataSource))
    {
    YourEntityDataSourceTable buffer = _dataSourceCtx.getBuffer();

    buffer.TableCustomField = this.EntityCustomField;
    }
    }
    }

    Like

Leave a comment