Sdílet prostřednictvím


Postupy: Hostování několika verzí pracovního postupu současně

WorkflowIdentity poskytuje vývojářům aplikací pracovních postupů způsob, jak přidružit název a verzi k definici pracovního postupu a aby tyto informace byly přidruženy k trvalé instanci pracovního postupu. Tyto informace o identitě můžou vývojáři aplikací pracovních postupů používat k povolení scénářů, jako je souběžné spouštění více verzí definice pracovního postupu, a poskytuje základní kámen pro další funkce, jako je dynamická aktualizace. Tento krok v kurzu ukazuje, jak používat WorkflowIdentity k hostování více verzí pracovního postupu najednou.

V tomto tématu

V tomto kroku kurzu se aktivity v pracovním postupu upraví tak, WriteLine aby poskytovaly další informace a přidá se nová WriteLine aktivita. Uloží se kopie původního sestavení pracovního postupu a hostitelská aplikace se aktualizuje, aby bylo možné spustit původní i aktualizované pracovní postupy současně.

Poznámka:

Před provedením kroků v tomto tématu spusťte aplikaci, spusťte několik pracovních postupů každého typu a proveďte jeden nebo dva odhady pro každý z nich. Tyto trvalé pracovní postupy se používají v tomto kroku a v následujícím kroku: Aktualizace definice spuštěné instance pracovního postupu.

Vytvoření kopie projektu NumberGuessWorkflowActivities

  1. Otevřete řešení WF45GettingStartedTutorial v sadě Visual Studio 2012, pokud není otevřené.

  2. Stisknutím kláves CTRL+SHIFT+B řešení sestavíte.

  3. Zavřete řešení WF45GettingStartedTutorial.

  4. Otevřete Průzkumníka Windows a přejděte do složky, kde se nachází soubor řešení kurzu a složky projektu.

  5. Vytvořte novou složku s názvem PreviousVersions ve stejné složce jako NumberGuessWorkflowHost a NumberGuessWorkflowActivities. Tato složka slouží k zahrnutí sestavení, která obsahují různé verze pracovních postupů použitých v dalších krocích kurzu.

  6. Přejděte do složky NumberGuessWorkflowActivities\bin\debug (nebo bin\release v závislosti na nastavení projektu). Zkopírujte NumberGuessWorkflowActivities.dll a vložte ho do složky PreviousVersions .

  7. Přejmenujte NumberGuessWorkflowActivities.dll ve složce PreviousVersions na NumberGuessWorkflowActivities_v1.dll.

    Poznámka:

    Kroky v tomto tématu ukazují jeden ze způsobů, jak spravovat sestavení používaná k zahrnutí více verzí pracovních postupů. Lze také použít jiné metody, jako je silné pojmenování sestavení a jejich registrace v globální mezipaměti sestavení.

  8. Vytvořte novou složku s názvem NumberGuessWorkflowActivities_du ve stejné složce jako NumberGuessWorkflowHost, NumberGuessWorkflowActivities a nově přidanou složku PreviousVersions a zkopírujte všechny soubory a podsložky ze složky NumberGuessWorkflowActivities do nové složky NumberGuessWorkflowActivities_du . Tato záložní kopie projektu pro počáteční verzi aktivit se používá v části Postupy: Aktualizace definice spuštěné instance pracovního postupu.

  9. Znovu otevřete řešení WF45GettingStartedTutorial v sadě Visual Studio 2012.

Aktualizace pracovních postupů

V této části se aktualizují definice pracovního postupu. WriteLine Dvě aktivity, které poskytují zpětnou vazbu k odhadu uživatele, se aktualizují a přidá se nová WriteLine aktivita, která po odhadu čísla poskytne další informace o hře.

Aktualizace pracovního postupu StateMachine

  1. V Průzkumník řešení v části NumberGuessWorkflowActivities projektu poklikejte na StateMachineNumberGuessWorkflow.xaml.

  2. Poklikejte na přechod Nesprávný odhad na stavovém počítači.

  3. Text Aktualizujte aktivitu If úplně vlevoWriteLine.

    Guess & " is too low."
    
    Guess + " is too low."
    
  4. Text Aktualizujte v aktivitě If nejvíce vpravoWriteLine.

    Guess & " is too high."
    
    Guess + " is too high."
    
  5. Vraťte se do zobrazení počítače celkového stavu v návrháři pracovního postupu kliknutím na StateMachine v zobrazení s popisem cesty v horní části návrháře pracovního postupu.

  6. Poklikejte na přechod Pro odhad správnosti na stavovém počítači.

  7. Přetáhněte aktivitu WriteLine z části Primitives v sadě nástrojů a přesuňte ji na popisek akce přetažení sem popisek přechodu.

  8. Do pole vlastnosti zadejte následující výraz Text .

    Guess & " is correct. You guessed it in " & Turns & " turns."
    
    Guess + " is correct. You guessed it in " + Turns + " turns."
    

