Showing posts with label Financial dimension. Show all posts
Showing posts with label Financial dimension. Show all posts

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;

    }


}

Monday, 20 November 2023

Get Financial Dimension values for Financial Dimension X++ in SQL

select DimensionFinancialTag.Value, DimensionFinancialTag.Description from DimensionFinancialTag
join DimensionAttributeDirCategory on DimensionAttributeDirCategory.DirCategory = DimensionFinancialTag.FinancialTagCategory
join DimensionAttribute on  DimensionAttribute.RecId = DimensionAttributeDirCategory.DimensionAttribute
and DimensionAttribute.Name = 'InBound'

Friday, 20 October 2023

Create method in View to display dimension values in D365 FO X++

Add field ->StringComputedColumn  -> add properties ->View method name as below and EDT


public static str displayDimensionValues()

    {

        str     sql         = SysComputedColumn::returnLiteral("");

        str     targetField = "AllocationAccount";

        TableId tableId     = tableNum(DimensionAttributeValueCombination);

        DimensionAttribute dimensionAttribute = DimensionAttribute::findByName(targetField);

        // The dimension attribute column should be valid sql, so it is safe to output.

        if(dimensionAttribute

            && dimensionAttribute.getStatus()                                     != DimensionAttributeStatus::Inactive

            && fieldName2Id(tableId, dimensionAttribute.DimensionValueColumnName) != 0)

        {

            sql = T4.dimensionAttribute.DimensionValueColumnName;

        }

        return sql;

    }

DimensionFinancialTag in D365 FO X++

  public RefRecId validateDimensions(Name _dimensionAttributeName, str _displayValue)

    {

        DimensionAttribute                 dimensionAttribute;

        RecId                                       dimFinancialCategoryRecid;

        DimensionFinancialTag           dimensionFinancialTag;

        dimensionAttribute               = DimensionAttribute::findByName(_dimensionAttributeName);

        dimFinancialCategoryRecid = dimensionAttribute.financialTagCategory();

        select firstonly RecId from dimensionFinancialTag

            where dimensionFinancialTag.FinancialTagCategory == dimFinancialCategoryRecid

            && dimensionFinancialTag.Value == _displayValue;

        return dimensionFinancialTag.RecId;

    }

Setting VendInvoiceInfoTable default values for custom fields - D365 FO

  When creating a vendor invoice and you are trying to populate custom fields on table VendInvoiceInfoTable you may find that the following ...