Exemple #1
0
        static void Main(string[] args)
        {
            SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(connectionString);

            WorkflowApplication.CreateDefaultInstanceOwner(store, null, WorkflowIdentityFilter.Any);

            IDictionary <WorkflowIdentity, DynamicUpdateInfo> updateMaps = LoadMaps();

            foreach (Guid id in GetIds())
            {
                // Get a proxy to the instance.
                WorkflowApplicationInstance instance =
                    WorkflowApplication.GetInstance(id, store);

                Console.WriteLine("Inspecting: {0}", instance.DefinitionIdentity);

                // Only update v1 workflows.
                if (instance.DefinitionIdentity != null &&
                    instance.DefinitionIdentity.Version.Equals(new Version(1, 0, 0, 0)))
                {
                    DynamicUpdateInfo info = updateMaps[instance.DefinitionIdentity];

                    // Associate the persisted WorkflowApplicationInstance with
                    // a WorkflowApplication that is configured with the updated
                    // definition and updated WorkflowIdentity.
                    Activity            wf    = WorkflowVersionMap.GetWorkflowDefinition(info.newIdentity);
                    WorkflowApplication wfApp =
                        new WorkflowApplication(wf, info.newIdentity);

                    // Apply the Dynamic Update.
                    wfApp.Load(instance, info.updateMap);

                    // Persist the updated instance.
                    wfApp.Unload();

                    Console.WriteLine("Updated to: {0}", info.newIdentity);
                }
                else
                {
                    // Not updating this instance, so unload it.
                    instance.Abandon();
                }
            }
        }
Exemple #2
0
        static IDictionary <WorkflowIdentity, DynamicUpdateInfo> LoadMaps()
        {
            // There are 3 update maps to describe the changes to update v1 workflows,
            // one for reach of the 3 workflow types in the tutorial.
            Dictionary <WorkflowIdentity, DynamicUpdateInfo> maps =
                new Dictionary <WorkflowIdentity, DynamicUpdateInfo>();

            DynamicUpdateMap  sequentialMap  = LoadMap("SequentialNumberGuessWorkflow.map");
            DynamicUpdateInfo sequentialInfo = new DynamicUpdateInfo
            {
                updateMap   = sequentialMap,
                newIdentity = WorkflowVersionMap.SequentialNumberGuessIdentity_v15
            };

            maps.Add(WorkflowVersionMap.SequentialNumberGuessIdentity_v1, sequentialInfo);

            DynamicUpdateMap  stateMap  = LoadMap("StateMachineNumberGuessWorkflow.map");
            DynamicUpdateInfo stateInfo = new DynamicUpdateInfo
            {
                updateMap   = stateMap,
                newIdentity = WorkflowVersionMap.StateMachineNumberGuessIdentity_v15
            };

            maps.Add(WorkflowVersionMap.StateMachineNumberGuessIdentity_v1, stateInfo);

            DynamicUpdateMap  flowchartMap  = LoadMap("FlowchartNumberGuessWorkflow.map");
            DynamicUpdateInfo flowchartInfo = new DynamicUpdateInfo
            {
                updateMap   = flowchartMap,
                newIdentity = WorkflowVersionMap.FlowchartNumberGuessIdentity_v15
            };

            maps.Add(WorkflowVersionMap.FlowchartNumberGuessIdentity_v1, flowchartInfo);

            return(maps);
        }