为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > U8UAP开发手册

U8UAP开发手册

2021-06-08 7页 doc 2MB 44阅读

用户头像 个人认证

平平

暂无简介

举报
U8UAP开发手册U8UAP开发手册UAP开发指导文档PAGE82ofNUMPAGES97UAP开发样例指导用友研发中心U8平台技术部目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc211307688"一、摘要PAGEREF_Toc211307688\h3HYPERLINK\l"_Toc211307689"二、样例开发前提PAGEREF_Toc211307689\h3HYPERLINK\l"_Toc211307690"三、建立UAP项目PAGEREF_Toc211307690\h...
U8UAP开发手册
U8UAP开发手册UAP开发指导文档PAGE82ofNUMPAGES97UAP开发样例指导用友研发中心U8平台技术部<本文档适用于U871版本>目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc211307688"一、摘要PAGEREF_Toc211307688\h3HYPERLINK\l"_Toc211307689"二、样例开发前提PAGEREF_Toc211307689\h3HYPERLINK\l"_Toc211307690"三、建立UAP项目PAGEREF_Toc211307690\h3HYPERLINK\l"_Toc211307691"四、建立单模型PAGEREF_Toc211307691\h5HYPERLINK\l"_Toc211307692"(一)新建实体PAGEREF_Toc211307692\h6HYPERLINK\l"_Toc211307693"(二)新建实体属性PAGEREF_Toc211307693\h8HYPERLINK\l"_Toc211307694"五、建立表单布局PAGEREF_Toc211307694\h12HYPERLINK\l"_Toc211307695"六、行为对象开发PAGEREF_Toc211307695\h13HYPERLINK\l"_Toc211307696"(一)表单开发PAGEREF_Toc211307696\h15HYPERLINK\l"_Toc211307697"(二)列表开发PAGEREF_Toc211307697\h28HYPERLINK\l"_Toc211307698"(三)生单二次开发PAGEREF_Toc211307698\h34HYPERLINK\l"_Toc211307699"(四)联查报表PAGEREF_Toc211307699\h35HYPERLINK\l"_Toc211307700"(五)联查UAP列表PAGEREF_Toc211307700\h36HYPERLINK\l"_Toc211307701"(六)UAP列表联查U8单据PAGEREF_Toc211307701\h37HYPERLINK\l"_Toc211307702"(七)用户自定义控件开发PAGEREF_Toc211307702\h40HYPERLINK\l"_Toc211307703"(八)U8单据引用UAP档案PAGEREF_Toc211307703\h41HYPERLINK\l"_Toc211307704"七、行为对象注册PAGEREF_Toc211307704\h54HYPERLINK\l"_Toc211307705"功能介绍:PAGEREF_Toc211307705\h54HYPERLINK\l"_Toc211307706"使用说明:PAGEREF_Toc211307706\h54HYPERLINK\l"_Toc211307707"应用技巧:PAGEREF_Toc211307707\h56HYPERLINK\l"_Toc211307708"八、建立数据引擎PAGEREF_Toc211307708\h57HYPERLINK\l"_Toc211307709"功能介绍:PAGEREF_Toc211307709\h57HYPERLINK\l"_Toc211307710"使用说明:PAGEREF_Toc211307710\h58HYPERLINK\l"_Toc211307711"应用技巧:PAGEREF_Toc211307711\h80HYPERLINK\l"_Toc211307712"九、设置过滤条件PAGEREF_Toc211307712\h80HYPERLINK\l"_Toc211307713"功能介绍:PAGEREF_Toc211307713\h80HYPERLINK\l"_Toc211307714"使用说明:PAGEREF_Toc211307714\h80HYPERLINK\l"_Toc211307715"应用技巧:PAGEREF_Toc211307715\h85HYPERLINK\l"_Toc211307716"十、设置栏目PAGEREF_Toc211307716\h86HYPERLINK\l"_Toc211307717"功能介绍PAGEREF_Toc211307717\h86HYPERLINK\l"_Toc211307718"使用说明PAGEREF_Toc211307718\h86HYPERLINK\l"_Toc211307719"应用技巧PAGEREF_Toc211307719\h87HYPERLINK\l"_Toc211307720"十一、权限PAGEREF_Toc211307720\h87HYPERLINK\l"_Toc211307721"功能权限PAGEREF_Toc211307721\h87HYPERLINK\l"_Toc211307722"记录级权限PAGEREF_Toc211307722\h88HYPERLINK\l"_Toc211307723"字段级权限PAGEREF_Toc211307723\h89HYPERLINK\l"_Toc211307724"十二、部署PAGEREF_Toc211307724\h90HYPERLINK\l"_Toc211307725"附录:功能介绍PAGEREF_Toc211307725\h91HYPERLINK\l"_Toc211307726"1、行为对象升级说明PAGEREF_Toc211307726\h91HYPERLINK\l"_Toc211307727"2、LoginInfo对象介绍PAGEREF_Toc211307727\h93摘要本文以U8-ERP中的销售订单为应用原型,介绍了如何通过UAP进行软件开发,文中给出了开发方法和丰富样例。内容包括:UAP表单开发原理UAP项目的建立和导入、导出UAP表单的模型设计和布局设计UAP表单的行为对象开发UAP表单列表设计与开发UAP表单列表的行为对象开发如何对UAP表单的缺省按钮进行扩展性开发如何对UAP表单的缺省按钮进行取代性开发如何为UAP表单增加新的按钮及行为如何用程序代码调用UAP报表如何用程序代码调用UAP表单列表如何在UAP表单中增加权限控制:功能权限、字段权限、记录权限如何为UAP表单开发自定义控件如何开发树形档案如何维护UAP数据引擎如何维护栏目如何维护过滤条件如何调用U8APIU8单据自定义项如何引用UAP档案本文档中使用的示例文件为“销售订单二次开发”,可以通过UAP将该文件导入到帐套中。项目名称为“SaleVoucher”,导入后在项目中包括几个自定义单据:“销售订单”为二次开发的Demo示例;“零售日报”为自定义空间二次开发的Demo示例;“列表档案示例”、“树形编辑档案示例”、“树形导航档案示例”分别为各个对应的档案类型的示例。样例开发前提首先,需要安装U8产品,并建立一个帐套。其次,您需要向用友公司购买UAP表单设计许可;不过您可以使用UAP的演示版本,但是演示版本不能新建UAP项目,也不能注册行为对象。建立UAP项目使用UAP登录您的帐套后,在系统界面上的新建项目选项卡,选中“供应链”后,在右边的列表中选择“销售管理”,在界面下方的几个文本框中输入项目名称,编号,描述等;顺序选择框使用“默认”即可。点击“确定”如果输入信息与先前创建的项目信息不冲突,项目就可被成功创建。您也可以导入我们为您提供的UAP样例项目,导入方法如下。1、登录UAP;2、打开菜单“文件-导入和导出”;3、选中“导入项目数据到目前的服务器”,点“确定”按钮;4、点“导入”按钮,选取U8安装目录下的“uap\sdk”目录中的文件“Samplefile”;5、导入成功后;6、在UAP已存在的项目中产生了一个名称为“SaleVoucher”的项目;建立表单模型选中“自定义表单”节点,单击右键,使用“新建自定义表单”功能创建一个新的表单。然后在弹出的选择界面中选择“表单类型”下的“单据”,在名称文本框中输入一个表单名字,不要与以前创建的表单名字重复。在成功创建后,系统界面会如下图(图表1)所示:图表SEQ图表\*ARABIC1在上图所示的实体节点,默认有两个子节点,分别为“主表和第一子表”,根据当前表单的需要设计实体,包括增加实体和实体属性等。新建实体需要为实体填写“实体名称”,和选择“实体类型”。除此以外,还可以通过实体的属性编辑窗口为实体设置各项信息。实体的相关属性:名称:实体显示的名称,仅用于设计时。发布状态:实体是否已发布,只读。功能:为实体定义自定义功能,在运行时显示为表格对应的工具栏按钮。状态设置:设置实体属性、功能在表单运行时的状态,决定实体属性、功能在不同的环境下是否可用。物理表模式:设置实体物理表的创建模式,默认为由UAP在发布时自动创建。在特殊的应用场景中可以使用“使用已存在的对象”或“无”。后两种情况下UAP不负责实体物理表的维护。物理表:设置该实体在数据库存储时使用的物理表,一般情况下一个实体对应一个物理表。数据引擎模式:设置实体运行时数据的访问方式。默认为UAP系统在发布时自动创建,特殊的应用场景中可以使用“使用已存在的对象”或“无”,这两种情况下系统不负责实体数据的读取,只能通过用户定义的接口获取数据集。数据引擎:当数据引擎模式为“使用已存在的对象”时,设置要使用的数据引擎对象。主键:设置实体物理表的主键字段名。主键类型:设置实体物理表主键字段的类型,可选“整数”或“GUID”或“字符串”。行模式:多行或单行。一般主表设置为单行。新建实体属性实体必须包含实体属性时才有效。可以在UAP界面“表单”窗口中,右键点击实体对应的节点,选择“新建实体属性”菜单向实体添加实体属性:实体属性通用属性:类型:该实体属性的类型。描述:对该实体属性的单体描述。属性名称:实体属性的名称。默认值:实体属性的默认值。使用默认值:用户未提供数据时,是否使用实体属性的默认值。发布:该实体属性是否已经发布。常用条件:该实体属性是否可以在过滤中作为常用条件使用。区间条件:该实体属性是否可以在过滤中作为区间条件使用。值更新事件:设置该实体属性值更新时需要处理的脚本列表。基础资料类型字段共有三种类型的值更新事件:“携带当前字段相关参照属性到指定列”、“计算定义公式的值到指定列”、“表达式为真/假时改变指定栏目编辑状态”;其余类型字段比基础资料类型字段缺少第一种类型的值更新事件。携带当前字段相关参照属性到指定列计算定义公式的值到指定列表达式为真/假时改变指定栏目编辑状态表单式为真\假时修改指定栏目的编辑状态表单式为真\假时修改指定栏目的显示状态表单式为真\假时修改指定功能状态表单功能实体功能唯一约束:是否检查该实体属性的值在整个表单范围内唯一。文本对齐:实体属性文本的显示位置。显示文本:实体属性的不同语言环境中显示的文本。允许空值:实体属性的值是否可以为空。物理表:实体属性对应物理字段的表名,即该实体属性所属实体的物理表。字段:实体属性对应的物理字段名。除了支持以上通用属性外,不同类型的实体属性还具有不同的特性:表单编号表单编号只能出现的主表实体中,并且只能有一个表单编号类型的实体属性。表单名称表单名称类型的实体属性只能在档案类型的表单中使用,同表单编号一样,表单名称类型的实体属性只能出现主表实体中,并且只能出现一次。整数和正整数可否为0:数值型的值是否可为0。录入长度:限制用户可录入数值的最多位数。数据格式:数值类型的显示格式。最大值和最小值:数据的有效范围。正整数的最小值必须等于或大于0。小数和正小数可否为0:数值型的值是否可为0。录入长度:限制用户可录入数值的最多位数。数据格式:数值类型的显示格式。最大值和最小值:数据的有效范围。正小数的最小值必须等于或大于0。小数位数:数据保留的小数位数。文本多行输入:运行时是否支持录入多行文本。最大长度:最多可录入的文本长度。日期和日期时间日期类型运行短日期格式,即只包含年月日。日期时间类型包含年月日和时分秒。枚举枚举类型的实体属性需要设置枚举值列表,枚举值的显示值为在界面显示的文本,保存值为实际保存到数据库的数据,如枚举类型的实体属性“销售类型”的枚举值可设置为如下图所示:U872中枚举字段支持选择“枚举模式”:使用已存在枚举、新创建枚举。选择“使用已存在枚举”后,需要为“枚举类型”选择一个U8系统中现有的枚举中的一个。基础资料基础资料类型的值来自指定参照档案的对照值。参照对象:设置基础资料类型实体属性的参照档案对象,可以从U8档案列表中选择,包含UAP中定义为档案类型的表单。参照显示值:该属性是设置当前就“基础资料”字段在运行时的文本框里显示参照的那个字段的值。如上面的“参照对象”属性选择的存货档案,如果不设参照显示值,则运行时默认显示为存货编码,如果将“参照显示值”属性设置为存货档案的“存货”名称,运行是该字段就会显示为存货的名称。选择方式:设置在运行时的对照选择方式。自动校验:是否对录入的值进入检验以确定数据是否来自指定的参照对象。选择“否”时允许用户录入参照对象中不存在的值。基础资料属性基础资料属性类型的实体属性必须和基础资料类型的实体属性结合使用。参照属性:设置基础资料属性类型实体属性要绑定的基础资料类型实体属性,并指定关联的参照字段。当基础资料类型的实体属性值变化时,基础资料属性类型的实体属性值随之改变。数量、价格和金额数量、价格和金额类型的实体属性实质上为小数类型,设置等同于小数类型的实体属性。复选框特殊类型的整数值,运行时显示为复选框,保存的数据为0(未选择)或1(选择)。制单人当前单据的作者,一般设为登录用户。制单日期和修改日期制单日期保存当前表单生成的日期,修改日期保存表单最后一次修改的日期。这两种类型的实体属性实质上为日期时间类型,设置等同于日期时间类型的实体属性。建立表单布局在完成实体的设计后,可以设计表单布局,UAP支持一个表单多个布局视图,用户可根据自己的使用习惯选择一种布局视图。布局视图的设计与普通window界面的布局设计基本一致。行为对象开发行为对象开发是指增加表单或列表的功能按钮,除了UAP系统自带的功能按钮外,还可以增加按钮,这些增加的功能按钮是UAP表单开发的基础。UAP提供了多种增加功能的途径,首先通过设计界面的树形菜单中的“功能”节点下的表单功能和列表功能的“功能管理”(图表2)添加功能按钮,这些功能按钮最终在运行时会被加载到U8产品的门户上;其次可以为每个表单实体添加功能按钮(图表3),为实体添加完成这些功能按钮后,还需要在布局视图上为该表单实体的“功能”属性设置使用这些功能(图表4),这些功能按钮最终在运行时会被加载到该实体的工具栏按钮上。图表SEQ图表\*ARABIC2图表SEQ图表\*ARABIC3图表SEQ图表\*ARABIC4图表SEQ图表\*ARABIC5增加功能按钮时,很多工作都可以通过上图(图5)的设计界面完成,开发人员关心的仅仅是表单开发业务逻辑的实现。这些按钮的作用主要是通过在运行时对模型对象中数据的修改以及最终将修改的数据持久化来完成的。UAP表单开发分为表单开发和列表开发两种。因此对应了两种不同的开发类型定义了两种不同的访问模型对象数据的接口。表单开发表单开发访问模型对象的接口UFIDA.U8.UAP.UI.Runtime.Model.IReceipt,该接口被定义在UFIDA.U8.UAP.UI.Runtime.Model.dll中,所以在做表单开发前,你需要为新建的表单开发项目添加UFIDA.U8.UAP.UI.Runtime.Model.dll的引用。表单开发又可细分为表单功能开发和表单实体功能开发,每个不同部分的开发又都分为UAP已有按钮的功能修改开发和新增按钮的功能开发。目前为止,只要是表单开发,只需要实现上述接口即可。在实现IReceipt接口后,在实现类中会继承以下这些方法://////门户工具栏按钮被点击时触发该方法,可以根据参数判断是哪个按钮被触发///被点击门户工具栏按钮参数///IButtonEventHandlerGetButtonEventHandler(VoucherButtonArgsButtonArgs);//////运行时表单加载之前调用的接口,可以处理表单加载之前的业务要求。//////U8登录对象///.Net登录对象///表单编号///表单数据///表单状态///表单载入参数voidReceiptLoading(U8Login.clsLoginlogin,stringCardnumber,DataSetds,VoucherStateEnumstate,ReceiptLoadingParasloadingParas);//////运行时表单加载之后调用的接口,可以处理表单加载之后的业务要求。//////所属表单对象voidReceiptLoaded(VoucherProxyReceiptObject);//////值更新之前的接口,对值的合法性检查在这里进行///Cell的值变动参数///所属业务对象///所属表单对象///voidCellChanging(CellChangeEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////值更新之后的接口,对值的后续处理(如对其他Cell值的变更)在这里进行///Cell的值变动参数///所属业务对象///所属表单对象///voidCellChanged(CellChangeEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////增加行之前的接口,对行的合法性检查在这里进行///新增的行参数///所属业务对象///所属表单对象///voidRowAdding(RowChangeEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////增加行之后的接口,对新增行的后续处理在这里进行///新增的行参数///所属业务对象///所属表单对象///voidRowAdded(RowChangeEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////删除行之前的接口,对行的合法性检查在这里进行///RowChangeEventArgs[]类型,要删除的行参数///所属业务对象///所属表单对象///voidRowsDeleting(RowChangeEventArgs[]para,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////删除行之后的接口,对删除行的后续处理在这里进行///RowChangeEventArgs[]类型,要删除的行参数///所属业务对象///所属表单对象///voidRowsDeleted(RowChangeEventArgs[]para,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////观察者视图工具条按钮单击事件的接口///被单击的按钮参数///所属业务对象///所属表单对象///voidClickToolBarButton(ToolBarActionEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////设置为当前行之前的接口///被选择的行参数///所属业务对象///所属表单对象///voidRowSelecting(RowSelectEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////设置为当前行之后的接口///被选择的行参数///所属业务对象///所属表单对象///voidRowSelected(RowSelectEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////业务数据合法性检查之前的接口///所属业务对象///所属表单对象///voidDataChecking(BusinessProxybusinessObject,VoucherProxyvoucherObject);//////业务数据合法性检查之后的接口///所属业务对象///所属表单对象///voidDataChecked(BusinessProxybusinessObject,VoucherProxyvoucherObject);//////观察者视图填充数据前的接口///观察者视图接口(IEditWindow)对象///即将要填充的数据///voidEditWindowFilling(IEditWindowview,DataTablefillDataTable,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////观察者视图填充数据后的接口///观察者视图接口(IEditWindow)对象///已经填充的数据///voidEditWindowFilled(IEditWindowview,DataTablefillDataTable,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////参照打开前的接口///观察者视图接口(IEditWindow)对象///ReferOpenEventArgs参照信息///所属业务对象///所属表单对象///voidReferOpening(ReferOpenEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////参照返回(关闭)后的接口///观察者视图接口(IEditWindow)对象///ReferCloseEventArgs参照信息///所属业务对象///所属表单对象///voidReferClosed(ReferCloseEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////创建用户自定义控件接口,开发人员可以在这里创建用户自定义控件。运行时会把这个控件加载到布局视图中。(版本新增)//////所属业务对象///所属表单对象///布局视图中指定的自定义控件“控件ID”///用户自定义控件对象ControlCreateControl(BusinessProxybusinessObject,VoucherProxyvoucherObject,stringID);//////表单状态更新之前的接口///状态的变动参数///所属表单对象///是否允许改变状态false-不允许改变状态,表单仍将处于当前状态///boolStateChanging(VoucherStateChangeEventArgspara,VoucherProxyvoucherObject);//////表单状态更新之后的接口///状态的变动参数///所属表单对象///voidStateChanged(VoucherStateChangeEventArgspara,VoucherProxyvoucherObject);//////鼠标左键双击数据行的接口//////鼠标双击信息//////voidRowDoubleClick(RowDoubleClickEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////鼠标左键双击数据单元格的接口//////鼠标双击信息///所属业务对象///所属表单对象voidCellDoubleClick(CellDoubleClickEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////鼠标左键双击表格的标题的接口//////鼠标双击信息///所属业务对象///所属表单对象voidHeaderDoubleClick(HeaderDoubleClickEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);//////设置当前列之后的接口//////列信息///所属业务对象///所属表单对象voidCellSelected(CellSelectEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);表单功能开发(门户工具栏按钮功能开发)说明IRecepit接口中的方法//////门户工具栏按钮被点击时触发该方法,可以根据参数判断是哪个按钮被触发///被点击门户工具栏按钮参数///IButtonEventHandlerGetButtonEventHandler(VoucherButtonArgsButtonArgs);这个方法是表单功能按钮执行的入口,根据在UAP表单功能的功能管理(见图2)里添加的不同功能按钮的ButtonKey来区别不同的功能。返回值类型为UFIDA.U8.UAP.UI.Runtime.Model.IButtonEventHandler接口,该返回值对象会被UAP运行时调用来执行该对象中的方法。IButtonEventHandler接口定义了三个方法,按照运行时被调用执行的先后顺序分别为:stringExcuting(VoucherProxyReceiptObject)、stringExcute(VoucherProxyReceiptObject,stringPreExcuteResult)、stringExcuted(VoucherProxyReceiptObject,stringPreExcuteResult)。注:(1)三个方法的返回值为xml字符串,其格式为"",该返回值用来标示当前方法是否成功执行,记录在result属性里,errinfo属性用来记录任何可能的信息。Excuting方法的返回值可以作为Excute方法的第二个参数PreExcuteResult传入Excute,你可以在Excute方法体重分析传入的信息决定程序是否继续执行,或作出其他处理等,同样,Excute方法的返回值也可作为Excuted方法的参数传入,并作必要检查。另外,你可以在保证上面规定的xml结构的前提下,在节点内扩展该xml结构,以适应你的应用逻辑的需要。(2)三个方法共有的参数就是当前表单功能按钮可以操作的表单模型。可以从该对象中取到当前可以操作的任何数据。示例[IsImplementAttribute(true)]publicIButtonEventHandlerGetButtonEventHandler(VoucherButtonArgsButtonArgs){//保存按钮----UAP已有功能的部分修改开发if(ButtonArgs.ButtonKey=="btnSaveVoucher"){returnnewAcceptOrderButton();}//审核按钮----UAP已有功能替代修改开发if(ButtonArgs.ButtonKey=="btnAudit"){returnnewAuditButton(AuditType.Audit);}//锁定按钮----新增功能开发if(ButtonArgs.ButtonKey=="SenDevLock"){returnnewLockVoucherButton(LockType.Lock);}}这个方法是表单功能按钮执行的入口,IsImplementAttribute属性需要手工添加到方法上面。根据在UAP表单的功能管理里不同功能按钮的ButtonKey来区别不同的功能。上述代码的返回值类型AcceptOrderButton、AuditButton、LockVoucherButton都是继承自UFIDA.U8.UAP.UI.Runtime.Model.IButtonEventHandler接口。注意项新增功能开发说明在使用UAP进行表单开发时,UAP已经提供的功能都是一些公共功能,而一些表单可能需要很多特别的功能,此时就需要进行新增功能的开发。新增功能开发需要开发者要完全理解当前功能的实际业务,并在实现业务的基础上将对表单相关数据的修改持久化到数据库中,持久化的操作及可能的事务控制等完全由开发人员自己来做。示例//锁定按钮----新增功能开发双击查看代码注意项UAP已有功能的修改开发说明UAP已经实现了新增表单的保存方法,但是我们可能在使用UAP保存逻辑的基础之上,在保存之前或保存之后对表单的某些数据做一定的修改。具体就是对表单模型中的某些实体属性的值根据业务逻辑的需要做必要的修改再执行已有的表单保存。示例双击查看代码注意项UAP已有功能的替代开发说明UAP系统中已经实现了一些公共功能,但这些功能并不一定适用于每种不同表单的具体情况,所以有些时候我们可能需要对UAP的已经实现的功能进行替代开发。替代开发分为两种:在实现业务基础上直接操作数据库、调用U8已经实现的该表单审核功能的API方法。直接操作数据库:直接操作数据库的开发方法与下面的“新增功能开发”的开发方法大体一致,此处不再细述。调用业务API:调用业务API方法避免了开发人员必须去了解当前功能的具体业务,降低了开发的复杂程度,有利于快速而准确的开发。但是在使用业务API之前,必须首先掌握在.Net中调用U8中API的方法,其次需要知道有那些API可以使用,各个API方法的参数和返回值代表的意义,以及根据API的参数和返回值确定你的表单开发过程的业务等。Net中如何调用U8中的API参照U8API资源管理器中为每个已有的API生成的调用代码示例示例Businessb=ReceiptObject.Businesses["SaleVouche_0001_E001"]asBusiness;if(b.Cells["iswfcontrolled"].Value=="1")returnnull;DataSetds=b.Rows[0].RowData.Table.DataSet;MSXML2.DOMDocumentdom=BusinessInterfaceUtil.ConvertDataSetToDOM(ds,b.TableName);U8EnvContextenvContext=newU8EnvContext();envContext.U8Login=ReceiptObject.VBLoginObject;envContext.SetApiContext("VoucherType",12);U8ApiAddressmyApiAddress=newU8ApiAddress("U8API/SaleOrder/Audit");U8ApiBrokerbroker=newU8ApiBroker(myApiAddress,envContext);broker.AssignNormalValue("domHead",dom);if(this.auditType==AuditType.Audit){//审核处理broker.AssignNormalValue("bVerify",true);}elseif(this.auditType==AuditType.AbandonAudit){//弃审处理broker.AssignNormalValue("bVerify",false);}if(!broker.Invoke()){//错误处理ExceptionapiEx=broker.GetException();if(apiEx!=null){if(apiExisMomSysException){MomSysExceptionsysEx=apiExasMomSysException;Console.WriteLine("系统异常:"+sysEx.Message);MessageBox.Show(sysEx.Message);}elseif(apiExisMomBizException){MomBizExceptionbizEx=apiExasMomBizException;Console.WriteLine("API异常:"+bizEx.Message);MessageBox.Show(bizEx.Message);}result=false;}//结束本次调用,释放API资源broker.Release();}注意项表单实体功能开发(表单实体工具栏按钮功能开发)说明表单实体的功能开发主要是针对表单中的某个实体的数据相应的功能操作。IRecepit接口中的方法//////观察者视图工具条按钮单击事件的接口///被单击的按钮参数///所属业务对象///所属表单对象///voidClickToolBarButton(ToolBarActionEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject);这个方法是表单实体功能按钮执行的入口,方法的参数para代表触发当前方法的工具栏上的一个按钮,businessObject代表当前表单实体的模型对象,voucherObject代表当前表单的模型对象。根据UAP中实体功能设计里不同的ButtonKey来区别不同的功能按钮。从UAP给出的接口的参数中可以看出,对当前表单实体的功能操作,不仅能访问当前的表单实体模型对象,还能访问当前的表单模型对象。在表单开发过程中可以访问两个模型对象中的数据。示例[IsImplementAttribute(true)]publicvoidClickToolBarButton(ToolBarActionEventArgspara,BusinessProxybusinessObject,VoucherProxyvoucherObject){switch(para.Key){//复制选中行case"SenDevCopyLine":CopyCurrentLineToNewLine(businessObject,voucherObject);break;//查看存货量case"SenDevViewCount":ViewCount(businessObject,voucherObject);break;//查看当前订单对应报价单case"SenDevViewBaoJiaDan":ViewBaoJiaDan(businessObject,voucherObject);break;//订单追溯汇总查询case"SenDevVoucherZhuiSuHuiZongChaXun":VoucherZhuiSuHuiZongChaXun(businessObject,voucherObject);break;default:break;}}这个方法是表单实体功能按钮执行的入口,IsImplementAttribute属性需要手工添加到方法上面。方法的参数para代表触发当前方法的工具栏上的一个按钮,businessObject代表当前表单实体的模型对象,voucherObject代表当前表单的模型对象。根据UAP中实体功能设计里不同的ButtonKey来区别不同的功能按钮。注意项列表开发说明列表开发访问列表模型对象的接口为UFIDA.U8.UAP.UI.Runtime.List.UI.BaseUIEventHandler,该接口是一个已经包括部分功能代码的.Net类。该类被定义在UFIDA.U8.UAP.UI.Runtime.List.dll中,所以在列表开发前,你需要为新建的表单开发项目添加UFIDA.U8.UAP.UI.Runtime.List.dll的引用。你需要做的就是重写该类中的一个方法://////批审按钮处理方法//////事件触发者///事件对应的参数信息publicoverridevoidProcessEvent(UFIDA.U8.UAP.UI.Runtime.List.UIEventTypeEnumeventType,objectsender,objectargs){}列表的分成开发时,就是通过上面方法的参数sender来区分在各个不同的功能,然后开发着需要针对各个不同的功能实现其具体的业务逻辑,并将业务逻辑执行后对表单相关数据的修改持久化。U872在列表二次开发时新增接口如下,这些接口主要作用是为生单开发而添加。每个方法都有自己的注释(该方法何时被调用,作用是什么)//////过滤窗口弹出时的处理,可以动态设置缺省过滤条件//////列表服务///过滤组件publicvirtualvoidReceiptListFiltering(UFGeneralListServicelistService,FilterSrvClassfilterSrv){}//////根据条件过滤源单据列表数据,可以重写缺省的过滤算法//////过滤参数publicvirtualvoidReceiptListFilter(FilterPluginArgsfilterArgs){if(filterArgs!=null){filterArgs.CurrentPageData=null;filterArgs.RowCountData=null;}}//////过滤操作执行后的事件//////列表服务///查询后的数据(如果是分页的,只包含一页的数据)(该DataSet中只应该包含一个DataTable)///查询到的数据总行数(该DataSet中只包含一个DataTable,并且DataTable中只有一行一列)publicvirtualvoidReceiptListFiltered(UFGeneralListServicelistService,DataSetdataSet,DataSetdataRowCountDataSet){}//////源单据列表过滤结果填充之前的处理//////列表服务///查询后的数据(如果是分页的,只包含一页的数据)(该DataSet中只应该包含一个DataTable)publicvirtualvoidReceiptListFilling(UFGeneralListServicelistService,DataSetdataSet){}//////源单据列表过滤结果填充之后的处理//////列表服务///查询后的数据(如果是分页的,只包含一页的数据)(该DataSet中只
/
本文档为【U8UAP开发手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索