`
herman_liu76
  • 浏览: 99557 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一次处理项目中工作流问题的过程记录

阅读更多
    流程处理始终是我这边项目的中一个重点,之前写过一个博客关于工作流的。不过最近处理了同事碰到的问题,感觉有必要再记录一下。
一、回顾工作流
    首先,用大白话回顾一下,什么是工作流以及为何有工作流产品。工作流就是先设计一个工作处理的规范,有几个岗位,从哪个岗位发到哪个岗位,这个设计好一般使用中不动了。可以看成是一种复杂的字典项,可以记录在文件中,数据库XML方式存放,或者直接表存放,使用时一般缓存在系统中。

    为何有工作流产品?产品一般是通用性,实际工作中,不同的岗位人员处理方式完全不同,录入的内容也不同,但也有相同的地方,就是一些流向,任务分配。所以按照把公共部分抽象出来的原则,才有了工作流产品。一个事项在流动过程中,工作流中有工作流实例,自己的系统中有业务实例;工作流中有业务分配,自己的系统中有业务数据。等于是共性与个性分开了,当然他们之间有字段关联着。
二、问题
    好了,开始说说问题。这个项目是另一同事参与,我指导他技术。主要是处理一个流程中的and分支与合并,流程图上画了3个部门,实际中用户要求可以选择3个,可以选择其中两个,当然1个也行。这个情况,是非常常见的情况,我做过业务比这复杂多的流程,都用自己写的流程分配处理的,有几个就分配几个并发任务呗,每一个并发任务完成后,检测是不是大家都完成了,都完成了可以进入下一个岗位了。

    难点是啥?工作流用的内部产品,源码无。外面包装了流程适配器,可支持jbpm等其它。再外面是一套之前一个人写的业务层,包含了一批W开头的业务表。业务表与表单系统又套在一起。这个业务表外又包装了一层另一个人写的INF开头的业务表。页面上用的待办任务都是用INF表,页面写的还蛮复杂的。流程工具画的流程图装入系统后,产生与W系列表对应的环节与操作表,又产生了一批与INF对应的岗位与活动操作表。所以具体的一个业务过程,被分成了三部分,内部是工作流实例、中间的一层业务,外面又是一层业务。每层都有5个左右的表,这样的系统冗余也太多了。

   同事把主要时间放在改表单,就是修改and部门选择实际处理人的功能上了。我看过了数据库设计并分析了数据,说这个and任务已经产生了,在这里改没有任何作用,必须在and产生前控制and的个数。作为一个不确认的任务,最快速的打通其中的难点是最主要的,千万不要浪费时间有细节上。比如项目应该是先搭建好数据模型与基本结构,而不是装饰房间。最近一个项目中有几个字典项,已有公共页面处理,但最终客户要有处理页面,但我说这个很简单,先填写好数据,推进更重要的工作。

三、处理过程
    1.首先我认为and分支,可以选择分支是一个很通用的功能,也许配置一下就OK了,经过了解没了此功能。反编译看到and合并的条件是与流程配置中个数为准。

    2.我最初的建议是分配and任务的时候,用户勾选部门并标识下来,如果标识是不参与的,就默认让此任务自动完成。在待办任务与已办任务中根据标识过滤掉。这样应该最简单,而且业务层次最外面,改动最小。(简单测试在提交and任务后,让其中一个部分的任务立即完成,但COPY来的提交中涉及表单,涉及一些设计模式,报错就先放下了。毕竟我不是主导的,只是建议)

   3.另一方面,之前参与过的另一团队技术负责向技术总监求援,远程指导中说试试xor,以及测试流程连线上的请求条件可以过滤,还说and xor都已经被改过了,都没啥区别了,关键是流程连线上的条件。只要表单里有条件,就会起作用。看来已经被不同的人改的太乱了。大家都吃不准,只有试。XOR是排他流程。
   
  4.当然是审核岗位,只有同意才可以分配and任务,不同意直接转结束,所以还是审核的两个分支中,其中一个先加了and节点。主要测试and后的连线上的条件是不是可以用来协调真正分配的任务。同事准备写条件,并改写提交表单以加入条件。我说先用表单中已有的项来验证是不是可行,只要写个条件就行,省的改了半天又不可行。时间花在重要的验证可行性上。and上的分支果然有作用了,只产生了3个中的2个任务。

  5.下一步是合并操作,之前已经说过and合并是与配置的个数有关,怎么办?他们暂时也没办法。我建议修改原码,才知道没有原码,另一团队技术负责说可以复制出来这个类来改,改好会优化加载的。哦,是了,这个我怎么没想到呢。他说他们这边一直这么干的,看来我之前项目圈中交流太少,技术交流非常的重要。如果我是负责多个项目的管理人员,肯定会组织各个项目技术人员讲解自己的项目,最近的问题与收获。但我们这边没这个机制。最后我只写和几行代码,终于用实际产生的任务数作为and 合并的条件,测试通过了。

6. 既然技术中的难点都攻克了,那就交给同事继续开发了。

四、反思

    回想我提出的第一个思路,开始认为最简单的绕过问题的,就是自动提交不选的分支任务。仅作标识。为何没成功呢?分配完and任务,立即调用提交任务啊,应该也是只要改10行左右的核心代码啊。因为我不具体负责也没多测多想。等问题都解决后才想到最根本的问题是,把两个提交串起来,必须是两个不同的请示,不同的事务。其实模拟用户操作做个提交应该是非常简单的事情。
    
    大家都喜欢产品,群里一个同事要做OA产品,但越是接近最终用户,变化就越多,最初的产品条件变了,再打补丁,再改。层层包装。人员在变,越改越复杂,越不稳定。我始终认为一个透彻清楚的原型系统,或者完整的设计思路更有帮助。你可以自由定制,自由修改。如果真那么好做产品,我们这样的项目公司早被牛B的公司吃掉了。
0
0
分享到:
评论

相关推荐

    工作流项目实施中的问题和解决策略

    本文旨在探讨工作流项目实施过程中常见的问题及其解决策略,帮助企业和开发者更好地理解和应用工作流技术。 #### 二、工作流技术概述 工作流(Workflow)是一种用来建模和执行业务流程的技术。它通过对流程中任务...

    工作流小demo

    4. 回退和重试机制:在流程执行过程中,可能会遇到错误或异常,工作流系统需要有处理这些问题的策略,如回滚到上一步骤或重新执行某个任务。 5. 数据管理:工作流实例往往涉及数据交换,例如文章内容、审核意见等,...

    用户自定义工作流后台java实现代码

    在IT行业中,用户自定义工作流是一个非常关键的领域,特别是在企业级应用中,它能够根据业务需求灵活地创建和管理流程。本资源提供的是一个用户自定义工作流后台的Java实现,它包括了JSP前端展示代码以及核心的工作...

    OpenJWeb快速开发平台简易工作流的实现-信息发布流程(一)

    首先,工作流(Workflow)是一种自动化业务过程的管理方式,它将业务流程中的任务、角色、规则和事件通过系统进行有序的组织和协调。在OpenJWeb中,工作流模块允许开发者自定义流程,满足不同业务场景的需求。 1. *...

    搭建飞书+AI的工作流.pdf

    假设团队召开了一次会议,讨论了项目进度及后续计划。会议结束后,通过飞书的自动录制功能导出了会议录音的文字记录,并使用月之暗面进行了处理。通过自定义的提示词,AI工具成功地总结了会议的主要内容、各发言人的...

    Spring与JBoss JBPM工作流集成开发指南

    - **异常处理**: 如何在Spring框架中处理工作流执行过程中的异常情况。 **常见问题解答**: - 如何解决Spring Bean与JBPM引擎之间的依赖注入问题? - 如何在Spring环境下调试JBPM流程定义错误? - 如何在Spring环境...

    LiteFlow:轻量级工作流引擎的实战应用与深度解析(1)测试demo代码

    总结,LiteFlow作为一个轻量级工作流引擎,提供了丰富的功能和高度的定制性,适合在各种项目中快速构建和部署工作流程。通过提供的测试demo代码,开发者可以快速上手,并结合自己的业务需求进行二次开发,实现高效、...

    我是如何带领团队开发工作流项目的

    本文将分享一次我带领团队开发工作流项目的经验,涵盖了项目开发流程、团队分工、文档管理、源码控制、测试策略以及编码规范等多个方面,旨在提供一个实际操作的案例,帮助读者了解如何有效地组织和执行一个大型IT...

    工作流术语表-wxy.pdf

    工作流是现代企业管理和运营中不可或缺的一部分,它涉及到多个概念和术语,让我们深入理解这些关键概念。 1) **活动(Activity)**:活动是工作流程中的基本单元,它定义了一个具体的任务,例如填写报告或审批请求...

    软件项目开发流程:开发部日常工作流程 管理流程 绩效考核流程

    代码审查确保代码质量,问题跟踪系统记录并解决开发中遇到的问题。项目经理定期收集并汇报项目进度,以便管理层了解项目状态。 ## 4. 开发部管理流程 ### 4.1 内容概述 管理流程涉及项目的整体规划、资源分配、风险...

    jbpm工作流管理系统

    JBPM(JBoss Business Process Management)是Red Hat旗下的一款开源工作流引擎,它支持BPMN 2.0标准,用于自动化业务流程。JBPM提供了一套完整的工具集,帮助开发者设计、实现以及管理复杂的业务流程。 ##### 1. ...

    新华信公主流引擎

    它可以处理日常办公中的审批流程,如请假、报销、文件审批等,通过预设的工作流规则,自动推动流程的执行,确保信息的准确传递和快速处理。同时,系统还支持自定义表单设计,使得用户可以根据实际业务需求创建符合...

    一个完整的项目开发文档

    更新日志记录了每一次改进,帮助用户了解新版本的变化;问题跟踪系统用于管理用户反馈和bug报告,以便及时修复。 综上所述,一个完整的项目开发文档应包含但不限于需求分析、设计文档、编码规范、测试计划、部署...

    存储过程触发器 游标

    在数据库管理中,存储过程和触发器是两个关键概念,它们极大地增强了...在学习过程中,应深入理解每个概念的工作原理,熟悉它们的语法和用法,以及如何在实际项目中有效地整合它们,以实现最优的数据库设计和操作。

    学生上机管理系统(C语言)

    通过对"登录文件.txt"的读取来实现安全登录,使用结构体和文件操作处理学生信息,结合任务书和PPT进行系统设计和演示,这是一次全面锻炼和提升编程能力的实践。在实际开发过程中,还需要考虑异常处理、错误提示、...

    面试--项目那点事

    3. **资料总结**:撰写博客记录项目进展和个人感悟,这是一种非常好的二次创作方式,有助于巩固所学知识并积累经验。 #### 四、面试怎么讲项目经历 在面试时讲述项目经历也有一定的技巧: 1. **差异化**:强调...

    存储过程从入门到熟练(多个存储过程完整实例及调用方法)

    通过阅读"存储过程从入门到熟练"这份文档,你将有机会深入理解存储过程的工作原理,学习如何编写高效、安全的存储过程,并掌握如何在实际项目中调用和管理它们。这将对你的数据库管理和开发技能带来显著的提升。

    Dynamo批量删除Revit中链接或导入的cad文件

    5. **日志记录**:为了跟踪和审计批量删除的过程,可以在工作流中加入日志记录功能,记录哪些文件被删除以及何时删除的,这通常通过自定义节点或者Python脚本实现。 在实际应用中,Dynamo的批量删除功能不仅可以...

    图像批处理图像批处理图像批处理

    用户可以选择一组图像文件,定义一套处理规则,然后由工具一次性应用到所有选定的图像上。在“图像批处理”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **脚本语言与批处理**:许多图像编辑软件支持使用...

Global site tag (gtag.js) - Google Analytics