weaver-e10-builder 1.5.16 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +4 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/form-ebuilder-scope.d.ts +21 -0
- package/dist/commands/form-ebuilder-scope.d.ts.map +1 -1
- package/dist/commands/form-ebuilder-scope.js +41 -8
- package/dist/commands/form-ebuilder-scope.js.map +1 -1
- package/dist/commands/form-layout-code-reviewed.d.ts +3 -0
- package/dist/commands/form-layout-code-reviewed.d.ts.map +1 -0
- package/dist/commands/form-layout-code-reviewed.js +61 -0
- package/dist/commands/form-layout-code-reviewed.js.map +1 -0
- package/dist/commands/form-layout-describe.d.ts +3 -0
- package/dist/commands/form-layout-describe.d.ts.map +1 -0
- package/dist/commands/form-layout-describe.js +58 -0
- package/dist/commands/form-layout-describe.js.map +1 -0
- package/dist/commands/form-layout-diff.d.ts +3 -0
- package/dist/commands/form-layout-diff.d.ts.map +1 -0
- package/dist/commands/form-layout-diff.js +48 -0
- package/dist/commands/form-layout-diff.js.map +1 -0
- package/dist/commands/form-layout-document.d.ts +3 -0
- package/dist/commands/form-layout-document.d.ts.map +1 -0
- package/dist/commands/form-layout-document.js +81 -0
- package/dist/commands/form-layout-document.js.map +1 -0
- package/dist/commands/form-layout-edit.d.ts +3 -0
- package/dist/commands/form-layout-edit.d.ts.map +1 -0
- package/dist/commands/form-layout-edit.js +51 -0
- package/dist/commands/form-layout-edit.js.map +1 -0
- package/dist/commands/form-layout-init-reviewed.d.ts +3 -0
- package/dist/commands/form-layout-init-reviewed.d.ts.map +1 -0
- package/dist/commands/form-layout-init-reviewed.js +78 -0
- package/dist/commands/form-layout-init-reviewed.js.map +1 -0
- package/dist/commands/form-layout-restore.d.ts.map +1 -1
- package/dist/commands/form-layout-restore.js +23 -0
- package/dist/commands/form-layout-restore.js.map +1 -1
- package/dist/commands/form-layout-template-catalog.d.ts +3 -0
- package/dist/commands/form-layout-template-catalog.d.ts.map +1 -0
- package/dist/commands/form-layout-template-catalog.js +45 -0
- package/dist/commands/form-layout-template-catalog.js.map +1 -0
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +33 -3
- package/dist/commands/form.js.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +12 -5
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_add_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add_compiler.js +5 -0
- package/dist/services/actionflow/components/action_eb_add_compiler.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete.d.ts +6 -1
- package/dist/services/actionflow/components/action_eb_delete.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete.js +23 -5
- package/dist/services/actionflow/components/action_eb_delete.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_delete_compiler.js +22 -0
- package/dist/services/actionflow/components/action_eb_delete_compiler.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.js +13 -4
- package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.js +9 -2
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
- package/dist/services/actionflow/components/date_trigger.js +2 -2
- package/dist/services/actionflow/components/date_trigger.js.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.d.ts.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +11 -10
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/event_button.js +1 -1
- package/dist/services/actionflow/components/event_button.js.map +1 -1
- package/dist/services/actionflow/components/form_data_builder.d.ts +29 -1
- package/dist/services/actionflow/components/form_data_builder.d.ts.map +1 -1
- package/dist/services/actionflow/components/form_data_builder.js +67 -3
- package/dist/services/actionflow/components/form_data_builder.js.map +1 -1
- package/dist/services/actionflow/components/time_batch_trigger.js +2 -2
- package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
- package/dist/services/actionflow/form_source.d.ts +44 -1
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +231 -5
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts +8 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +120 -14
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/system_params.d.ts.map +1 -1
- package/dist/services/actionflow/system_params.js +4 -1
- package/dist/services/actionflow/system_params.js.map +1 -1
- package/dist/services/actionflow/trigger_common.d.ts.map +1 -1
- package/dist/services/actionflow/trigger_common.js +12 -3
- package/dist/services/actionflow/trigger_common.js.map +1 -1
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +117 -40
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/form-layout-code-reviewed.d.ts +32 -0
- package/dist/services/form-layout-code-reviewed.d.ts.map +1 -0
- package/dist/services/form-layout-code-reviewed.js +101 -0
- package/dist/services/form-layout-code-reviewed.js.map +1 -0
- package/dist/services/form-layout-describe.d.ts +4 -0
- package/dist/services/form-layout-describe.d.ts.map +1 -0
- package/dist/services/form-layout-describe.js +107 -0
- package/dist/services/form-layout-describe.js.map +1 -0
- package/dist/services/form-layout-diff.d.ts +37 -0
- package/dist/services/form-layout-diff.d.ts.map +1 -0
- package/dist/services/form-layout-diff.js +232 -0
- package/dist/services/form-layout-diff.js.map +1 -0
- package/dist/services/form-layout-document-apply.d.ts +23 -0
- package/dist/services/form-layout-document-apply.d.ts.map +1 -0
- package/dist/services/form-layout-document-apply.js +82 -0
- package/dist/services/form-layout-document-apply.js.map +1 -0
- package/dist/services/form-layout-document.d.ts +13 -0
- package/dist/services/form-layout-document.d.ts.map +1 -0
- package/dist/services/form-layout-document.js +228 -0
- package/dist/services/form-layout-document.js.map +1 -0
- package/dist/services/form-layout-edit.d.ts +21 -0
- package/dist/services/form-layout-edit.d.ts.map +1 -0
- package/dist/services/form-layout-edit.js +103 -0
- package/dist/services/form-layout-edit.js.map +1 -0
- package/dist/services/form-layout-init-plan.d.ts +54 -0
- package/dist/services/form-layout-init-plan.d.ts.map +1 -0
- package/dist/services/form-layout-init-plan.js +211 -0
- package/dist/services/form-layout-init-plan.js.map +1 -0
- package/dist/services/form-layout-source/review.d.ts +4 -0
- package/dist/services/form-layout-source/review.d.ts.map +1 -0
- package/dist/services/form-layout-source/review.js +54 -0
- package/dist/services/form-layout-source/review.js.map +1 -0
- package/dist/services/form-layout-template-advanced.d.ts +5 -0
- package/dist/services/form-layout-template-advanced.d.ts.map +1 -1
- package/dist/services/form-layout-template-advanced.js +17 -1
- package/dist/services/form-layout-template-advanced.js.map +1 -1
- package/dist/services/form-layout-template-catalog.d.ts +13 -0
- package/dist/services/form-layout-template-catalog.d.ts.map +1 -0
- package/dist/services/form-layout-template-catalog.js +27 -0
- package/dist/services/form-layout-template-catalog.js.map +1 -0
- package/dist/services/form-layout-template-flow.d.ts +1 -1
- package/dist/services/form-layout-template-flow.d.ts.map +1 -1
- package/dist/services/form-layout-template-flow.js.map +1 -1
- package/dist/services/form-layout-template-verification.d.ts +34 -0
- package/dist/services/form-layout-template-verification.d.ts.map +1 -0
- package/dist/services/form-layout-template-verification.js +124 -0
- package/dist/services/form-layout-template-verification.js.map +1 -0
- package/dist/services/form-style-template.d.ts +3 -3
- package/dist/services/form-style-template.d.ts.map +1 -1
- package/dist/services/form-style-template.js +18 -13
- package/dist/services/form-style-template.js.map +1 -1
- package/package.json +1 -1
- package/skill-docs/SKILL.md +24 -19
- package/skill-docs/_catalog.md +108 -106
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbDelete.md +60 -3
- package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +35 -33
- package/skill-docs/references/common/capability-boundaries.md +20 -1
- package/skill-docs/references/common/guide-plan-template.md +29 -3
- package/skill-docs/references/common/map.md +11 -7
- package/skill-docs/references/common/ref-cli-commands.md +18 -4
- package/skill-docs/references/form/guide-browser-definition.md +57 -13
- package/skill-docs/references/form/guide-create-form.md +258 -258
- package/skill-docs/references/form/layout/code-block/code-block-guide.md +153 -0
- package/skill-docs/references/form/layout/code-block/controls.md +60 -0
- package/skill-docs/references/form/layout/code-block/coverage.md +32 -0
- package/skill-docs/references/form/layout/code-block/details.md +57 -0
- package/skill-docs/references/form/layout/code-block/events-validation.md +42 -0
- package/skill-docs/references/form/layout/code-block/foundations-fields.md +56 -0
- package/skill-docs/references/form/layout/code-block/layout-css.md +116 -0
- package/skill-docs/references/form/layout/code-block/recipes.md +164 -0
- package/skill-docs/references/form/layout/code-block/troubleshooting.md +49 -0
- package/skill-docs/references/form/layout/code-block/ui-global.md +47 -0
- package/skill-docs/references/form/layout/document.md +39 -0
- package/skill-docs/references/form/layout/incremental.md +133 -0
- package/skill-docs/references/form/layout/initialization.md +39 -0
- package/skill-docs/references/form/layout/inspect-edit.md +76 -0
- package/skill-docs/references/form/layout/layout-overview.md +67 -0
- package/skill-docs/references/form/layout/management.md +64 -0
- package/skill-docs/references/form/layout/planning.md +76 -0
- package/skill-docs/references/form/layout/source-restoration.md +388 -0
- package/skill-docs/references/form/layout/template/advanced-css.md +167 -0
- package/skill-docs/references/form/layout/template/advanced.md +318 -0
- package/skill-docs/references/form/layout/template/easy.md +64 -0
- package/skill-docs/references/form/layout/template/flow.md +30 -0
- package/skill-docs/references/form/layout/template/template-guide.md +56 -0
- package/skill-docs/references/form/layout/workflow-layout.md +44 -0
- package/skill-docs/references/form/ref-form-fields.md +303 -301
- package/skill-docs/references/workflow/guide-workflow-node-layout.md +189 -187
|
@@ -22,6 +22,86 @@ import { genSfId } from './id_generator.js';
|
|
|
22
22
|
const FORM_FIELDS_CACHE = {};
|
|
23
23
|
const FORM_LIST_CACHE = {};
|
|
24
24
|
const FORM_LAYOUT_ID_CACHE = {};
|
|
25
|
+
function buttonRows(response) {
|
|
26
|
+
const data = response?.data ?? response;
|
|
27
|
+
for (const rows of [data?.data, data?.rows, data?.list, data?.records, data]) {
|
|
28
|
+
if (Array.isArray(rows))
|
|
29
|
+
return rows.filter((row) => row && typeof row === 'object');
|
|
30
|
+
}
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
function buttonId(row) {
|
|
34
|
+
return String(row?.id ?? row?.buttonId ?? row?.value ?? '').trim();
|
|
35
|
+
}
|
|
36
|
+
function buttonName(row) {
|
|
37
|
+
return String(row?.name ?? row?.content ?? row?.text ?? '').trim();
|
|
38
|
+
}
|
|
39
|
+
function supportsTriggerBefore(row) {
|
|
40
|
+
const value = row?.needTriggerBefore;
|
|
41
|
+
return value === true || value === 1 || value === '1' || String(value).toLowerCase() === 'true';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 按前端 EventButton 的真实按钮列表归一化按钮触发配置。
|
|
45
|
+
* 前端 eventButton/index.tsx 会用 needTriggerBefore 控制“执行前”下拉框,
|
|
46
|
+
* 因此 CLI 不能只校验 buttonLocation 枚举,还必须确认当前按钮确实支持 before。
|
|
47
|
+
*/
|
|
48
|
+
export function normalizeEventButtonSelection(selected, available) {
|
|
49
|
+
if (!Array.isArray(selected) || selected.length === 0) {
|
|
50
|
+
throw new Error('EventButton.buttonType 必须至少选择一个真实按钮');
|
|
51
|
+
}
|
|
52
|
+
if (!available.length) {
|
|
53
|
+
throw new Error('EventButton.buttonType 查询不到当前表单可绑定的真实按钮');
|
|
54
|
+
}
|
|
55
|
+
const byId = new Map(available
|
|
56
|
+
.map((row) => [buttonId(row), row])
|
|
57
|
+
.filter(([id]) => Boolean(id)));
|
|
58
|
+
return selected.map((item, index) => {
|
|
59
|
+
const requested = item && typeof item === 'object' ? item : {};
|
|
60
|
+
const id = String(requested.id || '').trim();
|
|
61
|
+
const location = String(requested.buttonLocation || '').trim();
|
|
62
|
+
if (!id)
|
|
63
|
+
throw new Error(`EventButton.buttonType[${index}].id 缺失;必须使用 form-buttons 返回的真实按钮 ID`);
|
|
64
|
+
if (!['before', 'after'].includes(location)) {
|
|
65
|
+
throw new Error(`EventButton.buttonType[${index}].buttonLocation 仅支持 before 或 after`);
|
|
66
|
+
}
|
|
67
|
+
const live = byId.get(id);
|
|
68
|
+
if (!live)
|
|
69
|
+
throw new Error(`EventButton.buttonType[${index}] 的按钮 ID '${id}' 不属于当前表单真实按钮列表`);
|
|
70
|
+
if (location === 'before' && !supportsTriggerBefore(live)) {
|
|
71
|
+
const name = buttonName(live) || String(requested.name || id);
|
|
72
|
+
throw new Error(`EventButton.buttonType[${index}] 按钮“${name}”不支持执行前触发(前端 needTriggerBefore 未开启)`);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
...requested,
|
|
76
|
+
id,
|
|
77
|
+
// 以当前租户按钮列表的名称为准,避免计划中的旧名称被原样写回。
|
|
78
|
+
name: buttonName(live) || String(requested.name || '').trim(),
|
|
79
|
+
buttonLocation: location,
|
|
80
|
+
asyncExecution: requested.asyncExecution ?? false,
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/** 查询并校验 EventButton 的真实按钮及“执行前”能力。 */
|
|
85
|
+
export async function resolveEventButtonSelection(plan, client) {
|
|
86
|
+
const event = plan.event;
|
|
87
|
+
if (!event || typeof event !== 'object' || String(event.type || '') !== 'EventButton')
|
|
88
|
+
return [];
|
|
89
|
+
const params = event.params ??= {};
|
|
90
|
+
const targetForm = params.targetForm;
|
|
91
|
+
const formId = String(targetForm?.id || targetForm?.objId || '').trim();
|
|
92
|
+
const appId = String(targetForm?.groupId || targetForm?.appId || '').trim();
|
|
93
|
+
if (!formId || !appId)
|
|
94
|
+
throw new Error('EventButton.targetForm 必须包含真实表单 id 和 groupId,才能查询按钮列表');
|
|
95
|
+
const response = await formSource.getButtons(client, formId, appId);
|
|
96
|
+
const normalized = normalizeEventButtonSelection(params.buttonType, buttonRows(response));
|
|
97
|
+
params.buttonType = normalized;
|
|
98
|
+
return normalized.map((button) => ({
|
|
99
|
+
path: 'event.params.buttonType',
|
|
100
|
+
resourceType: 'ebuilder_button',
|
|
101
|
+
value: { id: button.id, name: button.name, buttonLocation: button.buttonLocation },
|
|
102
|
+
reason: '按钮已从当前租户表单按钮列表校验,执行前触发同时校验 needTriggerBefore',
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
25
105
|
/** 取得计划选择的流程表单(objId),用于 Workflow 条件左值的关联对象元数据。 */
|
|
26
106
|
async function resolveWorkflowFormObject(plan, client, groupId) {
|
|
27
107
|
const eventParams = plan.event?.params || {};
|
|
@@ -106,6 +186,11 @@ export function stepFormRef(step) {
|
|
|
106
186
|
ref = step.dataSource || step.targetForm;
|
|
107
187
|
return ref && typeof ref === 'object' ? ref : null;
|
|
108
188
|
}
|
|
189
|
+
function needsLegacyFormResolution(ref) {
|
|
190
|
+
if (!ref || typeof ref !== 'object')
|
|
191
|
+
return false;
|
|
192
|
+
return formSource.actionflowDataSourceKind(ref) === 'ebuilder';
|
|
193
|
+
}
|
|
109
194
|
/** 查 form-fields 返回完整字段列表(id/showName/componentKey/paramType),进程缓存。 */
|
|
110
195
|
export async function getFormFieldsFull(formId, client, tf) {
|
|
111
196
|
if (formId in FORM_FIELDS_CACHE) {
|
|
@@ -269,7 +354,7 @@ export async function resolveTargetForms(plan, client) {
|
|
|
269
354
|
if (['EventFormData', 'EventButton', 'TimeBatchTrigger', 'DateTrigger', 'EnquiryForm'].includes(step.type)) {
|
|
270
355
|
const ds = (step.params || {}).dataSource || (step.params || {}).targetForm;
|
|
271
356
|
if (ds && typeof ds === 'object' && ds.id) {
|
|
272
|
-
if (!ds.groupId || !ds.name || !ds.text || !ds.groupName)
|
|
357
|
+
if (needsLegacyFormResolution(ds) && (!ds.groupId || !ds.name || !ds.text || !ds.groupName))
|
|
273
358
|
unresolved.push(String(ds.id));
|
|
274
359
|
}
|
|
275
360
|
}
|
|
@@ -280,7 +365,7 @@ export async function resolveTargetForms(plan, client) {
|
|
|
280
365
|
if (ep && typeof ep === 'object') {
|
|
281
366
|
const es = ep.targetForm || ep.dataSource;
|
|
282
367
|
if (es && typeof es === 'object' && es.id) {
|
|
283
|
-
if (!es.groupId || !es.name || !es.text || !es.groupName)
|
|
368
|
+
if (needsLegacyFormResolution(es) && (!es.groupId || !es.name || !es.text || !es.groupName))
|
|
284
369
|
unresolved.push(String(es.id));
|
|
285
370
|
}
|
|
286
371
|
}
|
|
@@ -308,8 +393,10 @@ export async function resolveTargetForms(plan, client) {
|
|
|
308
393
|
const groupForms = async (groupId) => {
|
|
309
394
|
const idx = {};
|
|
310
395
|
try {
|
|
311
|
-
|
|
312
|
-
|
|
396
|
+
// 数据源 Browser 已废弃旧的 sourceType=FORM 列表协议;按前端 listByPage
|
|
397
|
+
// 使用 LOGIC + e-builder 服务组,避免预检阶段又走回旧接口。
|
|
398
|
+
const forms = await formSource.dsListByPage(client, 'ebuilder', { appId: groupId, pageSize: 500 });
|
|
399
|
+
for (const f of formSource.dataSourceRows(forms)) {
|
|
313
400
|
if (f && typeof f === 'object' && f.id) {
|
|
314
401
|
idx[String(f.id)] = { groupId, groupName: await applicationName(groupId), name: String(f.name || '') };
|
|
315
402
|
}
|
|
@@ -2270,6 +2357,14 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2270
2357
|
catch (error) {
|
|
2271
2358
|
errors.push(`DocumentSave 目标文件夹查询失败: ${String(error?.message || error)}`);
|
|
2272
2359
|
}
|
|
2360
|
+
try {
|
|
2361
|
+
// 三类数据源统一先走前端 Browser:已有真实 id 的引用只补协议,
|
|
2362
|
+
// 仅提供名称时才调用对应的 EBUILDER/业务模块/数据准备接口检索。
|
|
2363
|
+
await formSource.resolveActionflowDataSources(plan, client);
|
|
2364
|
+
}
|
|
2365
|
+
catch (error) {
|
|
2366
|
+
errors.push(`动作流数据源 Browser 查询失败: ${String(error?.message || error)}`);
|
|
2367
|
+
}
|
|
2273
2368
|
await resolveEntrustFields(plan, client, errors);
|
|
2274
2369
|
await resolveHrmFieldAssignments(plan, client, errors);
|
|
2275
2370
|
await resolveHrmAlterTypeFieldAssignments(plan, client, errors);
|
|
@@ -2291,6 +2386,16 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2291
2386
|
catch {
|
|
2292
2387
|
// 忽略
|
|
2293
2388
|
}
|
|
2389
|
+
// EventButton 的 targetForm 可能只提供表单 id;先完成 targetForm 的实时归属回填,
|
|
2390
|
+
// 再按前端 getButtonList 校验真实按钮以及 before 能力。
|
|
2391
|
+
try {
|
|
2392
|
+
const buttonResources = await resolveEventButtonSelection(plan, client);
|
|
2393
|
+
if (buttonResources.length)
|
|
2394
|
+
(plan._autoResources ??= []).push(...buttonResources);
|
|
2395
|
+
}
|
|
2396
|
+
catch (error) {
|
|
2397
|
+
errors.push(`EventButton 按钮查询/执行前能力校验失败: ${String(error?.message || error)}`);
|
|
2398
|
+
}
|
|
2294
2399
|
// 查并登记所有目标表单字段元数据(转换前必须有 fieldType/componentKey)
|
|
2295
2400
|
const hydrateFilterFields = async (steps) => {
|
|
2296
2401
|
for (const step of steps || []) {
|
|
@@ -2300,7 +2405,10 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2300
2405
|
const tf = stepFormRef(step);
|
|
2301
2406
|
if (tf && tf.id) {
|
|
2302
2407
|
const formId = String(tf.id);
|
|
2303
|
-
|
|
2408
|
+
// 删除表单数据的前端 ConditionSet 也绑定 dataSource 字段选择器,
|
|
2409
|
+
// 条件左值必须和前端一样来自 /api/ebuilder/common/ds/fields。
|
|
2410
|
+
const strictConditionSource = ['ActionEbDelete', 'EnquiryForm', 'TimeBatchTrigger', 'DateTrigger'].includes(step.type);
|
|
2411
|
+
const sourceProtocol = formSource.actionflowDataSourceProtocol(tf);
|
|
2304
2412
|
// 数据源查询/触发组件的字段不是普通 EB 表单字段:
|
|
2305
2413
|
// 它们必须来自 /api/ebuilder/common/ds/fields,不能先调用 getEbField。
|
|
2306
2414
|
let fields = strictConditionSource ? [] : await getFormFieldsFull(formId, client, tf);
|
|
@@ -2309,7 +2417,7 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2309
2417
|
// “默认全选”必须在计划层固化为实时字段列表。仅在编译期依赖全局缓存时,
|
|
2310
2418
|
// 查询组件偶尔会只保留系统字段,筛选编辑器因此把业务字段标成“已删除”。
|
|
2311
2419
|
const params = step.params && typeof step.params === 'object' ? step.params : (step.params = {});
|
|
2312
|
-
if (['EnquiryForm', 'TimeBatchTrigger', 'DateTrigger'].includes(step.type)
|
|
2420
|
+
if (['ActionEbDelete', 'EnquiryForm', 'TimeBatchTrigger', 'DateTrigger'].includes(step.type)
|
|
2313
2421
|
|| (step.type === 'ActionEbUpdate' && ['updateData', 'fieldUpdate'].includes(String(params.opType || 'updateData')))) {
|
|
2314
2422
|
// EnquiryForm/条件更新的筛选条件左值必须来自数据源字段选择器,
|
|
2315
2423
|
// 而不是只用 getEbField 的表单字段对象。后者经常缺少数据源侧的
|
|
@@ -2317,7 +2425,7 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2317
2425
|
// 或保存时静默丢弃。
|
|
2318
2426
|
let dataSourceFields = [];
|
|
2319
2427
|
try {
|
|
2320
|
-
const dataSourceResponse = await formSource.dataSourceFields(client, formId, true);
|
|
2428
|
+
const dataSourceResponse = await formSource.dataSourceFields(client, formId, true, sourceProtocol);
|
|
2321
2429
|
dataSourceFields = normalizeShowDataSourceFields(dataSourceResponse, formId)
|
|
2322
2430
|
.map((field) => normalizeDataSourceField(field, formId))
|
|
2323
2431
|
.filter((field) => Boolean(field?.id));
|
|
@@ -2329,12 +2437,12 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2329
2437
|
}
|
|
2330
2438
|
if (dataSourceFields.length)
|
|
2331
2439
|
registerTargetFormFields(formId, dataSourceFields);
|
|
2332
|
-
if (strictConditionSource && !dataSourceFields.length) {
|
|
2440
|
+
if (strictConditionSource && sourceProtocol.kind !== 'data_processing' && !dataSourceFields.length) {
|
|
2333
2441
|
errors.push(`${step.type}.filterCondition: /api/ebuilder/common/ds/fields 未返回数据源字段,拒绝使用 getEbField 生成条件左值。`);
|
|
2334
2442
|
}
|
|
2335
2443
|
}
|
|
2336
2444
|
catch (error) {
|
|
2337
|
-
if (strictConditionSource) {
|
|
2445
|
+
if (strictConditionSource && sourceProtocol.kind !== 'data_processing') {
|
|
2338
2446
|
replaceTargetDataSourceFields(formId, []);
|
|
2339
2447
|
errors.push(`${step.type}.filterCondition: /api/ebuilder/common/ds/fields 查询失败,拒绝使用 getEbField 生成条件左值:${String(error?.message || error)}`);
|
|
2340
2448
|
}
|
|
@@ -2346,7 +2454,7 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2346
2454
|
|| groupFields.length > 0 || groupMessage.length > 0;
|
|
2347
2455
|
if (needsGroupFieldLookup) {
|
|
2348
2456
|
try {
|
|
2349
|
-
const selectorResponse = await formSource.getDataSourceFields(client,
|
|
2457
|
+
const selectorResponse = await formSource.getDataSourceFields(client, sourceProtocol.sourceType, sourceProtocol.groupId, formId);
|
|
2350
2458
|
const selectorFields = normalizeDataSourceSelectorFields(selectorResponse, formId);
|
|
2351
2459
|
const byId = new Map();
|
|
2352
2460
|
for (const field of selectorFields) {
|
|
@@ -2383,9 +2491,7 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2383
2491
|
// 否则后端会静默丢弃业务字段。
|
|
2384
2492
|
let selectable = [];
|
|
2385
2493
|
try {
|
|
2386
|
-
|
|
2387
|
-
// tf.groupId 是业务应用 ID,传它会得到空字段列表,进而把 queryFields 留成不完整的 plan 对象。
|
|
2388
|
-
const resp = await formSource.showDataSourceFields(client, formId, 'weaver-ebuilder-form-service', 'LOGIC');
|
|
2494
|
+
const resp = await formSource.showDataSourceFields(client, formId, sourceProtocol.groupId, sourceProtocol.sourceType);
|
|
2389
2495
|
selectable = normalizeShowDataSourceFields(resp, formId);
|
|
2390
2496
|
}
|
|
2391
2497
|
catch {
|
|
@@ -2396,7 +2502,7 @@ export async function preflightContext(plan, appId, client) {
|
|
|
2396
2502
|
let physicalTable = String(selectable.find((f) => f?.physicalTable)?.physicalTable || fields.find((f) => f?.physicalTable)?.physicalTable || '');
|
|
2397
2503
|
if (!physicalTable) {
|
|
2398
2504
|
try {
|
|
2399
|
-
const full = await formSource.dataSourceFields(client, formId);
|
|
2505
|
+
const full = await formSource.dataSourceFields(client, formId, true, sourceProtocol);
|
|
2400
2506
|
const walkPhysical = (items) => {
|
|
2401
2507
|
for (const item of items || []) {
|
|
2402
2508
|
if (item?.physicalTable)
|