Datenschutzhinweis

 

Beim Laden dieses Inhalts werden Nutzungsinformationen an Vimeo übertragen und dort ggf. verarbeitet.

 

             

Beispiel für die Anbindung an ein ALVA9 Fachverfahren

Geändert am Do, 1 Aug um 4:32 NACHMITTAGS

Anhand eines Beispielformulars wird im Folgenden kurz beschrieben, wie Daten von Xima® formcycle an ein ALVA9-Fachverfahren (Link zum Hersteller)  übertragen werden können.


Inhalt



Grundlegende Vorgehensweise

Zum Übertragen von Daten aus einem Formular an ein ALVA9-System muss eine XML-Datei mit den Informationen generiert und zusammen mit allen anderen zu speichernden Daten in einem ZIP-Archiv gepackt werden. Anschließend wird die Datei in ein Austauschverzeichnis abgelegt, von dem es aus über eine kostenpflichtige Schnittstelle von ALVA9 automatisch importiert werden kann.


Workflow im Beispielformular,
mit dem die im Formular aufgenommenen
Informationen und Dateien so im Dateisystem
gespeichert werden, dass sie über eine
kostenpflichtige Import-Schnittstelle von ALVA9
importiert werden können.





Workflow im Beispielformular

Aus dem Formularstore kann das Beispielformular mit dem Namen ALVA Sonn- und Feiertagsverbot importiert oder heruntergeladen werden. In diesem werden Informationen gesammelt und diese nach dem Absenden des Formulars im Workflow über eine XSL-Transformation in ein für ALVA9 importierbares XML-Format umgewandelt. 


Als nächstes erstellt der Workflow aus dieser XML-Datei, allen im Formular übertragenen Dateien und einer PDF-Druckquittung ein ZIP-Archiv. Dieses wird anschließend in das Austauschverzeichnis abgelegt. Das Austauschverzeichnis ist im Beispielformular noch nicht konfiguriert und muss in der Aktion zunächst noch festgelegt werden. Der Grund dafür ist, dass der Pfad nicht allgemeingültig ist und vom jeweiligen System abhängt, in welches das Beispielformular importiert wurde.


Im folgenden werden die Details der einzelnen Schritte dieses Workflows kurz beschrieben.



Inhalt und Erstellung einer XML-Datei

Die XML-Datei mit allen im Formular eingegebenen Daten wird durch eine Aktion vom Typ Als XML exportieren mithilfe einer in Xima® formcycle definierten XSL-Transformation erzeugt. Die Struktur der erzeugten XML-Datei wird dabei von ALVA9 vorgegeben und besteht im Beispiel aus den Konten daten und datensatz, wobei in letzteren die einzelnen Informationen als eigene Unterknoten eingefügt werden. 



Konfiguration der Workflow-Aktion vom Typ Als XML exportieren, mit der die an ALVA9 zu sendenden Daten mithilfe einer XSL-Transformation in eine XML-Datei mit einem für ALVA9 interpretierbaren Format überführt werden




Die vollständige XSL-Transformation für das Beispiel sieht wie folgt aus:

