Joget DX Beta Available for Download

Check out Joget DX, the next generation successor to Joget Workflow for faster, simpler digital transformation.

Page tree
Skip to end of metadata
Go to start of metadata

问题

使用多人审批 [多重审批 v2 (线程安全)] 同时在父进程和子进程中都有表单。你有2个不同的进程,而子进程批准 不包含数据库中的任何行,所以它不能与仅包含收件箱的数据收件箱链接,如示例中所示,它仅从SHKAssignmentsTable获取数据,而没有来自表单的任何数据

动机

你可以简单地在用户视图中使用INBOX,但是这不会给用户提供任何信息,我想给他们提供所有在应用程序中提供的相关信息,同时保留从一个数据列表为两个进程运行动作的机会。

 

解决

1.在DB中创建行

在申请中创建新工具

使用预设表单数据工具集ID用于审批表单,这会导致在表中创建具有正确进程ID的行(该数据列表收件箱用于通过SHKAssignmentsTable配对分配)。在字段ID中,我们分配#assignment.processId#,用于审批表单。

  

忽略“多用户审批表”,这是我申请的不同的名称,应该有表格链接到审批。

 

2.存储childIDs

在主流程(应用)中的表单应用添加隐藏的字段childIDs,所以JW在表中创建此列。

将以下行添加到生成批准工具中。这将把所有的子进程ID保存到childIDs列中,这样我们就可以为datalist收件箱引用。

Connection con = null;
try {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jwdb?characterEncoding=UTF-8", "root", "/////////////");
    if (!con.isClosed()) {
        String sql = "UPDATE jwdb.app_fd_multiApproval_applications SET c_childIDs = ? WHERE id = ?";
        PreparedStatement stmt = con.prepareStatement(sql);
        String concated = approvalInstanceIds.substring(0, approvalInstanceIds.length() - 1); //cut out last ","
        stmt.setString(1, concated);
        stmt.setString(2, "#assignment.processId#");
        stmt.execute();
    }
} catch (Exception ex) {
    System.err.println("Exception: " + ex.getMessage());
} finally {
    try {
        if (con != null)
            con.close();
    } catch (SQLException e) {
        System.err.println("Exception: " + ex.getMessage());
    }
} 

 

3.创建数据列表任务箱 

数据绑定器:JDBC

建立与jwdb的连接

 

现在把你自己的查询写入这2个进程的UNION数据中。

这是我使用的一个例子。

select
	jwdb.app_fd_multiApproval_approvals.id,NR.dateCreated, NR.dateModified, NR.c_value, NR.c_number, NR.c_doc_org, NR.c_requester_name, NR.c_priority
from
  (select 1 n union all
   select 2 union all select 3 union all
   select 4 union all select 5) numbers  INNER JOIN jwdb.app_fd_multiApproval_applications NR
  on CHAR_LENGTH(NR.c_childIDs)
     -CHAR_LENGTH(REPLACE(NR.c_childIDs, ',', ''))>=numbers.n-1
JOIN jwdb.app_fd_multiApproval_approvals
ON SUBSTRING_INDEX(SUBSTRING_INDEX(NR.c_childIDs, ',', numbers.n), ',', -1) COLLATE utf8_general_ci = jwdb.app_fd_multiApproval_approvals.id 
where c_childIDs != '' and NR.c_requester  is not null
UNION 
select 
	id, dateCreated, dateModified,c_value, c_number, c_doc_org, c_requester_name, c_priority
from jwdb.app_fd_multiApproval_applications 
where  jwdb.app_fd_multiApproval_applications .c_requester  is not null

 

P.S. 我想提供我的应用程序,但它是相当强大的,这只是其中的一小部分,我会尝试尽快提供编辑的  多重审批 v2 (线程安全)  和数据列表任务箱。