Aktualizace pracovního postupu vývojového diagramu

  1. V Průzkumník řešení v rámci projektu NumberGuessWorkflowActivities poklikejte na FlowchartNumberGuessWorkflow.xaml.

  2. Text Aktualizujte aktivitu nejvíce vlevoWriteLine.

    Guess & " is too low."
    
    Guess + " is too low."
    
  3. Text Aktualizujte správnou WriteLine aktivitu.

    Guess & " is too high."
    
    Guess + " is too high."
    
  4. Přetáhněte aktivitu WriteLine z části Primitives panelu nástrojů a přesuňte ji do bodu přetažení True akce nejvíce FlowDecisionnahoře . Aktivita WriteLine se přidá do vývojového diagramu a je propojená s True akcí objektu FlowDecision.

  5. Do pole vlastnosti zadejte následující výraz Text .

    Guess & " is correct. You guessed it in " & Turns & " turns."
    
    Guess + " is correct. You guessed it in " + Turns + " turns."
    

Aktualizace sekvenčního pracovního postupu

  1. V Průzkumník řešení v části NumberGuessWorkflowActivities projektu poklikejte na SequenceNumberGuessWorkflow.xaml.

  2. Text Aktualizujte aktivitu If úplně vlevoWriteLine.

    Guess & " is too low."
    
    Guess + " is too low."
    
  3. Text Aktualizujte aktivitu nejvíce vpravo WriteLine v aktivitěIf.

    Guess & " is too high."
    
    Guess + " is too high."
    
  4. Přetáhněte aktivitu WriteLine z části Primitives panelu nástrojů a přesuňte ji za aktivitu DoWhile tak, aby WriteLine je konečná aktivita v kořenové Sequence aktivitě.

  5. Do pole vlastnosti zadejte následující výraz Text .

    Guess & " is correct. You guessed it in " & Turns & " turns."
    
    Guess + " is correct. You guessed it in " + Turns + " turns."
    

