泛微OA常用的接口或方法(不公开)

泛微OA常用的接口或方法

记录一些平时工作用到的方法或属性,不公开,防忘记。

1 获取当前操作者

// 不管是转发、分享流程都适用
wfform.getGlobalStore().commonParam.currentUserid

// 可能会失效的方法
WfForm.getBaseInfo().f_weaver_belongto_userid;
wfform.getGlobalStore().commonParam.currentUserid 

2 根据人员id获取人员卡片信息

在插入 js 代码中使用 get 请求获取数据:

http://192.168.8.62:8080/api/hrm/simpleinfo/getHrmSimpleInfo?userid=10795
function sendApi(value){
  const api="/api/hrm/simpleinfo/getHrmSimpleInfo?userid=" + value;
  fetch(api,{
    method:"GET",
    headers:{
      "Content-Type":"application/json"
    },
  }) .then(response => response.json())
    .then(data => {
      console.log(data) // data:所有数据
      console.log(data.simpleInfo.departmentName) // 部门
      console.log(data.simpleInfo.lastname) // 姓名
      console.log(data.simpleInfo.ip) // 当前登录的ip
      ...
     });
}

3 获取浏览按钮的文本值

let shenqrValue = WfForm.getBrowserShowName(shenqrId);  // 获取浏览按钮文本值
let shenqrValue = WfForm.getFieldValue(shenqrId); // 获取字段真实值(浏览按钮或者下拉框为数字)

4 插入 js 发送 post 请求

jQuery().ready(function(){
	let value = "xxx"
	let datalist = sendApi(value);
})


function sendApi(value){
  let api = "/api/comen/workflow/kpi/getGjKpi";
  fetch(api,{
    method:"POST",
    headers:{
      "Content-Type":"application/json"
    },
    // 请求体
    body:JSON.stringify({
      "zzType":value,
    })
  }) .then(response => response.json())
    .then(data => {
      if(data.data.length==0 && value!=""){
        alert(WfForm.getSelectShowName(zzId)+"暂无考核评价信息表数据")
        WfForm.changeFieldValue(zzId, {value:""});
      }
      console.log(data.data) // 响应的数据
      let zzDetailData=data.data;
      for(let i=0; i<zzDetailData.length; i++){
      	let detailRowData = {};
      	for(let key in zzDetailData[i]){
        	detailRowData[WfForm.convertFieldNameToId(key, "detail_2")] = {value: zzDetailData[i][key]};
      	}
      	WfForm.addDetailRow("detail_2",detailRowData);
     }
     });
}

5 插入 js 配合建模、后端接口实现发送 post 请求

首先看最终的效果:

插入 js 配合建模、后端接口实现发送 post 请求

简单描述:在流程表单中通过选择不同的岗位,实现明细表展示不同的内容。

1 建模准备

新建表单,字段有:把明细表中需要展出的字段(包括序号)

在这里插入图片描述
选择框中岗位 id、岗位名称,所有字段如下:

在这里插入图片描述

然后新建模块、查询,关于建模,此处不再一一演示步骤。

2 数据准备

插入数据时,需要注意岗位相关数据和岗位的选择框id、名称,要一一对应:

以大区总监及国家级经理举例:

在这里插入图片描述
在这里插入图片描述

此时数据准备完毕。

4 前端 js 准备

前端 js 准备就是发送 post 请求,向后端请求数据,然后展示。

jQuery().ready(function(){
    // 职责变化时触发
    var zzId = WfForm.convertFieldNameToId("khlxx"); // 考核类型
    WfForm.bindFieldChangeEvent(zzId, function(obj,id,value){
        WfForm.delDetailRow("detail_2", "all");
        let datalist=sendApi(value);
    })
})

function sendApi(value){
  	const api="/api/comen/workflow/kpi/getGjKpi";
 	fetch(api,{
   		method:"POST",
   		headers:{
     		"Content-Type":"application/json"
   		},
   		body:JSON.stringify({
     		"zzType":value,
   		})
 	}) .then(response => response.json())
    .then(data => {
    	if(data.data.length==0 && value!=""){
        alert(WfForm.getSelectShowName(zzId) + "暂无考核评价信息表数据")
        WfForm.changeFieldValue(zzId, {value:""});
      }
     // data就是我们请求的repos
     console.log(data.data)
     let zzDetailData = data.data;
     for(let i=0; i<zzDetailData.length; i++){
     	let detailRowData = {};
     	for(let key in zzDetailData[i]){ // 逐行给明细表赋值
     		detailRowData[WfForm.convertFieldNameToId(key, "detail_2")] = {value: zzDetailData[i][key]};
     	}
     	WfForm.addDetailRow("detail_2", detailRowData);
     }
   });
}

5 后端接口准备

要想在表单中选择不同的岗位,实现把建模中的数据显示出来,必然要通过 插入 js 发送 post 请求,请求后端的接口,得到响应的数据,然后展示出来即可。

KpiAction.java

// 记得把url放白名单
@Path("/comen/workflow/kpi")
public class KpiActionApi extends KpiAction {
}

KpiAction .java

public class KpiAction {

    private KpiService getService() {
        return ServiceUtil.getService(KpiServiceImpl.class);
    }

    /**
     * 获取绩效评价流程信息
     * @param params
     * @return
     */
    @POST
    @Path("/getGjKpi")
    @Produces(MediaType.APPLICATION_JSON)
    public String getGjKpi(Map<String, Object> params) {
        Map<String, Object> apiData = new HashMap<>();
        try {
            //获取当前用户
            apiData =getService().getGjKpi(params);
        } catch (Exception e) {
            e.printStackTrace();
            apiData.put("api_status", false);
            apiData.put("api_errormsg", "catch exception : " + e.getMessage());
        }
        return JSONObject.toJSONString(apiData);
    }
}

