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

相关文章

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的