U8过滤控件
摘要
编程语言:VB
过滤控件(UFGeneralFilter)是U8应用程序常用的控件之一,它有以下特性:?分设计时和运行时,设计时是集成在UAP中。
?支持将861的模板自动升级成870的模板。
?提供程序员编程的接口。
?提供回调接口。
?对象不销毁则保留用户的各种设置。
?通过常用条件和高级条件适应不同的用户的条件的要求。
?界面更加友好易用。
?支持常用条件分组。
?过滤设置功能强大。
外部使用类:
概念说明
1.规则组件:在过滤控件运行的过程中,支持写代码干预过滤的活动,如初始化、值
改变、参照后等等,这些代码所属的组件我们叫做过滤的规则组件。
2.行为对象:由规则组件创建出来的对象。
3.回调方法:规则组件中实现的方法必须是按照过滤控件的要求,如方法名、参数、
参数类型等,这些方法我们叫做回调方法。
4.谓词:过滤项可以设置默认值,但是这些默认值是运行时产生的,而不是一个固定
死的值,我们称之为谓词,如:“本月第一日”,“前天”,“当前登录人”等等。
5. 快捷过滤,11.0新增,位于单据列表上部或左侧或者报表的左侧查询区域,我们称
之为快捷过滤。
目标
本文主要介绍过滤栏控件的基础知识,应用过程及相关注意事项,方便各类U8产品开发人员更好的使用过滤控件,更高效的开发产品。
过滤控件的使用
使用场景
各类U8产品开发人员可以通过过滤设计器设计过滤,方便快捷的实现对其列表、报表及档案等进行数据过滤的功能。
数据字典
设计过滤
1.打开UAP——工具——过滤设计器——新建过滤——打开查询条件设计器。
是否支持高级条件:勾选时,运行时的查询条件界面中才存在高级条件。
是否显示汇总选择:勾选时,运行时的查询条件界面中才有查看汇总信息的选项。
是否取消二次开发:勾选时,如果一个过滤是在系统预置项目(U870)中设计的,那么客户化项目(U8CUSTDEF)中无法新增和复制过滤条件项(不勾选,是允许新增和复制的)。规则组件:过滤插件的组件名,如FilterDevDemo.FilterDevClass,过滤控件可以根据这个名称去创建出行为对象和调用行为对象里的回调方法。
显示SQL:设计完过滤以后,可以通过显示SQL来提起过滤的元素据脚本,最终这些脚本提交安装盘。
1.查询条件设计器中可以对查询项目进行增加、删除、编辑等操作。
编辑类型:为枚举时,需要在第二个页签设置枚举类型或者枚举串;为Sql语句类型时,需要在第三个页签设置Sql语句、返回字段、显示字段等信息,返回字段只能写成fld1、fld2的形式,如果返回字段要设置成sql语句的第一个字段时就用fld1,第二个字段就用fld2,依此类推,而不是sql语句中selelct 后的字段名。
数据源:过滤所查询的数据源中的字段名。
是否常用条件:勾选后,运行时常用条件区域才显示出来,否则仅在高级条件中出现。
允许用户修改比较符:勾选后,查询方案的条件项的比较符允许修改,否则是不允许修改的。
作为参数:勾选后,过滤条件项的值就不拼到过滤控件返回的sql条件中,但是过滤对象上存在这个值,可以在过滤的程序员编程接口中访问到。
是否便捷条件:仅UAP的BS单据列表中使用,勾选后,UAP的BS单据列表的便捷条件区域才能看见此过滤项。
参与全文搜索:仅UAP的BS单据列表中使用,勾选后,UAP的BS单据列表的全文搜索才去搜索这项。
2.过滤设计完成后提取脚本并做进安装盘。
使用过滤
1.引用过滤组件UFGeneralFilter.dll
2.初始化过滤对象
Dim fltSrv As UFGeneralFilter.FilterSrv
Set fltSrv = New UFGeneralFilter.FilterSrv
3.显示过滤界面
Public Function OpenFilter(ByVal m_Login As Object, ByVal sFilterID As String, Optional ByVal sReportName As String, Optional ByVal sSubID As String, Optional ErrInfo As Varian t ,Optional HiddenFilter As Boolean) As Boolean
参数1:Login对象
参数2:条件的Key
参数3:过滤的名称
参数4:子产品号
参数5:返回的错误信息
返回值:如果返回为False表明出现失败
说明:你可以用参数2,忽略参数3、4或用参数3、4而忽略参数2
例子:
Dim bSuccess As Boolean
Dim ErrInfo as Variant
Set fltSrv.BehaviorObject = UserObject ‘过滤回调对象,不是必须的,与填写规则组件达到的目的是一致。
bSuccess=fltSrv. OpenFilter(g_oLogin, "SA[__]17","", "", ErrInfo)
"或者
"bSuccess=fltSrv. OpenFilter(g_oLogin, "", "17", "SA", ErrInfo) "也必须确保存在SA[__]17这个过滤编号
If bSuccess = True Then
MsgBox fltSrv.GetSQLWhere
End If
常用的方法接口
运行时接口类:UFGeneralFilter.FilterSrv.cls
设计时接口类:UFGeneralFilter.DesignSrv.cls
行为对象中可以实现的回调方法
'当过滤的某项的值发生变化时回调此函数,skey过滤项名称,如:cDepCode
Public Function CallBack_ValueChange(sKey As String, flt As UFGeneralFilter.FilterSrv)
End Function
'当过滤初始化是回调此函数
Public Function CallBack_FilterInit(flt As UFGeneralFilter.FilterSrv)
End Function
'当点过滤时回调此函数,Cancel是否取消filterClick
Public Function CallBack_FilterClick(flt As UFGeneralFilter.FilterSrv, Cancel As Boolean) End Function
'当过滤项弹出参照后,过滤控件回调此函数,后三个参数都是参照控件中带出来的
Public Function CallBack_AfterBrowse (sKey As String, flt As UFGeneralFilter.FilterSrv, Rst Class As ADODB.RecordSet, RstGrid As ADODB.RecordSet, sXml As String)
End Function
'弹出自定义参照的回调方法,过滤控件使用的标准参照控件无法满足要求时,可以在这个回调方法中弹出自定义的参照
Public Function CallBack_UserBrowse (sKey As String, flt As UFGeneralFilter.FilterSrv)
End Function
'报表使用过滤且报表视图初始化时,过滤控件回调此函数
Public Function CallBack_ReportViewInit (sKey As String, flt As UFGeneralFilter.FilterSrv,D isplayViewClass as string)
End Function
'报表使用过滤且报表视图改变时,过滤控件回调此函数
Public Function CallBack_ReportViewChange (sKey As String, flt As UFGeneralFilter.FilterSrv,DisplayViewClass as string)
End Function
快捷过滤的使用方法
1.数据预置
为确定第一次使用快捷过滤时,显示那些过滤项,需要在Flt_QuickConditionSet表中预置数据。
2.代码编写
'引用过滤组件UFGeneralFilter.dll
'添加组件UFGeneralFilterOCX.Ocx
Dim flt as FilterSrv
Set flt=new FilterSrv
flt.InitBaseVarValue g_oLogin,”SA[__]17”'初始化一些基本的变量,参数传入与前面提到的OpenFilter方法一致
FilterControlOCX1.Init flt
让过滤项支持谓词“当前登录人”
下面预置数据表示:销售模块中的字段“cmaker”,“cmodifier”,“ccloser”是人员类型
相关知识
1.枚举串示例如下:
2012{#}2013{#}2014{##}二零一二年{#}二零一三年{#}二零一四年{##}前面是保存值,后面是显示值,{#}是值的分割符。
2.枚举类型存在Data库的AA_Enum表中。