Wednesday, 30 July 2025

validate offsetLedgerDimension in d365 FO

 /// <summary>

/// This class is used to validate offsetLedgerDimension

/// </summary>

class PNG_InventMovValidateOffsetLedgerDimension

{

    /// <summary>

    /// This method is used to validate ledger

    /// </summary>

    /// <param name = "_ledgerDimension">RefRecId</param>

    /// <returns>str</returns>

    public str ledgervalidation(RefRecId _ledgerDimension)

    {

        str  message;


        DimensionValidationStatusContract dimensionValidationStatusContract =   LedgerDimensionValidation::getStatusForAccountingDate(_ledgerDimension,

                                                                                DateTimeUtil::getToday(DateTimeUtil::getUserPreferredTimeZone()),

                                                                                NoYes::No);


        if (!dimensionValidationStatusContract.isValid())

        {

            List validationMessages = dimensionValidationStatusContract.parmValidationMessages();


            ListEnumerator messagesEnumerator = validationMessages.getEnumerator();


            while (messagesEnumerator.moveNext())

            {

                Message += strFmt('%1',messagesEnumerator.current());

            }

        }


        return Message;

    }


}

DimensionLookup in d365 FO

 /// <summary>

/// This class is an extension of DimensionLookup

/// </summary>

[ExtensionOf(formDataSourceStr(DimensionLookup, ds))]

final class PNG_DimensionLookup_DS_Extension

{

    /// <summary>

    /// This method is used to initilise the value

    /// </summary>

    public void init()

    {

        DimensionAttributeViewContract  dimAttrViewContract;

        QueryBuildDataSource            qBDSDimAttrCostcentre;

        QueryBuildDataSource            qBDSSTCUserCostcentreMaintain;

        DimensionAttribute              dimAttr;


        next init();


        FormRun formRun = element.args().caller();

        if (formRun.name() == formStr(PurchTable))

        {

            dimAttr             = element.args().record();

            dimAttrViewContract = DimensionAttribute::getViewContract(dimAttr.RecId);

            if (dimAttrViewContract.parmViewId() == tableNum(DimAttributeOMCostCenter))

            {

                if (PNG_UserCostCentreMaintain::checkUserExists(curUserId(), curExt()))

                {

                    qBDSDimAttrCostcentre= this.query().dataSourceNo(1);

                    qBDSSTCUserCostcentreMaintain = qBDSDimAttrCostcentre.addDataSource(tableNum(PNG_UserCostCentreMaintain));

                    qBDSSTCUserCostcentreMaintain.joinMode(JoinMode::InnerJoin);

                    qBDSSTCUserCostcentreMaintain.relations(false);

                    qBDSSTCUserCostcentreMaintain.addLink(fieldNum(DimAttributeOMCostCenter, value),  fieldNum(PNG_UserCostCentreMaintain, costcentre));

                    qBDSSTCUserCostcentreMaintain.addRange(fieldNum(PNG_UserCostCentreMaintain, UserId)).value(queryValue(curUserId()));

                    qBDSSTCUserCostcentreMaintain.addRange(fieldNum(PNG_UserCostCentreMaintain, LegalEntity)).value(curExt());

                }

            }

        }

    }


}


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

/// <summary>

/// Extension class for DimensionEntryControl class

/// </summary>

[ExtensionOf(classStr(DimensionEntryControl))]

final class PNG_DimensionEntryControl_C_Extension

{

    /// <summary>

    /// applyBuild()

    /// </summary>

    public void applyBuild()

    {

        //element.

        DimensionEntryControlBuild build;

        build = this.build();

        if(this.formRun().args().menuItemName() == menuItemDisplayStr(PNG_InventJournalTransOffsetDimension))

        {

            build.parmValueSetReferenceField('STCOffsetLedgerDimension');

        }

        next applyBuild();

    }


    /// <summary>

    /// This method is used to modify dimension values

    /// </summary>

    /// <param name = "_dimensionAttribute">DimensionAttribute</param>

    /// <param name = "_origValue">DimensionValue</param>

    /// <param name = "_newValue">DimensionValue</param>

    /// <returns>boolean</returns>

    protected boolean modifyingDimensionValue(

        DimensionAttribute      _dimensionAttribute,

        DimensionValue          _origValue,

        DimensionValue          _newValue)

    {

        boolean ret;


        ret = next modifyingDimensionValue(_dimensionAttribute, _origValue, _newValue);


        if (this.formRun().name() == formStr(PurchTable))

        {

            if (_newValue)

            {

                if (PNG_UserCostCentreMaintain::checkUserExists(curUserId(), curExt()))

                {

                    if (_dimensionAttribute.Name == PNG_DefaultPurchaseOrderValues::A4CostCentreName)

                    {

                        PNG_UserCostCentreMaintain userCostCentreMaintain;


                        select firstonly RecId from userCostCentreMaintain

                        where userCostCentreMaintain.UserId == curUserId()

                            && userCostCentreMaintain.LegalEntity == curExt()

                            && userCostCentreMaintain.CostCentre == _newValue;


                        if (!userCostCentreMaintain.RecId)

                        {

                            throw warning(strFmt("@SYS135696", _newValue));

                        }

                    }

                }

            }

            else 

            {

                throw warning('Field Cost centre must be filled in.');

            }

        }

        return ret;

    }


}

Purchase order from Master planning in d365 FO

[ExtensionOf(classStr(ReqTransPoMarkFirm))]

public final class STC_ReqTransPoMarkFirm_Extension

{

    /// <summary>

    /// autoApprovePurchaseOrder

