Wednesday, 15 January 2025

Financial dimension Lookup filter in D365 FO X++

 /// <summary>

/// This class is an extension of DimensionLookup

/// </summary>

[ExtensionOf(formDataSourceStr(DimensionLookup, ds))]

final class BTC_DimensionLookup_DS_Extension

{

    /// <summary>

    /// This method is used to initilise the value

    /// </summary>

    public void init()

    {

        DimensionAttributeViewContract  dimAttrViewContract;

        QueryBuildDataSource            qBDSDimAttrCoBTCentre;

        QueryBuildDataSource            qBDSBTCUserCoBTCentreMaintain;

        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(DimAttributeOMCoBTCenter))

            {

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

                {

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

                    qBDSBTCUserCoBTCentreMaintain = qBDSDimAttrCoBTCentre.addDataSource(tableNum(BTC_UserCoBTCentreMaintain));

                    qBDSBTCUserCoBTCentreMaintain.joinMode(JoinMode::InnerJoin);

                    qBDSBTCUserCoBTCentreMaintain.relations(false);

                    qBDSBTCUserCoBTCentreMaintain.addLink(fieldNum(DimAttributeOMCoBTCenter, value),  fieldNum(BTC_UserCoBTCentreMaintain, coBTCentre));

                    qBDSBTCUserCoBTCentreMaintain.addRange(fieldNum(BTC_UserCoBTCentreMaintain, UserId)).value(queryValue(curUserId()));

                    qBDSBTCUserCoBTCentreMaintain.addRange(fieldNum(BTC_UserCoBTCentreMaintain, LegalEntity)).value(curExt());

                }

            }

        }

    }


}


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

/// <summary>

/// Extension class for DimensionEntryControl class

/// </summary>

[ExtensionOf(classStr(DimensionEntryControl))]

final class BTC_DimensionEntryControl_C_Extension

{

    

    /// <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 (BTC_UserCoBTCentreMaintain::checkUserExists(curUserId(), curExt()))

                {

                    if (_dimensionAttribute.Name == BTC_DefaultPurchaseOrderValues::A4CoBTCentreName)

                    {

                        BTC_UserCoBTCentreMaintain userCoBTCentreMaintain;


                        select firstonly RecId from userCoBTCentreMaintain

                        where userCoBTCentreMaintain.UserId == curUserId()

                            && userCoBTCentreMaintain.LegalEntity == curExt()

                            && userCoBTCentreMaintain.CoBTCentre == _newValue;


                        if (!userCoBTCentreMaintain.RecId)

                        {

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

                        }

                    }

                }

            }

            else 

            {

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

            }

        }

        return ret;

    }


}

Thursday, 9 January 2025

DefaultDimension in d365 FO X++

 Navigate to PurchTable methods you can find with DefaultDimension


this.DefaultDimension = this.mergeDimension(this.getDefaultDimension(),this.DefaultDimension);

this.DefaultDimension = this.mergeDimension(_purchAgreementHeader.DefaultDimension, this.DefaultDimension);

!DimensionDefaultFacade::areEqual(this.DefaultDimension, _purchTableOrig.DefaultDimension))

this.DefaultDimension       = this.copyDimension(_purchTableHistory.DefaultDimension);

Default dimension in d365 FO

public RefRecId getDefaultDimension()

{

    container   contDimSTructure    = [DefaultPurchaseOrderValues::CoentreName];

    container   attributeValue      = [this.Coentre];


    RefRecId defaultDimension = PurchOrderCreateUpdateAPI::createDefaultDimension(contDimSTructure,attributeValue);


    return defaultDimension;

}

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

public static DimensionDefault createDefaultDimension(container conAttribute,container attributeValue)

{

    DimensionAttributeValueSetStorage   valueSetStorage = new DimensionAttributeValueSetStorage();

    DimensionDefault        result;

    DimensionAttribute      dimensionAttribute;

    DimensionAttributeValue dimensionAttributeValue;

    int                     i;

     

    container               conAttr = conAttribute;

    container               conValue = attributeValue;

    str                     dimValue;

  

    for (i = 1; i <= conLen(conAttr); i++)

    {

        dimensionAttribute = dimensionAttribute::findByName(conPeek(conAttr,i));

  

        if (dimensionAttribute.RecId == 0)

        {

            continue;

        }

  

        dimValue = conPeek(conValue,i);

  

        if (dimValue != "")

        {

            dimensionAttributeValue = dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true);   

            valueSetStorage.addItem(dimensionAttributeValue);

        }

    } 

    result = valueSetStorage.save();

    return result;

}

Lookup method in d365 FO

 [ExtensionOf(formStr(PurchCreateOrder))]

final class _PurchCreateOrder_F_Extension

{

    void init()

    {

        next init();

        PurchTable_Coentre.registerOverrideMethod(methodStr(FormDataObject, lookup), formMethodStr(PurchCreateOrder, overrideCoentreLookup));

    }


    public void overrideCoentreLookup(FormStringControl _formControl)

    {

        Query query = new Query();

        QueryBuildDataSource qBDSInventCoentre;

        QueryBuildDataSource qBDSUserCoentreMaintain;


        SysTableLookup  sysTableLookup  = SysTableLookup::newParameters(tableNum(DimAttributeOMCoenter), _formControl);


        sysTableLookup.addLookupfield(fieldNum(DimAttributeOMCoenter, value));

        sysTableLookup.addLookupfield(fieldNum(DimAttributeOMCoenter, Name));


        qBDSInventCoentre = query.addDataSource(tableNum(DimAttributeOMCoenter));


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

        {

            qBDSUserCoentreMaintain = qBDSInventCoentre.addDataSource(tableNum(UserCoentreMaintain));

            qBDSUserCoentreMaintain.joinMode(JoinMode::InnerJoin);

            qBDSUserCoentreMaintain.relations(false);

            qBDSUserCoentreMaintain.addLink(fieldNum(DimAttributeOMCoenter, value),  fieldNum(UserCoentreMaintain, coentre));

            qBDSUserCoentreMaintain.addRange(fieldNum(_UserCoentreMaintain, UserId)).value(queryValue(curUserId()));

            qBDSUserCoentreMaintain.addRange(fieldNum(_UserCoentreMaintain, LegalEntity)).value(curExt());

        }

        sysTableLookup.parmQuery(query);

        sysTableLookup.performFormLookup();

    }

}


Common Data Service (CDS)

 Common Data Service (CDS)