Activiti UI解析

1. Activiti控制台UI概述

Activiti控制台使用vaadin框架实现页面布局,在vaadin自带组件的基础上实现自定义组件。

Activiti Explorer后台代码位于org.activiti.editor.ui及org.activiti.explorer.*包下。


2. Activiti控制台UI

2.1登录页面

登录页面为VAADIN/themes/netflow/layouts/login.html

表单控件由后台代码生成后填充到login.html的

中。


2.2控制台页面

页面由顶部的Header、左边的sidebar、右边的整个maincontent及底部的Footer组成

Header:水平布局,对应页面实现类:org.activiti.explorer.ui.MainWindow—>org.activiti.explorer.ui.mainlayout.MainLayout(initTopMenuBar方法)

Sidebar:垂直布局,对应页面实现类:org.activiti.explorer.ui.MainWindow—>org.activiti.explorer.ui.mainlayout.MainLayout(initSideMenuBar方法)

Maincontent:网格布局,点击左侧sidebar中的两级导航栏对应的页面会显示在maincontent区域。下面列举了sidebar两级导航栏所对应的页面实现类:

任务(org.activiti.explorer.ui.task.TaskPage)

    待办任务   org.activiti.explorer.ui.task.InboxPage

    我的任务   org.activiti.explorer.ui.task.TasksPage

    队列   org.activiti.explorer.ui.task.QueuedPage

    受邀   org.activiti.explorer.ui.task.InvolvedPage

    已归档   org.activiti.explorer.ui.task.ArchivedPage

流程(org.activiti.explorer.ui.process.ProcessInstancePage)

    我的流程   org.activiti.explorer.ui.process.MyProcessInstancesPage

    已部署流程定义   org.activiti.explorer.ui.process.ProcessDefinitionPage

    流程设计工作区   org.activiti.editor.ui.EditorProcessDefinitionPage

报表(org.activiti.explorer.ui.AbstractTablePage)

    生成报表   org.activiti.explorer.ui.reports.RunReportsPage

    已保存报表   org.activiti.explorer.ui.reports.SavedReportsPage

管理(org.activiti.explorer.ui.management.ManagementPage)

    部署包   org.activiti.explorer.ui.management.deployment.DeploymentPage

    活动的流程   org.activiti.explorer.ui.management.processdefinition.ActiveProcessDefinitionPage

    挂起的流程   org.activiti.explorer.ui.management.processdefinition.SuspendedProcessDefinitionPage

    作业   org.activiti.explorer.ui.management.job.JobPage

    用户   org.activiti.explorer.ui.management.identity.UserPage

    组   org.activiti.explorer.ui.management.identity.GroupPage

    管理   org.activiti.explorer.ui.management.admin.AdministrationPage


以上页面实现类均继承了org.activiti.explorer.ui.AbstractPage类(抽象类,自定义组件),AbstractPage类定义了maincontent的网格布局和组件,而各实现类提供具体的实现。除了‘任务’页面是3×3的网格布局,其他页面是2×3的网格布局。

Footer:Label组件,对应页面实现类:org.activiti.explorer.ui.MainWindow—>org.activiti.explorer.ui.mainlayout.MainLayout(initFooter方法)

补充:Vaadin APP—>Vaadin Panel—>Vaadin Window—>Vaadin Layout—>Vaadin Component

XXXPage都继承AbstractTablePage类,而AbstractTablePage又继承AbstractPage类。

AbstractPage类用于设置中间内容区域的布局(网格)、菜单、搜索框及菜单下两列或三列的内容

AbstractTablePage类用于设置中间内容区域最左侧的列表,使用Table控件


3. Activiti流程设计器UI概述

activiti modeler是基于oryx(js插件)做的封装,拖拽效果使用jquery ui的Draggable,前后端使用AngularJS+SpringMVC。

activiti modeler后台代码位于org.activiti.rest.editor.main及org.activiti.rest.editor.model包下。


4. Activiti流程设计器UI(editor.html)

页面由上图的四个div组成。

顶部editor-header:每一项图标来源为webapp/editor-app/configuration/toolbar.js中定义的KISBPM.TOOLBAR_CONFIG.items。图标为字体图标。

左侧paletteHelpWrapper:数据来源为webapp/editor-app/stencil-controller.js中使用$http请求org.activiti.rest.editor.main.StencilsetRestResource的getStencilset()方法,该方法读取src/main/resources/stencilset.json的数据(用节点定义)。一级项箭头图标使用bootstrap的glyphicon字体图标,二级项图标使用editor-app/stencilsets/bpmn2.0/icons目录下的png图片。

stencilset.json文件中节点的定义:

"type" : "node",

"id" : "MailTask",

"title" : "邮件任务",--标题

"description" : "邮件任务", --描述

"view" : "\n", --svg的xml

"icon" : "activity/list/type.send.png",        --图标

"groups" : [ "任务" ], --归属的组

"propertyPackages" : [ "overrideidpackage" ],--属性

"hiddenPropertyPackages" : [ ],

"roles" : [ "Activity" ] --规则


右侧上方编辑区canvasHelpWrapper:svg图片,点击某个元素周围出现的小图标则使用的是editor-app/images/目录及editor-app/stencilsets/bpmn2.0/icons目录下的png图片。

右侧下方属性区propertiesHelpWrapper

1.标题和属性键值的改变由stencil-controller.js中的$scope.editor.registerOnEvent()方法触发,该方法监听右上方编辑区事件的改变。

2.属性值的显示是通过调用stencil-controller.js中的getPropertyTemplateUrl()或getPropertyReadModeTemplateUrl()或getPropertyWriteModeTemplateUrl()方法来获得ng-include所需嵌入的页面。

3.属性的名称配置在src/main/resources/stencilset.json

stencilset.json文件中属性的定义,对应左侧paletteHelpWrapper使用的节点定义中指定的propertyPackages

"propertyPackages" : [ {

    "name" : "process_idpackage",

    "properties" : [ {

        "id" : "name",      ---id

        "type" : "String",  --类型,在赋值的时候会根据类型展示各种输入框,根据properties.js

        "title" : "名称",  --显示的标题

        "value" : "",      --值

        "description" : "BPMN元素的描述性名称.", --描述

        "category":"property", --分类,空的话位popular

        "popular" : true,         --是否显示

        "refToView" : "text_name" --触发svg里面的效果

    }]


5. Activiti Bug

使用jdk8时,定义report流程的xml中importPackage无法识别,使用jdk正常使用。

activiti-modeler BUG修复


6.Activiti身份认证

activiti启动流程时通过 Authentication.getAuthenticatedUserId();获得流程启动者。


7. 参考链接

Activiti Explorer源码解析

activiti-modeler工作流设计器代码分析1

activiti-modeler工作流设计器代码分析2

Activiti explorer使用的Vaadin UI框架

你可能感兴趣的:(Activiti UI解析)