Happy3w

第四章 自定义参照开发规范

2017.02.21
参照支持自定义参照的定义。 自定义参照可以定义参照的UI界面,也可以只定义参照的Model 1. 参照界面的定义: 参照分为表型、树型、树表型参照三种。继承了UIDialog并实现了IRefUINew接口。 程序员可自定义参照界面,最好也继承UIDialog,须实现IrefUINew接口。 2. 参照Model的定义 对应与3种类型的参照,Model也有3个抽象类: 表型: AbstrarctRefModel 树型 AbstractRefTreeModel 树表型 AbstractRefGridTreeModel 要自定义不同类型参照Model ,请继承相关的抽象类。并设置如下属性: 2.1 表型参照 (黑体为必设项) i. .如果需要distinct短语,或其他断语: setStrPatch("distinct"); 如果需要公司主键(一定在setWherePart前执行,对于默认参照在设置pk_corp后,还须重新设定setWherePart): setPk_corp(公司主键) ; setWherePort(……); 设置参照名( 弹出窗口标题),可以和RefNodeName不同: setRefTitle(参照名) ii. 设置select子句: //可显示字段 setFieldCode(new String[] { "bd_psndoc.psncode", "bd_psndoc.psnname","bd_deptdoc.deptname" }); //不可显示字段――如主键 setHiddenFieldCode(new String[]{"pk_corp"}); iii. 中文名称――表头和栏目用 setFieldName(new String[](“人员代码”,”姓名”,”部门名称”)); iv. 设置from子句: setTableName("bd_psndoc left outer join bd_deptdoc on bd_psndoc.pk_deptdoc=bd_deptdoc.pk_deptdoc "); v. 设置where子句: setWherePart(" bd_psndoc.pk_corp='" + getPk_corp() + "'"); 注:需要根据不同的公司返回查询,参数中用getPk_corp()方法。 在原setWherPart的基础上追加where子句: addWherePart(); 注:每次都从原where中追加,不允许连续追加where子句。 vi. 设置group子句:(默认为空) setGroupPart(""); vii. 设置order子句:(默认为第一列) setOrderPart(""); viii. 前几列在表中显示:(默认前2列) setDefaultFieldCount(2); ix. 设定主键字段:主键字段必须在setHiddenFieldCode或setFieldCode已设定 setPkFieldCode("bd_psndoc.pk_psndoc"); x. 设定界面输入字段:(默认为第一列) setBlurField(字段名); xi. 设定参照代码字段:(默认为第一列) setRefCodeField(字段名); xii. 设定参照名称字段:(默认为第二列) setRefNameField(字段名); xiii. 设置助记码字段名: setMnecode(字段名数组) xiv. 设置组织类型和组织主键,对于主体账簿类型的档案适用如(会计科目) setPk_GlOrgBook(组织类型, 组织) 2.2 树型参照设置 (同表型参照的设置,表型参照的必输部分一定要输入。树形设置group子句无效) 指定编码规则(如果为空,则按上下级关系构造树必须指定父字段,子字段): setCodingRule("222222"); 指定父字段名: setFatherField(字段名) 必输一项,否则没有分级规则。 指定子字段名: setChildField(字段名) 指定根名(默认和参照名相同): setRootName(根名); 2.3 树表型参照 (黑体为必设项) 设置树数据 i. setClassFieldCode(字段名数组); ii. setClassFieldName(表名) iii. setClassWherePart(where子句) iv. SetOrderPart(Order子句) v. SetClassJoinField(要和表关联的字段名) vi. SetClassDefaultFieldCount(数值)(树节点显示字段默认为2) vii. 指定定编码规则:如果为空,按上下级关系 setCodingRule("222222"); viii. 指定父字段名 setFatherField(字段名) ix. 指定子字段名 setChildField(字段名) 10.指定根名 setRootName(根名); 设置表数据 (同表型参照的设置,表型参照的必输部分一定要输入。下面只列出不同的属性) i. 设定和树节点数据关联的字段 setDocJoinField(字段名) ii. 设置精确匹配:默认精确匹配(树上选择一个节点后,查询表数据是否为精确匹配。) setExactOn(boolean) iii. 设定读表的树节点最小级次:默认1(末级节点一定会读表数据,其他情况要大于等于该值是才读数据) setExpandLevel(int) 如果你已经定义好了UI和Model部分,恭喜你,自定义参照已基本定义完成。 使用时在进行如下设置即可: UIRefPane ref = new UIRefPane(); Ref.setRefUI(自定义界面,一般不需定义用系统默认的); Ref.setRefModel(自定义参照模型) 3. 覆盖参照抽象Model中的方法的注意事项 nc.ui.bd.ref.AbstractRefModel.getData() 参照默认是按照设定好的Sql语句到后台查询数据,如果想自定义取数,可以覆盖getData() 方法。返回自定义数据即可。但要注意,参照的数据默认情况下是有内存级缓存的,缓存的key为AbstractRefModel.getRefSql()的值,如果该值为null,那参照系统将不会缓存数据。如果要使用参照内存缓存,getRefSql()要有非null的值。