【问题标题】:Kofax Total Agility: moving a document job programmatically to a specific process stepKofax Total Agility:以编程方式将文档作业移动到特定流程步骤
【发布时间】:2021-02-02 19:05:21
【问题描述】:

我正在使用基本的 BPMN(业务流程模型和表示法)开发 Kofax Total Agility。 此过程包含不同的步骤:

  • 分类
  • 文档审核
  • 数据提取
  • 文档验证和验证
  • 一个 c# 外部调用
  • 终于导出

我的目标是通过开发模块让未来的流程更易于管理。 在 Workspace 中,我可以导入文档并管理所有流程,最后导出文档,它工作正常。

我试图在 API 文档中找到可以在外部调用和使用的服务和方法。在这个过程中,当我到达过程的 externalCall 步骤时,我想根据在验证步骤中检索到的值返回分类步骤或文档审查。

将变量从验证传递到 externalCall 很容易。我的问题是要知道如何以编程方式将活动“移动”到上一步,以便在流程中导入一个或多个文档。在这种情况下,我想在工作流中的验证和 externalCall 之后将文档重新分配给验证步骤或提取步骤。

我在 ActivityService 中找到了诸如 ReassignActivity 之类的方法。我的问题是知道如何获得所需的变量以使其成为可能。例如,如何检索 ResourceIdentity 对象(原始资源和新资源)、JobActivityIdentity 对象等。我需要创建一个新 Job 吗?如果是,我是否必须获得上一份工作的 jobId ?

【问题讨论】:

  • 是否有更深入的原因需要以编程方式执行此操作?简单的方法是仅使用一个决策节点(或其中的几个)来决定流程是导出还是流向先前的活动。
  • 我个人没有任何理由......我的公司确实有这样的要求。我想我在这里找到了信息:docshield.kofax.com/KTA/en_US/7.7.0-o3xtk9orwd/help/API/latest/… 我确实有一个使用编程用例。谢谢

标签: c# kofax


【解决方案1】:

我终于找到了解决办法。我创建了一个 dll,允许我在工作流的某个点创建新作业并删除以前的作业。

为此,我使用了 JobIdentity CreateJobAndStartAt 方法。在这个阶段,很容易得到所需的 sessionId,因为它是一个系统变量。

基本上,我是这样实现的:

public class AppJobService
{
    public JobIdentity CreateJobAndStartAt(string sessionId, string jobIdentityId)
    {
        JobIdentity returnValue = null;
        var js = new sdk.JobService();

        var pai = new ProcessActivityIdentity();
        pai.ActivityName = Constants.activityName;

        var pi = new ProcessIdentity();
        pi.Name = Constants.processIdentityName;

        try
        {
            returnValue = js.CreateJobAndStartAt(sessionId, pi, new JobInitialization(), pai);

            // call terminate job
            JobIdentity currentJi = new JobIdentity();
            currentJi.Id = jobIdentityId;
            TerminateJob(sessionId, currentJi);
        }
        catch (Exception ex)
        {
            throw;
        }
        return returnValue;
    }

    void TerminateJob(string sessionId, JobIdentity jobIdentity)
    {
        var js = new sdk.JobService();
        try
        {
            js.TerminateJob(sessionId, jobIdentity);
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}

此代码运行良好! 我的问题如下:

  1. 有没有办法动态检索进程名称并将其作为变量传递?在这个阶段,我对其进行了硬编码:Constants.activityName
  2. 还有一种方法可以将变量传递给这个新的 Job 吗?例如,如果调用了 dll,则返回 true 的布尔值
  3. 有没有办法检索以前的活动名称?如果我计划在流程的不同步骤重用该方法并在前一步创建一个新工作,这可能会很有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多