实现异步框架
在财务和运营应用中,长期运行的流程可能会超时。 要解决本问题,异步处理使用户能够在流程在后台运行时继续工作。
例如,您可能需要在处理大量数据或交易的应用程序中运行处理,并且您不希望中断日常业务流程。 因此,您可以使用异步框架在后台运行这些流程,同时用户可以继续其工作而不中断。
要异步运行流程,您将需要使用 FormRun 和 Global 类中的 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 参数的容器。 容器参数的值将被设为实施方法的参数列表。
- 回退标记。 回退标记参数的值将被设为实施方法的标记。
- 返回结果的类编号。
- 结果的静态方法。
要查看标准应用程序中先前信息的示例,我们建议查看财务和运营应用中的刷新实体列表功能,它位于数据管理工作区、框架参数、实体设置。