Zugriff auf TeamFoundationServer Source-Control

Dieses Kapitel bietet einen Überblick darüber, wie man auf einen Microsoft Team Foundation Server (TFS) programmgesteuert zugreifen kann, in dem die entsprechenden DLLs verwendet werden, die durch Visual Studio bereitgestellt werden. Diese Dokumentation wurde für einen besseren Überblick geschrieben und um die ersten Schritte einfacher zu gestalten, wenn Sie versuchen, den TwinCAT Automation Interface-Code mit TFS DLLs zu kombinieren. Für eine detailliertere Dokumentation über die TFS API empfehlen wir, die entsprechenden MSDN Artikel aufzurufen.

Dies Dokumentation befasst sich mit den folgenden Themen:

Die folgenden TFS API DLLs werden innerhalb dieser Dokumentation verwendet:

Verbindung zu einem TFS Server

Die Microsoft TFS API ermöglicht einen Anschluss Ihrer Anwendung, die den TwinCAT Code des Automation Interface enthält, an Ihr Entwicklungs-Repository auf einem Remote-Server. Die Verbindung erfordert einen String, der die Adresse, den Port und die Zusammenstellung Ihres Remote-Servers beschreibt, z. B. http://your-tfs:8080/tfs/DefaultCollection.

Vor der Verbindung müssen Sie eine Instanz der Uri-Klasse und der TfsConfigurationServer-Klasse definieren. Weisen Sie den Remote-Server-Link dem Konfigurationsserver zu:

