Friday, 20 October 2023

Create simple Business Events in D365 FO X++

 [BusinessEvents(classStr(UTT_TransactionsBusinessEventContract),

"@UTLExtension:UTT_Trans",

"@UTLExtension:DTT_RetriveTrigger", ModuleAxapta::Ledger)]

public class UTT_TransactionsBusinessEvent extends BusinessEventsBase

{

    private LedgerJournalTable ledgerJournalTable;

    static public UTT_TransactionsBusinessEvent newFromLedgerJournalTable(LedgerJournalTable _ledgerJournalTable)

    {

        UTT_TransactionsBusinessEvent businessEvent = new UTT_TransactionsBusinessEvent();

        businessEvent.parmLedgerJournalTable(_ledgerJournalTable);

        return businessEvent;

    }

    private LedgerJournalTable parmLedgerJournalTable(LedgerJournalTable _ledgerJournalTable = ledgerJournalTable)

    {

        ledgerJournalTable = _ledgerJournalTable;

        return ledgerJournalTable;

    }

    protected void new()

    {

    }

    [Wrappable(true), Replaceable(true)]

    public BusinessEventsContract buildContract()

    {

        return UTT_TransactionsBusinessEventContract::newFromLedgerJournalTable(ledgerJournalTable);

    }

}

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

[DataContract]

public final class UTT_TransactionsBusinessEventContract extends BusinessEventsContract

{

    private LedgerJournalId  generalJournalNumber;

    private DataAreaId       legalEntity;

    private void initialize(LedgerJournalTable _ledgerJournalTable)

    {

        generalJournalNumber = _ledgerJournalTable.JournalNum;

        legalEntity          = _ledgerJournalTable.DataAreaId;

    }

    private void new()

    {

    }

    public static UTT_TransactionsBusinessEventContract newFromLedgerJournalTable(LedgerJournalTable _ledgerJournalTable)

    {

        var contract = new UTT_TransactionsBusinessEventContract();

        contract.initialize(_ledgerJournalTable);

        return contract;

    }

    [DataMember('GeneralJournalNumber'), BusinessEventsDataMember('GeneralJournalNumber')]

    public LedgerJournalId parmGeneralJournalNumber(LedgerJournalId _generalJournalNumber = generalJournalNumber)

    {

        generalJournalNumber = _generalJournalNumber;

        return generalJournalNumber;

    }

    [DataMember('LegalEntityId'), BusinessEventsDataMember('LegalEntityId')]

    public DataAreaId parmLegalEntity(DataAreaId _legalEntity = legalEntity)

    {

        legalEntity = _legalEntity;

        return legalEntity;

    }

}

---------------------------------------------------------------------
Trigger:

[ExtensionOf(classStr(LedgerJournalCheckPost))]

final class LedgerJournalCheckPost_C_UTT_Extension

{

    protected void updateJournalForPosted()

    {

        ledgerJournalTable      ledgerJournalTable, ledgerJournalTablelocal;

        next updateJournalForPosted();

        ledgerJournalTablelocal = this.parmLedgerJournalTable();    

        select firstonly ledgerJournalTable

            where ledgerJournalTable.Posted   == NoYes::Yes

            && ledgerJournalTable.RecId       == ledgerJournalTablelocal.RecId

            && ledgerJournalTable.JournalType == LedgerJournalType::Daily;

        if (ledgerJournalTable.RecId)

        {          if(BusinessEventsConfigurationReader::isBusinessEventEnabled(classStr(DTT_TransactionsBusinessEvent)))

            {

                DTT_TransactionsBusinessEvent::newFromLedgerJournalTable(ledgerJournalTable).send() ;

            }

        }

    }

}


Reference : https://anithasantosh.wordpress.com/2020/09/18/business-events-to-trigger-outbound-from-d365-fo/

https://jatomas.com/en/2019/11/20/developing-business-events-with-x/

https://jsonformatter.org/

No comments:

Post a Comment

validate offsetLedgerDimension in d365 FO

 /// <summary> /// This class is used to validate offsetLedgerDimension /// </summary> class PNG_InventMovValidateOffsetLedgerDi...