// FlowData —— 流程/任务变量载体(对齐 java LinkedHashMap,rust FlowData)
///|
pub(all) struct FlowData {
inner : Map[String, Json]
}
///|
pub fn FlowData::new() -> FlowData {
{ inner: Map([]) }
}
///|
pub fn FlowData::from_map(map : Map[String, Json]) -> FlowData {
{ inner: map }
}
///|
pub fn FlowData::get(self : FlowData, key : String) -> Json? {
self.inner.get(key)
}
///|
pub fn FlowData::get_str(self : FlowData, key : String) -> String? {
match self.inner.get(key) {
Some(v) => as_str(v)
None => None
}
}
///|
pub fn FlowData::get_i64(self : FlowData, key : String) -> Int64? {
match self.inner.get(key) {
Some(v) => as_i64(v)
None => None
}
}
///|
///|
/// 数组形态的字符串列表读取(issues/131:会签名册 `operatorList_{node}` 是数组,
/// 与 java `ProcessInstance.java:257` 存的 List 同形)。缺键/非数组 ⇒ 空表;
/// 有意**不兜**旧的逗号串——存量兼容不做(owner 2026-09-28:demo 重启即重建、pro 是 goframe 版本)。
///|
/// 数组形态的字符串列表写入(issues/131:会签名册 operatorList_{node} 存数组,
/// 与 java `ProcessInstance.java:257` 的 List 同形;写侧收在 json 包里,
/// 引擎侧不必引用 Json 类型名)。
pub fn FlowData::insert_string_array(self : FlowData, key : String, items : Array[String]) -> Unit {
let arr = empty_array()
for s in items {
arr_push(arr, string_of(s))
}
self.inner[key] = arr
}
pub fn FlowData::get_string_array(self : FlowData, key : String) -> Array[String] {
let out : Array[String] = []
match self.inner.get(key) {
Some(v) =>
match as_array(v) {
Some(items) =>
for it in items {
match as_str(it) {
Some(s) => if s != "" { out.push(s) }
None => ()
}
}
None => ()
}
None => ()
}
out
}
pub fn FlowData::get_str_or(self : FlowData, key : String, default : String) -> String {
match self.get_str(key) {
Some(s) => s
None => default
}
}
///|
pub fn FlowData::get_i64_or(self : FlowData, key : String, default : Int64) -> Int64 {
match self.get_i64(key) {
Some(v) => v
None => default
}
}
///|
pub fn FlowData::insert(self : FlowData, key : String, value : Json) -> Unit {
self.inner[key] = value
}
///|
pub fn FlowData::insert_str(self : FlowData, key : String, value : String) -> Unit {
self.inner[key] = string_of(value)
}
///|
pub fn FlowData::insert_i64(self : FlowData, key : String, value : Int64) -> Unit {
self.inner[key] = number_of(value)
}
///|
pub fn FlowData::contains_key(self : FlowData, key : String) -> Bool {
self.inner.get(key) is Some(_)
}
///|
pub fn FlowData::remove(self : FlowData, key : String) -> Json? {
let v = self.inner.get(key)
self.inner.remove(key)
v
}
///|
pub fn FlowData::len(self : FlowData) -> Int {
self.inner.length()
}
///|
pub fn FlowData::is_empty(self : FlowData) -> Bool {
self.inner.length() == 0
}
///|
pub fn FlowData::merge(self : FlowData, other : FlowData) -> Unit {
for k, v in other.inner {
self.inner[k] = v
}
}
///|
pub fn FlowData::keys_with_prefix(self : FlowData, prefix : String) -> Array[String] {
let out : Array[String] = []
for k, _ in self.inner {
if k.has_prefix(prefix) {
out.push(k)
}
}
out
}
///|
pub fn FlowData::inner(self : FlowData) -> Map[String, Json] {
self.inner
}
///|
pub fn FlowData::to_object_json(self : FlowData) -> Json {
let obj = empty_object()
for k, v in self.inner {
obj_set(obj, k, v)
}
obj
}
///|
/// 引用形态:返回底层 Map(读侧直查;写侧请经 insert 保持一致)
pub fn FlowData::iter_entries(self : FlowData) -> Array[(String, Json)] {
let out : Array[(String, Json)] = []
for k, v in self.inner {
out.push((k, v))
}
out
}