DWF功能模型包括:应用功能创建、模块的创建和操作的创建,DWF功能模型具有如下的特点:
- 多应用通道设计,在最大限度的共享现有数据资产的同时,让用户工作更加专注自身工作。
- 多样化动作配置,可以实现弹窗,滑动,气泡,页签等不同类型的多样化交互效果。
- 功能切换和数据之间支持丰富的互动方式,并且让上下游信息得到有效复用。
前几讲中,我们对设备管理系统案例的数据创建了功能界面,现在,我们介绍如何通过功能模型将定制的界面组织起来。
1. 基本概念
1.1 功能模型
功能模型包括如下几部分:
- 应用(Application):应用代表独立完整的功能系统。一个正在运行的数为集成框架称为数为系统集成框架实例(DWF实例),包含独立的数据库、后端可调用的restful api,还有前端可访问的页面。而一个DWF开发实例可包含多个应用。用户可根据需要创建多个应用,如果一个用户具备多个应用权限,则可在不同应用之间切换。DWF初始安装时,自动创建一个默认应用,用于提供前端的初始界面。
- 模块(Module):应用的功能由模块来实现,每个模块代表应用前端的功能入口,模块可包含子模块,也可包含操作。
操作(Operation):DWF功能最小粒度的单位,每个操作对应特定的动作,如编辑、保存、删除等。操作的属性有英文名、中文名、图标等。
操作的分类:
- 全局操作(Global Operation):在任何表单和模块都可以使用。
- 模块操作(Model Operation):在模块中出现的操作,一般表现为菜单项。
- 实体类操作(Entity Operation):作用在实体类和实体类表单上的操作。
- 关联类操作(Relation Operation):作用在关联类和关联类表单上的操作;DWF系统中内置了2个基本操作:删除左对象、删除右对象。
基本操作
全局操作除了建模者自定义的全局操作,还包含系统内置的基本操作(未显示在全局操作列表)。
- 其中实体类表单中内置四个基本操作:新增、编辑、删除和刷新。
- 关联类表单中内置六个基本操作,除同实体类相同的四个基本操作外,因为关联类的特殊性,DWF还提供了删除左对象和删除右对象操作。
图-操作的分类
操作的含义:
- 操作的动作类型(Action Type):每个操作都有一个动作类型,在DWF功能模型中,操作动作类型的不同决定了操作激活时具体行为。
表-操作动作的含义
创建 | create | 表示操作激活时,以创建状态打开某个实体类/关联类表单。 |
级联创建 | next_create | 级联创建,单对象表单中级联创建其他类的对象。例如创建工单类对象时,同时创建工单-零件的关联类对象。 |
编辑 | edit | 表示操作激活时,以编辑状态打开某个实体类/关联类表单。 |
浏览 | visit | 表示操作激活时,以浏览状态打开某个实体类/关联类表单。 |
实现 | implement | 表示操作激活时,调用一个程序实现其对应的功能,可以是前端脚本、后端脚本、插件调用和存储过程。 |
链接 | url | 表示打开某个指定的网页,一般用于界面集成。 |
- 操作的表单(TargetForm):当选择操作的动作为创建、编辑、浏览时,DWF会按照对应的方式打开一个表单,这时需要指定一个具体的表单,因此在操作的配置界面里存在一个目标类和表单的设置。在操作配置界面,还可以选择用弹框的方式还是弹出页签的方式打开表单。
- 操作的过滤条件(Condition):当选择动作类型为创建、编辑、浏览时,可以输入一个过滤条件来确认是打开哪个或者哪些对象,这个查询条件遵循DWF内部查询条件语法,例如:and obj.state = '已创建';查询条件的概念是在DWF 2.0提出的,在DWF 3.0中推荐使用前处理脚本来限定被显示的对象。
- 前后处理脚本(PreScript / PostScript):当需要弹框向下一个即将被打开的表单传递数据或者查询条件的时候,可以通过前处理脚本完成参数传递。当弹框关闭,需要向上一级菜单返回结果时,可以使用后处理脚本完成工作。关于脚本的编写方法,将在培训的第三部分 DWF脚本开发中介绍。
操作表现形式:
根据操作的表现形式不同,可以分为一下几种形式:
- 功能菜单
- 按钮
- 事件
图-操作的表现形式
2.基本功能
功能模型处主要提供以下几个功能:
- 应用管理:功能应用系统、模块和模块操作的创建、维护。
- 全局操作:创建和维护可以作用到全局表单的操作。
- 实体类操作:提供删除实体类操作的入口。
- 关联类:提供删除关联类操作的入口。
3. 建模过程
根据培训案例及功能模型提供的基本功能,我们可以搭建一个设备管理应用,应用结构如下:
- 设备管理(AssetMgn)
- 设备列表(MultiAssets)
- 设备地图(LandingMap)
- 零部件管理(PartMgn)
- 零件列表(MultiParts)
- 产品结构(PartToPartTree)
- 工单管理(WorkOrderMgn)
- 工单列表(MultiWO)
图-设备管理系统预览
3.1 创建应用
DWF系统提供了一个默认应用,默认应用不可删除。建模者可以基于默认应用进行应用的基本设置。也可以点击页面的“新增应用”按钮后输入应用的英文名,显示名,上传LOGO,图标等必填项,实现新增应用。其他应用设置项含义解释如下:
- 首页地址:当进入应用以后,输入内容的URL完整地址。起始页增加了$user,$env关键字支持($user.token,$user.userId,$user.userName;$env.serverIp,$env.serverPort),解决认证问题。
起始页增加$user,$env关键字支持 - 起始操作:当进入应用后,默认直接打开的表单操作。格式为“模块英文名/该模块下操作英文名”。如果想要设置设备管理模块(AssetMgn)下的设备地图(LandingMap)为起始操作,需要在输入框中输入“AssetMgn/LangdingMap“。
- 皮肤:DWF提供简约白和深沉黑两种皮肤,默认为简约白。
- 布局:DWF提供上下布局和左右布局,默认为左右布局。
- 自定义样式:用于满足应用需要特殊样式,非必须上传项,文件格式为CSS。
- 自定义脚本:提供建模者拓展应用基本功能的入口。
根据上述介绍,大家可以尝试创建一个设备管理应用。
图-应用编辑框
3.2 创建模块与模块操作
3.2.1 创建模块
应用创建完成,接下来需要创建模块。模块是前端应用功能的入口。建模步骤如下:
- 点击新创建应用卡片右侧的“应用模块管理”按钮,进入应用模块管理页面;
- 点击”新增模块“按钮,输入模块英文名、显示名等必填项即可完成创建。
模块操作的步骤比较简单,大家可以根据功能树创建设备管理、零件管理和工单管理模块。
图-新增模块
3.2.2 创建模块操作
模块创建成功后,还需要为模块绑定操作,才能实现一个具体的功能。建模步骤如下:
- 点击上一步新增的模块右侧的“+”按钮,弹窗模块操作配置页面;
- 模块操作信息编辑弹窗同表单操作,根据该子菜单需要实现的业务,明确操作的动作、目标类及表单即可完成模块操作的创建。
大家可以根据功能树为不同功能模块绑定不同的模块操作。
图-新增模块操作
3.3 创建全局操作
全局操作也属于操作,只是作用的范围是全局。包括系统内置的四个基本操作新增、编辑、删除、刷新,以及关联类特有的删除左对象、删除右对象。用户还可以在功能模型-全局操作管理页面,新增全局操作。同模块操作,全局操作信息编辑页面同表单中的操作。根据业务功能,设置操作具体信息即可完成全局操作的创建。创建好的全局操作会出现在实体类表单、关联类表单的操作列表中,用户可以通过按钮或者控件事件绑定全局操作,实现具体功能。
图-新增全局操作
3.4 删除实体类操作
在实体类表单定制页面,只能对实体类操作(例如新增设备、编辑设备等)进行新增或者编辑,无法删除。功能模型-实体类操作提供了删除实体类操作的页面,建模者可以在该页面删除实体类操作。
图-删除实体类操作
3.5 删除关联类操作
同理,功能模型还提供了删除关联类操作的入口。
图-删除关联操作
4. 扩展内容:查询条件优先级
案例中,为了方便维修工程师找到自己的工单,可以在工单管理模块下新增“我的工单”模块操作,只显示当前登录的维修工程师负责的工单列表。我们可以利用前处理脚本向表单提供过滤条件,模块操作设置信息入下图。
图-表单过滤
前处理脚本代码参考如下:
var userId = this.store.state.user.userId; return { query: `and ( obj.engineerOid = '${userId}')` }
现在已经介绍了两种查询(过滤)条件:
- 控件本身设置的查询条件,如表格、单对象下拉框等
- 通过表单传递查询条件,如上面提到的“我的工单”案例
如果这两种情况同时存在,比如在访问我的工单中的列表时,我们对该列表本身还设置了一定的查询或排序条件,根据DWF查询条件优先级,此时的查询流程是:控件本身查询条件>外部查询条件。而如果控件和外部都没有设置任何查询条件,则默认全部查询。
5.小结
应用是指一个独立完整的功能系统。应用由模块和模块操作构成,模块操作相当于于应用左侧的功能菜单,模块是应用前端功能的入口,用于分类管理这些功能菜单。
操作是DWF功能最小粒度的单位。操作根据作用范围分类可分为全局操作、模块操作、实体类操作和关联类操作。
操作根据表现形式不同可分为按钮、功能菜单和事件。
6.附件