Asynchronous operations in D365FO (Runing background) using X++


06/11/2020- duocnt    1073 Views    

MỤC ĐÍCH

 - Để thực hiện tác vụ nào đó mà tác vụ đó sẽ được thực hiện ngầm ở Background.
 - Trong lúc đoạn code chạy, User vẫn có thể thao tác làm việc với giao diện.


ỨNG DỤNG HOÀN THÀNH.


BƯỚC THỰC HIÊN

  1. Method informAtBegining( sẽ được gọi ngay khi tác vụ bắt đầu với mục đích thông báo để User biết tác vụ đang được chạy ở Background).
  2. Method mainTask (Phương thức chính của tác vụ).
  3. Method FormCallBack_OperationCompleted (thông thường được viết trên form cần thực hiện tác vụ, với mục đích hiển thị thông báo đến User).
  4. Sự kiện click của Button.



THỰC HIỆN

Giả sử chúng ta đã có 1 class với name Asynchronous_Operations_MainTaskClass trong project. 

1 - Method informAtBegining( ).

 - Sẽ được gọi ngay khi tác vụ bắt đầu với mục đích thông báo để User biết tác vụ đang được chạy ở Background.

 - Viết phương thức informAtBegining() trong class trên.

    /// <summary>
    /// Method will be called at the beginging of process
    /// </summary>
    /// <param name = "_callerparameters"></param>
    /// <returns></returns>
    public static container informAtBegining(container _callerparameters)
    {
        str caller = conPeek(_callerparameters, 1);
        return([caller]);
    }


2 - Method mainTask (Phương thức chính của tác vụ).

 - Viết phương thức mainTask() trong class trên.

 - Phương thức này là phương thức hiện hiện tác vụ chính, trong ví dụ này không thực hiện tác vụ nào nên sẽ cho code delay lại 30 second để khi chạy code dễ nhận biết.

    public static container mainTask(container _callerparameters)
    {
        //code for doing something
        sleep(30000);
        str caller = conPeek(_callerparameters, 1);
        return([caller]);
    }


3 - Method FormCallBack_OperationCompleted().

 - Thông thường được viết trên form cần thực hiện tác vụ, với mục đích hiển thị thông báo đến User.

 - Tạo phương thức FormCallBack_OperationCompleted() trên form muốn thực hiện Async Operation.

 - Trong ví dụ này form có name là Tutorials_FormTest.

    public void FormCallBack_OperationCompleted(AsyncTaskResult _result)
    {
        container   _contResult;
        str         _strResult;
 
        _contResult = _result.getResult();
        _strResult  = conPeek(_contResult, 1);
        info('Process information : '+ _strResult);
    }


4 - Sự kiện click của Button.

    [Control("Button")]
    class CallAsync
    {
        /// <summary>
        ///
        /// </summary>
        public void clicked()
        {
            super();
                           
            //Inform to user to know that the operation still running in background
           element.runAsync(classNum(Asynchronous_Operations_MainTaskClass),            staticMethodStr(Asynchronous_Operations_MainTaskClass,informAtBegining),['The process is running in background'],
           System.Threading.CancellationToken::None, formMethodStr(Tutorials_FormTest,FormCallBack_OperationCompleted));
 
            //Inform to user to know that the operation completed
            element.runAsync(classNum(Asynchronous_Operations_MainTaskClass),             staticMethodStr(Asynchronous_Operations_MainTaskClass,mainTask),['The process is completed'],
            System.Threading.CancellationToken::None, formMethodStr(Tutorials_FormTest,FormCallBack_OperationCompleted));
        }
    }

Góp ý kiến

;
;