Erstellen Sie eine C#-Klassenbibliothek von Grund auf basierend auf SuperMap iDesktop für die Plug-in-Entwicklung

Autor: Tour

Vorwort : Einige Kunden sind mit den vorhandenen Funktionen von iDesktop nicht zufrieden und möchten selbst Plug-Ins für iDesktop entwickeln, haben aber keine Ahnung von der Plug-In-Entwicklung, sind ratlos und die Anweisungen in den Hilfedokumenten sind zu alt. Der Herausgeber hat kürzlich ein einfaches Plug-In basierend auf SuperMap iDesktop geschrieben. Jetzt habe ich die Schritte von der Entwicklung bis zur Verpackung und Installation des Plug-Ins geklärt. Es ist sehr benutzerfreundlich für Anfänger-Plug-In-Entwickler. Ich hoffe, es kann für Programmierer hilfreich sein. Der Plug-In-Link dieses Dokuments lautet wie folgt: https://download.csdn.net/download/supermapsupport/87354853 Wenn Sie es benötigen, können Sie es herunterladen und selbst anzeigen .

1. Vorbereitung und Umgebungskonfiguration

Bezüglich der vorbereitenden Vorbereitungs- und Umgebungskonfigurationsteile können Sie auf die Vorbereitungsarbeits- und Umgebungskonfigurationsteile im Blog dieses Artikels verweisen. Der Link lautet wie folgt: https://blog.csdn.net/supermapsupport/article/details/127007251 , und ich werde nicht zu viel darüber vorstellen. Auf referenzierte Dateien können Benutzer je nach Bedarf verweisen.

注意:使用窗体程序还需引入DevExpress.Utils.v17.1.dll文件。

2. Plug-in-Entwicklung

Benutzer können auf den ursprünglichen Beispielcode zurückgreifen, um ihn auszuführen und anzuzeigen. Das SampleCode-Verzeichnis im SuperMap iDesktop 10i/11i-Installationsverzeichnis enthält einige Beispielcodes für die iDesktop-Plug-in-Entwicklung. Benutzer können den vorhandenen Beispielcode direkt ändern, um die benutzerdefinierte SuperMap iDesktop 10i/11i-Plug-in-Entwicklung zu realisieren. Wenn nicht, können Sie es im Offline-Hilfedokument herunterladen, wie in der Abbildung unten dargestellt:
Fügen Sie hier eine Bildbeschreibung ein
Benutzer können dieses Dokument auch verwenden, um C#-Bibliotheksklassen von Grund auf für die Plug-In-Entwicklung zu erstellen.

2.1. Konfigurationsdatei

Benutzer können das Layout und den Status des benutzerdefinierten Erweiterungs-Plug-Ins auf dem SuperMap iDesktop-Desktop einfach über die Plug-In-Konfigurationsdatei (*.config) anpassen. Jedes Mal, wenn ein Benutzer ein Plug-In entwickelt, muss eine entsprechende Konfigurationsdatei für das Plug-In bereitgestellt werden. Die Plug-In-Konfigurationsdatei umfasst hauptsächlich die Plug-In-Konfiguration, die Konfiguration von Schnittstellenelementen und die Konfiguration des Hilfesystems. SuperMap iDesktop-Konfigurationsdateien haben alle *.config als Erweiterung und werden im Standard-XML-Format geschrieben und gespeichert. Gleichzeitig müssen Plug-Ins einen Namensraum haben, dessen Wert http://www.supermap.com/desktop ist.

2.1.1. Erstellen Sie eine neue Anwendungskonfigurationsdatei,
wie in der folgenden Abbildung dargestellt:
Fügen Sie hier eine Bildbeschreibung ein

Da durch die obigen Schritte der Post-Build-Ereignisbefehl des Projekts so konfiguriert wurde, dass die neu erstellte Anwendungskonfigurationsdatei kopiert wird, ist es nicht erforderlich, die Konfigurationsdatei beim Kompilieren auszugeben.
Fügen Sie hier eine Bildbeschreibung ein

2.1.2. Konfigurationsdateien schreiben

