BPS流程怎样设计业务与流程的结合

2024-01-16 10:20

本文主要是介绍BPS流程怎样设计业务与流程的结合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读原文

场景描述

BPS工作流默认客户端界面中包括"待办任务列表"、"已办任务列表"等纯流程信息,而为了业务操作人员更全面了解任务相关的业务信息,往往需要在任务列表中显示相关的业务属性信息。

本场景适用BPS服务器与用户应用集中部署的方式,流程引擎的数据库和应用的数据库存放在同一数据库中。

案例简介

业务场景描述:

在报销流程中,审批人登录系统后能结合工作项和报销业务表查询到待审批的报销单信息,查询条件为报销人,如下图所示:

场景实现(关键步骤描述)

  1. 报销业务表 (通过流程实例ID与流程进行关联)
    create table EXPENSEINFO
    (
       EXPID          NUMERIC( 18 ) not null ,
       PROCESSINSTID  NUMERIC( 18 ) not null ,
       EXPNAME        VARCHAR( 20 ) not null ,
       EXPMONEY       NUMBER not null ,
       REASON         VARCHAR( 255 ),
       ISBUDGETITEM   CHAR( 1 ),
       AUDITOR        VARCHAR( 20 )
      );
    alter table EXPENSEINFO  add constraint P_EXP primary key (EXPID);
    -- Add comments to the columns
    comment on column EXPENSEINFO.EXPID
       is '报销单编号' ;
    comment on column EXPENSEINFO.PROCESSINSTID
       is '流程实例ID' ;
    comment on column EXPENSEINFO.EXPNAME
       is '报销人' ;
    comment on column EXPENSEINFO.EXPMONEY
       is '报销金额' ;
    comment on column EXPENSEINFO.REASON
       is '报销原因' ;
    comment on column EXPENSEINFO.ISBUDGETITEM
       is '是否是预算内项目' ;
    comment on column EXPENSEINFO.AUDITOR
       is '财务审阅人' ;
  2. 构造业务实体对应的XSD和HBM
    • expdata.xsd代码如下:
      ?
      <?xml version= "1.0" encoding= "UTF-8" standalone= "no" ?>
      <xs:schema xmlns= "com.eos.workflow.expdata" xmlns:sdo= "commonj.sdo" xmlns:sdoJava= "commonj.sdo/java"
        xmlns:xs= "<a href="http://www.w3.org/2001/XMLSchema" "="">http://www.w3.org/2001/XMLSchema" targetNamespace= "com.eos.workflow.expdata" >
           <xs:complexType name= "Expenseinfo" >
               <xs:sequence>
                   <xs:any/>
                   <xs:element name= "expid" type= "xs:long" />
                   <xs:element name= "processinstid" type= "xs:long" />
                   <xs:element name= "expname" type= "xs:string" />
                   <xs:element name= "expmoney" type= "xs:long" />
                   <xs:element name= "reason" type= "xs:string" />
                   <xs:element name= "isbudgetitem" type= "xs:string" />
                   <xs:element name= "auditor" type= "xs:string" />
               </xs:sequence>
           </xs:complexType>
      </xs:schema>
    • expdata.hbm代码如下:
      ?
      <?xml version= "1.0" encoding= "UTF-8" ?>
      <!DOCTYPE hibernate-mapping PUBLIC  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" "="">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
      <hibernate-mapping>
           < class dynamic-insert= "true" dynamic-update= "true" entity-name= "com.eos.workflow.expdata.Expenseinfo"
            table= "EXPENSEINFO" >
               <tuplizer class = "com.primeton.server.das.tuplizer.SDOEntityTuplizer" entity-mode= "sdo" />
               <id name= "expid" type= "long" >
                   <column length= "18" name= "EXPID" />
                   <generator class = "assigned" />
               </id>
               <property name= "processinstid" type= "long" >
                   <column length= "18" name= "PROCESSINSTID" not- null = "true" />
               </property>
               <property name= "expname" type= "string" >
                   <column length= "20" name= "EXPNAME" not- null = "true" />
               </property>
               <property name= "expmoney" type= "long" >
                   <column length= "22" name= "EXPMONEY" not- null = "true" />
               </property>
               <property name= "reason" type= "string" >
                   <column length= "255" name= "REASON" />
               </property>
               <property name= "isbudgetitem" type= "string" >
                   <column length= "1" name= "ISBUDGETITEM" />
               </property>
               <property name= "auditor" type= "string" >
                   <column length= "20" name= "AUDITOR" />
               </property>
           </ class >
      </hibernate-mapping>
  3. 把expdata.hbm和expdata.xsd放在"${BPS_HOME}\apache-tomcat-5.5.20\webapps\default\WEB-INF\ _srv\work\system\com.eos.workflow\com\eos\workflow"目录下。
  4. 结合业务查询关键代码
    ?
    public List<WFWorkItem> getUserTasks4SDO(User user,ExpenseInfoForm expenseInfoForm, PageCond pageCond)
        throws WFServiceException {
         List<WFWorkItem> tasklist = new ArrayList();
             //获取工作列表查询器接口
         IWFWorklistQueryManager workListMng = client.getWorklistQueryManager();
             //创建并封装工作项查询对象
         DataObject workItemFilter=DataFactory.INSTANCE.create( "com.primeton.das.criteria" , "criteriaType" );
             workItemFilter.set( "_entity" , "com.eos.workflow.data.WFWorkItem" );
             //创建并封装业务查询对象
         DataObject bizEntityFilter=DataFactory.INSTANCE.create( "com.primeton.das.criteria" , "criteriaType" );
             bizEntityFilter.set( "_entity" ,
             "com.eos.workflow.expdata.Expenseinfo" );
         String expname = expenseInfoForm.getExpname();
             if (expname != null && ! "" .equals(expname))
             {
                 bizEntityFilter.set( "/_and[1]/_expr[1]/expname" , expname);
                 bizEntityFilter.set( "/_and[1]/_expr[1]/_op" , "like" );
                 bizEntityFilter.set( "/_and[1]/_expr[1]/_likeRule" , "all" );
             }
             DataObject pageCondSDO=DataFactory.INSTANCE.create( "com.eos.foundation" , "PageCond" );
             pageCondSDO.set( "begin" , pageCond.getBegin());
             pageCondSDO.set( "length" , pageCond.getLength());
             pageCondSDO.set( "isCount" , pageCond.getIsCount());
             DataObject[] objs = workListMng.queryPersonBizEntities4SDO(user.getUserId(), "ALL" , "ALL" ,
      bizEntityFilter, workItemFilter, "processinstid" , pageCondSDO);
             //回填查询记录数,更新输入的分页信息
             pageCond.setCount(pageCondSDO.getInt( "count" ));
             //将查询结果(DataObject数组类型)转化为WFWorkItem的List类型(JavaBean类型)
              tasklist = BPSDataConvertor.convertToUserObjectList(objs, com.eos.workflow.data.WFWorkItem. class );
             return tasklist;
         }

这篇关于BPS流程怎样设计业务与流程的结合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/612238

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到