Saturday, March 18, 2017

D365O - How to add financial dimension in grid

This post outlines the steps; how to add financial dimensions (segmented control) in a grid in D365O.

Let's assume we are adding new table and form for below explanation;

New table contains two fields AccountType and LedgerDimension with relation to DimensionAttributeValueCombination table 


Form looks like this;













Set properties for segmented control under form design;

- Auto declaration = Yes
- Account type field = AccountType
- Controller class = DimensionDynamicAccountController
- Filter expression = %1

















1. Override modified method for LedgerDimension field under form's datasource
2. Override lookup and checkUserCustomLookup method on ledger dimension segmented control in form desgin















Datasource | D365O_FinancialDimension | LedgerDimension | modified

[DataSource]
    class D365O_FinancialDimension
    {
        [DataField]
        class LedgerDimension
        {
            void modified()
            {
                super();

                D365O_FinancialDimension_ds.refresh();
            }

        }

    }

Desgin | D365O_FinancialDimension_LedgerDimension | lookup

        public void lookup()
        {
            switch (D365O_FinancialDimension.AccountType)
            {
                case LedgerJournalACType::Bank:
                    BankAccountTable::lookupBankAccount(this);
                    break;
                case LedgerJournalACType::Cust:
                    CustTable::lookupCustomer(this);
                    break;
                case LedgerJournalACType::FixedAssets:
                    AssetTable::lookupAccountNum(this);
                    break;
                case LedgerJournalACType::Project:
                    ProjTable::lookupProjId(this, D365O_FinancialDimension);
                    break;
                case LedgerJournalACType::Vend:
                    VendTable::lookupVendor(this);
                    break;
                default:
                    super();
                    break;
            }
        }

Desgin | D365O_FinancialDimension_LedgerDimension | checkUserCustomLookup

public boolean checkUseCustomLookup(int _accountTypeEnumValue, int _secondaryAccountTypeEnumValue)
        {
            boolean returnValue;
           
            LedgerJournalACType accountType = any2Enum(_accountTypeEnumValue);
            switch (accountType)
            {
                case LedgerJournalACType::Bank:
                case LedgerJournalACType::Cust:
                case LedgerJournalACType::FixedAssets:
                case LedgerJournalACType::Project:
                case LedgerJournalACType::Vend:
                    returnValue = true;
                    break;
                default:
                    returnValue = false;
                    break;
            }
           
            return returnValue;
        }


Set D365O_FinancialDimensions form as startup object and run the form.























If you just want to see MainAccount in segmented control.

set the segmented control property Is default account = True