泛微OA常用的接口或方法
记录一些平时工作用到的方法或属性,不公开,防忘记。
文章目录
- 泛微OA常用的接口或方法
- 1 获取当前操作者
- 2 根据人员id获取人员卡片信息
- 3 获取浏览按钮的文本值
- 4 插入 js 发送 post 请求
- 5 插入 js 配合建模、后端接口实现发送 post 请求
- 1 建模准备
- 2 数据准备
- 4 前端 js 准备
- 5 后端接口准备
- 6 判断是否属于国内营销
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