Data entity methods in d365fo.

PHOTO EMBED

Mon Oct 28 2024 15:51:59 GMT+0000 (Coordinated Universal Time)

Saved by @Manjunath

Data entity methods in d365fo



mapEntityToDataSource
// This method is hitting while updating and inserting
// we can assign datasource1 recid values to child data source.
// 
public void mapEntityToDataSource(DataEntityRuntimeContext _entityCtx, 
                                DataEntityDataSourceRuntimeContext _dataSourceCtx)
{
if (_entityCtx.getDatabaseOperation() == DataEntityDatabaseOperation::Insert 
    || _entityCtx.getDatabaseOperation() == DataEntityDatabaseOperation::Update)
{
    if (_dataSourceCtx.name() == dataEntityDataSourceStr(MyEntity, MyDataSource))
    {

        TestCustomer     testCustomer = _entityCtx.getRuntimeContextByName(
                                            dataEntityDataSourceStr(MyEntity,
                                                        TestCustomer)).getBuffer();

        this.CustomerRecid = testCustomer.recid;
    }
}
    super(_entityCtx, _dataSourceCtx);
}
-------------------------------------------------------------------------------------------------------------

postGetStagingData 
// After inserting into staging this method will trigger
// Ref: LedgerJournalEntity
public static void postGetStagingData(DMFDefinitionGroupExecution 
                                _dmfDefinitionGroupExecution) 
{
MyStaging     staging;

ttsbegin;

while select forupdate staging
    where staging.DefinitionGroup == _dmfDefinitionGroupExecution.DefinitionGroup
        && staging.ExecutionId == _dmfDefinitionGroupExecution.ExecutionId
        && staging.TransferStatus == DMFTransferStatus::NotStarted
{
    staging.Field1  = staging.Field2 + '-' + staging.Field3;
    staging.Field4  = staging.Field5;
    staging.update();
} 

    /*update_recordset staging
        setting OperationalEntityId   = curExt()
        where staging.DefinitionGroup   == _dmfDefinitionGroupExecution.DefinitionGroup
           && staging.ExecutionId       == _dmfDefinitionGroupExecution.ExecutionId
           && staging.TransferStatus    == DMFTransferStatus::NotStarted;*/


ttscommit;
}
-------------------------------------------------------------------------------------------------------------

postTargetProcess 
//  Executes the logic once after processing the target data.

public static void postTargetProcess(DMFDefinitionGroupExecution _dmfDefinitionGroupExecution)
{

    if (_dmfDefinitionGroupExecution.StagingStatus == DMFBatchJobStatus::Finished)
    {
       MyStaging     staging;

       ttsbegin;

       while select forupdate staging
            where staging.DefinitionGroup == _dmfDefinitionGroupExecution.DefinitionGroup
            && staging.ExecutionId == _dmfDefinitionGroupExecution.ExecutionId
            && staging.TransferStatus == DMFTransferStatus::Completed
    {
        staging.Field1  = staging.Field2 + '-' + staging.Field3;
        staging.Field4  = staging.Field5;
        staging.update();
    } 


    /*update_recordset staging
        setting OperationalEntityId   = curExt()
        where staging.DefinitionGroup   == _dmfDefinitionGroupExecution.DefinitionGroup
           && staging.ExecutionId       == _dmfDefinitionGroupExecution.ExecutionId
           && staging.TransferStatus    == DMFTransferStatus::Completed;*/


    ttscommit;
}

---------------------------------------------------------------------------------

validateWrite
// Validate the each line.
// LedgerJournalEntity
public boolean validateWrite()
{
boolean isValid = super();

// Your logic

return isValid;
}
-------------------------------------------------------------------------------------------------------------

validateDelete 
// Validate the each line.
// LedgerJournalEntity
public boolean validateDelete()
{
boolean isValid = super();

// Your logic

return isValid;
}
-------------------------------------------------------------------------------------------------------------

persistEntity 
//Skip validate field code written in this method
//Reference : LogisticsPostalAddressElectronicContactV2Entity
public void persistEntity(DataEntityRuntimeContext _entityCtx)
{
_entityCtx.getEntityRecord().skipDataSourceValidateField(
                fieldNum(ElectronicContactsEntity, Location), true);
    
super(_entityCtx);
}
-------------------------------------------------------------------------------------------------------------

initValue 
// Assign default values
// WE can assign number sequence also.
// SMMContactPersonV2Entity
public void initValue()
{
if (!this.skipNumberSequenceCheck())
{
    NumberSeqRecordFieldHandler::enableNumberSequenceControlForField(
        this, fieldNum(PIDInvestigatorContactPersonEntity, ContactPersonId), 
                                    ContactPerson::numRefContactPersonId());
}

this.ContactForParty = Parameters::find().ContactForParty;

super();
}
-------------------------------------------------------------------------------------------------------------

  initializeEntityDataSource
// Assign values to some fields based on some field values.
//Reference : LogisticsPostalAddressElectronicContactV2Entity
public void initializeEntityDataSource(DataEntityRuntimeContext _entityCtx, 
                                    DataEntityDataSourceRuntimeContext _dataSourceCtx)
{
    
if (_dataSourceCtx.name() == dataEntityDataSourceStr(MyEntity, MyDataSource))
{
    ContactPerson       contactPerson = ContactPerson::find(this.contactPersonId);

    if (this.LocationId == '')
    {
        DirPartyLocation    dirPartyLocation = DirPartyLocation::findOrCreate(
                                                contactPerson.party, false);
        LogisticsLocation   logisticsLocation = LogisticsLocation::find(
                                                    dirPartyLocation.Location);
        
        this.LocationId = logisticsLocation.LocationId;
        this.Location   = logisticsLocation.RecId;
        this.Party      = contactPerson.party;

        _dataSourceCtx.setBuffer(logisticsLocation);//set buffer
    }
}
if (_dataSourceCtx.name() == dataEntityDataSourceStr(MyEntity, MyDataSource1))
{
    DirPartyLocation    dirPartyLocationNew = 
        DirPartyLocation::findByPartyLocation(this.Party, this.Location);

    _dataSourceCtx.setBuffer(dirPartyLocationNew);
}
    
super(_entityCtx, _dataSourceCtx);
}
-------------------------------------------------------------------------------------------------------------

insertEntityDataSource 
// While inserting into target
//Reference :InventOperationalSiteV2Entity
public boolean insertEntityDataSource(DataEntityRuntimeContext _entityCtx, 
                        DataEntityDataSourceRuntimeContext _dataSourceCtx)
{
    boolean ret;
    
    if (_dataSourceCtx.name() == 
            dataEntityDataSourceStr(InventOperationalSiteV2Entity, ReqSitePolicy))
    {
        _dataSourceCtx.setDatabaseOperation(DataEntityDatabaseOperation::Insert);

    }
    
    ret = super(_entityCtx, _dataSourceCtx);

    return ret;

}
-------------------------------------------------------------------------------------------------------------

    updateEntityDataSource:
// While updating into target
//Reference :InventOperationalSiteV2Entity
public boolean updateEntityDataSource(DataEntityRuntimeContext _entityCtx, 
                        DataEntityDataSourceRuntimeContext _dataSourceCtx)
{
    boolean ret;

    ret = super(_entityCtx, _dataSourceCtx);

    return ret;
}
content_copyCOPY

https://kishoredynamics11.blogspot.com/2022/02/data-entity-methods-in-d365fo.html