# 操作者矩阵过滤条件相关钩子说明

- 来源：https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/b0de2be7-e73e-4c60-80f1-8cd4895b5533

一，功能说明

![image.png](https://weapp.eteams.cn/api/file/preview?fileId=1001726037323628548&type=imgs)   对矩阵添加的条件进行过滤提供钩子

通过ECODE方式进行拦截过滤，钩子名称： operatorMatrixFilterRule

钩子说明：

```plaintext
            List<Object> args = new ArrayList<>();
            args.add(ruleList);  -- 参数List<Map<String,Object>> 结构，矩阵条件数据
            RegHookResult execute =regHookEventActuator.execute(args);
            Object result = execute.getResult();
            if(result!=null && result instanceof List){
                isHookReturn = true;
                ruleHookList = (List<Map<String, Object>>) result;
            }
            if(isHookReturn){
                ruleList = ruleHookList;
            }
过滤完返回同参数结构数据 List<Map<String,Object>>  如果代码报错则按原标准逻辑执行，如果条件返回空会找不到相关操作者
```

参考代码：

```java
   package com.weaver.seconddev.workflow.operator;

import com.weaver.loom.api.annotation.RegHook;
import com.weaver.loom.context.register.AbstractRegHookEvent;
import groovy.util.logging.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Slf4j
@RegHook(module = "workflow", event = "operatorMatrixFilterRule", order = 0)
public class FilterOperatorMatriRule extends AbstractRegHookEvent {
    Logger logger = LoggerFactory.getLogger(FilterOperatorMatriRule.class);

    @Override
    public Object handle(Object[] args) throws Exception {
        if(args.length>0&&args[0]!=null&&args[0] instanceof List){
            List<Map<String,Object>> ruleList =   ( List<Map<String,Object>> ) args[0];
            List<Map<String, Object>> matrixRules = new ArrayList<Map<String, Object>>();
            if(ruleList!=null&&ruleList.size()>0){
                for(Map<String, Object> rule:ruleList){
                    Object targetValues = rule.get("targetFieldValue");
                    if(targetValues instanceof List){
                        List deptIds =  (List)targetValues;
                        if(deptIds==null||(deptIds!=null&&deptIds.size()==0)){
                            continue;
                        }
                    }
                    matrixRules.add(rule);
                }
            }
            return matrixRules;
        }
        return null;
    }
}
```

一，      ecode管理员登录OA系统，访问/ecode/monitor

二，     打jar文件，上传jar文件

![image.png](https://weapp.eteams.cn/api/file/preview?fileId=1001730276423860226&type=imgs)

说明： 1. ecode后端监控-部署-上传jar

2.选择weaver-workflow-pathdef-service 服务有多少节点上传多少次

备注：如果ecode上传不了jar需要联系ecode模块处理。
