private static WorkflowApplication CreateWorkflowApplication(WorkflowHandlerBase workflowInstance, WorkflowApplicationCreationPurpose purpose, IDictionary <string, object> parameters)
{
try
{
string version;
WorkflowApplication wfApp = null;
var workflow = workflowInstance.CreateWorkflowInstance(out version);
switch (purpose)
{
case WorkflowApplicationCreationPurpose.StartNew:
Dictionary <string, object> arguments = workflowInstance.CreateParameters();
arguments.Add(STATECONTENT, new WfContent(workflowInstance));
if (parameters != null)
{
foreach (var item in parameters)
{
arguments.Add(item.Key, item.Value);
}
}
wfApp = new WorkflowApplication(workflow, arguments);
workflowInstance.WorkflowDefinitionVersion = version;
workflowInstance.WorkflowInstanceGuid = wfApp.Id.ToString();
break;
default:
wfApp = new WorkflowApplication(workflow);
break;
}
WriteDebug("CreateWorkflowApplication: NodeId: " + workflowInstance.Id + ", instanceId: " + workflowInstance.WorkflowInstanceGuid + ", Purpose: " + purpose);
InstanceHandle ownerHandle;
var store = CreateInstanceStore(workflowInstance, out ownerHandle);
Dictionary <XName, object> wfScope = new Dictionary <XName, object> {
{ GetWorkflowHostTypePropertyName(), GetWorkflowHostTypeName(workflowInstance) }
};
wfApp.InstanceStore = store;
wfApp.AddInitialInstanceValues(wfScope);
wfApp.PersistableIdle = a => { WriteDebug("PersistableIdle " + wfApp.Id); DestroyInstanceOwner(wfApp, ownerHandle); return(PersistableIdleAction.Unload); };
wfApp.Unloaded = b => { WriteDebug("Unloaded " + wfApp.Id); DestroyInstanceOwner(wfApp, ownerHandle); };
wfApp.Completed = c => { WriteDebug("Completed " + wfApp.Id); OnWorkflowCompleted(c); DestroyInstanceOwner(wfApp, ownerHandle); };
wfApp.Aborted = d => { WriteDebug("Aborted " + wfApp.Id); OnWorkflowAborted(d); DestroyInstanceOwner(wfApp, ownerHandle); };
wfApp.OnUnhandledException = e => { WriteDebug("OnUnhandledException " + wfApp.Id); return(HandleError(e)); };
wfApp.Extensions.Add(new ContentWorkflowExtension()
{
WorkflowInstancePath = workflowInstance.Path
});
return(wfApp);
}
catch (Exception e)
{
WriteError("CreateWorkflowApplication", e);
throw;
}
}