NCV6功能建模技术红皮书Word文档下载推荐.docx
《NCV6功能建模技术红皮书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《NCV6功能建模技术红皮书Word文档下载推荐.docx(68页珍藏版)》请在冰豆网上搜索。
![NCV6功能建模技术红皮书Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/6/39e9fae6-2926-4a7c-a1f0-f1437cf26da3/39e9fae6-2926-4a7c-a1f0-f1437cf26da31.gif)
1.功能说明23
2.基本类图23
3.界面操作25
第九章使用方法介绍26
1.模块及组件的管理和维护26
2.开发向导的使用30
3.快速开发向导36
4.实体的处理38
5.模板的管理和维护(单据、查询、打印)39
6.管控模式管理39
7.业务对象注册40
8.编码规则管理41
9.流程平台的管理和维护43
10.参照的创建49
11.UI组装51
12.节点的发布51
第十章对集成开发工具的扩展53
1.对整个工具的扩展53
2.对界面类型的扩展60
3.对生成代码策略的扩展62
4.对界面元素的扩展64
第十一章对数据的管理66
1.导出数据库脚本66
2.同步数据66
第一章总体介绍
NC功能建模在NC业务建模之后进行,主要是以业务建模完成的业务组件为中心和主线定制业务组件的功能及UI界面展现。
NC功能建模提供了集成的开发环境,该开发环境中一些功能是对NCUAP原有功能模块的修改再组织,有些功能是经过重新开发的。
这些功能都通过一个统一的平台框架进行组织和进行相互的交互支持。
整个界面是基于UIFactoryIIFramework的,实质上是UIFactoryII框架的一个应用,UIFactoryIIFramework定义了一套接口并给出了默认实现。
这套接口定义了对编辑器、视图、菜单、工具栏以及他们之间进行交互支持的API,菜单和工具栏的设置采用Action实现。
在UI框架的设计中,将容器、管理器进行分离,只有容器部分依赖于UI实现(SWING/SWT),因此可以做到比较方便的技术迁移。
模型设计集成开发环境核心API是基于该UI框架的一套具体应用,它在UI框架的基础上设置自己应用需要的控件信息,建立其自身维护的对框架暴露事件的监听关系。
它结合集成开发环境的具体应用提供对资源树及其响应事件的配置实现,并提供了Editor编辑数据与资源树呈现的一致性维护。
在集成开发环境平台之上,是对集成开发平台资源树的各个扩展实现。
比如模板和单据类型对资源树的扩展,作为本集成开发平台内置的UI设计及节点发布的功能也作为资源树的扩展进行实现。
下面章节将进行详细介绍。
第二章UI框架介绍
1.功能说明
此套核心API定义了UI中用到的菜单、工具栏、编辑器、视图的创建、管理维护以及他们之间的事件交互机制。
实际上是对UIFactoryII的扩展。
整个核心是一个由UIFactoryII解析的spring配置文件:
nc/ui/framework/entry/UAPDEConfigFile.xml。
在核心框架中,包含两大类对象:
资源控件和编辑器。
其中编辑器是主要的操作界面,可以进行资源管理维护以及UI界面组装等功能,是整个框架中的主要编辑控件,默认情况下,编辑器是需要实现nc.ui.framework.UIFrameworkEditor的;
资源控件是编辑器的容器,它提供的功能是对外提供编辑器和框架打开该编辑器时,菜单栏和工具栏应显示的按钮,资源控件必须是抽象类nc.ui.framework.UIFrameworkResComponent的扩展,而nc.ui.framework.UIFrameworkResComponent实现的接口正是UIFactoryII下的nc.ui.uif2.framework.IResComponent。
核心框架中提供了编辑器和资源控件及管理器,使用者可以利用该编辑器接口实现自己的编辑器控件,可以使用该框架进行管理维护。
该框架不进行任何设置而运行,会出现一个菜单栏、工具栏为空,中间是编辑器区域和左右下分别三个视图区域的UI框架,可以对界面的呈现进行后期设置。
使用者可以在各个区域任意添加自定义控件,也可以根据接口规范定义添加自己实现的编辑器和视图控件。
2.基本类图
下面分别介绍UI框架的主要API设计:
图1UI框架类图
上部是UIFactoryII下的接口,下部是UIFramework,由图可见,UIFramework事实上按照自身需要,对于UIFactoryII进行了扩展,对于UIFactoryII的实现原理,参见UIFactoryII框架的红皮书。
IUAPDEResComponentNavigator事实上是对于多个UIFrameworkEditor进行管理,它维护一个IUAPDEComponentPool,IUAPDEComponentPool维护的是当前运行环境所有的编辑器,在需要打开或者关闭一个编辑器时,分别会向组件池中放入或者移除编辑器。
图2菜单栏工具栏按钮显示监听类图
图中没有画出来,事实上有两个FiltedActionContributorListener,他们分别维护IMenubarManager和IToolbarManager,在下面的UIFrameworkEditor状态变化时,StandAloneToftPanelActionContainer都会发送事件,FiltedActionContributorListener监听器接受到事件,对菜单栏和工具栏的按钮进行重新设置。
3.使用方式
通过调用UAPDeEntry.startupOneUAPDE()方法来启动一个集成开发环境,需要传入UAPDERuntimeInfo这个对象,可以创建这个对象,然后设置一些信息,启动一个集成开发环境。
UAPDERuntimeInfo各字段意义:
uapdeUIAssembleConfigFilePath:
界面组装的配置文件,即由UIFactoryII解析的spring配置文件路径。
uapdeConfigFilePath:
集成开发环境配置文件,即资源树需要显示的内容配置文件。
codegenConfigFilePath:
代码生成策略的配置文件路径。
uiextConfigFilePath:
页面类型配置文件路径。
uiitemConfigFilePath:
页面元素配置文件路径。
系统已经提供了默认的配置文件,在调用UAPDeEntry.startupOneUAPDE()无参的方法时,可以启动一个具有默认配置文件的集成开发环境。
关于这些配置文件的信息,将在集成开发环境的扩展时详细介绍。
框架的使用主要包括两方面的内容,一是框架控件内容的创建,另一个是建立各部分的可能存在的监听关系。
该UI框架在没有任何特殊设置时,显示的界面如下所示:
图4集成开发环境空壳
框架主界面分为三个视图导航区、一个编辑区、下面的状态栏区还有上面的菜单栏共工具栏区域。
左右两个视图导航区可以由用户添加设置面板内容,下部的控制台作为系统的输出显示使用。
菜单栏、工具栏有几个内置的菜单和按钮,每次打开一个资源控件时,显示资源容器提供的按钮。
框架提供FrameworkRuntimeEnv类提供框架运行时对象的获取,可以通过它获取每个面板对象以及菜单、工具栏、状态栏等信息。
FrameworkRuntimeEnv可以通过Utils.getUIFrameworkRuntimeEnv(id)方法获取,其中参数是集成开发环境的id,因为一个NC系统中可能运行多个集成开发环境,通过id来区分它们。
左右两个导航区域可以通过FrameworkRuntimeEnv.getExplorePnl()和FrameworkRuntimeEnv.getResourcePnl()方法获得。
框架右下角的控制台可以由FrameworkRuntimeEnv.getConsoleView,通过获取得到的ConsoleView的append方法,可以按不同需要设置不同颜色,有无时间信息的控制台信息。
框架下部的状态栏可以通过FrameworkRuntimeEnv.getStatePanel()方法获取。
该面板的setNormalStateInfo(Strings)可以设置普通的状态信息,位于状态栏的顶端,即”就绪”所在的位置。
在普通状态栏信息后面,有一个定制状态栏信息的预留地方,这里可以设置自定义状态栏面板,通过createCustomePanel()方法完成,调用此方法后将产生一个面板,以及面板上的两个分割栏,这两个分割栏可以分别设置状态信息,通过调用方法setCustomStateInfo(Strings1,Strings2)方法完成状态信息的设置。
用户也可以自己设置该面板的布局及内容信息。
创建Editor可以通过实现UIFrameworkEditor接口实现,还需实现一个UIFrameworkResComponent,在getResComponent中返回实现UIFrameworkEditor的editor,在getActions方法中返回需要显示在菜单栏和工具栏的按钮。
这样通过调用FrameworkRuntimeEnv.getResComponentNavigator的openComponent,即可在框架中打开一个新建的editor了。
第三章功能建模框架的物理结构
集成开发平台是以上框架的一个应用,该应用是以元数据业务组件为对象和起点,对其资源进行创建、管理和维护。
所涉及的资源、UI以及节点都是针对业务组件设计的。
图5集成开发平台物理模型设计
“业务组件信息表”用于存储业务组件的相关描述信息,它与元数据中的组件对应,表中存储了“元数据组件ID”字段,此字段与元数据组件ID对应。
在业务组件导航树加载时通过元数据服务获取组件及其父子关系,以及组件下面存在的业务组件,此时与本工具表“业务组件信息表”进行比对,如果开发环境中不存在相应记录,则建立记录并存储在数据中,元数据导航树的树形结构以实际的元数据组件为准。
“自定义按钮信息表”用于存储自定义按钮信息,以业务组件为单位对其进行维护。
“组件的资源信息表”用于存储该组件所拥有的所有资源信息,现在主要包括模版和单据类型信息,它与下一节介绍的资源配置文件配置,通过资源类型ID以及业务组件对真实资源的标识和显示值进行存储(资源标识可以是PK,也可以是可以唯一定位资源的标识;
显示值用于在组件资源树中显示使用,为了不需要在显示组件资源树时再进行查询才这样设计)。
“UI基本信息表”用于存储业务组件所拥有的UI的基本描述信息。
其中包括UI的类别(普通Toftpane还是UI工厂,以后可以扩展)等信息。
“UI拥有的资源信息”是一个中间关联表,用于存储UI具有的被引用资源(非按钮等由本工具维护的资源)。
“UI拥有的按钮信息”用于存储UI装配时的按钮设置。
“UI工厂类型UI描述信息”,此表用于补充描述UI工厂类型UI的特征信息。
“UI工厂拥有树形结构信息表”,此表用于针对树形单据的树形控件的配置描述。
“节点UI关联表”,此表建立UI与业务节点的关联关系,用于节点发布使用。
“参照模型配置信息表”用于描述参照的一些信息,比如参照的类名,是何种类型的参照等等。
“参照模型配置实体的属性信息表”用于描述参照对应的属性列表,比如某个参照显示哪些属性,等等。
“树表型参照模型配置树实体的属性信息”用于描述树表型参照左边分类树显示的字段信息。
以上这些表结构只是该平台基本的表结构,随着不断的功能完善,表的数量可能会不断增加。
第四章集成开发环境核心API实现
此部分代码是UI框架的一个使用,提供了以业务组件为对象,对其资源、UI、节点。
进行创建、管理和维护的功能平台。
该部分应用提供了两个导航树形结构。
左边的树为元数据业务组件树,直接通过元数据的Service获取。
右边的导航树为业务组件资源树,也是主要的操作对象。
此树通过配置进行创建骨架,通过数据库进行存储资源项目信息,就存放在上面介绍的“业务组件资源表”中。
由本工具进行维护和管理的资源是可以扩展的。
管理资源的类别以及资源之间的主子关系是通过配置文件进行配置的。
图6集成开发环境整体界面构成
配置文件中配置的是资源树的骨架结构,真正的资源引用存储在“组件资源信息表”中。
骨架结构直接对应着资源树的树形结构,在配置文件中可以定义该节点的事件监听。
现在暴露的事件有双击事件和右键事件。
<
resourceid="
billtemplate"
label="
单据模板"
>
<
nodeRightClicknodeRightClickFilter="
"
nodeRightClickListener="
nc.ui.uapde.template.bill.BillRightClickListener"
<
rightMenuid="
new"
新建"
imagePath="
uapde/add.gif"
/>
/nodeRightClick>
resourceItemid="
billtemplateItem"
nodeclickListener="
nodeDbclickListener="
nc.ui.uapde.template.bill.BillItemDBClickListener"
nodeRightClicknodeRightClickListener="
nc.ui.uapde.template.bill.BillItemRightClickListener"
<
open"
打开"
uapde/open.gif"
del"
删除"
uapde/delete.gif"
preview_card"
预览卡片"
uapde/preview_card.gif"
preview_list"
预览列表"
uapde/preview_list.gif"
createPrint"
生成打印模板"
uapde/print.gif"
/resourceItem>
<
/resource>
上面是配置文件片断。
它对应着资源树上的”模板”节点及其子节点”单据模板”节点。
其中<
resource>
标识直接可以通过配置文件建立的树节点,比如”模板”节点。
resourceItem>
节点代表的是被数据库存储数据的节点,这些节点的显示值是由用户约定的,比如不同的单据模板项的显示值。
这些节点在建立树形结构时会去查询数据库,获取该业务组件的所有的此类资源显示,其显示值即为”“组件的资源信息表”中的”显示信息”字段。
对资源节点事件的监听,通过配置实现。
其中,双击事件通过”nodeDbClickListener”树形进行设置,设置值是接口IResourceNodeDoubleClickListener的实现类的全类名。
右键通过
进行配置。
rightMenu>
配置所有可能的右键菜单,其中id是该菜单的标识,下面会用到,label是右键菜单的显示值。
nodeRightClickFilter属性设置接口:
IResourceNodeRightClickFilter的实现类全名称。
该接口会在右键点击资源节点时首先调用。
该Filter用于判断当前环境信息判断是否显示右键菜单以及显示哪些右键菜单。
nodeRightClickListener用于设置IResourceNodeRightClickListener接口的实现类全名称。
此接口会在点击右键菜单时调用,其中通过传递参数menuId说明当前点击的右键菜单ID。
在配置文件中,每个项目都有一个ID属性,该属性用于区别不同类型的资源。
在数据库”组件资源信息表”中存储的ID是全标识ID,即从资源顶层算起来的ID路径,比如单据模板的存储资源全标识ID是:
template.billtemplate.billtempateItem。
这样是为了避免资源存储重复,也是为了解决资源递归引用的问题,比如”单据类型”节点下的”子单据类型”就是一个递归引用的例子,这样情况下有一个算法来保证数据库中存储的子单据类型的唯一性识别。
图7uapde扩展API类图
注意,这里的每个接口的方法中都传入了frameworkID这个参数,这个就是集成开发环境的id,由于一个系统中可能有多个环境运行,因此需要用id来区分每个集成开发环境的实例,而在第二章中提到的通过Utils.getUIFrameworkRuntimeEnv(id)获取UIFrameworkRuntimeEnv,需要传入的正是这个id。
第五章数据模型与视图的一致性
在一个基于GUI界面的应用系统中,如何保证视图与数据模型的一致性是一个很重要的问题。
在本次开发的集成开发平台中,也涉及到数据模型与视图的同步问题。
在开发平台中,有两棵树形结构。
左边的业务组件导航树,它的数据是直接来自元数据系统的,根据模块与组件之间的包含关系及层次关系构造出树形结构。
由于此树形结构在界面呈现时构造出来,中间操作过程中不会涉及到此树形结构的编辑操作,因此树形结构不会涉及到同步的问题。
在界面右边的业务组件资源树,是一个复杂的结构。
它的数据会在开发运行过程中,得到编辑和维护,因此该树涉及到运行时的数据模型与视图的同步问题。
本平台数据模型与组件资源树的同步,主要采用观察者模式来实现。
本系统提供了一个统一的数据访问入口UAPDEDataAccessFacade类,在一个集成开发环境中,它是单例的,通过UAPDEDataAccessFacade.getInstance(frameworkID)获得一个集成开发环境对应的UAPDEDataAccessFacade实例。
同时它也是平台数据模型发生变化的源头。
当左侧的数据导航树选择节点发生变化时,右侧的资源树会发生响应,根据当前激活的元数据资源标识通过数据统一入口获取该业务组件的相关资源,该入口类提供前台缓存功能,提高重复访问的响应效率。
2.主要类图
图8数据模型与视图同步类图设计
从类图中可以发现,右侧的组件资源树对数据访问入口具有监听关系。
当数据访问入口的数据发生变化时,它会更新缓存数据、进行数据库数据更新并通知所有监听器,资源树是它其中一个观察者,资源树会根据数据的变化更新资源树的结构,使显示与当前的数据模型保持同步。
第六章UI组装
UI组装是一个构建界面的过程,在UIFactoryII框架中提供了很多模型,视图,动作按钮等等构建界面的元素,这些元素都被集成到了集成开发环境中,用户可以方便地使用这些界面元素,进行界面的设置。
图9ui组装界面设计区
图10ui组装模型驱动设计区
下面分区域进行介绍:
1.按钮设计区:
图10ui组装按钮设计区
此区域是进行页签级别按钮和节点级按钮的区域,在这里可以看到每个页签对应的按钮和节点级别的按钮。
2.界面设计区:
此区域是进行界面设置的,先从界面元素拖拽几个布局元素,将整个界面分成几个区域,再在界面元素区域建立视图元素,拖拽到界面设计区,即可展示出界面大约运行的效果。
3.界面元素区:
此区域显示的是各种界面的元素,包括用户创建的和框架本身内置的。
4.布局视图区:
此区域显示的是界面的层次结构,也就是说TangramLayout的布局结构。
5.属性设置区:
此区域进行各种视图元素的属性配置,这里分成了两个页签,其实本来是一体,只是动作按钮有其特殊性,故而重新开辟一个区域,除动作属性以外,模型元素,视图元素,模板元素等等的属性设置都在“属性设置“页签进行配置。
6.模型驱动区:
此区域进行模型与模型之间的驱动关系,比如模型1的状态或者数据变化后,模型2的数据要变化,则是模型1驱动模型2,在图中体现为自模型1开始有指向模型2的箭头。
每个界面可能都会加载一些初始数据,这个是由ModelDataManager驱动的。
界面设计体现迪米特法则与依赖倒置原则。
按照各个功能分块独立实现,最后组装。
各独立界面共享一份数据,即统一的数据结构UIF2DesignMode,并且,大部分区域的视图都实现了监听,当UIF2DesignMode模型里的数据发生变化时,通知各个视图,视图选择其关心的事件进行响应,执行相应操作。
UIF2DesignMode是一个统一的数据结构,包含三个其他的模型,这几个模型数据变化时,向UIF2DesignMode发送AppEvent,然后再由UIF2DesignMode统一向外发送UIF2ModelEvent,这是设计的初衷,然而由于模型驱动这一块用的是第三方框架,需要适应它的设置方式,所以比较特殊。
这里的类图核心是接口IPropItemsSet,由于各种界面元素的属性设置方式有所不同,因此设置一个接口IPropItemsSet,屏蔽各种界面元素设置方式的差异性。
由不同的界面元素按照自己的方式来进行设值和取值操作。
接口IPropItemsSet的方法主要有:
ObjectgetValue(PropertyItemprop);
//获取某个属性的值
booleansetValue(PropertyItemprop,Objecto);
//设置某属性的值
booleanisEditable(PropertyItemprop);
//判断某属性是否可编辑
/**
*获取当前属性编码所对应属性在外部控件中的显示值
*@paramcode
*@return
*/
Object[]getComValues(PropertyItemprop);
PropertyItem[]getItemProp();
//获取所有显示的属性值。
3.界面操作
简要说明操作的步骤:
1.确定界面展现形式后,从界面元素下布局元素中拖拽响应控件