将2+进程合并到1个数据收件箱[Multiapproval application]


问题

使用多人审批 [多重审批 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 union all select union all

   select 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 (线程安全) 和数据列表任务箱。

文档更新时间: 2018-11-07 02:17   作者:龙威