Plugin-Entwicklung
Xima® Formcycle bietet ein Vielzahl von Einstiegspunkten für die Erweiterung der Standard-Funktionalitäten durch Plugins. Basierend auf den einzelnen Plugin-Typen werden diese zu gewissen Zeitpunkten automatisch oder manuell angesprochen und erlauben es somit von der Ersetzung eigener Platzhalter bis hin zur Implementierung eigener Verarbeitungslogik Xima® Formcycle anzupassen. Als fundamentaler erster Schritt für die Entwicklung eigener Plugins ist hierbei das Erstellen eines entsprechenden Java-Projekts anzusehen.
API-Dokumentation
Die API-Dokumentation für Xima® Formcycle findet sich hier auf unserer Seite: JavaScript und JavaDocs
Maven-Setup
Zu Beginn der Entwicklung eines Plugins ist es nötig, das entsprechende Entwicklungsprojekt aufzusetzten und zu konfigurieren.
Für letzteres empfehlen wir hierbei das Build-Management-Tool Apache Maven zu verwenden. Andere Build-Tools können prinzipiell auch genutzt werden, hier können wir aber keine Hilfe bereitstellen.
Um die entsprechenden Abhängigkeiten zu Xima® Formcycle bereitzustellen, ist das Repository unter der URL https://artifactory.xima-services.de/artifactory/fc-plugin-dev zu benutzen. Dieses enthält alle öffentlich zur Verfügung stehenden Artefakte, welche dem Plugin zur Laufzeit bereitgestellt und während der Entwicklung benötigt werden.
Damit das Repository auch beim Bauen mit Maven verwendet wird, sollte folgendes in die Maven-Konfigurationsdatei settings.xml geschrieben werden. Diese Datei findet sich in der Regeln im .m2-Ordner im Home-Verzeichnis des aktuellen Nutzers. Unter Linux ~/.m2/settings.xml und unter Windows %homepath%\.m2\settings.xml:
~/.m2/settings.xml
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Add XIMA artifactory -->
<profiles>
<profile>
<!-- FORMCYCLE dependencies -->
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>xima</id>
<name>fc-plugin-dev</name>
<url>https://artifactory.xima-services.de/artifactory/fc-plugin-dev</url>
</repository>
</repositories>
<!-- Maven plugins for FORMCYCLE -->
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>xima</id>
<name>fc-plugin-dev</name>
<url>https://artifactory.xima-services.de/artifactory/fc-plugin-dev</url>
</pluginRepository>
</pluginRepositories>
<id>xima-artifactory</id>
</profile>
</profiles>
<!-- Enable XIMA artifactory by default -->
<activeProfiles>
<activeProfile>xima-artifactory</activeProfile>
</activeProfiles>
<!-- FORMCYCLE specific Maven plugins provided by XIMA -->
<pluginGroups>
<pluginGroup>de.xima.fc.maven.plugin</pluginGroup>
</pluginGroups>
</settings>
Maven-Projekteinrichtung
Im Folgenden werden einige Punkte beschrieben, die beim Einrichten eines Maven-Projekts für ein Xima® Formcycle-Plugin beachtet werden müssen. Für den schnellen Einstieg gibt auch einige Maven-Archetypes.
Artekfakte und Abhängigkeiten
Eine fertige einfache pom.xml können Sie
.Ausgangspunkt für die Entwicklung von Plugin ist das Maven-Artefakt fc-plugin-common. Dieses enthält die einzelnen Plugin-Schnittstellen und steht auch auf unsererer Downloadseite zur Verfügung.
In der pom.xml des Plugin-Projekts kann diese Abhängigkeit wie folgt eingebunden werden:
<xfc.version>7.2.1</xfc.version>
</properties>
<dependencies>
<dependency>
<groupId>de.xima.fc</groupId>
<artifactId>fc-plugin-common</artifactId>
<version>${xfc.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
Ferner steht je nach Tiefe der Integration in die bestehende Umgebung von Xima® Formcycle und deren Benutzung als höchste Implementierung das Artefakt fc-logic zur Verfügung. Dieses wird wie folgt als weitere (oder einzige) Abhängigkeit definiert:
<groupId>de.xima.fc</groupId>
<artifactId>fc-logic</artifactId>
<version>${xfc.version}</version>
<scope>provided</scope>
</dependency>
Eine entsprechende Benutzung ist vor allem bei der Verwendung der Datenbankschnittstelle sowie bei der Implementierung von eigenen Verarbeitungen nötig.
Ferner ist zu beachten, dass sämtliche Abhängigkeiten zu Xima® Formcycle im scope provided anzugeben sind. Dies verhindert neben Classpath-Problemen auch das unnötige Anschwellen der Plugin-Größe. Ebenso sollten diesbezüglich Abhängigkeiten auf bereits von Xima® Formcycle benutzten und damit bereitstehenden Bibliotheken wiederverwendet werden (z.B. diverse Apache Commons-Implementierungen). Solche Abhängigkeit sind auch im Scope provided zu definieren. Eine einfache Möglichkeit, Fehler zu vermeiden, ist das Importieren der FORMCYCLE-Bom:
<dependencies>
<!--Import dependency versions from FORMCYCLE -->
<dependency>
<groupId>de.xima.fc</groupId>
<artifactId>fc</artifactId>
<version>${xfc.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Dann einfach die gewünschte Abhängigkeit ohne <version>...</version> definieren. Wenn FORMCYCLE die Abhängigkeit schon enthält, gibt es keinen Build-Fehler. Andernfalls muss diese im Plugin mitgeliefert werden. In dem Fall die Version hinzufügen und den Provided-Scope entfernen.
Manifest und Fat JAR
In der META-INF/MANIFEST.MF in der Plugin-JAR-Datei sollten folgende Informationen stehen:
- formcycle-version-requirement
- Erforderlich. Version von Xima® Formcycle, für die das Plugin gedacht ist. Ist erforderlich, damit Xima® Formcycle bei der Installation die Kompatibilität prüfen kann.
- Implementation-Version
- Erforderlich. Version des Plugins; Diese wird z.B. in der Oberfläche angezeigt.
- Plugin-Key
- Erforderlch. Wird zur Identifizierung des Plugin innherhalb von Xima® Formcycle verwendet, und auch von etwa dem Deploy-Plugin oder Server-Plugin. Empfohlener Wert ist ${project.groupId}:${project.artifactId}.
- Build-Time oder Build-Timestamp
- Optional. Wird bei SNAPSHOT-Versionen mit angezeigt, um den SNAPSHOT zu identifizieren.
Diese Informationen können wie unten beschrieben mittels des maven-assembly-plugin in die Manifest-Datei geschrieben werden.
Weiterhin ist beim Bauen zu beachten, dass eine sogenannte Fat-JAR gebaut werden muss. Abhängigkeiten zu Xima® Formcycle sowie anderen Bibliotheken, welche bereits durch Xima® Formcycle mitgeliefert werden, sollten wie bereits erwähnt im scope provided eingebunden werden. Falls im Plugin aber noch andere Abhängigkeiten benutzt werden, müssen diese in der JAR-Datei inkludiert werden (Fat JAR).
Dies kann entweder über das maven-assembly-plugin oder das maven-shade-plugin erfolgen. Letzteres ist für forgeschrittene Anwendungsfälle gedacht, wenn etwa mehrere Abhängigkeiten die gleichen Dateien mitbringen und zusammengeführt werden müssen.
Für einfache Plugins ist das maven-assembly-plugin ausreichend. Dieses kann in der pom.xml wie folgt konfiguriert werden:
maven-assembly-plugin in pom.xml
<maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
</properties>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven-assembly-plugin.version}</version>
<executions>
<execution>
<id>fat-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>${project.artifactId}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<formcycle-version-requirement>${xfc-version}</formcycle-version-requirement>
<Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
<Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title>
<Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
<Implementation-Version>${project.version}</Implementation-Version>
</manifestEntries>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Bauen und Installieren
Der genaue Befehl zum Bauen hängt von den konkreten Einstellungen in der pom.xml ab. In der Regel sollte aber folgender Standardbefehl im Plugin-Verzeichnis funktionieren:
Nachdem das Plugin erfolgreich gebaut wurde, kann die so entstandene JAR-Datei im target-Verzeichnis in Xima® Formcycle über die Oberfläche Mandant-Plugins beziehungsweise System-Plugins hochgeladen werden.
Siehe Deploy-Plugin zum automatischen Hochladen beim Maven-Build.
Siehe FC-Server-Plugin zum Starten eines einfachen Xima® Formcycle-Servers.
Maven-Archetypes
Für einige häufig verwendete Plugin-Typen stehen Maven-Archetypes bereits, um schnell ein Maven-Projekt aufsetzen zu können.
Voraussetzung für die Verwendung ist, dass in den ~/.m2/settings.xml wie oben beschrieben das XIMA-Artifactory eingerichtet wurde. Dann kann etwa über die Kommandozeile wie folgt eine Archetype generiert werden:
Es werden dann einige wenige Informationen wie die gewünschten Maven-Koordinaten des neuen Plugin-Projekts abgefragt und anschließend ein neues vorkonfiguriertes Projekt erstellt.
Alle vorhandenen Archetypes und deren Versionen können im Archetype-Katalog eingesehen werden.
In Eclipse kann der Archetype-Katalog in den Einstellungen hinzugefügt werden. Bei der Erstellung eines neuen Maven-Projekt werden dann alle verfügbaren Archetypes angezeigt:
Deploy-Plugin
Um beim Entwickeln nicht jedes Mal eine neue Plugin-Version manuell über die Oberfläche hochladen zu müssen, kann das Deploy-Plugin verwendet werden. Dieses besteht aus 2 Teilen:
- Ein Maven-Plugin, welches nach dem Bauen das Plugin via HTTP an einen laufenden Xima® Formcycle-Server sendet
- Ein Plugin für Xima® Formcycle, welche die Gegenstelle in Xima® Formcycle bereitstellt und das Plugin aus dem HTTP-Request in Xima® Formcycle installiert.
Weitere Details können im Hilfe-Artikel zum Deploy-Plugin nachgelesen werden. Für die meisten Fälle ist kene Konfiguration in der pom.xml erforderlich. Es empfiehlt sich aber, wenigstens die Version festzusetzen:
<fc-deploy-plugin-maven-plugin.version>7.0.1</fc-deploy-plugin-maven-plugin.version>
<build>
<plugins>
<plugin>
<groupId>de.xima.fc.maven.plugin</groupId>
<artifactId>fc-deploy-plugin-maven-plugin</artifactId>
<version>${fc-deploy-plugin-maven-plugin.version}</version>
</plugin>
</plugins>
</build>
Sofern das Deploy-Plugin bereits in Xima® Formcycle installiert ist, kann das Plugin-Projekt dann wie folgt gebaut und hochgeladen werden:
Es wird hierbei davon ausgegangen, dass Xima® Formcycle unter der Standard-URL http://localhost:8080/xima-formcycle läuft und das Standard-Passwort "admin" für das Deploy-Plugin verwendet wird. Ist dies nicht der Fall, können die Werte auch angepasst werden:
Soll das Plugin im Bereich eines bestimmten Mandanten registriert werden, so kann dies über den zusätzlichen Launch-Configuration Parameter fcDeployClientId erreicht werden. Dieser Parameter muss als Wert die Id des Mandanten enthalten.
FC-Server-Plugin
Zum Testen eines Plugins ist es erforderlich, einen laufenden Xima® Formcycle-Server zu haben. Zur Vereinfachung der Entwicklung gibt es das fc-server-maven-plugin, welches mittels eines einzigen Befehls ein fertig eingerichtetes Xima® Formcycle lokal startet, wo auch bereits das Deploy-Plugin vorinstalliert ist.
Sofern wie oben beschrieben in ~/.m2/settings.xml die pluginGroup hinterlegt wurde, kann in einem beliebiegen Verzeichnis wie folgt ein Xima® Formcycle-Server per Maven gestartet werden:
mvn fc-server:run-ms-war
# Spezifische Version starten
mvn de.xima.fc.maven.plugin:fc-server-maven-plugin:7.0.4:run-ms-war -DxfcVersion=7.0.16
Nach kurzer Wartezeit (beim ersten Mal kann es länger dauern) ist dann ein Xima® Formcycle-Server gestartet. Die URL steht am Ende in der Kommandozeile, standardmäßig http://localhost:8080/xima-formcycle Der Zugang für den Superadmin ist sadmin (Passwort admin), der Zugang für den Mandantadministrator admin (Passwort /admin_).
Falls der Befehl in einem Maven-Projekt eines Xima® Formcycle-Plugins ausgeführt wird, dann wird das Plugin automatisch gebaut und nach dem Starten des Servers hochgeladen und installiert. Zudem wird versucht, die Xima® Formcycle-Version aus dem Plugin-Projekt auszulesen.
Dies funktioniert auch in einem Ordner ohne Maven-Projekt. Falls keine Xima® Formcycle-Version angegeben ist, wird eine Standard-Version genommen, abhängig von der Maven-Plugin-Version.
Für fortgeschrittenen Gebrauch siehe die
.