Transformation eines XML-Dokuments per XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="process">
    <daten>
      <datensatz>
        <NAME1><xsl:value-of select="form/field[@name='tfOrgName']/plainValue"/> <xsl:value-of select="form/field[@name='Rechtsform']/plainValue"/></NAME1>
        <NAME2><xsl:value-of select="form/field[@name='tfAntragstellerAnrede']/plainValue"/> <xsl:value-of select="form/field[@name='tfAntragstellerTitel']/plainValue"/> <xsl:value-of select="form/field[@name='tfAntragstellerVorname']/plainValue"/> <xsl:value-of select="form/field[@name='tfAntragstellerName']/plainValue"/></NAME2>
        <NAME3><xsl:value-of select="form/field[@name='']/plainValue"/></NAME3>
        <NAME4><xsl:value-of select="form/field[@name='']/plainValue"/></NAME4>
        <STRASSE><xsl:value-of select="form/field[@name='tfAntragstellerAdresse']/plainValue"/></STRASSE>
        <HAUS_NR><xsl:value-of select="form/field[@name='']/plainValue"/></HAUS_NR>
        <ORT><xsl:value-of select="form/field[@name='tfAntragstellerOrt']/plainValue"/></ORT>
        <PLZ><xsl:value-of select="form/field[@name='tfAntragstellerPLZ']/plainValue"/></PLZ>
        <TELEFON><xsl:value-of select="form/field[@name='tfAntragstellerTelefon']/plainValue"/></TELEFON>
        <EMAIL><xsl:value-of select="form/field[@name='tfAntragstellerEmail']/plainValue"/></EMAIL>
        <FAX><xsl:value-of select="form/field[@name='tfAntragstellerFax']/plainValue"/></FAX>
        <SONNTAGE><xsl:value-of select="form/field[@name='cbSONNTAGE']/plainValue"/></SONNTAGE>
        <FERIEN><xsl:value-of select="form/field[@name='cbFERIEN']/plainValue"/></FERIEN>
        <GRUND2><xsl:value-of select="form/field[@name='cbGRUND2']/plainValue"/></GRUND2>
        <GRUND1><xsl:value-of select="form/field[@name='cbGRUND1']/plainValue"/></GRUND1>
        <ANTR_DATUM><xsl:value-of select="substring-before(./@creation-date, ' ')" /></ANTR_DATUM>  
        <NAME_HALT><xsl:value-of select="form/field[@name='tfNAME_HALT']/plainValue"/></NAME_HALT>
        <FIRMA_HALT><xsl:value-of select="form/field[@name='tfFIRMA_HALT']/plainValue"/></FIRMA_HALT>
        <POS_HALTER><xsl:value-of select="form/field[@name='tfPOS_HALTER']/plainValue"/></POS_HALTER>
        <xsl:if test="form/field[@name='cbLKW']/plainValue!=1"><LKW>0</LKW></xsl:if>
        <xsl:if test="form/field[@name='cbLKW']/plainValue=1"><LKW><xsl:value-of select="form/field[@name='cbLKW']/plainValue"/></LKW></xsl:if>
        <xsl:if test="form/field[@name='cbANHAENGER']/plainValue!=1"><ANHAENGER>0</ANHAENGER></xsl:if>
        <xsl:if test="form/field[@name='cbANHAENGER']/plainValue=1"><ANHAENGER><xsl:value-of select="form/field[@name='cbANHAENGER']/plainValue"/></ANHAENGER></xsl:if>
        <xsl:if test="form/field[@name='cbZUGMASCHIN']/plainValue!=1"><ZUGMASCHIN>0</ZUGMASCHIN></xsl:if>
        <xsl:if test="form/field[@name='cbZUGMASCHIN']/plainValue=1"><ZUGMASCHIN><xsl:value-of select="form/field[@name='cbZUGMASCHIN']/plainValue"/></ZUGMASCHIN></xsl:if>
        <xsl:if test="form/field[@name='cbAUFLIEGER']/plainValue!=1"><AUFLIEGER>0</AUFLIEGER></xsl:if>
        <xsl:if test="form/field[@name='cbAUFLIEGER']/plainValue=1"><AUFLIEGER><xsl:value-of select="form/field[@name='cbAUFLIEGER']/plainValue"/></AUFLIEGER></xsl:if>
        <xsl:if test="form/field[@name='cbERSATZ1']/plainValue!=1"><ERSATZ1>0</ERSATZ1></xsl:if>
        <xsl:if test="form/field[@name='cbERSATZ1']/plainValue=1"><ERSATZ1><xsl:value-of select="form/field[@name='cbERSATZ1']/plainValue"/></ERSATZ1></xsl:if>
        <xsl:if test="form/field[@name='cbERSATZ2']/plainValue!=1"><ERSATZ2>0</ERSATZ2></xsl:if>
        <xsl:if test="form/field[@name='cbERSATZ2']/plainValue=1"><ERSATZ2><xsl:value-of select="form/field[@name='cbERSATZ2']/plainValue"/></ERSATZ2></xsl:if>    
        <LKW_KENNZ><xsl:value-of select="form/field[@name='tfLKW_KENNZ']/plainValue"/></LKW_KENNZ>
        <ANH_KENNZ><xsl:value-of select="form/field[@name='tfANH_KENNZ']/plainValue"/></ANH_KENNZ>
        <ZUG_KENNZ><xsl:value-of select="form/field[@name='tfZUG_KENNZ']/plainValue"/></ZUG_KENNZ>
        <AUF_KENNZ><xsl:value-of select="form/field[@name='tfAUF_KENNZ']/plainValue"/></AUF_KENNZ>
        <ERS_KENNZ1><xsl:value-of select="form/field[@name='tfERS_KENNZ1']/plainValue"/></ERS_KENNZ1>
        <ERS_KENNZ2><xsl:value-of select="form/field[@name='tfERS_KENNZ2']/plainValue"/></ERS_KENNZ2>
        <LKW2KENNZ><xsl:value-of select="form/field[@name='tfLKW2KENNZ']/plainValue"/></LKW2KENNZ>
        <ANH2KENNZ><xsl:value-of select="form/field[@name='tfANH2KENNZ']/plainValue"/></ANH2KENNZ>
        <ZUG2KENNZ><xsl:value-of select="form/field[@name='tfZUG2KENNZ']/plainValue"/></ZUG2KENNZ>
        <AUF2KENNZ><xsl:value-of select="form/field[@name='tfAUF2KENNZ']/plainValue"/></AUF2KENNZ>
        <ERS2KENNZ1><xsl:value-of select="form/field[@name='tfERS2KENNZ1']/plainValue"/></ERS2KENNZ1>
        <ERS2KENNZ2><xsl:value-of select="form/field[@name='tfERS2KENNZ2']/plainValue"/></ERS2KENNZ2>
        <LKW_GEWICH>
          <xsl:call-template name="formatWeight">
            <xsl:with-param name="weight" select="form/field[@name='tfLKW_GEWICH']/plainValue" />
          </xsl:call-template>
        </LKW_GEWICH>
        <ANH_GEWICH>
          <xsl:call-template name="formatWeight">
            <xsl:with-param name="weight" select="form/field[@name='tfANH_GEWICH']/plainValue" />
          </xsl:call-template>
        </ANH_GEWICH>
        <ZUG_GEWICH>
          <xsl:call-template name="formatWeight">
            <xsl:with-param name="weight" select="form/field[@name='tfZUG_GEWICH']/plainValue" />
          </xsl:call-template>
        </ZUG_GEWICH>
        <AUF_GEWICH>
          <xsl:call-template name="formatWeight">
            <xsl:with-param name="weight" select="form/field[@name='tfAUF_GEWICH']/plainValue" />
          </xsl:call-template>
        </AUF_GEWICH>
        <ERS_GEWI_1>
          <xsl:call-template name="formatWeight">
            <xsl:with-param name="weight" select="form/field[@name='tfERS_GEWI_1']/plainValue" />
          </xsl:call-template>
        </ERS_GEWI_1>
        <ERS_GEWI_2>
          <xsl:call-template name="formatWeight">
            <xsl:with-param name="weight" select="form/field[@name='tfERS_GEWI_2']/plainValue" />
          </xsl:call-template>
        </ERS_GEWI_2>
        <ART><xsl:value-of select="form/field[@name='tfART']/plainValue"/></ART>
        <ART_GEWICH>
          <xsl:call-template name="formatWeight">
            <xsl:with-param name="weight" select="form/field[@name='tfART_GEWICH']/plainValue" />
          </xsl:call-template>
        </ART_GEWICH>
        <STARTORT><xsl:value-of select="form/field[@name='tfSTARTORT']/plainValue"/></STARTORT>
        <ZIELORT><xsl:value-of select="form/field[@name='tfZIELORT']/plainValue"/></ZIELORT>
        <UEBER><xsl:value-of select="form/field[@name='tfUEBER']/plainValue"/></UEBER>
        <ZEIT_VON>
          <xsl:call-template name="formatDate">
            <xsl:with-param name="dateTime" select="form/field[@name='tfZEIT_VON']/plainValue" />
          </xsl:call-template>
        </ZEIT_VON>
        <VON_UHR><xsl:value-of select="form/field[@name='tfVON_UHR']/plainValue"/></VON_UHR>
        <ZEIT_BIS>
          <xsl:call-template name="formatDate">
            <xsl:with-param name="dateTime" select="form/field[@name='tfZEIT_BIS']/plainValue" />
          </xsl:call-template>
        </ZEIT_BIS>
        <BIS_UHR><xsl:value-of select="form/field[@name='tfBIS_UHR']/plainValue"/></BIS_UHR>
        <ORT_LEERFA><xsl:value-of select="form/field[@name='tfORT_LEERFA']/plainValue"/></ORT_LEERFA>
        <BEGRUENDG><xsl:value-of select="form/field[@name='tfBEGRUENDG']/plainValue"/></BEGRUENDG>
        <ORTSLAGE><xsl:value-of select="form/field[@name='edAnmerkungen']/plainValue"/></ORTSLAGE>
        <NOTIZ><xsl:value-of select="form/field[@name='edAnmerkungen']/plainValue"/></NOTIZ>
        <SACHGEBIET>Z</SACHGEBIET>
        <FORMID><xsl:value-of select="form/field[@name='tfFORMID']/plainValue"/></FORMID>
        <SERVICE_ID><xsl:value-of select="./@process-uid" /></SERVICE_ID>
      </datensatz>
    </daten>
  </xsl:template>
  <xsl:template name="formatDate">
    <xsl:param name="dateTime"/>
    <xsl:variable name="day" select="substring-before($dateTime, '.')" />
    <xsl:variable name="month" select="substring-before(substring-after($dateTime, '.'), '.')" />
    <xsl:variable name="year" select="substring-after(substring-after($dateTime, '.'), '.')" />

    <xsl:choose>
      <xsl:when test="$dateTime !=''">
        <xsl:value-of select="concat($year, '-', $month, '-', $day)" />
      </xsl:when>
      <xsl:otherwise>
        
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  <xsl:template name="formatWeight">
    <xsl:param name="weight"/>
    <xsl:value-of select="translate($weight, ',', '.')" />
  </xsl:template>