Sie können das Dateimenü konfigurieren, die Shortcut-Schaltflächenleiste konfigurieren, die Statusleiste konfigurieren, das Rechtsklick-Menü konfigurieren, den Funktionsbereich konfigurieren usw.
Informationen zum Schreiben von Konfigurationsdateien finden Sie im Abschnitt [Erweiterter Entwicklungsleitfaden] -> [Anwendungskonfigurationsdateien schreiben] im Hilfedokument. In diesem Dokument werden nur einige wichtige Parameter erläutert.
Die Konfigurationsdatei in diesem Beispiel ist wie folgt geschrieben und Sie können sie zu Referenzzwecken auf der folgenden Grundlage ändern:

<?xml version="1.0" encoding="utf-8"?>
<plugin xmlns="http://www.supermap.com.cn/desktop" name="test" author="test" url="www.supermap.com.cn"
 description="DesktopPlugin1 Plugin" helpLocalRoot="" helpOnlineRoot="">
	<runtime assemblyName="./Plugins/test/SuperMap.Desktop.Ext.test.dll" className="SuperMap.Desktop.Ext.DesktopPlugin" loadOrder="2000" enabled="True" />
	<!--Ribbon上自定义各种控件-->
	<toolbox>
		<ribbon>
			<tabs>
				<tab index="3" id="DataProcess" label="数据" formClass="" visible="true">
					<group index="3" id="DataProcess" label="数据处理" image="" visible="true">
						<gallery index="10" id="DataProcess" visible="" style=""  >
							<galleryItems index="1" id="Vector" visible="" label="">
								<buttonGallery index="30" label="查询重叠点线面" visible="" checkState="" assemblyName="./Plugins/test/SuperMap.Desktop.Ext.test.dll"
								  onAction="SuperMap.Desktop.Ext.myCtrlAction" image="./Plugins/test/img/重复.png"
								  style="" screenTip="打开对话框,进行重叠的点或线或面重叠的查询。" screenTipImage=""
								  helpURL="WebHelp\UseExplanation\Ribbon\tabs\datasource\groups\newcreatedataset\CreateDatasetPoint.html" />
							</galleryItems>
						</gallery>
					</group>
				</tab>
			</tabs>
		</ribbon>
	</toolbox>
</plugin>

Erklären Sie einige weitere wichtige Parameterkonfigurationen:

  1. Laufzeit : Das Tag wird verwendet, um Informationen über die Plugin-Laufzeit bereitzustellen.
    • AssemblyName: Der Name der Assembly-Datei, der ein relativer Pfad relativ zum ausführbaren Programm oder ein absoluter Pfad sein kann, und der Wert dieser Eigenschaft muss korrekt festgelegt sein.
  • className: Der Name der Klasse, die das Plugin implementiert, die von der Plugin-Klasse erben muss. Der hier angegebene Klassenname des Implementierungs-Plugins muss ein vollständiger Name sein, d. h. sein Namespace muss angegeben werden. Der Wert dieser Eigenschaft muss korrekt eingestellt sein.
  • LoadOrder: Die Ladereihenfolge des Plug-Ins. Verwenden Sie eine Ganzzahl, um die Ladereihenfolge des Plug-Ins zu identifizieren. Je kleiner der Wert, desto früher wird das Plug-In geladen. Der Wert dieses Attributs muss korrekt festgelegt werden. Hinweis: Wenn das neue Plug-In des Benutzers von dem vom System bereitgestellten Plug-In abhängt, muss sichergestellt werden, dass das vom System bereitgestellte Plug-In zuerst gestartet wird.
  • aktiviert: Wird verwendet, um zu steuern, ob das Plugin geladen werden soll. true bedeutet, dass das Plugin geladen wird und verwendet werden kann; false bedeutet, dass es nicht geladen wird und das Plugin deaktiviert ist.
  1. buttonGallery -Schaltfläche
  • Index: Wird zum Sortieren der Registerkarten (Registerkartenseiten) in der Multifunktionsleiste verwendet. Wenn also mehrere Registerkarten in der Multifunktionsleiste vorhanden sind, verwendet jede Registerkarte den Wert dieses Elements, um ihre Reihenfolge in der Multifunktionsleiste zu bestimmen.
  • ID: Die Registerkarte unterstützt das Zusammenführen und Anzeigen mehrerer Elemente in verschiedenen Konfigurationsdateien. Die Basis für die Zusammenführung wird durch die ID realisiert. Das heißt, wir können eine Registerkarte in der Konfigurationsdatei des A-Plug-Ins konfigurieren, eine ID angeben und eine Registerkarte im B-Plug-In konfigurieren und dieselbe ID angeben. Wenn das System angezeigt wird, werden die Elemente in den beiden Registerkarten zusammengeführt und auf einer Registerkarte angezeigt.
  • AssemblyName: Wie oben.
  • onAction: Mit diesem Attribut kann der Inhalt angegeben werden, der als Reaktion auf das Klickereignis der ButtonGallery-Schaltfläche ausgeführt werden soll. Dieses Attribut kann als Klasse angegeben werden, die von der CtrlAction-Klasse erbt oder die ICtrlAction-Schnittstelle implementiert. Um den vollständigen Namen der Klasse anzugeben, muss auf den Namespace der Klasse hingewiesen werden. In diesem Beispiel ist der an onAction gebundene Dateiname beispielsweise die Bibliotheksklasse myCtrlAction.cs (diese Klasse wird später in diesem Artikel erläutert), und der Arbeitsbereich dieser Klasse ist SuperMap.Desktop.Ext, daher lautet der Wortlaut hier SuperMap.Desktop.Ext.myCtrlAction.

