版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档精心整理精品文档可编辑的精品文档L5U8客开培训文档单据列表目录:1、L5U8客开培训文档单据列表2、某山渣公司的培训制度及全套表格3、预备法官培训结业鉴定表U8单据列表控件开发培训部门:U8平台及公共开发部U8版本号:V11.1讲师:李亮定稿时间:2013-11-110.变更记录变更阶段时间变更原因变更类型内容提出人
单据列表介绍单据列表发展历程单据列表发展经历了如下几个重大里程碑:1、U8V8.721)单据列表控件引用的UFSpGrid.ocx 因代码超出VB工程“容量”,同时避免打破兼容性,更换为UFSpGrid2.ocx。2)同时单据列表支持的编辑功能,具体如下:单据列表对合并显示功能的支持:要使单据列表支持合并显示的功能,主要要对栏目设置功能的进行设置,单据列表对参照输入的支持1、增加对事件BrowUser,FillList的支持,其用法与SuperGrid中的用法相同2、要使单据列表具有参照输入的功能,须在栏目设置中进行如下设置:a.AA_ColumnDic及AA_ColumnSet两个视图b.BrowUserType,如果为NULL或为0,则单据列表状态保持原样,其它类型同SuperGrid中的类型定义,其定义如下:'列参照类型EnumBrowTypeBrowNull=0UserBrowButtonDblBrowButtonDateBrowButtonBrowComEndEnum其值按1递增。增加对超字段选择范围的支持,也就条件的字节数可以超过8k限制增加对UAP结构下分页组件的调用方式,用法如下:其大体调用方式与CS方式下的调用没有太大区别,与CS不同的地方在于要UAP的调用方式要声明一个算法变量,以支持UIP调用后结果集的导入,具体用法详见示例工程的Form2代码增加对枚举类型的支持在U8VouchList中增加分页的功能,用法如下:1、请按原有使用VouchList的方式使用单据列表2、将分页的按钮放在所使用的窗体中3、在数据库中执行脚本,创建分页引擎的存储过程SPPagediv2、U8V11.0 单据列表整合了翻页和快捷过滤功能,同时增强了交互和易用性。如:着色、布局等20多个功能,具体参考《新单据列表迁移指导说明.doc》单据列表示例代码及常用功能说明具体代码示例工程参见:《列表测试工程》扩展:PrivateWithEventsm_pagedivAsPagediv'分页引擎,配合实现单据列表自身的翻页功能。CallobjU8Tbl.InitExternalButton(strCardNum,m_Login)CallMe.UFToolbar1.SetFormInfo(VchLst,Me) ‘单据列表及控件与toolbar绑定,以便后续二次开发功能拓展。属性:VchLst.SumStyle=vlGridSum '合计方式'合计方式枚举PublicEnumSumStyleEumvlSumNone=0'没有合计vlRecordsum=1'记录集合计vlGridSum=2'Grid合计vlRecordAndGridsum=3'记录集和Grid合计EndEnumVchLst.ReadOnly=NotCBool(1)VchLst.LoginObj=m_LoginVchLst.FltState=FalseVchLst.ShiftUpDown=True ‘是否支持shift+上下箭头连续选择行VchLst.HiddenRefreshView=FalseVchLst.FillMode=FillOverwrite '填充模式'填充模式枚举PublicEnumFillModeEnumFillAppend=0'追加填充FillOverwrite=1'覆盖填充EndEnumVchLst.Title=“列表的标题”VouchList.TextMatrix(row,col)=“单元格值”VouchList.LocateState ‘定位状态True:定位False:取消定位VouchList.TopRow ‘纵向滚动后最顶上的当前行号方法:CallVchLst.InitFlt(m_Login,clsVoucherLst.objFilter,"","","",strErrorRes) ‘初始化过滤对象VchLst.InitHeadoColSet.getColInfo() ‘初始化表头sHeadXml表头格式信息VchLst.SetPrintOtherInfosXML ‘设置打印其它信息-表尾SetdomOption=VchLst.GetListDom(False) ‘取得列表对应dom对象bSelecttrue-返回选中行dom对象false-返回整个列表dom对象sXML=Me.VchLst.GetColumnWidthXML() ‘获取被调整列宽或列序的栏目串VchLst.SetFormatString"fdtrate","0.000000" 、VchLst.DoFormat‘设置格式化信息VchLst.ClearDataSource ‘解除数据邦定VchLst.SetVchLstRstvltable.DataRecordset ‘设置表体记录集VchLst.RecordCount=vltable.DataCount ‘设置列表全部数据集记录数VchLst.SetSumRstrstSum ‘合计记录集CallVchLst.BindPagediv(m_pagediv)‘分页引擎邦定VchLst.AdJustGridWidth ‘作废VchLst.ProtectUnload() ‘数据合法性检查。当前对象状态安全检查,可在执行某些上层功能时调用。如增加/删除功能、窗口Form_QueryUnload事件等地方PrivateSubButtonClick(strButtonKeyAsString)IfVchLst.ReadOnly=FalseThenIfVchLst.ProtectUnload()<>2ThenExitSubEndIfEndIfCallVchLst.ShowVoucherDesign(strPrintCardnum,ipvtidStr,"SA") ‘打印模板设计界面VchLst.AddItem"",VchLst.rows ‘增加项目VchLst.ShowBatchModify ‘调用这个方法显示批量修改窗口//VchLst.AllSelect//VchLst.AllNonelngMainCol=VchLst.GridColIndex(strMainKey) ‘根据关键字来获取所在列的索引VchLst.Find ‘查找:在定位状态下,查找下一个VchLst.InitPrintSetupstrPrnXml ‘初始化打印设置VouchList.VchLstPreview `'预览VchLst.GetGridBody().XXX ‘引用UFSpGrid2.ocx,用于直接操作UFSpGrid2控件VchLst.GetGridBody().GetGridBody().XXX ‘引用vsflexgrid.ocx,用于直接操作vsflexgrid控件VouchList.Locate '定位SetdomLine=VouchList.GetBodyLine(iRow) ‘根据行索引取得表体行dom对象事件:PrivateSubVchLst_AfterColumnsDisplayRule() '着色后事件PrivateSubVchLst_BatchModify(sItemXMLAsString) '批改窗口弹出前,对传入批改窗口的xml进行再构造,比如设置参照类型等PrivateSubVchLst_BrowUser(RetValueAsVariant,rowAsLong,ColAsLong) ‘单元格编辑参照事件PrivateSubVchLst_CellValueChanged(ByValrowAsInteger,ByValColAsInteger,NewValueAsVariant,OldValueAsVariant,KeepFocusAsBoolean) ‘单元格内容变化检查事件PrivateSubVchLst_DblClick() ‘双击PrivateSubVchLst_FillList(ByValrAsLong,ByValcAsLong,pComAsObject) ‘单元格编辑下拉事件PrivateSubVchLst_MouseUp(ByValButtonAsInteger,ByValShiftAsInteger,ByValXAsSingle,ByValYAsSingle)PrivateSubVchLst_PrintSettingChanged(ByValvarLocalSettingsAsVariant,ByValvarModuleSettingsAsVariant) ‘打印信息改变时触发PrivateSubVchLst_RowColChange() ‘单据列表支持切换行功能PrivateSubVchLst_SelectClick2(ByValSelectedAsBoolean,ByValrowAsLong) ‘SelectClick和SelectClick2使用一个就可以了,而且SelectClick2要逐渐替代SelectClickPrivateSubVchLst_CopySelect(bAutherAsBoolean) ‘增加copytocliborad的功能,返回权限。PrivateSubVouchList_BeforeSendCommand(cmdTypeAsU8VouchList.UFCommandType,pageSizeAsLong,pageCurrentAsLong)‘列表翻页事件列表控件原有功能说明特性 列表控件的安装位置:\U8SOFT\ufcomsql\U8VouchList.ocx 列表控件主要用于初报表外的表格样式的展示,包括单据列表、生单列表、个别档案列表等等。 列表控件主要和栏目控件配合使用,也可以单独使用。 列表控件具备编辑能力,支持文本、数字、下拉框、参照等输入方式。 下面介绍列表控件的属性、方法、事件。属性BottomRow属性 说明: 获取当前显示区域最后一行的索引。只读属性。 语法:
VouchList1.BottomRow 参数说明:
无 返回值: 当前显示区域最后一行的索引ColPoint属性 说明: 获取与设置某列的小数位数。 语法:
VouchList1.ColPoint(cFld)=[valueaslong] 参数说明:
VouchList1:控件名称
cFld:列的字段名 Value:小数位数EditLocked属性 说明: 获取或设置控件是否被编辑锁定,锁定后将不能编辑。 语法:
VouchList1.EditLocked()=[valueasBoolean] 参数说明:
VouchList1:控件名称
Value:true—锁定,不能编辑,false—不锁定,可编辑。FrozenCols属性 说明: 获取或设置列表控件冻结列的个数。 语法:
VouchList1.FrozenCols()=[valueasLong] 参数说明:
VouchList1:控件名称
Value:冻结列的个数IsSumSelectedRows属性 说明: 获取和设置是否只对选中行进行合计。 语法:
VouchList1.IsSumSelectedRows()=[valueasBoolean] 参数说明:
VouchList1:控件名称。 Value:true--只对打上“Y”的行进行合计;false—对所有行进行合计。LeftCol属性 说明: 获取和设置当前显示区域最左侧列的索引。 语法:
VouchList1.LeftCol=[valueasLong] 参数说明:
Value:当前显示区域最左侧列的索引LoginObj属性 说明: 获取和设置登录对象,在批改时需要登录对象。 如果使用批量替换必须设置该属性,而且在调用ShowBatchModify之前必须设置好,如果不使用批量替换,可以不设置。 语法:
VouchList1.LoginObj=[valueasObject] 参数说明:
Value:当前U8的登录对象ReadOnly属性 说明: 获取和设置控件是否只读。 语法:
VouchList1.ReadOnly=[valueasBoolean] 参数说明:
Value:true—只读false—可编辑RightCol属性 说明: 获取当前显示区域最右侧列的索引。只读属性。 语法:
VouchList1.RightCol 参数说明:
无ShiftUpDown属性 说明: 获取和设置是否支持shift+上下箭头连续选择行。 语法:
VouchList1.ShiftUpDown=[valueasBoolean] 参数说明:
VouchList1:当前控件对象。 Value:true—支持false—不支持。ShowSelCol属性 说明: 获取和设置是否显示选择列。 语法:
VouchList1.ShowSelCol=[valueasBoolean] 参数说明:
VouchList1:当前控件对象。 Value:true—显示选择列false—不显示选择列。SortASC属性 说明: 获取和设置当前排序是升序还是降序。 语法:
VouchList1.SortASC=[valueasBoolean] 参数说明:
VouchList1:当前控件对象。 Value:true表示升序false表示降序。SortCol属性 说明: 获取当前排序列的列号,如果返回值为-1表示没有排序列(还没有使用过排序)。 语法:
VouchList1.SortCol 参数说明:
VouchList1:当前控件对象。SumRows属性 说明: 获取和设置合计(小计)行的行数。 有些合计行是业务组加进去的,不是用的SumStyle属性,这种情况处理选择行时就会把这样的行选中。增加这个属性后,业务组代码就可以更改合计行的行数,从而在选择行时排除这些行。 注意:合计行必须是在末尾 语法:
VouchList1.SumRows=[valueasLong] 参数说明:
VouchList1:当前控件对象。 Value:有多少个合计行。SumStyle属性 说明: 如果需要连续使用addline增加行,将会频繁地调用GridAutoSum(addline内调用)导致效率下降。 解决办法:程序员在连续调用addline之前,把sumstyle设置为sumnone,调用addline结束后,再赋回原来的合计方式。示例代码如下: dimOldSumStyleAsSumStyleEum OldSumStyle=Vouchlist.SumStyle VouchList.SumStyle=SumStyleEum.vlSumNone VouchList.SumStyle=OldSumStyle 语法:
VouchList1.SumStyle=[valueasSumStyleEum] 参数说明:
VouchList1:当前控件对象。 Value: PublicEnumSumStyleEum vlSumNone=0'没有合计 vlRecordsum=1'记录集合计 vlGridSum=2'Grid合计 vlRecordAndGridsum=3'记录集和Grid合计 EndEnumTextMatrixName属性说明: 返回表体中某一单元格的值,如果是枚举值,则返回枚举名称语法:
VouchList1.TextMatrixName(rowaslong,colaslong)参数说明:
VouchList1:控件名称
Row:行索引
Col:列索引TopRow属性 说明: 获取和设置当前显示区域最顶端行的索引。 语法:
VouchList1.TopRow=[valueasLong] 参数说明:
Value:当前显示区域最顶端行的索引方法AddLine方法 说明: 根据传入dom对象新增加一行,内部要调用AddItem方法。 语法:
FunctionAddLine(ByValrowAsLong,ByValoDomAsDOMDocument)AsBoolean 参数说明:
Row:插入行索引,在该行后插入新增行 oDom:行dom对象
返回值:成功返回true,失败返回false。AddSumLine方法 说明: 根据传入dom对象新增加一行合计行. 语法:
PublicFunctionAddSumLine(ByValrowAsLong,ByValoDomAsDOMDocument)AsBoolean 参数说明:
Row:插入行索引,在该行后插入新增行 oDom:行dom对象
返回值: 成功返回true,失败返回false。CalcSum方法 说明: 重新计算合计行的数值。 语法:
PublicSubCalcSum() 参数说明: 无 返回值: 无DisableTextMatrix方法 说明: 设置单元格是否可用,不可用后,既不能手工输入,也不能通过textmatrix赋值。 语法:
PublicSubDisableTextMatrix(ByValbDisableAsBoolean,ByValsIndexAsString,ByValrowAsLong) 参数说明:
bDisable:true-disablefalse-enable sIndex:列索引(字符串) row:行索引(数值)
返回值: 无GetBodyLine方法 说明: 根据行索引取得表体行dom对象。 语法:
PublicFunctionGetBodyLine(ByValrowAsLong)AsDOMDocument 参数说明:
row:行索引(数值)
返回值: 行dom对象,其中包含行中的数据。GetColIndex方法 说明: 根据列的字段名称取列的顺序号。 语法:
PublicFunctionGetColIndex(ByValColNameAsString)AsLong 参数说明:
ColName:列的字段名称
返回值: 列的顺序号。GetColName方法 说明: 根据列的顺序号取列的字段名称。 语法:
PublicFunctionGetColName(ByValColIndexAsLong)AsString 参数说明:
ColName:列的顺序号 返回值: 列的字段名称
。GetGridBody方法 说明: 获取列表控件封装的SuperGrid控件。 语法:
PublicFunctionGetGridBody()AsObject 参数说明: 无 返回值: SuperGrid控件对象。
GetHeadLine方法 说明: 取得标题行的dom对象。 语法:
PublicFunctionGetHeadLine()AsDOMDocument 参数说明: 无 返回值: 标题行的dom对象。GetListDom方法 说明: 取得列表数据的dom对象。 语法:
PublicFunctionGetListDom(ByValbSelectAsBoolean)AsDOMDocument 参数说明:
bSelect:true-返回选中行dom对象false-返回整个列表dom对象 返回值: 列表数据的dom对象
。HideCaption方法 说明: 隐藏列表的标题,如销售订单列表的标题“销售订单列表”。 语法:
PublicSubHideCaption() 参数说明: 无 返回值: 无Locate方法 说明: 弹出定位窗口,根据输入的条件定位。 语法:
PublicSubLocate(ByValLocStateAsBoolean) 参数说明:
LocState:true-定位false-取消定位 返回值: 无。ProtectUnload方法 说明: 当前对象状态安全检查,可在执行某些上层功能时调用。如增加/删除功能、窗口Form_QueryUnload事件等地方 语法:
PublicFunctionProtectUnload()AsOpType 参数说明:
无 返回值: EnumOpType dbCandel=0—取消操作 dbRetry重试操作 dbsuccess操作成功 EndEnumReadOnlyTextMatrix方法 说明: 设置单元格是否只读,只读单元格不能手工输入,但是可以通过textmatrix赋值。 语法:
PublicSubReadOnlyTextMatrix(ByValbReadOnlyAsBoolean,ByValsIndexAsString,ByValrowAsLong) 参数说明:
bReadOnly:true-只读false—可编辑 sIndex:列索引(字符串) row:行索引(数值)
返回值: 无RemoveItem方法 说明: 删除一行。 语法:
PublicSubRemoveItem(ByValIndexAsVariant) 参数说明:
Index:行索引(数值)
返回值: 无SetCellFocus方法 说明: 光标移至单元格(Row,Col)。 语法:
PublicFunctionSetCellFocus(ByValrowAsLong,ByValcolAsLong) 参数说明:
row:行索引(数值)
col:列索引(数值)
返回值: 无SetListDom方法 说明: 将dom对象内的数据刷新到列表界面上,dom对象是一个recordset转换的对象。 语法:
PublicFunctionSetListDom(ByValoDomAsDOMDocument)AsBoolean 参数说明:
oDom:存放数据的dom对象 返回值: 执行成功返回true,否则返回false。ShowBatchModify方法 说明: 显示批量修改窗口,要支持批量修改功能,必须调用此方法。 语法:
PublicSubShowBatchModify() 参数说明:
无 返回值: 无UpdateLine方法 说明: 根据传入dom对象数据更新一行。 语法:
PublicFunctionUpdateLine(ByValrowAsLong,ByValoDomAsDOMDocument)AsBoolean 参数说明:
Row:行索引 oDOM:dom对象 返回值: 更新成功返回true,否则返回false。事件AfterSort事件触发时机:
排序之后触发此事件功能:
处理列排序后的事件
声明:
PublicEventAfterSort(ByValcolAsLong,ByValbAscAsBoolean)参数说明: bAsc:true-升序false-降序 col:排序的列号BatchModify事件触发时机:
批改窗口弹出前触发此事件功能:
批改窗口弹出前,对传入批改窗口的xml进行再构造,比如设置参照类型等。声明:
PublicEventBatchModify(ByRefsItemXMLAsString)参数说明: sItemXML:出给批改出口的xml字符串。BeforeEdit事件触发时机:
单元格进入编辑状态前触发此事件功能:
进入编辑之前的事件,可以在这里做一些编辑前的设置和判断,如果Cancel返回true,则不进入编辑。声明:
PublicEventBeforeEdit(ByRefCancelAsBoolean)参数说明: Cancel:如果Cancel返回true,则不进入编辑。BeforeSort2事件触发时机:
将要排序之前触发此事件功能:
处理列排序前的个性化需求声明:
PublicEventBeforeSort2(ByRefbSortAsBoolean,ByValcolAsLong,ByValbAscAsBoolean)参数说明: bSort:是否继续排序,如果为false,则将不执行排序操作,也将不触发BeforeSort和AfterSort事件。 bAsc:true-将要执行的是升序false-将要执行的是降序 col:排序的列号BeforeSort事件 此事件已废弃,由BeforSort2代替。Click事件触发时机:
鼠标在控件上点击时触发功能:
处理鼠标单击事件声明:
PublicEventClick()参数说明: 无DblClick事件触发时机:
鼠标在控件上双击时触发功能:
处理鼠标双击事件声明:
PublicEventDblClick()参数说明: 无IsAllowBatchModify事件触发时机:
批改窗口关闭后,执行批改过程中触发。功能:
是否允许批改事件,在进行批改前判断单元格是否可修改,如果bCanModify返回为false,则对此单元格不执行批改。声明:
EventIsAllowBatchModify(ByRefbCanModifyAsBoolean,ByValrowAsLong,ByValcolkeyAsString)参数说明: bCanModify:false-不执行批改true-执行批改 row:行索引 colkey:列字段名KeyDown事件触发时机:
键盘按键按下时触发功能:
处理键盘按键按下事件声明:
PublicEventKeyDown(ByValKeyCodeAsInteger,ByValShiftAsInteger)参数说明: KeyCode:按下的按键 Shift:同时按下的其他功能键KeyPress事件触发时机:
键盘按键按下时触发功能:
处理键盘按键按下事件声明:
PublicEventKeyPress(ByValKeyAsciiAsInteger)参数说明: KeyAscii:按下的按键KeyUp事件触发时机:
键盘按键按下后又松开是触发功能:
处理键盘按键松开抬起时的事件声明:
PublicEventKeyUp(ByValKeyCodeAsInteger,ByValShiftAsInteger)参数说明: KeyCode:按下的按键 Shift:同时按下的其他功能键SelectClick2事件触发时机:
当选中/取消选(打上“Y”/去掉“Y”)中一行时触发此事件。 代替SelectClick事件。功能:
处理行选中/取消选中时的个性化操作。声明:
PublicEventSelectClick2(ByValSelectedAsBoolean,ByValrowAsLong)参数说明: Selected:当前所点击的选择列的状态,如果已选择,也就是被打上“Y”,则此值为True,否则为False Row:当前选中/取消选中的行索引。其他的属性、方法、事件 列表控件其他的属性、方法、事件请参考:(html格式文件,双击图标可打开)Supergrid表格控件 SuperGrid控件的安装位置:\U8SOFT\ufcomsql\UFSPGrid.ocx属性方法AddItem方法 说明: 在列表表体中增加一行 语法:
VouchList1.AddItem(ItemAsString,[IndexAsLong]) 参数说明:
Item:待插入行的String表示,用vbTag或Chr(0)分隔开的字符串
Index:待插入的行在列表中所在的位置,如果这个参数忽略,将在列表的表体最末行加入
返回值: 无
Clear方法 说明: 清空Grid的数据。 语法:
VouchList1.AddItem(ItemAsString,[IndexAsLong]) 参数说明:
Item:待插入行的String表示,用vbTag或Chr(0)分隔开的字符串
Index:待插入的行在列表中所在的位置,如果这个参数忽略,将在列表的表体最末行加入
返回值: 无事件BeforeEdit事件触发时机:
单元格进入编辑状态前触发此事件功能:
进入编辑之前的事件,可以在这里做一些编辑前的设置和判断,如果Cancel返回true,则不进入编辑。声明:
EventBeforeEdit(CancelAsBoolean,sReturnTextAsString)参数说明: Cancel:如果Cancel返回true,则不进入编辑 sReturnText:可以通过这个参数返回单元格的值其他的属性、方法、事件 Supergrid表格控件的属性、方法、事件请参考:(html格式文件,双击图标可打开)栏目控件相关特性 栏目控件是用来设置编辑栏目的位置、标题、宽度等信息的控件,开发者可以利用此控件返回的SQL语句动态拼写SQL语句。显示栏目 DimcolsetasNewU8ColumnSet.clsSet Cnnstr=”Data数据库连接串” Callcolset.init(cnnstr,用户名) Callcolset.setColMode(Key值,1) ‘第二个参数为1返回显示列,为2返回默认列,为0返回所有列 Colset.setcol 得到返回值GetSqlString返回SQL语句的Select部分。GetSqlSumString返回SQL语句的汇总部分(需要将ShowSumType设置为True才有效)。GetOrderString、GetOrderStringEx返回SQL语句的Orderby部分。GetSQLGroupString返回SQL语句的GroupBy部分(需要将ShowSumType设置为True才有效)getColInfo得到栏目的XML信息 关于元数据和缓存栏目存储规则为先从Meta库的AA_Columndic_Base表中读取数据,同时管理客户数据即Data库的AA_Columnset_Base表。如果客户在Data库中的AA_Columndic_Base表中有与Meta库不存在的记录则会加载这部分记录。栏目存储后会将记录缓存在Data库的AA_ColumnDicCache_Main和表AA_ColumnDicCache_Detail表中,所以如果手工提交栏目的SQL语句修改栏目则需要清除以上两个表的相关记录。权限相关 摘要 功能权限通常称之为“按钮权限”或者“菜单权限”,即控制用户点击按钮或者菜单的权限。 设置用户、角色对应档案、单据的数据权限,用于控制后续业务处理中允许录入、查看的数据范围。 支持记录级权限控制和字段级权限控制。用户可以根据数据权限默认设置来决定某一系统是否需要权限控制。用户具体的权限由用户自身权限、用户继承角色权限组成。 记录级权限支持VB版和版两个版本。主要负责控制用户可以看到多少数据,例如部门档案,可以通过记录级权限设置某一用户只能查看或修改其中一个或多个部门数据。 11.0版本增加了管理维度权限,它属于记录级功能权限的一个扩展,它可对某些特殊档案进行多个维度的控制,例如客户档案,我们可以设置A用户的客户管理维度权限:当某些客户档案属于XX部门管理,地点在北京地区,又属于IT业务时(相当于符合3个维度权限要求),A用户可看到该客户档案信息,如果该客户档案有一个维度不符合,则A用户就看不到该客户档案信息。 字段级权限:可以控制某一个用户是否可以查看/修改某一个敏感字段,例如某公司采购一件商品,运货人员在系统中是不允许看到本次交易金额的,但是可以看见货物的发货地址和接受地址。 注意:870之后,字段权限增加了无权限。其中有两点需要特别注意: (1)系统为字段级权限设置了默认权限,而当用户自身设置了其中某一字段权限后,则该权限优先,默认权限失效。 (2)当一个用户拥有多个角色,那么首先用户自身设置的权限优先,其他权限均取最大权限值。 什么是权限?U8系统里的权限分为两种,一种是对功能权限进行控制,另一种则是对系统中的每一行数据或者一部分数据中的敏感字段进行控制,不同的人授予不同的权限,增强系统的安全性和保密性,达到最终的管理目标。目标本文主要介绍权限的基础知识,应用过程及相关注意事项,方便各类U8产品开发人员更好的使用权限,更高效的开发产品。功能权限可以做什么?功能权限通常称之为“按钮权限”或者“菜单权限”,即控制用户点击按钮或者菜单的权限。功能权限控制的精细程度由开发者来决定。比如某个功能点仅控制菜单进入权限,另一功能点控制“新增”、“修改”、“删除”权限。如何使用功能权限?预置功能权限从10.0开始,账套库增加了权限表UA_Auth_Base和UA_Auth_Lang,表结构与UFSystem库对应的表结构完全一致,UFSystem库的表用于存放标准产品预置数据,UFDATA账套库的表用于存放运行时产生的权限(如用户自定义报表、表单)和二次开发的权限。注意,二次开发的权限信息必须存放在账套库中,否则备份还原账套时权限将会丢失。数据字典如下:功能权限基本表(UA_Auth_Base)(UFData库)字段名字段类型说明cAuth_Id(U861)nvarchar(100)功能编号
cSub_Id(U861)nvarchar(2)模块标识
iGrade(U861)smallint级次cSupAuth_Id(U861)nvarchar(100)上级功能编号
bEndGrade(U861)bit是否末级
cAcc_Id(U861)nvarchar(3)账套号(废弃)iOrder(U861)int显示顺序号
cAuthType(U870)nvarchar(10)互斥类型(不需要预制,计算结果,参见登录开发文档)cAllSupAuths(U871)nvarchar(1024)父节点目录
(不需要预制,计算结果,参见登录开发文档)irepnum(U871)int互斥功能个数
(不需要预制,计算结果,参见登录开发文档)cRepellentModule(U871)nvarchar(255)互斥模块集合,以逗号分隔
(不需要预制,计算结果,参见登录开发文档)cNotRepellent(U871)nvarchar(1024)不互斥功能集合,以逗号分隔
(不需要预制,计算结果,参见登录开发文档)cRepellent(U871)nvarchar(4000)互斥功能集合,以逗号分隔
(不需要预制,计算结果,参见登录开发文档)cRepInDB(U8100)nvarchar(4000)互斥功能集合,以逗号分隔
(不需要预制,计算结果,参见登录开发文档)cRepModInDB(U8100)nvarchar(250)互斥模块集合,以逗号分隔
(不需要预制,计算结果,参见登录开发文档)cNotRepInDB(U8100)nvarchar(1024)不互斥功能集合,以逗号分隔
(不需要预制,计算结果,参见登录开发文档)功能权限多语表(UA_Auth_Lang)(UFData库)字段名字段类型说明cAuth_ID(U861)nvarchar(100)功能编号
localeid(U861)nvarchar(32)语言ID,zh-CN(简体中文),zh-TW(繁体中文),en-US(英文)
cAuth_Name(U861)nvarchar(150)功能权限名称
运行时验证功能权限参照登录开发文档。把功能权限与企业门户菜单进行关联参照企业门户开发文档。数据权限可以做什么? 数据权限是软件系统中开发中必不可少的功能,它是整个软件安全的一部分。V10.1及之前版本数据权限特性由于V11.0版本只是在数据权限中增加和调整了一部分管理维度权限,其他内容均和之前版本相似,所以这里不做重点的讲解,这些版本的程序引用和调用方法模式没有变化。使用方式将在如何使用数据权限中介绍。V11特性支持管理维度控制对于客户、客户联系人、服务、线索、行动、竞争对手、竞争订单等一些特殊的业务对象进行多维度的控制,来达到更复杂的数据安全管理需求。目前支持7个维度的控制,分别为相关/负责人员、部门、管理维度1、管理维度2、管理维度3、管理维度4、客户权限维度,其中相关/负责人员的数据来源于系统操作员,部门档案维度的数据来源于部门档案,管理维度1到4以及客户权限维度均由用户自己定义数据来源。管理维度1、管理维度2、管理维度3、管理维度4、客户权限维度用户可自行定义名称数据来源可以选择手工录入,也可选择来源于系统档案当选择手工输入时,则需要客户自行定义维度档案当选择来源于系统档案时,则无需维护维度档案,只需维护已有的系统档案即可可以选择启用还是关闭启用数据字典V11.0数据字典业务对象基本表(aa_busobject_base)(UFData库)字段名字段类型说明cBusObidnvarchar(100)业务对象关键字,如已有的部门档案为“department”cBusObNamenvarchar(600)该按钮的功能Key,对象名称iAuthTypetinyint权限类型,0表示记录级权限,1表示字段级权限bAuthControltinyint是否控制维度权限,0表示不控制;1表示控制cSub_Idnvarchar(200)模块标识串cMarknvarchar(1000)说明pubuftstimestamp时间戳iFuncTypesmallint记录级权限类型(0表示没有具体权限类别;1表示有读写等权限类别)langidnvarchar(40)语言ID,目前有三种:zh-CN(简体中文);zh-TW(繁体中文);en-US(英文);iOrdersmallint排序标识(系统用)bLockedbit是否锁定cLockedBybit(保留字段)bNoAuthbit默认无权bAuthDimControl(U8110)bit是否控制管理维度权限,表示是否启用该业务对象的管理维度权限控制。(0表示不启用;1表示启用)bDeptControl(U8110)smallint是否控制部门维度权限(0表示不控制;1表示控制)bPersonControl(U8110)smallint是否控制相关人员维度权限(0表示不控制;1表示控制)bAuthDim1Control(U8110)smallint是否控制管理维度1(0表示不控制;1表示控制)bAuthDim2Control(U8110)smallint是否控制管理维度2(0表示不控制;1表示控制)bAuthDim3Control(U8110)smallint是否控制管理维度3(0表示不控制;1表示控制)bAuthDim4Control(U8110)smallint是否控制管理维度4(0表示不控制;1表示控制)bCusDimControl(U8110)smallint是否控制客户维度(0表示不控制;1表示控制)cAuthDimControlScope(U8110)nvarchar(20)可控制的管理维度范围,一共7位二进制数字,每一位数字均表示该业务对象是否受某一个维度控制,0表示不受控制,1表示受其控制,这7位数字组成顺序为(部门维度,相关人员维度,管理维度1,管理维度2,管理维度3,管理维度4,客户维度)。例如1111110表示该业务对象将受到“部门维度、相关人员维度、管理维度1、管理维度2、管理维度3、管理维度4”的控制,而不受“客户维度”的控制。PrimaryKeyFieldName(U8110)nvarchar(400)主键字段名称,栏目中取出,单据列表使用业务对象基本表视图(AA_BusObject)(UFData库),用于读取业务对象基本表(aa_busobject_base),只读取其中一种语言的数据,字段含义一致。同上公共存储过程基本表(AA_RowAuthDic_base)(UFData库)字段名字段类型说明CTableNamenvarchar(100)表名称CECodenvarchar(100)‘编码’英文名称CCCodenvarchar(60)‘编码’中文名称CENamenvarchar(100)‘名称’英文名称CCNamenvarchar(60)‘名称’中文名称cBusObIdnvarchar(100)业务对象IDiRowAuthTypesmallint记录级权限类型langidnvarchar(40)语言ID,目前有三种:zh-CN(简体中文);zh-TW(繁体中文);en-US(英文);CEClassNamenvarchar(100)‘分类’中文名称CCClassNamenvarchar(60)‘分类’英文名称CAuthDimTablenvarchar(256)CUserTablenvarchar(256)CEAuthDimTableCodenvarchar(256)CEUserTableCodenvarchar(256)公共存储过程基本表视图(AA_RowAuthDic)(UFData库),用于读取公共存储过程基本表(AA_RowAuthDic_base),只读取其中一种语言的数据,字段含义一致。同上如何使用数据权限?老版本数据权限(870)记录级服务U8RowAuthsrv.dll在VB中引用U8RowAuthsrv组件 在VB中点击主菜单中的“工程->引用”,随后出现的“引用”对话框中选中“U8RowAuthsrv”,然后点击“确定”,如下图所示:dll文件的方法介绍如下:GetAuthString方法:返回对某个表的拥有的权限的SQL条件串 没有权限返回1=2;有全部权限返回空字符串;有权限返回条件串。对客户、供应商、存货有权限分类的,返回OR字符串,如IID=2orIID=3'对其他档案返回In条件串,字段关键字由外部系统拚,如:in('001','002');对其他业务对象,为避免SQL语句超长,返回Select…子查询,而不是逗号分割的字符串。如部门:in(selectcACCodefromaa_holdauthwherecUserId='demo'andcBusObId='department')注意:用户继承用户组的权限语法object.GetAuthString(cBusObIdAsString,[cClassCodeAsString],[cFuncIdasString])asstringGetAuthString方法的语法包含下列部分:Object必需的。代表一个对象表达式,其值是记录集权限服务对象cBusObId业务对象IDcClassCode可选项。项目大类(项目专用)cFuncId可选项。功能ID,六个枚举值下面是参数详情cBusObId的设置值值描述AuthDimen1管理维度1AuthDimen2管理维度2AuthDimen3管理维度3AuthDimen4管理维度4CM_Type合同类型code科目Customer客户申请类型Customer客户权限维度Department部门djmb单据模板djsj单据设计dsign凭证类别fa_assettypes资产类别fitem项目gzauth工资权限hr_bd_rpt人力资源报表hr_bd_voucherinfo人力资源业务单hr_ct270福利地区hr_v_vouchertype人事业务变动hr_wm_project福利方案Inventory存货档案Metric指标MoType生产订单类别NEAuth网上报销Operation_Type网上报销业务类型person业务员Position货位PurchaseType采购类型QMCheckGuide检验指标Rd_Style收发类别SaleType销售类型U870_0001存货申请类型unit资金单位user用户Vendor供应商档案Warehouse仓库Person职员U8fore报账中心Company集团企业目录Fitem项目大类表名cFuncId的设置值值描述R(ead)查询/查账W(rite)删改/录入/制单V(erify)审核U(nverify)弃审A()撤销C(lose)关闭空值有权VB查询“demo”用户资金单位(unit)的W(rite)删改/录入/制单权限PrivateSubmnu_rowauth_Click()'初始化DLLDimoRowAsNewclsRowAuthDimretAsStringDimconstringAsStringconstring="Provider=SQLOLEDB.1;PersistSecurityInfo=True;UserID=sa;password='';InitialCatalog=UFDATA_001_2007;DataSource=echocloud;"oRow.Initconstring,"demo",Falseret=oRow.GetAuthString("unit","","W")MsgBoxretDimstrSqlAsString‘查询SQL语句DimstrSqlWhereAsString‘权限过滤串'实例:为部门档案添加读权限过滤strSql="select*fromdepartmentwhere1=1and"strSqlWhere=oRow.GetAuthString("department","","W")'该strSqlWhere语句会得到以下几种语句'(1)1=1拥有全部权限'(2)cDepCodein('1','2','3')拥有部分权限'(3)1=2无权'具体用时,只需要将这strSql+strSqlWhere加起来查询即可。strSql=strSql+strSqlWhere'然后用strSql查询即可MsgBoxstrSqlEndSub 初始化DLL方法,一共三个参数oRow.Init"数据库连接字符串","用户ID","是否为Web调用(一般都是C/S调用,设置值为false)"IsHoldAuth方法:返回是否对某个表的某行纪录拥有权限注意:当业务对象是user时,特殊处理操作员对自身有查询权限语法object.IsHoldAuth(cBusObIdAsString,cValueAsString,cClassCodeAsString,cFuncIdAsString)asstringIsHoldAuth方法的语法包含下列部分:部分描述Object必需的。代表一个对象表达式,其值是记录级权限服务对象cBusObId业务对象ID,值同于方法GetAuthString中的参数cBusObIdcValue字段值cClassCode可选项,项目大类(项目专用)cFuncId可选项,功能ID,值同于方法GetAuthString中的参数cFuncId返回值:True有权限;False没有权限VB查询用户对部门编码001有无读权限oRow.isHoldAuth(“department”,”001”,””,”R”NeedControlAuth方法:'输入参数:cBusObId业务对象'输出参数:无'返回值:true受权限控制,false不受权限控制'功能:指定业务对象是否受权限控制语法object.NeedControlAuth(ByValcBusObIdAsString)AsBooleanNeedControlAuth方法的语法包含下列部分:NeedControlAuth方法部分描述Object必需的。代表一个对象表达式,其值是记录级权限服务对象cBusObId业务对象ID,值同于方法GetAuthString中的参数cBusObId返回值:True:受权限控制;False:不受权限控制;VB查询用户对部门编码001有无读权限oRow.NeedControlAuth(“department”)字段级服务U8ColAuthsrv.dll在VB中引用U8ColAuthsrv.组件在VB中点击主菜单中的“工程->引用”,随后出现的“引用”对话框中选中“U8ColAuthsrv.”,然后点击“确定”,如下图所示:GetAuthString方法返回对某个字段拥有的权限的字符串,一般来说,返回逗号分割的字符串注意:用户继承用户组的权限语法object.GetAuthString(cBusObIdAsString)asstringGetAuthString方法的语法包含下列部分:部分描述Object必需的。代表一个对象表达式,其值是字段级权限服务对象cBusObId业务对象ID,采用xml传入值。参数格式:<u8ColAuthcBusObId='customer'cFuncId='R'/>cBusObId表示业务对象cFuncID表示要返回的权限方式用户可以指定的权限值:R(ead)查询W(rite)录入N(o)无权限备注:cFuncId='R',只返回仅有读权限的字段,cFuncId='R%',返回有读权限的字段,也包含读、写权限的字段返回值:返回指定业务对象中拥有指定权限(已分配权限)的字段集合。备注:调用方的思路必须有所转变,如果询问拥有写权限的字段集合,应该考虑除了已经明确分配的写权限,还包括未被分配的权限,因为未被分配的权限默认拥有读和写;对字段权限的控制应该考虑无权限和读权限的访问,拥有所有权限的服务效率会有问题。VB查询demo用户对存货档案(inventory)的写权限PrivateSubmnu_colauth_Click()‘初始化DLL方法DimoColAsNewclsColAuthDimretAsStringDimconstringAsStringconstring="Provider=SQLOLEDB.1;PersistSecurityInfo=True;UserID=sa;password='';InitialCatalog=UFDATA_001_2007;DataSource=echocloud"oCol.Initconstring,"demo"ret=oCol.GetAuthString("<u8ColAuthcBusObId='inventory'cFuncId='W'/>")MsgBoxret‘实例DimstrSqlAsString‘查询SQL语句DimstrFieldAsString‘权限过滤串'实例:为部门档案添加读权限过滤strField=oCol.GetAuthString("<u8ColAuthcBusObId='inventory'cFuncId='W'/>")strSql="select"+strField+"frominventorywhere1=1and"'该strSqlWhere语句会得到以下几种语句'(1)1=1拥有全部权限'(2)cInvCode,cInvAddCode,cInvName拥有部分权限'(3)1=2无权'然后用strSql查询即可MsgBoxstrSqlEndSub初始化DLL方法:oCol.Init"数据库连接字符串","用户ID"组件:UFSoft.U8.Framework.SecurityCommon(版本)在VS2005中使用权限组件新建立一个VS2005类库项目在项目中添加下面DLL的引用%U8Soft%\AppServer\Bin\Framework\UFSoft.U8.Framework.SecurityCommon.dlldll文件的方法介绍如下:GetAuthString方法:返回对某个业务对象拥有的权限的SQL条件串,没有权限返回1=2;有全部权限返回空字符串;对除了User业务对象,均返回Select…子查询,user对象返回逗号分割的字符串。如部门:in(selectcACCodefromaa_holdauthwherecUserId='demo'andcBusObId='department')注意:用户继承用户组的权限语法object.GetAuthString(cBusObIdAsString,[cClassCodeAsString],[cFuncIdasString])asstringGetAuthString方法的语法包含下列部分:GetAuthString方法的语法包含下列部分:部分描述Object必需的。代表一个对象表达式,其值是记录集权限服务对象cBusObId业务对象IDcClassCode可选项。项目大类(项目专用)cFuncId可选项。功能IDC#查询对用户业务对象(user)的读权限privatevoidcontentAuth_Click(objectsender,EventArgse){ContentAuthobj=newContentAuth(@"Provider=SQLOLEDB.1;Password=;PersistSecurityInfo=True;UserID=sa;InitialCatalog=UFDATA_001_2007;DataSource=ECHOCLOUD","zy",true);stringstr=obj.GetAuthString("user",null,"R");MessageBox.Show("auth:"+str);}V11.0版本应用数据权限在V11.0版本中,如要控制某一个业务对象的数据权限,只需要选择启用该数据权限,然后为用户分配不同的数据权限。首先启用该数据权限,数据权限分记录级权限和字段级权限。然后分配不同的数据权限记录级:字段级:维度控制方式:二次开发应用数据权限数据预置相关数据结构在二次开发数据字典的aa_busobject_base表和AA_RowAuthDic_base中,可查阅相关内容。aa_busobject_base表数据预制实例业务员的记录级权限INSERT[AA_BusObject_base]([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cMark],[langid],[bLocked],[bNoAuth],[bAuthDimControl])VALUES(N'person',N'Clerk',0,1,N'Restrictaspecificusertoqueryorinputthebusinessdataofonlycertainclerks;G/L,Sales,andPurchasesystemscontroltheclerkprivilege.',N'en-US',0,0,0)INSERT[AA_BusObject_base]([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cMark],[langid],[bLocked],[bNoAuth],[bAuthDimControl])VALUES(N'person',N'业务员',0,1,N'限制用户能够对哪些业务员的业务数据进行查询或录入,应收、应付、总账、销售、采购系统提供业务员权限控制。',N'zh-CN',0,0,0)INSERT[AA_BusObject_base]([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cMark],[langid],[bLocked],[bNoAuth],[bAuthDimControl])VALUES(N'person',N'業務員',0,1,N'限制用戶能夠對哪些業務員的業務資料進行查詢或錄入,應收、應付、總賬、銷售、採購系統提供業務員許可權控制。',N'zh-TW',0,0,0)药品采购入库质量验收记录单的字段级权限INSERT[AA_BusObject_base]([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cSub_Id],[iFuncType],[langid],[iOrder],[bLocked],[bNoAuth],[bAuthDimControl])VALUES(N'001',N'recordsheetforqualitytestofdrugsreceiptsforpurchasing',1,0,N'GS',2,N'en-US',7,0,0,0)INSERT[AA_BusObject_base]([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cSub_Id],[iFuncType],[langid],[iOrder],[bLocked],[bNoAuth],[bAuthDimControl])VALUES(N'001',N'药品采购入库质量验收记录单',1,0,N'GS',2,N'zh-CN',7,0,0,0)INSERTinto[AA_BusObject_base]([cBusObId],[cBusObName],[iAuthType],[bAuthControl],[cSub_Id],[iFuncType],[langid],[iOrder],[bLocked],[bNoAuth],[bAuthDimControl])VALUES(N'001',N'藥品採購入庫品質驗收記錄單',1,0,N'GS',2,N'zh-TW',7,0,0,0)人员编码INSERT[AA_RowAuthDic_base]([CTableName],[CECode],[CCCode],[CEName],[CCName],[cBusObId],[iRowAuthType],[langid])VALUES(N'Hr_hi_Person',N'cPsn_Num',N'Personcode',N'cPsn_Name',N'Personname',N'Hr_hi_Person',1,N'en-US')INSERT[AA_RowAuthDic_base]([CTableName],[CECode],[CCCode],[CEName],[CCName],[cBusObId],[iRowAuthType],[langid])VALUES(N'Hr_hi_Person',N'cPsn_Num',N'人员编码',N'cPsn_Name',N'人员姓名',N'Hr_hi_Person',1,N'zh-CN')INSERT[AA_RowAuthDic_base]([CTableName],[CECode],[CCCode],[CEName],[CCName],[cBusObId],[iRowAuthType],[langid])VALUES(N'Hr_hi_Person',N'cPsn_Num',N'人員編碼',N'cPsn_Name',N'人員姓名',N'Hr_hi_Person',1,N'zh-TW')产品开发具体开发方式与老版本一致,内部逻辑中虽然添加了管理维度权限,但接口和函数没有变化,只有数据库是有变化的。应用技巧字段权限的映射关系可以通过UAP中商业敏感工具来实现字段级权限需要进行栏目预制,栏目的预制数据可以使用UAP的栏目设计器增加相关知识在U8系统中选择一个业务对象控制,然后控制其数据权限,然后给不同的用户分配不同的权限,并配合角色权限,然后使用不同的用户进入该业务对象模块,看看数据权限是否控制正确。过滤控件相关 工程名:UFGeneralFilter编程语言:VB类:FilterSrv条件运行时的服务类DesignSrv条件设计时的服务类特性分设计时也运行时,设计是在UAP中使用。支持将861的模板自动升级成870的模板。提供程序员编程的接口。提供回调接口。对象不销毁则保留用户的各种设置。通过常用条件和高级条件适应不同的用户的条件的要求。界面更加友好易用。支持常用条件分组。过滤设置功能强大。初始化过滤对象DimfltSrvAsUFGeneralFilter.FilterSrvPrivateSubInit()SetfltSrv=NewUFGeneralFilter.FilterSrvEndSub显示过滤界面-OpenFilter说明:显示查询条件界面PublicFunctionOpenFilter(ByValm_LoginAsObject,ByValsFilterIDAsStrin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京病人护理职业道德
- 护理安全文化:建立积极的安全文化氛围
- 呼吸机辅助通气护理操作演示
- 旅游景区运营经理面试须知
- 数字技术融合城镇产业提质增效建设方案
- 2026年主流软文推广平台:传声港AI驱动全域传播新范式
- 2026-2032年中国恒流驱动芯片行业市场全景评估及投资战略研判报告
- 客户关系经理在市场拓展中的作用研究
- 快消品行业市场主管面试全解
- 零售业客户经理岗位面试宝典
- 2025-2030中国成像流式细胞仪市场行情走势与投资前景研究研究报告
- 2026年安徽卫生健康职业学院单招综合素质考试题库附答案详解(a卷)
- 2026年安徽工贸职业技术学院单招职业技能考试题库及答案详解(真题汇编)
- 新春开学第一课:小学法治教育课件
- 2026年及未来5年中国黄花菜行业市场发展现状及投资策略咨询报告
- 2026龙江森工集团权属林业局限公司春季公开招聘635人易考易错模拟试题(共500题)试卷后附参考答案
- 医疗注射治疗风险告知书范本
- 生长监测生物标志物研究进展
- 2026年高考时事政治时事政治考试题库完整参考答案
- 大专移动通信技术
- 锅炉房拆除安全培训记录课件
评论
0/150
提交评论