实现异步框架

已完成

在财务和运营应用中,长期运行的流程可能会超时。 要解决本问题,异步处理使用户能够在流程在后台运行时继续工作。

例如,您可能需要在处理大量数据或交易的应用程序中运行处理,并且您不希望中断日常业务流程。 因此,您可以使用异步框架在后台运行这些流程,同时用户可以继续其工作而不中断。

要异步运行流程,您将需要使用 FormRunGlobal 类中的 runAsync 方法,以调用要运行的静态方法。 如果流程在客户端运行,我们建议您使用 FormRun 类的 runAsync 方法。 Global 类具有 runAsync 方法,我们建议使用该方法以在客户端外部运行代码。

完成流程后,您可以使用 callback 方法显示消息。 只有 FormRun 类的 runAsync 方法将立即显示消息。 如果您使用 Global 类的 runAsync 方法,将需要刷新页面。

静态方法的签名必须:

  • 是静态的。
  • 返回一个容器作为输出参数。
  • 有一个用于 in 参数的容器。 如果需要,该容器可以容纳更多值。
  • 有一个用于 in 参数的取消标记。

下面的示例显示了一个可以用作 runAsync 的静态方法:

    /// <summary>
    /// Create entities asynchronously
    /// </summary>
    /// <param name = "_params">Parameters</param>
    /// <param name = "_cancellationToken">CancellationToken object</param>
    /// <returns></returns>
    static container runAsyncJob(container _params, System.Threading.CancellationToken _cancellationToken)
    {
        System.Exception _ex;

        try
        {
            // do something
        }
        catch(_ex)
        {
            throw error("Unsuccessfull");
        }

        return ["Successfull"];
    }

您可以对成功或异常结果使用另一个静态方法,其签名必须:

  • 是静态的。
  • 返回无效。
  • 以 AsyncTaskResult 作为 in 参数。

以下是结果的静态方法示例:

    /// <summary>
    /// Async callback
    /// </summary>
    /// <param name = "taskResult">Result of async import or export processing</param>
    static public void processAsyncDataExecutionResult(AsyncTaskResult taskResult)
    {
        container returnValue;
        System.Exception exception;

        if (taskResult != null)
        {
            // Return value from async method
            returnValue = taskResult.getResult();

            // Exception thrown by async method invocation.
            exception = taskResult.getException();

            if (ClrInterop::isNull(exception))
            {
                info(con2Str(returnValue));
            }
            else
            {
                error(exception.Message);
            }
        }
    }

现在 runAsync 函数可以使用这两个方法(没有类名的函数,在全局类中定义)。

    public static void main(Args _args)
    {
        System.Threading.CancellationTokenSource tokenSource = new System.Threading.CancellationTokenSource();
        
        // run job asynchronously
        
        runAsync(classNum(MyASyncClass),
                 staticMethodStr(MyASyncClass, runAsyncJob),
                 conNull(),
                 tokenSource.Token,
                 classNum(MyASyncClass),
                 staticMethodStr(MyASyncClass, processAsyncDataExecutionResult));
    }

runAsync 函数使用的参数必须包含以下组成部分:

  • 待运行类的类编号。
  • 异步运行的静态方法。
  • 用于 in 参数的容器。 容器参数的值将被设为实施方法的参数列表。
  • 回退标记。 回退标记参数的值将被设为实施方法的标记。
  • 返回结果的类编号。
  • 结果的静态方法。

要查看标准应用程序中先前信息的示例,我们建议查看财务和运营应用中的刷新实体列表功能,它位于数据管理工作区、框架参数实体设置