Tạo form Year và Week lookup từ form SysDatelookup


03/09/2020- duocnt    930 Views    

GIỚI THIỆU

    -    Trong D36FO, với những FormDateControl, FormDateTimeControl, chúng ta chỉ có thể chọn được Date hoặc DateTime.

    -    Hiện tại D365FO không có control nào trên form có thể chọn Year hoặc Week of Year.

    -    Vì vậy, trong bài viết này sẽ hướng dẫn tạo form lookup để có thể chọn Year hoặc Week.

    -    Bài viết này sẽ lấy form SysDateLookup chuẩn của hệ thống và thêm vào 1 số chi tiết để có thể trở thành form như mong muốn.


GIAO DIỆN HOÀN THÀNH

    -    Year lookup



    -    Week lookup



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

  1. Tạo Base Enum với name DateTimeEnum gồm những element là Year,Month,Week v.v...
  2. Duplicate form SysDateLookup vào project với name WeekYearLookUp.
  3. Khai báo biến parmDateTimeEnum sử dụng toàn form với kiểu dữ liệu là DateTimeEnum.
  4. Thêm 1 đoạn code vào dưới cùng của phương thức init().
  5. Customize lại phương thức closeSelect() của form.
  6. Gọi WeekYearLookUp từ phương thức lookup của form control.



THỰC HIỆN

 1 - Tạo Base Enum với name DateTimeEnum gồm những element là Year,Month,Week v.v...

    -    Add vào project 1 BaseEnum với name DateTimeEnum và các element.

        +    Year.

        +    Month.

        +    Week.


2 - Duplicate form SysDateLookup vào project với name WeekYearLookUp.

    -    Tìm form SysDateLookup trong AOT và chọn Duplicate in project


    -    Rename form vừa duplicate thành WeekYearLookUp.


3 - Khai báo biến parmDateTimeEnum sử dụng toàn form với kiểu dữ liệu là DateTimeEnum.

    -    Vào phần code của form, khai báo biến với phạm vi sử dụng toàn form.

        DateTimeEnum    parmDateTimeEnum;



4 - Thêm  đoạn code vào dưới cùng của phương thức init().

  if(element.args().parmEnumType() == enumNum(DateTimeEnum))
  {
     parmDateTimeEnum = element.args().parmEnum();
  }



5 - Customize lại phương thức closeSelect() của form.

    -    Đoạn code cần customize trong phương thức closeSelect() với mục đích như sau:

          +    Xác định nơi gọi cần trả về Year hay Week.

          +    Chỉ thực hiện với FormStringControl FormIntControl.

    -    Thay toàn bộ code bên trong điều kiện if (fr) bằng code sau.

        if (fr)
        {
            fc = fr.selectedControl();
            if (classnum(FormStringControl) == fc.handle())
            {              
                if(parmDateTimeEnum == DateTimeEnum::Year)
                {                   
                    super(int2Str(year(selectedValue)));
 
                }
                else if(parmDateTimeEnum == DateTimeEnum::Week)
                {
                    super(int2Str(weekOfYear(selectedValue)));
                }               
            }
            else if (classnum(FormIntControl) == fc.handle())
            {
                if(parmDateTimeEnum == DateTimeEnum::Year)
                {
                    super(int2Str(year(selectedValue)));
 
                }
                else if(parmDateTimeEnum == DateTimeEnum::Week)
                {
                    super(int2Str(weekOfYear(selectedValue)));
                }
            }
        }



6 - Gọi WeekYearLookUp từ phương thức lookup của form control.

    -    Year lookup

        public void lookup()
        {
            super();
            Args args = new Args(identifierStr(WeekYearLookUp));
            args.parmEnum(DateTimeEnum::Year);
            args.parmEnumType(enumNum(DateTimeEnum));
            args.caller(element);
            FormRun lookupFormRun = ClassFactory::formRunClassOnClient(args);
            lookupFormRun.init();
            this.performFormLookup(lookupFormRun);
            lookupFormRun.wait();
        }



    -    Week lookup.

        public void lookup()
        {
            super();
            Args args = new Args(identifierStr(WeekYearLookUp));
 
            args.parmEnum(DateTimeEnum::Week);
            args.parmEnumType(enumNum(DateTimeEnum));
 
            args.caller(element);
            FormRun lookupFormRun = ClassFactory::formRunClassOnClient(args);
            lookupFormRun.init();
            this.performFormLookup(lookupFormRun);
            lookupFormRun.wait();
        }









Góp ý kiến

;
;