FormSolutions Schnittstelle

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen

Formulare der Firma Form-Solutions können in den IES integriert werden. Hierzu ist eine Form-Solutions Lizenz erforderlich.

Funktionsweise

Referenzen der Formulare werden in den IES importiert und durch regelmäßige Imports synchron gehalten. Mit Hilfe des spt:formsolutions-Tag kann ein Link-Dialog geöffnet werden, um ein Formulare zu verwendet. Für jede erzeugte Verlinkung wird eine neue URL erzeugt. Über dieser URL kann das Formular vom Form-Solutions-Server geladen werden (Z.B. PDF). Der spt:formsolutions-Tag erzeugt einen Button über den das Formular konfiguriert werden kann. Nach Klick auf diesen Button öffnet sich eine Seite des Form-Solutions-Servers mit der das Formular konfiguriert wird.

Voraussetzungen

Um die Form-Solutions-Schnittstelle einrichten zu können müssen folgende Voraussetzungen gegeben sein:

  • Der Kunde muss eine Form-Solutions Lizenz besitzen, um den den Form-Solutions-Server ansprechen zu können
  • Der IES muss Zugang zum Internet haben, um den Formsolutions-Server erreichen zu können.
  • Die Redakteure, die die Formulare Verknüpfen sollen, müssen Zugang zum Internet haben, um den Formsolutions-Server erreichen zu können.
  • Es muß ein CMS-Key für die Form-Solutions-Schnittstelle bekannt sein der vom IES verwendet werden kann. Dieser Key wird den Kunden von Form-Solutions genannt. Der Key sollte keine Sonderzeichen enthalten!
  • Die zu verwendenden Formulare werden zur Personalisierung mit einem Form-Solutions-Nutzer verknüpft. Hier muss ein Default-Nutzer bekannt sein, der initial für neue Formular-Links verwendet wird. Diese Nutzer kann bei der weiteren Konfiguration des Formulars geändert werden. Für die Form-Solutions-Schnittelle ist eine Default-Nutzer-Nummer erforderlich. Sie muss das Format 00000000-0001-0001 haben.
  • Es muss ein ArtikelPool mit dem Anchor 'formsolutions' existieren.
  • Es muss folgendes Template mit dem Anchor 'formsolutions.template.config' angelegt sein:
<sp:io type="in">
  <em>
  Diese Konfigurationswerte werden über den Form-Solutions import gesetzt und können an dieser Stellen nicht geändert werden.
  Ist eine Änderung der Werte nötig, muss diese Änderung am Importer vorgenommen werden.
  </em>
  <br/>
  <br/>
  Webservice Url<br>
  <spt:text name="wsurl" readonly="false" size="80"/><br/>
  CMS-Key<br>
  <spt:text name="cms" readonly="true" size="80"/><br/>
  Nutzer-Nummer<br>
  <spt:text name="user" readonly="true" size="80"/><br/>
</sp:io>
  • Es muss folgendes Template mit dem Anchor 'formsolutions.template.form' angelegt sein:
<sp:io type="in">
  Formular-Nummer<br/>
  <spt:text name="fs_fnr"/><br/>
  Anzahl der Seiten<br/>
  <spt:text name="fs_pagecount"/><br/>
  Erzeugt am<br/>
  <spt:text name="fs_created"/><br/>
  Letzte Änderung am<br/>
  <spt:text name="fs_changed"/><br/>
  Bemerkung<br/>
  <spt:text name="fs_bem"/><br/>
  Beschreibung<br/>
  <spt:text name="fs_beschr"/><br/>
  Typ<br/>
  <spt:text name="fs_type"/><br/>
</sp:io>

Konfiguration

Um den Import einrichten zu können müssen von dem Kunden folgende Informationen bereit gestellt werden:

  • CMS-Key des Kunden-Accounts
  • Kunden-Account: Login und Passwort

Dann sind folgende Dateien in /etc/sitepark anzulegen:

form-solutions.xml
Hier müssen die Variablen cmskey und user entsprechend den Daten des Kunden ersetzt werden.
Vorsicht: Sollte der Key Zeichen wie '&' enthalten, muss der unten verwendete Platzhalter '${cmskey}' gegen den XML encodeten Key getauscht werden!

