forked from optimajet/WorkflowEngine.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIWorkflowBuilder.cs
More file actions
202 lines (174 loc) · 9.37 KB
/
IWorkflowBuilder.cs
File metadata and controls
202 lines (174 loc) · 9.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using OptimaJet.Workflow.Core.Cache;
using OptimaJet.Workflow.Core.Model;
using OptimaJet.Workflow.Core.Runtime;
namespace OptimaJet.Workflow.Core.Builder
{
/// <summary>
/// Interface of a workflow builder, which convert not parsed process scheme <see cref="SchemeDefinition{T}"/> to the object model of a scheme of a process <see cref="ProcessDefinition"/>
/// </summary>
public interface IWorkflowBuilder
{
/// <summary>
/// Create new instance of the process.
/// </summary>
/// <param name="workflowRuntime">Instance of workflow runtime which creates an process instance</param>
/// <param name="processId">Process id</param>
/// <param name="schemeCode">Code of the scheme</param>
/// <param name="parameters">The parameters for creating the scheme of the process</param>
/// /// <param name="tenantId">Tenant id</param>
/// <returns>ProcessInstance object</returns>
Task<ProcessInstance> CreateNewProcessAsync(WorkflowRuntime workflowRuntime, Guid processId,
string schemeCode,
IDictionary<string, object> parameters,
string tenantId);
Task<ProcessInstance> CreateNewSubprocessAsync(WorkflowRuntime workflowRuntime, Guid processId,
ProcessInstance parentProcessInstance,
TransitionDefinition startingTransition
);
/// <summary>
/// Create new scheme for existing process
/// </summary>
/// <param name="schemeCode">Code of the scheme</param>
/// <param name="parameters">The parameters for creating scheme of process</param>
/// <returns>ProcessDefinition object</returns>
Task<ProcessDefinition> CreateNewProcessSchemeAsync(string schemeCode, IDictionary<string, object> parameters);
Task<ProcessDefinition> CreateNewSubprocessSchemeAsync(ProcessDefinition parentProcessScheme,
TransitionDefinition startingTransition);
/// <summary>
/// Returns existing process instance
/// </summary>
/// <param name="workflowRuntime">Workflow runtime instance</param>
/// <param name="processId">Process id</param>
/// <returns>ProcessInstance object</returns>
Task<ProcessInstance> GetProcessInstanceAsync(WorkflowRuntime workflowRuntime, Guid processId);
/// <summary>
/// Returns process scheme by specific id, if scheme not exists creates it
/// </summary>
/// <param name="schemeId">Id of the scheme</param>
/// <returns>ProcessDefinition object</returns>
Task<ProcessDefinition> GetProcessSchemeAsync(Guid schemeId);
/// <summary>
/// Sets the cache to store parsed ProcessDefinition objects <see cref="ProcessDefinition"/>
/// </summary>
/// <param name="cache">Instance of cache object</param>
void SetCache(IParsedProcessCache cache);
/// <summary>
/// Removes the cache to store parsed ProcessDefinition objects <see cref="ProcessDefinition"/>
/// </summary>
void RemoveCache();
/// <summary>
/// Returns process scheme by specific name, if scheme not exists creates it
/// </summary>
/// <param name="schemeCode">Name of the scheme</param>
/// <returns>ProcessDefinition object</returns>
Task<ProcessDefinition> GetProcessSchemeAsync(string schemeCode);
/// <summary>
/// Returns process scheme by specific name and parameters for creating the scheme of the process, if scheme not exists creates it
/// </summary>
/// <param name="schemeCode">Name of the scheme</param>
/// <param name="parameters">The parameters for creating the scheme of the process</param>
/// <returns>ProcessDefinition object</returns>
Task<ProcessDefinition> GetProcessSchemeAsync(string schemeCode, IDictionary<string, object> parameters);
/// <summary>
/// Set IsObsolete sign to the scheme with specific name and parameters for creating the scheme of the process
/// </summary>
/// <param name="schemeCode">Name of the scheme</param>
/// <param name="parameters">The parameters for creating the scheme of the process</param>
Task SetSchemeIsObsoleteAsync(string schemeCode, Dictionary<string, object> parameters);
/// <summary>
/// Set IsObsolete sign to the scheme with specific name
/// </summary>
/// <param name="schemeCode">Name of the scheme</param>
Task SetSchemeIsObsoleteAsync(string schemeCode);
/// <summary>
/// Returns existing process scheme directly from scheme persistence store
/// </summary>
/// <param name="code">Name of the scheme</param>
/// <returns>ProcessDefinition object</returns>
Task<ProcessDefinition> GetProcessSchemeForDesignerAsync(string code);
/// <summary>
/// Saves process scheme to scheme persistence store
/// </summary>
/// <param name="schemeCode">Code of the scheme</param>
/// <param name="pd">Object representation of the scheme</param>
/// <returns>
/// success - true if scheme validation was success,
/// errors - validation errors,
/// failedStep - the name of failed build step
/// </returns>
Task<(bool success, List<string> errors,string failedStep)> SaveProcessSchemeAsync(string schemeCode, ProcessDefinition pd);
/// <summary>
/// Parses process scheme from the string
/// </summary>
/// <param name="scheme">String representation of not parsed scheme</param>
/// <param name="schemeParsingType">Type of parsing strict or soft. Uses only for upload operations where we need softer scheme check</param>
/// <returns>ProcessDefinition object</returns>
ProcessDefinition Parse(string scheme, SchemeParsingType schemeParsingType = SchemeParsingType.Strict);
/// <summary>
/// Serialize process scheme to the string
/// </summary>
/// <param name="processDefinition">SProcessDefinition object</param>
/// <returns>String representation of not parsed scheme</returns>
string Serialize(ProcessDefinition processDefinition);
/// <summary>
/// Adds a build step into workflow builder
/// </summary>
/// <param name="order">Order in position</param>
/// <param name="buildStepPosition">Indicates whether the build step is added after the system steps or before the system steps.</param>
/// <param name="step">Build step</param>
void AddBuildStep(int order, BuildStepPosition buildStepPosition, BuildStep step);
/// <summary>
/// Generates new Process Definition, doesn't save it in a database, doesn't use cache, doesn't execute build steps
/// </summary>
/// <param name="schemeCode">Name of the scheme</param>
/// <param name="parameters">The parameters for creating the scheme of the process</param>
/// <returns>Generated process definition</returns>
Task<ProcessDefinition> GenerateProcessDefinitionAsync(string schemeCode, IDictionary<string, object> parameters);
/// <summary>
/// Returns true if the builder contains a build step with the name
/// </summary>
/// <param name="name">Name of build step</param>
/// <returns></returns>
bool ContainsBuildStep(string name);
/// <summary>
/// Returns the list of scheme codes that can be inlined into other schemes
/// </summary>
/// <returns>The list of scheme codes</returns>
Task<List<string>> GetInlinedSchemeCodesAsync();
/// <summary>
/// Returns the list of scheme codes into which the scheme with the given code has been inlined
/// </summary>
/// <param name="schemeCode">Inlined scheme code</param>
/// <returns>The list of scheme codes into which the scheme with the given code has been inlined</returns>
Task<List<string>> GetRelatedByInliningSchemeCodesAsync(string schemeCode);
/// <summary>
/// Remove tags from scheme with the given schemeCode
/// </summary>
Task RemoveSchemeTagsAsync(string schemeCode, IEnumerable<string> tags);
/// <summary>
/// Set tags to scheme with the given schemeCode
/// </summary>
Task SetSchemeTagsAsync(string schemeCode, IEnumerable<string> tags);
/// <summary>
/// Returns the list of scheme codes into which the scheme with the given tags
/// </summary>
Task<List<string>> SearchSchemesByTagsAsync(IEnumerable<string> tags);
/// <summary>
/// Add tags to scheme with the given schemeCode
/// </summary>
Task AddSchemeTagsAsync(string schemeCode, IEnumerable<string> tags);
/// <summary>
/// Get the list of inlined schemes for a given scheme
/// </summary>
/// <param name="pd">Object representation of the scheme</param>
/// <returns>
/// codes - list of inlined scheme codes,
/// errors - validation errors,
/// failedStep - the name of failed build step
/// </returns>
Task<(List<string> codes,List<string> errors,string failedStep)> GetInlineSchemesAsync(ProcessDefinition pd);
}
}