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 (Sitepark Information Enterprise Server) 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 verwenden. 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 TemplatePool mit dem Anchor 'formsolutions.template.pool' existieren, der unterhalb des Pools 'Seitentemplates' oder bei neueren Installation mit dem Anchor 'ies.tplp.formsolutions' unterhalb 'IES' (mit dem Flag 'Dieser Pool enthält Seitentemplates') hinterlegt ist.
  • Dann muss das folgende Template 'Form-Solutions: Konfiguration' mit dem Anchor 'formsolutions.template.config' in dem Pool angelegt werden:
<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>
  • Unterhalb des zuvor angelegten Templatepools müssen drei weitere Templatepools erstellt werden:
    • Form-Solutions: Formulare (ies.tplp.formsolutions.forms)
    • Form-Solutions: Kategorien (ies.tplp.formsolutions.categories)
    • Form-Solutions: Templates (ies.tplp.formsolutions.templates)
  • Anschließend das Template mit dem Anchor 'formsolutions.template.form' in dem Pool 'Form-Solutions: Formulare' anlegen:
<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>
  • Es muss ein ArtikelPool mit dem Anchor 'formsolutions' existieren. Dieser Pool besitzt den 'Standard Infosite Container' sowie das Template für die Eigenschaften 'nur Resourcen anlegen'. Der 'Templatepool für die Bearbeitung' ist der zuvor angelegte TemplatePool 'formsolutions.template.pool'.

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 die beiden folgende Dateien in /etc/sitepark/conf/ anzulegen:

1. form-solutions.xml
Hier müssen die Variablen cmskey und user entsprechend den Daten des Kunden ersetzt werden.
Außerdem müssen in der Zeile ies-connection die Parameter login, password und anchor_of_the_client gesetzt 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"?>
<import>
  <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="DEBUG"/>
    </logger>
  </logging>
  <ies-connection login="IMPORT-USER-LOGIN" password="IMPORT-USER-PASSWORD" client="IMPORT-CLIENT-ANCHOR" module="Form Solutions Importer"/>
  <options>
    <ignoreParents>false</ignoreParents>   <!-- Objekte bei neuer Zuordnung auch verschieben -->
    <createElements>true</createElements>
    <deleteWorkDir>true</deleteWorkDir>
    <createPools>true</createPools>
    <updatePools>true</updatePools>
    <updateElements>true</updateElements>
    <deletePools>true</deletePools>
    <deleteOnlyEmptyPools>true</deleteOnlyEmptyPools>
    <deleteElements>true</deleteElements>
    <xslt>${sitepark.home}/conf/form-solutions.xslt</xslt>  
    <syncFile>${sitepark.home}/conf/form-solutions.sync</syncFile>
    <attributes>
      <attribute name="wsurl">https://pdf.form-solutions.net/ws2</attribute>
      <!-- cmskey und user sind nur Beispielwerte  -->
      <attribute name="cmskey">293478912hskdfh238</attribute>
      <attribute name="user">12345678-1234-1234</attribute>
    </attributes>
  </options>
  <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>
</import>


2. 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}" 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>

Aktivierung

Der Import kann manuell durch Aufruf des Skriptes iesxip (früher iespkg) gestartet werden:

server:# /srv/sitepark/bin/iesxip /srv/sitepark/conf/form-solutions.xml
  • Zur regelmäßigen Synchronisation ist ein Cronjob in folgender Form notwendig:
# m h  dom mon dow   command
# Formulare von form-solutions aktualisieren.
1 1 * * * /srv/sitepark/bin/iesxip  /srv/sitepark/conf/form-solutions.xml
  • Auf Windows-Systemen müsste eine entsprechende 'Aufgabe' konfiguriert werden, die den beispielhaften Aufruf einmal täglich ausführt.
c:/Programme/Sitepark/bin/iesxip   c:/Programme/Sitepark/conf/form-solutions.xml