Workflows aus einen laufenden Workflow heraus starten

Aus einer Kundenanfrage und einem sehr nützlichen Hinweisen von Paavo (Vielen Dank nach Berlin) habe ich dieses Codebeispiel zusammengebaut.

Mit der Methode StartProcess kann man innerhalb eines Server-Events weitere Workflows starten.

Wichtig, die weiteren Workflows haben als Creator einen technischen Benutzer. Daher sollte dieser bei Bedarf als Variable mitgegeben werden und dann der ActivityPerformer z.B. so gesetzt werden.

thisProcess.SetActivityPerformer thisProcess.CurrentActivity.Activityid, wfvariables.StartBenutzer.Value

Beispiel

' Parameter:
'   -> WFName (String): Name des Workflows
'
'   -> InputVariables (Scripting.Dictionary): Dict der zu übergebenen Parameter. 
'
'		Beispiel:
' 			Dim InputVariables: Set InputVariables = CreateObject("Scripting.Dictionary")
'			InputVariables.Add "VariablenName", "VariablenWert"
'
'   -> InputFiles (Array(Scripting.Dictionary)): Array aus Dict. Dict muss die Schlüssel id, typeId, inWorkspace, location (1 = Objekt bereits zugeordnet 2 = Objekt liegt in der WF-Ablage )
' 
'   	Beispiel:
'			Dim Doc: Set Doc = CreateObject("Scripting.Dictionary")
'			Doc.Add "id", 12345
'			Doc.Add "typeId", 262148
'			Doc.Add "inWorkspace", True
'			Doc.Add "location", 1
'		InputFiles = Array(Doc)

Function StartProcess(WfName, InputVariables, InputFiles)
	Dim Models: Set Models = wfsystem.getactiveworkflowmodels 
	For i = 0 To Models.Count - 1 
		Dim Model: Set Model = Models.Item(i) 
		
		' Suche nach WF Model
		If model.name = WfName then 
			' Setze Variablen 
			Dim Variables: Set Variables = Model.InputVariables 
			
			For Each VarName In InputVariables.Keys()
				Variables.item(VarName).value = InputVariables(VarName)
			Next
			
			' Setze Objekte in der Workflow Akte
	    	Dim Files: Set Files = Model.File 

			For Each CurFile In InputFiles
				Files.AddFileObject CurFile("id"),CurFile("typeId"), CurFile("inWorkspace"), CurFile("location")
			Next
			
	  		'Starte Prozess   
			StartProcess = Model.StartProcess(Files, Variables) 
			Exit Function
		 end if 
 	  Next
 	  
 	  ' Workflow nicht gefunden
 	  Err.Raise 1, "Workflowmodel " & WfName & " nicht gefunden"	  
End Function

Function Main
	If wfvariables.ElternProzess.Value = "" Then
	
		Dim InputVariables: Set InputVariables = CreateObject("Scripting.Dictionary")
		InputVariables.Add "ElternProzess", thisprocess.ProcessId
		InputVariables.Add "StartBenutzer", thisprocess.Creator
		
		Dim Doc: Set Doc = CreateObject("Scripting.Dictionary")
		Doc.Add "id", thisprocess.WFFile.FileObjects.Item(0).Id
		Doc.Add "typeId", thisprocess.WFFile.FileObjects.Item(0).ObjectType
		Doc.Add "inWorkspace", True
		Doc.Add "location", 1
		
		InputFiles = Array(Doc)
	
		StartProcess "Subprozess", InputVariables, InputFiles
		
		wfvariables.StartBenutzer.Value = thisprocess.Creator
		
	End If
End Function

Main

Ich hoffe das Beispiel hilft weiter.