Microsoft Dynamics AX/AX 2012

Display Method (form datasource) Performance 개선

Isaac Lee 2018. 5. 23. 15:50

Dynamics AX에서 Display method에 Database query를 사용하여 Field를 표시하는 경우가 종종 있습니다. 아주 유용하긴 하지만 과도하게 많이 사용할 경우 Display 필드의 표시 특성상 화면을 움직이거나 스크롤바 이동, 커서 이동등을 사용한 레코드 이동시에 속도를 따라가지 못하여 화면이 물결 치는(?) 현상이 나타나게 됩니다. 이는 해당 필드를 표시해야 할 필요성이 있을 때마다 DB에 Query를 보내기 때문인데 이를 조금이나마 줄여주면 성능이 개선 될 수 있습니다.

아래 소스는 Form의 Datasource에 Display Method를 만들어야 합니다.

1. classDeclaration 에 Map 선언

public class FormRun extends ObjectRun
{
    Map localMap;
}


2. 조회 버튼 클릭시 Map 초기화

void clicked()
{
    boolean ret = true;

    super();

    localMap = new Map(Types::Record, Types::Real);  // Unique Key 값을 사용

}


3. Form Datasource의 Display Method 

display InventQty getQty(FormDataSource _view)
{
    InventQty _returnQty;

    if (localMap.exists(_view))

    {
        _returnQty = localMap.lookup(_view);
    }
    else
    {
        select query 구문;

        _returnQty = Query 결과값;

        localMap.insert(_view, _returnQty);
    }

    return _returnQty;
}


Happy Daxing!!