fix: 修复开始表单旧工作流兼容回退
- 避免旧开始节点缺失 user_input 时运行态强行注入系统问题字段 - 补充运行参数解析兼容测试并收口 M12 尾项
This commit is contained in:
@@ -128,6 +128,10 @@ public class WorkflowRunningParameterResolver {
|
|||||||
JSONArray rawSchema = startNodeData == null ? null : startNodeData.getJSONArray("startFormSchema");
|
JSONArray rawSchema = startNodeData == null ? null : startNodeData.getJSONArray("startFormSchema");
|
||||||
List<Map<String, Object>> schema = new ArrayList<>();
|
List<Map<String, Object>> schema = new ArrayList<>();
|
||||||
Set<String> seenKeys = new LinkedHashSet<>();
|
Set<String> seenKeys = new LinkedHashSet<>();
|
||||||
|
boolean hasExplicitSchema = rawSchema != null;
|
||||||
|
boolean hasSystemParameter = parameters.stream().anyMatch(parameter ->
|
||||||
|
SYSTEM_START_PARAM_NAME.equals(trimToNull(parameter == null ? null : parameter.getName()))
|
||||||
|
);
|
||||||
if (rawSchema != null && !rawSchema.isEmpty()) {
|
if (rawSchema != null && !rawSchema.isEmpty()) {
|
||||||
for (int i = 0; i < rawSchema.size(); i++) {
|
for (int i = 0; i < rawSchema.size(); i++) {
|
||||||
JSONObject field = rawSchema.getJSONObject(i);
|
JSONObject field = rawSchema.getJSONObject(i);
|
||||||
@@ -163,7 +167,7 @@ public class WorkflowRunningParameterResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!seenKeys.contains(SYSTEM_START_PARAM_NAME)) {
|
if (!seenKeys.contains(SYSTEM_START_PARAM_NAME) && (hasExplicitSchema || hasSystemParameter)) {
|
||||||
schema.add(0, normalizeStartFormField(new JSONObject(), null));
|
schema.add(0, normalizeStartFormField(new JSONObject(), null));
|
||||||
}
|
}
|
||||||
return schema;
|
return schema;
|
||||||
|
|||||||
@@ -106,6 +106,35 @@ public class WorkflowRunningParameterResolverTest {
|
|||||||
Assert.assertEquals("file", fields.get(1).get("type"));
|
Assert.assertEquals("file", fields.get(1).get("type"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 旧工作流若不存在系统问题参数,运行态不应凭空注入 user_input。
|
||||||
|
*
|
||||||
|
* @throws Exception 反射注入失败
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testBuildRunningParametersViewShouldNotInjectUserInputForLegacyParametersWithoutSystemField() throws Exception {
|
||||||
|
WorkflowRunningParameterResolver resolver = newResolver();
|
||||||
|
JSONObject startData = data("开始");
|
||||||
|
startData.put("parameters", startParametersWithoutUserInput());
|
||||||
|
|
||||||
|
Workflow workflow = workflow(
|
||||||
|
workflowJson(
|
||||||
|
array(
|
||||||
|
node("s1", "startNode", null, startData),
|
||||||
|
node("e1", "endNode", null, data("结束"))
|
||||||
|
),
|
||||||
|
array(edge("e1", "s1", "e1"))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, Object> result = resolver.buildRunningParametersView(workflow);
|
||||||
|
Assert.assertNotNull(result);
|
||||||
|
List<Map<String, Object>> fields = (List<Map<String, Object>>) result.get("startFormSchema");
|
||||||
|
Assert.assertEquals(1, fields.size());
|
||||||
|
Assert.assertEquals("attachments", fields.get(0).get("key"));
|
||||||
|
Assert.assertEquals("file", fields.get(0).get("type"));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件参数运行值应统一归一化为数组并按 filePath 去重。
|
* 文件参数运行值应统一归一化为数组并按 filePath 去重。
|
||||||
*
|
*
|
||||||
@@ -209,6 +238,21 @@ public class WorkflowRunningParameterResolverTest {
|
|||||||
return parameters;
|
return parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static JSONArray startParametersWithoutUserInput() {
|
||||||
|
JSONArray parameters = new JSONArray();
|
||||||
|
|
||||||
|
JSONObject fileField = new JSONObject();
|
||||||
|
fileField.put("name", "attachments");
|
||||||
|
fileField.put("dataType", "File");
|
||||||
|
fileField.put("refType", "input");
|
||||||
|
fileField.put("required", false);
|
||||||
|
fileField.put("contentType", "file");
|
||||||
|
fileField.put("formType", "input");
|
||||||
|
fileField.put("formLabel", "附件");
|
||||||
|
parameters.add(fileField);
|
||||||
|
return parameters;
|
||||||
|
}
|
||||||
|
|
||||||
private static Map<String, Object> fileValue(String fileName, String filePath, Long size) {
|
private static Map<String, Object> fileValue(String fileName, String filePath, Long size) {
|
||||||
Map<String, Object> value = new LinkedHashMap<>();
|
Map<String, Object> value = new LinkedHashMap<>();
|
||||||
value.put("fileName", fileName);
|
value.put("fileName", fileName);
|
||||||
|
|||||||
Reference in New Issue
Block a user