Sdílet prostřednictvím


Jak: aktualizace modelu odkaz pomocí transakcí

Při definování rozšíření UML návrháři v Visual Studio Ultimate, můžete seskupit několik změn do jedné transakce se nazývá propojené kontextu funkce zpět.

Ve výchozím nastavení všechny změny, které provede kód v modelu lze je vrátit samostatně zpět uživateli.Například jestliže příkaz nabídky, který zaměňuje názvy dvou tříd UML, uživatel může vyvolat příkaz a proveďte jeden zpět.To by vrátit zpět změnu jeden název, ale ne na druhou, opuštění modelu nezamýšleným státu.

Zabránit, můžete provést kód řadu změn v rámci transakce.Díky změny vypadat jednu změnu uživateli.Příkaz následné zpět zpět celou řadu.

Další výhodou je, že kódu můžete vrátit zpět částečně dokončení sady změn došlo k výjimce nebo přerušení transakce.

Změny skupiny do jediné transakce

Zkontrolujte že odkazy projektu zahrnují.NET sestavení:

Microsoft.VisualStudio.Modeling.Sdk.11.0.dll

Uvnitř vaší třídy deklarujete dováženého majetku, který je typu ILinkedUndoContext:

using Microsoft.VisualStudio.Modeling.ExtensionEnablement;

...

class … {

[Import]

public ILinkedUndoContext LinkedUndoContext { get; set; }

V metodě upravuje model uzavřete změny v transakci:

using (ILinkedUndoTransaction transaction =

LinkedUndoContext.BeginTransaction("my updates"))

{

// code to update model elements or shapes goes here

transaction.Commit();

}

Následující oznámení:

  • Musí vždy obsahovat Commit() na konci transakce.Pokud je transakce vyřazen bez potvrzení, transakce bude vrácena zpět.Model, bude obnoven do stavu při zahájení transakce.

  • Pokud dojde k výjimce není zachycené uvnitř transakce, transakce bude vrácena zpět.Je časté vzorek uvádějte using transakce uvnitř bloku try…catch bloku.

  • Vnoření transakce.

  • Můžete zadat libovolný prázdný název na BeginTransaction().

  • Tyto transakce bude mít vliv pouze v úložišti modelu UML.Modelování transakce neovlivní: proměnné, externí úložiště například souborů a databází, diagramy vrstvy, číselné řady diagramů z kódu a kód modely.

 Příklad

    using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
    using Microsoft.VisualStudio.Uml.Interfaces;
    using Microsoft.VisualStudio.Uml.Classes;
    using Microsoft.VisualStudio.Uml.Extensions;
    using System.Linq;
    using System.ComponentModel.Composition;
 ...
  [Import]
  public ILinkedUndoContext LinkedUndoContext { get; set; }

  /// <summary>
  /// Swap the names of the currently selected elements.
  /// </summary>
  public void Execute(IMenuCommand command)
  {
    var selectedShapes =
      Context.CurrentDiagram.GetSelectedShapes<IClassifier>();
    if (selectedShapes.Count() < 2) return;
    IClassifier firstElement = selectedShapes.First().Element;
    IClassifier lastElement = selectedShapes.Last().Element;
    string firstName = firstElement.Name;
    // Perform changes inside a transaction so that undo
    // works as a single change.
    using (ILinkedUndoTransaction transaction = 
      LinkedUndoContext.BeginTransaction("Swap names"))
    {
        firstElement.Name = lastElement.Name;
        lastElement.Name = firstName;
        transaction.Commit();
    }
 }

Viz také

Koncepty

Programování v rozhraní API UML

Postup: definování příkazu nabídky diagramu modelování

Rozšíření modelů UML a diagramů