如何查看自己的以及离职人员的单据
# 业务背景
单据配置了数据规则:只允许当前登录人查看自己创建的单据。如果一旦该人员离职,那么他创建的单据就没有人可以看到了。目前数据规则还无法做到类似单据交接的功能:既能看到创建人自己的单据,同时还能看到离职人员创建的单据。
# 解决方案
核心思路:通过开发自定义比较符,做到不仅能够查看自己创建的单据,还能查看到我负责交接的离职人员创建的单据,具体效果图如下:
![image.webp](/download/010014a438bcc44a42b1861c192e5004237b.webp)
# 实现步骤
1. 开发平台新建一张单据,具体设计如图:
![image.webp](/download/0100fbdef0b63d2e4ac2ab50e271a07de6c3.webp)
**设计说明:** 核心字段有两个:一个是交接人,即有人员离职后,这些人员所创建的单据要转给此交接人;另一个是离职员工分录,顾名思义,该分录记录的就是离职人员。同时,新增表单插件,做相关逻辑校验,插件配置如图:
![image.webp](/download/01004d6f326e9ff743bd876d610b32502bf4.webp)
插件校验逻辑:1、如果离职人员本身也是交接人员,那么就不能保存,需要将该人员名下的离职人员分录也分配给交接人;2、如果对应的【用户禁用】状态是未禁用,则不允许保存。
```
package kd.hr.hrt.dada.demo.LicenseCheck;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.control.events.BeforeItemClickEvent;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.util.EventObject;
public class MyFormPlugin extends AbstractFormPlugin {
private final static String OPERATION_KEY = "bar_save";
private final static String KEY_MAINBAR = "tbmain";
@Override
public void registerListener(EventObject e) {
this.addItemClickListeners(KEY_MAINBAR);
}
@Override
public void beforeItemClick(BeforeItemClickEvent evt) {
if (StringUtils.equals(OPERATION_KEY, evt.getItemKey())) {
DynamicObjectCollection collection = this.getModel().getEntryEntity("yf_leave_user_entry");
for (DynamicObject object : collection) {
DynamicObject leaveUser = (DynamicObject) object.get("leave_user");
//如果离职人员用户禁用装填是非禁用,则不允许保存
if (!(boolean) leaveUser.get("isforbidden")) {
this.getView().showMessage(String.format("用户%s尚未被禁用", leaveUser.get("name")));
}
//如果离职人员也存在离职人员名单,则需要将其名下维护的人员也自动转到新的交接人员手中
QFilter userFilter = new QFilter("reveiver", QCP.equals, leaveUser.get("id"));
DynamicObject leaveUsersList = BusinessDataServiceHelper.loadSingle("yf_employeemapping", "id", new QFilter[]{userFilter});
if (leaveUsersList != null) {
this.getView().showMessage(String.format("用户%存在未交接人员名单,请处理", leaveUser.get("name")));
}
}
}
}
}
```
2. 新增自定义比较符,配置如下:
![image.webp](/download/0100b5c7ed2671094c2eafc2ada3d13eb9a8.webp)其中解析类代码如下:
```
package kd.hr.hrt.dada.demo.LicenseCheck;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.filter.AbstractFilterContantParser;
import kd.bos.entity.filter.FilterContantParserArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;
import java.util.ArrayList;
import java.util.List;
public class EmployeeTransferFilter extends AbstractFilterContantParser {
@Override
protected QFilter getQFilter(FilterContantParserArgs filterContantParserArgs) {
String filedName = filterContantParserArgs.getFieldName();
List<String> userList = new ArrayList<>();
String selectedFiled = "reveiver,yf_leave_user_entry.leave_user";
Long userId = UserServiceHelper.getCurrentUserId();
QFilter userFilter = new QFilter("reveiver", QCP.equals, userId);
DynamicObject object = BusinessDataServiceHelper.loadSingle("yf_employeemapping", selectedFiled, new QFilter[]{userFilter});
DynamicObjectCollection collection = (DynamicObjectCollection) object.get("yf_leave_user_entry");
for (DynamicObject dynamicObject : collection) {
userList.add((String) ((DynamicObject) dynamicObject.get("leave_user")).get("number"));
}
userList.add((String) object.get("reveiver.number"));
QFilter qFilter = new QFilter(filedName, QCP.in, userList);
return qFilter;
}
@Override
protected String getScriptFilter(FilterContantParserArgs filterContantParserArgs) {
return null;
}
}
```
3. 自定义比较符开发完成后,在需要配置数据规则的单据设计器上,找到创建人字段,并给该字段配置自定义比较符,详细配置如下:
![image.webp](/download/010019e736e1174c4d09841f54be19a19587.webp)
4. 修改数据规则方案,具体配置如下:
![image.webp](/download/010056c10fcf5e074b6b82b7b78137bbe4d8.webp)
5. 给相关人员配置数据规则,配置详情如图:
![image.webp](/download/01000a72be80893e4d92a1eda9696418b38b.webp)
# 补充说明
- 本方案通过自定义比较符开发,实现了离职人员单据交接功能,在实际业务场景中,可能存在多种个性化数据规则方案,在标准功能比较符不满足要求的情况下,都可以参考此思路来处理;
- 本方案在设计人员交接映射功能时,采用的是表单的方式,表单会默认自带单据编号、附件面板、创建人等额外字段,如果想要界面简洁,可采用布局的方式,完全自行开发,此方案着重讲述核心功能实现逻辑;
- 此方案中使用的是直接授权,也可以采用通用角色授权方式,具体如何使用数据规则依照实际场景配置即可。
# 相关资料
[如何开发自定义比较符](https://vip.kingdee.com/article/515966338796243200?productLineId=29&lang=zh-CN)
[自定义比较符功能二开插件](https://vip.kingdee.com/article/312168194611615488?productLineId=29&isKnowledge=2&lang=zh-CN)
如何查看自己的以及离职人员的单据
# 业务背景单据配置了数据规则:只允许当前登录人查看自己创建的单据。如果一旦该人员离职,那么他创建的单据就没有人可以看到了。目前数...
点击下载文档
本文2024-09-23 00:46:08发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-141606.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章