本文介绍了使用osf接口进行同步排班的方法,包括ListShiftSaveService(列表式排班)和CalendarShiftSaveService(日历式排班)的主要接口参数及调用方式。ListShiftSaveService需要传入data(排班数据列表)、beginDate(开始日期)、endDate(结束日期)。CalendarShiftSaveService则需要numbers(员工编码列表)、data(排班数据)、beginDate和endDate。文章详细说明了两种排班方式下数据的格式和如何通过URL、JavaScript和Java代码进行调用,以及解决data类型必须为String的问题。最后,还提到了员工排班查询列表隐藏列补签卡去除超过100条限制的相关内容。
同步排班一般都是采用osf接口来实现的,因此可以先去看看排班的对应的osf接口。
主要的同步接口主要有 CalendarShiftSaveService(日历式排班) ListShiftSaveService(列表式排班)
我们主要关注的是subparameter这个值,这个值是需要我们传入的。
比如ListShiftSaveService接口的需要传入的是 data beginDate endDate。
beginDate代表是所选的开始日期,格式为"yyyy-MM-dd"
endDate代表是所选的结束日期,格式为"yyyy-MM-dd"
data则是需要传入的排班数据,因为ListShiftSaveService是基于列表式排班的,因此排班数据的结构如下:
[{ "2023-01-25": "[工作日]夜晚班次", "2023-01-26": "[工作日]行政班次11", "2023-01-27": "[工作日]夜班班次", personId: "20180927", personName: "周游", rowNum: 0 }, { "2023-01-25": "[工作日]夜晚班次", "2023-01-26": "[工作日]行政班次11", "2023-01-27": "[工作日]夜班班次", personId: "20180926", personName: "欧艳秋", rowNum: 1 }]
以第一组的数据来解释,
2023-01-25表示这一天排什么日期类型的什么班次(这里是工作日排夜晚班次),以下两个日期以此类推。
再者 这个的personId 指的是该员工的编码,即person.fnumber ,并不是person.fid
personName指的是该员工的姓名
rowNum指的是第几个 (此列在代码里好像并没有什么调用处,我也不知道是干什么的)
因此我们通过url的调用方式则是:
http://127.0.0.1:6888/shr/shr/msf/service.do?method=callService&serviceName=listShiftSaveService&data=[{"2023-01-25":"[工作日]夜晚班次","2023-01-26":"[工作日]行政班次11","2023-01-27":"[工作日]夜班班次",personId:"20180927",personName:"周游",rowNum:0},{"2023-01-25":"[工作日]夜晚班次","2023-01-26":"[工作日]行政班次11","2023-01-27":"[工作日]夜班班次",personId:"20180926",personName:"欧艳秋",rowNum:1}]&beginDate=2023-01-25&endDate=2023-01-27
通过js的调用方式是:
shr.callService({ serviceName: 'listShiftSaveService', param: { data:JSON.stringify( [ {"2023-01-25":"[工作日]夜晚班次","2023-01-26":"[工作日]行政班次11","2023-01-27":"[工作日]夜班班次",personId:"20180927",personName:"周游",rowNum:0}, {"2023-01-25":"[工作日]夜晚班次","2023-01-26":"[工作日]行政班次11","2023-01-27":"[工作日]夜班班次",personId:"20180926",personName:"欧艳秋",rowNum:1} ]) , beginDate:"2023-01-25", endDate:"2023-01-27" }, success: function(data) { } });
注意:其中data标注的是String类型,必须传String类型,不然会因为传入的不是String类型导致识别不到,data就会变成null。
通过java代码调用:
Map paraMap = new HashMap(); JSONArray jsonArray = new JSONArray(); JSONObject data = new JSONObject(); data.put("2023-01-25","[工作日]夜晚班次"); data.put("2023-01-26","[工作日]行政班次11"); data.put("2023-01-27","[工作日]夜班班次"); data.put("personId","20180927"); data.put("personName","周游"); data.put("rowNum","0"); jsonArray.add(data); paraMap.put("data",jsonArray); paraMap.put("beginDate", "2023-01-25"); paraMap.put("endDate","2023-01-27"); Map map = (Map)OSFExecutor.executeOSF(ctx, paraMap, "listShiftSaveService");
CalendarShiftSaveService需要传入 numbers data beginDate endDate
numbers代表的是排班员工的编码,即person.fnumber
beginDate代表是所选的开始日期,格式为"yyyy-MM-dd"
endDate代表是所选的结束日期,格式为"yyyy-MM-dd"
data则是需要传入的排班数据,CalendarShiftSaveService是日历式排班,因此排班数据格式为:
[{ "title": "[工作日]行政班次11", "start": "2023-01-15" }, { "title": "[工作日]夜班班次", "start": "2023-01-16" }]
以第一组的数据来解释,
title表示这一天排什么日期类型的什么班次(这里是工作日排行政班次11)
start指的是日期
因此我们通过url的调用方式则是:
http://127.0.0.1:6888/shr/shr/msf/service.do?method=callService&serviceName=calendarShiftSaveService&numbers=["20180927","20180926"]&data=[{%20"title":"[工作日]行政班次11",%20"start":"2023-01-15"%20},{%20"title":"[工作日]夜班班次",%20"start":"2023-01-16"%20}]&beginDate=2023-01-15&endDate=2023-01-16
通过js的调用方式是:
shr.callService({ serviceName: 'calendarShiftSaveService', param: { data:JSON.stringify( [{ "title": "[工作日]行政班次11", "start": "2023-01-15" }, { "title": "[工作日]夜班班次", "start": "2023-01-16" }]) , numbers:JSON.stringify( ["20180927","20180926"]), beginDate:"2023-01-15", endDate:"2023-01-16" }, success: function(data) { } });
通过java代码调用:
Map paraMap = new HashMap(); JSONArray dataArray = new JSONArray(); JSONObject data = new JSONObject(); data.put("title","[工作日]行政班次11"); data.put("start","2023-01-15"); dataArray.add(data); JSONObject data1 = new JSONObject(); data1.put("title","[工作日]夜班班次"); data1.put("start","2023-01-16"); dataArray.add(data1); JSONArray numbers = new JSONArray(); numbers.add("20180927"); numbers.add("20180926"); paraMap.put("numbers",numbers); paraMap.put("data",dataArray); paraMap.put("beginDate", "2023-01-15"); paraMap.put("endDate","2023-01-16"); Map map = (Map)OSFExecutor.executeOSF(ctx, paraMap, "calendarShiftSaveService");
推荐阅读