最新U8开发之单据列表控件.docx
- 文档编号:27972435
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:36
- 大小:1.20MB
最新U8开发之单据列表控件.docx
《最新U8开发之单据列表控件.docx》由会员分享,可在线阅读,更多相关《最新U8开发之单据列表控件.docx(36页珍藏版)》请在冰豆网上搜索。
最新U8开发之单据列表控件
U8单据列表控件
摘要
单据列表控件是供业务单据展示列表数据以及编辑处理的,并且集成了部分单据列表公共按钮、快捷过滤、翻页功能。
同时也支持直接通过单据列表编辑录入数据。
概念说明
公共按钮是指单据列表固有的一些操作,如:
查询、条件格式设置、布局等等;快捷过滤是一种更加直接快速的常用查询项目过滤,主要区别在于可以直接在列表主界面录入常用过滤项目内容进行查询;翻页功能集成则是指列表控件自带了翻页处理,业务模块使用时可以不用专门处理翻页的逻辑。
目标
本文主要介绍单据列表控件的业务应用及相关注意事项,方便各类U8产品开发人员更好的使用高效开发产品。
文档内容
一、列表控件(V11.0)增加的特性:
1.集成【快捷过滤】功能;类似原来各列表界面里toolbar上的查询\刷新\[滤设]功能。
查询按钮下拉查询方案:
默认操作兼容原有功能。
查询支持方案和快捷条件详细设置:
【快捷过滤】相关的业务组代码调整:
调整过滤对象的查询方法(UFGeneralFilter.FilterSrv.OpenFilter)调用,修改为调用过滤对象初始化方法(UFGeneralFilter.FilterSrv.InitBaseVarValue),参数传递与过滤对象查询原来的方法(UFGeneralFilter.FilterSrv.OpenFilter)兼容。
然后调用新单据列表控件的快捷过滤初始化方法(VouchList.InitFlt),把初始化好的过滤对象传入(如果没有过滤对象,也可以直接传入过滤对象ID或过滤对象名称+子系统号)。
代码修改前后对比示例如下(灰色字体部分是已经被注释的修改前的代码,下同):
…(引用的是服务协议列表代码修改模型)
Setm_opub=CreateObject("UFGeneralFilter.FilterSrv")
'bSuccess=m_opub.OpenFilter(g_Login,"6729D410-233A-4674-A48A-2C34C17B82F6","","",ErrInfo)
'lliang_2011-11-22_[单据列表]:
快捷过滤
bSuccess=m_opub.InitBaseVarValue(g_Login,"6729D410-233A-4674-A48A-2C34C17B82F6","","",ErrInfo)
…
Call VouchList.InitFlt(g_Login,m_opub,"","","","",Err)
参数1:
Login对象
参数2:
过滤对象
参数3:
条件的Key
参数4:
过滤的名称
参数5:
子产品号
参数6:
返回的错误信息
返回值:
如果返回为False表明出现失败
说明:
你可以用参数2,忽略参数3、4、5或用参数3而忽略参数2和4、5或用参数4、5而忽略2和3.
注意事项:
调用此初始化方法的时机要求在Form_Load事件里,目前大部分产品的过滤对象调用(m_opub.OpenFilter)都是在相应的类模块或其他非窗体模块处理,所以需要各模块根据实际情况把过滤对象变量有效传递到窗体然后在Form_Load事件里调用。
推荐的方法是事前在窗体模块声明全局变量,然后在调用过滤对象的地方把已经初始化好的过滤对象暂时赋值给窗体的全局变量,最后在Form_Unload事件里即时的释放该全局变量。
…
//直接在列表控件(V11.0)新增的查询事件中(FilterClick)调用原来的“查询”功能即可,同时把此事件返回的过滤对象参数一并传递到原查询功能。
…
PrivateSubVouchList_FilterClick(fldsrvAsObject)
Operating("filter",fldsrv)
EndSub
…
注:
是否显示快捷过滤依据的是原列表是否支持查询功能。
附:
快捷过滤预置表:
Data库的flt_quickconditionset表
对应字段说明:
filterid过滤编号
userid用户编号,业务组预置用固定的system
itemName用于快捷过滤的项的名称如:
cDepName
2.集成【翻页】功能;取代原来各列表界面手工翻页或采用平台翻页控件的功能。
【翻页】相关的业务组代码调整:
1)业务代码原列表界面中使用平台的翻页控件(PagedivCtl)的情况:
在调用平台翻页控件绑定分页引擎的地方直接修改为用列表控件(V11.0)绑定分页引擎,接口方法和传递参数完全兼容,同时删除原平台翻页控件并把相关的代码注释(包括原翻页控件涉及的事件),同时把原翻页控件对应的事件实现在列表控件对应的事件中实现(事件兼容 )。
…(引用的是销售订单列表代码修改模型)
'CallPagedivCtl1.BindPagediv(m_pagediv)
'lliang_2011-11-22_[单据列表]:
翻页
CallVchLst.BindPagediv(m_pagediv)
…
'PrivateSubPagedivCtl1_BeforeSendCommand(cmdTypeAsU8VouchList.UFCommandType,pageSizeAsLong,pageCurrentAsLong)
' Me.VchLst.SetVchLstRstNothing
' Me.VchLst.FillMode=FillOverwrite
'EndSub
PrivateSubVchLst_BeforeSendCommand(cmdTypeAsU8VouchList.UFCommandType,pageSizeAsLong,pageCurrentAsLong)
Me.VchLst.SetVchLstRstNothing
Me.VchLst.FillMode=FillOverwrite
EndSub
…
2)业务代码原列表界面没有采用平台的翻页控件,是自己处理的翻页功能的情况,时还不想采用先前到翻页控件的方式(原因:
代码改动太大,可能出错的情况也多,而且直接影响由列表导航出的单据卡片翻页的界定范围),只是希望直接借用列表控件(V11.0)的翻页框架,而列表数据的获取保持不变(还是由业务组直接获取传递给列表控件)。
就此方案代码模板示例如下:
//1、申明分页引擎变量
…(引用的是库存所有单据列表代码修改模型)
'lliang_2011-12-02_[新单据列表]:
PrivateWithEventsm_pagedivAsPagediv '分页引擎
…
//2、FormLoad事件里初始化分页引擎并绑定到列表控件(V11.0)上(列表数据的加载过程保持不变,并且此必须放到列表数据加载之前执行,并且确认列表数据加载后给原有的列表属性RecordCount正确赋值了-应该是总记录数,而不是当前页显示的记录数)
Setm_pagediv=NewPagediv
m_pagediv.PageInfo.CurrentPage=txtPage.Text
m_pagediv.PageInfo.pageSize=txtSize.Text ‘注:
此两处代码赋值逻辑需要在运行期检查原控件值是否存在
CallVouchList1.BindPagediv(m_pagediv)
…
//3、在列表控件新增的翻页相关的事件中实现原来的手工翻页逻辑。
PrivateSubVouchList1_BeforeSendCommand(cmdTypeAsU8VouchList.UFCommandType,pageSizeAsLong,pageCurrentAsLong)
txtSize.Text=pageSize
SelectCasecmdType
CaseUFFirst
cmdFirst_Click
CaseUFPrevious
cmdPer_Click
CaseUFNext
cmdNext_Click
CaseUFLast
cmdLast_Click
CaseUFOK
cmdOK_Click
CaseElse
'
EndSelect
EndSub
注:
是否显示翻页依据的是原列表是否支持翻页功能。
3)业务代码原列表界面没有采用平台的翻页控件,而是自己处理的翻页功能的情况:
这种情况需要首先把业务组手工增加的列表翻页功能到平台翻页控件,然后再根据第1)种情况对应的方法到列表控件(V11.0),也可由手工的列表翻页功能直接到列表控件(V11.0)的翻页。
至于如何从手工翻页功能到平台的翻页控件,这个可以咨询目前已经采用平台翻页控件的业务组成员处理(其中由列表导航出的单据卡片翻页的界定范围需要通过列表过滤条件串约束),在此也简单就代码修改过程示例说明一下:
(新作单据列表时必须使用)
…(引用的是库存的其他入库单列表代码修改模型)
PrivateWithEventsm_pagedivAsPagediv'分页引擎
Privatem_coniAsIPagedivConi'条件,基本上都是从U8Colset中进行初始化
…
//增加如下列表分页初始化方法,一个分页引擎事件。
PrivateSubInitPagedivCtl(oColSetAsObject,mCnnAsConnection,VouchListAsObject,strWhereAsString)
‘初始化分页控件
CallInitConi(oColSet,strWhere,m_coni)
Setm_pagediv=NewPagediv
Callm_pagediv.Initialize(mCnn,m_coni)
‘CallPagedivCtl1.BindPagediv(m_pagediv)
CallVouchList.BindPagediv(m_pagediv)
Callm_pagediv.LoadData
EndSub
…
'初始化分页条件
PublicSubInitConi(ByValoColSetAsObject,strWhereAsString,m_coniAsIPagedivConi)
OnErrorGoToErrHandler
Ifm_coniIsNothingThen
Setm_coni=NewDefaultPagedivConi
EndIf
m_coni.From="KCOtherInList" '此处需要通过一个专门的方法获取列表对应的数据源(视图)名称
IfbGroupByThen'是否查看汇总信息
m_coni.SelectConi=Replace(oColSet.GetSqlSumString,"''","''")
IfstrWhere=""ThenstrWhere="1=1"
m_coni.Where=strWhere
m_coni.GroupBy=oColSet.GetSqlGroupString
m_coni.OrderID=oColSet.GetOrderStringEx
'm_coni.RealTableName=clsVoucherLst.GetVoucherListSet("maintbl")
'm_coni.RealPrimaryKey=clsVoucherLst.GetVoucherListSet("mainkey")
Else
m_coni.SelectConi=oColSet.GetSqlString
m_coni.OrderID=oColSet.GetOrderStringEx
m_coni.Where=strWhere'相当于where部分
m_coni.GroupBy=""
m_coni.RealTableName=""'clsVoucherLst.GetVoucherListSet("detailtbl")
m_coni.RealPrimaryKey=""'clsVoucherLst.GetVoucherListSet("detailkey")
m_coni.SumConi=""
EndIf
ExitFnc:
ExitSub
ErrHandler:
EndSub
…
PrivateSubm_pagediv_AfterGetData(rstAsADODB.Recordset,cntAsLong)
VouchList1.SetVchLstRstNothing
VouchList1.FillMode=FillOverwrite
ST_SetFormatVouchList1,CvouType
VouchList1.DoFormat
VouchList1.SumStyle=vlRecordAndGridsum
VouchList1.SetVchLstRstrst
IfNotIsNull(ColSet)Then
VouchList1.InitHeadColSet.getColInfo
EndIf
VouchList1.RecordCount=cnt
EndSub
…
//在所有以前手工调用查询列表数据的地方修改为调用此列表初始化方法:
InitPagedivCtl
' getListDataVouchList1,ClsBill,CvouType,nPages,1,txtSize.Text,sWhere,True,,,,bGroupBy,m_strGUID
' VouchList1.RecordCount=ClsBill.ListCount
CallInitPagedivCtl(ColSet,moLogin.AccountConnection,VouchList1,sWhere)
…
3.改变【行选择】功能;取代原来各列表界面里toolbar上的全选/全消功能,同时取代以前双击列表选择列打”Y”的功能。
选择:
用列表头check方式取代原来的全选/消功能
【行选择】相关的业务组代码无需调整:
以前判断行选择状态的方法(VouchList.TextMatrix(i,oCols("selcol").iColPos)="Y")完全兼容。
注:
列表控件(V11.0)GRID的左上角(0行0列)是否显示复选框(即:
是否支持全选/消)依据的是原列表(toolbar)上是否支持“全选/全消”功能。
4.调整【筛选】功能;取代原来列表控件自带的小漏斗按钮‘筛选’功能。
移到了toolbar功能按钮区域,对应的筛选结果以红色字体在列表下文翻页区域显示。
【筛选】相关的业务组代码调整:
列表控件(V11.0)去掉了以前的“筛选”小漏斗按键,增加了对应的接口方法(AutoFilter),用于业务组在ToolBar上操作新版本追加的下拉式按钮[筛选]时调用,以实现单据列表原来的筛选功能。
…
Case"tlbFilter"'筛选
IfToolbar1.buttons("tlbFilter").Value=1Then
VouchList1.AutoFilter(True)
Else
VouchList1.AutoFilter(False)
EndIf
…
注:
除非原列表界面的“筛选”功能就不可用,默认所有列表界面都支持筛选功能。
5.美化行记录的间隔背景色[了解];
6.新增【自动折行】功能;
新增的自动折行功能,方便显示栏目里全部信息。
【自动折行】相关的业务组代码调整:
列表控件(V11.0)增加了对应的接口方法(AutoSizeMode),用于业务组在ToolBar上操作新版本追加的check式按钮[折行]时调用,以实现单据列表的折行功能.
…
Case"tlbSize"'折行
IfToolbar1.buttons("tlbSize").Value=1Then
VouchList1.AutoSizeMode(True)
Else
VouchList1.AutoSizeMode(False)
EndIf
…
注:
默认所有列表界面都支持折行功能。
7.新增【复制】功能;
【复制】相关的业务组代码调整:
列表控件(V11.0)增加了对应的事件(CopySelect),用于业务组代码调用判断是否有输出权限时调用,以实现单据列表在有输出权限的情况下正确的复制被选中区域的列表内容。
'lliang_2011-11-28_[新单据列表]:
PrivateSubVouchList1_CopySelect(bAutherAsBoolean)
bAuther=CheckPrinExportAuth(CvouType,False,True) ‘此处直接调用的是原“输出”按钮对应权限判断逻辑。
EndSub
新加快捷键:
Ctrl+C复制、Ctrl+A反选
注:
是否支持复制功能依据的是原列表是否支持输出功能。
8.新增【设计打印模板方案】功能;
列表对应单据的打印模板在线设置与选择:
【设计打印模板方案】相关的业务组代码调整:
列表控件(V11.0)增加了对应的接口方法(ShowVoucherDesign),用于业务组在ToolBar上操作新版本追加的按钮[设计打印模板方案]时调用,以实现单据列表的打印模板设计功能.
…
Case"tlbVoucherDesign"'设计打印模板
allVouchList.ShowVoucherDesign("qm03","553")
…
注:
默认所有列表界面都支持设计打印模板方案功能。
9.列表栏目新增计算列功能;
列表栏目新增功能:
可以自定义追加计算列。
计算列的值公式定义:
1、如下图红框标识各变化区域:
图1——列表全景图。
包括:
toolbar按钮区域、标题、快捷过滤、过滤方案、列表主体、翻页(状态)区域。
10.单据列表界面TooLbar公共通用按钮的逻辑处理[了解]
新增DLL:
U8VouchListCommon.clsToolbarCommon.RunCommand()
PublicFunctionRunCommand(ByValobjLoginAsObject,ByValobjFormAsObject,ByValobjVoucherAsObject,_ ByValsKeyAsString,ByValVarentValueAsVariant,ByValotherAsString)
EndFunction
单据列表界面TooLbar公共通用按钮相关脚本预置补充说明
表:
AA_FormButtons_base,
字段:
[ProcessObjectName](平台公共处理事件dll)设置为“U8VouchListCommon.clsToolbarCommon”
[FunctionKey](按钮公共Key)设置为平台统一规范的各公共按钮Key值。
如打印:
针对【EAI输出】时预置[FunctionKey]时约定格式:
eaiexport[toolbarkey],PurchaseOrder[roottag]
以上字段如果不预置,按钮还走原来的调用机制(由业务组自行实现对应的toolbar_click事件)。
目前列表支持的公共通用按钮包括:
【打印】、【输出】、【预览】、【布局】(【上下布局】、【左右布局】、【显示快捷过滤条件】、【显示快捷过滤方案】)、【定位】、【自动折行】、【EAI输出】、【条件设置】、【收藏到常用功能】、【筛选】。
所以凡涉及这些公共按钮逻辑的处理业务组可以预置toolbar数据的方式通过列表公共服务实现其功能,也可以参考如上说明自己实现toolbar事件处理。
建议:
针对如上这些公共按钮事件里如果没有个性化的业务逻辑最好通过预置toolbar直接调用列表公共实现。
注意:
如果预置了对应的toolbar公共处理信息则不会再调用原来的toolbar_click事件。
代码准备:
需要在初始化ToolBar后调用如下方法
'CallMe.CTB.InitExternalButton(mVoucherType,g_Login)
'CallCTB.SetFormInfo(Me.ctlVoucher,Me)
11.单据列表支持EAI输出快速实施格式的XLS文件
通过预置toolbar列表公共处理服务实现,支持以实施工具的格式输出功能。
12.新增【条件设置】-着色功能
通过预置toolbar列表公共处理服务实现。
列表着色:
新增功能,用于通过条件设置把符合条件的记录或单元格用设定的颜色显著的标识出来。
条件值公式定义:
快捷条件值设置:
13.新增【布局】功能;
Ø快捷过滤用户可选择快捷过滤上下布局或者左右布局,快捷过滤可设置是否显示。
列表布局:
新增列表各区域各种组合布局显示方式
左右布局:
隐藏快捷过滤:
隐藏过滤方案:
14.【快捷过滤动态布局】相关的业务组代码调整:
列表控件(V11.0)增加了对应的接口方法(IsFltVerticalDisplay、FltSolutionVisiable),用于业务组在ToolBar上操作新版本追加的下拉式按钮[布局]时调用,以实现单据列表快捷过滤动态设置布局的功能。
…
Case"tlbVertical"'纵向布局
IfToolbar1.buttons("tlbVerti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 U8 开发 单据 列表 控件
![提示](https://static.bdocx.com/images/bang_tan.gif)