<?xml version="1.0" encoding="UTF-8"?>
<ies-client>
        <logging>
                <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
                        <layout class="org.apache.log4j.PatternLayout">
                                <param name="ConversionPattern" value="%d %-5p %m%n"/>
                        </layout>
                        <param name="File" value="${sitepark.home}/form-solutions.log"/>
                        <param name="MaxFileSize" value="10MB"/>
                        <param name="MaxBackupIndex" value="10"/>
                </appender>
                <logger name="com.sitepark.ies" additivity="false">
                        <appender-ref ref="FILE"/>
                        <priority value="INFO"/>
                </logger>
        </logging>      
        <ies-connection login="login" password="password" client="anchor_of_the_client" module="Form Solutions Importer"/>
        <properties>
                <property name="ies.xip.import.deleteWorkDir">true</property>
                <property name="ies.xip.import.syncfile">${sitepark.home}/conf/form-solutions.sync</property>
                <property name="ies.xip.import.publishMode">all-file</property>
                <property name="ies.xip.import.ignoreParents">false</property>
                <property name="ies.xip.import.deleteElements">true</property>
                <property name="ies.xip.import.deletePools">true</property>
                <property name="ies.xip.import.deleteOnlyEmptyPools">true</property>
                <property name="ies.xip.import.variables">wsurl=https://pdf.form-solutions.net/ws2</property>
                <property name="ies.xip.import.variables">cmskey=293478912hskdfh238</property>
                <property name="ies.xip.import.variables">user=12345678-1234-1234</property>
        </properties>
        <xip command="import">  
                <source type="http" url="${wsurl}/getformlist.php" method="post">
                        <header name="SOAPAction">"urn:FS#getformlist"</header>
                        <body content-type="text/xml; charset=UTF-8"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:FS" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <SOAP-ENV:Body>
                <tns:getformlist xmlns:tns="urn:FS">
                        <cms xsi:type="xsd:string">${cmskey}</cms>
                </tns:getformlist>
        </SOAP-ENV:Body>
</SOAP-ENV:Envelope>]]></body>
                </source>
                <transform xslt="${sitepark.home}/conf/form-solutions.xslt"/>
        </xip>
</ies-client>

form-solutions.xslt

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xip="http://ies.sitepark.com/xip"
        extension-element-prefixes="xip">

        <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

        <xsl:function name="xip:getCategoryId"> <xsl:param name="s"/>
                <!-- Erstes Zeichen ermitteln -->
                <xsl:variable name="id" select="substring-before($s,' ')"/>
                <xsl:value-of select="substring-before($s,' ')"/>
        </xsl:function>

        <xsl:key name="categoryId" match="item" use="xip:getCategoryId(kat)"/>

        <xsl:template match="/">
                <xip>
                        <resource parent="formsolutions" anchor="formsolutions.config" name="Form Solutions Konfiguration" template="formsolutions.template.config">
                           <text name="wsurl">${wsurl}</text>
                           <text name="cms">${cmskey}</text>
                           <text name="user">${user}</text>
                        </resource>
                <!-- Schleife über Kategorien -->
                <xsl:for-each select="//item[generate-id() = generate-id(key('categoryId', xip:getCategoryId(kat))[1])]">

                        <xsl:variable name="category" select="xip:getCategoryId(kat)"/>
                        <!-- gelöschte Formulare haben keine Kategorie -->
                        <xsl:if test="$category != ''">
                                <xsl:variable name="categoryName" select="kat/text()"/>
                                <articlepool parent="formsolutions" anchor="formsolutions.category.{$category}" name="{$categoryName}">
                                        <resource>
                                                <text name="container" anchor="is5:gui.container.infosite.standard"/>
                                                <text name="registrationTemplate" anchor="is5:gui.container.infosite.standard.all"/>
                                                <text name="editorTemplatePool" anchor="standard.container.editing"></text>
                                        </resource>
                                <!-- Schleife über alle mit gleicher Kategorie -->
                                <xsl:for-each select="key('categoryId',$category)">
                                        <resource anchor="formsolutions.form.{fnr}" name="{title} ({fnr})" template="formsolutions.template.form">
                                                <comment><xsl:value-of select="bem"/></comment>
                                                <text name="fs_fnr"><xsl:value-of select="fnr"/></text>
                                                <text name="fs_pagecount"><xsl:value-of select="pagecount"/></text>
                                                <text name="fs_created"><xsl:value-of select="created"/></text>
                                                <text name="fs_changed"><xsl:value-of select="changed"/></text>
                                                <text name="fs_beschr"><xsl:value-of select="beschr"/></text>
                                                <text name="fs_type"><xsl:value-of select="type"/></text>
                                        </resource>
                                </xsl:for-each>
                                </articlepool>
                        </xsl:if>
                </xsl:for-each>
                </xip>
        </xsl:template>
</xsl:stylesheet>

Zur regelmäßigen Synchronisation ist weiterhin ein Cronjob folgender Form notwendig:

# m h  dom mon dow   command
# Formulare von form-solutions aktualisieren.
1 1 * * * /srv/sitepark/bin/iespkg /etc/form-solutions.xml