CRM Customizations VS/TFS Integration

Microsoft Dynamics CRM bietet die optimale Grundlage um schnell Projekte abwickeln zu können. Viele Anpassungen an der Applikation erfordern keinen Code. Die Anpassungen werden als „Solutions“, in Form einer ZIP-Datei, exportiert. In Enterprise Szenarien soll jedoch auch für diese Anpassungen die volle ALM Funktionalität von Visual Studio und TFS genutzt werden können.

CRM Solutions
Die Anpassungen welche am CRM gemacht werden, werden in Solutions gekapselt und werden intern (im ZIP) durch XML-Files repräsentiert. Was genau dahinter steckt liest du im Post “CRM Solutions Deep Dive”. Hier mache ich es kurz: Die meisten Anpassungen befinden sich in einem einzelnen XML File, das mehrere tausend Zeilen lang sein kann.

CRM Solutions und die Source Control
Das einfachste ist, einfach die Solution zu exportieren und in die Source Control einzuchecken. Die Nachteile liegen auf der Hand: Kein Change Tracking (bzw. nur auf Solution/Datei Ebene), kein Merging bei Konflikten, kein Branching (technisch möglich, bringt jedoch nichts da die Anpassungen nicht einzeln gemerged werden können).
Da es sich um ein eine normale ZIP Datei handelt, können die XML Dateien einfach entpackt und in die Source Control eingecheckt werden.
Das bringt bereits einige Vorteile, richtig praktisch ist aber auch das nicht. Beinahe alles steckt in einem einzigen grossen File. Man denke an z.B. an den Output des svcutils, welches alle Klassen in einer Datei ablegt.
Wünschenswert wäre das ganze zu splitten z.B. pro Entität eine XML Datei.
Das hat sich wohl auch das Microsoft CRM Team gedacht und den CRM SolutionPackager entwickelt (siehe nächster Abschnitt).

CRM SolutionPackager
Beim CRM SolutionPackager handelt es sich um eine einfache Commandline Applikation, die zusammen mit dem SDK ausgeliefert wird. Mit Hilfe dieser Applikation lässt sich eine CRM Solution entpacken bzw. in ihre Bestandteile zerlegen (siehe “CRM Solutions Deep Dive”).
Die entpackten Dateien lassen sich nun einfach in die Source Control einchecken und managen.
Natürlich kann der SolutionPackager die Solutions auch wieder packen. Dazu später mehr.

SolutionPackager_1
Command: SolutionPackager.exe /zipfile:test_1_0_0_0.zip /action:extract /packagetype:both /folder:”.ClassLibrary3″ /allowDelete:No /nologo

Hinweis:
Am besten werden die unmanaged und die managed Solution im selben Ordner gespeichert und mit dem CRM SolutionPackager, mit dem Switch “/packagetype:both”, entpackt.
Somit lassen sich später wieder die managed sowie die unmanaged Solution aus den einzelnen Dateien generieren/packen.

Visual Studio Integration
Die entpackten Files können in in ein beliebiges VS Projekt integriert werden (z.B. CSProj). Am besten werden die Dateien gleich in das jeweilige Projektverzeichnis entpackt. So können Sie mit wenig Aufwand in das Projekt aufgenommen werden (siehe Bild).

SolutionPackager_2

SolutionPackager_3

Entwickler haben es gerne automatisiert.
Mit Hilfe des xRM CI Framework for CRM 2013 lässt sich einfach ein PowerShell-Script schreiben, welches eine Solution exportiert und gleich entpackt.

Somit haben sind die Solutions entpackt und es können alle Source Control/TFS Funktionen, die auch bei “normalen” Source Code Anwendung finden, benützt werden. Nun können wir sonst nicht mehr viel mit einer entpackten Solution anfangen. Also weiter zum nächsten Abschnitt.

Solutions als Build Output
Wie bereits erwähnt, können entpackte Solutions wieder mit dem SolutionPackager gepackt werden.
SolutionPackager_4
Command: SolutionPackager.exe /zipfile:”ClassLibrary3bintest_1_0_0_0.zip” /action:pack /packagetype:both /folder:”.ClassLibrary3″ /nologo

Da sich die Files schon in einem CSProj befinden, wäre es natürlich optimal die “Build” Action zu überschreiben.
Anstatt eine DLL erhält man als Output die gepackte Solution.
Dafür verweise ich auf meinen Post “Project default targets (build, rebuild & clean) überschreiben”. Als “%YOUR_ZIP_TOOL%” wird einfach der SolutionPackager eingesetzt 😉

Leave a Reply

Your email address will not be published. Required fields are marked *