</xsl:stylesheet>


Im Beispiel werden über die am Ende stehenden Templates formatDate und formatWeight Datumswerte und Gewichte in das Format überführt, welches ALVA9 erwartet. Eine Konvertierung von im Formular eingegebenen Werten in ein von ALVA9 erwartetes Format kann gegebenenfalls auch bei anderen Daten nötig sein. In solchen Fällen ist die Verwendung von speziellen Templates häufig die einfachste Lösung.



Bezüglich Details zur benötigten XML-Struktur für das jeweilige anzubindende Fachverfahren wenden Sie sich bitte an den Fachverfahrenshersteller











Speichern von zusätzlichen Dokumenten 

Im Beispiel wird zunächst über eine Aktion vom Typ ZIP Komprimieren ein ZIP-Archiv erzeugt, welches alle an das Formular angehangenen Dateien, eine mithilfe einer PDF-Print-Aktion generierte PDF-Quittung des Formulars und die erstellte XML-Datei beinhaltet. Dieses Archiv wird dann über eine Aktion vom Typ Speichern im Dateisystem an eine Stelle im Dateisystem des Servers gespeichert, die als Austauschverzeichnis für das jeweilige ALVA9 Fachverfahren gedacht ist und von der aus sich das System dann die Datei selbstständig abholt. 


