如何获取控制器中流程实例的ID?

2024-04-11

我的环境:

Alfresco Share v5.2.d(r134641-b15、Aikau 1.0.101.3、Spring Surf 5.2.d、Spring WebScripts 6.13、Freemarker 2.3.20-alfresco-patched、Rhino 1.7R4-alfresco-patched、Yui 2.9.0-alfresco-20141223)

Alfresco 社区 v5.2.0 (r134428-b13) 架构 10005

当我启动工作流程时,我可以分配执行者 - 将参与业务流程的用户列表。我需要获取所有这些用户的列表,并在 reviewTask 屏幕中显示该列表。

为了显示此数据,我有自定义 FreeMarker 模板。我将从此模板中调用我的 Web 脚本。

为了通过 REST 与存储库交互,我使用 Web 脚本框架 MVC - 该控制器执行接收用户列表和 JSON 响应的 FreeMarker 模板的逻辑。

我已被提供好主意 https://stackoverflow.com/questions/42745913/how-to-queries-all-the-assignments-from-the-repository,如何做到这一点。但我遇到了一些问题。

假设我启动了业务流程的多个实例。在工作流控制台中我可以看到以下内容:

id: activiti$1801 , desc: DESCRIPTION_1 , start date: Sun Mar 12 19:19:09 GST 2017 , def: activiti$activitiParallelReview v1
id: activiti$2005 , desc: DESCRIPTION_2 , start date: Sun Mar 12 20:11:57 GST 2017 , def: activiti$activitiParallelReview v1
id: activiti$2138 , desc: DESCRIPTION_3 , start date: Sun Mar 12 20:12:55 GST 2017 , def: activiti$activitiParallelReview v1

因此我有三个ID:

activiti$1801
activiti$2005
activiti$2138

这些 ID 仅在工作流程控制台中可供我使用。

如何在控制器中获取这些标识符?

例如,我可以编写一个由 Activiti 调用的类吗?比方说,

public class SomeListener implements TaskListener {
...
    @Override
    public void notify(DelegateTask task) {
        ...
        String taskId = task.getId();
        ...
    }
}   

然后将其附加到某个任务的完成事件并将 ID 传递给控制器​​。

这是正确的方法吗?...

我将非常感谢您提供的信息。谢谢大家。


我写了一个类来实现ExecutionListener http://docs.alfresco.com/5.1/concepts/wf-process-def-listeners-execution.html界面。然后将其添加为转换的侦听器mswf:submitParallelReviewTask to mswf:activitiReviewTask.

