`
lisonghua2010
  • 浏览: 109338 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(一)

阅读更多

题外话:

       最近在忙公司的云项目空闲时间不是很多,所以很久没来更新,今天补上一篇!

回顾:

       前几篇介绍了一下设计器的界面和Draw2d基础知识,这篇讲解一下本设计器如何扩展Draw2d。

 

进入主题:

       先看一下扩展的类图:

 其中有颜色标注的类即是扩展类,其中Node、Port、InputPort、OutputPort是Draw2d提供的类,其余都是扩展类。

 这里重点介绍几个核心类以及相关重要的方法,如下:


上图中黄色部分负责生成Activiti流程文件中Task对应的XML片段,所以对于不同类型Task需要实现的方法,例如UserTask,代码如下:

 

draw2d.UserTask=function(configPropCallback){
	draw2d.Task.call(this,configPropCallback);
	this.performerType=null;
	this.dueDate=null;
	this.priority=null;
	this.formKey = null;
	this.expression=null;
	this.isUseExpression=null;
	this.assignee=null;
	this.candidateUsers=new draw2d.ArrayList();
	this.candidateGroups=new draw2d.ArrayList();
	this.formProperties=new draw2d.ArrayList();
	this.taskListeners=new draw2d.ArrayList();
	this.setTitle("User Task");
};
draw2d.UserTask.prototype=new draw2d.Task();
draw2d.UserTask.prototype.type="draw2d.UserTask";
draw2d.UserTask.newInstance=function(userTaskXMLNode){
	var task = new draw2d.UserTask();
	task.id=userTaskXMLNode.attr('id');
	task.taskId=userTaskXMLNode.attr('id');
	task.taskName=userTaskXMLNode.attr('name');
	task.setContent(userTaskXMLNode.attr('name'));
	return task;
};
draw2d.UserTask.prototype.getIconClassName = function(){
	return "user-task-icon";
};
draw2d.UserTask.prototype.getStartElementXML=function(){
	var xml='<userTask ';
	xml=xml+this.getGeneralXML();
	xml=xml+this.getPerformersXML();
	xml=xml+'>\n';
	return xml;
};
draw2d.UserTask.prototype.getEndElementXML=function(){
	var xml = '</userTask>\n';
	return xml;
};
draw2d.UserTask.prototype.getDocumentationXML=function(){
	if(this.documentation==null||this.documentation=='')return '';
	var xml='<documentation>';
	xml=xml+this.documentation;
	xml=xml+'</documentation>';
	return xml;
};
draw2d.UserTask.prototype.getPerformersXML=function(){
	var xml='';
	if(this.isUseExpression){
		if(this.expression!=null&&this.expression!=''){
			if(this.performerType=='assignee'){
				xml=xml+'activiti:assignee="'+this.expression+'" ';
			}else if(this.performerType=='candidateUsers'){
				xml=xml+'activiti:candidateUsers="'+this.expression+'" ';
			}else if(this.performerType=='candidateGroups'){
				xml=xml+'activiti:candidateGroups="'+this.expression+'" ';
			}
		}
	}else{
		if(this.performerType=='assignee'){
			if(this.assignee!=null&&this.assignee!='')
				xml=xml+this.assignee;
		}else if(this.performerType=='candidateUsers'){
			for(var i=0;i<this.candidateUsers.getSize();i++){
				var user = this.candidateUsers.get(i);
				xml=xml+user.sso+',';
			}
		}else if(this.performerType=='candidateGroups'){
			for(var i=0;i<this.candidateGroups.getSize();i++){
				var group = this.candidateGroups.get(i);
				xml=xml+group+',';
			}
		}
	}
	if(this.dueDate!=null&&this.dueDate!=''){
		xml=xml+'activiti:dueDate="'+this.dueDate+'" '
	}
	if(this.formKey != null && this.formKey != ""){
		xml=xml+'activiti:formKey="'+this.formKey+'" ';
	}
	if(this.priority!=null&&this.priority!=''){
		xml=xml+'activiti:priority="'+this.priority+'" '
	}
	
	return xml;
};
draw2d.UserTask.prototype.getExtensionElementsXML=function(){
	if(this.listeners.getSize()==0&&this.formProperties.getSize()==0)return '';
	var xml = '<extensionElements>\n';
	xml=xml+this.getFormPropertiesXML();
	xml=xml+this.getListenersXML();
	xml=xml+'</extensionElements>\n';
	return xml;
};
draw2d.UserTask.prototype.getListenersXML=function(){
	var xml = draw2d.Task.prototype.getListenersXML.call(this);
	for(var i=0;i<this.taskListeners.getSize();i++){
		var listener = this.taskListeners.get(i);
		xml=xml+listener.toXML();
	}
	return xml;
};
draw2d.UserTask.prototype.getFormPropertiesXML=function(){
	var xml = '';
	for(var i=0;i<this.formProperties.getSize();i++){
		var formProperty = this.formProperties.get(i);
		xml=xml+formProperty.toXML();
	}
	return xml;
};
draw2d.UserTask.prototype.toXML=function(){
	var xml=this.getStartElementXML();
	xml=xml+this.getDocumentationXML();
	xml=xml+this.getExtensionElementsXML();
	xml=xml+this.getMultiInstanceXML();
	xml=xml+this.getEndElementXML();
	return xml;
}
draw2d.UserTask.prototype.getCandidateUser=function(sso){
	for(var i=0;i<this.candidateUsers.getSize();i++){
		var candidate = this.candidateUsers.get(i);
		if(candidate.sso===sso){
			return candidate;
		}
	}
	return null;
};
draw2d.UserTask.prototype.deleteCandidateUser=function(sso){
	var candidate = this.getCandidateUser(sso);
	this.candidateUsers.remove(candidate);
};
draw2d.UserTask.prototype.addCandidateUser=function(user){
	if(this.getCandidateUser(user.sso)==null)
		this.candidateUsers.add(user);
};
draw2d.UserTask.prototype.getCandidateGroup=function(name){
	for(var i=0;i<this.candidateGroups.getSize();i++){
		var candidate = this.candidateGroups.get(i);
		if(candidate===name){
			return candidate;
		}
	}
	return null;
};
draw2d.UserTask.prototype.deleteCandidateGroup=function(name){
	var candidate = this.getCandidateGroup(name);
	this.candidateGroups.remove(candidate);
};
draw2d.UserTask.prototype.addCandidateGroup=function(name){
	if(!this.candidateGroups.contains(name))
		this.candidateGroups.add(name);
};
draw2d.UserTask.prototype.getTaskListener=function(id){
	for(var i=0;i<this.taskListeners.getSize();i++){
		var listener = this.taskListeners.get(i);
		if(listener.getId()=== id){
			return listener;
		}
	}
};
draw2d.UserTask.prototype.deleteTaskListener=function(id){
	var listener = this.getTaskListener(id);
	this.taskListeners.remove(listener);
};
draw2d.UserTask.prototype.addTaskListener=function(listener){
	this.taskListeners.add(listener);
};
draw2d.UserTask.prototype.setTaskListeners=function(listeners){
	this.taskListeners = listeners;
};
draw2d.UserTask.prototype.getFormProperties=function(id){
	for(var i=0;i<this.formProperties.getSize();i++){
		var prop = this.formProperties.get(i);
		if(prop.id== id){
			return prop;
		}
	}
};
draw2d.UserTask.prototype.deleteFormProperties=function(id){
	var prop = this.getFormProperties(id);
	this.formProperties.remove(prop);
};
draw2d.UserTask.prototype.addFormProperties=function(prop){
	this.formProperties.add(prop);
};
draw2d.UserTask.prototype.setFormProperties=function(props){
	this.formProperties = props;
};

 
 请注意代码中toXML方法,这个方法负责产生UserTask节点的XML代码片段,它调用了其他几个方法:getStartElementXML、getDocumentationXML、getExtensionElementsXML、getMultiInstanceXML、getEndElementXML,不同类型的Task可能不需要调用所以这些方法,可以根据需要选择性调用(当然这取决于Activiti流程文件的规范),当然对于不同类型的Task你也可以添加一些自定义的方法,如:生成操作人的方法(代码中getPerformersXML方法)等等。

由于Activiti设计的Task类型比较多,这里就不一一介绍了有兴趣可以去查看一下源代码还是很好理解的,有问题可以给我留言!

时间有限就先写到这吧!下一篇介绍一下其他扩展类,敬请关注。。。。。

 

 

 定制器下载地址

http://lisonghua2010.iteye.com/admin/blogs/1490165

为了大家下载方便,最近开通的Github下载地址:

https://github.com/lisonghua/activiti-designer

 

Activit官方文档地址

http://activiti.org/userguide/index.html

-------------------------------------------------华丽分割线---------------------------------------------------------------------

温馨提示,下面是广告时间(不喜请绕行)

推广一下本人的小店:

http://tianya-zahuopu.taobao.com/

 

优惠多多,欢迎光临!

 

  • 大小: 102.3 KB
  • 大小: 127.1 KB
0
0
分享到:
评论
4 楼 ciwan 2014-12-09  
切换成easyui 1.3.2 jq('#paintarea').droppable
jq(source).draggable('proxy')获取为空了
3 楼 lisonghua2010 2014-08-26  
zhaoweijing2003 写道
我想问一下,taskListeners的设计初衷是为了实现什么功能?

taskListeners是为了实现task事件的监听,比如task创建时需要给处理人发送邮件通知这个功能就可以使用taskListener来实现。
2 楼 zhaoweijing2003 2014-08-25  
希望楼主继续介绍扩展类
1 楼 zhaoweijing2003 2014-08-25  
我想问一下,taskListeners的设计初衷是为了实现什么功能?

相关推荐

    easyui实现的Activiti工作流引擎web版流程设计器

    标题中的“easyui实现的Activiti工作流引擎web版流程设计器”揭示了本文将要讨论的重点,即如何利用EasyUI框架来构建一个基于Web的流程设计工具,该工具是基于Activiti工作流引擎的。EasyUI是一个轻量级的JavaScript...

    基于easyui实现的activiti模型设计器

    将Activiti与EasyUI结合,可以创建一个直观、易用的模型设计器,使得业务人员和开发人员能够更便捷地设计和管理业务流程。 在"基于easyui实现的activiti模型设计器"项目中,我们可以深入探讨以下几个关键知识点: ...

    基于draw2d和easyui的流程管理原型

    基于Draw2D和EasyUI的流程管理原型提供了一种可视化的方式来设计和实施这些流程,使得非技术人员也能轻松理解和操作。下面将详细介绍这两个技术以及它们在流程管理中的应用。 首先,Draw2D(二维绘图框架)是一个...

    EasyUI + Draw2D BPM Web 工作流实例

    【EasyUI + Draw2D BPM Web 工作流实例】是一个基于EasyUI框架与Draw2D组件构建的纯Web工作流管理系统。EasyUI是一个轻量级的JavaScript框架,主要用于简化前端开发,提供丰富的UI组件,如表格、下拉菜单、对话框等...

    easyui实现Activiti web 工作流在线编辑器

    标题中的“easyui实现Activiti web 工作流在线编辑器”表明这是一个使用EasyUI框架构建的,专门针对Activiti工作流引擎的Web应用程序。EasyUI是一个基于jQuery的UI库,提供了一系列预先设计的组件,如表格、下拉菜单...

    activiti-5.14.zip 工作流以及easyui设计器

    Activiti 是一个开源的工作流程引擎,它主要用于自动化业务流程,为企业的业务流程管理提供了一种灵活、可扩展的解决方案。这个“activiti-5.14.zip”压缩包包含了Activiti 5.14版本的相关文件,这版Activiti是一个...

    基于hibernate spring struts shiro activiti easyui框架的物流系统,可做毕业设计

    《基于Hibernate Spring Struts Shiro Activiti EasyUI的物流系统详解》 在信息化时代,物流系统的建设对于企业管理、效率提升至关重要。本项目采用了一系列主流的Java企业级开发框架,包括Hibernate、Spring、...

    基于jfinal+easyUI+activiti的Java企业协同平台设计源码

    该项目是一款基于jfinal、easyUI和activiti框架构建的企业级协同平台设计源码。该平台集成了1705个PNG图片、921个GIF动画、404个JavaScript脚本、333个CSS样式、210个Java源代码、153个HTML页面、101个JAR库文件、48...

    easyui扩展版本的插件

    总结来说,"easyui扩展版本的插件"是一个为EasyUI框架增加更多功能和定制选项的集合,它通过扩展和改进原生组件,提升了开发者的开发效率,同时也提供了更丰富、更个性化的用户界面体验。对于那些需要在项目中使用...

    jquery+easyui+websql.rar

    在本项目中,"jquery+easyui+websql.rar"是一个包含了使用jQuery、EasyUI框架以及WebSQL(或LocalStorage)技术来实现前端数据管理的压缩包。以下将详细阐述这些技术及其相互配合的方式。 首先,jQuery是一个广泛...

    processDesigner easyui web在线流程设计

    ProcessDesigner是一款基于EasyUI的Web在线流程设计工具,它提供了便捷的图形化界面,使得非技术人员也能轻松进行流程建模和管理。本文将深入探讨processDesigner的核心特性和应用场景,以及如何利用它实现高效的...

    jQuery+EasyUI开发指南宝典

    《jQuery+EasyUI开发指南宝典》是一本深入解析jQuery与EasyUI结合使用的专业书籍,旨在帮助开发者高效地构建交互式、美观的Web应用程序。jQuery是JavaScript库中的明星,以其简洁的API和强大的功能深受喜爱;而...

    基于easyui-textbox的颜色选择器及源码

    本文将深入探讨基于EasyUI的TextBox颜色选择器及其源码,帮助开发者理解这一组件的工作原理并实现自定义功能。 EasyUI是一个基于jQuery的轻量级前端框架,它提供了丰富的UI组件,使得开发者可以快速构建出美观、...

    基于easyui做的一套管理系统

    EasyUI 是一个基于 jQuery 的 UI 框架,它提供了丰富的组件和易于使用的API,用于快速构建美观且功能强大的Web应用程序。在这个“基于easyui做的一套管理系统”中,我们可以推测开发者利用 EasyUI 的功能创建了一个...

    easyui 开发包很全

    EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列精美的组件和控件,用于快速构建用户界面。这个“easyui 开发包很全”的压缩文件显然包含了完整的EasyUI开发资源,包括各种示例(demo)和相关的开发包,这对于...

    基于easyui的仓库管理系统.

    《基于EasyUI的仓库管理系统详解》 仓库管理系统是企业日常运营中的重要组成部分,它负责管理库存物品的入库、出库、盘点以及库存状态等信息,有效地提升了企业的物流管理效率。在信息化时代,采用基于Web的仓库...

    easyui 扩展 带单位输入框

    在IT领域,特别是前端开发中,EasyUI是一个非常流行的JavaScript框架,它提供了一套丰富的UI控件库,简化了Web应用程序的开发过程。EasyUI基于jQuery,使得开发者能够轻松地创建具有动态效果的用户界面。本文将深入...

    基于Draw2dTouch实现的Activiti工作流Web设计器,支持多种主流浏览器

    基于Draw2d Touch实现的Activiti工作流Web设计器,本设计器完全使用JQuery语法开发,集成Easyui前端框架,支持多种主流浏览器。支持Activiti5以上语法结构。采用目前比较流行的JS库-JQuery。符合BPMN2.0标准。可视化...

Global site tag (gtag.js) - Google Analytics