U8开发之供应链协同平台客开案例.docx
- 文档编号:7748200
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:24
- 大小:203.14KB
U8开发之供应链协同平台客开案例.docx
《U8开发之供应链协同平台客开案例.docx》由会员分享,可在线阅读,更多相关《U8开发之供应链协同平台客开案例.docx(24页珍藏版)》请在冰豆网上搜索。
U8开发之供应链协同平台客开案例
U8开发之供应链协同平台客开案例
知识库属性
适用产品
适用版本
V10.0;V10.1;V11.0;V11.1
行业
交通运输行业
关键字
最后更新时间
2013-10-30
作者
罗敏
一、开发平台简述
1、系统框架
供应商系统平台架构采用传统三层架构思路将模型结构、数据访问控制、业务控制、界面显示严格分开,有效的降低了代码耦合度。
供应链协同平台框架与A传统三层架构开发模式对比:
2、开发环境:
操作系统:
WIN2003
IIS6.0及以上
开发平台:
VS2008-VB.net,并安装SP1补丁
Framework2.0(U8V871~U8V890支持2.0,U8V10.0及以上版可支持3.0)
SQL2000~SQL2008(按U8客户端要求打相关补丁)
U8产品、行业产品环境
产品:
V11.1版本默认安装
行业必装:
HY-U8V11.1-9207-130911-PFPTDB.msi
HY-U8V11.1-9208-130917-PFXTPT.msi
行业选装:
委外协同平台:
HY-U8V11.1-9209-130911-2P.msi
供应商协同平台:
HY-U8V11.1-9210-130914-EP.msi
客户协同平台:
HY-U8V11.1-9211-130911-J5.msi
3、开发过程
供应链协同平台列表开发过程分为三个部分:
脚本部分功能代码部分和UI代码部分,可简述为:
脚本部分:
1、菜单、权限、URL的添加脚本编写
2、栏目设置预置脚本编写(可以通过UAP或其它工具预置再将脚本导出)
3、列表数据源脚本编写(根据业务需求编写存储过程或视图)
功能代码部分:
1、VO类的创建
2、DMO类的创建
3、BO类的创建
UI代码部分:
Aspx页面的创建及后台代码编写
开发过程可借用演示案例脚本即代码做修改完成自己的开发需求。
开发模式示意图如下:
二、客户化开发实例
1、脚本部分
菜单
协同平台增加菜单节点与U8产品菜单增加方法一致,所有的菜单节点加到对应帐套的
UFDATA库的UA_Menu表:
关键字段如下:
cMenu_Id:
菜单节点ID
cMenu_Name:
菜单名称
cSub_Id:
所属模块,协同平台菜单设为null
iGrade:
菜单节点级别
cSupMenu_Id:
父级菜单节点
bEndGrade:
是否末级菜单节点,如果该菜单有对应连接页面打开,则必须置为1
cAuth_Id:
菜单对应的权限ID,如果设置了该值则必须保证权限表中也加入对应权限ID的节点,否则,非帐套管理员用户无权查看到该节点。
脚本实例:
插入菜单脚本
deleteua_menuwherecmenu_idlike'EP0120%'
insertintoua_menu([cMenu_Id],[cMenu_Name],[cMenu_Eng],[cSub_Id],[IGrade],[cSupMenu_Id],[bEndGrade],[cAuth_Id],[iOrder],[iImgIndex],[Paramters],[Depends],[Flag],[IsWebFlag],[cImageName])
values('EP0120','客户化演示',Null,Null,2,'EP01','0','EP0120','9999',2,Null,Null,Null,Null,Null)
insertintoua_menu([cMenu_Id],[cMenu_Name],[cMenu_Eng],[cSub_Id],[IGrade],[cSupMenu_Id],[bEndGrade],[cAuth_Id],[iOrder],[iImgIndex],[Paramters],[Depends],[Flag],[IsWebFlag],[cImageName])
values('EP012001','查询列表演示',Null,Null,3,'EP0120','1','EP012001','9999',2,Null,Null,Null,Null,Null)
上例即在”供应商协同平台”节点下加入了一个”客户化演示”节点。
权限
协同平台增加权限管理节点与U8产品权限增加方法一致,权限节点需要加到UFSystem库的UA_Auth_base表、UA_Auth_lang表
UA_Auth_base表关键字段如下:
cAuth_Id:
权限ID,需要与UA_Menu表cAuth_Id字段对应,或与页面某个具体按钮定义的权限ID对应。
cSub_Id:
权限节点所在模块ID,二开填入EP或J5、2P,分别对应供应商协同、客户协同、委外协同。
cSupAuth_Id:
上级权限节点ID
bEndGrade:
是否末级节点
cAllSupAuths:
父级节点及父级再上级节点,一般通过脚本后运行”sp_CalculateSupAuth”存储过程核算该值。
脚本实例:
插入权限节点脚本
---插入权限
deleteufsystem..ua_auth_basewherecauth_idlike'EP0120%'
deleteufsystem..ua_auth_langwherecauth_idlike'EP0120%'
insertintoufsystem..ua_auth([cAuth_Id],[cAuth_Name],[cSub_Id],[iGrade],[cSupAuth_Id],[bEndGrade],[iOrder],[cAcc_Id],[cAuthType],[cAllSupAuths])
values('EP0120','客户化演示','EP',2,'EP01','0',9999,Null,Null,Null)
go
insertintoufsystem..ua_auth([cAuth_Id],[cAuth_Name],[cSub_Id],[iGrade],[cSupAuth_Id],[bEndGrade],[iOrder],[cAcc_Id],[cAuthType],[cAllSupAuths])
values('EP012001','查询列表演示','EP',3,'EP0120','0',9999,Null,Null,Null)
go
execsp_CalculateSupAuth
URL的挂接
协同平台末级节点对应页面的跳转URL地址是在对应业务帐套UFDATA库的HY_BSPortal_siteMap表中进行配置。
HY_BSPortal_siteMap字段解释:
cMenu_Id:
菜单ID,对应UA_Menu表中的cMenu_Id字段。
Srcurl:
协同平台双击菜单节点时对应的跳转动作,具体跳转那个页面在此配置。
实例:
插URL脚本
deleteHY_BSPortal_siteMapwherecMenu_Id='EP012001'
insertintoHY_BSPortal_siteMap([cMenu_Id],[srcurl])values('EP012001','javascript:
go(''./aspx/SampleDir/SampleList.aspx?
dqwz=002010&path=1'');')
栏目预置
列表页面的栏目预置与U8列表栏目预置一致,在对应帐套的UFMeta库的aa_columndic_base表中插入相关栏目配置,详细字段定义可参考U8数据字典。
实例:
栏目预置
insertintoaa_columndic_base([cKey],[cFld],[cQryField],[iColPos],[cCaption],[cCaptionPar],[bFixed],[bDisp],[iColWidth],[iAlign],[cOrder],[bLock],[iMergeCols],[bMustSel],[bNeedSum],[LocaleID],[IsEnum],[EnumType],[EnumTypeString],[bFilter],[bMerge],[CanModify],[ReferType],[bHideInColSet],[cSumType],[iFieldType],[bExtended],[EnumShowType])
values('sample_list','cdepcode',Null,55,'部门编号',Null,'0','0',1000,1,Null,'0',Null,'0','0','zh-CN','0',Null,Null,'0','0','0',Null,'0',Null,Null,Null,Null)
数据源
列表显示数据的数据源可以在数据库中预置为视图或存储过程,在对应帐套的UFData库生成。
需要注意的是视图查询结果列名需要与栏目设置的列名保持一致,存储过程必须带有一个临时表名的传入参数,存储过程最终返回的查询结果必须插入到该临时表中,并且临时表的查询结果列名需要和栏目设置的列名保持一致。
实例:
数据源(存储过程)
createprocPT_SampleList_Queryproc
@strTmpTableNamenvarchar(200)=null,--临时表
@strStartDatenvarchar(60),--开始日期
@strEndDatenvarchar(60),--结束日期
@strStartVenCodenvarchar(20),--供应商编码开始
@strEndVenCodenvarchar(20),--供应商编码结束
@strStartCinvCodenvarchar(60),--存货编码开始
@strEndCinvCodenvarchar(60),--存货编码结束
@strTempWherenvarchar(1000)--备用条件
as
begin
DECLARE@SQLnvarchar(4000)--查询字符串
DECLARE@Wherenvarchar(4000)
/*存储过程的数据查询条件*/
SET@Where='(1=1)'
……
如上例中,@strTmpTableName是必有参数,含义是临时表名称,DMO会从该临时表中读取数据。
参数@strTempWhere建议预留,含义是备用查询条件,方便其他页面使用。
权限参数、其他参数根据业务要求建立。
另外数据源不论是存储过程或是视图,返回结果中的字段特殊字段需要经过特殊处理,否则在列表显示汇总数据时会出现错误:
时间字段:
Convert(varchar(10),dDate,120)
数值字段:
insull(iQuantity,0)
可能为null值字段:
isnull(cFree1,’’’’)
2、构建VO类
VO类为业务模型类。
创建的VO类需要继承BaseVO类。
构建VO类型包括以下六组设置:
必有VO属性、权限属性、页面查询参数属性、页面格式化属性、页面个性化属性、页面常用参数属性,另外还可以设置格式化属性与个性化属性。
BaseVO:
BaseVO类作为所有VO类的基类,包含对登陆信息、数据库配置、用户信息、消息等属性的配置。
也包含了页面设置、栏目分组等共有属性的定义。
二次开发的VO类直接继承BaseVO,则不必单据定义上述属性。
必有VO属性:
必有VO属性是构建VO类必须创建、并已经设置好get值的属性。
这些属性描述了一个VO类最基础的特征。
必有属性列举如下:
MyVODLL:
VO的DLL名称
MyVOName:
VO的类名称
MyBODLL:
BO的DLL
MyBOName:
BO的类名称
PageTitle:
页面标题
MyKEY:
分页查询的主键
ColumnKey:
栏目KEY
ProcName:
存储过程名称
ViewName:
视图名称
OrderField:
默认排序字段
TempWhere:
备用SQl条件
VOHashTable:
存放VO属性和值的HashTable
对应的上述属性,需要在自己创建的VO类中设置各字段初始值:
构建VO对象必有属性的字段初始值
PrivatestrMyVODLLAsString="HY.Sample.VoApp.dll"'VO的DLL名称
PrivatestrMyVONameAsString="HY.Sample.VoApp.VO"'VO的类名称
PrivatestrMyBODLLAsString="HY.Sample.Business.dll"'BO的DLL名称
PrivatestrMyBONameAsString="HY.Sample.Business.BO"'BO的类名称
PrivatestrPageTitleAsString="采购订单列表"'页面标题
PrivatestrKeyAsString="id"'分页查询的主键
PrivatestrColumnKeyAsString="sample_list"'栏目KEY
PrivatestrProcNameAsString="PT_SampleList_Queryproc"'存储过程名称
PrivatestrViewNameAsString=""'视图名称
PrivatestrOrderFieldAsString="cpoid"'默认排序字段
PrivatestrTempWhereAsString'备用SQl条件
PrivatehashTableAsNewSystem.Collections.Hashtable()'存放VO属性和值的HashTable
权限属性:
VO类中可以设置数据权限属性,控制列表查询在数据权限的控制之内。
根据U8数据权限设置,根据不同的操作员控制列表显示、参照过滤中权限处理的数据。
其中包括以下权限设置:
InvAuthSQL:
存货权限控制
CustomerAuthSQL:
客户权限控制
PersonAuthSQL:
业务员权限控制
DepartAuthSQL:
部门权限控制
VendorAuthSQL:
供应商权限控制
MakerAuthSQL:
操作员权限控制
列举VO中权限控制
'''
'''存货权限控制SQL串
'''
'''
'''
'''
PublicPropertyInvAuthSQL()AsString
Get
ReturnstrInvAuth
EndGet
Set(ByValvalueAsString)
strInvAuth=value
VOHashTable.Remove("strInvAuth")'HashTable的Key要和存储过程对应的参
EndSet
EndProperty
数据权限设置为固定写法,VO类中无需修改。
如果在列表中需要用数据权限来限定列表显示范围,在需要在数据源中做相应更改,如果数据源为存储过程,则增加对应权限的传入参数,并在属性属性的Set方法中加入VOHashTable.Add(key,value),key需要和存储过程传入参数名相同。
如果数据源为视图,除了在属性Set方法中加入VOHashTable.Add(key,value)外还需要在DMO的SetViewWhere方法中将权限属性加入过滤条件中。
过滤条件对应的弹出窗口如果需要对数据进行数据权限限制,首先需要查询该弹出过滤是否支持数据权限过滤,如果支持,则在调用过滤界面时将对应是否控制数据权限的参数传入”True”即可。
页面查询参数属性
页面查询参数是用于页面后台存储、读取前台录入的过滤参照值的属性。
可以根据自己的业务添加属性,属性名称要和存货过程参数相对应。
需要注意的是在每个属性的Set方法中将原值从VOHashTable中移除,加入新值。
列举VO中需要添加的查询参数
'''
'''发货日期开始
'''
'''
PrivatestrStartDateAsString
PublicPropertyStartDate()AsString
Get
ReturnstrStartDate
EndGet
Set(ByValvalueAsString)
strStartDate=Value
VOHashTable.Remove("strStartDate")
VOHashTable.Add("strStartDate",value)
EndSet
EndProperty
需要注意的是对于过滤条件,VOHashTable加入的key值,如果列表数据源为存储过程,则key值需要与存储过程的某个传入参数一致,如果数据源为视图,则key值应该在视图查询出的列名之中。
否则可能造成调用存储过程参数不符报错,或查询视图因Where子句出错而报错。
页面格式化属性:
页面格式化属性是用于处理列表中需要进行格式化处理小树位数的数据列的格式设置定义。
该属性为只读属性,在属性所读取的字段中枚举需要特殊处理的列名。
需要格式化处理的数据一般包括金额、数量、税率等。
列举VO中需要格式化数据的属性
'''(数量)列表中需要格式成数量的字段串
PrivatestrQuanKeysAsString="iQtty,fStopQuantity,fInQtty,fTransInQuantity,fInQttySum,fOutQuantity,fTransOutQuantity,fOutQttySum,fdisablequantity,fAvailQtty"
'''
'''列表中需要格式成数量的字段串
'''
'''
'''
'''
PublicReadOnlyPropertyQuanKeys()AsString
Get
ReturnstrQuanKeys&","
EndGet
EndProperty
VO定义了格式化属性,页面加载数据时会读取VO中的格式化属性设置调用公共页面处理类HYHTMLTable中的FormatText方法进行格式化处理。
FormatText会根据单价、金额、数量在U8中的设置的小树位数对载入HTMLTable控件中的数据进行小数位数格式化处理。
页面个性化属性
如果列表页面需要做格式化处理,例如特殊数据单元格的背景色、数据字体等处理,则需要在VO中定义个性化属性:
定义VO中个性化属性
'''个性处理Table的DLL名称
PrivatestrHTMLTable_PlugIn_DLL="UICom.dll"
'''
'''个性化HTMLTable的插件DLL名
'''
'''
'''
'''
PublicReadOnlyPropertyMyHTMLTable_PlugIN_DLL()AsString
Get
ReturnstrHTMLTable_PlugIn_DLL
EndGet
EndProperty
'''个性处理Table的类的名称
PrivatestrHTMLTable_PlugIn_ClassName="UICom.SampleCl"
'''
'''个性化HTMLTABLE的插件类名
'''
'''
'''
'''
PublicReadOnlyPropertyMyHTMLTable_PlugIN_ClassName()AsString
Get
ReturnstrHTMLTable_PlugIn_ClassName
EndGet
EndProperty
MyHTMLTable_PlugIN_DLL属性为需要调用处理htmlTable控件的类库名,固定定义其字段值为”UICom.dll”。
MyHTMLTable_PlugIN_ClassName为自己实现列表个性化的类名称。
该类必须实现HTMLTaleComInterface接口。
页面常用参数属性
构建页面常用参数,可以根据自己的业务添加、删除属性,属性名称。
3、构建DMO类
DMO类为数据处理类,是连接业务层和数据库的中间处理层。
创建DMO类型时引用自己创建的VO,必须继承HYDMO。
HYDMO类:
HYDMO类作为大多数DMO类的基类,带有对列表数据处理的公用方法,主要方法如下:
do_query:
取得列表查询数据
get_recordCount:
取得列表总记录数
getSumData:
取得列表合计行数据
GetVouchPrintData:
得到单据打印PDF二进制
DMO类必有方法
DMO类中必有的方法为do_query即列表查询数据方法。
该方法可以直接调用父类同名方法,也可以实现自己的查询方法。
如果列表数据源为视图,则必须要有SetViewWhere方法,用于过滤数据源中的数据。
定义DMO中固定方法
'''
'''重载HYDMO的do_query方法
'''
'''
'''
'''
PublicOverloadsFunctiondo_query(ByRefvoAsObject)AsObject
'处理VIEW的参数
SetViewWhere(vo)
ReturnMyBase.do_query(vo)
EndFunction
'''
'''设置视图的Where条件,后台数据用存储过程整理的,该方法不用写
'''访问VO中的页面条件参数,要用VOHashTable对象来访问,打印时VOHashTable里有值
'''
'''
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- U8 开发 供应 协同 平台 案例