最近的task是将储存在类似于链表中的workflow转换成图。
图的信息存在于文件当中,格式是"前置事件","当前事件",第一个事件的前置事件是"0"。
例如 A -> B -> C 可以存储为
0,A
A,B
B,C
当这个workflow存在回路的时候是一件很头疼的事,自己想了好几个办法效果都不好,最后参考
http://topic.csdn.net/u/20071023/11/3edb81fc-37b2-4506-906e-44dc0fc521f2.html willshy回复中的方法终于可以找到图中的回路,方法如下……
首先定义一个类,用来储存workflow中每一个Event的信息。
class Event
attr_accessor :event_id, :parent_events, :child_events, :is_first_event, :is_last_event, :is_external, :ergodic_status
def initialize event_id
@event_id = event_id
@parent_events = []
@child_events = []
@is_first_event = false
@is_last_event = false
@is_external = false
@ergodic_status = 0 # 0 stand for scan not start, 1 stand for scan finished, -1 stand for scaning.
end
end
在找环操作中会用到的属性是@event_id,@child_events,@ergodic_status。
@event_id会用作hash的key,@child_events记录此event下一级的events,@ergodic_status就是willshy所提到的顶点的颜色。初始化为0表示还没有被遍历过,1表示此节点所有的子节点都被遍历过,-1表示此节点正在被遍历。
第一步是扫描文件,把所有事件都存到一个hash表中(下面方法中的@event_hash),扫描的同时也将每一个event的@child_events赋值完成。
遍历的方法如下:
def ergodic key
key = key.to_sym unless key.kind_of? Symbol # Check the key is 'Symbol' type.
return if @event_hash[key].ergodic_status == 1
@event_hash[key].ergodic_status = -1
unless @event_hash[key].is_last_event
@event_hash[key].child_events.each do |child_event|
child_key = child_event.to_sym
if @event_hash[child_key].ergodic_status == -1
@circles << "#{key.to_s},#{child_key.to_s}" unless @circles.include? "#{key.to_s},#{child_key.to_s}"
next
end
ergodic child_key
end
end
@event_hash[key].ergodic_status = 1
return
end
然后调用一次ergodic(第一个事件的key)就可以将所有形成回路的线记录到数组@circles中,从而得到没有环的文件。(因为画图的时候会用到许多递归,有环的话就意味着递归会成为一个死循环。)
下一步就是生成图,leader告诉我用svg格式的图,相关信息:
http://www.w3school.com.cn/svg/index.asp
Sample:
http://croczilla.com/bits_and_pieces/svg/samples/
可以看出svg还是很牛的,sample中居然有一个俄罗斯方块……
svg文件可以用Fire Fox直接打开,IE打开需要安装Adobe的SVGView。
目前为止我就会两个标签,一个画长方形,一个划线……

不过已经足够了,我需要做的事情就是计算出每个事件在图中的坐标,然后用线把他们连起来。
先来一个简单的sample(sample的源文件与生成图的文件在附件中):
简单的图效果还可以,复杂的我还不忍心贴出来……具体代码有不少繁琐的细节和需要调整的地方,有需要的请单独联系我吧