Hinweis: Die Einstellungen der beiden Parameter index und id können Sie unter [Ansicht] -> [Umgebungsdesign] überprüfen.
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

2.2. Plugin-Klasse erstellen

Diese Klasse wird zum Festlegen der Plugin-Definitionsklasse verwendet. Jedes Plugin muss in einer Klasse vorhanden sein, die von der Plugin-Klasse abgeleitet ist und hauptsächlich für die Initialisierung und Beendigung des Plugins sowie andere damit verbundene Arbeiten verantwortlich ist

2.2.1 Erstellen Sie eine neue Plugin-Klasse.
Erstellen Sie eine neue Klasse, wie in der folgenden Abbildung dargestellt:

Fügen Sie hier eine Bildbeschreibung ein

2.2.2 Code schreiben:
Nachdem die Erstellung abgeschlossen ist, müssen Sie den Verweis auf die Verwendung von SuperMap.Desktop festlegen;
und diese Klasse muss vom Plugin erben. Code wie folgt anzeigen:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SuperMap.Desktop;

namespace SuperMap.Desktop.Ext
{
    
    
    internal class DesktopPlugin:Plugin
    {
    
    
        public DesktopPlugin(PluginInfo pluginInfo)
    : base(pluginInfo)
        {
    
    
        }
        public override Boolean Initialize()
        {
    
    
            return true;
        }

        public override Boolean ExitInstance()
        {
    
    
            return true;
        }

    }
}

Zu diesem Zeitpunkt können Sie das Programm normal ausführen, indem Sie es ausführen, und Sie können die Beschriftungsschaltfläche an der entsprechenden Position sehen. Wie in der folgenden Abbildung dargestellt:
Fügen Sie hier eine Bildbeschreibung ein
Der nächste Schritt besteht darin, das Eingabeprogramm nach dem Start des Plug-In-Programms festzulegen und ihn durch Erstellen einer neuen StrgAktion abzuschließen.

2.3. Realisieren Sie die Run-Funktion

Die Run-Funktion ist das Einstiegsprogramm nach dem Start des Plug-In-Programms, also der Einstiegspunkt des Programms. Einfach ausgedrückt handelt es sich dabei um den Vorgang, bei dem auf das Plug-in geklickt wird, um es in iDesktop auszuführen.

2.3.1. Erstellen Sie eine neue Klasse myCtrlAction
wie in der folgenden Abbildung gezeigt:
Fügen Sie hier eine Bildbeschreibung ein

2.3.2 Code schreiben
Diese Klasse erbt von CtrlAction und die öffentliche Override-Methode void Run () ist in dieser Klasse überladen. Das heißt, wenn das Steuerereignis ausgelöst wird, wird die Run ()-Methode des Objekts aufgerufen und der Code wie folgt hinzugefügt: (Dieser Code zeigt, dass beim Klicken auf die Schaltfläche auf dem Desktop das Form1-Formular angezeigt wird.)