Es ist wichtig, dass alle Dokumente, die zu den in der XML-Datei enthaltenen Daten gehören und zu ALVA9 übertragen werden sollen, mit im gleichen ZIP-Archiv enthalten sind.


Falls nur Informationen aus Formularfeldern und keine Dateien an ALVA9 übertragen werden sollen, muss nur die zuvor erzeugte XML-Datei im ZIP-Archiv gespeichert werden.


Beispielhafte Konfiguration der Workflow-Aktion vom Typ Speichern im Dateisystem, mit der das Archiv mit allen Daten im Dateisystem gespeichert wird.


Benennung erzeugter Daten

Im Beispiel wird die XML-Datei ALVA_SONNTAG_[%$PROCESS_ID%].xml und das ZIP-Archiv ALVA_SONN_[%$PROCESS_ID%].zip genannt. Der Dateiname ist grundsätzlich egal, es ist aber wichtig, dass der Dateiname der ZIP-Datei eindeutig und nicht bei verschiedenen Vorgängen gleich ist, da sich mehrere Dateien gleichzeitig im Austauschverzeichnis befinden können. 

Im Beispiel wird der Platzhalter für die Prozess-ID verwendet, welche immer bei jedem Vorgang unterschiedlich ist. Prinzipiell können hierfür aber auch andere Informationen wie zum Beispiel Werte von Zählern verwendet werden, um einen eindeutigen Dateinamen zu erzeugen.

 


Ansprechpartner für Fragen zur Schnittstelle

Für weitere Fragen zur Anbindung, der benötigten kostenpflichtigen Schnittstelle und der von ALVA9 für das jeweilige Fachverfahren benötigten XML-Struktur wenden Sie sich bitte direkt an den Hersteller.







War dieser Artikel hilfreich?

Das ist großartig!

Vielen Dank für das Feedback

Leider konnten wir nicht helfen

Vielen Dank für das Feedback

Wie können wir diesen Artikel verbessern?

Wählen Sie wenigstens einen der Gründe aus
CAPTCHA-Verifikation ist erforderlich.

Feedback gesendet

Wir wissen Ihre Bemühungen zu schätzen und werden versuchen, den Artikel zu korrigieren