1、2.支持业务模型的一个实体对应多个视图,一个视图只能对应一个业务实体。3.支持一个业务实体属性对应多个视图控件。4.丰富的客户端展现:多子表、分组、页签。5.表单和业务模型是一对一的关系。6.与门户集成。7.视图在表单上支持自由布局。8.业务逻辑层(M)、界面层(V)、业务逻辑和界面之间的控制层(C)互相分离。9.支持运行时多语。10.支持用户自定义控件。三、集成的开发工具及案例1、开发工具概述a)用户通过开发工具实现单据的通用性定制,如单据名称,主子表名称,主子表列的名称、类型等属性,单据的格式设置等。b)集成开发环境中BS单据和CS单据的开发步骤和过程都是相同的。2、操作步骤1、UAP登录
2、2、建立项目3、建立表单4、建立实体关系5、增加实体属性6、设计单据布局7、单据发布8、在U8中显示表单四、二次开发接口说明4.1开发接口概述 在集成开发环境中已经可以实现自定义单据和档案的增、删、改、查等通用操作,但更加个性化的操作和业务逻辑,就需要通过代码调用接口,可以在下面操作的接口中实现。4.1二次开发流程1)安装Microsoft Visual Studio 2)创建一个 C# 类库(.dll)项目 3)为项目添加引用: UFIDA.U8.Framework.ErrorUFIDA.U8.UAP.UI.Runtime.Model UFIDA.U8.UAP.UI.Runtime.Comm
3、on4)添加一个类,并实现接口IReceipt public class PurchaseOrder : IReceipt5)实现业务逻辑 6)编译工程,得到一个dll 7)在UAP设计时中注册dll。4.2 BS单据接口说明 / / 在进入单元格编辑状态之前判断单元格是否可编辑/summaryparam name=para单元格信息businessObject所属业务对象voucherObject所属表单对象是否可编辑, true:可编辑, false:不可编辑 bool CellEditing(CellSelectEventArgs para, BusinessProxy business
4、Object, VoucherProxy voucherObject); / 值更新之前的接口,对值的合法性检查在这里进行Cell的值变动参数是否允许更新单元格的值,false-不允许更新,将保持原值 bool CellChanging(CellChangeEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 值更新之后的接口,对值的后续处理(如对其他Cell值的变更)在这里进行 void CellChanged(CellChangeEventArgs para, BusinessProxy b
5、usinessObject, VoucherProxy voucherObject); / 增加行之前的接口,对行的合法性检查在这里进行新增的行参数是否允许增加新行,false-不允许增加新的行 bool RowAdding(RowChangeEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 增加行之后的接口,对新增行的后续处理在这里进行 void RowAdded(RowChangeEventArgs para, BusinessProxy businessObject, VoucherP
6、roxy voucherObject); / 复制行之前的接口,对行的合法性检查在这里进行复制的行参数 bool RowCopying(RowChangeEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 复制行之后的接口,对复制行的后续处理在这里进行 void RowCopyed(RowChangeEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 删除行之前的接口,对行的合法性检查在这里进
7、行RowChangeEventArgs类型,要删除的行参数是否允许删除这些行,false-不允许删除这些行 bool RowsDeleting(RowChangeEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 删除行之后的接口,对删除行的后续处理在这里进行 void RowsDeleted(RowChangeEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 观察者视图工具条按钮单击事件的
8、接口被单击的按钮参数true表示实现了相应按钮的方法;false表示没有实现相应按钮的方法。 bool ClickToolBarButton(ToolBarActionEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 设置为当前行之前的接口被选择的行参数是否允许选择新行,false-不允许选择新行,当前行不发生改变 bool RowSelecting(RowSelectEventArgs para, BusinessProxy businessObject, VoucherProxy vou
9、cherObject); / 设置为当前行之后的接口 void RowSelected(RowSelectEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 业务数据合法性检查之前的接口检查是否通过,false-不通过 bool DataChecking(BusinessProxy businessObject, VoucherProxy voucherObject); / 业务数据合法性检查之后的接口 void DataChecked(BusinessProxy businessObject
10、, VoucherProxy voucherObject); / 参照打开前的接口view观察者视图接口(IEditWindow)对象ReferOpenEventArgs参照信息是否允许参照,false-不允许参照,将不弹出参照界面,参照操作终止 bool ReferOpening(ReferOpenEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 参照返回(关闭)后的接口ReferCloseEventArgs参照信息 void ReferClosed(ReferCloseEventArgs
11、 para, BusinessProxy businessObject, VoucherProxy voucherObject); / 表单状态更新之前的接口状态的变动参数是否允许改变状态 false-不允许改变状态,表单仍将处于当前状态 bool StateChanging(VoucherStateChangeEventArgs para, VoucherProxy voucherObject); / 表单状态更新之后的接口 void StateChanged(VoucherStateChangeEventArgs para, VoucherProxy voucherObject); / 行
12、选择框的值发生变化之前的接口行选择框信息是否可改变, true:值可变化, false:值不可变化 bool RowChecking(RowCheckEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 行选择框的值发生变化之后的接口 void RowChecked(RowCheckEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); /bool UnRowChecking(RowCheckEvent
13、Args para, BusinessProxy businessObject, VoucherProxy voucherObject); /void UnRowChecked(RowCheckEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 单据数据加载前接口当前要加载的数据模型对象 bool ReceiptDataLoading(ReceiptDataLoadingArgs para, VoucherProxy voucherObject); / 单据数据加载后接口 void Recei
14、ptDataLoaded(VoucherProxy voucherObject); / 单据关闭前接口单据模型对象 bool ReceiptUnLoading(VoucherProxy voucherObject); / 单据关闭后接口 void ReceiptUnLoaded(VoucherProxy voucherObject); / 单元格被选择后接口单元格对象当前实体 void CellSelected(CellSelectEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 单元格双击
15、接口单元格参数对象 void CellDoubleClick(CellDoubleClickEventArgs para, BusinessProxy businessObject, VoucherProxy voucherObject); / 门户按钮点击触发ButtonArgs IButtonEventHandler GetButtonEventHandler(VoucherButtonArgs ButtonArgs, VoucherProxy voucherObject); / 运行时表单加载之前调用的接口,可以处理表单加载之前的业务要求。loadingArgs bool ReceiptLoading(ReceiptLoadingArgs loadingArgs); / 运行时表单加载之后调用的接口,可以处理表单加载之后的业务要求。 void ReceiptLoaded(VoucherProxy voucherObject); / 创建用户自定义控件接口,开发人员可以在这里创建用户自定义控件。运行时会把这个控件加载到布局视图中。(871版本新增)ID布局视图中指定的自定义控件“控件ID”用户自定义控件对象 object CreateControl(BusinessProxy businessObject, V