NC v6.1 参照开发技术红皮书
10.指定根名 setRootName(根名); 设置表数据 (同表型参照的设置,表型参照的必输部分一定要输入。 下面只列出不同的属性) i. 设定和树节点数据关联的字段 setDocJoinField(字段名) ii. 设置精确匹配:默认精确匹配(树上选择一个节点后, 查询表数据是否为精确匹配。) setExactOn(boolean) iii. 设定读表的树节点最小级次:默认1(末级节点一定会读表数据, 其他情况要大于等于该值是才读数据) setExpandLevel(int) 如果你已经定义好了UI和Model部分,恭喜你,自定义参照已基本定义完成。 使用时在进行如下设置即可: UIRefPane ref = new UIRefPane(); Ref.setRefUI(自定义界面,一般不需定义用系统默认的); Ref.setRefModel(自定义参照模型) 4.3 参照抽象Model中的方法的注意事项
nc.ui.bd.ref.AbstractRefModel.getData()参照默认是按照设定好的Sql语句到后台查询数据,如果想自定义取数,可以覆盖getData() 方法。返回自定义数据即可。但要注意,参照的数据默认情况下是有内存级缓存的, 缓存的key为AbstractRefModel.getRefSql()的值,如果该值为null,那参照系统将不会缓存数据。如果要使用参照内存缓存,getRefSql()要有非null的值。
4.4 多组织参照设置
代码示例可以参看BusinessUnitDefaultRefModel 1 参照的过滤参照设置接口 nc.ui.bd.ref.AbstractRefModel.setFilterRefNodeName(String[] filterRefNodeNames) 在参照的模型中设置,filterRefNodeNames是该参照的过滤参照(也可以是任何参照, 只要你的参照可以和这个参照有关系) filterRefNodeNames可以是多个参照。 例如,你的参照要按组织过滤的,那么filterRefNodeNames就是组织参照的RefNodeName。 UAP 技术红皮书系列 第10 / 51页
NC v6.1 参照开发技术红皮书
2、多组织参照选择后,通过这个接口得到要过滤的值 nc.ui.bd.ref.AbstractRefModel.filterValueChanged(ValueChangedEvent changedValue) 该代码请在子类覆盖该方法 代码示例 public void filterValueChanged(ValueChangedEvent changedValue) { super.filterValueChanged(changedValue); String[] selectedPKs = (String[]) changedValue.getNewValue(); if (selectedPKs != null && selectedPKs.length > 0) { setPk_group(selectedPKs[0]); } } 如果是多个过滤参照,ValueChangedEvent.getSource() 区别是那个参照发生了选择事件。 可以通过这个方法得到某个参照的Model nc.ui.bd.ref.AbstractRefModel.getFilterRefModel(String refNodeName) 3、多组织参照显示,通过下面接口设置 nc.ui.pub.beans.UIRefPane.setMultiCorpRef(boolean multiCorpRef)
UAP 技术红皮书系列 第11 / 51页
NC v6.1 参照开发技术红皮书
第五章 参照客户化功能的设定
本章内容概要: ? UIRefPane中的设置 ? refModle中的设置 ? 注意事项
setToolTipText(String);//设置参照控件的toolTip setMaxLength(int);//设置输入字符的最大长度,默认20; setEditable(boolean);//设置参照是否可编辑 setEnabled(boolean);//设置参照是否可以使用 setDelStr(String);//设置参照输入框不能输入的字符串。 setColor(Color);//设置参照输入框的背景色。 setCacheEnabled(boolean);// 是否使用缓存 setMultiSelectedEnabled(boolean);//是否允许多选择 setAutoCheck(boolean);//是否自动解析输入的参照数据 setButtonFireEvent(boolean);//按钮选择数据后是否触发ValueChanged事件 setIncludeSubShow(boolean);//树型参照是否包含下级复选框是否显示 setMultiCorpRef(boolean);//是否多组织参照 setTreeGridNodeMultiSelected(boolean); //树表参照是否允许选择不同树节点下的数据。 setRefType(int refType);设置参照显示类型,UAP 技术红皮书系列 第12 / 51页
在初始化一个参照以后,即在本文三或四段落中的红色部分定义好后,无论是系统默认参照还是自定义参照,才可以定制参照的其他功能。
5.1 UIRefPane中的设置具
NC v6.1 参照开发技术红皮书
通过这个方法设置参照为下拉列表的显示样式。refType的定义在IRefConst中。 setMultiOrgSelected(boolean isMultiOrgSelected) //多组织参照是否可以多组织选择数据 setMultiRefFilterPKs(String[] filterPKs) 设置多组织参照过滤组织参照的PK范围 setIBeforeRefDlgShow(IBeforeRefDlgShow beforeRefDlgShow) //系统默认的表型、树形参照,在弹出对话框前调用的接口,通过这个可以实现添加自定义按钮的功能。例子参见 AddonButtonExample
5.2 refModle中的设置
setUseDataPower(boolean) ;//设置参数是否自动关联基本档案数据权限 setSealedDataShow(boolean);//设置封存数据是否显示 setRefQueryDlgClaseName(String);//设置参照查询类名称(参照的查询功能) setLocQueryEnable(boolean);//树表参照,在启用查询功能后,是否启用定位查询功能 setDynamicColClassName(String);//是否为动态列参照。 setFormulas(String[][] formulas);//设置公,用于参照内容转换; setDispConvertor(java.util.Hashtable newDispConvertor);//用于参照内容转换的影射表 setMatchField(String);//设置参照setpk时匹配的字段 getRefVO_mlang();//为多语言添加此方法, 请覆盖此方法返回要翻译字段数组。 详见DefaultRefModel_multiLang addWherePart(String);参照在运行中动态添加过滤条件,每次在原始的WherePart上添加 对参照数据按指定主键数组过滤。 参数说明:newM_filterPks 要过滤的主键数组 filterStrategy 过滤策略 IFilterStrategy.INSECTION = 0; //参照数据集与过滤数据集的交集 IFilterStrategy. REFDATACOLLECT_MINUS_INSECTION = 1; UAP 技术红皮书系列 第13 / 51页
NC v6.1 参照开发技术红皮书
//参照数据集减参照数据集与过滤数据集的交集 AbstractRefModel.setFilterPks(java.lang.String[] newM_filterPks, int filterStrategy) 如果要控制某列每行数据的显示格式,如控制数量列的显示精度。 可以实现nc.ui.bd.ref.IRefColDispConverter接口 5.3 注意事项
1. 参数区分大小写。
2. 设置字段列表和字段时(主键、编码、名称等),注意保持一致。(同时加别名或不加别名)。 3. where语句开头不要包含where短语。
UAP 技术红皮书系列 第14 / 51页
NC v6.1 参照开发技术红皮书
第六章 参照值返回与事件处理
本章内容概要: ? 参照值返回 ? 参照事件处理
UAP 技术红皮书系列 第15 / 51页
在UIRefpane 中 i. ii. iii. iv. 参照编码:getRefCode和getRefCodes 参照名称:getRefName和getRefNames 参照主键:getPK和getPKs 参照VO:getVO和getVOs (必须实现convertToVO (Vector)方法才能获取,在参照model中实现) v. 任意列:getValue(字段名)和getValues(字段名)(字段名必须在字段列表中) 参照支持属性变化事件。 i. 如果需要监听UIRefPane属性变化事件,需要实现ValueChangedListener接口, ii. 加入监听addValueChangedListener(ValueChangedEvent) iii. 值改变将触发ValueChangedEvent 参照支持编辑前检查事件 i. 如果需要监听UIRefPane编辑前检查事件, 需要实现RefEditListener接口, ii. 加入监听addRefEditListener(RefEditListener aListener) iii. 点击参照按钮前将触发RefEditEvent事件