| ... | ... | @@ -1,6 +1,5 @@ | 
              
                    | 1 | 1 | {{content/}} | 
              
                    | 2 | 2 |  | 
              
                    | 3 |  | -== Plugins für zusätzliche Funktionalitäten == | 
              
                    | 4 | 4 |  | 
              
                    | 5 | 5 | {{formcycle/}} bietet ein Vielzahl von Einstiegspunkten für die Erweiterung der Standard-Funktionalitäten durch Plugins. Basierend auf den einzelnen [[Plugin-Typen>>doc:Formcycle.PluginDevelopment.Types.WebHome]] werden diese zu gewissen Zeitpunkten automatisch oder manuell angesprochen und erlauben es somit von der Ersetzung eigener Platzhalter bis hin zur Implementierung eigener Verarbeitungslogik {{formcycle/}} anzupassen. Als fundamentaler erster Schritt für die Entwicklung eigener Plugins ist hierbei das Erstellen eines entsprechenden Java-Projekts anzusehen. | 
              
                    | 6 | 6 |  | 
                      
        | ... | ... | @@ -8,15 +8,15 @@ | 
              
                    | 8 | 8 |  | 
              
                    | 9 | 9 | Die API-Dokumentation für {{formcycle/}} findet sich hier auf unserer Seite: [[Javadocs>>https://docs.formcycle.eu/]] | 
              
                    | 10 | 10 |  | 
              
                    | 11 |  | -== Projekt-Setup == | 
              
                    |  | 10 | +== Maven-Setup == | 
              
                    | 12 | 12 |  | 
              
                    | 13 | 13 | Zu Beginn der Entwicklung eines Plugins ist es nötig das entsprechende Entwicklungsprojekt aufzusetzten und zu konfigurieren. | 
              
                    | 14 | 14 |  | 
              
                    | 15 | 15 | Für letzteres empfehlen wir hierbei das Build-Management-Tool [[Apache Maven>>url:https://maven.apache.org/||rel="__blank"]] zum Einsatz. Andere Build-Tools können prinzipiell benutzt werden, hier können wir aber keine Hilfe bereitstellen. | 
              
                    | 16 | 16 |  | 
              
                    | 17 |  | -Um die entsprechenden Abhängigkeiten zu {{formcycle case="dat"/}} bereitzustellen, ist das Repository unter der URL [[https:~~/~~/artifactory.xima-services.de/artifactory/fc-plugin-dev>>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.  Ausgangspunkt ist hierbei das Artefakt //fc-plugin-common//, welches die einzelnen Plugin-Schnittstellen beinhaltet und auch auf [[unserere Downloadseite zur Verfügung steht>>url:http://artifactory.xima-services.de/artifactory/fc-plugin-dev/de/xima/fc/fc-plugin-common/]]. | 
              
                    |  | 16 | +Um die entsprechenden Abhängigkeiten zu {{formcycle case="dat"/}} bereitzustellen, ist das Repository unter der URL [[https:~~/~~/artifactory.xima-services.de/artifactory/fc-plugin-dev>>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. | 
              
                    | 18 | 18 |  | 
              
                    | 19 |  | -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//: | 
              
                    |  | 18 | +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//: | 
              
                    | 20 | 20 |  | 
              
                    | 21 | 21 | {{panel title="~~~~/.m2/settings.xml" fullwidth="true" initial="hidden" triggerable="true"}} | 
              
                    | 22 | 22 | {{code language="xml"}} | 
                      
        | ... | ... | @@ -27,6 +27,7 @@ | 
              
                    | 27 | 27 | <!-- Add XIMA artifactory --> | 
              
                    | 28 | 28 | <profiles> | 
              
                    | 29 | 29 | <profile> | 
              
                    |  | 29 | +      <!-- FORMCYCLE dependencies --> | 
              
                    | 30 | 30 | <repositories> | 
              
                    | 31 | 31 | <repository> | 
              
                    | 32 | 32 | <snapshots> | 
                      
        | ... | ... | @@ -37,6 +37,7 @@ | 
              
                    | 37 | 37 | <url>https://artifactory.xima-services.de/artifactory/fc-plugin-dev</url> | 
              
                    | 38 | 38 | </repository> | 
              
                    | 39 | 39 | </repositories> | 
              
                    |  | 40 | +      <!-- Maven plugins for FORMCYCLE --> | 
              
                    | 40 | 40 | <pluginRepositories> | 
              
                    | 41 | 41 | <pluginRepository> | 
              
                    | 42 | 42 | <snapshots> | 
                      
        | ... | ... | @@ -64,8 +64,20 @@ | 
              
                    | 64 | 64 | {{/code}} | 
              
                    | 65 | 65 | {{/panel}} | 
              
                    | 66 | 66 |  | 
              
                    | 67 |  | - Inder //pom.xml// des Plugin-Projekts kann die Abhängigkeit dann wie folgt eingebunden werden: | 
              
                    |  | 68 | +== Maven-Projekteinrichtung | 
              
                    | 68 | 68 |  | 
              
                    |  | 70 | +Im Folgenden werden einige Punkte beschrieben, die beim Einrichten eines Maven-Projekts für ein {{formcycle/}}-Plugin beachtet werden müssen. Für den schnellen Einstieg gibt auch einige [[Maven-Archetypes>>||anchor="HMaven-Archetypes"]]. | 
              
                    |  | 71 | + | 
              
                    |  | 72 | +=== Artekfakte und Abhängigkeiten | 
              
                    |  | 73 | + | 
              
                    |  | 74 | +{{info}} | 
              
                    |  | 75 | +Alle Abhängigkeiten zu {{formcycle case="dat"/}} sind im scope "provided" zu definieren! | 
              
                    |  | 76 | +{{/info}} | 
              
                    |  | 77 | + | 
              
                    |  | 78 | +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 [[unserere Downloadseite zur Verfügung>>url:http://artifactory.xima-services.de/artifactory/fc-plugin-dev/de/xima/fc/fc-plugin-common||target="_blank"]]. | 
              
                    |  | 79 | + | 
              
                    |  | 80 | +In der //pom.xml// des Plugin-Projekts kann diese Abhängigkeit wie folgt eingebunden werden: | 
              
                    |  | 81 | + | 
              
                    | 69 | 69 | {{code language="xml"}} | 
              
                    | 70 | 70 | <properties> | 
              
                    | 71 | 71 | <xfc.version>7.0.10</xfc.version> | 
                      
        | ... | ... | @@ -96,14 +96,164 @@ | 
              
                    | 96 | 96 |  | 
              
                    | 97 | 97 | Ferner ist zu beachten, dass sämtliche Abhängigkeiten zu {{formcycle case="dat"/}} 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 {{formcycle case="dat"/}} benutzten und damit bereitstehenden Bibliotheken wiederverwendet werden (z.B. diverse Apache Commons-Implementierungen). | 
              
                    | 98 | 98 |  | 
              
                    | 99 |  | -{{info}} | 
              
                    | 100 |  | -Alle Abhangigkeiten zu {{formcycle case="dat"/}} sind im scope "provided" zu definieren! | 
              
                    | 101 |  | -{{/info}} | 
              
                    |  | 112 | +=== Manifest und Fat JAR | 
              
                    | 102 | 102 |  | 
              
                    | 103 |  | - Basierendauf derhiermitzur Verfügungstehenden Infrastruktursteht der Entwicklung von eigenen Plugin-Implementierungen nichtsmehr im Wege. Die Installationerfolgt anschließend je nach Verwendungszweck über die Oberflächen [[Mandant-Plugins>>doc:Formcycle.UserInterface.Client.Plugins]] oder [[System-Plugins>>doc:Formcycle.SystemSettings.UserInterface.SystemPlugins]]. | 
              
                    |  | 114 | +In der //META-INF/MANIFEST.MF// in der Plugin-JAR-Datei sollten folgende Informationen stehen: | 
              
                    | 104 | 104 |  | 
              
                    | 105 |  | -== Archetypes == | 
              
                    |  | 116 | +; formcycle-version-requirement | 
              
                    |  | 117 | +: Erforderlich. Version von {{formcycle/}}, für die das Plugin gedacht ist.Ist erforderlich, damit {{formcycle/}} bei der Installation die Kompatibilität prüfen kann. | 
              
                    |  | 118 | +; Implementation-Version | 
              
                    |  | 119 | +: Erforderlich. Version des Plugins, wird etwa in der Oberfläche angezeigt. | 
              
                    |  | 120 | +; Build-Time oder Build-Timestamp | 
              
                    |  | 121 | +: Optional, wird bei SNAPSHOT-Versionen mit angezeigt, um den SNAPSHOT zu identifizieren. | 
              
                    |  | 122 | +; Implementation-Title | 
              
                    |  | 123 | +: Optional, wird standardmäßig etwa vom Deploy-Plugin verwendet, um das Plugin zu identifzieren. | 
              
                    | 106 | 106 |  | 
              
                    | 107 |  | - TODO | 
              
                    |  | 125 | +Diese Informationen können wie unten beschrieben mittels des //maven-assembly-plugin// in die Manifest-Datei geschrieben werden. | 
              
                    | 108 | 108 |  | 
              
                    | 109 |  | -Um einen besseren Einstieg in die Plugin-Entwicklung zu finden, [[bieten wir auf unserer Downloadseite>>url:https://customer.formcycle.eu/index.php/s/PgdMrNOvbYEzhmr]] | 
              
                    |  | 127 | +Weiterhin ist beim Bauen zu beachten, dass eine sogenannte Fat-JAR gebaut werden muss. Abhängigkeiten zu {{formcycle case="dat"/}} sowie anderen Bibliotheken, welche bereits durch {{formcycle case="acc"/}} 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). | 
              
                    |  | 128 | + | 
              
                    |  | 129 | +Dies kann entweder über das [[maven-assembly-plugin>>url:https://maven.apache.org/plugins/maven-assembly-plugin/]] oder das [[maven-shade-plugin>>url:https://maven.apache.org/plugins/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. | 
              
                    |  | 130 | + | 
              
                    |  | 131 | +Für einfache Plugins ist das //maven-assembly-plugin// ausreichend. Dieses kann in der //pom.xml// wie folgt konfiguriert werden: | 
              
                    |  | 132 | + | 
              
                    |  | 133 | +{{panel title="maven-assembly-plugin in pom.xml" fullwidth="true" initial="hidden" triggerable="true"}} | 
              
                    |  | 134 | +{{code language="java"}} | 
              
                    |  | 135 | +  <properties> | 
              
                    |  | 136 | +    <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version> | 
              
                    |  | 137 | +  </properties> | 
              
                    |  | 138 | +  <build> | 
              
                    |  | 139 | +    <finalName>${project.parent.artifactId}</finalName> | 
              
                    |  | 140 | +    <plugins> | 
              
                    |  | 141 | +      <plugin> | 
              
                    |  | 142 | +        <groupId>org.apache.maven.plugins</groupId> | 
              
                    |  | 143 | +        <artifactId>maven-assembly-plugin</artifactId> | 
              
                    |  | 144 | +        <version>${maven-assembly-plugin.version}</version> | 
              
                    |  | 145 | +        <executions> | 
              
                    |  | 146 | +          <execution> | 
              
                    |  | 147 | +            <id>fat-jar</id> | 
              
                    |  | 148 | +            <phase>package</phase> | 
              
                    |  | 149 | +            <goals> | 
              
                    |  | 150 | +              <goal>single</goal> | 
              
                    |  | 151 | +            </goals> | 
              
                    |  | 152 | +            <configuration> | 
              
                    |  | 153 | +              <finalName>${project.parent.artifactId}</finalName> | 
              
                    |  | 154 | +              <appendAssemblyId>false</appendAssemblyId> | 
              
                    |  | 155 | +              <descriptorRefs> | 
              
                    |  | 156 | +                <descriptorRef>jar-with-dependencies</descriptorRef> | 
              
                    |  | 157 | +              </descriptorRefs> | 
              
                    |  | 158 | +              <archive> | 
              
                    |  | 159 | +                <manifest> | 
              
                    |  | 160 | +                  <addDefaultImplementationEntries>true</addDefaultImplementationEntries> | 
              
                    |  | 161 | +                </manifest> | 
              
                    |  | 162 | +                <manifestEntries> | 
              
                    |  | 163 | +                  <formcycle-version-requirement>${xfc-version}</formcycle-version-requirement> | 
              
                    |  | 164 | +                  <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp> | 
              
                    |  | 165 | +                  <Implementation-Title>${project.groupId}:${project.artifactId}</Implementation-Title> | 
              
                    |  | 166 | +                  <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id> | 
              
                    |  | 167 | +                  <Implementation-Version>${project.version}</Implementation-Version> | 
              
                    |  | 168 | +                </manifestEntries> | 
              
                    |  | 169 | +              </archive> | 
              
                    |  | 170 | +            </configuration> | 
              
                    |  | 171 | +          </execution> | 
              
                    |  | 172 | +        </executions> | 
              
                    |  | 173 | +      </plugin> | 
              
                    |  | 174 | +    </plugins> | 
              
                    |  | 175 | +  </build> | 
              
                    |  | 176 | +{{/code}} | 
              
                    |  | 177 | +{{/panel}} | 
              
                    |  | 178 | + | 
              
                    |  | 179 | +=== Bauen und Installieren === | 
              
                    |  | 180 | + | 
              
                    |  | 181 | +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: | 
              
                    |  | 182 | + | 
              
                    |  | 183 | +{{code}} | 
              
                    |  | 184 | +  mvn clean install | 
              
                    |  | 185 | +{{/code}} | 
              
                    |  | 186 | + | 
              
                    |  | 187 | +Nachdem das Plugin erfolgreich gebaut wurde, kann die so entstandene JAR-Datei im //target//-Verzeichnis in {{formcycle/}} über die Oberfläche [[Mandant-Plugins>>doc:Formcycle.UserInterface.Client.Plugins]] beziehungsweise [[System-Plugins>>doc:Formcycle.SystemSettings.UserInterface.SystemPlugins]] hochgeladen werden. | 
              
                    |  | 188 | + | 
              
                    |  | 189 | +Siehe [[Deploy-Plugin>>||anchor="HDeploy-Plugin"]] zum automatischen Hochladen beim Maven-Build. | 
              
                    |  | 190 | + | 
              
                    |  | 191 | +Siehe [[FC-Server-Plugin>>||anchor="HFC-Server-Plugin"]] zum Starten eines einfachen {{formcycle/}}-Servers. | 
              
                    |  | 192 | + | 
              
                    |  | 193 | +== Maven-Archetypes == | 
              
                    |  | 194 | + | 
              
                    |  | 195 | +{{figure image="eclipse-archetype.png" width="500"}} | 
              
                    |  | 196 | +  Hinzufügen des Archetypes-Katalogs in Eclipse | 
              
                    |  | 197 | +{{/figure}} | 
              
                    |  | 198 | + | 
              
                    |  | 199 | +{{figure image="eclipse-archetype-select.png" width="500"}} | 
              
                    |  | 200 | +  Auswahl eines Archetypes beim Erstellen eines Maven-Projekts in Eclipse | 
              
                    |  | 201 | +{{/figure}} | 
              
                    |  | 202 | + | 
              
                    |  | 203 | +Für einige häufig verwendete Plugin-Typen stehen [[Maven-Archetypes>>url:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html||target="_blank"]] bereits, um schnell ein Maven-Projekt aufsetzen zu können. | 
              
                    |  | 204 | + | 
              
                    |  | 205 | +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: | 
              
                    |  | 206 | + | 
              
                    |  | 207 | +{{code}} | 
              
                    |  | 208 | +mvn archetype:generate -DarchetypeArtifactId=plugin-archetype-workflow-element-simple -DarchetypeGroupId=de.xima.fc.archetype -DarchetypeVersion=7.0.4 | 
              
                    |  | 209 | +{{/code}} | 
              
                    |  | 210 | + | 
              
                    |  | 211 | +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. | 
              
                    |  | 212 | + | 
              
                    |  | 213 | +Alle vorhandenen Archetypes und deren Versionen können im [[Archetype-Katalog>>url:https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml||target="_blank"]] eingesehen werden. | 
              
                    |  | 214 | + | 
              
                    |  | 215 | +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: | 
              
                    |  | 216 | + | 
              
                    |  | 217 | +{{code language="plaintext"}}https://artifactory.xima-services.de/artifactory/libs-release-local/archetype-catalog.xml{{/code}} | 
              
                    |  | 218 | + | 
              
                    |  | 219 | +== Deploy-Plugin | 
              
                    |  | 220 | + | 
              
                    |  | 221 | +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: | 
              
                    |  | 222 | + | 
              
                    |  | 223 | +* Ein Maven-Plugin, welches nach dem Bauen das Plugin via HTTP an einen laufenden {{formcycle/}}-Server sendet | 
              
                    |  | 224 | +* Ein Plugin für {{formcycle/}}, welche die Gegenstelle in {{formcycle/}} bereitstellt und das Plugin aus dem HTTP-Request in {{formcycle/}} installiert. | 
              
                    |  | 225 | + | 
              
                    |  | 226 | +Weitere Details können im [[Hilfe-Artikel zum Deploy-Plugin>>doc:Formcycle.PluginDocumentation.FormcycleDeployPluginPlugin]] nachgelesen werden. Für die meisten Fälle reicht folgende Konfiguration in der //pom.xml// des Plugin-Projekts aus: | 
              
                    |  | 227 | + | 
              
                    |  | 228 | +{{code language="xml"}} | 
              
                    |  | 229 | +  <properties> | 
              
                    |  | 230 | +    <fc-deploy-plugin-maven-plugin.version>7.0.1<fc-deploy-plugin-maven-plugin.version/> | 
              
                    |  | 231 | +  <build> | 
              
                    |  | 232 | +    <plugins> | 
              
                    |  | 233 | +	  <plugin> | 
              
                    |  | 234 | +        <groupId>de.xima.fc.maven.plugin</groupId> | 
              
                    |  | 235 | +        <artifactId>fc-deploy-plugin-maven-plugin</artifactId> | 
              
                    |  | 236 | +        <version>${fc-deploy-plugin-maven-plugin.version}</version> | 
              
                    |  | 237 | +        <executions> | 
              
                    |  | 238 | +          <execution> | 
              
                    |  | 239 | +            <id>upload</id> | 
              
                    |  | 240 | +            <phase>install</phase> | 
              
                    |  | 241 | +            <goals> | 
              
                    |  | 242 | +              <goal>deploy</goal> | 
              
                    |  | 243 | +            </goals> | 
              
                    |  | 244 | +          </execution> | 
              
                    |  | 245 | +        </executions> | 
              
                    |  | 246 | +      </plugin> | 
              
                    |  | 247 | +    </plugins> | 
              
                    |  | 248 | +  </build> | 
              
                    |  | 249 | +{{/code}} | 
              
                    |  | 250 | + | 
              
                    |  | 251 | +Sofern das Deploy-Plugin bereits in {{formcycle/}} installiert ist, kann das Plugin-Projekt dann beim Bauen wie folgt hochgeladen werden: | 
              
                    |  | 252 | + | 
              
                    |  | 253 | +{{code language="bash"}} | 
              
                    |  | 254 | +mvn clean install -DfcDeployUrl=http://localhost:8080/xima-formcycle -DfcDeployToken=admin | 
              
                    |  | 255 | +{{/code}} | 
              
                    |  | 256 | + | 
              
                    |  | 257 | +Wird Eclipse benutzt, kann auch eine Launch-Configuration mit den //fcDeployUrl// und dem //fcDeployToken// angelegt werden. | 
              
                    |  | 258 | + | 
              
                    |  | 259 | +== FC-Server-Plugin == | 
              
                    |  | 260 | + | 
              
                    |  | 261 | +Zum Testen eines Plugins ist es erforderlich, einen laufenden {{formcycle/}}-Server zu haben. Zur Vereinfachung der Entwicklung gibt es das //fc-server-maven-plugin//, welches mittels eines einzigen Befehls ein fertig eingerichtetes {{formcycle/}} lokal startet, wo auch bereits das Deploy-Plugin vorinstalliert ist. | 
              
                    |  | 262 | + | 
              
                    |  | 263 | +Sofern wie oben beschrieben in //~~/.m2/settings.xml// die //pluginGroup// hinterlegt wurde, kann in einem beliebiegen Verzeichnis wie folgt ein {{formcycle/}}-Server per Maven gestartet werden: | 
              
                    |  | 264 | + | 
              
                    |  | 265 | +{{code language="bash"}} | 
              
                    |  | 266 | +mvn fc-server:run-ms-war -DxfcVersion=7.0.10 | 
              
                    |  | 267 | +{{/code}} | 
              
                    |  | 268 | + | 
              
                    |  | 269 | +Nach kurzer Wartezeit (beim ersten Mal kann es länger dauern) ist dann ein {{formcycle/}}-Server gestartet. Die URL steht am Ende in der Kommandozeile, standardmäßig http://localhost:8080/xima-formcycle | 
              
                    |  | 270 | + | 
              
                    |  | 271 | +Dies funktioniert auch in einem Ordner ohne Maven-Projekt. Falls keine {{formcycle/}} angegeben ist, wird eine Standard-Version genommen. Wird der Befehl innerhalb eines Plugin-Maven-Projekts ausgeführt, wird versucht, die Version von {{formcycle/}} aus dem Plugin-Projekt auszulesen. | 
              
                    |  | 272 | + |