今日遇到此需求,做一下笔记,8.6版本配置实现(估计8.5版本以上的都支持),
8.2版本还需要开发才能实现
8.6版本通过配置实现思路:
先找到员工基本信息form视图,添加以下内容
<field name="p_joinDate" schemeField="pp.joinDate" readonly="true" label="加入公司日期 " dataType="date" />
schemeField表示结构配置中员工基本信息和职业信息的关系配置,如下图
name取的字段名字只要和表单界面取的名字不一样就行,dataType表示取出的字段类型,按照需要来填写
8.2版本需要二开扩展handler实现类
路径如下:com.kingdee.eas.hr.emp.web.handler.EmployeeEditHandlerExt.java
重写afterInitModel方法,通过人员的ID将职业信息表的数据查询出来put到coreBaseInfo
代码示例:
/**
* 创建模型后初始化实体model的值
* 把职业信息的实体信息set到coreBaseInfo,这样员工基本信息界面也能配置职业信息中的字段信息
* @param request
* @param response
* @param coreBaseInfo
* @throws SHRWebException
*/
@Override
protected void afterInitModel(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo coreBaseInfo)
throws SHRWebException {
super.afterInitModel(request, response, coreBaseInfo);
if (coreBaseInfo.getId() != null) {
String personId = coreBaseInfo.getId().toString();
try {
IPersonPosition iPersonPosition = PersonPositionFactory.getRemoteInstance();
FilterInfo filter = new FilterInfo();
FilterItemInfo filterItemInfo = new FilterItemInfo("person.id", personId);
filter.getFilterItems().add(filterItemInfo);
if (iPersonPosition.exists(filter)) {
String oql = "select * where person.id='" + personId + "'";
PersonPositionInfo personPositionInfo = iPersonPosition.getPersonPositionInfo(oql);
Enumeration e = personPositionInfo.keys();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
if (!key.equals("id") && !key.equals("person")) {
coreBaseInfo.put(key, personPositionInfo.get(key));
}
}
}
} catch (EASBizException e) {
e.printStackTrace();
} catch (BOSException e) {
e.printStackTrace();
}
}
}
写完后打包,重启服务,配置员工基本信息的视图(只查看,不修改,若是改的话还需要重写afterSave方法,把改的值更新到职业信息)
<field name="enterDate" readonly="true" label="入职日期" dataType="date" /> name="enterDate" 就直接配置职业信息实体的字段即可,dataType是必须要加的,不加的话点击修改按钮后会出现null 不加dataType的效果
加上后,编辑界面便能正常展示
猜测是因为不加datatype界面无法加载input框,会出现后台虽然返回了值,但是无法展示在对应的input里面(不加的时候,不会有input而是一个span标签展示数据)