Dynamics Search Engine

Thursday, May 26, 2016

In Microsoft Dynamics AX 2012 how to get account lookup based on Ledger Account type, Bank Account type, Customer Account type, Vendor Account type etc.

This article explains about:
·         In Microsoft Dynamics AX 2012 how to get account lookup based on account type.
·         In Microsoft Dynamics AX 2012 how to get account lookup based on Ledger Account type, Bank Account type, Customer Account type, Vendor Account type etc.

Applied on: Dynamics AX 2012 R3 CU8.
Prerequisite: Basic Dynamics AX 2012 programming knowledge.
Target audience: AX programmers.
Assumption: You are familiar with Dynamics AX 2012.

In Microsoft Dynamics AX 2012 Account lookup works in a different way because dimension structure change in comparison with Microsoft Dynamics AX 2009.

Below are some screenshots which give an idea what output we are going to achieve.

A new table created with two fields e.g. Account type (LedgerJournalACType) and Account (LedgerDimensionAccount). The relation comes with the EDT when you drag and drop the EDT to this table fields to create a new field.










Sample output of Ledger account type. When you select Ledger it gives the segment option as well.
















Sample output of Customer account type.







A new form created with two fields e.g. Account type and Account. These are bound fields. Above table has been used as data source for this form. Field Account (LedgerDimensionAccount) at form data source has two methods called jumpRef() and resolveReference().





























JumpRef() code:
public void jumpRef()
{
    dimOnlinePaymController.jumpRef();
}

ResolveReference() code:
public Common resolveReference(FormReferenceControl _formReferenceControl)
{
    Common common = dimOnlinePaymController.resolveReference();

    return common;
}

We have few more methods at form control level. For Account field as control we need to take a segment entity control which should be bounded to data source field called LedgerDimensionAccount. You can get this control by right click on form design or field group or wherever you want.
On below screenshot we have a segment entry control and it has 6 methods. Code for all these methods I mentioned here in this article. The auto declare property of this control is set to Yes.
























Declaration at form level:
public class FormRun extends ObjectRun
{
    DimensionDynamicAccountController   dimOnlinePaymController;
}

Form init():
public void init()
{
    super();
   
    dimOnlinePaymController = DimensionDynamicAccountController::construct(RBAccountTypeLookup_DS, fieldStr(RBAccountTypeLookup, LedgerDimensionAccount), fieldStr(RBAccountTypeLookup, LedgerJournalACType));
    dimOnlinePaymController.parmIsDefaultAccount(true);
   
}

Method at form control level:
public void jumpRef()
{
    dimOnlinePaymController.jumpRef();
}

public Common resolveReference(FormReferenceControl _formReferenceControl)
{
    Common common = dimOnlinePaymController.resolveReference();

    return common;
}


Method at form control level:
public void jumpRef()
{
    dimOnlinePaymController.jumpRef();
}


Method at form control level:
public void loadAutoCompleteData(LoadAutoCompleteDataEventArgs _e)
{
    super(_e);

    dimOnlinePaymController.loadAutoCompleteData(_e);
}


Method at form control level:
public void loadSegments()
{
    super();

    dimOnlinePaymController.parmControl(this);
    dimOnlinePaymController.loadSegments();
}


Method at form control level:
public void lookup()
{
    switch (RBAccountTypeLookup.LedgerJournalACType)
    {
        case LedgerJournalACType::Bank:
            BankAccountTable::lookupBankAccount(this);
            break;
        case LedgerJournalACType::Cust:
            CustTable::lookupCustomer(this);
            break;
        case LedgerJournalACType::FixedAssets:
            AssetTable::lookupAccountNum(this);
            break;
        case LedgerJournalACType::Ledger:
            super();
            break;
        case LedgerJournalACType::Vend:
            VendTable::lookupVendor(this);
            break;
        default:
            super();
            break;
    }
}

Method at form control level:
public void segmentValueChanged(SegmentValueChangedEventArgs _e)
{
    super(_e);

    dimOnlinePaymController.segmentValueChanged(_e);
}


Method at form control level:

public boolean validate()
{
    boolean isValid;

    isValid = super();
    isValid = dimOnlinePaymController.validate() && isValid;

    return isValid;
}


Save your work and try to run the form.
The above code is available in Microsoft Dynamics AX 2012. Only thing I did is assembled the required code here to make is handy.

Hope this was useful for you. Feel free to leave your comments below.