namespace SuperMap.Desktop.Ext
{
    
    
    class myCtrlAction:CtrlAction
    {
    
    
        public myCtrlAction(IBaseItem caller)
    : base(caller)
        {
    
    
        }
        public override void Run()
        {
    
    
            Form1 form = new Form1();
            form.ShowDialog();
        }
    }
}

2.4. Formulardesign

2.4.1. Erstellen Sie ein neues Benutzersteuerelement (Windows Form),
wie unten gezeigt:
Fügen Sie hier eine Bildbeschreibung ein

2.4.2. Formularumgebung konfigurieren
Nachdem das Formular erfolgreich erstellt wurde, klicken Sie mit der rechten Maustaste in das neu erstellte Formular, um den Code anzuzeigen und zu bearbeiten.
1) Die Plug-Ins für Erweiterung und Entwicklung verfügen alle über eine einheitliche Basisschnittstelle IForm. Ändern Sie daher die von der Form geerbte übergeordnete Klasse: Form1 -> UIForm 2) und führen Sie mindestens 4 Namespaces ein: mithilfe von SuperMap.Desktop.UI, mithilfe von SuperMap.Data und mithilfe von
DevExpress.Utils

2.4.3. Schnittstellendesign
Es gibt zwei Methoden:
1) Benutzer können das Formular über vs2022 entwerfen, das 64-Bit-Steuerelement-Drag-and-Drop unterstützt. 2
) Formulardesign über Code
. Wenn Sie ein Steuerelement mit demselben Stil wie den Desktop entwerfen möchten, müssen Sie beim Entwerfen SuperMap.Desktop.UI verwenden. Zum Beispiel: SuperMap.Desktop.UI.UIButton(), SuperMap.Desktop.UI.UIGroupBox() usw.
Offensichtlich können Sie sehen, dass der Stil mit iDesktop übereinstimmt. Das Schnittstellendesign ist in der folgenden Abbildung dargestellt:
Fügen Sie hier eine Bildbeschreibung ein
Bisher können wir das Programm ausführen, um einen Blick darauf zu werfen. In diesem Moment können wir sehen, dass durch Klicken auf die Schaltfläche das Fenster normal geöffnet werden kann, wie in der folgenden Abbildung dargestellt. Der nächste Schritt besteht darin, den Funktionscode zu schreiben.
Fügen Sie hier eine Bildbeschreibung ein

2.5. Programmfunktionen schreiben

Die Prämisse der ersten Operation besteht darin, dass wir den Arbeitsbereich des Arbeitsbereichs erhalten möchten. Wie erhält man also den Arbeitsbereich des aktuellen Programms im Unterformular?
Dies wird unsere Anwendungsklasse verwenden .

Anwendungsklasse : Anwendungsklasse, die Funktionen wie das Starten des Hauptfensters, die Plug-In-Verwaltung sowie die Kompilierung und Ausführung von Codesegmenten implementiert. Bei SuperMap iDesktop-Desktopprodukten entsprechen ein Hauptfenster und zugehörige Ressourcen einer Anwendungsklasse (Anwendungsklasse). Der Inhalt der Instanzobjektverwaltung umfasst: Arbeitsbereich (Workspace), Plug-In-Manager (PluginManager) zum Verwalten von Plug-Ins im Anwendungsprogramm, Codesegment-Kompilierungs-Executor (IScript), Anwendungshauptfenster (IFormMain), Anwendungsstartschnittstelle (ISplashForm) und Anwendungsausgabeinformationsverwaltung.

