FileNet流程之旅

题记


         我的第一支流程(文档借阅审批流程)结束了,从需求分析到编码实现,历时9天,尽管这支流程还不是很完善,但让我对FileNet中的流程设计有了整体的认识,由WorkStep 到 Workflow,这是质的变化。


需求分析


      文档借阅审批流程,是我在众多流程中选取的一条有代表性的流程。其一,文档借阅在大型企业中是经常发生的一个事件流;其二,文档借阅过程中会有多个不同概念节点的参与;其三,这支流程是我以前未处理过的流程。鉴于以上原因,考虑到公司对业务的要求,我设计出如下所示的流程图:

FileNet流程之旅_第1张图片

流程图分析


      这支流程包含了两种结点:Component和Activity。这两种节点是流程设计中最常用的两种节点。Component节点是Document Permission,Activity节点包括Inner Dept Manager和Other Dept Manager。

  Component节点主要使用以前开发好的程序Jar包来对节点进行验证,这里Document Permission的作用就是读取该文档是否具有借阅权限,如果有则进入下一步,否则流程结束。

  Activity节点与Component节点的不同之处在于,Activity处理的程序不是使用已编译好的Jar来处理,而是独立写程序来实现相应的功能。其次,Activity节点在处理过程中需要暴露相应的字段,使系统有权限去自动处理。Activity节点还需要指定参与人,只有相关权限的用户在分配相应的任务后才可进行任务处理。

  在该流程图中,Inner Dept Manager指定了Work Queue负责处理该节点,当任务发起后,Work Queue中的任何人都可以对任务进行处理,谁先拿到任务谁进行处理,也就是我们平时所说的“抢单”。

  Other Dept Manager,我指定的是Participant,这里Partcipant中的所有都审批通过时,该流程才正式结束,它与Work Queue的不同之处在于这里需要所有人都参与,而Work Queue只需其中一人进行处理即可。


代码里的哲学


      在FileNet开发过程中,应该考虑到面向对象的三大特征,将系统的可重用性,可维护性,灵活性发展到极致。在这里,对CE以及PE操作步骤都是确定的,我们无需自己去创造一种实现方式。

  但是我们应该将我们常用的模块进行封装,以提高程序的重用性,比如我们对FileNet中的Session的处理,应该写成一个单独的模块去包装它。对于对象的处理,我们可以将它包装在现有的Map中,而不用再一行行的去写Set方法,增强程序的可读性。


MAP封装对象


private static Map<String,Object>getDataFieldMap(DocumentBorrowserVO documentBorrowser){
        Map<String,Object>map = new HashMap<String,Object>();
        map.put("documentName", documentBorrowser.documentName);
        map.put("documentExplain", documentBorrowser.documentExplain);
        map.put("documentType", documentBorrowser.documentType);
        map.put("applicant", documentBorrowser.applicant);
        map.put("dept", documentBorrowser.dept);
        map.put("stepName", documentBorrowser.stepName);
       
        return map;
    }


尾声


       Workflow将我近期所学的知识串成一条线,从Flex界面设计,通过Cairgorm架构,借助BlazeDS,穿越到Java,过渡到FileNet。这条线只是Business图案中第一条,我还需要继续穿越,直到整个Business成为一个完整的图案。

你可能感兴趣的:(workflow,manager,session,jar,文档,任务)