流程抄送
 流程在流转过程中抄送流程给某人,某人只能查看信息不影响流程的流转. 类似名称(查阅,呈阅).
 抄送是用户对于整个流程维度. 而不是针对单个流程节点维度
流程抄送的四种方式
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
最后编辑:texbox 更新时间:2024-10-17 08:28
