@sonisoft/now-sdk-ext-core 2.2.0 → 2.4.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/comm/http/RequestHandler.js +7 -11
- package/dist/comm/http/RequestHandler.js.map +1 -1
- package/dist/comm/http/TableAPIRequest.js +3 -10
- package/dist/comm/http/TableAPIRequest.js.map +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/sn/BackgroundScriptExecutor.d.ts +40 -0
- package/dist/sn/BackgroundScriptExecutor.js +129 -8
- package/dist/sn/BackgroundScriptExecutor.js.map +1 -1
- package/dist/sn/application/ApplicationManager.d.ts +58 -1
- package/dist/sn/application/ApplicationManager.js +202 -11
- package/dist/sn/application/ApplicationManager.js.map +1 -1
- package/dist/sn/application/StoreApplicationModels.d.ts +99 -0
- package/dist/sn/application/StoreApplicationModels.js +2 -0
- package/dist/sn/application/StoreApplicationModels.js.map +1 -0
- package/dist/sn/attachment/AttachmentManager.d.ts +32 -0
- package/dist/sn/attachment/AttachmentManager.js +87 -0
- package/dist/sn/attachment/AttachmentManager.js.map +1 -0
- package/dist/sn/attachment/AttachmentModels.d.ts +28 -0
- package/dist/sn/attachment/AttachmentModels.js +2 -0
- package/dist/sn/attachment/AttachmentModels.js.map +1 -0
- package/dist/sn/batch/BatchModels.d.ts +90 -0
- package/dist/sn/batch/BatchModels.js +5 -0
- package/dist/sn/batch/BatchModels.js.map +1 -0
- package/dist/sn/batch/BatchOperations.d.ts +40 -0
- package/dist/sn/batch/BatchOperations.js +169 -0
- package/dist/sn/batch/BatchOperations.js.map +1 -0
- package/dist/sn/schema/SchemaDiscovery.d.ts +68 -0
- package/dist/sn/schema/SchemaDiscovery.js +346 -0
- package/dist/sn/schema/SchemaDiscovery.js.map +1 -0
- package/dist/sn/schema/SchemaModels.d.ts +277 -0
- package/dist/sn/schema/SchemaModels.js +5 -0
- package/dist/sn/schema/SchemaModels.js.map +1 -0
- package/dist/sn/scope/ScopeManager.d.ts +51 -0
- package/dist/sn/scope/ScopeManager.js +177 -0
- package/dist/sn/scope/ScopeManager.js.map +1 -0
- package/dist/sn/scope/ScopeModels.d.ts +66 -0
- package/dist/sn/scope/ScopeModels.js +5 -0
- package/dist/sn/scope/ScopeModels.js.map +1 -0
- package/dist/sn/scriptsync/ScriptSync.d.ts +38 -0
- package/dist/sn/scriptsync/ScriptSync.js +266 -0
- package/dist/sn/scriptsync/ScriptSync.js.map +1 -0
- package/dist/sn/scriptsync/ScriptSyncModels.d.ts +55 -0
- package/dist/sn/scriptsync/ScriptSyncModels.js +8 -0
- package/dist/sn/scriptsync/ScriptSyncModels.js.map +1 -0
- package/dist/sn/scriptsync/ScriptWatcher.d.ts +30 -0
- package/dist/sn/scriptsync/ScriptWatcher.js +74 -0
- package/dist/sn/scriptsync/ScriptWatcher.js.map +1 -0
- package/dist/sn/task/TaskModels.d.ts +85 -0
- package/dist/sn/task/TaskModels.js +5 -0
- package/dist/sn/task/TaskModels.js.map +1 -0
- package/dist/sn/task/TaskOperations.d.ts +63 -0
- package/dist/sn/task/TaskOperations.js +195 -0
- package/dist/sn/task/TaskOperations.js.map +1 -0
- package/dist/sn/updateset/UpdateSetManager.d.ts +78 -0
- package/dist/sn/updateset/UpdateSetManager.js +391 -0
- package/dist/sn/updateset/UpdateSetManager.js.map +1 -0
- package/dist/sn/updateset/UpdateSetModels.d.ts +177 -0
- package/dist/sn/updateset/UpdateSetModels.js +5 -0
- package/dist/sn/updateset/UpdateSetModels.js.map +1 -0
- package/dist/sn/workflow/WorkflowManager.d.ts +81 -0
- package/dist/sn/workflow/WorkflowManager.js +388 -0
- package/dist/sn/workflow/WorkflowManager.js.map +1 -0
- package/dist/sn/workflow/WorkflowModels.d.ts +242 -0
- package/dist/sn/workflow/WorkflowModels.js +5 -0
- package/dist/sn/workflow/WorkflowModels.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ServiceNowInstance } from "../ServiceNowInstance.js";
|
|
2
|
+
import { CreateWorkflowOptions, CreateWorkflowResult, CreateWorkflowVersionOptions, CreateWorkflowVersionResult, CreateActivityOptions, CreateActivityResult, CreateTransitionOptions, CreateTransitionResult, CreateConditionOptions, CreateConditionResult, PublishWorkflowOptions, CompleteWorkflowSpec, CompleteWorkflowResult } from './WorkflowModels.js';
|
|
3
|
+
/**
|
|
4
|
+
* Manages ServiceNow workflow lifecycle operations including creating workflows,
|
|
5
|
+
* versions, activities, transitions, conditions, and publishing.
|
|
6
|
+
* Also provides a high-level orchestration method to create a complete workflow
|
|
7
|
+
* from a single specification.
|
|
8
|
+
*/
|
|
9
|
+
export declare class WorkflowManager {
|
|
10
|
+
private static readonly WF_WORKFLOW;
|
|
11
|
+
private static readonly WF_WORKFLOW_VERSION;
|
|
12
|
+
private static readonly WF_ACTIVITY;
|
|
13
|
+
private static readonly WF_TRANSITION;
|
|
14
|
+
private static readonly WF_CONDITION;
|
|
15
|
+
private _logger;
|
|
16
|
+
private _req;
|
|
17
|
+
private _tableAPI;
|
|
18
|
+
private _instance;
|
|
19
|
+
constructor(instance: ServiceNowInstance);
|
|
20
|
+
/**
|
|
21
|
+
* Create a new workflow record.
|
|
22
|
+
*
|
|
23
|
+
* @param options Workflow creation options
|
|
24
|
+
* @returns The sys_id and name of the created workflow
|
|
25
|
+
* @throws Error if the API call fails
|
|
26
|
+
*/
|
|
27
|
+
createWorkflow(options: CreateWorkflowOptions): Promise<CreateWorkflowResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Create a new workflow version.
|
|
30
|
+
*
|
|
31
|
+
* @param options Workflow version creation options
|
|
32
|
+
* @returns The sys_id and name of the created version
|
|
33
|
+
* @throws Error if the API call fails
|
|
34
|
+
*/
|
|
35
|
+
createWorkflowVersion(options: CreateWorkflowVersionOptions): Promise<CreateWorkflowVersionResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Create a new workflow activity.
|
|
38
|
+
*
|
|
39
|
+
* @param options Activity creation options
|
|
40
|
+
* @returns The sys_id and name of the created activity
|
|
41
|
+
* @throws Error if the API call fails
|
|
42
|
+
*/
|
|
43
|
+
createActivity(options: CreateActivityOptions): Promise<CreateActivityResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Create a transition between two activities.
|
|
46
|
+
*
|
|
47
|
+
* @param options Transition creation options
|
|
48
|
+
* @returns The sys_id of the created transition
|
|
49
|
+
* @throws Error if the API call fails
|
|
50
|
+
*/
|
|
51
|
+
createTransition(options: CreateTransitionOptions): Promise<CreateTransitionResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Create a condition on an activity.
|
|
54
|
+
*
|
|
55
|
+
* @param options Condition creation options
|
|
56
|
+
* @returns The sys_id and name of the created condition
|
|
57
|
+
* @throws Error if the API call fails
|
|
58
|
+
*/
|
|
59
|
+
createCondition(options: CreateConditionOptions): Promise<CreateConditionResult>;
|
|
60
|
+
/**
|
|
61
|
+
* Publish a workflow version by setting published=true and the start activity.
|
|
62
|
+
*
|
|
63
|
+
* @param options Publish options including version sys_id and start activity sys_id
|
|
64
|
+
* @throws Error if the API call fails
|
|
65
|
+
*/
|
|
66
|
+
publishWorkflow(options: PublishWorkflowOptions): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Create a complete workflow from a single specification.
|
|
69
|
+
* Orchestrates: create workflow -> create version -> create activities ->
|
|
70
|
+
* create transitions -> optionally publish.
|
|
71
|
+
*
|
|
72
|
+
* Activity references in transitions use the activity's id field (if set) or
|
|
73
|
+
* its index in the activities array (as a string like "0", "1", etc.).
|
|
74
|
+
*
|
|
75
|
+
* @param spec The complete workflow specification
|
|
76
|
+
* @param onProgress Optional progress callback
|
|
77
|
+
* @returns The complete result including all created sys_ids
|
|
78
|
+
* @throws Error if any step fails
|
|
79
|
+
*/
|
|
80
|
+
createCompleteWorkflow(spec: CompleteWorkflowSpec, onProgress?: (message: string) => void): Promise<CompleteWorkflowResult>;
|
|
81
|
+
}
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { Logger } from "../../util/Logger.js";
|
|
2
|
+
import { ServiceNowRequest } from "../../comm/http/ServiceNowRequest.js";
|
|
3
|
+
import { TableAPIRequest } from "../../comm/http/TableAPIRequest.js";
|
|
4
|
+
/**
|
|
5
|
+
* Manages ServiceNow workflow lifecycle operations including creating workflows,
|
|
6
|
+
* versions, activities, transitions, conditions, and publishing.
|
|
7
|
+
* Also provides a high-level orchestration method to create a complete workflow
|
|
8
|
+
* from a single specification.
|
|
9
|
+
*/
|
|
10
|
+
export class WorkflowManager {
|
|
11
|
+
static WF_WORKFLOW = 'wf_workflow';
|
|
12
|
+
static WF_WORKFLOW_VERSION = 'wf_workflow_version';
|
|
13
|
+
static WF_ACTIVITY = 'wf_activity';
|
|
14
|
+
static WF_TRANSITION = 'wf_transition';
|
|
15
|
+
static WF_CONDITION = 'wf_condition';
|
|
16
|
+
_logger = new Logger("WorkflowManager");
|
|
17
|
+
_req;
|
|
18
|
+
_tableAPI;
|
|
19
|
+
_instance;
|
|
20
|
+
constructor(instance) {
|
|
21
|
+
this._instance = instance;
|
|
22
|
+
this._req = new ServiceNowRequest(instance);
|
|
23
|
+
this._tableAPI = new TableAPIRequest(instance);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create a new workflow record.
|
|
27
|
+
*
|
|
28
|
+
* @param options Workflow creation options
|
|
29
|
+
* @returns The sys_id and name of the created workflow
|
|
30
|
+
* @throws Error if the API call fails
|
|
31
|
+
*/
|
|
32
|
+
async createWorkflow(options) {
|
|
33
|
+
if (!options.name || options.name.trim().length === 0) {
|
|
34
|
+
throw new Error('Workflow name is required');
|
|
35
|
+
}
|
|
36
|
+
this._logger.info(`Creating workflow: ${options.name}`);
|
|
37
|
+
const body = {
|
|
38
|
+
name: options.name
|
|
39
|
+
};
|
|
40
|
+
if (options.description !== undefined) {
|
|
41
|
+
body.description = options.description;
|
|
42
|
+
}
|
|
43
|
+
if (options.template !== undefined) {
|
|
44
|
+
body.template = options.template;
|
|
45
|
+
}
|
|
46
|
+
if (options.access !== undefined) {
|
|
47
|
+
body.access = options.access;
|
|
48
|
+
}
|
|
49
|
+
const response = await this._tableAPI.post(WorkflowManager.WF_WORKFLOW, {}, body);
|
|
50
|
+
if (response && (response.status === 200 || response.status === 201) && response.bodyObject?.result?.sys_id) {
|
|
51
|
+
const result = response.bodyObject.result;
|
|
52
|
+
this._logger.info(`Created workflow '${options.name}' with sys_id=${result.sys_id}`);
|
|
53
|
+
return {
|
|
54
|
+
workflowSysId: result.sys_id,
|
|
55
|
+
name: result.name || options.name
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
throw new Error(`Failed to create workflow '${options.name}'. Status: ${response?.status ?? 'unknown'}`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a new workflow version.
|
|
62
|
+
*
|
|
63
|
+
* @param options Workflow version creation options
|
|
64
|
+
* @returns The sys_id and name of the created version
|
|
65
|
+
* @throws Error if the API call fails
|
|
66
|
+
*/
|
|
67
|
+
async createWorkflowVersion(options) {
|
|
68
|
+
if (!options.name || options.name.trim().length === 0) {
|
|
69
|
+
throw new Error('Workflow version name is required');
|
|
70
|
+
}
|
|
71
|
+
if (!options.workflowSysId || options.workflowSysId.trim().length === 0) {
|
|
72
|
+
throw new Error('Workflow sys_id is required');
|
|
73
|
+
}
|
|
74
|
+
if (!options.table || options.table.trim().length === 0) {
|
|
75
|
+
throw new Error('Table name is required');
|
|
76
|
+
}
|
|
77
|
+
this._logger.info(`Creating workflow version: ${options.name} for workflow ${options.workflowSysId}`);
|
|
78
|
+
const body = {
|
|
79
|
+
name: options.name,
|
|
80
|
+
workflow: options.workflowSysId,
|
|
81
|
+
table: options.table
|
|
82
|
+
};
|
|
83
|
+
if (options.description !== undefined) {
|
|
84
|
+
body.description = options.description;
|
|
85
|
+
}
|
|
86
|
+
if (options.active !== undefined) {
|
|
87
|
+
body.active = options.active;
|
|
88
|
+
}
|
|
89
|
+
if (options.published !== undefined) {
|
|
90
|
+
body.published = options.published;
|
|
91
|
+
}
|
|
92
|
+
if (options.condition !== undefined) {
|
|
93
|
+
body.condition = options.condition;
|
|
94
|
+
}
|
|
95
|
+
if (options.order !== undefined) {
|
|
96
|
+
body.order = options.order;
|
|
97
|
+
}
|
|
98
|
+
const response = await this._tableAPI.post(WorkflowManager.WF_WORKFLOW_VERSION, {}, body);
|
|
99
|
+
if (response && (response.status === 200 || response.status === 201) && response.bodyObject?.result?.sys_id) {
|
|
100
|
+
const result = response.bodyObject.result;
|
|
101
|
+
this._logger.info(`Created workflow version '${options.name}' with sys_id=${result.sys_id}`);
|
|
102
|
+
return {
|
|
103
|
+
versionSysId: result.sys_id,
|
|
104
|
+
name: result.name || options.name
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
throw new Error(`Failed to create workflow version '${options.name}'. Status: ${response?.status ?? 'unknown'}`);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create a new workflow activity.
|
|
111
|
+
*
|
|
112
|
+
* @param options Activity creation options
|
|
113
|
+
* @returns The sys_id and name of the created activity
|
|
114
|
+
* @throws Error if the API call fails
|
|
115
|
+
*/
|
|
116
|
+
async createActivity(options) {
|
|
117
|
+
if (!options.name || options.name.trim().length === 0) {
|
|
118
|
+
throw new Error('Activity name is required');
|
|
119
|
+
}
|
|
120
|
+
if (!options.workflowVersionSysId || options.workflowVersionSysId.trim().length === 0) {
|
|
121
|
+
throw new Error('Workflow version sys_id is required');
|
|
122
|
+
}
|
|
123
|
+
this._logger.info(`Creating activity: ${options.name} for version ${options.workflowVersionSysId}`);
|
|
124
|
+
const body = {
|
|
125
|
+
name: options.name,
|
|
126
|
+
workflow_version: options.workflowVersionSysId
|
|
127
|
+
};
|
|
128
|
+
if (options.activityDefinitionSysId !== undefined) {
|
|
129
|
+
body.activity_definition = options.activityDefinitionSysId;
|
|
130
|
+
}
|
|
131
|
+
if (options.x !== undefined) {
|
|
132
|
+
body.x = options.x;
|
|
133
|
+
}
|
|
134
|
+
if (options.y !== undefined) {
|
|
135
|
+
body.y = options.y;
|
|
136
|
+
}
|
|
137
|
+
if (options.width !== undefined) {
|
|
138
|
+
body.width = options.width;
|
|
139
|
+
}
|
|
140
|
+
if (options.height !== undefined) {
|
|
141
|
+
body.height = options.height;
|
|
142
|
+
}
|
|
143
|
+
if (options.script !== undefined) {
|
|
144
|
+
body.script = options.script;
|
|
145
|
+
}
|
|
146
|
+
if (options.vars !== undefined) {
|
|
147
|
+
body.vars = options.vars;
|
|
148
|
+
}
|
|
149
|
+
const response = await this._tableAPI.post(WorkflowManager.WF_ACTIVITY, {}, body);
|
|
150
|
+
if (response && (response.status === 200 || response.status === 201) && response.bodyObject?.result?.sys_id) {
|
|
151
|
+
const result = response.bodyObject.result;
|
|
152
|
+
this._logger.info(`Created activity '${options.name}' with sys_id=${result.sys_id}`);
|
|
153
|
+
return {
|
|
154
|
+
activitySysId: result.sys_id,
|
|
155
|
+
name: result.name || options.name
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
throw new Error(`Failed to create activity '${options.name}'. Status: ${response?.status ?? 'unknown'}`);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create a transition between two activities.
|
|
162
|
+
*
|
|
163
|
+
* @param options Transition creation options
|
|
164
|
+
* @returns The sys_id of the created transition
|
|
165
|
+
* @throws Error if the API call fails
|
|
166
|
+
*/
|
|
167
|
+
async createTransition(options) {
|
|
168
|
+
if (!options.fromActivitySysId || options.fromActivitySysId.trim().length === 0) {
|
|
169
|
+
throw new Error('From activity sys_id is required');
|
|
170
|
+
}
|
|
171
|
+
if (!options.toActivitySysId || options.toActivitySysId.trim().length === 0) {
|
|
172
|
+
throw new Error('To activity sys_id is required');
|
|
173
|
+
}
|
|
174
|
+
this._logger.info(`Creating transition: ${options.fromActivitySysId} -> ${options.toActivitySysId}`);
|
|
175
|
+
const body = {
|
|
176
|
+
from: options.fromActivitySysId,
|
|
177
|
+
to: options.toActivitySysId
|
|
178
|
+
};
|
|
179
|
+
if (options.conditionSysId !== undefined) {
|
|
180
|
+
body.condition = options.conditionSysId;
|
|
181
|
+
}
|
|
182
|
+
if (options.order !== undefined) {
|
|
183
|
+
body.order = options.order;
|
|
184
|
+
}
|
|
185
|
+
const response = await this._tableAPI.post(WorkflowManager.WF_TRANSITION, {}, body);
|
|
186
|
+
if (response && (response.status === 200 || response.status === 201) && response.bodyObject?.result?.sys_id) {
|
|
187
|
+
const result = response.bodyObject.result;
|
|
188
|
+
this._logger.info(`Created transition with sys_id=${result.sys_id}`);
|
|
189
|
+
return {
|
|
190
|
+
transitionSysId: result.sys_id
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
throw new Error(`Failed to create transition from '${options.fromActivitySysId}' to '${options.toActivitySysId}'. Status: ${response?.status ?? 'unknown'}`);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Create a condition on an activity.
|
|
197
|
+
*
|
|
198
|
+
* @param options Condition creation options
|
|
199
|
+
* @returns The sys_id and name of the created condition
|
|
200
|
+
* @throws Error if the API call fails
|
|
201
|
+
*/
|
|
202
|
+
async createCondition(options) {
|
|
203
|
+
if (!options.activitySysId || options.activitySysId.trim().length === 0) {
|
|
204
|
+
throw new Error('Activity sys_id is required');
|
|
205
|
+
}
|
|
206
|
+
if (!options.name || options.name.trim().length === 0) {
|
|
207
|
+
throw new Error('Condition name is required');
|
|
208
|
+
}
|
|
209
|
+
this._logger.info(`Creating condition: ${options.name} on activity ${options.activitySysId}`);
|
|
210
|
+
const body = {
|
|
211
|
+
activity: options.activitySysId,
|
|
212
|
+
name: options.name
|
|
213
|
+
};
|
|
214
|
+
if (options.description !== undefined) {
|
|
215
|
+
body.description = options.description;
|
|
216
|
+
}
|
|
217
|
+
if (options.condition !== undefined) {
|
|
218
|
+
body.condition = options.condition;
|
|
219
|
+
}
|
|
220
|
+
if (options.order !== undefined) {
|
|
221
|
+
body.order = options.order;
|
|
222
|
+
}
|
|
223
|
+
if (options.elseFlag !== undefined) {
|
|
224
|
+
body.else_flag = options.elseFlag;
|
|
225
|
+
}
|
|
226
|
+
const response = await this._tableAPI.post(WorkflowManager.WF_CONDITION, {}, body);
|
|
227
|
+
if (response && (response.status === 200 || response.status === 201) && response.bodyObject?.result?.sys_id) {
|
|
228
|
+
const result = response.bodyObject.result;
|
|
229
|
+
this._logger.info(`Created condition '${options.name}' with sys_id=${result.sys_id}`);
|
|
230
|
+
return {
|
|
231
|
+
conditionSysId: result.sys_id,
|
|
232
|
+
name: result.name || options.name
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
throw new Error(`Failed to create condition '${options.name}'. Status: ${response?.status ?? 'unknown'}`);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Publish a workflow version by setting published=true and the start activity.
|
|
239
|
+
*
|
|
240
|
+
* @param options Publish options including version sys_id and start activity sys_id
|
|
241
|
+
* @throws Error if the API call fails
|
|
242
|
+
*/
|
|
243
|
+
async publishWorkflow(options) {
|
|
244
|
+
if (!options.versionSysId || options.versionSysId.trim().length === 0) {
|
|
245
|
+
throw new Error('Workflow version sys_id is required');
|
|
246
|
+
}
|
|
247
|
+
if (!options.startActivitySysId || options.startActivitySysId.trim().length === 0) {
|
|
248
|
+
throw new Error('Start activity sys_id is required');
|
|
249
|
+
}
|
|
250
|
+
this._logger.info(`Publishing workflow version ${options.versionSysId} with start activity ${options.startActivitySysId}`);
|
|
251
|
+
const body = {
|
|
252
|
+
published: true,
|
|
253
|
+
start: options.startActivitySysId
|
|
254
|
+
};
|
|
255
|
+
const response = await this._tableAPI.put(WorkflowManager.WF_WORKFLOW_VERSION, options.versionSysId, body);
|
|
256
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
257
|
+
this._logger.info(`Successfully published workflow version ${options.versionSysId}`);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
throw new Error(`Failed to publish workflow version ${options.versionSysId}. Status: ${response?.status ?? 'unknown'}`);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Create a complete workflow from a single specification.
|
|
264
|
+
* Orchestrates: create workflow -> create version -> create activities ->
|
|
265
|
+
* create transitions -> optionally publish.
|
|
266
|
+
*
|
|
267
|
+
* Activity references in transitions use the activity's id field (if set) or
|
|
268
|
+
* its index in the activities array (as a string like "0", "1", etc.).
|
|
269
|
+
*
|
|
270
|
+
* @param spec The complete workflow specification
|
|
271
|
+
* @param onProgress Optional progress callback
|
|
272
|
+
* @returns The complete result including all created sys_ids
|
|
273
|
+
* @throws Error if any step fails
|
|
274
|
+
*/
|
|
275
|
+
async createCompleteWorkflow(spec, onProgress) {
|
|
276
|
+
if (!spec.name || spec.name.trim().length === 0) {
|
|
277
|
+
throw new Error('Workflow name is required');
|
|
278
|
+
}
|
|
279
|
+
if (!spec.activities || spec.activities.length === 0) {
|
|
280
|
+
throw new Error('At least one activity is required');
|
|
281
|
+
}
|
|
282
|
+
this._logger.info(`Creating complete workflow: ${spec.name}`);
|
|
283
|
+
// Step 1: Create workflow
|
|
284
|
+
if (onProgress) {
|
|
285
|
+
onProgress(`Creating workflow '${spec.name}'`);
|
|
286
|
+
}
|
|
287
|
+
const workflowResult = await this.createWorkflow({
|
|
288
|
+
name: spec.name,
|
|
289
|
+
description: spec.description,
|
|
290
|
+
template: spec.template,
|
|
291
|
+
access: spec.access
|
|
292
|
+
});
|
|
293
|
+
// Step 2: Create workflow version
|
|
294
|
+
if (onProgress) {
|
|
295
|
+
onProgress(`Creating workflow version for '${spec.name}'`);
|
|
296
|
+
}
|
|
297
|
+
const versionResult = await this.createWorkflowVersion({
|
|
298
|
+
name: spec.name,
|
|
299
|
+
workflowSysId: workflowResult.workflowSysId,
|
|
300
|
+
table: spec.table,
|
|
301
|
+
description: spec.description,
|
|
302
|
+
active: spec.active,
|
|
303
|
+
condition: spec.condition
|
|
304
|
+
});
|
|
305
|
+
// Step 3: Create activities
|
|
306
|
+
const activitySysIds = {};
|
|
307
|
+
for (let i = 0; i < spec.activities.length; i++) {
|
|
308
|
+
const activitySpec = spec.activities[i];
|
|
309
|
+
if (onProgress) {
|
|
310
|
+
onProgress(`Creating activity ${i + 1}/${spec.activities.length}: '${activitySpec.name}'`);
|
|
311
|
+
}
|
|
312
|
+
const activityResult = await this.createActivity({
|
|
313
|
+
name: activitySpec.name,
|
|
314
|
+
workflowVersionSysId: versionResult.versionSysId,
|
|
315
|
+
activityDefinitionSysId: activitySpec.activityType,
|
|
316
|
+
x: activitySpec.x,
|
|
317
|
+
y: activitySpec.y,
|
|
318
|
+
width: activitySpec.width,
|
|
319
|
+
height: activitySpec.height,
|
|
320
|
+
script: activitySpec.script,
|
|
321
|
+
vars: activitySpec.vars
|
|
322
|
+
});
|
|
323
|
+
// Store by id if provided, and always by index
|
|
324
|
+
if (activitySpec.id) {
|
|
325
|
+
activitySysIds[activitySpec.id] = activityResult.activitySysId;
|
|
326
|
+
}
|
|
327
|
+
activitySysIds[String(i)] = activityResult.activitySysId;
|
|
328
|
+
}
|
|
329
|
+
// Step 4: Create transitions
|
|
330
|
+
const transitionSysIds = [];
|
|
331
|
+
if (spec.transitions && spec.transitions.length > 0) {
|
|
332
|
+
for (let i = 0; i < spec.transitions.length; i++) {
|
|
333
|
+
const transitionSpec = spec.transitions[i];
|
|
334
|
+
if (onProgress) {
|
|
335
|
+
onProgress(`Creating transition ${i + 1}/${spec.transitions.length}: '${transitionSpec.from}' -> '${transitionSpec.to}'`);
|
|
336
|
+
}
|
|
337
|
+
const fromSysId = activitySysIds[transitionSpec.from];
|
|
338
|
+
const toSysId = activitySysIds[transitionSpec.to];
|
|
339
|
+
if (!fromSysId) {
|
|
340
|
+
throw new Error(`Transition 'from' activity '${transitionSpec.from}' not found in activity map`);
|
|
341
|
+
}
|
|
342
|
+
if (!toSysId) {
|
|
343
|
+
throw new Error(`Transition 'to' activity '${transitionSpec.to}' not found in activity map`);
|
|
344
|
+
}
|
|
345
|
+
const transitionResult = await this.createTransition({
|
|
346
|
+
fromActivitySysId: fromSysId,
|
|
347
|
+
toActivitySysId: toSysId,
|
|
348
|
+
conditionSysId: transitionSpec.conditionSysId,
|
|
349
|
+
order: transitionSpec.order
|
|
350
|
+
});
|
|
351
|
+
transitionSysIds.push(transitionResult.transitionSysId);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// Step 5: Publish if requested
|
|
355
|
+
let published = false;
|
|
356
|
+
let startActivityKey;
|
|
357
|
+
if (spec.publish) {
|
|
358
|
+
if (!spec.startActivity) {
|
|
359
|
+
throw new Error('startActivity is required when publish=true');
|
|
360
|
+
}
|
|
361
|
+
const startSysId = activitySysIds[spec.startActivity];
|
|
362
|
+
if (!startSysId) {
|
|
363
|
+
throw new Error(`Start activity '${spec.startActivity}' not found in activity map`);
|
|
364
|
+
}
|
|
365
|
+
if (onProgress) {
|
|
366
|
+
onProgress(`Publishing workflow '${spec.name}'`);
|
|
367
|
+
}
|
|
368
|
+
await this.publishWorkflow({
|
|
369
|
+
versionSysId: versionResult.versionSysId,
|
|
370
|
+
startActivitySysId: startSysId
|
|
371
|
+
});
|
|
372
|
+
published = true;
|
|
373
|
+
startActivityKey = spec.startActivity;
|
|
374
|
+
}
|
|
375
|
+
if (onProgress) {
|
|
376
|
+
onProgress(`Complete workflow '${spec.name}' created successfully`);
|
|
377
|
+
}
|
|
378
|
+
return {
|
|
379
|
+
workflowSysId: workflowResult.workflowSysId,
|
|
380
|
+
versionSysId: versionResult.versionSysId,
|
|
381
|
+
activitySysIds,
|
|
382
|
+
transitionSysIds,
|
|
383
|
+
published,
|
|
384
|
+
startActivity: startActivityKey
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=WorkflowManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowManager.js","sourceRoot":"","sources":["../../../src/sn/workflow/WorkflowManager.ts"],"names":[],"mappings":"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"}
|