Aktualizace WorkflowVersionMap tak, aby zahrnovala předchozí verze pracovního postupu

  1. Poklikáním otevřete WorkflowVersionMap.cs (nebo WorkflowVersionMap.vb) v projektu NumberGuessWorkflowHost .

  2. Na začátek souboru přidejte následující using příkazy (nebo Imports) s jinými using příkazy (nebo Imports).

    Imports System.Reflection
    Imports System.IO
    
    using System.Reflection;
    using System.IO;
    
  3. Přidejte tři nové identity pracovního postupu těsně pod tři existující deklarace identity pracovního postupu. Tyto nové v1 identity pracovního postupu budou použity, aby byly pracovní postupy spuštěny před provedením aktualizací správné definice pracovního postupu.

    'Current version identities.
    Public StateMachineNumberGuessIdentity As WorkflowIdentity
    Public FlowchartNumberGuessIdentity As WorkflowIdentity
    Public SequentialNumberGuessIdentity As WorkflowIdentity
    
    'v1 Identities.
    Public StateMachineNumberGuessIdentity_v1 As WorkflowIdentity
    Public FlowchartNumberGuessIdentity_v1 As WorkflowIdentity
    Public SequentialNumberGuessIdentity_v1 As WorkflowIdentity
    
    // Current version identities.
    static public WorkflowIdentity StateMachineNumberGuessIdentity;
    static public WorkflowIdentity FlowchartNumberGuessIdentity;
    static public WorkflowIdentity SequentialNumberGuessIdentity;
    
    // v1 identities.
    static public WorkflowIdentity StateMachineNumberGuessIdentity_v1;
    static public WorkflowIdentity FlowchartNumberGuessIdentity_v1;
    static public WorkflowIdentity SequentialNumberGuessIdentity_v1;
    
  4. V konstruktoru WorkflowVersionMapVersion aktualizujte vlastnost tří aktuálních identit pracovního postupu na 2.0.0.0.

    'Add the current workflow version identities.
    StateMachineNumberGuessIdentity = New WorkflowIdentity With
    {
        .Name = "StateMachineNumberGuessWorkflow",
        .Version = New Version(2, 0, 0, 0)
    }
    
    FlowchartNumberGuessIdentity = New WorkflowIdentity With
    {
        .Name = "FlowchartNumberGuessWorkflow",
        .Version = New Version(2, 0, 0, 0)
    }
    
    SequentialNumberGuessIdentity = New WorkflowIdentity With
    {
        .Name = "SequentialNumberGuessWorkflow",
        .Version = New Version(2, 0, 0, 0)
    }
    
    map.Add(StateMachineNumberGuessIdentity, New StateMachineNumberGuessWorkflow())
    map.Add(FlowchartNumberGuessIdentity, New FlowchartNumberGuessWorkflow())
    map.Add(SequentialNumberGuessIdentity, New SequentialNumberGuessWorkflow())
    
    // Add the current workflow version identities.
    StateMachineNumberGuessIdentity = new WorkflowIdentity
    {
        Name = "StateMachineNumberGuessWorkflow",
        // Version = new Version(1, 0, 0, 0),
        Version = new Version(2, 0, 0, 0)
    };
    
    FlowchartNumberGuessIdentity = new WorkflowIdentity
    {
        Name = "FlowchartNumberGuessWorkflow",
        // Version = new Version(1, 0, 0, 0),
        Version = new Version(2, 0, 0, 0)
    };
    
    SequentialNumberGuessIdentity = new WorkflowIdentity
    {
        Name = "SequentialNumberGuessWorkflow",
        // Version = new Version(1, 0, 0, 0),
        Version = new Version(2, 0, 0, 0)
    };
    
    map.Add(StateMachineNumberGuessIdentity, new StateMachineNumberGuessWorkflow());
    map.Add(FlowchartNumberGuessIdentity, new FlowchartNumberGuessWorkflow());
    map.Add(SequentialNumberGuessIdentity, new SequentialNumberGuessWorkflow());
    

    Kód, který přidá aktuální verze pracovních postupů do slovníku, používá aktuální verze odkazované v projektu, takže kód, který inicializuje definice pracovního postupu, není nutné aktualizovat.

  5. Do konstruktoru přidejte následující kód hned za kód, který přidá aktuální verze do slovníku.

    'Initialize the previous workflow version identities.
    StateMachineNumberGuessIdentity_v1 = New WorkflowIdentity With
    {
        .Name = "StateMachineNumberGuessWorkflow",
        .Version = New Version(1, 0, 0, 0)
    }
    
    FlowchartNumberGuessIdentity_v1 = New WorkflowIdentity With
    {
        .Name = "FlowchartNumberGuessWorkflow",
        .Version = New Version(1, 0, 0, 0)
    }
    
    SequentialNumberGuessIdentity_v1 = New WorkflowIdentity With
    {
        .Name = "SequentialNumberGuessWorkflow",
        .Version = New Version(1, 0, 0, 0)
    }
    
    // Initialize the previous workflow version identities.
    StateMachineNumberGuessIdentity_v1 = new WorkflowIdentity
    {
        Name = "StateMachineNumberGuessWorkflow",
        Version = new Version(1, 0, 0, 0)
    };
    
    FlowchartNumberGuessIdentity_v1 = new WorkflowIdentity
    {
        Name = "FlowchartNumberGuessWorkflow",
        Version = new Version(1, 0, 0, 0)
    };
    
    SequentialNumberGuessIdentity_v1 = new WorkflowIdentity
    {
        Name = "SequentialNumberGuessWorkflow",
        Version = new Version(1, 0, 0, 0)
    };
    

    Tyto identity pracovního postupu jsou přidruženy k počátečním verzím odpovídajících definic pracovního postupu.

  6. Dále načtěte sestavení, které obsahuje počáteční verzi definic pracovních postupů, a vytvořte a přidejte odpovídající definice pracovního postupu do slovníku.

    'Add the previous version workflow identities to the dictionary along with
    'the corresponding workflow definitions loaded from the v1 assembly.
    'Assembly.LoadFile requires an absolute path so convert this relative path
    'to an absolute path.
    Dim v1AssemblyPath As String = "..\..\..\PreviousVersions\NumberGuessWorkflowActivities_v1.dll"
    v1AssemblyPath = Path.GetFullPath(v1AssemblyPath)
    Dim v1Assembly As Assembly = Assembly.LoadFile(v1AssemblyPath)
    
    map.Add(StateMachineNumberGuessIdentity_v1,
        v1Assembly.CreateInstance("NumberGuessWorkflowActivities.StateMachineNumberGuessWorkflow"))
    
    map.Add(SequentialNumberGuessIdentity_v1,
        v1Assembly.CreateInstance("NumberGuessWorkflowActivities.SequentialNumberGuessWorkflow"))
    
    map.Add(FlowchartNumberGuessIdentity_v1,
        v1Assembly.CreateInstance("NumberGuessWorkflowActivities.FlowchartNumberGuessWorkflow"))
    
    // Add the previous version workflow identities to the dictionary along with
    // the corresponding workflow definitions loaded from the v1 assembly.
    // Assembly.LoadFile requires an absolute path so convert this relative path
    // to an absolute path.
    string v1AssemblyPath = @"..\..\..\PreviousVersions\NumberGuessWorkflowActivities_v1.dll";
    v1AssemblyPath = Path.GetFullPath(v1AssemblyPath);
    Assembly v1Assembly = Assembly.LoadFile(v1AssemblyPath);
    
    map.Add(StateMachineNumberGuessIdentity_v1,
        v1Assembly.CreateInstance("NumberGuessWorkflowActivities.StateMachineNumberGuessWorkflow") as Activity);
    
    map.Add(SequentialNumberGuessIdentity_v1,
        v1Assembly.CreateInstance("NumberGuessWorkflowActivities.SequentialNumberGuessWorkflow") as Activity);
    
    map.Add(FlowchartNumberGuessIdentity_v1,
        v1Assembly.CreateInstance("NumberGuessWorkflowActivities.FlowchartNumberGuessWorkflow") as Activity);
    

    Následující příklad je úplný výpis aktualizované WorkflowVersionMap třídy.

    Public Module WorkflowVersionMap
        Dim map As Dictionary(Of WorkflowIdentity, Activity)
    
        'Current version identities.
        Public StateMachineNumberGuessIdentity As WorkflowIdentity
        Public FlowchartNumberGuessIdentity As WorkflowIdentity
        Public SequentialNumberGuessIdentity As WorkflowIdentity
    
        'v1 Identities.
        Public StateMachineNumberGuessIdentity_v1 As WorkflowIdentity
        Public FlowchartNumberGuessIdentity_v1 As WorkflowIdentity
        Public SequentialNumberGuessIdentity_v1 As WorkflowIdentity
    
        Sub New()
            map = New Dictionary(Of WorkflowIdentity, Activity)
    
            'Add the current workflow version identities.
            StateMachineNumberGuessIdentity = New WorkflowIdentity With
            {
                .Name = "StateMachineNumberGuessWorkflow",
                .Version = New Version(2, 0, 0, 0)
            }
    
            FlowchartNumberGuessIdentity = New WorkflowIdentity With
            {
                .Name = "FlowchartNumberGuessWorkflow",
                .Version = New Version(2, 0, 0, 0)
            }
    
            SequentialNumberGuessIdentity = New WorkflowIdentity With
            {
                .Name = "SequentialNumberGuessWorkflow",
                .Version = New Version(2, 0, 0, 0)
            }
    
            map.Add(StateMachineNumberGuessIdentity, New StateMachineNumberGuessWorkflow())
            map.Add(FlowchartNumberGuessIdentity, New FlowchartNumberGuessWorkflow())
            map.Add(SequentialNumberGuessIdentity, New SequentialNumberGuessWorkflow())
    
            'Initialize the previous workflow version identities.
            StateMachineNumberGuessIdentity_v1 = New WorkflowIdentity With
            {
                .Name = "StateMachineNumberGuessWorkflow",
                .Version = New Version(1, 0, 0, 0)
            }
    
            FlowchartNumberGuessIdentity_v1 = New WorkflowIdentity With
            {
                .Name = "FlowchartNumberGuessWorkflow",
                .Version = New Version(1, 0, 0, 0)
            }
    
            SequentialNumberGuessIdentity_v1 = New WorkflowIdentity With
            {
                .Name = "SequentialNumberGuessWorkflow",
                .Version = New Version(1, 0, 0, 0)
            }
    
            'Add the previous version workflow identities to the dictionary along with
            'the corresponding workflow definitions loaded from the v1 assembly.
            'Assembly.LoadFile requires an absolute path so convert this relative path
            'to an absolute path.
            Dim v1AssemblyPath As String = "..\..\..\PreviousVersions\NumberGuessWorkflowActivities_v1.dll"
            v1AssemblyPath = Path.GetFullPath(v1AssemblyPath)
            Dim v1Assembly As Assembly = Assembly.LoadFile(v1AssemblyPath)
    
            map.Add(StateMachineNumberGuessIdentity_v1,
                v1Assembly.CreateInstance("NumberGuessWorkflowActivities.StateMachineNumberGuessWorkflow"))
    
            map.Add(SequentialNumberGuessIdentity_v1,
                v1Assembly.CreateInstance("NumberGuessWorkflowActivities.SequentialNumberGuessWorkflow"))
    
            map.Add(FlowchartNumberGuessIdentity_v1,
                v1Assembly.CreateInstance("NumberGuessWorkflowActivities.FlowchartNumberGuessWorkflow"))
        End Sub
    
        Public Function GetWorkflowDefinition(identity As WorkflowIdentity) As Activity
            Return map(identity)
        End Function
    
        Public Function GetIdentityDescription(identity As WorkflowIdentity) As String
            Return identity.ToString()
        End Function
    End Module
    
    public static class WorkflowVersionMap
    {
        static Dictionary<WorkflowIdentity, Activity> map;
    
        // Current version identities.
        static public WorkflowIdentity StateMachineNumberGuessIdentity;
        static public WorkflowIdentity FlowchartNumberGuessIdentity;
        static public WorkflowIdentity SequentialNumberGuessIdentity;
    
        // v1 identities.
        static public WorkflowIdentity StateMachineNumberGuessIdentity_v1;
        static public WorkflowIdentity FlowchartNumberGuessIdentity_v1;
        static public WorkflowIdentity SequentialNumberGuessIdentity_v1;
    
        static WorkflowVersionMap()
        {
            map = new Dictionary<WorkflowIdentity, Activity>();
    
            // Add the current workflow version identities.
            StateMachineNumberGuessIdentity = new WorkflowIdentity
            {
                Name = "StateMachineNumberGuessWorkflow",
                // Version = new Version(1, 0, 0, 0),
                Version = new Version(2, 0, 0, 0)
            };
    
            FlowchartNumberGuessIdentity = new WorkflowIdentity
            {
                Name = "FlowchartNumberGuessWorkflow",
                // Version = new Version(1, 0, 0, 0),
                Version = new Version(2, 0, 0, 0)
            };
    
            SequentialNumberGuessIdentity = new WorkflowIdentity
            {
                Name = "SequentialNumberGuessWorkflow",
                // Version = new Version(1, 0, 0, 0),
                Version = new Version(2, 0, 0, 0)
            };
    
            map.Add(StateMachineNumberGuessIdentity, new StateMachineNumberGuessWorkflow());
            map.Add(FlowchartNumberGuessIdentity, new FlowchartNumberGuessWorkflow());
            map.Add(SequentialNumberGuessIdentity, new SequentialNumberGuessWorkflow());
    
            // Initialize the previous workflow version identities.
            StateMachineNumberGuessIdentity_v1 = new WorkflowIdentity
            {
                Name = "StateMachineNumberGuessWorkflow",
                Version = new Version(1, 0, 0, 0)
            };
    
            FlowchartNumberGuessIdentity_v1 = new WorkflowIdentity
            {
                Name = "FlowchartNumberGuessWorkflow",
                Version = new Version(1, 0, 0, 0)
            };
    
            SequentialNumberGuessIdentity_v1 = new WorkflowIdentity
            {
                Name = "SequentialNumberGuessWorkflow",
                Version = new Version(1, 0, 0, 0)
            };
    
            // Add the previous version workflow identities to the dictionary along with
            // the corresponding workflow definitions loaded from the v1 assembly.
            // Assembly.LoadFile requires an absolute path so convert this relative path
            // to an absolute path.
            string v1AssemblyPath = @"..\..\..\PreviousVersions\NumberGuessWorkflowActivities_v1.dll";
            v1AssemblyPath = Path.GetFullPath(v1AssemblyPath);
            Assembly v1Assembly = Assembly.LoadFile(v1AssemblyPath);
    
            map.Add(StateMachineNumberGuessIdentity_v1,
                v1Assembly.CreateInstance("NumberGuessWorkflowActivities.StateMachineNumberGuessWorkflow") as Activity);
    
            map.Add(SequentialNumberGuessIdentity_v1,
                v1Assembly.CreateInstance("NumberGuessWorkflowActivities.SequentialNumberGuessWorkflow") as Activity);
    
            map.Add(FlowchartNumberGuessIdentity_v1,
                v1Assembly.CreateInstance("NumberGuessWorkflowActivities.FlowchartNumberGuessWorkflow") as Activity);
        }
    
        public static Activity GetWorkflowDefinition(WorkflowIdentity identity)
        {
            return map[identity];
        }
    
        public static string GetIdentityDescription(WorkflowIdentity identity)
        {
            return identity.ToString();
        }
    }
    

