Retrieving BaseEnum name, label and value in Dynamics AX (D365FO) using X++


09/11/2020- duocnt    885 Views    

MỤC ĐÍCH.

- Trong quá trình viết code, có đôi khi chúng ta sẽ đụng tới những BaseEnum của hệ thống với rất nhiều EnumElement. Hơn nữa những EnumElement này có Label show trên UI và Name trong AOT nhìn rất khác nhau, do đó chúng ta không thể biết được element nào để lấy ra cho chính xác khi code.

- Ví dụ điển hình BaseEnum ReqRefType. Đây là 1 BaseEnum của hệ thống thuộc model Application Suite. Trong BaseEnum này có 32 EnumElement . Điều đáng nói là rất nhiều EnumElement  Label Name nhìn không tương ứng nhau (không thể đoán được) như Name "BOMPlannedOrder" thì có Label trên UI là "Planned Production Order", Name "ItemPlannedOrder" thì Label trên UI là "Planned purchase orders".

- Do đó, trong bài viết này sẽ hướng dẫn các bạn cách lấy ra tất cả Name,Label Value của BaseEnum cụ thể nào đó, để chúng ta có cái nhìn rõ ràng hơn, chính xác hơn và từ đó có thể lấy EnumElement chính xác khi coding.


KẾT QUẢ.

Trong hướng dẫn này, mình sẽ "mổ xẻ" BaseEnum ReqRefType. Insert giá trị vào 1 table SQL Server để xem tổng thể như hình bên dưới.


CÁC BƯỚC THỰC HIỆN.

  1. Table EnumValueTmp: để lưu giá trị từ BasEnum.
  2. Class RetrieveEnumValue: để "mổ xẻ" BaseEnum ReqRefType.


THỰC HIỆN.

1 - Table EnumValueTmp cần 3 field để như bên dưới.


2 - Class RetrieveEnumValue với code nhu sau:

class RetrieveEnumValue
{
    public static void main(Args _args)
    {
        DictEnum        _dictEnum;       
        EnumValueTmp    _enumValueTmp;
 
        delete_from _enumValueTmp;
        _dictEnum = new DictEnum(enumName2Id("ReqRefType"));
        for (int i=1; i < _dictEnum.values(); i++)
        {
            _enumValueTmp.ElementValue    =  _dictEnum.index2Value(i);
            _enumValueTmp.ElementLabel    =  _dictEnum.index2Label(i);
            _enumValueTmp.ElementName     =  _dictEnum.index2Symbol(i);
            _enumValueTmp.insert();
        }
        info("Retrievingcompleted ...");
    }
}

 - Sau đó thực hiện những bước cơ bản như tạo ActionMenuItem để gọi class RetrieveEnumValue, đưa ActionMenuItem vào Extension Menu để có thể chạy đoạn code trên..

 - Sau khi chạy đoạn code trên, vào SQL Server, gọi câu Select để xem kết quả

select a.ELEMENTNAME,a.ELEMENTLABEL,a.ELEMENTVALUE 
From EnumValueTmp a
order by a.ELEMENTVALUE



Góp ý kiến

;
;