@@ -38,7 +38,14 @@ export class Workflow extends BaseWorkflow {
3838 _Workflow = Workflow ,
3939 _MapUnit = MapUnit ,
4040 ) {
41- if ( ! config . _id ) config . _id = Workflow . generateWorkflowId ( config . name ) ;
41+ if ( ! config . _id ) {
42+ config . _id = Workflow . generateWorkflowId (
43+ config . name ,
44+ config . properties ,
45+ config . subworkflows ,
46+ config . applicationName ,
47+ ) ;
48+ }
4249 super ( config ) ;
4350 this . _Subworkflow = _Subworkflow ;
4451 this . _UnitFactory = _UnitFactory ;
@@ -59,9 +66,20 @@ export class Workflow extends BaseWorkflow {
5966 return defaultWorkflowConfig ;
6067 }
6168
62- static generateWorkflowId ( ...args ) {
63- args [ 0 ] = `workflow-${ args [ 0 ] } ` ;
64- if ( this . usePredefinedIds ) return Utils . uuid . getUUIDFromNamespace ( ...args ) ;
69+ static generateWorkflowId (
70+ name ,
71+ properties = null ,
72+ subworkflows = null ,
73+ applicationName = null ,
74+ ) {
75+ const propsInfo = properties ?. length ? properties . sort ( ) . join ( "," ) : "" ;
76+ const swInfo = subworkflows ?. length
77+ ? subworkflows . map ( ( sw ) => sw . name || "unknown" ) . join ( "," )
78+ : "" ;
79+ const seed = [ `workflow-${ name } ` , applicationName , propsInfo , swInfo ]
80+ . filter ( ( p ) => p )
81+ . join ( "-" ) ;
82+ if ( this . usePredefinedIds ) return Utils . uuid . getUUIDFromNamespace ( seed ) ;
6583 return Utils . uuid . getUUID ( ) ;
6684 }
6785
@@ -71,6 +89,7 @@ export class Workflow extends BaseWorkflow {
7189 subworkflows : [ subworkflow . toJSON ( ) ] ,
7290 units : setNextLinks ( setUnitsHead ( [ subworkflow . getAsUnit ( ) . toJSON ( ) ] ) ) ,
7391 properties : subworkflow . properties ,
92+ applicationName : subworkflow . application . name ,
7493 } ;
7594 return new ClsConstructor ( config ) ;
7695 }
@@ -292,7 +311,12 @@ export class Workflow extends BaseWorkflow {
292311 const workflowConfig = defaultWorkflowConfig ;
293312 // eslint-disable-next-line no-case-declarations
294313 const mapUnit = new this . _MapUnit ( ) ;
295- workflowConfig . _id = this . _Workflow . generateWorkflowId ( workflowConfig . name ) ;
314+ workflowConfig . _id = this . _Workflow . generateWorkflowId (
315+ workflowConfig . name ,
316+ workflowConfig . properties ,
317+ workflowConfig . subworkflows ,
318+ this . applicationName ,
319+ ) ;
296320 this . prop ( "workflows" ) . push ( workflowConfig ) ;
297321 this . _workflows = this . prop ( "workflows" ) . map ( ( x ) => new this . _Workflow ( x ) ) ;
298322 mapUnit . setWorkflowId ( workflowConfig . _id ) ;
@@ -308,8 +332,14 @@ export class Workflow extends BaseWorkflow {
308332
309333 addMapUnit ( mapUnit , mapWorkflow ) {
310334 const mapWorkflowConfig = mapWorkflow . toJSON ( ) ;
311- if ( ! mapWorkflowConfig . _id )
312- mapWorkflowConfig . _id = this . _Workflow . generateWorkflowId ( mapWorkflowConfig . name ) ;
335+ if ( ! mapWorkflowConfig . _id ) {
336+ mapWorkflowConfig . _id = this . _Workflow . generateWorkflowId (
337+ mapWorkflowConfig . name ,
338+ mapWorkflowConfig . properties ,
339+ mapWorkflowConfig . subworkflows ,
340+ mapWorkflow . applicationName || this . applicationName ,
341+ ) ;
342+ }
313343 mapUnit . setWorkflowId ( mapWorkflowConfig . _id ) ;
314344 this . addUnit ( mapUnit ) ;
315345 this . _json . workflows . push ( mapWorkflowConfig ) ;
0 commit comments