
凭证编辑操作过程中,总账领域提供了核算项目F7的过滤条件和常用的核算项目间联动事件:
**e.g.核算项目-客户,编辑态排除了已禁用的客户基础资料**
**e.g.组合为银行机构+银行账户,修改银行账户自动带出所属的银行机构**
对于后期新增的基础资料需要作为核算项目类型在凭证上录入的场景,应由对应基础资料维护部门,或行业版(如房地产,汽车4S),或二开扩展的核算项目,自行实现核算项目F7的过滤和联动需求。本案例供开发人员参考:
1. 需求目标:
- 新增核算项目类型:FeeType(收付类别,来源:出纳模块fi_cas),只允许已启用的条目参与凭证编辑操作
- 核算项目组合:收付类别+职员,根据选择的收付类别自动携带该收付类别的所属创建职员信息
2. 开发流程分析
- *com.kingdee.eas.fi.gl.client.VoucherEditBaseUI#getCellEditor* 凭证编辑选择完科目后,根据科目是否存在核算项目组合来构造核算项目类型的F7
- *com.kingdee.eas.fi.gl.client.asstf7.GLF7handler#assignSelector* 初始化核算项目F7的过滤条件组装,监听配置
3. 开发步骤和示例代码
- 总账凭证的核算项目F7初始化会优先从 T_GL_ASSTF7PROCESSOR 注册表读取扩展实现类和监听类,因此需要往表中插入一条记录
- INSERT INTO T_GL_ASSTF7PROCESSOR(FNAME, FPROCESSOR, FDATACHANGELISTENER )
VALUES('feeType', 'com.kingdee.eas.fi.gl.client.asstf7.FeeTypeProcessor', 'com.kingdee.eas.fi.gl.client.asstf7.FeeTypeChangeListener')
- FNAME:SELECT FASSTHGATTRIBUTE FROM T_BD_ASSTACTTYPE where fname_l2 = '收付类型'
- FPROCESSOR:二开客户端类过滤处理器全限定类名,待实现,见下一步代码示例
- FDATACHANGELISTENER :二开客户端类核算项目间联动监听器全限定类名,待实现,见下一步代码示例
- 示例代码
```java
// 1.FPROCESSOR 过滤处理器实现类
package com.kingdee.eas.fi.gl.client.asstf7;
import com.kingdee.bos.metadata.entity.*;
/**
* 收付类别过滤器:
* 1.必须继承 com.kingdee.eas.fi.gl.client.asstf7.DefaultProcessor, 来自fi_gl_api.jar
* -重写关键方法
*/
public class FeeTypeProcessor extends DefaultProcessor {
/**
* 过滤方法,本案例 FeeType实体是否已启用属性为enable
* @return
*/
@Override
protected FilterInfo getFilter() {
FilterInfo filter = super.getFilter();
FilterItemCollection fic = filter.getFilterItems();
// 编辑模式才需要设置,查询模式不需要该过滤
if (getParam().isEditUI()) {
fic.add(new FilterItemInfo("enable", new Integer(1)));
}
return filter;
}
/**
* 该方法重写是为 FeeTypeChangeListener 联动处理备用,
* 需求:根据收付类型的带创建的职员信息,并填充职员单元格
* 实现:添加 creator.person.* 需要的属性
* @return
*/
@Override
protected SelectorItemCollection getSelector() {
SelectorItemCollection sic = super.getSelector();
sic.add(new SelectorItemInfo("creator.id"));
sic.add(new SelectorItemInfo("creator.name"));
sic.add(new SelectorItemInfo("creator.number"));
sic.add(new SelectorItemInfo("creator.person.id"));
sic.add(new SelectorItemInfo("creator.person.name"));
sic.add(new SelectorItemInfo("creator.person.number"));
return sic;
}
}
// 2.FDATACHANGELISTENER 监听事件实现类
package com.kingdee.eas.fi.gl.client.asstf7;
import com.kingdee.bos.ctrl.kdf.table.ICell;
import com.kingdee.bos.ctrl.swing.event.DataChangeEvent;
import com.kingdee.eas.basedata.person.PersonInfo;
import com.kingdee.eas.fi.cas.FeeTypeInfo;
/**
* 必须继承 com.kingdee.e