U871开发指导
更新时间:2024-02-01 22:58:01 阅读量: 教育文库 文档下载
- u871破解补丁推荐度:
- 相关推荐
UAP开发指导文档
1 of 90
UAP开发样例指导
用友研发中心 U8平台技术部
<本文档适用于U871版本>
UAP开发指导文档
目 录
一、 二、 三、
摘要............................................................................................................ 3 样例开发前提.............................................................................................. 3 建立UAP项目 ............................................................................................ 3
四、 建立表单模型.............................................................................................. 5
(一) 新建实体 ................................................................................................. 6 (二) 新建实体属性 .......................................................................................... 8 五、 建立表单布局............................................................................................ 12 六、
(一) (二) (三)
(四) (五) (六)
行为对象开发............................................................................................ 13 表单开发 ............................................................................................... 15 列表开发 ............................................................................................... 29 联查报表 ............................................................................................... 31 联查UAP列表 ...................................................................................... 32 UAP列表联查U8单据 .......................................................................... 32 用户自定义控件开发.............................................................................. 35
(七) U8单据引用UAP档案 .......................................................................... 36 七、 行为对象注册............................................................................................ 49
功能介绍: ...................................................................................................... 49
使用说明: ...................................................................................................... 49 应用技巧: ...................................................................................................... 51 八、 建立数据引擎............................................................................................ 51
功能介绍: ...................................................................................................... 51 使用说明: ...................................................................................................... 53 应用技巧: ...................................................................................................... 74 九、 设置过滤条件............................................................................................ 74
功能介绍: ...................................................................................................... 74 使用说明: ...................................................................................................... 75 应用技巧: ...................................................................................................... 79 十、 设置栏目................................................................................................... 80
功能介绍.......................................................................................................... 80
使用说明.......................................................................................................... 80 应用技巧.......................................................................................................... 81 十一、 权限 ...................................................................................................... 81
功能权限.......................................................................................................... 81
记录级权限 ...................................................................................................... 82 字段级权限 ...................................................................................................... 83 十二、 部署 ...................................................................................................... 84 附录:功能介绍 ...................................................................................................... 85
1、行为对象升级说明 ...................................................................................... 85 2、LoginInfo 对象介绍 .................................................................................... 87
2 of 90
UAP开发指导文档
一、 摘要
本文以U8-ERP中的销售订单为应用原型,介绍了如何通过UAP进行软件开发,文中给出了开发方法和丰富样例。内容包括:
UAP表单开发原理
UAP项目的建立和导入、导出 UAP表单的模型设计和布局设计 UAP表单的行为对象开发 UAP表单列表设计与开发
UAP表单列表的行为对象开发
如何对UAP表单的缺省按钮进行扩展性开发 如何对UAP表单的缺省按钮进行取代性开发 如何为UAP表单增加新的按钮及行为 如何用程序代码调用UAP报表
如何用程序代码调用UAP表单列表
如何在UAP表单中增加权限控制:功能权限、字段权限、记录权限 如何为UAP表单开发自定义控件 如何开发树形档案
如何维护UAP数据引擎 如何维护栏目
如何维护过滤条件 如何调用U8API
U8单据自定义项如何引用UAP档案
本文档中使用的示例文件为“销售订单二次开发”,可以通过UAP将该文件导入到帐套中。项目名称为“ SaleVoucher ”,导入后在项目中包括几个自定义单据:“销售订单”为二次开发的Demo示例;“零售日报”为自定义空间二次开发的Demo示例;“列表档案示例”、“树形编辑档案示例”、“树形导航档案示例”分别为各个对应的档案类型的示例。
二、 样例开发前提
首先,需要安装U8产品,并建立一个帐套。
其次,您需要向用友公司购买UAP表单设计许可;不过您可以使用UAP的演示版本,但是演示版本不能新建UAP项目,也不能注册行为对象。
三、 建立UAP项目
使用UAP登录您的帐套后,在系统界面上的新建项目选项卡,选中“供应链”后,在右边的列表中选择“销售管理”,在界面下方的几个文本框中输入项目名称,编号,描述等;
3 of 90
UAP开发指导文档
顺序选择框使用“默认”即可。点击“确定”如果输入信息与先前创建的项目信息不冲突,项目就可被成功创建。
您也可以导入我们为您提供的UAP样例项目,导入方法如下。 1、登录UAP; 2、打开菜单“文件-导入和导出”;
3、选中“导入项目数据到目前的服务器”,点“确定”按钮;
4、点“导入”按钮,选取U8安装目录下的“uap\\sdk”目录中的文件“Samplefile”;
4 of 90
UAP开发指导文档
5、导入成功后;
6、在UAP已存在的项目中产生了一个名称为“SaleVoucher”的项目;
四、 建立表单模型
选中“自定义表单”节点,单击右键,使用“新建自定义表单”功能创建一个新的表单。然后在弹出的选择界面中选择“表单类型”下的“单据”,在名称文本框中输入一个表单名字,不要与以前创建的表单名字重复。在成功创建后,系统界面会如下图(图表1)所示:
5 of 90
UAP开发指导文档
图表 1
在上图所示的实体节点,默认有两个子节点,分别为“主表和第一子表”,根据当前表单的需要设计实体,包括增加实体和实体属性等。
(一) 新建实体
需要为实体填写“实体名称”,和选择“实体类型”。除此以外,还可以通过实体的属性编辑窗口为实体设置各项信息。
6 of 90
UAP开发指导文档
实体的相关属性: ? ? ? ?
名称:实体显示的名称,仅用于设计时。 发布状态:实体是否已发布,只读。
功能:为实体定义自定义功能,在运行时显示为表格对应的工具栏按钮。 状态设置:设置实体属性、功能在表单运行时的状态,决定实体属性、功能在不同的环境下是否可用。 ?
物理表模式:设置实体物理表的创建模式,默认为由UAP在发布时自动创建。在特殊的应用场景中可以使用“使用已存在的对象”或“无”。后两种情况下UAP不负责实体物理表的维护。 ?
物理表:设置该实体在数据库存储时使用的物理表,一般情况下一个实体对应一个物理表。 ?
数据引擎模式:设置实体运行时数据的访问方式。默认为UAP系统在发布时自动创建,特殊的应用场景中可以使用“使用已存在的对象”或“无”,这两种情况下系统不负责实体数据的读取,只能通过用户定义的接口获取数据集。 ?
数据引擎:当数据引擎模式为“使用已存在的对象”时,设置要使用的数据引擎对象。
7 of 90
UAP开发指导文档
? ?
主键:设置实体物理表的主键字段名。
主键类型:设置实体物理表主键字段的类型,可选“整数”或“GUID”或“字符串”。
? 行模式:多行或单行。一般主表设置为单行。
(二) 新建实体属性
实体必须包含实体属性时才有效。可以在UAP界面“表单”窗口中,右键点击实体对
应的节点,选择“新建实体属性”菜单向实体添加实体属性:
实体属性通用属性: ? ? ? ? ? ? ? ? ?
类型:该实体属性的类型。 描述:对该实体属性的单体描述。 属性名称:实体属性的名称。 默认值:实体属性的默认值。
使用默认值:用户未提供数据时,是否使用实体属性的默认值。 发布:该实体属性是否已经发布。
常用条件:该实体属性是否可以在过滤中作为常用条件使用。 区间条件:该实体属性是否可以在过滤中作为区间条件使用。 值更新事件:设置该实体属性值更新时需要处理的脚本列表。
基础资料类型字段共有三种类型的值更新事件:“携带当前字段相关参照属性到指定列”、“计算定义公式的值到指定列”、“表达式为真/假时改变指定栏目编辑状态”;其余类型字段比基础资料类型字段缺少第一种类型的值更新事件。 1. 携带当前字段相关参照属性到指定列
8 of 90
UAP开发指导文档
2. 计算定义公式的值到指定列
3. 表达式为真/假时改变指定栏目编辑状态
9 of 90
UAP开发指导文档
? ? ? ? ? ?
唯一约束:是否检查该实体属性的值在整个表单范围内唯一。 文本对齐:实体属性文本的显示位置。
显示文本:实体属性的不同语言环境中显示的文本。 允许空值:实体属性的值是否可以为空。
物理表:实体属性对应物理字段的表名,即该实体属性所属实体的物理表。 字段:实体属性对应的物理字段名。
除了支持以上通用属性外,不同类型的实体属性还具有不同的特性: 1. 表单编号
表单编号只能出现的主表实体中,并且只能有一个表单编号类型的实体属性。 2. 表单名称
表单名称类型的实体属性只能在档案类型的表单中使用,同表单编号一样,表单名称类型的实体属性只能出现主表实体中,并且只能出现一次。 3. 整数和正整数
? ? ?
可否为0:数值型的值是否可为0。
录入长度:限制用户可录入数值的最多位数。 数据格式:数值类型的显示格式。
10 of 90
UAP开发指导文档
? 最大值和最小值:数据的有效范围。正整数的最小值必须等于或大于0。
4. 小数和正小数
? ? ? ? ?
可否为0:数值型的值是否可为0。
录入长度:限制用户可录入数值的最多位数。 数据格式:数值类型的显示格式。
最大值和最小值:数据的有效范围。正小数的最小值必须等于或大于0。 小数位数:数据保留的小数位数。
5. 文本
? ?
多行输入:运行时是否支持录入多行文本。 最大长度:最多可录入的文本长度。
6. 日期和日期时间
日期类型运行短日期格式,即只包含年月日。日期时间类型包含年月日和时分秒。 7. 枚举
枚举类型的实体属性需要设置枚举值列表,枚举值的显示值为在界面显示的文本,保存值为实际保存到数据库的数据,如枚举类型的实体属性“销售类型”的枚举值可设置为如下图所示:
8. 基础资料
基础资料类型的值来自指定参照档案的对照值。 ?
参照对象:设置基础资料类型实体属性的参照档案对象,可以从U8档案列表中选择,包含UAP中定义为档案类型的表单。
11 of 90
UAP开发指导文档
? ?
选择方式:设置在运行时的对照选择方式。
自动校验:是否对录入的值进入检验以确定数据是否来自指定的参照对象。选择“否”时允许用户录入参照对象中不存在的值。
9. 基础资料属性
基础资料属性类型的实体属性必须和基础资料类型的实体属性结合使用。 ?
参照属性:设置基础资料属性类型实体属性要绑定的基础资料类型实体属性,并指定关联的参照字段。当基础资料类型的实体属性值变化时,基础资料属性类型的实体属性值随之改变。
10. 数量、价格和金额
数量、价格和金额类型的实体属性实质上为小数类型,设置等同于小数类型的实体属性。 11. 复选框
特殊类型的整数值,运行时显示为复选框,保存的数据为0(未选择)或1(选择)。 12. 制单人
当前单据的作者,一般设为登录用户。 13. 制单日期和修改日期
制单日期保存当前表单生成的日期,修改日期保存表单最后一次修改的日期。这两种类型的
实体属性实质上为日期时间类型,设置等同于日期时间类型的实体属性。
五、 建立表单布局
在完成实体的设计后,可以设计表单布局,UAP支持一个表单多个布局视图,用户可根据自己的使用习惯选择一种布局视图。布局视图的设计与普通window界面的布局设计基本一致。
12 of 90
UAP开发指导文档
六、 行为对象开发
行为对象开发是指增加表单或列表的功能按钮,除了UAP系统自带的功能按钮外,还可以增加按钮,这些增加的功能按钮是UAP表单开发的基础。
UAP提供了多种增加功能的途径,首先通过设计界面的树形菜单中的“功能”节点下的表单功能和列表功能的“功能管理”(图表2)添加功能按钮,这些功能按钮最终在运行时会被加载到U8产品的门户上;其次可以为每个表单实体添加功能按钮(图表3),为实体添加完成这些功能按钮后,还需要在布局视图上为该表单实体的“功能”属性设置使用这些功能(图表4),这些功能按钮最终在运行时会被加载到该实体的工具栏按钮上。
图表 2 图表 3 图表 4
13 of 90
UAP开发指导文档
图表 5
增加功能按钮时,很多工作都可以通过上图(图5)的设计界面完成,开发人员关心的仅仅是表单开发业务逻辑的实现。这些按钮的作用主要是通过在运行时对模型对象中数据的修改以及最终将修改的数据持久化来完成的。
UAP表单开发分为表单开发和列表开发两种。因此对应了两种不同的开发类型定义了两种不同的访问模型对象数据的接口。
新增功能开发(锁定、解锁、关闭、打开)表单功能开发表单开发已有功能修改(审核、弃审等)新增功能开发(复制选中行、查询订单对应报价单、订单追溯查询)UAP分层开发列表开发表单实体功能开发新增功能开发(批审、批弃、批量关闭、批量打开)已有功能修改(暂无)已有功能修改(暂无)
14 of 90
UAP开发指导文档
(一) 表单开发
表单开发访问模型对象的接口UFIDA.U8.UAP.UI.Runtime.Model.IReceipt,该接
口被定义在UFIDA.U8.UAP.UI.Runtime.Model.dll中,所以在做表单开发前,你需要为新建的表单开发项目添加UFIDA.U8.UAP.UI.Runtime.Model.dll的引用。
表单开发又可细分为表单功能开发和表单实体功能开发,每个不同部分的开发又都分为UAP已有按钮的功能修改开发和新增按钮的功能开发。目前为止,只要是表单开发,只需要实现上述接口即可。在实现 IReceipt 接口后,在实现类中会继承以下这些方法:
///
/// 门户工具栏按钮被点击时触发该方法,可以根据参数判断是哪个按钮被触发 /// ///
IButtonEventHandler GetButtonEventHandler(VoucherButtonArgs
ButtonArgs);
///
/// ///
void InitReceipt(VoucherProxy ReceiptObject); ///
/// 值更新之前的接口,对值的合法性检查在这里进行 /// /// /// ///
void CellChanging(CellChangeEventArgs para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 值更新之后的接口,对值的后续处理(如对其他Cell值的变更)在这里进行 /// /// /// ///
void CellChanged(CellChangeEventArgs para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 增加行之前的接口,对行的合法性检查在这里进行 ///
/// /// ///
void RowAdding(RowChangeEventArgs para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
15 of 90
UAP开发指导文档
/// 增加行之后的接口,对新增行的后续处理在这里进行 ///
/// /// ///
void RowAdded(RowChangeEventArgs para, BusinessProxy businessObject,
VoucherProxy voucherObject);
///
/// 删除行之前的接口,对行的合法性检查在这里进行
///
/// ///
///
void RowsDeleting(RowChangeEventArgs[] para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 删除行之后的接口,对删除行的后续处理在这里进行
///
/// /// ///
void RowsDeleted(RowChangeEventArgs[] para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 观察者视图工具条按钮单击事件的接口
///
/// /// ///
void ClickToolBarButton(ToolBarActionEventArgs para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 设置为当前行之前的接口
///
/// /// ///
void RowSelecting(RowSelectEventArgs para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 设置为当前行之后的接口
///
16 of 90
UAP开发指导文档
/// /// ///
void RowSelected(RowSelectEventArgs para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 业务数据合法性检查之前的接口
/// /// ///
void DataChecking(BusinessProxy businessObject, VoucherProxy
voucherObject);
///
/// 业务数据合法性检查之后的接口
/// /// ///
void DataChecked(BusinessProxy businessObject, VoucherProxy
voucherObject);
///
/// 观察者视图填充数据前的接口
/// /// ///
void EditWindowFilling(IEditWindow view, DataTable fillDataTable,
BusinessProxy businessObject, VoucherProxy voucherObject);
///
/// 观察者视图填充数据后的接口
/// /// ///
void EditWindowFilled(IEditWindow view, DataTable fillDataTable,
BusinessProxy businessObject, VoucherProxy voucherObject);
///
/// /// /// /// ///
void ReferOpening(ReferOpenEventArgs para, BusinessProxy
businessObject, VoucherProxy voucherObject);
///
/// 参照返回(关闭)后的接口
17 of 90
UAP开发指导文档
/// /// /// /// ///
void
ReferClosed(ReferCloseEventArgs
para,
BusinessProxy
businessObject, VoucherProxy voucherObject); ///
/// 创建用户自定义控件接口,开发人员可以在这里创建用户自定义控件。运行时会把这个控件加载到布局视图中。(版本新增) ///
/// ///
/// ///
Control CreateControl(BusinessProxy businessObject, VoucherProxy voucherObject, string ID);
///
/// 表单状态更新之前的接口
///
/// ///
void StateChanging(VoucherStateChangeEventArgs para, VoucherProxy voucherObject);
///
/// 表单状态更新之后的接口
///
/// /// void StateChanged(VoucherStateChangeEventArgs para, VoucherProxy voucherObject);
1、
说明
表单功能开发(门户工具栏按钮功能开发)
IRecepit接口中的方法
///
/// 门户工具栏按钮被点击时触发该方法,可以根据参数判断是哪个按钮被触发 /// /// IButtonEventHandler
GetButtonEventHandler(VoucherButtonArgs
ButtonArgs); 这个方法是表单功能按钮执行的入口,根据在UAP表单功能的功能管理(见
图2)里添加的不同功能按钮的ButtonKey来区别不同的功能。返回值类型为UFIDA.U8.UAP.UI.Runtime.Model.IButtonEventHandler接口,该返回值对象会被UAP运行时调用来执行该对象中的方法。IButtonEventHandler接口定义了三个方法,按照运行时被调
18 of 90
UAP开发指导文档
用执行的先后顺序分别为:
string Excuting (VoucherProxy ReceiptObject)、 string Excute (VoucherProxy ReceiptObject, string PreExcuteResult)、 string Excuted(VoucherProxy ReceiptObject, string PreExcuteResult)。 注:
(1)三个方法的返回值为xml字符串,其格式为
\,该返回值用来标示当前方法是否成功执行,记录在result属性里,errinfo属性用来记录任何可能的信息。Excuting方法的返回值可以作为Excute方法的第二个参数PreExcuteResult传入Excute,你可以在Excute方法体重分析传入的信息决定程序是否继续执行,或作出其他处理等,同样,Excute方法的返回值也可作为Excuted方法的参数传入,并作必要检查。另外,你可以在保证上面规定的xml结构的前提下,在
示例
[IsImplementAttribute(true)]
public IButtonEventHandler GetButtonEventHandler(VoucherButtonArgs ButtonArgs) {
//保存按钮----UAP已有功能的部分修改开发
if (ButtonArgs.ButtonKey == \) {
return new AcceptOrderButton(); }
//审核按钮----UAP已有功能替代修改开发
if (ButtonArgs.ButtonKey == \) {
return new AuditButton(AuditType.Audit); }
//锁定按钮----新增功能开发
if (ButtonArgs.ButtonKey == \) {
return new LockVoucherButton(LockType.Lock); } }
这个方法是表单功能按钮执行的入口,IsImplementAttribute属性需要手工添加到方法上面。根据在UAP表单的功能管理里不同功能按钮的ButtonKey来区别不同的功能。上述代码的返回值类型AcceptOrderButton、AuditButton、LockVoucherButton都是继承自UFIDA.U8.UAP.UI.Runtime.Model.IButtonEventHandler接口。
19 of 90
UAP开发指导文档
注意项
1) 新增功能开发 说明
在使用UAP进行表单开发时,UAP已经提供的功能都是一些公共功能,而一些表单可能需要很多特别的功能,此时就需要进行新增功能的开发。新增功能开发需要开发者要完全理解当前功能的实际业务,并在实现业务的基础上将对表单相关数据的修改持久化到数据库中,持久化的操作及可能的事务控制等完全由开发人员自己来做。
示例
//锁定按钮----新增功能开发 双击查看代码
20 of 90
UAP开发指导文档
#region 锁定按钮----新增功能开发 using System; using System.Collections.Generic; using System.Text; using UFIDA.U8.UAP.UI.Runtime.Model; using System.Windows.Forms; using System.Data.SqlClient; namespace ufida.u8.uap.plugin.SalesVoucher { public class LockVoucherButton : IButtonEventHandler { public LockVoucherButton() { } #region IButtonEventHandler 成员 public string Excute(VoucherProxy ReceiptObject, string PreExcuteResult) { bool result = false; SqlConnection conn=new SqlConnection(ReceiptObject.LoginInfo.UFDataSqlConSt SqlTransaction tran = null; SqlDataReader rd = null; try { conn.Open(); tran=conn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); SqlCommand cmd = conn.CreateCommand(); Business b = ReceiptObject.Businesses[\] as Business; BusinessCell cell = b.Cells[\] as BusinessCell; string pkValue = cell.Value; cmd.CommandText = \cVerifier, cCloser,cLocker from so_somain where cSOCode = '\ + pkValue + \; cmd.Transaction = tran; rd = cmd.ExecuteReader(); if (rd.Read()) { string auditMan = \; string closeMan = \; string lockMan = \; if (!rd.IsDBNull(0)) { auditMan = rd.GetString(0); } if (!rd.IsDBNull(1)) { closeMan = rd.GetString(1); } if (!rd.IsDBNull(2)) { lockMan = rd.GetString(2);
21 of 90
UAP开发指导文档
注意项
2) UAP已有功能的修改开发 说明
UAP已经实现了新增表单的保存方法,但是我们可能在使用UAP保存逻辑的基础之上,在保存之前或保存之后对表单的某些数据做一定的修改。具体就是对表单模型中的某些实体属性的值根据业务逻辑的需要做必要的修改再执行已有的表单保存。
22 of 90
UAP开发指导文档
示例
using System; using System.Collections.Generic; using System.Text; using UFIDA.U8.UAP.UI.Runtime.Model; using UFIDA.U8.UAP.UI.Runtime.Common; using System.Xml; namespace ufida.u8.uap.plugin.SalesVoucher { ///
23 of 90
UAP开发指导文档
注意项
3) UAP已有功能的替代开发 说明
UAP系统中已经实现了一些公共功能,但这些功能并不一定适用于每种不同表单的具体情况,所以有些时候我们可能需要对UAP的已经实现的功能进行替代开发。替代开发分为两种:在实现业务基础上直接操作数据库、调用U8已经实现的该表单审核功能的API方法。
直接操作数据库:直接操作数据库的开发方法与下面的“新增功能开发”的开发方法大体一致,此处不再细述。
调用业务API:调用业务API方法避免了开发人员必须去了解当前功能的具体业务,降低了开发的复杂程度,有利于快速而准确的开发。但是在使用业务API之前,必须首先掌握在.Net中调用U8中API的方法,其次需要知道有那些API可以使用,各个API方法的参数和返回值代表的意义,以及根据API的参数和返回值确定你的表单开发过程的业务流程等。
Net中如何调用U8中的API
///
///
///
\\UAP\\BusinessInterface\\Framework\\UFSoft.U8.Business.Interface.config文件中的APIRepository节点的子节点Product 节点的name属性值
///
///
///
\\UAP\\BusinessInterface\\Framework\\UFSoft.U8.Business.Interface.config文件中的APIRepository节点的子节点Product 节点的version属性值 /// ///
static object ExcutingAPI(LoginInfo login,string regUnitName,string adapterName,string apiName,string version,Hashtable parameters) { }
参数login:表示U8登录对象; 参
数
regUnitName
:
注
册
单
元
名
称
。
U8
安
装
目
录
24 of 90
UAP开发指导文档
\\UAP\\BusinessInterface\\Framework\\UFSoft.U8.Business.Interface.config文件中的APIRepository节点的内容为:
file=\SCM\\SA\\SAAPI.Config.860.xml\ file=\SCM\\ST\\STAPI.Config.860.xml\ file=\SCM\\PU\\PUAPI.Config.860.xml\ 以销售订单表单开发为例,我应该找Product节点下description属性为“供应链销售管理” 的节点的Name属性,所以此处的参数regUnitName的值为“SCMSA”; 参数adapterName:适配器名称。根据上面参数regUnitName找到的Product节点,找到该节点的file属性值,找到文件 U8安装目录\\UAP\\BusinessInterface\\Framework\\ SCM\\SA\\SAAPI.Config.860.xml,在该API配置文件中找到描述信息description属性为“销售管理系统”的Adapter节点,该节点的name属性值即为当前参数adapterName的值。 参数apiName:业务API名称。在SAAPI.Config.860.xml文件中适配器Adapter节点下配置了很多的API节点,每个API节点描述了一个业务操作的API。此示例为销售订单的审核操作,我们应该找描述信息description属性为“审核表单”的API节点,该节点的name属性即为当前参数apiName的值; 参数version:根据参数regUnitName找到的Product节点的version属性确定该参数的 值。 参数parameters为当前调用的API的参数值,每个API的参数不尽相同,需要根据每个调用的API的参数的不同来填充Hashtable对象,Hashtable的key为当前API参数的名字,value为参数的值。 细述API的参数和返回值的含义 因为各个API的参数类型及意义大致相同,所以此处举例说明API各个参数的具体意义。以销售订单的审核功能的API来说明,以下为API配置文件中,销售管理下的审核表单功能API xml节点的信息。 name=\DomHead\ type=\DOMDocument\ direction=\Out\ optional=\False\ description=\表头\ 审核false弃审\ name=\VoucherType\ /> 25 of 90 beOddProperty=\True\ direction=\In\ optional=\False\ type=\BaseType.Int32\description=\单据类型\ UAP开发指导文档 DomHead 参数表示表单头部,用 DOMDocment 类型描述,该参数可以在表单开发时通过表单对象得到。 Business b = ReceiptObject.Businesses[\] as Business; DataSet ds = b.Rows[0].RowData.Table.DataSet; MSXML2.DOMDocument domHead = ConvertDataSetToDOM(ds, b.TableName); \表示在使用UAP设计表单实体模型时,该表单头部实体的编号。在运行时通过该编号从表单对象中访问表单头部,再将表单头部转化为DOMDocument类型即可。 bVerify参数,从该参数节点的描述属性description=\true审核false弃审\可以得到VoucherType参数,该参数为业务组区分表单的单据类型,该参数的值在对不同的表单除上述几个参数外,API可能的参数还包括表单单据体部分的DOMDocment,除了表单在审核时该参数为True,弃审时为False; 做操作时是不一样的。在具体使用时只能时根据业务组提供的值做该参数的值。 实体编号不一致外,其获取方法与DomHead的获取方法完全一样;还可能有包含错误信息ErrMsg的DOMDocment的对象,通过这个参数你可以在调用API之后,获取业务API放入其中的错误信息,以便你获取这些错误信息来控制你的表单开发的业务流程。 综上,调用业务API的流程示例为: Business b = ReceiptObject.Businesses[\] as Business; DataSet ds = b.Rows[0].RowData.Table.DataSet; MSXML2.DOMDocument dom =ConvertDataSetToDOM(ds, b.TableName); Hashtable paras = new Hashtable(); paras.Add(\, dom); paras.Add(\, true); paras.Add(\, 12); object resultStr =ExcutingAPI(ReceiptObject.LoginInfo, \, \, \, \, paras); 根据返回值resultStr的不同结构去做不同的表单开发的业务流程。 API执行的返回值也是根据不同的API返回不同的对象,只能时根据不同的API去解析其返回的具体值,来控制你的表单开发的业务流程。 示例 双击查看详细代码 26 of 90 UAP开发指导文档 using System; using System.Collections.Generic; using System.Text; using UFIDA.U8.UAP.UI.Runtime.Model; using System.Data.SqlClient; using UFIDA.U8.UAP.UI.Runtime.Common; using System.Collections; using System.Data; using System.Windows.Forms; using System.Xml; namespace ufida.u8.uap.plugin.SalesVoucher { /// 27 of 90 UAP开发指导文档 2、 说明 表单实体功能开发(表单实体工具栏按钮功能开发) 表单实体的功能开发主要是针对表单中的某个实体的数据相应的功能操作。 IRecepit接口中的方法 /// /// 观察者视图工具条按钮单击事件的接口 /// /// /// /// void ClickToolBarButton(ToolBarActionEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); 这个方法是表单实体功能按钮执 行的入口,方法的参数para代表触发当前方法的工具栏上的一个按钮,businessObject代表当前表单实体的模型对象,voucherObject代表当前表单的模型对象。根据UAP中实体功能设计里不同的ButtonKey来区别不同的功能按钮。从UAP给出的接口的参数中可以看出,对当前表单实体的功能操作,不仅能访问当前的表单实体模型对象,还能访问当前的表单模型对象。在表单开发过程中可以访问两个模型对象中的数据。 示例 [IsImplementAttribute(true)] public void ClickToolBarButton(ToolBarActionEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject) { switch (para.Key) { //复制选中行 case \: CopyCurrentLineToNewLine(businessObject, voucherObject); break; //查看存货量 case \: ViewCount(businessObject, voucherObject); break; //查看当前订单对应报价单 case \: ViewBaoJiaDan(businessObject, voucherObject); break; //订单追溯汇总查询 case \: VoucherZhuiSuHuiZongChaXun(businessObject, voucherObject); break; default: 28 of 90 UAP开发指导文档 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的引用。你需要做的就是重写该类中的一个方法: /// /// /// public override void ProcessEvent( UFIDA.U8.UAP.UI.Runtime.List.UIEventTypeEnum eventType, object sender, object args) { } 列表的分成开发时,就是通过上面方法的参数sender来区分在各个不同的功能,然后开发着需要针对各个不同的功能实现其具体的业务逻辑,并将业务逻辑执行后对表单相关数据的修改持久化。 示例 双击查看代码 29 of 90 UAP开发指导文档 using System; using System.Collections.Generic; using System.Text; using UFIDA.U8.UAP.UI.Runtime.List; using UFIDA.U8.UAP.UI.Runtime.Model; using System.Data; using UFIDA.U8.UAP.UI.Runtime.List.Metas; using System.Collections; using System.Data.SqlClient; using System.Diagnostics; using UFIDA.U8.Portal.Framework.Commands; using UFIDA.U8.Portal.Proxy.Accessory; namespace ufida.u8.uap.plugin.SalesVoucher { public class SalesOrderList : UFIDA.U8.UAP.UI.Runtime.List.UI.BaseUIEventHandler { /// 30 of 90 UAP开发指导文档 注意项 (三) 联查报表 说明 联查报表是指在UAP表单中,通过表单功能或表单实体功能查询与表单或表单实体中的某些数据相关的U8报表。这种查询操作是针对特定的表单或表单实体,所以可以不必输入过滤条件,而是使用默认过滤条件,所以此处的联查报表有别于使用过滤条件的报表查询。 示例 联查报表示例----在UAP表单中打开U8报表 此处以销售订单中查看某个存货的现存量来描述。在销售订单的表单单据体中描述了一 组(多行)存货数据信息。首先从当前表单实体模型中获得当前实体的主键值,进而获得当前主键值对应得存货信息,将存货信息封装到过滤条件中传入报表即可。 (1)获得存货编码 BusinessRow currentRow =someEntity.Rows[someEntity.CurrentPKValue]; DataRow someRow = currentRow.RowData; string invCode = someRow[invcodeColumnName].ToString(); (2)封装过滤条件 封装过滤条件涉及到一个过滤窗口是否显示的问题。如果过滤窗口显示, 我们可以通过过滤窗口为过滤查询赋值;如果要求过滤窗口不显示,并且需要设置查询条件,此时只能是先通过代码封装查询过滤条件,然后再传入打开报表的方法。 //封装过滤条件 FilterSrv filter = new FilterSrvClass(); bool hiddenFlag = true; object errInfo = new object(); object temp2 = (object)filterColumnName; filter.OpenFilter((object)login, \销售现存量查询\, \, \, ref errInfo, ref hiddenFlag); if (filter.FilterList.get_Item(ref temp2).IsSingleItem == true) { filter.FilterList.get_Item(ref temp2).varValue = filterValue1; } else { filter.FilterList.get_Item(ref temp2).varValue = filterValue1; filter.FilterList.get_Item(ref temp2).varValue2 = filterValue2; } //将过滤条件传入打开报表的方法 clsReportOpen clsReport = new clsReportOpenClass(); bool hiddenFlag = true; object tmp =(object)filter; clsReport.OpenReport(reportName, (object)login, ref hiddenFlag,ref tmp ); 31 of 90 UAP开发指导文档 clsReport = null; 注意项 (四) 联查UAP列表 说明 联查UAP列表是指从UAP表单中打开UAP样式的U8表单列表。在现在的UAP中,打开UAP列表必须使用UAP列表的一些基础服务,在联查过程中,可以使用过滤设置设置列表查询的过滤条件,也可不使用过滤设置而使用默认的过滤条件。 示例 该部分示例与下一部分“UAP列表联查U8单据”一起展示 (五) UAP列表联查U8单据 说明 此处UAP列表是指UAP列表样式的U8表单列表,通过该列表联查U8单据必须与上面所讲的“联查UAP列表”结合使用。 从UAP表单中穿透到(打开)UAP列表样式的U8表单列表,并且从打开的UAP列表样式的U8表单列表中穿透到(打开)U8表单。 要获得U8表单列 表 需 要 实 例 化 UFIDA.U8.UAP.UI.Runtime.List.UFGeneralListServiceUFIDA.U8.UAP.UI.Runtime.List.UFGeneralListService 类,而要实例化类,需要实例化 类 , 实 例 化 UFIDA.U8.UAP.UI.Runtime.List.Metas.UFGeneralListMeta UFGeneralListMeta时一般需要的参数为数据源、过滤条件、栏目、用户自定义事件等。 数据源: 类:UFIDA.U8.UAP.UI.Runtime.List.Metas. DataAccessMeta 实例化该类时需要两个参数 new DataAccessMeta(\, erQuerySetting),第一个参数目前可支持两种类型分别为:\;第二个参数为对应第一个参数的用xml描述的数据源详细信息。如果第一个参数为\则xml结构为: \,则xml结构为: boid=\ functionName=\type=\;如果第一个参数为 32 of 90 UAP开发指导文档 类:UFIDA.U8.UAP.UI.Runtime.List.Metas. FilterMeta 实例化该类new FilterMeta(\, filterSet)需要两个参数,第一个 参数为本次查询需要的过滤条件编号ID,第二个为不显示过滤窗口时传入默认的过滤条件,其为xml结构的字符串,默认过滤条件的组织样式如下格式要求: 1、 过滤列的名称必须在该处列表过滤条件所有可选的字段中。 2、 操作符operator1为正常的Sql表到式中的where条件操作符。like等操作时需要自己添加必要的\等 3、 区间条件时需要最终的格式为 operator2=\区间条件时值\ 栏目: 类:UFIDA.U8.UAP.UI.Runtime.List.Metas.ColumnMeta 实例化该类new ColumnMeta(\)需要一个参数,该参数为在UAP 的栏目设计器中对应栏目的编号ID。 用户自定义事件: 该参数为当表单开发人员对查询后的列表有自定义按钮事件或其他操作时使用,该参 数为实现基类UFIDA.U8.UAP.UI.Runtime.List.UI.BaseUIEventHandler的子类的完整的命名路径。 至此使用上述几个参数可以实例化UFGeneralListMeta类的一个对象,然后再使用该对象实例化UFGeneralListService类的对象,就可以得到UAP列表。如果想从该列表中某一行数据穿透到该条数据对应的表单中,需要在实例化UFGeneralListMeta类的对象时做一个额外的工作。就是为UFGeneralListMeta类的对象的ExtendInfo属性赋值,该属性值为xml格式的字符串类型。其格式为: 33 of 90 UAP开发指导文档 示例 UFGeneralListMeta listMeta = new UFGeneralListMeta(); //组织数据源,此处使用数据引擎查询数据。 UFGeneralListMetaUtil.SetBizDAEERQueryInfo(listMeta, \, \); #region 设置数据引擎过滤条件 Business b = voucherObject.Businesses[\] as Business; string curentRow = b.CurrentPKValue; BusinessRows rows = b.Rows; //此处不再使用过滤,只能给其传输默认过滤条件。默认过滤条件的组织样式如下格式。 //1、过滤列的名称必须在该处列表过滤条件所有可选的字段中。 //2、操作符operator1为正常的Sql表到式中的where条件操作符。like等操作时需要自己添加必要的\等 //3、区间条件时需要最终的格式为 34 of 90 UAP开发指导文档 (六) 用户自定义控件开发 说明 UAP表单开发支持在表单视图中添加用户自定义控件,并将该自定义控件与该表单中的某一个表单实体模型关联,根据用户的实际需求,对实体模型中数据做更加丰富的展示,或者通过对自定义控件上展示的数据的修改影响实体模型的数据。 IRecepit接口中的方法 /// /// 创建用户自定义控件接口,开发人员可以在这里创建用户自定义控件。运行时会把这个控件加载到布局视图中。(版本新增) /// /// /// /// /// Control CreateControl(BusinessProxy businessObject, VoucherProxy voucherObject, string ID); 开发人员通过实现该方法返回自己定义的控件对象,UAP 将控件对象加载到布局视图中。 示例 [IsImplementAttribute(true)] public System.Windows.Forms.Control CreateControl(BusinessProxy businessObject, VoucherProxy voucherObject, string ID) { Control resultControl = null; //此处的ID为UAP布局视图中自定义控件的属性“控件ID” if (ID == \) { SaleCountReportControl tempControl = new SaleCountReportControl(); resultControl = tempControl; tempControl.Dock = DockStyle.Fill; } return resultControl; } 样例运行 样例项目中的“零售日报”表单为自定义控件表单例子,表体部分的数据被修改时自定义的图表信息会相应的做出修改。 35 of 90 UAP开发指导文档 (七) U8单据引用UAP档案 说明 示例 新建UAP档案 UAP档案分为“复杂档案”、“列表档案”、“树形编辑档案”、“树形导航档案”四种类型。“复杂档案”类型的档案设计方法与普通单据基本一致,唯一的区别就是设计“主表”实体时必须设计类型为“表单名称”的实体属性。其他三种类型档案新建方法分别如下: 1) 新建列表档案: 选择档案类型及填写档案名称 36 of 90 UAP开发指导文档 列表档案类型的档案只有“主表”实体,不能再添加新实体。所以只需要为“主表”实体设计实体属性 表单编号类型(必须添加) 表单名称类型(必须添加) 37 of 90 UAP开发指导文档 根据需要可以再添加其他类型的实体属性。 设计布局视图 可以再对该列表档案的“功能”、“栏目”、“过滤”等设计项或实体的属性等信息项做设定,设计完成之后可以发布该档案 2) 新建树形编辑档案: 选择档案类型及填写档案名称 38 of 90 UAP开发指导文档 列表档案的实体设计同上述的列表档案,只有“主表”实体,“表单编号”和“表单名称”类型的实体属性必须设计。 布局视图的设计比较特别,需要在界面视图上添加“树形控件” 然后为“树形空间”绑定实体,在设计界面上的树形控件点击“右键”?绑定实体?“主表*********”。 39 of 90 UAP开发指导文档 然后在布局视图中添加“主表”实体控件。 可以再对该列表档案的“功能”、“栏目”、“过滤”等设计项或实体的属性等信息项做设定,设计完成之后可以发布该档案 3) 新建树形导航档案: 选择档案类型及填写档案名称 40 of 90 UAP开发指导文档 树形导航档案的实体包括“主表”和“子表”两个,不能再添加别的实体。并且“主表”中不能再添加实体属性,只有“编码字段”和“显示字段”两个实体属性;而“子表”实体的实体属性可以根据需要自己添加,当然“表单编号”和“表单名称”两种类型的实体属性必须在“子表”实体中添加。树形导航档案类型的档案与其他类型的档案的区别是必须通过“主表”实体的属性编辑窗口为“主表”实体编辑几项属性。 图中红框圈中的几项属性必须要添加。 41 of 90 UAP开发指导文档 首先,添加“数据引擎”,通过下面的方式选择一个合适的数据引擎。 其次,设置编码规则,根据选择的数据引擎编码字段的编码规则来设置该属性,因为“部门档案信息”的编码规则为“1:2”,所以此处属性设置为“1:2”。 再次,设置编码字段和显示字段 ,在设置了“数据引擎”后,编码字段 会通过“数据引擎”读取该引擎可以得到的所有的字段信息,通过下拉框可以为“编码 42 of 90 UAP开发指导文档 字段”属性选择合适的字段;同样的方式设置“显示字段”属性。 设计布局视图,树形导航档案的布局视图的设计与树形编辑档案布局视图的设计相同。 可以再对该列表档案的“功能”、“栏目”、“过滤”等设计项或实体的属性等信息项做设定,设计完成之后可以发布该档案 使用参照设计器 在将新建完成的档案发布以后使用“参照设计器”将该档案设置为“自定义字段参照”。步骤如下: 打开“参照设计器” 根据档案名称定位到档案 43 of 90 UAP开发指导文档 修改该档案将其设置为“自定义字段参照”档案并保存。 44 of 90 UAP开发指导文档 设置U8单据显示格式 登录U8后,选择“基础设置”—>“单据设置”—>“单据格式设置”,双击进入“单据格式设置”。选择某个子产品下的一个需要修改的单据的显示模板,此处以“销售管理”?“发货单”—>“显示”为例,打开显示模板后如下图所示: 假如我们需要在表头部分添加一个参照项,在打开的显示模板上执行右键菜单里的“表头项目”(需要修改表体部分就选择“表体项目”) 选择一个需要显示的项目 45 of 90 UAP开发指导文档 为其参照类型从下拉框中选择“档案” 进入“自定义项属性”标签 46 of 90 UAP开发指导文档 “数据来源”选择“来源档案”,并选择“档案名称”和“参照栏目”,其中“档案名称”选择使用“参照设计器”将档案修改为“自定义字段参照”的档案。 47 of 90 UAP开发指导文档 “确定”后保存当前单据的显示模板 在U8中打开“发货单”并执行“增加”后显示的样式为 48 of 90 UAP开发指导文档 注意项 1、档案被重新发布后其在“参照设计器”中设置的信息会丢失。例如将“列表档案示例”在“参照设计器”将档案设置为“自定义字段参照”后,在重新发布“列表档案示例”后,该项信息丢失。 七、 行为对象注册 功能介绍: UAP表单开发的组件最终都是通过组件接口挂接到系统中,在运行时被调用执行。此功能一般是在表单开发的代码完成之后使用。 使用说明: 行为对象注册分为两种类型:表单对象、列表对象、服务器端对象。 编辑表单的行为对象时,类名属性选择实现了IReceipt接口的类; 从“对象类型”中选择实现了IReceipt接口的类,如下图展示的是示例中实现了IReceipt接口的类 确定后 49 of 90 UAP开发指导文档 编 性选择 UFIDA.U8.UAP.UI.Runtime.List.UI.BaseUIEventHandler的类。 辑 列 表 的 行 为 对 象 时 , 类 名 属 继 承 了 确定后 50 of 90
正在阅读:
U871开发指导02-01
分析化学(李发美,人民卫生出版社)(第7版)课后习题参考解答03-16
路基土方试验段总结报告01-30
AO2008答案03-09
第二学期二级语文教学总结05-29
浅谈生态林业的技术创新和可持续发展02-27
逻辑推理故事附答案01-06
大工18秋《模拟电子技术》在线作业资料05-09
整体橱柜价格如何计算02-09
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 指导
- 开发
- U871
- 化工厂安全考试题库
- 有机梨的种植过程
- 丙烯压缩机操作法
- 沪教版四年级上第三单元课课练
- 教代会议程
- 电能计量密码机(增强型)用户操作手册 - 图文
- 上下班发生交通事故能算工伤吗?
- 倔强的小红军教学设计
- 河北省唐山市丰南区第一中学2012-2013学年高二下学期期中考试数学(文)试题 Word版含答案
- 北大仓营销计划书
- 械-05-06 FZQ2400型附着自升塔式起重机拆除(A)3
- 电子秤专业语音芯片说明资料
- 不同配电网自动化通信方案比较及应用研究
- 当前河北省农村人口问题研究
- 物联网导论习题及答案
- 资料员实习报告
- 陕西旅游版小学英语课本汉语翻译三年级上
- 小学数学应用题行程问题及其拓展专项练习含有详细答案解析(50题)
- 2018-2024年中国锦纶纤维市场前景研究与市场运营趋势报告(目录)
- 2006年网优竞赛试题东莞分公司