流程抄送

流程在流转过程中抄送流程给某人,某人只能查看信息不影响流程的流转. 类似名称(查阅,呈阅).
抄送是用户对于整个流程维度. 而不是针对单个流程节点维度

流程抄送的四种方式

1. 通过线条上增加抄送函数来指定抄送人抄送.

 ${cxt.copyTo('ROLECODE=\'010\'')};

动态流程变量 copytoUser 设置抄送人

 ${cxt.copyTo('ROLECODE=\''+cxt.get('copytoUser')+'\'')};

抄送的条件的字段:

  • ORGID 机构id

  • USERID 用户id

  • USERNAME 用户账号名

  • USERCODE 用户编号

  • DEPTID 部门id

  • DEPTCODE 部门编号

  • ROLEID 角色id

  • ROLECODE 角色编号

  • ROLENAME 角色名称

    2. 流程审核/提交时通过指定抄送人参数__copyAssignee来抄送

    由于一个用户会存在多个角色为了保证唯一性
    流程用户id= 机构id_部门id_角色id_用户id
    注意: 此方式不支持会签的提交(由于会签是同一个流程节点多个人提交流程. 会导致抄送多次的问题,因此会签屏蔽了此方式)

     function btnConfim_onClickScript(cxt:ScriptContext,btn:Button){
        let page=btn.getPage();
        let audFlag=page.components.cmbConfirm.getValue();
        var attachment=page.components.UploadCmp1.getValue();
        let auditMemo=page.components.txtAUDITMEMO.getValue();
        let wfParams={}
        if(Common.isEmpty(audFlag)){
            Common.errorMsg('请选择审核意见');
            return;
        }
        let nodes = page.components.Tree1.getSelectNodes()
        if (nodes.length > 0) {
            let assignList=[]
            nodes.forEach((node,index)=>{
                assignList.push(node.WFUSERID);
            })
            //动态设置的指定人审核
            wfParams['__assignee']=assignList
        }
        if (nodes.length==1){
            wfParams['__assignee']=nodes[0].WFUSERID
        }
        //动态设置抄送的人
        wfParams['__copyAssignee']=['DBABA3318E2B475B89701CBF42E03D7B_321060C3C0C34824A9F291E0DC7086A0_7FCABE692E5E4E06AA42CAA67802644C_59EAFF507408402FA3466783D5FEC093','7575860D9D21457ABF7162AF4DF177BA_3BFFEBAC10184810811D6FFDCF12E21C_7FCABE692E5E4E06AA42CAA67802644C_AD4B4E3736FB4650B55D9C9693AA57CB']


        btn.getPage().raiseEvent('confirm', audFlag,null, auditMemo,attachment,wfParams)
        page.close();
    }

3. 通过脚本任务task来抄送

cxt.copyTo('ROLECODE=\'002\'')

4. 通过抄送策略来实现抄送

注意: 此方式不支持与会签策略混用

{
    "name": "抄送给指定人",
    "class": "com.kdayun.z1.core.workflow.listerner.usertask.CopyToListernerImpl",
    "params": [
        {
            "name": "condition",
            "value": " ROLECODE = '001' "
        }
    ]
}

查询抄送(未读)

wfSQLType 参数的取值

  • wfSQLType的取值: none(无),all(全部),daitj(待提交),daish(待审核),shenhz(审核中),yish(已审核),daicy(抄送(未读),待查阅) yicy(抄送(已读), 已查阅)

  • 代码实现查询抄送(未读)的数据

function button_onclick(btn){
    cmp.getPage().setParamsObj({wfSQLType:'daicy'})
    cmp.getPage().components.Table1.loadData();
}

相关查询Sql

查询用户的抄送(未读)的总数

SELECT COUNT(*) AS CNT, E.FUNCTION_ID ,CR.OBJNAME AS FUNCTION_NAME
FROM ACT_HI_PROCINST ART
INNER JOIN ACT_RE_PROCDEF D ON ART.PROC_DEF_ID_ = D.ID_
INNER JOIN ACT_RE_MODEL E ON E.KEY_ = D.KEY_
INNER JOIN CORE_RES CR ON E.FUNCTION_ID=CR.RWID
WHERE EXISTS (SELECT 1 FROM ACT_HI_COPYTO F WHERE F.PROC_INST_ID_ = ART.PROC_INST_ID_  AND (F.ISREAD IS NULL OR F.ISREAD = 0) AND F.USER_ID_ ='#{USERID}')
GROUP BY E.FUNCTION_ID

查询抄送(已读)

function button_onclick(btn){
    cmp.getPage().setParamsObj({wfSQLType:'yicy'})
    cmp.getPage().components.Table1.loadData();
}

相关查询Sql

查询用户的抄送(已读)的总数

SELECT COUNT(*) AS CNT, E.FUNCTION_ID ,CR.OBJNAME AS FUNCTION_NAME
FROM ACT_HI_PROCINST ART
INNER JOIN ACT_RE_PROCDEF D ON ART.PROC_DEF_ID_ = D.ID_
INNER JOIN ACT_RE_MODEL E ON E.KEY_ = D.KEY_
INNER JOIN CORE_RES CR ON E.FUNCTION_ID=CR.RWID
WHERE EXISTS (SELECT 1 FROM ACT_HI_COPYTO F WHERE F.PROC_INST_ID_ = ART.PROC_INST_ID_  AND (F.ISREAD = 1) AND F.USER_ID_ ='#{USERID}')
GROUP BY E.FUNCTION_ID

设置抄送的读取状态

设置相关的抄送为已读状态

function Button4_onClickScript(cxt: ScriptContext, btn: Button) {
    var rows = btn.getPage().components.Table1.getChecks();
    if (rows.length == 0) {
        Common.warnMsg('请选择行');
        return;
    }
    btn.getPage().components.WorkFlow1.setCopyRead(rows[0].get('SYS_PID'),'干的不错.通过!',
        function (error) {
            if (Common.isNotEmpty(error)) {
                Common.errorMsg(error);
            } else {
                btn.getPage().components.Table1.loadData();
            }
        });
}
作者:texbox  创建时间:2023-06-27 12:41
最后编辑:texbox  更新时间:2024-10-17 08:28