Code-Ausschnitt (C#):

string tfsServerUrl = "http://your-server:8080/tfs/DefaultCollection";
Uri configurationServerUri = new Uri(tfsServerUrl);
TfsTeamProjectCollection teamProjects = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(configurationServerUri);
VersionControlServer verControlServer = teamProjects.GetService<VersionControlServer>();

Verbindung zu TeamProjects

Sie können eine Liste der Teamprojekte oder eines spezifischen Teamprojekts auf dem Server erhalten, indem Sie die folgenden Code-Ausschnitte ausführen:

Code-Ausschnitt (C#):

// Get all Team projects
TeamProject[] allProjects = verControlServer.GetAllTeamProjects(true);

// Get specific Team Project
TeamProject project = verControlServer.TryGetTeamProject("TeamProjectName");

Arbeit mit Arbeitsplätzen

Team Foundation arbeitet mit Arbeitsplätzen, die Mappings zu Arbeitsordnern enthalten. Diese Mappings verknüpfen serverseitige Ordner mit lokalen Ordnern auf Ihrer Festplatte. Zudem werden der Name des Inhabers und der Name Ihres Computers als Bestandteil des Arbeitsplatznamens gespeichert. Der Arbeitsplatz ist ein Muss, bevor eine Versionssteuerungsaufgabe ausgeführt wird, da er die Informationen über Dateien, Versionen und die Liste der anstehenden Änderungen speichert.

Zum Start mit TFS Client bietet die API eine Workspace Klasse, welche die vorstehend angeführten Informationen speichert und einen umfangreichen Satz an Methoden anbietet, um mit den Dateien und Ordnern zu interagieren. Angenommen, Sie möchten einen Arbeitsplatz für einen Ordner mit dem Namen folderName erstellen, erstellen Sie einen String, der den Computername und den Ordner enthält:

Code-Ausschnitt (C#):

// Specify workspace name for later use
String workspaceName = String.Format("{0}-{1}", Environment.MachineName, "Test_TFSAPI");

// Create new workspace
Workspace newWorkspace = verControlServer.CreateWorkspace(workspaceName, verControlServer.AuthorizedUser);

Es kann nun ein Mapping zwischen dem serverseitigen Ordner und Ihrem lokalen nach folderName spezifizierten Ordner unter dem Workspace geben. Zum Erhalt oder zum Löschen eines bestehenden Arbeitsplatzes führen Sie einfach die folgenden Methoden aus:

Code-Ausschnitt (C#):

// Delete workspace
bool workspaceDeleted = verControlServer.DeleteWorkspace(workspaceName, verControlServer.AuthorizedUser);

// Get existing workspace
Workspace existingWorkspace = verControlServer.GetWorkspace(workspaceName, verControlServer.AuthorizedUser);

Erstellung von Arbeitsordnern

Zur Verbindung mit einem spezifizierten Projektordner benötigen Sie einen relativen Pfad im Hinblick auf den Stamm.

Zum Beispiel, wenn das Projekt gespeichert ist auf: your-server\Development\TcSampleProjectX, dann ist der relative Pfad zu diesem Ordner $\Development\TcSampleProjectX.

Zur Angleichung dieses Ordners an die Projekte auf dem Server können Sie über einen Satz aller registrierten Projekte auf dem Server iterieren. Ein registriertes Projekt ist der Stamm der darunter befindlichen Projektsammlung.

Code-Ausschnitt (C#):

// Create mapping between server and local folder
string serverFolder = String.Format("$/{0}", teamProject.Name + "/Folder/SubFolder");
string localFolder = Path.Combine(@"C:\tfs", workspaceName);
WorkingFolder workingFolder = new WorkingFolder(serverFolder, localFolder);
existingWorkspace.CreateMapping(workingFolder);

Neueste Versionen erhalten

Wie bereits erwähnt, bietet die Arbeitsplatz-Klasse einen reichhaltigen Satz an Methoden, um TFS-Befehle aus dem Code heraus auszuführen. Zur Illustration folgt ein Beispiel zur Erstellung eines Links zu einem Element im Arbeitsordner. Zur Erstellung eines relativen Pfads:

Code-Ausschnitt (C#):

String existingItemPath = "$/Developement/TcSampleProject/Examples/Samples00/TestPlc/POUs/MAIN.TcPOU"; 

Oder eines absoluten Pfads:

String existingItemPath = C:/tfs/Developement/TcSampleProject/Examples/TestPlc/POUs/MAIN.TcPOU";

Zum Erhalt der aktuellsten Version des Elements im Beispiel, die folgende Codezeile hinzufügen:

Code-Ausschnitt (C#):

String existingItemPath = "$/TeamProjectName/Folder/SubFolder";
GetRequest itemRequest = new GetRequest(new ItemSpec(existingItemPath, RecursionType.Full), VersionSpec.Latest);
existingWorkspace.Get(itemRequest, GetOptions.GetAll);

Hier führt das RecursionType.Full die Anfrage für alle Elemente unter dem Elementknoten aus, aber Sie können es nach den Anforderungen Ihrer Anwendung und der bestehenden Hierarchie der Elemente auswählen. Weitere Informationen erhalten Sie unter der API Dokumentation auf MSDN.

Eine Liste von anstehenden Änderungen erhalten

Sie können ebenfalls eine Liste der anhängigen Änderungen erhalten, die an dem Element oder einer Sammlung von Elementen vorgenommen werden, und zwar durch die folgende Codezeile:

Code-Ausschnitt (C#):

PendingChange[] pendingChanges = existingWorkspace.GetPendingChanges(existingItemPath, RecursionType.Full);

Berücksichtigen Sie bei der Sammlung von Elementen die übergroßen Abweichungen bei Item[] als Argument.

Ein- und Auschecken

Sie können ein Element oder eine Sammlung von Elementen auschecken:

Code-Ausschnitt (C#):

int checkoutResult = existingWorkspace.PendEdit(existingItemPath, RecursionType.Full);

Zum Einchecken der Sammlung oder anstehenden Änderungen zu einem Element:

Code-Ausschnitt (C#):

int checkinResult = workspace.CheckIn(pendingChanges, usercomment);

–Vorgang rückgängig machen

Zum Rückgängigmachen eines Vorgangs einfach Folgendes ausführen:

Code-Ausschnitt (C#):

int undoResult = existingWorkspace.Undo(existingItemPath, RecursionType.Full);