参照类型
- 列表型参照
- 树型参照
- 树表型参照
建立参照类
参照基类:
对应于三种常用类型的参照,Model提供了三个抽象类:
- 列表参照: AbstractRefModel
- 树型参照: AbstractRefTreeModel
- 树表型参照: AbstractRefGridTreeModel
不同类型的参照对应的参照类须继承上述的相应基类
参照类代码示例:
- 列表参照:参考nc.ui.train.pub.ref.DemoTypeRefModel
package nc.ui.demo.db.pub.ref;
import nc.ui.bd.ref.AbstractRefModel;
public class DemoTypeRefModel extends AbstractRefModel {
public DemoTypeRefModel() {
super();
}
@Override
public String[] getFieldCode() {//表数据的字段编码
return new String[]{
"code",
"name"
};
}
@Override
public String[] getFieldName() {//表数据的字段名称
return new String[]{
"运输方式编码",
"运输方式名称"
};
}
@Override
public String[] getHiddenFieldCode() {//表数据需要隐藏的字段编码
return new String[]{
"pk_sendtype"
};
}
@Override
public String getTableName() {//表数据的表名
return "demo_demotype";
}
@Override
public String getPkFieldCode() {//表数据的主键字段
return "pk_sendtype";
}
@Override
public String getRefCodeField() {//表数据的参照编码字段
return "code";
}
@Override
public String getRefNameField() {//表数据的参照名称字段
return "name";
}
@Override
public String getWherePart() {//表数据的过滤条件
// return super.getWherePart();
String wherePart = super.getWherePart();
if(null == wherePart || "".equals(wherePart.trim())){
wherePart = " isnull(dr,0) = 0 ";
}else{
wherePart += " and isnull(dr,0) = 0 ";
}
return wherePart;
}
}
- 树形参照:参考nc.ui.train.pub.ref.CustClassRefModel
package nc.ui.demo.db.pub.ref;
import nc.ui.bd.ref.AbstractRefTreeModel;
public class CustClassRefModel extends AbstractRefTreeModel {
public CustClassRefModel() {
super();
}
@Override
public int getClassDefaultFieldCount() {
return super.getClassDefaultFieldCount();
}
@Override
public String[] getFieldCode() {//参照数据的字段编码
return new String[]{
"code",
"name"
};
}
@Override
public String[] getFieldName() {//参照数据的字段名称
return new String[]{
"客户编码",
"客户名称"
};
}
@Override
public String[] getHiddenFieldCode() {//需要隐藏的参照数据的字段编码
//lxiaofan
//需要把涉及到但不用的字段放入,不仅是getFieldCode中的字段
//例如此处还应该将getFatherField方法中的字段和getChildField方法中的字段放入
return new String[]{"pk_custclass", "parent_id"};
}
@Override
public String getTableName() {//参照数据的表名
return "train_Entity3";
}
@Override
public String getPkFieldCode() {//参照数据对应表的主键
return "pk_custclass";
}
@Override
public String getFatherField() {//树结构的父主键字段
return "parent_id";
}
@Override
public String getChildField() {//树结构的子主键字段
return "pk_custclass";
}
@Override
public String getRefCodeField() {//参照对应的编码字段
return "code";
}
@Override
public String getRefNameField() {//参照对应的名称字段
return "name";
}
@Override
public String getWherePart() {//参照数据的过滤条件
// return super.getWherePart();
String wherePart = super.getWherePart();
if(null == wherePart || "".equals(wherePart.trim())){
wherePart = " dr = 0 ";
}else{
wherePart += " and dr = 0 ";
}
return wherePart;
}
}
- 树表型参照:参考nc.ui.train.pub.ref.CustRefModel
package nc.ui.demo.db.pub.ref;
import nc.ui.bd.ref.AbstractRefGridTreeModel;
public class CustRefModel extends AbstractRefGridTreeModel {
public CustRefModel() {
super();
}
@Override
public int getClassDefaultFieldCount() {
return super.getClassDefaultFieldCount();
}
@Override
public String[] getClassFieldCode() {//树结构的字段编码
return new String[]{
"code",
"name",
"parent_id",
"pk_custclass"
};
}
@Override
public String getClassTableName() {//树结构的表名
return "train_Entity3";
}
@Override
public String getClassFatherField() {//树结构的父主键字段
return "parent_id";
}
@Override
public String getClassChildField() {//树结构的子主键字段
return "pk_custclass";
}
@Override
public String getClassWherePart() {//树结构的过滤条件
// return super.getClassWherePart();
String wherePart = super.getClassWherePart();
if(null == wherePart || "".equals(wherePart.trim())){
wherePart = " isnull(dr,0) = 0 ";
}else{
wherePart += " and isnull(dr,0) = 0 ";
}
return wherePart;
}
@Override
public String getClassJoinField() {//树结构:树和表关联的字段
return "pk_custclass";
}
@Override
public String getDocJoinField() {//表数据:树和表关联的字段
return "pk_supclass";
}
@Override
public String[] getFieldCode() {//表数据的字段编码
return new String[]{
"code",
"name"
};
}
@Override
public String[] getFieldName() {//表数据的字段名称
return new String[]{
"客户编码",
"客户名称"
};
}
@Override
public String[] getHiddenFieldCode() {//表数据需要隐藏的字段编码
return new String[]{
"pk_cust",
"pk_supclass"
};
}
@Override
public String getTableName() {//表数据的表名
return "train_Entity6";
}
@Override
public String getPkFieldCode() {//表数据的主键字段
return "pk_cust";
}
@Override
public String getRefCodeField() {//表数据的参照编码字段
return "code";
}
@Override
public String getRefNameField() {//表数据的参照名称字段
return "name";
}
@Override
public String getWherePart() {//表数据的过滤条件
// return super.getWherePart();
String wherePart = super.getWherePart();
if(null == wherePart || "".equals(wherePart.trim())){
wherePart = " isnull(dr,0) = 0 ";
}else{
wherePart += " and isnull(dr,0) = 0 ";
}
return wherePart;
}
}
注意:
树表型参照需要区分配置树结构和表数据的构造属性,要理清树结构与表结构的关联关系
注册参照类
必须在bd_refinfo表中注册参照类,在元数据操作界面中设置参照,注册参照类示例sql脚本如下:
insert into BD_REFINFO (CODE, DR, ISNEEDPARA, ISSPECIALREF, METADATATYPENAME, MODULENAME, NAME, PARA1, PARA2, PARA3, PK_REFINFO, REFCLASS, REFSYSTEM, REFTYPE, RESERV1, RESERV2, RESERV3, RESID, RESIDPATH, TS, WHEREPART)
values ('XXXXX', 0, null, null, null, 'uap', 'YYYYY', null, null, null, '0001Z0100000001TRAIN', 'nc.ui.train.pub.ref.XXXRefModel', null, 1, null, null, null, ‘YYYYY', 'ref', '2013-10-05 22:57:13', null);
※NAME字段需全局唯一,不可重复
※PK_REFINFO字段需长度为20,且全局唯一
※REFTYPE字段是参照类型:0 列表参照 1 树型参照 2 树表参照
设置参照
设置参照:
- 一个实体可以设置多个参照,但必须设置一个缺省参照
- 获取参照属性时,不设置则取属性对应实体的缺省参照
参照档案
点击【类型】属性的图标按钮
在弹出对话框界面,选择需要的实体参照
【参照名称】下拉列表中选择正确的参照类型