///参照类增加自定义过滤条件

public class AceBodyBeforeEditHandler implements IAppEventHandler<CardBodyBeforeEditEvent> {
@Override
public void handleAppEvent(CardBodyBeforeEditEvent e) {
if(e.getKey().equals(PresellDetailBVO.PK_BUILDING)){
String pk_project = e.getBillCardPanel().getHeadItem(PresellHVO.PK_PROJECT).getValue();
if(null != pk_project && pk_project.length() > 0 ){
UIRefPane buildRefPane = (UIRefPane) e.getBillCardPanel().
getBodyItem(PresellDetailBVO.PK_BUILDING).getComponent();
BuildingRefModel buildingRefModel = (BuildingRefModel) buildRefPane.getRefModel();
buildingRefModel.addWherePart(" and pk_project='"+pk_project+"' ");
buildRefPane.setRefModel(buildingRefModel);
}
}
}
}

参照栏目中若存在枚举列

setFieldCode(new String[] {
"(case when cvouchtype='YCYS' then '银承应收' when cvouchtype='YCYF' then '银承应付' when cvouchtype='SCYS' then '商承应收' when cvouchtype='SCYF' then '商承应付' end) cvouchtype",
"dregdate", "cacceptno", "cacceptperson", "dissuedate",
"dduedate", "cdrawer", "cpayee", "fmoney", "cbillstatus" });

开发自定义参照

参照分为表型、树型、树表型参照三种。继承了UIDialog并实现了IRefUINew接口。 程序员可自定义参照界面,最好也继承UIDialog,须实现IrefUINew接口。

参照model定义

Model的3种抽象类

表型: AbstrarctRefModel

树型: AbstractRefTreeModel

树表型: AbstractRefGridTreeModel

表型参照

常用API

  1. 如果需要distinct短语,或其他断语: setStrPatch(“distinct”);
  2. 如果需要公司主键(一定在setWherePart前执行,对于默认参照在设置pk_corp后,还须重新设定setWherePart): setPk_corp(公司主键); setWherePart(……);
  3. 设置弹出窗口标题: setRefTitle(参照名);
  4. 设置select子句显示字段: setFieldCode(new String[] { “bd_psndoc.psncode”,”bd_psndoc.psnname”,”bd_deptdoc.deptname” });
  5. 显示名称――表头和栏目用 setFieldName(new String);
  6. 设置select子句不可显示字段――如主键: setHiddenFieldCode(new String[]{“pk_corp”});
  7. 设置from子句: setTableName(“bd_psndoc left outer join bd_deptdoc on bd_psndoc.pk_deptdoc=bd_deptdoc.pk_deptdoc “);
  8. 设置where子句: setWherePart(“ bd_psndoc.pk_corp=’” + getPk_corp() + “‘“);注:需要根据不同的公司返回查询,参数中用getPk_corp()方法。
  9. 在原setWherPart的基础上追加where子句: addWherePart();注:每次都从原where中追加,不允许连续追加where子句。需要and 开头
  10. 设置group子句:(默认为空) setGroupPart(“”);
  11. 设置order子句:(默认为第一列) setOrderPart(“”);
  12. 设置前几列在表中显示:(默认前2列) setDefaultFieldCount(2);
  13. 设定主键字段:主键字段必须在setHiddenFieldCode或setFieldCode已设定 setPkFieldCode(“bd_psndoc.pk_psndoc”);
  14. 设定界面输入字段:(默认为第一列) setBlurFields(字段名);
  15. 设定参照代码字段:(默认为第一列) setRefCodeField(字段名);
  16. 设定参照名称字段:(默认为第二列) setRefNameField(字段名);
  17. 设置助记码字段名: setMnecode(字段名数组);
  18. 设置组织类型和组织主键,对于主体账簿类型的档案适用如(会计科目) setPk_GlOrgBook(组织类型, 组织);

树形参照

同表型参照的设置,表型参照的必输部分一定要输入。树形设置group子句无效

常用API

  1. 指定编码规则(如果为空,则按上下级关系构造树必须指定父字段,子字段): setCodingRule(“222222”);
  2. 指定父字段名: setFatherField(字段名);必输项,否则没有分级规则。
  3. 指定子字段名: setChildField(字段名);
  4. 指定根名(默认和参照名相同): setRootName(根名);

树表型参照

常用API

  1. 设置树数据 i.setClassFieldCode(字段名数组); ii.setClassFieldName(表名) iii. setClassWherePart(where子句) iv. SetOrderPart(Order子句) v. SetClassJoinField(要和表关联的字段名) vi. SetClassDefaultFieldCount(数值)(树节点显示字段默认为2) vii. 指定定编码规则:如果为空,按上下级关系 setCodingRule(“222222”); viii. 指定父字段名 setFatherField(字段名) ix. 指定子字段名 setChildField(字段名) 10.指定根名 setRootName(根名);
  2. 设置表数据 (同表型参照的设置,表型参照的必输部分一定要输入。下面只列出不同的属性)
    1. 设定和树节点数据关联的字段 setDocJoinField(字段名);
    2. 设置精确匹配:默认精确匹配(树上选择一个节点后,查询表数据是否为精确匹配。) setExactOn(boolean);
    3. 设定读表的树节点最小级次:默认1(末级节点一定会读表数据,其他情况要大于等于该值是才读数据) setExpandLevel(int);

参照缓存机制

有些档案采用了缓存机制,因此对于新增的记录,不能及时的在参照上反映出来,正常需要一定时间后或者人工点参照结果画面的刷新 按扭进行本地记录更新。对于参照的查询结果也有内存级的缓存,点刷新按钮会先通知档案更新(如果有更新),然后再重取数据。

控制参照某列数据的显示格式接口

如果要控制某列每行数据的显示格式,如控制数量列的显示精度。可以实现nc.ui.bd.ref.IRefColDispConverter接口。 已实现的例子可以参考nc.ui.bd.ref.busi.AccidDefaultRefModel。

默认参照注册

系统默认参照要统一注册到 bd_refinfo表中,以便引用。

标准产品若配置了 业务人员来源 ,则部门参照会允许跨组织选择

此时单据上字段编辑前需要处理参照过滤问题

使用nc.ui.scmpub.ref.FilterDeptRefUtils部门参照处理工具类

UIRefPane refpane = (UIRefPane) panel.getHeadItem(e.getKey()).getComponent();
FilterDeptRefUtils ref = null;
ref = FilterDeptRefUtils.createFilterDeptRefUtilsOfSO(refpane);//销售场景的部门参照
//ref = FilterDeptRefUtils.createFilterDeptRefUtilsOfPU(refpane);//采购场景的部门参照
ref.filterItemRefByOrg(pk_org);