因為網上的資料比較少。結合源碼把相關API寫下來。
設置流程級別變量:
runtimeService.startProcessInstanceById(
template.getTemplateId(), variables);
runtimeService.setVariables(executionId, variables);
taskService.complete(String.valueOf(taskId), variables); //流程變量 這個開始我以為是設置任務變量 看了一下源碼才發現是流程級別的
設置任務級別變量:
taskService.setVariable(String.valueOf(taskId), "va", "2"); //任務級別 變量
變量表:
select * from act_hi_varinst
setVariables 和 setVariablesLocal區別?
可以簡單認為,variable都是針對processInstance的。
local可能是針對某個execution分支的,也可能針對task的。
這里就要談一下變量的作用域,變量肯定是依附於某個流程里的概念而存在的,所以才能在流程流轉過程中使用這些變量。
默認的變量都是流程實例級別的,也就是說,分支execution和task都可以讀取到對應processInstance里的變量。
與之相對的就是local變量,簡單來說就不是processInstance范圍的變量,如何區分global和local呢?差別就是local的作用范圍小,如果是分支execution的local變量,就只能在execution分支生存期使用。
比如並發分支結束了,變量也就沒了
比如task結束了,變量也就沒了。
local變量的好處是,可以在每個分支使用同名的變量,互相之間不受影響,會簽multi-instance就是通過local局部變量實現的。