    /// </summary>

    /// <param name = "_purchOrder">PurchTable</param>

    protected void autoApprovePurchaseOrder(PurchTable _purchOrder)

    {

        VersioningPurchaseOrder versioningPurchaseOrder;


        next autoApprovePurchaseOrder(_purchOrder);


        versioningPurchaseOrder = VersioningPurchaseOrder::newPurchaseOrder(_purchOrder);

        if (versioningPurchaseOrder.canChangeBeRequested())

        {

            ttsbegin;

            versioningPurchaseOrder.createChangeRequest();

            ttscommit;

        }

    }

}


Bank payment file name in d365 FO

 CONCATENATE("Pain001_",text(CustVendProcessedPayments.'>Relations'.RefRecId.'>Relations'.VendPaymentMode.LastSequenceNumber),

CASE('$PaymentByDebtor'.'$FirstPaymentInGroup'.DebtorAccount.Identification.Number, 

"1562170545","_DFD_", 

"160985023","_DFG_",

"_None_") & DATETIMEFORMAT(SESSIONNOW(), "MMdd"))



PurchaseReceipts post in d365 FO

 Post PurchaseReceipts:


try

{

    DataAreaId dataAreaId = this.getPurchTableCrosscompany(_request.parmPurchaseOrderNumber()).DataAreaId;


    changecompany(dataAreaId)

    {

        select firstonly purchTable

            where purchTable.PurchId == purchId

            && purchTable.DataAreaId == dataAreaId;

                


        ttsBegin;

        // Create PurchParamUpdate table

        purchFormLetterParmData = PurchFormletterParmData::newData(DocumentStatus::PackingSlip, VersioningUpdateType::Initial);


        purchFormLetterParmData.parmOnlyCreateParmUpdate(true);

        purchFormLetterParmData.createData(false);

        purchParmUpdate = purchFormLetterParmData.parmParmUpdate();


        // Set PurchParmTable table

        purchParmTable.clear();

        purchParmTable.TransDate                = _request.parmProductReceiptDate();

        purchParmTable.Ordering                 = DocumentStatus::PackingSlip;

        purchParmTable.ParmJobStatus            = ParmJobStatus::Waiting;

        purchParmTable.Num                      = packingSlipId;

        purchParmTable.PurchId                  = purchTable.PurchId;

        purchParmTable.PurchName                = purchTable.PurchName;

        purchParmTable.DeliveryName             = purchTable.DeliveryName;

        purchParmTable.DeliveryPostalAddress    = purchTable.DeliveryPostalAddress;

        purchParmTable.OrderAccount             = purchtable.OrderAccount;

        purchParmTable.CurrencyCode             = purchTable.CurrencyCode;

        purchParmTable.InvoiceAccount           = purchTable.InvoiceAccount;

        purchParmTable.ParmId                   = purchParmUpdate.ParmId;

        purchParmTable.insert();


        List            parmReceiptLines =   _request.parmReceiptLines();

        ListIterator    listIterator     =   new  ListIterator(parmReceiptLines);


        while(listIterator.more())

        {

            BTC_PurchaseReceiptsRequestLineContract linesContract;


            linesContract = listIterator.value();


            PurchLine       purchLineLoc;

            EcoResCategory  ecoResCategory;

            InventDim       inventDim;


            if (linesContract.parmFESLineNumber())

            {

                select firstonly purchLineLoc

                    where purchLineLoc.PurchId  == _request.parmPurchaseOrderNumber()

                       && purchLineLoc.LineNumber == linesContract.parmFESLineNumber()

                exists join inventDim

                    where inventDim.inventDimId == purchLineLoc.InventDimId;

            }


            if (purchLineLoc.RecId)

            {

                purchParmLine.InitFromPurchLine(purchLineLoc);

                purchParmLine.ReceiveNow    = linesContract.parmReceiptQty();

                purchParmLine.ParmId        = purchParmTable.ParmId;

                purchParmLine.TableRefId    = purchParmTable.TableRefId;

                purchParmLine.setQty(DocumentStatus::PackingSlip, false, true);

                purchParmLine.setLineAmount();

                purchParmLine.insert();

            }


            listIterator.next();

        }


        purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);

        purchFormLetter.transDate(_request.parmProductReceiptDate());

        purchFormLetter.proforma(false);

        purchFormLetter.specQty(PurchUpdate::All);

        purchFormLetter.purchTable(purchTable);

        

        purchFormLetter.parmParmTableNum(purchParmTable.ParmId);

        purchFormLetter.parmId(purchParmTable.ParmId);

        purchFormLetter.purchParmUpdate(purchFormLetterParmData.parmParmUpdate());

        purchFormLetter.run();


        ttsCommit;


        response.parmProductReceiptNumber(purchParmTable.Num);

        response.parmStatus(enum2Value(PurchTable::find(_request.parmPurchaseOrderNumber()).PurchStatus));

        

        response.parmMessageDetails(strFmt("@Steamships:BTC_POReceipt001", purchParmTable.Num));

    }

}

catch

{

    SysInfologEnumerator    infologEnum;

    SysInfologMessageStruct infomessageStruct;


    infologEnum = SysInfologEnumerator::newData(infolog.infologData());


    while(infologEnum.moveNext())

    {

        infomessageStruct = SysInfologMessageStruct::construct(infologEnum.currentMessage());

        responceMessage   += infomessageStruct.message() + BTC_PurchaseReceiptsAPIConstants::empty;

    }

    response.parmError(responceMessage);

}

validate offsetLedgerDimension in d365 FO

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