MapEdit Plugins erzeugen
Wir empfehlen Ihnen Visual Studio 2022 oder 2019 zu verwenden um Plugins für MapEdit zu erstellen. Für diese Anleitung wurde Visual Studio 2022 mit C# verwendet. Dies Anleitung bezieht sich auf MapEdit Version 23.1.261 (23.2.54) und höher. Benutzten Sie keine MapEdit Versionen älter als diese.
Vorbereitungen
Erzeugen Sie auf Ihrer Festplatte ein Verzeichnis in dem Sie ihre MapEdit Projekte speichern wollen.
z.B.
C:\Sandbox\MyMapEditProjects
und ein Unterverzeichnis CoreDLLs
C:\Sandbox\MyMapEditProjects\CoreDLLs
Kopieren Sie in dann aus dem Verzeichnis C:\Program Files (x86)\MuM MapEdit\ApiSamples\CoreDlls alle Dateien in das Verzeichnis C:\Sandbox\MyMapEditProjects\CoreDLLs
Falls Sie diese Dateien nicht haben lesen Sie bitte die Informationen aus dem Kapitel MapEdit API.
Achten Sie darauf das sie diese DLLs immer aktuell halten. Wenn Sie eine neue MapEdit Version installieren müssen Sie diese DLLs auch auf den neusten Stand bringen und ihre Plugins danach neu kompilieren.
Projekt in Visual Studio erzeugen
Starten Sie nun Visual Studio und wählen Sie "Create new project"
Tippen Sie in das Suchfeld "wpf user control .net" ein. und wählen Sie dann bei "project templates" das template "WPF User Control Library (.NET Framework)" für C# aus.
Achten Sie darauf das Sie genau diese template benutzen und nicht andere templates z.B. eines wo nicht in Klammern ".NET Framework" steht.
Vergeben Sie einen Namen und einen Speicherort für Ihr Projekt und stellen Sie sicher das bei Framework ".NET Framework 4.8" ausgewählt ist.
Wir empfehlen als Namen den Namen ihrer Firma gefolgt von einem Punkt und danach den Namen der angibt wozu das Plugin gut ist.
Beispielweise: "StadtwerkeLasVegas.Baum"
Wird dies nicht gemacht dann kann es ggf zu Konflikten mit anderen Herstellern kommen.
Löschen Sie die Datei "UserControl1.xaml". Diese wird nicht benötigt.
Platform einstellen
MapEdit Plugins müssen immer als 64Bit DLLs kompiliert werden.
Rechts klicken Sie im "Solution Explorer" auf das Projekt und dann "Properties". Im Properties Dialog setzen Sie "Platform Target" auf "x64"
MapEdit dlls referenzieren
Fügen Sie nun via Referenzen einen Verweise aus die MapEdit DLL hinzu
Drücken Sie den "Browse" Knopf
Gehen Sie dann in das Verzeichniss C:\Sandbox\MyMapEditProjects\CoreDLLs und fügen sie folgende 4 DLLs hinzu.
- Mum.Geo.Client.dll
- Mum.Geo.Client.Core.dll
- Mum.Geo.Shared.dll
- XSystem.dll
alle anderen benötigen sie momentan nicht.
Drücken Sie dann "Add" und "OK"
Referenzieren Sie NIE direkt DLLs aus dem Ordner "app" des Roaming Verzeichnisses oder des unter "MapEditStorageName" in der MapEdit.ini eingestellten Verzeichnisses. Erzeugen Sie wenn sie diese nutzen wollen immer eine Kopie in das Verzeichnis CoreDlls.
Machen Sie das nicht, blockieren sie damit ggf den internen automatischen DLL Update von MapEdit wenn eine neue Version von MapEdit auf dem MapEdit Server installiert wird.
Erzeugen der Haupt Plugin Klasse
Erzeugen sie nun eine neue Datei mit dem Namen "ClientPlugIn".
Ersetzen Sie dann den vorhandenen Code durch diesen Code.
using System;
using System.Windows;
namespace MySample1
{
public class ClientPlugIn : Mum.Geo.PlugIns.ClientPlugIn
{
public ClientPlugIn(Mum.Geo.PlugIns.ClientPlugInHost host)
: base(host)
{
//
}
public override void Load()
{
MessageBox.Show("Hey Ho");
}
}
}
Beachten Sie das Sie bei "namespace" den Namen Ihres Namespaces (bzw. Projektes) eintragen falls dieser nicht "MySample1" lautet.
Hiermit haben Sie das Grundgerüst für ein MapEdit PlugIn.
Kompilieren Sie nun das Projekt mit dem Menu Befehl "Build->Build".
In ihrem Projektverzeichnis sollte nun im Verzeichnis "bin\Debug" ihre Plugin DLL "MySample1.dll" vorhanden sein.
In unserem Beispiel C:\Sandbox\MyMapEditProjects\MySample1\bin\Debug
Projekt testen/debuggen
Gehen Sie in Visual Studio nun in den Projekt Eigenschaften (Properties) Dialog.
Geben Sie bei "Start external program" ihre MapEdit.Desktop.exe an (nicht MapEdit.exe)
Die MapEdit.Desktop.exe finden Sie in Ihren Cache Verzeichnis.
Diese finden Sie im Optionen Dialog unter "Datenspeicher" -> "Client Speicherordner öffnen". In dem angezeigten Ordner gehen Sie einen Ordner zurück und dann in den Ordner "app". Hier finden Sie die MapEdit.Desktop.exe.
Wahlweise Starten Sie MapEdit Desktop und öffnen Sie den Task Manager, unter Rechte Maus "File location" der Datei MapEdit.Desktop.exe finden Sie den vollen Pfadnamen.
Beispiel:
C:\Users\heyho\AppData\Roaming\MapEditDesktop\DevWin2024R1\app\MapEdit.Desktop.exe
Geben Sie diese bei "Start external programm" an.
Und unter "Command line arguments" geben Sie den Befehl
InlinePlugIn=C:\Sandbox\MyMapEditProjects\MySample1\bin\Debug\MySample1.dll
Also InlinePlugIn= den vollen Pfad Namen ihrer Plugin Datei.
Die Commando Zeilen Option "InlinePlugIn" ist erst seit MapEdit Desktop Version 23.1.261 (23.2.54) verfügbar.
Für Ribbon Plugins ist die Commando Zeilen Option "InlinePlugIn" erst ab MapEdit AppBuilder Version 23.2.124 verfügbar.
Starten Sie nun in Visual Studio das Projekt. Nun wird MapEdit gestartet und ihr Plugin geladen.
Beachten Sie das der MapEdit Server mit dieser Methode (InlinePlugIn) nicht lokal installiert werden muss.
Diese Vorgehen mit der Option "InlinePlugIn" ist nur zum testen und debuggen des PlugIns zu empfehlen. Das Plugin wird hierbei nur auf ihrem Rechner ausgeführt und nicht auf allen anderen Client Rechnern von MapEdit.
Beachten Sie das unabhängig von den Projekteinstellungen das Plugin mit dieser Methode immer geladen wird während im Echtbetrieb (also ohne die Option "InlinePlugIn") dieses nur bei den Projekten geladen wird bei denen es auch eingebunden ist.
Alternativer Wege zum Projekt testen/debuggen
Alternativ zu der Commando Zeilen Option "InlinePlugIn" können Sie, wenn der MapEdit Server lokal auf ihrem Rechner liegt, die Visual Studio "Build Events" nutzen um die die Plugin dll in das Verzeichnis
C:\inetpub\wwwroot\MumGeoData\Repositories\Default\Plugins\
zu kopieren. Die Datei muss statt der Endung ".dll" die Endung ".xap" haben.
Mit den Visual Studio "Post Build events" kann der Vorgang automatisiert werden. D.d. nach jedem kompilieren wird die Datei dann automatisch kopiert und umbenannt.
Tragen Sie dazu in Visual Studio bei "Post Build events" folgendes ein:
copy "$(TargetPath)" "C:\inetpub\wwwroot\MumGeoData\Repositories\Default\Plugins\$(TargetName).xap"
Alternativer Wege zum Projekt testen/debuggen für MuM Entwickler
MuM Entwickler können optional stattdessen die PostBuildTool.exe benutzten.
Tragen Sie dazu in Visual Studio bei "Post Build events" folgendes ein:
"$(ProjectDir)..\..\CoreDLLs\PostBuildTool.exe" PublishWpfPlugin $(TargetPath)
Da MuM Entwickler mehrere Versionen von MapEdit gleichzeitig auf ihren Rechner haben und dadurch mehrere MumGeoData Verzeichnisse haben, kopiert dieser Befehl das Plugin automtaisch in das richtige MumGeoData Verzeichniss.
Das Plugin in den Echtbetrieb geben
Wenn Sie Ihr Plugin fertiggestellt und getestet haben und allen zur Verfügung stellen wollen müssen Sie ihre Plugin DLL auf den MapServer hochladen.
Bei Versionen kleiner 23.2.55:
Hier ist zusätzlich folgender Schritt notwendig.
Erzeugen Sie eine Kopie ihrerer Plugin DLL.
Bei der Kopie ändern Sie die Endung "dll" nach "xap" um.
Also
C:\Sandbox\MyMapEditProjects\MySample1\bin\Debug\MySample1.dll
kopieren und die Kopie
C:\Sandbox\MyMapEditProjects\MySample1\bin\Debug\MySample1.xap
nennen.
Danach müssen sie diese xap Datei im AppBuilder auf den MapEdit Server hochladen.
Drücken Sie dazu den "Hochladen" Knopf.
Bei Versionen grösser 23.2.54:
Drücken Sie dazu den "Hochladen" Knopf und wählen Sie ihre Plugin DLL
Also im Beispiel:
C:\Sandbox\MyMapEditProjects\MySample1\bin\Debug\MySample1.dll
Diese wird dann auf dem MapEdit Server hochgeladen und die Endung
wird automatisch auf dem Server nach ".xap" geändert.
Desweiteren wird, wenn vorhanden auch die ".pdb" Datei hochgeladen.
Diese Datei enhält Debug Informationen und kann im Fehlerfall Hilfreiche
Informationen wie die Fehlerzeile etc bereitstellen.
und wählen Sie ihre Plugin XAP Datei C:\Sandbox\MyMapEditProjects\MySample1\bin\Debug\MySample1.xap
Dem Projekt ist nun das Plugin zugewiesen.
Wenn Sie das Plugin bei weiteren Projekten verwenden sollen, drücken Sie den "Hinzufügen" Knopf bei den Plugin Einstellungen des Projektes. Das Plugin wird nur bei den Projekten geladen bei denen es auch im AppBuilder eingebunden ist.
Das Hochladen selbst muss nur einmal geschehen oder wenn sich das Plugin ändert. Bei allen Projekten bei denen das Plugin eingebunden ist wird das gleiche Plugin verwendet. D.h. es muss nicht für jedes Projekt einzeln nochmals hochgeladen werden.