Sestavení a spuštění aplikace

  1. Stisknutím kombinace kláves CTRL+SHIFT+B sestavte aplikaci a pak ji spusťte stisknutím kombinace kláves CTRL+F5.

  2. Kliknutím na Nová hra zahájíte nový pracovní postup. Verze pracovního postupu se zobrazí v okně stavu a odráží aktualizovanou verzi z přidruženého WorkflowIdentity. Poznamenejte InstanceId si soubor sledování pracovního postupu po dokončení a zadejte odhady, dokud hra nebude dokončena. Všimněte si, jak se odhad uživatele zobrazí v informacích zobrazených v okně stavu na základě aktualizací WriteLine aktivit.

    Please enter a number between 1 and 10
    5 is too high.
    Please enter a number between 1 and 10
    3 is too high.
    Please enter a number between 1 and 10
    1 is too low.
    Please enter a number between 1 and 10
    Congratulations, you guessed the number in 4 turns.
    

    Poznámka:

    Zobrazí se aktualizovaný text z WriteLine aktivit, ale výstup poslední WriteLine aktivity přidané v tomto tématu není. Důvodem je, že obslužná rutina aktualizuje stavové PersistableIdle okno. Vzhledem k tomu, že se pracovní postup dokončí a po závěrečné aktivitě nečiní, obslužná rutina PersistableIdle se nevolá. Obslužná rutina ale zobrazí podobnou zprávu v okně Completed stavu. V případě potřeby lze do Completed obslužné rutiny přidat kód, který extrahuje text z StringWriter okna stavu a zobrazí ho.

  3. Otevřete Průzkumníka Windows a přejděte do složky NumberGuessWorkflowHost\bin\debug (nebo bin\release v závislosti na nastavení projektu) a otevřete sledovací soubor pomocí Poznámkový blok, který odpovídá dokončeným pracovnímu postupu. Pokud jste si tuto zprávu nevšimli, můžete pomocí informací o změně data v Průzkumníku InstanceIdWindows identifikovat správný sledovací soubor.

    Please enter a number between 1 and 10
    5 is too high.
    Please enter a number between 1 and 10
    3 is too high.
    Please enter a number between 1 and 10
    1 is too low.
    Please enter a number between 1 and 10
    2 is correct. You guessed it in 4 turns.
    

    Aktualizovaný WriteLine výstup je obsažen v souboru sledování, včetně výstupu WriteLine přidaného v tomto tématu.

  4. Přepněte zpět na aplikaci pro hádání čísel a vyberte jeden z pracovních postupů, které byly zahájeny před provedením aktualizací. Verzi aktuálně vybraného pracovního postupu můžete identifikovat tak, že se podíváte na informace o verzi zobrazené pod oknem stavu. Zadejte nějaké odhady a všimněte si, že aktualizace stavu odpovídají výstupu WriteLine aktivity z předchozí verze a nezahrnují odhad uživatele. Je to proto, že tyto pracovní postupy používají předchozí definici pracovního postupu, která neobsahuje WriteLine aktualizace.

    V dalším kroku Postupy : Aktualizace definice spuštěné instance pracovního postupu, spuštěné v1 instance pracovního postupu jsou aktualizovány tak, aby obsahovaly nové funkce jako v2 instance.