2023年7月13日发(作者:)
U8过滤控件
摘要
编程语言:VB
过滤控件(UFGeneralFilter)是U8应用程序常用的控件之一,它有以下特性:
分设计时和运行时,设计时是集成在UAP中。
支持将861的模板自动升级成870的模板。
提供程序员编程的接口。
提供回调接口。
对象不销毁则保留用户的各种设置。
通过常用条件和高级条件适应不同的用户的条件的要求。
界面更加友好易用。
支持常用条件分组。
过滤设置功能强大。
组件:
名称
版本
11.0及以前版本
11.0
11.0
11.0及以前版本
11.0及以前版本
说明
过滤控件的核心组件,包含所有业务组调用接口。
快捷过滤组件,给单据列表和使用。
过滤控件内部公共组件。
为过滤控件取数的组件。
过滤控件缓存处理组件。
外部使用类:
名称
FilterSrv
DesignSrv
版本
11.0及以前版本
11.0及以前版本
说明
UFGeneralFilter中,条件运行时的服务类。
UFGeneralFilter中,条件设计时的服务类。
概念说明
1. 规则组件:在过滤控件运行的过程中,支持写代码干预过滤的活动,如初始化、值改变、参照后等等,这些代码所属的组件我们叫做过滤的规则组件。
2. 行为对象:由规则组件创建出来的对象。
3. 回调方法:规则组件中实现的方法必须是按照过滤控件的要求,如方法名、参数、参数类型等,这些方法我们叫做回调方法。
4. 谓词:过滤项可以设置默认值,但是这些默认值是运行时产生的,而不是一个固定死的值,我们称之为谓词,如:“本月第一日”,“前天”,“当前登录人” 等等。
5. 快捷过滤,11.0新增,位于单据列表上部或左侧或者报表的左侧查询区域,我们称之为快捷过滤。
目标
本文主要介绍过滤栏控件的基础知识,应用过程及相关注意事项,方便各类U8产品开发人员更好的使用过滤控件,更高效的开发产品。
过滤控件的使用
使用场景
各类U8产品开发人员可以通过过滤设计器设计过滤,方便快捷的实现对其列表、报表及档案等进行数据过滤的功能。
数据字典
过滤控件基本表(flt_DefineMeta_Base)(UFMeta库) [U870]
字段名 字段类型 说明 FilterID (U870)
cLockedBy (U870)
FilterDesc (U870)
FilterName (U870)
bLocked (U870)
XMLExpression (U870)
PersonItems (U8110)
nvarchar(50)
nvarchar(800)
Nvarchar(300)
Nvarchar(200)
bit
ntext
Nvarchar(2000)
过滤ID
过滤过滤条件限制串,多个不支持高级条件的过滤项名,逗号隔开。
描述
标题
是否锁定
Xml格式,过滤元数据。
由于方案的变化,字段含义的原始意图已经没有了。用来给业务组预置数据,预置period=1时表示将会计年月由如2013.1格式转换成如201301的格式。
ProjectNO (U870)
SubNO (U870)
IsUpgrade (U870)
Nvarchar(50)
Nvarchar(10)
bit
项目编号
子产品号
是否升级
过滤缓存表(flt_DefineMeta_Cache)(UFMeta库) [U871]
字段名
FilterID (U871)
LocaleID (U871)
XMLExpression (U871)
pubufts (U871)
字段类型
nvarchar(50)
Nvarchar(50)
ntext
timestamp
说明
过滤ID
语种
Xml格式,过滤元数据。
时间戳
过滤二次开发表 (flt_DefineMeta_Cust) (UFMeta库) [U870]
字段名
FilterID (U870)
ProjectNO (U870)
XMLExpression (U870)
LocaleID (U870)
cSubID (U870)
字段类型
Nvarchar(50)
Nvarchar(50)
ntext
Nvarchar(50)
Nvarchar(50)
说明
过滤ID
项目编号
Xml格式,二次开发的过滤元数据
语种
子产品ID
过滤多语表 (flt_DefineMeta_lang) (UFMeta库) [U870]
字段名
SubNO (U870)
LocaleID (U870)
ProjectNO (U870)
FilterID (U870)
XMLExpression (U870)
Title (U871)
字段类型
Nvarchar(50)
Nvarchar(50)
Nvarchar(50)
Nvarchar(50)
ntext
Nvarchar(200)
说明
子产品号
语种
项目号
过滤ID
Xml格式,多语元数据。
标题
快捷过滤预置表 (Flt_QuickConditionSet) (UFData库) [U8110]
字段名
ItemName (U8110)
FilterID (U8110)
UserID (U8110)
字段类型
Nvarchar(400)
Nvarchar(100)
Timestamp
说明
过滤项名称
过滤编号
用户id,业务组预置用system。
过滤方案表 (flt_Solution) (UFData库) [U870] 字段名
ID (U870)
ViewId (U8110)
GroupId (U8110)
IsPublic (U870)
UserID (U870)
IsDefault (U870)
XMLExpression (U870)
isAdvance (U870)
AdvanceXMLExpression
(U8110)
NewReportID (U870)
LocaleID (U870)
cClassID (U8100)
isSample (U870)
PageRowCount (U8110)
SolutionName (U870)
字段类型 说明
uniqueidentifier
过滤方案编号
Nvarchar(50)
Nvarchar(50)
bit
Nvarchar(50)
bit
Ntext
Bit
Ntext
Nvarchar(100)
Nvarchar(50)
Nvarchar(50)
Bit
int
nvarchar(300)
报表视图编号
分组编号
是否公共方案
用户id
是否是默认方案
方案常用条件的元数据
此字段11.0废弃
高级条件元数据
废弃字段
多语类型
过滤方案分类编号
废弃字段
每页的行数
过滤方案名称
U8常用字段业务类型预置表(U8CommonFieldBusinessType)(UFMeta库)
字段名
FieldName (U8110)
SubId (U8110)
BusinessType (U8110)
ProjectNO (U8110)
字段类型
Nvarchar(80)
Nvarchar(10)
Nvarchar(80)
Nvarchar(50)
说明
字段名称
子产品编号
字段的业务类型,目前仅定义了person类型。
项目号
设计过滤
1. 打开UAP——工具——过滤设计器——新建过滤——打开查询条件设计器。
是否支持高级条件:勾选时,运行时的查询条件界面中才存在高级条件。
是否显示汇总选择:勾选时,运行时的查询条件界面中才有查看汇总信息的选项。
是否取消二次开发:勾选时,如果一个过滤是在系统预置项目(U870)中设计的,那么客户化项目(U8CUSTDEF)中无法新增和复制过滤条件项(不勾选,是允许新增和复制的)。
规则组件:过滤插件的组件名,如DevClass,过滤控件可以根据这个名称去创建出行为对象和调用行为对象里的回调方法。 显示SQL:设计完过滤以后,可以通过显示SQL来提起过滤的元素据脚本,最终这些脚本提交安装盘。
1. 查询条件设计器中可以对查询项目进行增加、删除、编辑等操作。
编辑类型:为枚举时,需要在第二个页签设置枚举类型或者枚举串;为Sql语句类型时,需要在第三个页签设置Sql语句、返回字段、显示字段等信息,返回字段只能写成fld1、fld2的形式,如果返回字段要设置成sql语句的第一个字段时就用fld1,第二个字段就用fld2,依此类推,而不是sql语句中selelct 后的字段名。
数据源:过滤所查询的数据源中的字段名。
是否常用条件:勾选后,运行时常用条件区域才显示出来,否则仅在高级条件中出现。
允许用户修改比较符:勾选后,查询方案的条件项的比较符允许修改,否则是不允许修改的。
作为参数:勾选后,过滤条件项的值就不拼到过滤控件返回的sql条件中,但是过滤对象上存在这个值,可以在过滤的程序员编程接口中访问到。
是否便捷条件:仅UAP的BS单据列表中使用,勾选后,UAP的BS单据列表的便捷条件区域才能看见此过滤项。
参与全文搜索:仅UAP的BS单据列表中使用,勾选后,UAP的BS单据列表的全文搜索才去搜索这项。
2. 过滤设计完成后提取脚本并做进安装盘。 使用过滤
1. 引用过滤组件
2.
初始化过滤对象
Dim fltSrv As Srv
Set fltSrv = New Srv
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 Variant ,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 orObject = UserObject
的目的是一致。
bSuccess=fltSrv. OpenFilter(g_oLogin, "SA[__]17","", "", ErrInfo)
"或者
"bSuccess=fltSrv. OpenFilter(g_oLogin, "", "17", "SA", ErrInfo) "也必须确保存在SA[__]17这个过滤编号
If bSuccess = True Then
MsgBox Where
End If
‘过滤回调对象,不是必须的,与填写规则组件达到常用的方法接口
运行时接口类:
名称
GetValue
SetValue
SetEditFilter
HiddenCondition
DisableCondition
GetSqlWhere
GetWhereWithToken
OpenFilter
OpenFilterConfig
BehaviorObject
DateConditionIsExpresion
说明
获得某编辑框的值,注意此方法需要在显示过滤窗口后使用。
设置某编辑框的值,注意此方法需要在显示过滤窗口后使用。
设置参照的过滤的SQL语句。通过此方法你可以做到一个过滤项目被修改后可以影响其他过滤项目的参照的条件。
隐藏某编辑框
某编辑框不可编辑
得到过滤条件的where条件字符串
得到指定过滤条件的where条件字符串,在使用此方法前请先使用FilterList属性修改每个过滤项目的Token值如:List(1).lngGrouptoken=1。
显示过滤界面
打开过滤设置界面,传入参数和openfilter一致。
设置行为对象,行为对象可以提供方法用于在过滤的不同事件中调用,可以程序中动态创建,也可以设计过滤时填写规则组件,过滤控件将自己创建行为对象。
布尔类型,为true时,过滤的值都以谓词形式显示,默认为false
设计时接口类:
名称
BuildConditionEx
说明
建立或修改一个新的条件项,此方法是设计时预置一个条件项的元数据的方法。
参数1:元数据的连接串
参数2:条件的Key
参数3:项目编号
参数4:子产品编号
参数5:参照的XML串
参数6:错误信息
返回值:如果返回为False表明出现失败
ConditionDesign
说明:调用过滤设计器
参数1:元数据库名
参数2:业务库连接串
参数3:过滤的ID号
参数4:语言
参数5:用户名
参数6:错误信息
行为对象中可以实现的回调方法
'当过滤的某项的值发生变化时回调此函数,skey过滤项名称,如:cDepCode Public Function CallBack_ValueChange(sKey As String, flt As Srv)
End Function
'当过滤初始化是回调此函数
Public Function CallBack_FilterInit(flt As Srv)
End Function
'当点过滤时回调此函数,Cancel是否取消filterClick
Public Function CallBack_FilterClick(flt As Srv, Cancel As Boolean)
End Function
'当过滤项弹出参照后,过滤控件回调此函数,后三个参数都是参照控件中带出来的
Public Function CallBack_AfterBrowse (sKey As String, flt As Srv
, RstClass As Set, RstGrid As Set, sXml As String)
End Function
'弹出自定义参照的回调方法,过滤控件使用的标准参照控件无法满足要求时,可以在这个回调方法中弹出自定义的参照
Public Function
CallBack_UserBrowse (sKey As String, flt As Srv)
End Function
'报表使用过滤且报表视图初始化时,过滤控件回调此函数
Public Function CallBack_ReportViewInit (sKey As String, flt As Srv,DisplayViewClass as string)
End Function
'报表使用过滤且报表视图改变时,过滤控件回调此函数
Public Function CallBack_ReportViewChange (sKey As String, flt As Srv,DisplayViewClass as string)
End Function
快捷过滤的使用方法
1. 数据预置
为确定第一次使用快捷过滤时,显示那些过滤项,需要在Flt_QuickConditionSet表中预置数据。
销售快捷过滤数据预置
DELETE FROM Flt_QuickConditionSet WHERE FilterID='SA[__]17' AND USERID='system'
INSERT INTO
Flt_QuickConditionSet(FilterID,UserID,ItemName)VALUES('SA[__]17','system','cCusCode')
INSERT INTO
Flt_QuickConditionSet(FilterID,UserID,ItemName)VALUES('SA[__]17','system','cPersonName')
INSERT INTO
Flt_QuickConditionSet(FilterID,UserID,ItemName)VALUES('SA[__]17','system','dPreDate')
INSERT INTO
Flt_QuickConditionSet(FilterID,UserID,ItemName)VALUES('SA[__]17','system','dDate')
2. 代码编写
'引用过滤组件
'添加组件
Dim flt as FilterSrv
Set flt=new FilterSrv
seVarValue g_oLogin,”SA[__]17” '初始化一些基本的变量,参数传入与前面提到的OpenFilter方法一致
flt
让过滤项支持谓词“当前登录人”
下面预置数据表示:销售模块中的字段“cmaker”,“cmodifier”,“ccloser”是人员类型
销售“当前登录人”数据预置
DELETE FROM U8CommonFieldBusinessType WHERE FieldName='cmaker' AND SubId='SA'
INSERT INTO U8CommonFieldBusinessType(FieldName,BusinessType,SubId,ProjectNo)
VALUES('cmaker','person','SA','U870') --BusinessType是固定的person
DELETE FROM U8CommonFieldBusinessType WHERE FieldName='cmodifier'AND SubId='SA'
INSERT INTO U8CommonFieldBusinessType(FieldName,BusinessType,SubId,ProjectNo)
VALUES('cmodifier','person','SA','U870') --BusinessType是固定的person
DELETE FROM U8CommonFieldBusinessType WHERE FieldName='ccloser'AND SubId='SA'
INSERT INTO U8CommonFieldBusinessType(FieldName,BusinessType,SubId,ProjectNo)
VALUES('ccloser','person','SA','U870') --BusinessType是固定的person 相关知识
1. 枚举串示例如下:
2012{#}2013{#}2014{##}二零一二年{#}二零一三年{#}二零一四年
{##}前面是保存值,后面是显示值,{#}是值的分割符。
2. 枚举类型存在Data库的AA_Enum表中。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689245887a225592.html
评论列表(0条)