我需要的所有属性,我都可以在这里获得(感谢加格拉瓦尔 https://stackoverflow.com/users/685641/gagravarr为了他的answer https://stackoverflow.com/questions/33798544/alfresco-get-username-in-workflow):

public class PropertiesReceiver implements ExecutionListener {
    private static final long serialVersionUID = 1L;
    private static Log logger = LogFactory.getLog(PropertiesReceiver.class);

    @Override
    public void notify(DelegateExecution delegateExecution) throws Exception {
        // TODO Auto-generated method stub
        String processInstanceId = delegateExecution.getProcessInstanceId();
        logger.debug("processInstanceId == " + processInstanceId);

        ActivitiScriptNodeList assignees = 
                (ActivitiScriptNodeList) delegateExecution.getVariable("bpm_assignees"); 
        for (ActivitiScriptNode personNode : assignees) {
            String username = (String) personNode.getProperties().get("cm:userName");
            logger.debug("username == " + username);
        }
    }
}

alfrescotomcat-stdout.2017-03-13.log:

...
2017-03-13 11:03:12,244  DEBUG [mswf.bpm.PropertiesReceiver] [http-apr-8080-exec-3] processInstanceId == 26205
2017-03-13 11:03:12,248  DEBUG [mswf.bpm.PropertiesReceiver] [http-apr-8080-exec-3] username == first
2017-03-13 11:03:12,250  DEBUG [mswf.bpm.PropertiesReceiver] [http-apr-8080-exec-3] username == second
...

但这是一个单独的项目,打包在 AMP 文件中。


好吧,另一种方式。我可以获取流程实例的 idScriptExecutionListener http://dev.alfresco.com/resource/docs/java/org/alfresco/repo/workflow/activiti/listener/ScriptExecutionListener.html:

execution.getProcessInstanceId();

并打电话露天 REST API https://api-explorer.alfresco.com/api-explorer从共享端检索我需要的所有信息(感谢马丁·埃赫 https://community.alfresco.com/people/mehe).

例如,此调用允许获取所有执行程序:

http://localhost:8080/alfresco/api/-default-/public/workflow/versions/1/processes/26205/variables

,where 26205 == id流程实例的。

但是我应该在哪里保存这个 ID 才能从共享中访问它?我可以在工作流模型中添加方面吗?它是否正确?


请尝试这个。

public JSONObject test(String userName) {


        JSONObject allTasks = new JSONObject();

        companyHome = repository.getCompanyHome();
        try {
            List<WorkflowTask> wft=serviceRegistry.getWorkflowService().getAssignedTasks(userName,WorkflowTaskState.IN_PROGRESS );

                JSONArray ja = new JSONArray();
                System.out.println("WF sizes = "+wft.size());
                for (WorkflowTask  temp : wft) {
                    JSONObject userWFDetails = new JSONObject();

                    userWFDetails.put("taskId", temp.getId());
                    userWFDetails.put("taskDesc", temp.getDescription());
                    userWFDetails.put("wfInstanceId", temp.getPath().getInstance().getId());

                    System.out.println("wf tasks-"+temp);
                    System.out.println("task id-"+temp.getId());
                    System.out.println("wf instance id-"+temp.getPath().getInstance().getId());
                    System.out.println("wf path id-"+temp.getPath().getId());
                    ja.put(userWFDetails);
                }           
                allTasks.put("userTasksDetails", ja);
            } catch (Exception e) {
            e.printStackTrace();
        }
        return allTasks;
    }

传递您的用户名。您将获得所有用户任务详细信息。 json 格式的工作流实例详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取控制器中流程实例的ID? 的相关文章

  • 5.2 activiti任务监听器TaskListener

    1 任务监听器定义 任务监听器用于在特定的任务相关事件发生时 执行自定义的Java逻辑或表达式 2 监听器监听的事件 String EVENTNAME CREATE create 创建 当任务已经创建 并且所有任务参数都已经设置时触发 St
  • Activiti 学习(二)—— Activiti 流程定义和部署

    概述 在这一节 我们将创建一个 Activit 工作流 并启动这个流程 主要包含以下几个步骤 定义流程 按照 BPMN 的规范 使用流程定义工具 用流程符号把整个流程描述出来 部署流程 把画好的流程定义文件 加载到数据库中 生成表的数据 流
  • Activiti启动流程实例,runtimeService.startProcessInstanceByKey

    启动流程实例 添加进businessKey 本质 act ru execution表中的businessKey的字段要存入业务标识 public class BusinessKeyAdd public static void main St
  • activiti7-2-流程定义、实例、任务查询、任务处理、压缩部署、定义查询、定义删除、定义资源查询、历史信息查询

    我是一个目录 1 流程定义 1 1 绘制流程图 1 2 简单介绍API和原理机制 1 2 1 API 1 2 2 原理机制 1 3 流程定义部署测试类 1 4 分析影响的表 2 流程实例 2 1 启动流程实例 2 2 分析影响的表 3 任务
  • (四)activiti7大服务service详解——2 RuntimeService

    前言 在 Activiti 中 每当一个流程定义被启动一次之后 都会生成一个相应的流程对象实例 Runtime Service 提供了启动流程 查询流程实例 设置获取流程实例变量等功能 此外它还提供了对流程部署 流程定义和流程实例的存取服务
  • camunda 流程引擎如何开始并行任务,且有哪些实现方式?

    认识并行任务 在流程引擎开发中 稍微复杂一点的项目都会遇到并行任务 什么是并行任务呢 就是在完成一个流程节点后 下一步会同时开始多个任务 且任务与任务之间互不影响 这个说起来真的有点绕 刚开始我真不理解 试了好多次才想明白 下面就画2条不同
  • 逐步寻找 Activiti Alfresco Workflow 教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在哪里可以找到 Activiti Alfresco 工作流程 尤其是自定义工作流程 的简单教程 我是 Alfresco Activiti Worf
  • 如何通过 RESTful API 在 Alfresco 中创建文件夹

    我在用新鲜文档适用于安卓 我可以使用以下 API 调用登录 Alfresco 服务器 GET alfresco service api login u username pw password 但是如何在 Alfresco 中创建新文件夹呢
  • 使用版本将文件保存在露天并下载最新版本

    我与 alfresco Community 4 0 一起工作 我使用了这个罐子alfresco web service client 4 0 d jar 使用此代码我可以将我的 test pdf 文件保存在 alfresco 中 File
  • cmis或web脚本使用?

    我想使用 alfresco 和 activiti 工作流引擎构建一个 JavaEE GED 应用程序 用于管理和监控组织的邮件 信件 传真 邮件等 由于我是 alfresco 的新手 我想知道在我的情况下与 alfresco 进行通信的最佳
  • 【工作流Activiti】了解工作流

    1 什么是工作流 工作流 Workflow 就是通过计算机对业务流程自动化执行管理 它主要解决的是 使在多个参与者之间按照某种预定义的规则自动进行传递文档 信息或任务的过程 从而实现某个预期的业务目标 或者促使此目标的实现 通俗来讲 就是业
  • Maven 条件依赖

    我们希望根据客户的选择捆绑来自 Alfresco 或 Jackrabbit 或 的库依赖项 依赖项的数量实际上根据所选供应商的不同而有所不同 我们如何在 Maven 级别提供钩子 以便最终产品只包含根据客户选择的依赖 jar 您可以通过将所
  • 集成 Liferay 和 Alfresco

    我使用 Liferay 版本 5 2 3 和 Alfresco Community Edition 我想将 Alfresco 与 Liferay 集成 我想将 Alfresco 显示为 Liferay 中的一个 portlet 有人可以告诉
  • 如何将候选用户列表传递给 alfresco 中的 activiti 工作流任务?

    我希望能够传递作为任务候选者的用户列表 用户是从数据列表中检索的 不能作为一个组使用 Activiti candidateUsers 似乎是正确的方法 假设已获取用户并将其设置在变量 ipw reviwers 中
  • Alfresco 默认工作流程模板更改

    我正在运行 alfresco 5 0 a 我想修改默认的 activitiAdhoc 模板来设置任务的标题和描述 当通过脚本将文件添加到目录时 我运行 activti 流程 我的剧本是 var workflow actions create
  • Alfresco 社区企业功能对比

    我见过这个问题 https stackoverflow com questions 5256425 what is the difference between alfresco community edition and alfresco
  • 如何管理露天的访问权限

    大家好 提前感谢您的帮助 我正在尝试在露天配置访问权限 但现在陷入了一个场景如果有人定义实现此功能的正确方法 那将会有很大帮助现在我的问题是 我想创建一个网站 所有用户都可以访问 然后将在该站点中创建文件夹和子文件夹 如果需要 我准备自定义
  • Ftp 仅在 .NET 4.0 中抛出 WebException

    我有以下 C 代码 当针对 NET Framework 3 5 或 2 0 编译时 它运行得很好 我没有针对 3 0 进行测试 但它很可能也能工作 问题是 当针对 NET Framework 4 0 构建时它会失败 FtpWebReques
  • logger.log 未记录到 alfresco.log

    我正在尝试在与 Alfresco 中的模板页面相对应的 javascript 文件中使用 logger log Hello 我设置了以下内容 在custom log4j properties中 覆盖log4j properties log4
  • 任务编辑文档预览组件Alfresco

    第一个问题 我想以工作流程任务编辑的形式实现文档预览 我该怎么做 我尝试去适应document details xml and document details ftl to workflow details xml and workflo

随机推荐

  • cakephp - 获取表名称及其列详细信息

    有谁知道如何从模型名称获取表名称 另外我想获取该模型 表名称的所有列名称及其类型 是否有可能获得给定型号名称的此类详细信息 Thanks 表名 要获取该表 请参阅 this gt Model gt table 或者检查类变量的模型 useT
  • geocomplete 不是使用自动完成的函数

    您好 我正在使用自动填充代码 收到错误 geocomplete 不是一个函数 如果在本地 单独的文件 中使用它 它对我有用 可能是什么错误 function location geocomplete alert gine details g
  • 如何知道 RecyclerView / LinearLayoutManager 是否滚动到顶部或底部?

    目前我正在使用以下代码来检查是否应启用 SwipeRefreshLayout private void laySwipeToggle if mRecyclerView getChildCount 0 mRecyclerView getChi
  • 无法连接到数据库来执行身份功能

    我使用 ASP NET MVC5 创建了一个新应用程序 使用个人用户帐户来确保安全性 并使用代码优先迁移来进行模型 数据库建模 所有选项均为默认 我想为其设置自定义用户和角色 所以我使用创建了一个种子RoleManager and User
  • Mongodb findAndModify节点js

    以下代码在 Node js 中给了我一个异常 需要删除或更新 var args query id id update set data new true remove false db collection COLLECTION INVEN
  • 如何使用 PHP 将 XPath 表达式作为 XSL 参数传递?

    我有一个非常大的 XML 文件 我要从中提取信息 并将其转换为不同的 XML 格式 我已经完美地运行了转换本身 所以现在我想通过使用 PHP 传递变量来使其更加灵活select 标准 以下是我正在使用的工作 XSLT 代码 为简单起见 进行
  • ansible 有 yaml 编辑模块吗?

    我需要修改 yaml 文件 施洛德配置 http schleuder2 nadir org documentation v2 2 index html 并且我想从 ansible 剧本中执行此操作 是否有模块可以执行此操作 很难用谷歌搜索这
  • scanf("%d", &value) 中的字符输入[重复]

    这个问题在这里已经有答案了 简而言之 我的代码是 include
  • 非负矩阵分解中的评分预测

    我正在关注这个博客http www quuxlabs com blog 2010 09 matrix factorization a simple tutorial and implementation in python http www
  • 在Android Studio中编译Cordova时出现“java:package org.apache.cordova不存在”

    Android 开发世界的新手 我才刚刚开始 无论如何 我们正在努力 我已经下载了 Cordova 2 8 可能需要升级 Java JDK 1 7 和新的 Android Studio Andriod SDK 安装了所有 4 x 软件包 并
  • 通过 Jquery 从 Datebox 中清除日期

    下面的代码在日期框模式弹出窗口中显示一个按钮 但我想清除单击该按钮时的日期 我尝试了很多东西 但无法通过 jQuery 方法做到这一点
  • 函数只能在主线程中调用,为什么?

    在下面的代码中 我调用函数 displayMyAlertMessage 两次 我调用的第一个函数工作完美 但第二个函数给我一个错误 指出该函数只能从主线程调用 在我的情况下我该如何做到这一点 我正在使用这段代码 IBAction func
  • Android WebRTC 自定义捕获器

    我已经编译了 webRTC 演示应用程序 我看到捕获帧是由VideoCaptureAndroid java与本机代码紧密耦合的文件 我需要添加将我自己的帧推送到 webRTC 库以在视频通道上发送的功能 我可以用 C NDK 或 Java
  • linux 相当于“host.docker.internal”的东西是什么[重复]

    这个问题在这里已经有答案了 在 Mac 和 Windows 上可以使用host docker internal Docker 18 03 在容器内 是否有一种适用于 Linux 的工具可以开箱即用 无需传递环境变量或使用各种 CLI 命令提
  • HttpWebRequest.GetResponse() 失败时如何获取错误信息

    我正在启动 HttpWebRequest 然后检索它的响应 有时 我会收到 500 或至少 5 错误 但没有描述 我可以控制两个端点 并希望接收端获得更多信息 例如 我想将异常消息从服务器传递到客户端 使用 HttpWebRequest 和
  • MapBox水/陆检测

    我开始使用MapBox iOS SDK https www mapbox com mapbox ios sdk 有没有可能的方法通过坐标查询 MapView 并返回地形类型 水 土地 作为结果 我一直在读API doc https www
  • Spark 应用程序在 1 小时后在 EMR 中突然被终止,并且 livy 会话过期。原因和解决方案是什么?

    我在 AWS EMR 集群上使用 JupyterHub 我使用的是 EMR 版本 5 16 我使用 pyspark3 笔记本提交了 Spark 应用程序 我的应用程序正在尝试将 1TB 数据写入 s3 我正在使用 EMR 的自动缩放功能来缩
  • 检查 Android 中我的应用程序是否是首次用户

    在我的应用程序中 首先它显示一个启动屏幕 在另一项活动之后 必须显示我的主要活动 这是我的设计计划 第二个活动 即在主要活动之前 必须向应用程序的首次用户显示 如果他 她关闭应用程序 启动屏幕将自动重定向到主要活动 我该怎么做呢 有任何想法
  • 一台控制器多条路线

    我已经搜索了一段时间 但我似乎不知道这是否可能 我需要的是一个控制器用于两条不同的路径 我拥有的是一种模型 有两种类型 自己的和竞争的 所以我想要的是这样的两条路径 都到达一个控制器 example com hotels example c
  • 如何获取控制器中流程实例的ID?

    我的环境 Alfresco Share v5 2 d r134641 b15 Aikau 1 0 101 3 Spring Surf 5 2 d Spring WebScripts 6 13 Freemarker 2 3 20 alfres