uuap开发手册.docx
《uuap开发手册.docx》由会员分享,可在线阅读,更多相关《uuap开发手册.docx(25页珍藏版)》请在冰豆网上搜索。
uuap开发手册
UAP开发样例指导
用友研发中心U8平台技术部
<本文档适用于U871版本>
一、摘要3
二、样例开发前提3
三、建立UAP项目3
四、建立表单模型5
(一)新建实体6
(二)新建实体属性8
五、建立表单布局12
六、行为对象开发13
(一)表单开发15
(二)列表开发28
(三)生单二次开发34
(四)联查报表35
(五)联查UAP列表36
(六)UAP列表联查U8单据37
(七)用户自定义控件开发40
(八)U8单据引用UAP档案41
七、行为对象注册54
功能介绍:
54
使用说明:
54
应用技巧:
56
八、建立数据引擎57
功能介绍:
57
使用说明:
58
应用技巧:
80
九、设置过滤条件80
功能介绍:
80
使用说明:
80
应用技巧:
85
十、设置栏目86
功能介绍86
使用说明86
应用技巧87
十一、权限87
功能权限87
记录级权限88
字段级权限89
十二、部署90
附录:
功能介绍91
1、行为对象升级说明91
2、LoginInfo对象介绍93
一、摘要
本文以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登录您的帐套后,在系统界面上的新建项目选项卡,选中“供应链”后,在右边的列表中选择“销售管理”,在界面下方的几个文本框中输入项目名称,编号,描述等;顺序选择框使用“默认”即可。
点击“确定”如果输入信息与先前创建的项目信息不冲突,项目就可被成功创建。
您也可以导入我们为您提供的UAP样例项目,导入方法如下。
1、登录UAP;
2、打开菜单“文件-导入和导出”;
3、选中“导入项目数据到目前的服务器”,点“确定”按钮;
4、点“导入”按钮,选取U8安装目录下的“uap\sdk”目录中的文件“Samplefile”;
5、导入成功后;
6、在UAP已存在的项目中产生了一个名称为“SaleVoucher”的项目;
四、建立表单模型
选中“自定义表单”节点,单击右键,使用“新建自定义表单”功能创建一个新的表单。
然后在弹出的选择界面中选择“表单类型”下的“单据”,在名称文本框中输入一个表单名字,不要与以前创建的表单名字重复。
在成功创建后,系统界面会如下图(图表1)所示:
图表1
在上图所示的实体节点,默认有两个子节点,分别为“主表和第一子表”,根据当前表单的需要设计实体,包括增加实体和实体属性等。
(一)新建实体
需要为实体填写“实体名称”,和选择“实体类型”。
除此以外,还可以通过实体的属性编辑窗口为实体设置各项信息。
实体的相关属性:
名称:
实体显示的名称,仅用于设计时。
发布状态:
实体是否已发布,只读。
功能:
为实体定义自定义功能,在运行时显示为表格对应的工具栏按钮。
状态设置:
设置实体属性、功能在表单运行时的状态,决定实体属性、功能在不同的环境下是否可用。
物理表模式:
设置实体物理表的创建模式,默认为由UAP在发布时自动创建。
在特殊的应用场景中可以使用“使用已存在的对象”或“无”。
后两种情况下UAP不负责实体物理表的维护。
物理表:
设置该实体在数据库存储时使用的物理表,一般情况下一个实体对应一个物理表。
数据引擎模式:
设置实体运行时数据的访问方式。
默认为UAP系统在发布时自动创建,特殊的应用场景中可以使用“使用已存在的对象”或“无”,这两种情况下系统不负责实体数据的读取,只能通过用户定义的接口获取数据集。
数据引擎:
当数据引擎模式为“使用已存在的对象”时,设置要使用的数据引擎对象。
主键:
设置实体物理表的主键字段名。
主键类型:
设置实体物理表主键字段的类型,可选“整数”或“GUID”或“字符串”。
行模式:
多行或单行。
一般主表设置为单行。
(二)新建实体属性
实体必须包含实体属性时才有效。
可以在UAP界面“表单”窗口中,右键点击实体对应的节点,选择“新建实体属性”菜单向实体添加实体属性:
实体属性通用属性:
类型:
该实体属性的类型。
描述:
对该实体属性的单体描述。
属性名称:
实体属性的名称。
默认值:
实体属性的默认值。
使用默认值:
用户未提供数据时,是否使用实体属性的默认值。
发布:
该实体属性是否已经发布。
常用条件:
该实体属性是否可以在过滤中作为常用条件使用。
区间条件:
该实体属性是否可以在过滤中作为区间条件使用。
值更新事件:
设置该实体属性值更新时需要处理的脚本列表。
基础资料类型字段共有三种类型的值更新事件:
“携带当前字段相关参照属性到指定列”、“计算定义公式的值到指定列”、“表达式为真/假时改变指定栏目编辑状态”;其余类型字段比基础资料类型字段缺少第一种类型的值更新事件。
1.携带当前字段相关参照属性到指定列
2.计算定义公式的值到指定列
3.表达式为真/假时改变指定栏目编辑状态
表单式为真\假时修改指定栏目的编辑状态
表单式为真\假时修改指定栏目的显示状态
表单式为真\假时修改指定功能状态
表单功能
实体功能
唯一约束:
是否检查该实体属性的值在整个表单范围内唯一。
文本对齐:
实体属性文本的显示位置。
显示文本:
实体属性的不同语言环境中显示的文本。
允许空值:
实体属性的值是否可以为空。
物理表:
实体属性对应物理字段的表名,即该实体属性所属实体的物理表。
字段:
实体属性对应的物理字段名。
除了支持以上通用属性外,不同类型的实体属性还具有不同的特性:
1.表单编号
表单编号只能出现的主表实体中,并且只能有一个表单编号类型的实体属性。
2.表单名称
表单名称类型的实体属性只能在档案类型的表单中使用,同表单编号一样,表单名称类型的实体属性只能出现主表实体中,并且只能出现一次。
3.整数和正整数
可否为0:
数值型的值是否可为0。
录入长度:
限制用户可录入数值的最多位数。
数据格式:
数值类型的显示格式。
最大值和最小值:
数据的有效范围。
正整数的最小值必须等于或大于0。
4.小数和正小数
可否为0:
数值型的值是否可为0。
录入长度:
限制用户可录入数值的最多位数。
数据格式:
数值类型的显示格式。
最大值和最小值:
数据的有效范围。
正小数的最小值必须等于或大于0。
小数位数:
数据保留的小数位数。
5.文本
多行输入:
运行时是否支持录入多行文本。
最大长度:
最多可录入的文本长度。
6.日期和日期时间
日期类型运行短日期格式,即只包含年月日。
日期时间类型包含年月日和时分秒。
7.枚举
枚举类型的实体属性需要设置枚举值列表,枚举值的显示值为在界面显示的文本,保存值为实际保存到数据库的数据,如枚举类型的实体属性“销售类型”的枚举值可设置为如下图所示:
U872中枚举字段支持选择“枚举模式”:
使用已存在枚举、新创建枚举。
选择“使用已存在枚举”后,需要为“枚举类型”选择一个U8系统中现有的枚举中的一个。
8.基础资料
基础资料类型的值来自指定参照档案的对照值。
参照对象:
设置基础资料类型实体属性的参照档案对象,可以从U8档案列表中选择,包含UAP中定义为档案类型的表单。
参照显示值:
该属性是设置当前就“基础资料”字段在运行时的文本框里显示参照的那个字段的值。
如上面的“参照对象”属性选择的存货档案,如果不设参照显示值,则运行时默认显示为存货编码,如果将“参照显示值”属性设置为存货档案的“存货”名称,运行是该字段就会显示为存货的名称。
选择方式:
设置在运行时的对照选择方式。
自动校验:
是否对录入的值进入检验以确定数据是否来自指定的参照对象。
选择“否”时允许用户录入参照对象中不存在的值。
9.基础资料属性
基础资料属性类型的实体属性必须和基础资料类型的实体属性结合使用。
参照属性:
设置基础资料属性类型实体属性要绑定的基础资料类型实体属性,并指定关联的参照字段。
当基础资料类型的实体属性值变化时,基础资料属性类型的实体属性值随之改变。
10.数量、价格和金额
数量、价格和金额类型的实体属性实质上为小数类型,设置等同于小数类型的实体属性。
11.复选框
特殊类型的整数值,运行时显示为复选框,保存的数据为0(未选择)或1(选择)。
12.制单人
当前单据的作者,一般设为登录用户。
13.制单日期和修改日期
制单日期保存当前表单生成的日期,修改日期保存表单最后一次修改的日期。
这两种类型的实体属性实质上为日期时间类型,设置等同于日期时间类型的实体属性。
五、建立表单布局
在完成实体的设计后,可以设计表单布局,UAP支持一个表单多个布局视图,用户可根据自己的使用习惯选择一种布局视图。
布局视图的设计与普通window界面的布局设计基本一致。
六、行为对象开发
行为对象开发是指增加表单或列表的功能按钮,除了UAP系统自带的功能按钮外,还可以增加按钮,这些增加的功能按钮是UAP表单开发的基础。
UAP提供了多种增加功能的途径,首先通过设计界面的树形菜单中的“功能”节点下的表单功能和列表功能的“功能管理”(图表2)添加功能按钮,这些功能按钮最终在运行时会被加载到U8产品的门户上;其次可以为每个表单实体添加功能按钮(图表3),为实体添加完成这些功能按钮后,还需要在布局视图上为该表单实体的“功能”属性设置使用这些功能(图表4),这些功能按钮最终在运行时会被加载到该实体的工具栏按钮上。
图表2图表3图表4
图表5
增加功能按钮时,很多工作都可以通过上图(图5)的设计界面完成,开发人员关心的仅仅是表单开发业务逻辑的实现。
这些按钮的作用主要是通过在运行时对模型对象中数据的修改以及最终将修改的数据持久化来完成的。
UAP表单开发分为表单开发和列表开发两种。
因此对应了两种不同的开发类型定义了两种不同的访问模型对象数据的接口。
(一)表单开发
表单开发访问模型对象的接口IReceipt,该接口被定义在中,所以在做表单开发前,你需要为新建的表单开发项目添加的引用。
表单开发又可细分为表单功能开发和表单实体功能开发,每个不同部分的开发又都分为UAP已有按钮的功能修改开发和新增按钮的功能开发。
目前为止,只要是表单开发,只需要实现上述接口即可。
在实现IReceipt接口后,在实现类中会继承以下这些方法:
et登录对象
et中调用U8中API的方法,其次需要知道有那些API可以使用,各个API方法的参数和返回值代表的意义,以及根据API的参数和返回值确定你的表单开发过程的业务流程等。
Net中如何调用U8中的API
参照U8API资源管理器中为每个已有的API生成的调用代码示例
示例
Businessb=["SaleVouche_0001_E001"]asBusiness;
if["iswfcontrolled"].Value=="1")
returnnull;
DataSet
dom=(ds,;
U8EnvContextenvContext=newU8EnvContext();
=;
("VoucherType",12);
U8ApiAddressmyApiAddress=newU8ApiAddress("U8API/SaleOrder/Audit");
U8ApiBrokerbroker=newU8ApiBroker(myApiAddress,envContext);
("domHead",dom);
if==
{
et类。
该类被定义在dll中,所以在列表开发前,你需要为新建的表单开发项目添加dll的引用。
你需要做的就是重写该类中的一个方法:
BasePluginUIEvent,重写基类中的方法即可。
示例一列表门户按钮二次开发
双击查看代码
示例二生单二次开发列表部分
publicclassBasePluginUIEventBaseUIEventHandler
{
......."+tempLogin=newLoginInfo,,,,refscriptSql,refselectCountSql);
using(SqlConnectionconn=newSqlConnection)
{
();
if
{
SqlDataAdapteradapter=newSqlDataAdapter(scriptSql,conn);
-1)*,,"temp");
}
else
{
SqlDataAdapteradapter=newSqlDataAdapter(scriptSql,conn);
;
}
SqlDataAdapteradapter1=newSqlDataAdapter(selectCountSql,conn);
;
}
}
IMakeReceipt,该接口是生单二次开发的基础接口。
被定义在中,所以在生单二次开发前,你需要为新建的表单开发项目添加的引用。
然后根据你的业务需要实现接口IMakeReceipt接口中的方法:
oString();
(2)封装过滤条件封装过滤条件涉及到一个过滤窗口是否显示的问题。
如果过滤窗口显示,我们可以通过过滤窗口为过滤查询赋值;如果要求过滤窗口不显示,并且需要设置查询条件,此时只能是先通过代码封装查询过滤条件,然后再传入打开报表的方法。
sSingleItem==true)
{
reftemp2).varValue=filterValue1;
}
else
{
reftemp2).varValue=filterValue1;
reftemp2).varValue2=filterValue2;
}
FGeneralListMeta类,实例化UFGeneralListMeta时一般需要的参数为数据源、过滤条件、栏目、用户自定义事件等。
数据源:
类:
.DataAccessMeta
实例化该类时需要两个参数newDataAccessMeta("BizDAE",erQuerySetting),第一个参数目前可支持两种类型分别为:
"BizDAE","SqlQuery";第二个参数为对应第一个参数的用xml描述的数据源详细信息。
如果第一个参数为"BizDAE",则xml结构为:
;如果第一个参数为"SqlQuery",则xml结构为:
select部分
from部分
where部分
order部分
group部分
having部分
过滤条件:
类:
.FilterMeta
实例化该类newFilterMeta("SA[__]16",filterSet)需要两个参数,第一个参数为本次查询需要的过滤条件编号ID,第二个为不显示过滤窗口时传入默认的过滤条件,其为xml结构的字符串,默认过滤条件的组织样式如下格式要求:
1、过滤列的名称必须在该处列表过滤条件所有可选的字段中。
2、操作符operator1为正常的Sql表到式中的where条件操作符。
like等操作时需要自己添加必要的"%"等
3、区间条件时需要最终的格式为="val1="区间条件时值"operator2="<="val2="区间条件时值"/>。
当然也可以将一个区间条件项分为两个条件项
="val1="区间条件时值"operator2="<="val2="区间条件时值"/>
栏目:
类:
.ColumnMeta
实例化该类newColumnMeta("SaleVoucher")需要一个参数,该参数为在UAP的栏目设计器中对应栏目的编号ID。
用户自定义事件:
该参数为当表单开发人员对查询后的列表有自定义按钮事件或其他操作时使用,该参数为实现基类BaseUIEventHandler的子类的完整的命名路径。
至此使用上述几个参数可以实例化UFGeneralListMeta类的一个对象,然后再使用该对象实例化UFGeneralListService类的对象,就可以得到UAP列表。
如果想从该列表中某一行数据穿透到该条数据对应的表单中,需要在实例化UFGeneralListMeta类的对象时做一个额外的工作。
就是为UFGeneralListMeta类的对象的ExtendInfo属性赋值,该属性值为xml格式的字符串类型。
其格式为:
UAP表单为0,U8表单为1"instance="该参数含义待定"/>。
示例
(二)用户自定义控件开发
说明
UAP表单开发支持在表单视图中添加用户自定义控件,并将该自定义控件与该表单中的某一个表单实体模型关联,根据用户的实际需求,对实体模型中数据做更加丰富的展示,或者通过对自定义控件上展示的数据的修改影响实体模型的数据。
IRecepit接口中的方法
09a4c1c2c
cSOCodeorSO_SODetails.cSOCode=null
添加基础属性(来自物理表列的属性)
添加完毕基础属性显示如下:
添加计算属性
添加完毕,计算属性显示如下:
添加枚举属性:
注意其中的枚举类型来自于UFMeta中注册的枚举类型,枚举值表以及枚举值列是设置保存枚举类型ID所对应的列,构建SQL的时候会去该列的值与所有的枚举值进行匹配比较,并取出对应得枚举类型名称
在实体添加完毕后,点击“确定”按钮,在主窗体中显示出新增加的实体:
业务对象
修改业务对象基础信息
添加功能
添加实体关系查询
实体关系查询设置窗体
添加查询涉及的实体
如果该查询设计多个实体,可以设置实体与实体之间的关系
其中也可以进行实体关系自定义设置,参考实体中物理表关系设置部分
添加查询结果列(Select)
修改列名称以及描述信息
添加计算列
其中的表达式使用方法参考《备注1》
添加查询条件(Where)
添加组内查询条件(Having)
添加方法同添加查询条件
添加排序(Sort)
添加分组(Group)
添加完毕后再业务对象窗体显示新增加的实体关系查询
添加SQL查询
SQL查询又分为两种,分别为SQL脚本以及储存过程查询,其中的存储过程查询设置如下所示:
如果为SQL脚本查询,则按照下面的方式分别设置各个部分的SQL脚本:
设置Select部分
设置Where部分
其它各个部分的设置类同
业务对象信息设置完毕后,点击“确定”按钮,则在主窗体中显示出新增加的业务对象信息
业务对象配置完毕,可以使用工具测试该业务对象配置信息是否正确
查询完毕,可以在查询结果栏中查看当前查询过程中的日志信息,其中可以看出每个步骤地耗时,动态产生的SQL脚本信息等
备注:
1、在BizDAE中所有的SQL表达式(如计算列表达式、查询条件,实体计算属性,运行时动态设置的SQL脚本等)如果要使用物理表列或者实体属性必须按照下面方式使用:
#P[物理表别名.列名称]:
在实体设置中使用物理表列方法
#P[实体别名.属性名称]:
在查询中使用实体属性方法
#FN[查询结果列名称]:
在查询中使用查询结果列方法(不推荐使用)
应用技巧:
在配置完业务对象后应该使用测试工具检验该配置信息是否正确,如果出现问题可以从日志中检验原因
七、设置过滤条件
功能介绍:
过滤设计器是通用控件,主要用于报表、单据列表、表单等过滤条件的设置。
有丰富的类型,可供设置过滤条件时选择,还可以将过滤条件设置为区间条件或多选条件,可以为过滤条件赋默认值,同时支持将过滤条件分组显示。
使用说明:
A.过滤设计器主窗口
界面说明:
是否支持高级条件:
选此项后,在运行时过滤窗口中会出现“高级条件”页签,用于用户自由选择过滤条件的组合。
是否显示汇总选择:
选此项后,将在运行时窗口的最下端显示“查看汇总信息”复选框。
规则组件:
此项定义由过滤控件回调的规则组件类。
是否取消二次开发:
此复选项只有在以“U870”项目进入