Tạo lookup cho FormControl lấy dữ liệu từ temp table trong D365FO


17/03/2020- duocnt    1120 Views    


Nội dung bài viết.

  1. Tạo project Finance Operations.
  2. Thiết lập những thông số cơ bản cho project.
  3. Tạo table MonthlyBudgetHeader với thuộc tính Table Type= Regular để lưu dữ liệu.
  4. Tạo table YearTmp với thuộc tình Table Type = InMemory.
  5. Tạo Form đơn giản với 1 FormControl.
  6. Override phương thức lookup của FormControl.
  7. Tạo MenuItem để mở form.

Ứng dụng sẽ như sau:




THỰC HIỆN:

1 - Tạo project Finance Operations.




2 - Thiết lập những thông số cơ bản cho project.

 - Chuột phải lên project mới tạo, chọn Properties. (trong bài này project tên MonthlyBudgetForm).

 - Model: chọn tên model của cty bạn. Trong ví dụ này Model được chọn là RSVN.

 - Synchronize Database on Build: True. Chọn true để khi build project, table sẽ được sync xuống Database.

3 - Tạo table MonthlyBudgetHeader với thuộc tính Table Type= Regular để lưu dữ liệu.

 - Chuột phải lên project => Add => New Item...

 - Chọn Data Model => Table => Đăt tên table => Add.

 - Mặc định table được tạo sẽ có thuộc tính Table TypeRegular.

 - Chuột phải vào Node Fields của table => New => Integer để tạo field mới kiểu Integer cho table.

 - Chuột phải lên FieldInt1 (field mới tạo) => Properties, và chỉnh các thuộc tính sau:

 => Name : Year.

 => Label: Year.

 - Field của table sau khi chỉnh sửa thuộc tính.

4 -Tạo table YearTmp với thuộc tình Table Type = InMemory.

 - Table này sẽ lưu dữ liệu tạm thời để hiển thị ra FormControl theo dạng Dropdownlist và không cần phải sync vào database.

 - Thực hiện lại thao tác tạo table như trên.

 - Đặt tên table là YearTmp.

 - Chỉnh thuộc tính Table Type từ Regular thành InMemory.

 - Add Field kiểu Integer và đặt thuộc tính Name của table là year.

5 - Tạo Form đơn giản với 1 FormControl.

 - Chuột phải lên project, chọn Add => New Item....

 - User Interface => Form => đặt tên Form1 => Add.

 - Mở Form1 vừa tạo, chuột phải lên "Design|Pattern: <unspecified>".

 - Apply pattern => Custom.


 - Chuột phải lên node "Data Sources" của Form1 => "New Data Source" (để tạo data source cho form).


 - Chuột phải lên "DataSource1" => "Properties" và chọn "MonthlyBudgetHeader" cho thuộc tính "Table".

 - Chuột phải lên "Design|Pettern: Custom" => "New" => "Integer" (vì field Year của table MonthlyBudgetHeader được tạo từ kiểu Integer).



 - Chuột phải lên "FormIntegerControl1" vừa tạo => "Properties" và thiết lập các thuộc tính sau:

 => Name : year.

 => Data Source: MonthlyBudgetHeader.

 => Data Field: Year.


6 - Override phương thức lookup của FormControl.

 - Chuột phải lên node Method của formcontrol "year" => chọn "Override" => "lookup".



 - Viết code lookup bên dưới super().




        public void lookup()

        {

            super();

            SysTableLookup                 _sysTableLookup;
            YearTmp                        _yearTmp;
            Enumerator                     _enumerator;
            List                           _list      = new list(types::Integer);
            for(int i=2017;i<2030;i++)

            {

                _list.addEnd(i);
            }
            _enumerator =_list.getEnumerator();
            _yearTmp.clear();
            while (_enumerator.moveNext())
            {
                _yearTmp.year   =  _enumerator.current();
                _yearTmp.insert();
            }
            Query                   _query = new Query();
            QueryBuildDataSource    _queryBuildDataSource;
            _sysTableLookup = SysTableLookup::newParameters(tableNum(YearTmp), this);
            _sysTableLookup.addLookupField(fieldNum(YearTmp, year));          
            _queryBuildDataSource =_query.addDataSource(tableNum(YearTmp));
            _sysTableLookup.parmQuery(_query);         
            _sysTabeLookup.parmTmpBuffer(_yearTmp);         
            _sysTableLookup.performFormLookup();
        }

7 - Tạo MenuItem để mở form và test.

 - Chuột phải lên project => "Add" => "New Item..."

 - User Interface => Display Menu Item => đặt tên cho MenuItem => Add.

 - Mở "DisplayMenuItem1" vừa mới tạo, chuột phải và chọn Properties. Thiết lập các thuộc tính như sau:

 => Object : Form1.

 => Label : Test Form.


 - Tạo Extension cho "SystemAdministration" và project.

-  Kéo và thả DisplayMenuItem1 SystemAdministration đã được Extension. Việc để MenuItem ở đâu là tùy chọn, trong ví dụ này, menuitem sẽ được  để trong SystemAdministration.

-  Build lại project và mở form.



Góp ý kiến

;
;