久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

activiti原表怎么增加新字段

180次閱讀
沒有評論

共計 6772 個字符,預計需要花費 17 分鐘才能閱讀完成。

這篇文章主要介紹“activiti 原表怎么增加新字段”,在日常操作中,相信很多人在 activiti 原表怎么增加新字段問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”activiti 原表怎么增加新字段”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

activiti 自帶了很多表,如圖:

Activiti 工作流引擎的數據庫表中的表名稱都是以  ACT_. 第二部分兩個字母表示表的類型。使用模糊匹配的方式說明表的類型匹配 activiti 的服務 API.

middot; ACT_RE_*: RE 代表倉儲(Repository). 這種表前綴以“static”表示流程定義信息或者流程資源信息(如流程的圖表和規則等).

middot; ACT_RU_*: RU 標識為運行 (Runtime) 時表。包含流程實例,用戶任務和變量任務等在運行時的數據信息。這些表只存儲 Activiti 在流程實例運行執行的數據,在流程結束的時候從表中去除數據。從而保持運行時候數據的表的快速和小數據量.

middot; ACT_ID_*:ID 標識為唯一 (Identity) 的。包含一些唯一的信息如用戶,用戶做等信息。

middot; ACT_HI_*:HI 表示歷史數據 (History) 表,包括過期的流程實例,過期的變量和過期的任務等。

middot; ACT_GE_*:GE 表示公用 (General data) 的數據庫表類型。

 ACT_GE_BYTEARRAY  表保存了開發時候的文件,在工作流部署的時候需要上傳相關的工作流文件到相關的項目中。其中如果是文件采用方式如下,將圖片和或者文件轉換為二進制字節流存儲。

    bytes_字段保存了文件內容,如果是圖片,則是保存了二進制。

  由于各個項目的業務特殊性,想擴展 ACT_GE_BYTEARRAY 的字段,增加 2 個新字段 SYS_,SWITCHBOARD_字段。

怎么把數據保存到表中,這里采用的是修改源碼的辦法:

步驟 1:修改 ACT_GE_BYTEARRAY 表對應實體 org.activiti.engine.impl.persistence.entity.ResourceEntity,添加 SYS_,SWITCHBOARD_字段:

public class ResourceEntity implements Serializable, PersistentObject {
 private static final long serialVersionUID = 1L;
 protected String id;
 protected String name;
 protected byte[] bytes;
 protected String deploymentId;
 protected boolean generated = false;
 
 //-------------------------------
 private String switchboard;
 private boolean sys;
 ...
}

步驟 2:修改相應的 sql 的配置,添加 SYS_,SWITCHBOARD_字段。

文件 org.activiti.db.mapping.entity.Resource.xml:

?xml version= 1.0  encoding= UTF-8  ?  
 !DOCTYPE mapper PUBLIC  -//mybatis.org//DTD Mapper 3.0//EN   http://mybatis.org/dtd/mybatis-3-mapper.dtd  
 
 mapper namespace= org.activiti.engine.impl.persistence.entity.ResourceEntity 
 
  !-- RESOURCE INSERT -- 
  insert id= insertResource  parameterType= org.activiti.engine.impl.persistence.entity.ResourceEntity 
 insert into ${prefix}ACT_GE_BYTEARRAY(ID_, REV_, NAME_, BYTES_, DEPLOYMENT_ID_, GENERATED_,SWITCHBOARD_,SYS_) values (#{id, jdbcType=VARCHAR}, 1, #{name, jdbcType=VARCHAR}, #{bytes, jdbcType=BLOB}, #{deploymentId, jdbcType=VARCHAR}, #{generated, jdbcType=BOOLEAN}, #{switchboard, jdbcType=VARCHAR},#{sys, jdbcType=BOOLEAN})  /insert 
 
  !-- RESOURCE UPDATE -- 
  !-- RESOURCE DELETE -- 
  delete id= deleteResourcesByDeploymentId  parameterType= string 
 delete from ${prefix}ACT_GE_BYTEARRAY where DEPLOYMENT_ID_ = #{id}
  /delete 
 
  !-- RESOURCE RESULTMAP -- 
  resultMap id= resourceResultMap  type= org.activiti.engine.impl.persistence.entity.ResourceEntity 
  id property= id  column= ID_  jdbcType= VARCHAR  / 
  result property= name  column= NAME_  jdbcType= VARCHAR / 
  result property= bytes  column= BYTES_  jdbcType= BLOB / 
  result property= generated  column= GENERATED_  jdbcType= BOOLEAN / 
  result property= switchboard  column= SWITCHBOARD_  jdbcType= VARCHAR / 
  result property= sys  column= SYS_  jdbcType= BOOLEAN / 
  /resultMap 
 
  !-- RESOURCE SELECT -- 
  select id= selectResourceNamesByDeploymentId  parameterType= org.activiti.engine.impl.db.ListQueryParameterObject  resultType= string 
 select NAME_ from ${prefix}ACT_GE_BYTEARRAY where DEPLOYMENT_ID_ = #{parameter} order by NAME_ asc
  /select 
 
  select id= selectResourceByDeploymentIdAndResourceName  parameterType= map  resultMap= resourceResultMap 
 select * from ${prefix}ACT_GE_BYTEARRAY 
 where DEPLOYMENT_ID_ = #{deploymentId}
 AND NAME_ = #{resourceName}
  /select 
  select id= selectResourcesByDeploymentId  parameterType= org.activiti.engine.impl.db.ListQueryParameterObject  resultMap= resourceResultMap 
 select * from ${prefix}ACT_GE_BYTEARRAY where DEPLOYMENT_ID_ = #{parameter} order by NAME_ asc
  /select  
  !-- postgresql specific -- 
  resultMap id= resourceResultMap_postgres  type= org.activiti.engine.impl.persistence.entity.ResourceEntity 
  id property= id  column= ID_  jdbcType= VARCHAR  / 
  result property= name  column= NAME_  jdbcType= VARCHAR / 
  result property= bytes  column= BYTES_  jdbcType= BINARY / 
  result property= generated  column= GENERATED_  jdbcType= BOOLEAN / 
  result property= switchboard  column= SWITCHBOARD_  jdbcType= VARCHAR / 
  result property= sys  column= SYS_  jdbcType= BOOLEAN / 
  /resultMap 
 
  !-- postgresql specific -- 
  select id= selectResourceByDeploymentIdAndResourceName_postgres  parameterType= map  resultMap= resourceResultMap_postgres 
 select * from ${prefix}ACT_GE_BYTEARRAY 
 where DEPLOYMENT_ID_ = #{deploymentId}
 AND NAME_ = #{resourceName}
  /select 
 
  !-- postgresql specific -- 
  select id= selectResourcesByDeploymentId_postgres  parameterType= org.activiti.engine.impl.db.ListQueryParameterObject  resultMap= resourceResultMap_postgres 
 select * from ${prefix}ACT_GE_BYTEARRAY where DEPLOYMENT_ID_ = #{parameter} order by NAME_ asc
  /select  
 
 /mapper

主要就是修改 insert resultMap 的內容

步驟 3:加載數據文件時候,設置 SYS_,SWITCHBOARD_的值

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 RepositoryService repositoryService = processEngine.getRepositoryService();
 DeploymentBuilderImpl deploymentBuilder =(DeploymentBuilderImpl) repositoryService.createDeployment()
 .addClasspathResource( activiti/leave.bpmn 
 DeploymentEntity deploymentEntity = deploymentBuilder.getDeployment();
 ResourceEntity resourceEntity = deploymentEntity.getResource( activiti/leave.bpmn 
 resourceEntity.setSwitchboard(getSwitchboard());
 resourceEntity.setSys(true);
 deploymentEntity.addResource(resourceEntity);
 deploymentBuilder.deploy();

注:這里主要是通過 ResourceEntity resourceEntity = deploymentEntity.getResource(activiti/leave.bpmn 獲得數據庫獲得對應的實體,然后設置我們新添加的字段的值。

測試結果:

看到上面的數據,SYS_,SWITCHBOARD_字段都有值了,activiti/leave.bpmn 是正確的,但是 activiti/leave.leave.png 對應的值是不正確的。因為這 2 個添加的值因該是一樣的。

下面繼續修改:

步驟 4:org.activiti.engine.impl.bpmn.deployer.BpmnDeployer, 加載 activiti/leave.bpmn 中的圖片

 public void deploy(DeploymentEntity deployment) { createResource(resourceName,diagramResourceName, diagramBytes, deployment);
protected void createResource(String resourceName ,String name, byte[] bytes, DeploymentEntity deploymentEntity) { ResourceEntity resource = new ResourceEntity();
 resource.setName(name);
 resource.setBytes(bytes);
 resource.setDeploymentId(deploymentEntity.getId());
 
 ResourceEntity resourceEntity = deploymentEntity.getResource(resourceName);
 if(resourceEntity!=null){  resource.setSwitchboard(resourceEntity.getSwitchboard());
  resource.setSys(resourceEntity.isSys());
 }
 // Mark the resource as  generated 
 resource.setGenerated(true);
 
 Context
 .getCommandContext()
 .getDbSqlSession()
 .insert(resource);
 }

有人要問,問什么要這么修改,沒辦法,我是一步一步 debug,一步一步看源碼。

步驟 5:文件 org.activiti.db.mapping.entity.VariableInstance.xml,添加 SYS_,SWITCHBOARD_字段:

  !-- BYTE ARRAY INSERT -- 
  insert id= insertByteArray  parameterType= org.activiti.engine.impl.persistence.entity.ByteArrayEntity 
 insert into ${prefix}ACT_GE_BYTEARRAY(ID_, REV_, NAME_, BYTES_, DEPLOYMENT_ID_,SWITCHBOARD_,SYS_)
 values ( #{id, jdbcType=VARCHAR},
 1, 
 #{name, jdbcType=VARCHAR}, 
 #{bytes, jdbcType=BLOB}, 
 #{deploymentId, jdbcType=VARCHAR},
 #{switchboard, jdbcType=VARCHAR},
 #{sys, jdbcType=BOOLEAN}
 ) 
  /insert

然后測試結果:

 

到此,關于“activiti 原表怎么增加新字段”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計6772字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 谢通门县| 司法| 芜湖市| 水富县| 滦平县| 襄樊市| 大理市| 宿迁市| 合水县| 炎陵县| 醴陵市| 长白| 许昌县| 中牟县| 新建县| 库伦旗| 渝北区| 满洲里市| 巴东县| 长岭县| 巴楚县| 宁海县| 信宜市| 司法| 夏河县| 泰来县| 临清市| 隆昌县| 叙永县| 饶平县| 黄龙县| 资阳市| 松潘县| 南漳县| 乌拉特中旗| 延安市| 名山县| 普兰店市| 辛集市| 平凉市| 醴陵市|