s-HR报表中添加自定义过滤条件
## 如何在s-HR系统报表中添加薪酬期间(yyyyMM)作为过滤条件
### 1.查看系统自带的年月是> 段落引用怎么设置的
根据对应的UIPK找到对应Handler里的method,定位到系统是如何定义枚举数据的。
![image202206161432029681.webp](/download/010053b9c9dda32a4b7b925d9159fcd27c6c.webp)
> 通过定位跟踪发现CmpTBDynamicListHandler类中getPeriodMonthListAction中具体实现方式为CmpUtils类的getPeriodMonthList中
>
通过调试可以发现,只要构造一个json字符串类似于{data=[{alias=202204, value=202204}, {alias=202202, value=202202}, {alias=202203, value=202203}]}即可实现所需效果;
### 2.创建一个Hander封装所需要的数据包:
~~~java
package com.kingdee.eas.customer.kd.cmp;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.ui.ModelMap;
import com.kingdee.bos.BOSException;
import com.kingdee.bos.Context;
import com.kingdee.bos.bi.model.DB.DBUtil;
import com.kingdee.eas.util.app.DbUtil;
import com.kingdee.jdbc.rowset.IRowSet;
import com.kingdee.shr.base.syssetting.context.SHRContext;
import com.kingdee.shr.base.syssetting.exception.SHRWebException;
import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
import com.kingdee.shr.compensation.exception.ExceptionHandle;
public class PeriodListHandler extends ListHandler {
//获取当前薪酬核算表中所有的薪酬期间
public String getAllPeriodMonthListAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
throws SHRWebException
{
try
{
Map param = new HashMap();
param.put("data", getPeriodMonthListBySCal(0));
JSONUtils.writeJson(response, param);
} catch (Exception e) {
ExceptionHandle.handleException(e);
}
return null;
}
//获取系统薪酬核算表中所有已经存在的薪酬期间;
public List<Map<String, Object>> getPeriodMonthListBySCal(int qty) throws SHRWebException{
List list = new ArrayList();
StringBuffer sql = new StringBuffer();
sql.append(" select case when FPERIODMONTH < 10 then FPERIODYEAR||'0'|| FPERIODMONTH else FPERIODYEAR || FPERIODMONTH end periodNum from ( \n ")
.append(" select distinct FPERIODYEAR,FPERIODMONTH from T_HR_SCmpCalTable \n")
.append(" ) a \n ")
.append(" order by a.FPERIODYEAR,a.FPERIODMONTH \n")
;
Context ctx = SHRContext.getInstance().getContext();
try {
IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
int limitQty = 0;
while(rs.next()){
Map map = new HashMap();
map.put("alias", rs.getString(("periodNum")));
map.put("value", rs.getString(("periodNum")));
list.add(map);
limitQty++;
if(qty > 0 && limitQty == qty ){
break;
}
}
} catch (BOSException e) {
e.printStackTrace();
throw new SHRWebException("sql异常!!");
} catch (SQLException e) {
e.printStackTrace();
throw new SHRWebException("sql异常!!");
}
return list;
}
}
~~~
### 3. 将handler配置到列表视图
将创建的handler配置到系统不常用的list界面(也可以自己通过dep创建一个实体,配置列表界面都可以),例如将handler配置到com.kingdee.eas.basedata.org.app.CtrlUnit.list 这个界面。
![image202206161617355571.webp](/download/010036c32dc7ade44c9085ed4d6d3983467b.webp)
### 4.设置报表参数中的自定义uipk
打开到报表设计-报表参数,由于系统报表只支持从信息集中选取参数类型,这里可以使用相同类型即可。例如我这里选的是人员基础信息里的性别。uipk=url:/dynamic.do?uipk=com.kingdee.eas.basedata.org.app.CtrlUnit.list&method=getAllPeriodMonthList
![image202206161621064631.webp](/download/0100665cc9ba3ad443b89718bf46f5ebfe3f.webp)
### 5.数据源映射参数
在数据源中,添加查询条件,映射关系。
![image202206161622113181.webp](/download/0100a6e69ae3391b4eb886ffa3bf4fd2eedf.webp)
### 6.修改sql实现过滤
通过sql查询,可以发现系统是通过@XX来实现替换参数过滤的,因此我们可以在自己的sql中如法炮制。
![image202206161623201921.webp](/download/010036f389db5bf542d5b434239fe5b4f141.webp)
而且可以使用SUBSTRING函数选取所属的年月,等等。
~~~sql
select fnumber ,FFSAL1200
from T_SAL_EmpDeduDetail where SUBSTRING(FYEARMONTH,0,4) = SUBSTRING(@person_gender,1,4)
~~~
### 7.引用说明
附件为上方代码的开发包的压缩文件,解压后,可以将hr_period_bin.jar部署到\eas\server\lib\sp\addon\customer\lib下直接,配置list页面引用即可。
其中有两个方法可以使用method=get20PeriodMonthList为取近20个期间getAllPeriodMonthList为取所有期间。
s-HR报表中添加自定义过滤条件
## 如何在s-HR系统报表中添加薪酬期间(yyyyMM)作为过滤条件### 1.查看系统自带的年月是> 段落引用怎么设置的根据对应的UIPK找到对应Ha...
点击下载文档
本文2024-09-17 00:15:03发表“s-hr cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-shr-59795.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章