- 大小: 17.7 KB
分享到:
相关推荐
工作流(Workflow)流程图是一种可视化工具,用于描绘工作中的任务序列、决策点以及它们之间的交互。这种图表有助于理解和优化业务流程,确保团队协作高效、有序。制作工作流流程图的软件可以帮助用户轻松创建和编辑...
"WorkFlow C++ 工作流图形"是一个专注于在C++环境中实现工作流管理的图形化库。工作流,简单来说,就是一系列按照特定顺序执行的任务或活动,它在企业管理、软件开发、流程自动化等领域中广泛应用。C++作为一门强大...
【标题】"workflow实现的源代码"涉及到的是工作流(Workflow)系统在信息技术中的实际应用,尤其是OA(Office Automation)系统的开发。工作流系统是一种自动化业务流程的技术,它能够管理和控制文档、信息或任务在...
工作流(Workflow)是一种自动化处理任务的技术,它在IT领域被广泛应用,特别是在企业管理、项目协作和数据处理等方面。工作流的核心在于定义并管理业务过程,确保任务按照预设的规则和顺序有效地执行。在这个“请假...
这些软件通常具有直观的用户界面,丰富的图形元素,以及强大的自定义功能,使得非专业设计师也能轻松上手。 在"workflow流程图制作软件"中,我们可以找到以下几个核心知识点: 1. **流程图概念**:流程图是一种用...
【workflow工作流画图实例源码】是一个基于.NET Framework 2.0的项目,它提供了在Web应用程序中绘制和编辑工作流流程图的功能。这个实例源码的核心目标是让用户能够在一个网页上直观地创建、修改和保存工作流程,...
### Proficy Workflow通过工作流管理实现数字化生产过程 #### 一、引言 随着信息技术的发展,企业越来越依赖于数字化手段来提升生产效率和管理水平。在这一背景下,Proficy Workflow作为一种强大的工作流管理系统...
FireWorkflow 3 工作流模式实现整理 FireWorkflow 3 是一种流行的工作流引擎,用于实现复杂的业务流程。该引擎提供了多种工作流模式,帮助开发者快速构建企业级应用程序。本文档对 FireWorkflow 3 中各种工作流模式...
Lotus Domino Web Workflow是一款基于B/S架构的工作流管理系统,它提供了强大的图形化设计工具,使得企业可以轻松构建和管理复杂的业务流程。在这个系统中,工作流的设计、执行和监控都通过直观的图形界面进行,大大...
OA工作流(Office ...通过以上分析,我们可以看出"OA工作流WorkFlow版本(前台JS实现)"是一个基于JavaScript实现的前端工作流管理系统,它需要深入理解工作流概念,熟悉前端开发技术,以及良好的前后端协作能力。
【标题】"使用js编写的Workflow"涉及到的主要知识点是JavaScript编程和工作流(Workflow)的实现,特别是如何在Web环境中创建一个支持拖放功能的工作流系统。JavaScript是一种广泛用于前端开发的脚本语言,它允许...
工作流实例则是这种技术的具体应用,它描述了一个具体的工作流程,包括各个任务的执行顺序、参与者、决策点以及相关数据的处理。 在工作流实例中,流程图扮演了至关重要的角色。流程图是一种图形表示方法,用于清晰...
工作流(Workflow)是软件系统中用于管理业务流程自动化的重要技术,它可以帮助组织或企业实现流程规范化、提高工作效率。在本项目"workflow_springbootworkflow_workflowdemo_workflowspringBoot_work"中,开发者...
本书的主要编写目的是给那些希望使用Domino Workflow来开发工作流应用的人们,对于Domino Workflow的最终用户,也可以从本书的第一到第四章中获得有价值的东西。 在信息技术飞速发展的今天,作为IT从业人员,必须...
通过本资源,您将学习如何使用 Workflow 程序创建一个 Hello World 应用程序,并了解 Workflow 程序的基本概念和实现机制。 什么是 Workflow 程序? Workflow 程序是一种基于活动的编程模型,允许开发者使用可视化...
工作流(Workflow)是软件开发中的一个重要概念,它涉及到如何有序、有规则地组织和管理一系列业务过程。在ASP.NET中,工作流提供了一种强大的工具来设计和执行复杂的业务逻辑。"Workflow.zip"这个压缩包文件显然...
在这个“Workflow程序代码(HelloWorld).rar”压缩包中,我们很显然会找到一个简单的示例,它展示了如何使用Workflow框架来实现一个基本的“Hello, World!”程序。 Workflow Foundation(WWF),全称Windows ...
工作流(Workflow)是软件开发中的一个重要概念,它涉及到如何有序地组织和自动化一系列任务,以实现特定的业务目标。"Simple Workflow"标题暗示我们将会探讨一个简洁易懂的工作流实现,适合初学者或者需要快速理解...
2. BPMN 2.0标准介绍:解释BPMN符号的含义,以及如何使用它们来构建流程图。 3. Activiti Designer:介绍这款图形化建模工具,展示如何通过拖拽方式创建和编辑流程模型。 4. 流程实例的启动与执行:阐述如何启动一个...