Die am häufigsten verwendete Funktion bei der Plug-In-Entwicklung besteht darin, die aktuellen Arbeitsbereichs- und Ausgabefensterinformationen abzurufen.
Rufen Sie den Arbeitsbereich des aktuellen Programms ab: SuperMap.Desktop.Application.ActiveApplication.Workspace
Da der Arbeitsbereich abgerufen wurde, unterscheidet sich der Rest des Codes nicht wesentlich vom Schreiben von iObjects.net. Jeder kann nach seinen eigenen Bedürfnissen schreiben.
Informationsausgabe und Protokollierung : SuperMap.Desktop.Application.ActiveApplication.Output, der Beispielcode lautet wie folgt:

 // 信息一:单参数输出方法,会自动当做 InfoType.Information 类型输出信息。
    SuperMap.Desktop.Application.ActiveApplication.Output.Output("单参数输出方法,会自动当做 InfoType.Information 类型输出信息。");

    // 信息二:信息(InfoType.Information)类型的输出信息。
    SuperMap.Desktop.Application.ActiveApplication.Output.Output("信息(InfoType.Information)类型的输出信息。", InfoType.Information);

    // 信息三:异常(InfoType.Exception)类型的输出信息。
    SuperMap.Desktop.Application.ActiveApplication.Output.Output("异常(InfoType.Exception)类型的输出信息。", InfoType.Exception);

    // 结果:
    // 当桌面全局选项设置仅输出“信息”的时候,会在输出窗口中看到信息一和信息二;
    // 当桌面全局选项设置仅输出“异常”的时候,会在输出窗口中看到信息三;
    // 当桌面全局选项设置输出“异常和信息”的时候,会在输出窗口看到所有三条信息

3. Verpackung

Während des Projektgenerierungsprozesses wird die Konfigurationsdatei gemäß dem in den obigen Schritten konfigurierten Post-Generierungs-Ereignisbefehl in das SuperMap iDesktop-Installationsverzeichnis\WorkEnvironment\Default-Verzeichnis kopiert, wie in der folgenden Abbildung dargestellt:
Fügen Sie hier eine Bildbeschreibung ein

Nachdem das Projekt erfolgreich erstellt wurde, wird das Plug-in- Paket entsprechend dem in den obigen Schritten konfigurierten Ausgabepfad in das SuperMap iDesktop-Installationsverzeichnis\Bin\Plugins\test-Verzeichnis ausgegeben, wie in der folgenden Abbildung dargestellt:

Fügen Sie hier eine Bildbeschreibung ein

Nachdem das Programm geschrieben und bestätigt wurde, dass der Programmcode korrekt ist, besteht der letzte Schritt darin, ihn zu packen.
Suchen Sie den Programmausgabepfad und den entsprechenden Ordner unter \Bin\Plugins\, zum Beispiel: .\supermap-idesktop-11.1.0-1019-43617-97920-win64-bin-zip-chs\Bin\Plugins\RepetitiveRegion in diesem Beispiel.
注意:检查该文件夹下的.config文件,确保是自己项目中新建的.config文件,如有其他配置文件,请删除,只保留一个配置文件,否则会插件导入会解析失败。
Nach dem Komprimieren des Ordners in ein Zip-Paket ist die Verpackung abgeschlossen.

Viertens: Plug-in-Kopierinstallation

Zu diesem Zeitpunkt kann das ZIP-Paket als Plug-in in iDesktop anderer Versionen oder anderer Computer importiert werden. Sie können es unter [Ansicht]-[Plug-in-Verwaltung] importieren.

Fügen Sie hier eine Bildbeschreibung ein

Importieren Sie das heruntergeladene komprimierte ZIP-Paket direkt. Nach erfolgreichem Import wird die Benutzeroberfläche für die erfolgreiche Installation angezeigt.

Fügen Sie hier eine Bildbeschreibung ein

5. Plug-in-Deinstallation

Wenn der Benutzer die Plug-in-Funktion von SuperMap iDesktop entfernen möchte, löschen Sie einfach die Datei SuperMap.Desktop.Samples.test.config im Verzeichnis „Installation Directory\WorkEnvironment\Default“ und im Ordner „Installation Directory\Bin\Plugins\test“. Wenn der Benutzer die Plug-in-Funktion erneut verwenden möchte, muss er sie neu installieren.

Nun, dies ist das Ende einer einfachen Plug-In-Entwicklung. Ich hoffe, dass es für Programmierer hilfreich sein kann. Natürlich sind die Implementierungsanforderungen jedes Projekts inkonsistent und es müssen unterschiedliche Lösungen für unterschiedliche Anforderungen gesucht werden.
Wenn es Fehler gibt, hoffe ich, dass jeder diese im Kommentarbereich kritisieren und korrigieren kann!

Acho que você gosta

Origin blog.csdn.net/supermapsupport/article/details/131509283
Recomendado
Clasificación