EAS通用Query查询开发指南.docx
《EAS通用Query查询开发指南.docx》由会员分享,可在线阅读,更多相关《EAS通用Query查询开发指南.docx(6页珍藏版)》请在冰豆网上搜索。
EAS通用Query查询开发指南
1.1大体原理通用查询的实现是基于BOS,通过BOS的Query对象实现。
2.2前提条件业务查询是必须通过Query对象来完成(这里将作为通用查询的传入参数)3.3简单介绍通用查询提供一个通用查询面板CommonQueryPanel,它将查询对象作为初始参数传入并完成相应的初始化过程,其主要构造器:
publicCommonQueryPanel( EntityViewInfoentityViewInfo, EntityViewInfolockedEntityViewInfo, IMetaDataPKqueryObjectPK, booleanshowFilter, booleanshowSorter, booleanshowToolbar, booleanshowButton, IProcessorprocessor, IPromptBoxFactorypromptBoxFactory, intwidth, intheight)throwsBaseCommonQueryException它内嵌了两个panel(CommonFilterPanel和CommonSorterPanel)分别实现了:
一、通用过滤(CommonFilterPanel):
类:
实现接口:
IQueryFilterPanel根据查询对象产生通用过滤界面,用户可根据查询条件、逻辑关系设置查询条件。
用户可以根据实际需要来决定是否加载它。
二、通用排序(CommonSorterPanel)类:
实现接口:
IQuerySorterPanel根据查询对象产生通用排序界面,用户可根据排序字段设置排序方式。
用户可以根据实际需要来决定是否加载它。
它还内置了一个工具条与方案列表配套使用,用户可以根据实际需要来决定是否加载它。
类:
使用工具条用户可以读取已有的查询方案并可以对查询方案进行维护。
4.4使用方法及代码示例通用查询对话框CommonQueryDialog接口类:
CommonQueryDialog接口作用:
该类为通用查询对话框。
/** *显示通用查询界面 */ publicbooleanshow()/** *获得通用查询结果的过滤信息 *@return */ publicEntityViewInfogetEntityViewInfoResult() /** *获得用户自定义panel *@return */ publicArrayListgetUserPanels() /**设置通用查询父窗口对象,一般为this *@paramcomponent */ publicvoidsetOwner(Componentcomponent) /**设置通用查询对话框标题 *@paramstring */ publicvoidsetTitle(Stringstring) /**设置通用查询对话框预设过滤条件 *@paraminfo */ publicvoidsetEntityViewInfo(EntityViewInfoinfo) /**将用户自定义panel添加到通用查询对话框 *@paramlist */ publicvoidsetUserPanels(ArrayListuserPanels) /**为通用查询设置F7控件工厂 *@paramfactory */ publicvoidsetPromptBoxFactory(IPromptBoxFactoryfactory) /**设置通用查询所绑定的query *@paramdataPK */ publicvoidsetQueryObjectPK(IMetaDataPKdataPK) /**设置是否显示通用过滤页签,默认显示 *@paramb */ publicvoidsetShowFilter(booleanb) /**设置是否显示通用排序页签,默认显示 *@paramb */ publicvoidsetShowSorter(booleanb) /**设置是否显示通用工具栏及方案列表,默认显示 *@paramb */ publicvoidsetShowToolbar(booleanb) /** *增加一个用户自定义panel到通用查询页签中 *@paramuserPanel */ publicvoidaddUserPanel(KDPaneluserPanel) /** *清空所有的用户自定义panel */ publicvoidclearUserPanels() /** *删除用户的自定义panel *@paramuserPanel */publicvoidremoveUserPanel(KDPaneluserPanel) /** *根据panel类名获得用户自定义panel *@parampanelClassName *@return */ publicKDPanelgetUserPanel(StringpanelClassName) /** *获得指定索引的用户自定义panel *@paramindex *@return */publicKDPanelgetUserPanel(intindex)/** *设置通用查询对话框的高度 *@parami */publicvoidsetHeight(inti)/** *设置通用查询对话框的宽度 *@parami */publicvoidsetWidth(inti)/** *获得通用过滤面板的过滤信息 * */publicFilterInfogetCommonFilter()/** *获得通用排序面板的排序信息 * */publicSorterItemCollectiongetCommonSorters()/** *设置通用查询中所使用的编辑器的处理器 *@paramprocessor */publicvoidsetProcessor(IProcessorprocessor)/** * 获得通用过滤面板 *@return */publicCommonFilterPanelgetCommonFilterPanel()/** *获得通用排序面板 *@return */publicCommonSorterPanelgetCommonSorterPanel()
例如代码其过程是:
调用通用查询界面,该界面包含了通用过滤、通用排序及工具条,定制的查询条件后,刷新绑定query对象的kdtable。
et); (this); etName()); 设置是否显示通用过滤页签,默认显示 (true); 设置是否显示通用排序页签,默认显示 (true); 设置是否显示通用工具栏及方案列表,默认显示 (true); refresh(); }
通用查询帮忙类CommonQueryHelper(本接口不推荐使用,建议用户使用通用查询对话框CommonQueryDialog的调用方式,CommonQueryDialog会提供更多支持)接口类:
CommonQueryHelper接口作用:
该类为通用查询帮助类。
接口方法:
一、publicstaticbooleanshowDialog(CommonQueryParamcommonQueryParam,Componentowner)作用:
显示通用查询界面传入参数:
1)commonQueryParam:
为通用查询传入参数对象它内部有11个attribute,必须设置的attribute有两个:
privateEntityViewInfoentityViewInfo;privateIMetaDataPKqueryObjectPK; (查询对象元数据PK,必须)privatebooleanshowFilter; (是否显示通用过滤,可不设,默认true)privatebooleanshowSorter; (是否显示通用排序,可不设,默认true)privatebooleanshowToolbar; (是否显示通用工具条,可不设,默认true)privateIPromptBoxFactorypromptBoxFactory; (用户的F7控件工厂,可不设,默认null)privateIPromptDialogFactorypromptDialogFactory; (用户的F7对话框工厂,可不设,默认null)privateIFormatorformator; (用户的F7数据格式器,可不设,默认DefaultFormator) privateArrayListpanels=newArrayList();privateStringdialogName="";(对话框名称,可不设)(用户自定义的查询面板,根据自身业务需要可不设)privateObjectparam; 用户自定义查询面板的参数,该参数实现序列化接口,根据自身业务需要可不设) 2)owner:
为通用查询的父窗口一般为传this即可返回值:
用户是否点击通用查询的"确定"按钮。
即:
进行查询动作(默认:
不点击确定按钮)二、publicstaticEntityViewInfogetEntityViewInfoResult()作用:
获得查询所需的EntityViewInfo对象返回值:
通用查询所构成的EntityViewInfo示例代码其过程是:
调用通用查询界面,该界面包含了通用过滤、通用排序及工具条,定制的查询条件后,刷新绑定query对象的kdtable。
四、publicObjectgetParam()作用:
该方法通用查询调用。
通用查询在保存方案时,将会调用该方法获取用户的自定义参数,并将其序列化保存至方案中。
(用户的自定义参数为用户自定义面板的全局变量)五、publicvoidsetParam(Objectparam)作用:
该方法通用查询调用。
通用查询在载入方案时,会从方案中获取用户的自定义参数,调用该方法将自定义参数赋给用户的自定义面板。
(用户的自定义参数为用户自定义面板的全局变量)六、publicComponentgetFocusComponent();作用:
用户重载该方法,返回当通用查询展现时用户希望焦点停留的控件。
七、publicvoidclear()用户可以重载该方法,reset用户面板的控件该方法在用户点击工具条的“新建”按钮时调用注意:
通用查询在通用查询对话框展现和方案载入时会调用用户面板的onLoad()方法,用户可以在onLoad时完成一些业务逻辑。
例如代码下面以MessageQueryPanel为例getValue returnsic;}()))); ("(").append("").append("#").append(0).append("").append(")").append(""); if!
=null) { filterItemInfo=
newFilterItemInfo("", toString(),(this.()))); ("and").append("").append("(").append("").append("#").append
(1).append("").append(")").append(""); } if!
=null&&!
"")) { filterItemInfo=newFilterItemInfo("", .getSelectedItem()))); intindex=1; if().indexOf("#1")>0) { index=2; } else { index=1; } ("and").append("").append("(").append("").append("#").append(index).append("").append(")").append(""); } StringstrFormula=(); return;}etFilterItems(); for(inti=0;i<();i++) { FilterItemInfofilterItemInfo=(i); if().equalsIgnoreCase("")) { (CommonQueryUtil.getCommonQueryCompareSign())); (().toString()))); } elseif().equalsIgnoreCase("")) { (CommonQueryUtil.getCommonQueryCompareSign())); ().toString()); } } SorterItemCollectioncurrentSorterItemCollection=(); for(inti=0;i<(); i++) { SorterItemInfosorterItemInfo=(i); if().equalsIgnoreCase("")) { (CommonQueryUtil.getCommonQuerySorterSign())); } } }}
通用查询扩展属性列表用户对通用查询的定制,需要通过配置元数据的扩展属性来完成。
扩展属性名称所在位置作用isCommonQueryFilter 查询对象是否参加通用查询过滤查询对象字段的扩展属性设置查询对象字段是否参加通用查询过滤isCommonQuerySorter 查询对象是否参加通用查询排序查询对象字段的扩展属性设置查询对象字段是否参加通用查询排序isUsingF7 查询对象属性是否使用F7查询对象字段的扩展属性设置查询对象的连接属性是否需要使用F7displayFormat F7或简单实体的显示格式查询对象字段的扩展属性F7和下拉框(简单实体时)的显示格式,和通用F7格式相同editFormat F7编辑格式查询对象字段的扩展属性F7的编辑格式,和通用F7格式相同commitFormat F7数据提交格式查询对象字段的扩展属性F7数据提交格式,和通用F7格式相同defaultF7Query F7默认的查询对象查询对象字段的扩展属性当查询对象的连接属性调用F7时,设置该F7绑定的查询对象isSimpleEntity 是否为简单实体查询对象中的连接属性所在实体的扩展属性设置该连接属性所对应的实体是否为简单实体,如果为简单实体,则此时连接属性使用下拉框的形式,不使用F7defaultF7UI默认的F7对话框查询对象字段的扩展属性设置该查询对象的字段所使用的F7对话框(值为该对话框的类名),该属性一般用于设置复杂F7(如:
组织架构F7,科目F7等)西方失败2009-06-2423:
07:
通用查询字段的定制用户可以定制查询对象中的字段是否参加过滤和排序用户如果想定制query一些字段在通用查询中显示出来,可以通过定制查询对象属性的扩展属性来实现。
以查询对象ExpenseReqBillQuery中的为例,如果该字段需要参加过滤和排序,需要配置以下扩展属性(注意扩展属性名的大小写)a)isCommonQueryFilter 是否参加过滤(true或fasle)b)isCommonQuerySorter 是否参加排序(true或fasle)配置完成后,相应的字段将会作为通用查询一个过滤或排序条件
对F7的支持如果查询对象中的连接属性需要以F7的形式展现,用户可以通过对元数据扩展属性的配置,来定制F7的属性。
以查询对象ExpenseReqBillQuery中的为例如果该属性需要调用F7,则需要为F7配置以下扩展属性(注意扩展属性名的大小写)a)isUsingF7 该属性是否使用F7(true或fasle)b)displayFormat F7显示期格式格式(和通用F7的使用方式相同)c)editFormat F7编辑期格式(和通用F7的使用方式相同)d)commitFormat F7数据提交格式(和通用F7的使用方式相同)e)defaultF7Query F7绑定的查询对象(查询对象的全名)f)defaultF7UI F7的对话框(根据需要,可不设置) 一般来说,查询对象中的连接属性需要的F7都可以通过元数据的配置来完成。
如果F7较复杂如组织架构F7,由于F7不能通过一个查询对象来实现,这时需要设置defaultF7UI扩展属性,其值为该F7的对话框的类名。
此外我们也可以通过F7控件工厂来实现。
4.F7控件工厂IPromptBoxFactory大多数特殊F7都可以通过定制扩展属性defaultF7UI来实现,因此该类的作用被弱化,但该接口仍具有一定的扩展性。
接口类:
IPromptBoxFactory接口作用:
该接口为通用F7控件工厂。
用户传入通用查询的查询对象的连接属性将会被以F7的方式调用,用户根据每个连接属性所关联的查询对象来实现相关的F7控件的create方法。
接口方法:
publicKDPromptBoxcreate(Stringf7QueryName,QueryInfomainQuery,StringqueryFieldName);作用:
创建F7控件实例。
特别注意:
非用户自定义的F7控件实例一律返回null传入参数:
f7QueryName:
f7控件所对应的查询对象mainQuery:
通用查询的查询对象queryFieldName:
查询对象属性名(非别名)返回值:
某个实体的F7控件实例
例如代码如果用户使用到复杂的F7,如组织架构(该F7不能使用通用F7的定制来实现)。
可以使用F7控件工厂。
我们还是需要在查询对象属性的扩展属性中定义defaultF7Query,该查询对象可以是一个不存在query,如下列中""。
此query并不存在,仅仅作为F7控件工厂类的一个判别条件。
用户通过条件不同创建一些特殊的F7。
如果不需要在工厂类中创建的F7,请返回null,(通过查询如果没有在工厂类获得用户个性化定制的F7,会根据用户在元数据的配置动态创建F7)publicKDPromptBoxcreate(Stringf7QueryName,QueryInfomainQueryInfo,StringqueryFieldName){ KDBizPromptBoxpromptBox=null; CostCenter类型的F7接口类:
IProcessor接口作用:
该接口为通用查询编辑器的预处理器。
接口方法:
/** *对编辑器的预处理 *@throwsException */publicvoidprocess()throwsException;/** *设置预处理器中的对象或属性(当前的查询字段,当前的编辑器等等) *这里采用key--value的set和get方式主要是为了保证接口的稳定性 *@paramkey *@paramobject */publicvoidset(Stringkey,Objectobject);/** *获得预处理器中的对象或属性(当前的查询字段,当前的编辑器等等) *这里采用key--value的set和get方式主要是为了保证接口的稳定性 *@paramkey *@return */publicObjectget(Stringkey);IProcessor的使用方法:
用户需要继承抽象类,并完成process()方法即可。
CommonQueryProcessor目前有三个key,用户可以使用接口的get方法获得相应的对象或属性。
它们是:
/** *通用查询面板 */protectedfinalstaticStringCOMM;/** *当前过滤字段 */protectedfinalstaticStringCURRENT_FIELD_PROP="CURRENT_FIELD_PROP";/** *当前编辑器 */protectedfinalstaticStringCURRENT_EDITOR="CURRENT_EDITOR";示例代码场景及作用:
用户以过滤时使用了F7,并且要对该F7的选择范围作限制。
publicclassCommonQueryProcessorExampleextendsCommonQueryProcessor{/***该方法用户完成,实现对编辑器的预处理逻辑.*从用户的自定义面板中获得某个值,将其值构造成entityviewinfo,设置到通用查询的某个F7中。
*/publicvoidprocess()throwsException{ et(0); 例如:
如果查询对象的某个属性需要以币种来过滤,由于币种较简单,不需要使用F7,以下拉框的形式展现即可。
则需要对币种实体进行配置。
以币种为例,在币种的实体上定义以下扩展属性a)isSimpleEntity 是否为简单实体(true或false)这时查询对象的属性将会下拉框的形式展现,如果需要设置下拉框数据的显示别名可通过查询对象属性的扩展属性displayFormat,设置格式同F7。
将通用查询嵌入用户界面将通用查询嵌入用户panel中,有三种方式1、需要排序和过滤 使用CommonQueryPanel/***创建一个通用查询面板 *@paramentityViewInfo 查询对象的预设过滤信息 *@paramlockedEntityViewInfo 固定的过滤条件 *@paramqueryObjectPK 查询对象pk *@paramshowFilter 是否显示过滤面板 *@paramshowSorter 是否显示排序面板 *@paramshowToolbar 是否现实工