转:传智播客—jbpm与OA项目(八)续一

系统 1466 0

二、审批流转之待我审批

 

         待我审批,查看数据库中的任务记录,那些分配给“我”(由“我”负责)的任务,便是待我审批的任务。

 

clip_image002

 

 

 

1. 待我审批

 

/**

 

  * 待我审批(我的任务列表)

 

  */

 

public ActionForward taskList(ActionMapping mapping, ActionForm form,

 

        HttpServletRequest request, HttpServletResponse response)

 

        throws Exception {

 

    // 获取当前页码

 

    int pageNum = RequestUtils. getIntParam (request, "pageNum" , 1);

 

    // 获取当前用户

 

    User user = (User) request.getSession().getAttribute( "user" );

 

    // 当前用户 未完成的 任务列表

 

    PageView pageView = formInstanceService .getTaskPageView(user

 

            .getEmployee(), pageNum);

 

    request.setAttribute( "pageView" , pageView);

 

    return mapping.findForward( "taskList" );

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

 

其中的“ formInstanceService .getTaskPageView ”如下:

 

// 查询 TaskInfo 的列表

 

@SuppressWarnings ( "unchecked" )

 

public PageView getTaskPageView(Employee employee, int pageNum) {

 

    int pageSize = 10;

 

    // 获取待我审批的任务数量

 

    int count = ((Number) getSession().createQuery( //

 

            "SELECT COUNT(ti) FROM org.jbpm.taskmgmt.exe.TaskInstance ti WHERE actorId=? AND ti.end IS NULL" ) //

 

            .setParameter(0, employee.getId().toString()) //

 

            .uniqueResult()) //

 

            .intValue();

 

    // 获取待我审批的任务列表

 

    int firstResult = PageView. calcFirstResult (pageNum, pageSize);

 

    List<TaskInstance> taskInstanceList = getSession().createQuery( //

 

            "FROM org.jbpm.taskmgmt.exe.TaskInstance ti WHERE actorId=? AND ti.end IS NULL" ) //

 

            .setParameter(0, employee.getId().toString()) //

 

            .setFirstResult(firstResult) //

 

            .setMaxResults(pageSize) //

 

            .list();

 

    // 页面中需要显示表单实例信息,且仅需要任务实例的 ID

 

    List<FormInstance> formInstanceList = new ArrayList<FormInstance>();

 

    for (TaskInstance ti : taskInstanceList) {

 

        FormInstance formInstance = (FormInstance) ti.getContextInstance().getVariable( "formInstance" );

 

        formInstance.setCurrentTaskInstanceId(ti.getId());

 

        formInstanceList.add(formInstance);

 

    }

 

    // 显示

 

    return new PageView(pageNum, pageSize, count, formInstanceList);

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 审批页面

 

        

 

/**

 

  * 审批页面

 

  */

 

public ActionForward approveUI(ActionMapping mapping, ActionForm form,

 

        HttpServletRequest request, HttpServletResponse response)

 

        throws Exception {

 

    // 获取表单实例 ID

 

    Long formInstanceId = Long. parseLong (request

 

            .getParameter( "formInstanceId" ));

 

    // 获取表单实例,表单实例包含审批信息

 

    FormInstance formInstance = formInstanceService .getById(formInstanceId);

 

    request.setAttribute( "formInstance" , formInstance);

 

    return mapping.findForward( "approveUI" );

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 审批

 

/**

 

  * 审批

 

  */

 

public ActionForward approve(ActionMapping mapping, ActionForm form,

 

        HttpServletRequest request, HttpServletResponse response)

 

        throws Exception {

 

    // 获取表单数据

 

    ApproveInfoActionForm actionForm = (ApproveInfoActionForm) form;

 

    FormInstance formInstance = formInstanceService .getById(actionForm

 

            .getFormInstanceId());

 

    // 获取当前用户

 

    User user = (User) request.getSession().getAttribute( "user" );

 

    // 创建审批信息

 

    ApproveInfo approveInfo = new ApproveInfo();

 

    approveInfo.setApprover(user.getEmployee());

 

    approveInfo.setApproveTime( new Date());

 

    approveInfo.setApproval(actionForm.isApproval());

 

    approveInfo.setComment(actionForm.getComment());

 

    approveInfo.setTaskInstanceId(actionForm.getTaskInstanceId());

 

    approveInfo.setFormInstance(formInstance);

 

    // 审批

 

    formInstanceService .approve(approveInfo);

 

    return mapping.findForward( "toTaskList" );

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         其中的“ formInstanceService .approve ”如下:

 

/**

 

  * 审批

 

  */

 

public void approve(ApproveInfo approveInfo) {

 

    // 保存审批信息

 

    getSession().save(approveInfo);

 

 

 

    // 办理任务:审批

 

    FormInstance formInstance = approveInfo.getFormInstance();

 

    TaskInstance ti = getJbpmContext().getTaskInstance(approveInfo.getTaskInstanceId());

 

    ProcessInstance pi = ti.getProcessInstance();

 

    // 如果未通过

 

    if (!approveInfo.isApproval()) {

 

        // 停止任务向下流转

 

        ti.setSignalling( false );

 

        ti.start();

 

        ti.end();

 

        // 结束流程实例

 

        pi.end();

 

        // 设置流程状态为 未通过审批

 

        formInstance.setStatus(FormInstance. STATUS_NOT_APPROVED );

 

    }

 

    // 如果审批通过

 

    else {

 

        // 正常执行任务,向下流转

 

        ti.start();

 

        ti.end();

 

        // 如果流程已结束 , 就代表本次为最后一个审批

 

        if (pi.hasEnded()) {

 

            // 设置流程状态为 已通过审批

 

            formInstance.setStatus(FormInstance. STATUS_APPROVED );

 

        }

 

    }

 

    // 需要手动更新流程数据(如果 FormInstance lazy 属性为 false 呢!)

 

    getSession().update(formInstance);

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OK ,待我审批完成!

 

 

 

三、表单查询

 

         这部分的内容有“我的申请”、“经我审批”和“所有表单”,其中涉及条件查询在此就不一一总结了。不过这些模块中有一个十分有趣的功能——“查看流程图”。

 

 

 

         在以前的工作中,我经涉及到图片和画板的应用开发。我的查看流程图思路是将图片画到画板上然后根据坐标信息( gpd.xml )画出对应流程模块的矩形,然后保存图板图,最后将图片显示到页面。但汤老师的实现比较优雅,直接将流程图显示到页面,然后向页面中添加一个 div ,并设置 div 的坐标、尺寸和边框颜色。

 

 

 

         由此可见,我还需要一些工作经验将这些技术熟练掌握!

 

 

 

         通过 OA 项目的学习,使我知道应该如何学习下一个项目——《教育办公系统》。希望自己能将这个系统做的更好!

 

 

 

         加油!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转:传智播客—jbpm与OA项目(八)续一


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论