KpiService.java

public interface KpiService {
    /**
     * 获取国际考核基础信息
     * @param params
     * @return
     */
    Map<String, Object> getGjKpi(Map<String, Object> params);
}

KpiServiceImpl.java

public class KpiServiceImpl extends Service implements KpiService {
    @Override
    public Map<String, Object> getGjKpi(Map<String, Object> params) {
        return commandExecutor.execute(new KpiGjJxCmd(params));
    }
}

KpiGjJxCmd.java 需要返回的数据在此类定义:

public class KpiGjJxCmd extends AbstractCommonCommand<Map<String, Object>> {
    static final Logger logger = LoggerFactory.getLogger(KpiGjJxCmd.class);

    @Override
    public BizLogContext getLogContext() {
        return null;
    }

    public KpiGjJxCmd(Map<String, Object> params) {
        this.params = params;
    }

    @Override
    public Map<String, Object> execute(CommandContext commandContext) {
        Map<String, Object> apiData = new HashMap<>(3);
        try {
            String zzType = params.get("zzType").toString();
//            String sql="SELECT khwd ,khbz ,jsff,khqz FROM  uf_gjshjxpjlc where zzid="+zzType+" ORDER by xh ";
            String sql = "select khwd, khbz, jsff, khqz from uf_gjjxkhpj where zzid = " + zzType + " order by xh "; // 根据序号排队
            List<Map<String, String>> resultMap = WorkflowFunction.queryData(sql, new RecordSetDataSource());
            apiData.put("api_status", true);
            apiData.put("data", resultMap);
        } catch (Exception e) {
            //throw new ECException(this.getClass().getName() + "执行过程中异常", e);
            apiData.put("api_status", false);
            apiData.put("error", e.getMessage());
            logger.info("KpiGjShCmd...error:" + e.getMessage());
            return apiData;
        }
        
        return apiData;
    }
}

WorkflowFunction 工具类:见文章顶部下载附件。


6 判断是否属于国内营销

这里以国内营销举例,在流程中插入 sql 根据申请人部门判断是否属于国内营销。

  • 查看某个部门底下所有的下级部门,返回逗号分隔的字符串:
-- with:递归查询
-- cte:临时表

-- 创建临时结果集
-- id:部门id
-- supdepid:上级部门id
-- Level:部门层级
with cte([id],[supdepid],[Level]) 
	as 
	(
	select [id],[supdepid], 1 as [Level] from ecology.dbo.[HrmDepartment] where [id] = '620' -- 查询出该部门三项信息
	union all 
	select d.[id],d.[supdepid],c.[Level]+1 from ecology.dbo.[HrmDepartment] as d 
	inner join cte as c on d.[supdepid] = c.[id]
	)
	
select stuff((select ','+CAST(id AS VARCHAR) from cte order by [Level] for xml path('')),1,1,''); 
  • 以国内营销举例,在流程中插入 sql 根据申请人部门判断是否属于国内营销:
with cte([id],[supdepid],[Level]) 
	as 
	(
	select [id],[supdepid], 1 as [Level] from ecology.dbo.[HrmDepartment] where [id] = '620' -- 国内营销大部门的id为620
	union all 
	select d.[id],d.[supdepid],c.[Level]+1 from ecology.dbo.[HrmDepartment] as d 
	inner join cte as c on d.[supdepid] = c.[id]
	)
SELECT CASE WHEN EXISTS (select id FROM cte WHERE id = '$main.bum$')
THEN 0
ELSE 1
END AS sfcz
  • 以国内营销举例,在国内营销中部门 id 为 A、B 的剔除,除了国内营销部门 id 为 C、D 的也包含:
with cte([id],[supdepid],[Level]) 
	as 
	(
	select [id],[supdepid], 1 as [Level] from ecology.dbo.[HrmDepartment] where [id] in (620, C, D) -- 国内营销大部门的id为620
	union all 
	select d.[id],d.[supdepid],c.[Level]+1 from ecology.dbo.[HrmDepartment] as d 
	inner join cte as c on d.[supdepid] = c.[id]
	where d.[id] != 'A' and d.[id] != 'B'
	)
SELECT CASE WHEN EXISTS (select id FROM cte WHERE id = '$main.bum$')
THEN 0
ELSE 1
END AS sfcz

相关推荐

  1. OA调用发送消息接口 .Net C#示例

    2024-03-21 13:32:07       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 13:32:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 13:32:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 13:32:07       87 阅读
  4. Python语言-面向对象

    2024-03-21 13:32:07       96 阅读

热门阅读

  1. nginx集群部署访问不了怎么解决

    2024-03-21 13:32:07       41 阅读
  2. Mybatis查询列表中的坑

    2024-03-21 13:32:07       45 阅读
  3. linux查看/修改各种资源限制ulimit

    2024-03-21 13:32:07       40 阅读
  4. Golang 环境变量配置 mockgen安装(macOS系统)

    2024-03-21 13:32:07       43 阅读
  5. SVM支持向量机

    2024-03-21 13:32:07       43 阅读
  6. 数据结构奇妙旅程之红黑树

    2024-03-21 13:32:07       49 阅读
  7. ElasticSearch - 基础概念和映射

    2024-03-21 13:32:07       39 阅读
  8. 【逆向】fridaAPI_如何hook一个静态方法和实例方法

    2024-03-21 13:32:07       49 阅读
  9. 后端异常处理:全局异常处理器

    2024-03-21 13:32:07       48 阅读
  10. 亚信安慧AntDB全景观察:数据库领域的创新者

    2024-03-21 13:32:07       41 阅读