SOG-Helpcenter Logo SOG Business - Software

App - Schnittstellen für App-Programmierung


Mit den #soapapp Schnittstellen steht die Möglichkeit zur Verfügung Mobile Applikationen für SOG ERP zu entwickeln, die über Soap-Dienste einen schnellen Zugriff auf die SOG ERP Daten bieten.

Zur Authentifizierung wird ein Login-Modell unterstützt, dass es einer Applikation ermöglicht ein "Logintoken" abzurufen, mit dessen Hilfe später auf die Dienste zugegriffen werden kann, ohne dass dazu ein echtes Benutzerkennwort erforderlich ist.

Das Applikations-Anmeldekennwort wird dabei gegen das vom Sachbearbeiter hinterlegte 2-Faktor Kennwort gefolgt von dem aktuellen 2-Faktor Einmalschlüssel geprüft.

 

Werden die App-Schnittstellen über einen offenen TCP/IP Port im Internet freigegeben MUSS aus Sicherheitsgründen das https-Protokoll verwendet werden.

Der SOG ERP Soap-Server unterstützen komprimierte Kommunikation (gzip compression). Verwenden Sie diese, um die Größe der ausgetauschten Daten zu minimieren.

 

Installation

Bei der Installation ist ein httpservice mit folgenden Parametern zu starten:

 

    sogerpsrv.exe -x httpservice -ServicesConfig httpserviceBenstatServer_cfg.xml 

        -AuthenticationRequired true -AuthenticationScheme Anonymous,basic 

        -logmode error -logdir c:\temp\log.sogi 

        -EnableAccessControlResponseHeaders true 

        -uri https://localhost:6312/,https://sogapp:6312/,https://sogapp.soghh.de:6312/

 

Oder in Form einer Konfigurationsdatei:

 

        <add key="Service_1" value="SOG ERP (VACOS),01,httpservice,300" />

        <add key="Service_1_External" value="true" />

        <add key="Service_1_ServicesConfig" value="httpserviceBenstatServer_cfg.xml" />

        <add key="Service_1_AuthenticationRequired" value="true" />

        <add key="Service_1_AuthenticationScheme" value="Anonymous,basic" />

        <add key="Service_1_logmode" value="error" />

        <add key="Service_1_logdir" value="c:\temp\log" />

        <add key="Service_1_testdat" value="current" />

        <add key="Service_1_EnableAccessControlResponseHeaders" value="true" />

        <add key="Service_1_uri" value="https://localhost:6312/,https://sogapp:6312/,https://sogapp.soghh.de:6312/" />

 
Computername und Portnummer sind in dem "uri" Eintrag anzupassen.
Anfangs kann der "logmode" auf "full" gesetzt werden. um auch erfolgreiche Requests zu protokollieren.

Die Firewall muss so eingestellt werden, dass der Port über das Internet erreichbar ist.

 

Wird der IP Port ohne VPN direkt ins Internet freigegeben, sollte zwingend das https Protokoll verwendet werden!

 

Damit der Port vom Programm genutzt werden kann, sind die folgenden Kommandos notwendig:
 
        netsh http add urlacl url=https://localhost:6312/ user=Domäne\GruppeOderBenutzer listen=yes

        netsh http add urlacl url=https://sogapp:6312/ user=Domäne\GruppeOderBenutzer listen=yes

        netsh http add urlacl url=https://sogapp.soghh.de:6312/ user=Domäne\GruppeOderBenutzer listen=yes
 
Für die Verwendung von HTTPS ist ein SSL Zertifikat zu hinterlegen. Außerdem muss das richtige SSL Zertifikat der Anwendung zugeordnet werden.
 
        netsh http add sslcert ipport=0.0.0.0:6312 certhash=068c49b13d7c46210a18a691082d9dad7e34c6ea appid={f425a50a-eeb3-46d4-acfc-16504ac2b09f}

 
Den Zertifikats-Hashcode ermitteln Sie über das Programm mmc (Micrsoft Managment Console) - Datei - Snap-In hinzufügen - Zertifikate - Hinzufügen Computerkonto - Lokaler Computer - Eigene Zertifikate - Zertifikate - Zertifikat mit dem Namen der externen Url (z. B. sogapp.soghh.de) doppelt klicken - Reiter Details - Fingerabdruck
Achtung: Wenn die Daten hier mit der Maus kopiert werden, ist häufig ein nicht darstellbares Zeichen vor dem Fingerabdruck. Wird dieses später in das netsh Kommando eingefügt, kommt eine Fehlermeldung "ungültiger Parameter"!

 

Bei Bedarf kann die Liste der Detail-Datenfelder nach belieben konfiguriert werden.

Kopieren Sie dazu die Datei config.basis\AppBenstatFields_cfg.xml in ein kundenbezogenes Konfigurationsverzeichnis, und passen Sie diese an. Dadurch können in den Details z. B. auch beliebige Metadaten mit angezeigt werden.

 
Hinterlegen eines 2-Faktor Kennwortes für den Zugriff auf den Dienst

Damit Benutzer die App-Schnittstelle verwenden können, muss jeder Sachbearbeiter ein 2-Faktor Kennwort hinterlegen.
Jeder Sachbearbeiter muss dazu das Programm p798 - Passworte (pwdsu) nutzen. Siehe auch: Hinterlegung eines 2-Faktor Kennwortes

Bei der Installation der SOGBEN Funktion auf dem Server sollte ein entsprechender RSA-KEY durch einen Administrator erzeugt werden. Der Name des RSA Keys sollte dabei "SOGBEN" lauten.

 

Beispiel- und Testrequests

In dem Verzeichnis Sources\UnitTestData\SoapRequests befinden sich Dateien Namens "App....xml". Diese stellen Beispiel und Testrequests dar. Verwenden Sie das Tools-Programm hhiptst um diese Requests gegen einen laufenden Service zu testen.

 

Programmierung der SOAP-Schnittstelle

Im folgenden sind die zur Verfügung stehenden SOAP-Schnittstellen beschrieben.

Beispielrequests finden Sie in dem Verzeichnis Sources\UnitTestData\SoapRequests

Diese Requests können z. B. mit dem Programm hhiptst getestet werden.

 

AppToken - Abrufen eines Anmeldetokens

Über diese Funktion kann eine Applikation ein Token anfordern, das später zur Anmeldung bei den AppDiensten genutzt werden kann.

Das Token sollte von der Applikation längerfristig gespeichert werden, damit nicht jedes Mal eine erneute Passworteingabe des Benutzers notwendig ist.

Das eingegebene Benutzer-Passwort sollte die Applikation nicht speichern.

 

Im HTTP-Request muss über eine Basic-Authentifizierung als Benutzername der zu authentifizierende Windows-Benutzer in der Form "Domäne\Benutzername" oder "SachbearbeiterId" mit dem dazu gehörenden 2-Faktor Kennwort, gefolgt von dem aktuellen, zeitabhängigen 2-Faktor Einmalkennwort, als Basic-Authentifizierungskennwort übergeben werden.

In einer Testumgebung kann durch Hinterlegung des Standardkennwortes "12345678" die Notwendigkeit der 2-Faktor Authentifizierung abgeschaltet werden.

 

Http-Header: Beispiel mit Login "soghh\xyz" Passwort "abc" 2-Faktor Einmalkennwort "123456"

Authorisation: soghh\xyz:abc123456

HTTP Header: Authorization: Basic c29naGhceHl6OmFiYzEyMzQ1Ng==

 

In den folgenden Beispielen wird sogrdsdev21:6311  als Servername und Portnummer verwendet. Dies ist natürlich an die aktuellen Gegebenheiten anzupassen.

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/logon/AppToken.wsdl">

      <ApToken>

        <AppId>IHRE-APP-ID</AppId>

        <AppPwd>IHR-APP-PASSWORT</AppPwd>

      </AppToken>

    </Request>

  </soap:Body>

</soap:Envelope>

 

Eingabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AppTokenSoapIn">

  <Group elementName="AppToken" description="Liefert ein Anmeldetoken zu einem Windowsbenutzer/Kennwort." >

  <Property name="AppId" elementName="AppId" description="Application Id - Von SOG Entwicklung ausgegeben." />

  <Property name="AppPwd" elementName="AppPwd" description="Application Password - Von SOG Entwicklung ausgegeben." />

  <Property name="ClientDateAndTime" elementName="ClientDateAndTime"  

  description="Informative Übergabe von Datum/Zeit auf dem Client (Wird bei Passwortproblemen protokolliert)." />

  </Group>

</XmlObjectDefinition>

 

Die AppId und das dazugehörende AppPwd wird einem App-Entwickler von der SOG-Entwicklung zugewiesen. In ClientDateAndTime sollte die auf dem Client gültige Datum/Uhrzeit übergeben werden. Dies wird in die Protokolldateien geschrieben, wenn es Probleme bei der Anmeldung gibt damit der 2-Faktor Sicherheitsschlüssel abgeglichen werden kann.

 

Rückmeldung:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/logon/AppToken.wsdl">

      <AppToken>

        <Token>App:soghh/benutzername:sachid:c3134b21-4ada-46cb-a7c2-c5a1426f1cf6_964053540</Token>

      </AppToken>

    </Response>

  </soap:Body>

</soap:Envelope>

 

Ausgabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AppTokenSoapOut">

  <Group elementName="AppToken" >

  <Property name="Token" elementName="Token" description="Anmeldetoken." />

  </Group>

</XmlObjectDefinition>

 

 

Authentifizierung der weiteren App-Dienste

Alle weiteren AppDienste werden ebenfalls über eine HTTP Basic-Authentifizierung authentifiziert. Geben Sie hier als Benutzernamen ihre AppId und als Kennwort das unter "Abrufen eines Anmeldetokens" erzeugte Token an.

 

Http-Header: Beispiel mit AppId "abcdef" Token "123456"

Authorisation: abcdef:123456

HTTP Header: Authorization: Basic YWJjZGVmOjEyMzQ1Ng==

 

Alle weiteren Dienste haben einen "Lang" Parameter. Hier kann entweder "ger" oder "eng" übergeben werden, je nachdem ob die Benutzeroberfläche in Deutsch oder Englisch arbeitet. Andere Werte führen zu einer Fehlermeldung.

 

 

AppLogin - Prüft die aktuelle Anmeldung

Über die Funktion AppLogin kann die aktuelle Anmeldung geprüft werden, ohne weitere Daten abzurufen.
Ein Aufruf der Funktion ist nicht notwendig und dient nur zu Testzwecken.
Über den Parameter "Throw" kann ein Fehler ausgelöst und damit die eigene Fehlerbehandlung getestet werden.

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/benstat/AppLogin.wsdl">

      <AppLogin>

        <Lang>ger</Lang>

        <Message>Das ist ein Test äöüÄÖÜß &lt;any&gt;</Message>

        <Throw>false</Throw>

      </AppLogin>

    </Request>

  </soap:Body>

</soap:Envelope>

 

Eingabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AppLoginSoapIn">

  <Group elementName="AppLogin" description="Führt eine Benutzeranmeldung mit einem AppToken durch." >

  <Property name="Lang" elementName="Lang" description="Sprache ger/eng." />

  <Property name="Message" elementName="Message" description="Testmeldung" />

  <Property name="Throw" elementName="Throw" description="true: Fehler auslösen" />

  </Group>

</XmlObjectDefinition>

 

Antwort:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/benstat/AppLogin.wsdl">

      <AppLogin>

        <Message>Das ist ein Test äöüÄÖÜß &lt;any&gt;</Message>

        <Sach>linden</Sach>

        <CurrentWinUser>SOGHH\stolle</CurrentWinUser>

        <SessionLogonUser>SOGHH\stolle</SessionLogonUser>

        <UserLang>ger</UserLang>

      </AppLogin>

    </Response>

  </soap:Body>

</soap:Envelope>

 

Ausgabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AppLoginSoapOut">

  <Group elementName="AppLogin" >

  <Property name="Message" elementName="Message" description="Wiedergabe der Testnachricht." />

  <Property name="Sach" elementName="Sach" description="Angemeldeter Sachbearbeiter." />

  <Property name="CurrentWinUser" elementName="CurrentWinUser" description="Windowsbenutzer." />

  <Property name="SessionLogonUser" elementName="SessionLogonUser" description="Session LogonUser." />

  <Property name="UserLang" elementName="UserLang" description="Benutzersprache." />

  </Group>

</XmlObjectDefinition>

 

AppStaffList - Auflisten des Benutzerstatus

Über diese Funktion werden die Benutzerstatus-Informationen abgerufen.

Geliefert werden alle Sachbearbeiter die nicht löschfähig sind, und die weder im Datenfeld "login" noch im Datenfelder "fachbereich" den Begriff "PSEUDO" eingetragen haben.

Über die "Search" Angabe, kann der Umfang der Liste eingeschränkt werden (Suchfunktion).
Hier können Teile des Namens, der Id, des Matchcodes, des Aufenthaltsorts oder des KFZ Kennzeichens gesucht werden. Groß/Kleinschreibung wird dabei ignoriert.

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/benstat/AppStaffList.wsdl">

      <AppStaffList>

        <Lang>ger</Lang>

        <Search></Search>

      </AppStaffList>

    </Request>

  </soap:Body>

</soap:Envelope>

 

Eingabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AppStaffListSoapIn">

  <Group elementName="AppStaffList" description="Liefert die Liste der Mitarbeiter." >

  <Property name="Lang" elementName="Lang" description="Sprache ger/eng." />

  <Property name="Search" elementName="Search" description="Suchvorgabe für Einschränkung der Ausgabe" />

  </Group>

</XmlObjectDefinition>

 

Ausgabe:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/benstat/AppStaffList.wsdl">

      <AppStaffList>

        <Me>

          <Id>linden</Id>

          <Vorname>Christian</Vorname>

          <Nachname>Lindenau</Nachname>

          <Anwesenheit>4</Anwesenheit>

          <StatusText>Anwesend</StatusText>

          <StatusId>1</StatusId>

          <IsLogin>true</IsLogin>

          <Ersthelfer>true</Ersthelfer>

        </Me>

        <List>

          <Item>

            <Id>marten</Id>

            <Vorname>Christoph</Vorname>

            <Nachname>Martens</Nachname>

            <Anwesenheit>3</Anwesenheit>

            <StatusText>Außer Haus</StatusText>

            <CssClass>gelb</CssClass>

            <StatusSeit>10:31</StatusSeit>

          </Item>

          <Item>

            <Id>stolle</Id>

            <Initialen>ast</Initialen>

            <Vorname>Andreas</Vorname>

            <Nachname>Stolle</Nachname>

            <Anwesenheit>1</Anwesenheit>

            <StatusText>Anwesend</StatusText>

            <StatusId>1</StatusId>

            <CssClass>gruen</CssClass>

            <StatusSeit>08:08</StatusSeit>

            <StatusBis>Heute</StatusBis>

            <Aufenthaltsort>Text für Ort</Aufenthaltsort>

            <Ersthelfer>true</Ersthelfer>

          </Item>

        </List>

      </AppStaffList>

    </Response>

  </soap:Body>

</soap:Envelope>

 

Unter der Struktur "Me" sind die Daten zum angemeldeten Sachbearbeiter zu finden.

Anschließend erfolgt eine Auflistung aller vorhandenen Sachbearbeiter.

 

Ausgabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AppStaffListSoapOut">

  <Group elementName="AppStaffList" description="Liste der Benutzer">

  <Group elementName="Me" >

  <Property name="Me" className="AppStaffListRecord" >        

  <Property name="Id" elementName="Id" description="Mitarbeiter Id" />

  <Property name="Initialen" elementName="Initialen" description="Initialen" />

  <Property name="Vorname" elementName="Vorname" description="Vorname" />

  <Property name="Nachname" elementName="Nachname" description="Nachname" />

  <Property name="Online" elementName="Online" description="Online-Status" />

  <Property name="Anwesenheit" elementName="Anwesenheit" description="Anwesenheitskennzeichen" />

  <Property name="StatusText" elementName="StatusText" description="StatusText" />

  <Property name="StatusId" elementName="StatusId" description="Status Id" />

  <Property name="CssClass" elementName="CssClass" description="Status Farbe" />

  <Property name="StatusSeit" elementName="StatusSeit" description="StatusSeit" />

  <Property name="StatusBis" elementName="StatusBis" description="StatusBis" />

  <Property name="Matchcode" elementName="Matchcode" description="Matchcode" />

  <Property name="Aufenthaltsort" elementName="Aufenthaltsort" description="Aufenthaltsort oder letzter Verbleib" />

  <Property name="Kennzeichen" elementName="Kennzeichen" description="KFZ Kennzeichen ggf. mehrere, durch Komma getrennt. (Muss über Metadaten projektinidividuell organisiert werden)" />

  <Property name="IsLogin" elementName="IsLogin" description="Ist eigner Sachbearbeiter" />

  <Property name="Ersthelfer" elementName="Ersthelfer" description="True, wenn Ersthelfer" />

  <Property name="NameKompakt" elementName="NameKompakt" description="Angezeigter Name in der Kompakt-Darstellung" />

  <Property name="StatusKompakt" elementName="StatusKompakt" description="Angezeigter Status in der Kompakt-Darstellung" />

  <Property name="AlternativeFarbe" elementName="AlternativeFarbe" description="true, wenn der Benutzer mit einer alternativen Hintergrundfarbe angezeigt werden soll" />

  </Property>

  </Group>

  <Group elementName="List" >

  <Property name="List" className="List[AppStaffListRecord]" listElementName="Item">        

  <Property name="Id" elementName="Id" description="Mitarbeiter Id" />

  <Property name="Initialen" elementName="Initialen" description="Initialen" />

  <Property name="Vorname" elementName="Vorname" description="Vorname" />

  <Property name="Nachname" elementName="Nachname" description="Nachname" />

  <Property name="Online" elementName="Online" description="Online-Status" />

  <Property name="Anwesenheit" elementName="Anwesenheit" description="Anwesenheitskennzeichen" />

  <Property name="StatusText" elementName="StatusText" description="StatusText" />

  <Property name="StatusId" elementName="StatusId" description="Status Id" />

  <Property name="CssClass" elementName="CssClass" description="Status Farbe" />

  <Property name="StatusSeit" elementName="StatusSeit" description="StatusSeit" />

  <Property name="StatusBis" elementName="StatusBis" description="StatusBis" />

  <Property name="Matchcode" elementName="Matchcode" description="Matchcode" />

  <Property name="Aufenthaltsort" elementName="Aufenthaltsort" description="Aufenthaltsort oder letzter Verbleib" />

  <Property name="Kennzeichen" elementName="Kennzeichen" description="KFZ Kennzeichen ggf. mehrere, durch Komma getrennt. (Muss über Metadaten projektindividuell organisiert werden)" />

  <Property name="IsLogin" elementName="IsLogin" description="Ist eigner Sachbearbeiter" />

  <Property name="Ersthelfer" elementName="Ersthelfer" description="True, wenn Ersthelfer" />

  <Property name="NameKompakt" elementName="NameKompakt" description="Angezeigter Name in der Kompakt-Darstellung" />

  <Property name="StatusKompakt" elementName="StatusKompakt" description="Angezeigter Status in der Kompakt-Darstellung" />

  <Property name="AlternativeFarbe" elementName="AlternativeFarbe" description="true, wenn der Benutzer mit einer alternativen Hintergrundfarbe angezeigt werden soll" />

  </Property>

  </Group>

   </Group>

</XmlObjectDefinition>

 

AppStaffDetails - Auflisten von Benutzerdetails

Über die Funktion AppStaffDetails können alle Details zu einem Benutzer abgerufen werden.

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/benstat/AppStaffDetails.wsdl">

      <AppStaffDetails>

        <Lang>ger</Lang>

        <Id>stolle</Id>

        <GetImage>false</GetImage>

        <GetSchedules>false</GetSchedules>

        <ClientVersion>2</ClientVersion>

      </AppStaffDetails>

    </Request>

  </soap:Body>

</soap:Envelope>

 

Eingabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AppStaffDetailsSoapIn">

  <Group elementName="AppStaffDetails" description="Liefert die Details eines Mitarbeiters." >

  <Property name="Lang" elementName="Lang" description="Sprache ger/eng." />

  <Property name="Id" elementName="Id" description="Id des Mitarbeiters" />

  <Property name="GetImage" elementName="GetImage" description="true, wenn das Sachbearbeiterbild geliefert werden soll" />

  <Property name="GetSchedules" elementName="GetSchedules" description="true, wenn geplante Abwesenheiten geliefert werden sollen" />

  <Property name="ClientVersion" elementName="ClientVersion" description=">=2 Übergabe von Datenfeldsätzen statt Detailsinformationen" />

  </Group>

</XmlObjectDefinition>

 

Geben Sie in Id die gewünschte Benutzer-Id an. Diese erhalten Sie über die Funktion "AppStadffList".

Sofern der Benutzer ein Benutzerbild hat, finden Sie in den Details ein Bilddatum.
Dieses können Sie verwenden, um das Abrufen von Benutzerbildern zu optimieren.

Speichern Sie ein abgerufenen Bild und rufen Sie es nur dann erneut ab, wenn sich das Bilddatum ändert.

Zum Abrufen des Bildes setzen Sie im Request "GetImage" auf "true".

Wird im Request "GetSchedules" auf "true" gesetzt, erfolgt zusätzlich eine Ausgabe von geplanten Abwesenheiten oder geplanten Besprechungen.

Durch Setzen der ClientVersion auf einen Wert >= 2 wird die Systematik der Einzeldatenfelder aktiviert. In diesem Fall werden einige Datenfelder im Response nicht mehr geladen (Siehe unten). Stattdessen erfolgt eine dynamische Ausgabe weiterer Datenfelder, die nach Möglichkeit darzustellen sind.

 

Antwort:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/benstat/AppStaffDetails.wsdl">

      <AppStaffDetails>

        <Id>stolle</Id>

        <Initialen>ast</Initialen>

        <Anwesenheit>1</Anwesenheit>

        <StatusText>Anwesend</StatusText>

        <StatusId>1</StatusId>

        <CssClass>gruen</CssClass>

        <StatusSeit>08:08</StatusSeit>

        <StatusBis>Heute</StatusBis>

        <Aufenthaltsort>Text für Ort</Aufenthaltsort>

        <GeaendertDurch>linden</GeaendertDurch>

        <Geaendert>2019-10-22T12:52:27Z</Geaendert>

        <ImageExtension>.png</ImageExtension>

        <ImageVeraendert>2018-03-12T11:13:17Z</ImageVeraendert>

        <ImageBase64>iVBORw0KGgoAAAANSUhE ... WQAAAAASUVORK5CYII=</ImageBase64>

        <Schedules>

          <Item>

            <Id>sogadm200804011133</Id>

            <EkVk>1</EkVk>

            <konto>55206</konto>

            <Matchcode>AUTBREMEN</Matchcode>

            <Kundenname>Autel GmbH &amp; Co. KG</Kundenname>

            <StartUtc>2008-04-05T06:00:00Z</StartUtc>

            <EndUtc>2008-04-05T18:00:00Z</EndUtc>

            <Text>xxxxxxxxxxx</Text>

            <Status>10</Status>

            <StatusText>Geplante Abwesenheit</StatusText>

          </Item>

        </Schedules>

        <Fields>

          <Field>

            <Id>id</Id>

            <Category>Identifikation</Category>

            <Title>Id</Title>

            <Value>linden</Value>

          </Field>

          <Field>

            <Id>vorname</Id>

            <Category>Identifikation</Category>

            <Title>Vorname</Title>

            <Value>Christian</Value>

          </Field>

          <Field>

            <Id>nachname</Id>

            <Category>Identifikation</Category>

            <Title>Nachname</Title>

            <Value>Lindenau</Value>

          </Field>

          <Field>

            <Id>abt</Id>

            <Category>Kontakt</Category>

            <Title>Abteilung</Title>

            <Value>TACOS Software</Value>

          </Field>

          <Field>

            <Id>tel</Id>

            <Category>Kontakt</Category>

            <Title>Telefon</Title>

            <Value>123</Value>

            <Typ>tel</Typ>

          </Field>

          <Field>

            <Id>email</Id>

            <Category>Kontakt</Category>

            <Title>EMail</Title>

            <Value>lindenau@sog.de</Value>

            <Typ>mailto</Typ>

          </Field>

        </Fields>

      </AppStaffDetails>

    </Response>

  </soap:Body>

</soap:Envelope>

 

Ausgabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AppStaffDetailsSoapOut">

  <Group elementName="AppStaffDetails" description="Details eines Benutzers">

 

  <Property name="Id" elementName="Id" description="Mitarbeiter Id" />

  <Property name="Initialen" elementName="Initialen" description="Initialen" />

  <Property name="Anwesenheit" elementName="Anwesenheit" description="Anwesenheitskennzeichen" />

  <Property name="StatusText" elementName="StatusText" description="StatusText" />

  <Property name="StatusId" elementName="StatusId" description="Status Id" />

  <Property name="CssClass" elementName="CssClass" description="Status Farbe" />

  <Property name="StatusSeit" elementName="StatusSeit" description="StatusSeit" />

  <Property name="StatusBis" elementName="StatusBis" description="StatusBis" />

  <Property name="Matchcode" elementName="Matchcode" description="Matchcode" />

  <Property name="Aufenthaltsort" elementName="Aufenthaltsort" description="Aufenthaltsort oder letzter Verbleib" />

  <Property name="Kennzeichen" elementName="Kennzeichen" description="KFZ Kennzeichen ggf. mehrere, durch Komma getrennt. (Muss über Metadaten projektindividuell organisiert werden)" />

  <Property name="IsLogin" elementName="IsLogin" description="Ist eigner Sachbearbeiter" />

  <Property name="Ersthelfer" elementName="Ersthelfer" description="True, wenn Ersthelfer" />

  <Property name="NameKompakt" elementName="NameKompakt" description="Angezeigter Name in der Kompakt-Darstellung" />

  <Property name="StatusKompakt" elementName="StatusKompakt" description="Angezeigter Status in der Kompakt-Darstellung" />

  <Property name="AlternativeFarbe" elementName="AlternativeFarbe" description="true, wenn der Benutzer mit einer alternativen Hintergrundfarbe angezeigt werden soll" />

  <Property name="GeaendertDurch" elementName="GeaendertDurch" description="Datensatz zuletzt geändert durch Sachbearbeiter Id" />

  <Property name="Geaendert" elementName="Geaendert" description="Datum der letzten Änderung des Datensatzes." />

  <Property name="Online" elementName="Online" description="Online-Status" />

  <Property name="ImageExtension" elementName="ImageExtension" description="Bild Dateierweiterung" />

  <Property name="ImageVeraendert" elementName="ImageVeraendert" description="Bild Änderungsdatum" />

  <Property name="ImageBase64" elementName="ImageBase64" description="Bild wenn im Request GetImage auf True gestellt wurde" />

 

 

  <!-- Datenfelder, die nur bei Clientversion <=2 gefüllt werden START -->

  <Property name="Vorname" elementName="Vorname" description="Vorname" />

  <Property name="Nachname" elementName="Nachname" description="Nachname" />

  <Property name="Abteilung" elementName="Abteilung" description="Abteilung" />

  <Property name="Fachbereich" elementName="Fachbereich" description="Fachbereich" />

  <Property name="Durchwahl" elementName="Durchwahl" description="Durchwahl" />

  <Property name="Telefon" elementName="Telefon" description="Telefon" />

  <Property name="Email" elementName="Email" description="Email" />

  <Property name="PrivatTelefon" elementName="PrivatTelefon" description="Veröffentliches Privat Telefonnummer" />

  <Property name="PrivatMobil" elementName="PrivatMobil" description="Veröffentliches Privat Mobilnummer" />

  <Property name="PrivatEmail" elementName="PrivatEmail" description="Veröffentliches Privat Email" />

  <Property name="Raum" elementName="Raum" description="Raum (Büronummer). (Muss über Metadaten projektindividuell organisiert werden)" />

  <Property name="Mentor" elementName="Mentor" description="Mentor. (Muss über Metadaten projektindividuell organisiert werden)" />

  <Property name="Teamleiter" elementName="Teamleiter" description="Teamleiter. (Muss über Metadaten projektindividuell organisiert werden)" />

  <Property name="Clientname" elementName="Clientname" description="Clientname. (Muss über Metadaten projektindividuell organisiert werden)" />

  <!-- Datenfelder, die nur bei Clientversion <=2 gefüllt werden ENDE -->

 

  <Group elementName="Schedules" >

  <Property name="Schedules" className="List[AppStaffDetailsAbwesenheitRecord]" listElementName="Item">        

  <Property name="Id" elementName="Id" description="Mitarbeiter Id" />

  <Property name="EkVk" elementName="EkVk" description="1=Verkauf 2=Einkauf" />

  <Property name="Konto" elementName="Konto" description="Konto" />

  <Property name="Matchcode" elementName="Matchcode" description="Matchcode" />

  <Property name="Kundenname" elementName="Kundenname" description="Name des Kunden" />

  <Property name="StartUtc" elementName="StartUtc" description="Startzeitpunkt UTC" />

  <Property name="EndUtc" elementName="EndUtc" description="Endzeitpunkt UTC" />

  <Property name="Text" elementName="Text" description="Text" />

  <Property name="Status" elementName="Status" description="Numerischer Statuscode" />

  <Property name="StatusText" elementName="StatusText" description="StatusText" />

  </Property>

  </Group>

 

  <Group elementName="Fields" >

  <Property name="Fields" className="List[AppStaffDetailsFieldRecord]" listElementName="Field">        

  <Property name="Id" elementName="Id" description="Feld Id (interner, eindeutiger Name)" />

  <Property name="Category" elementName="Category" description="Gruppierungsbegriff. Sollte als Überschrift einer Gruppe angezeigt werden." />

  <Property name="Title" elementName="Title" description="Feldtitel" />

  <Property name="Value" elementName="Value" description="Feldwert" />

  <Property name="Typ" elementName="Typ" description="Fledtype. tel, skype, mailto" />

  </Property>

  </Group>

 

  </Group>

</XmlObjectDefinition>

 

 

 

AppStaffSetState - Ändern des Status eines Benutzers

Über die Funktion AppStaffSetState kann der Benutzerstatus eines Benutzer geändert werden.

Außerdem kann eine geplante Abwesenheit eingerichtet werden.

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/benstat/AppStaffSetState.wsdl">

      <AppStaffSetState>

        <Lang>ger</Lang>

        <Id>stolle</Id>

        <Status>1</Status>

        <Ort>Text für Ort</Ort>

        <BisDatum></BisDatum>

        <BisUhrzeit></BisUhrzeit>

        <VonUhrzeit></VonUhrzeit>

        <EkVk></EkVk>

        <konto></konto>

      </AppStaffSetState>

    </Request>

  </soap:Body>

</soap:Envelope>

 

Eingabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AppStaffSetStateSoapIn">

  <Group elementName="AppStaffSetState" description="Setzt den aktuelle Status." >

  <Property name="Lang" elementName="Lang" description="Sprache ger/eng." />

  <Property name="Id" elementName="Id" description="Id des Mitarbeiters" />

  <Property name="EkVk" elementName="EkVk" description="1=Verkauf 2=Einkauf" />

  <Property name="konto " elementName="konto " description="kontonummer" />

  <Property name="Status" elementName="Status" description="Numerischer Statuscode" />

  <Property name="BisDatum" elementName="BisDatum" description="Bis Datum Format: JJJJ-MM-TT" />

  <Property name="BisUhrzeit" elementName="BisUhrzeit" description="Bis Uhrzeit Format: HH:MM" />

  <Property name="VonUhrzeit" elementName="VonUhrzeit" description="Von Uhrzeit Format: HH:MM" />

  <Property name="Ort" elementName="Ort" description="Aktueller Aufenthaltsort oder Hinweistext" />

  </Group>

</XmlObjectDefinition>

 

Rückmeldung:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/benstat/AppStaffSetState.wsdl">

      <AppSetState>

        <StatusText>Anwesend</StatusText>

        <StatusId>1</StatusId>

      </AppSetState>

    </Response>

  </soap:Body>

</soap:Envelope>

 

 

Ausgabedatenfelder

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AppStaffSetStateSoapOut">

  <Group elementName="AppSetState" description="Ergebnis Status">

  <Property name="StatusText" elementName="StatusText" description="StatusText" />

  <Property name="StatusId" elementName="StatusId" description="Status Id" />

  </Group>

</XmlObjectDefinition>

 

AppUniqAccount - Abrufen von Kontenlisten

Bei der Anwahl eines kontos für das Einrichten einer geplanten Abwesenheit sollte dem Benutzer die Möglichkeit gegeben werden, entweder direkt eine numerische kontonummer einzugeben, oder einen alphanumerische Suchstring.
In beiden Fällen sollte zur Prüfung der Eingabe die Funktion "AppUniqAccount" aufgerufen werden.
Definiert die Eingabe eine eindeutige kontonummer, so wird genau ein Kundendatensatz zurückgegeben, dessen kontonummer dann verwendet werden sollte.
Informativ sollte zusätzlich zumindest der Matchcode mit angezeigt werden.

Ist die kontoanwahl nicht eindeutig, wird eine Liste von möglichen Treffern geliefert, die dem Benutzer zur Auswahl angezeigt werden kann.

Damit diese Auswahl nicht unbegrenzt lang wird, kann die maximale Anzahl der zurück gelieferten Datensätze eingeschränkt werden.

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/benstat/AppUniqAccount.wsdl">

      <AppUniqAccount>

        <Lang>ger</Lang>

        <EkVk>1</EkVk>

        <kontoAnwahl>AUTB</kontoAnwahl>

        <MaxRecords>100</MaxRecords>

      </AppUniqAccount>

    </Request>

  </soap:Body>

</soap:Envelope>

 

 

Eingabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AppUniqAccountSoapIn">

  <Group elementName="AppUniqAccount" description="Sucht Konten auf Basis einer Benutzereingabe." >

  <Property name="Lang" elementName="Lang" description="Sprache ger/eng." />

  <Property name="EkVk" elementName="EkVk" description="1=Verkauf 2=Einkauf" />

  <Property name="kontoAnwahl" elementName="kontoAnwahl" description="Benutzereingabe" />

  <Property name="MaxRecords" elementName="MaxRecords" description="Maximale Anzahl Datensätze" />

  </Group>

</XmlObjectDefinition>

 

Antwort:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/benstat/AppUniqAccount.wsdl">

      <UniqAccount>

        <Count>3</Count>

        <List>

          <Item>

            <EkVk>1</EkVk>

            <konto>54827</konto>

            <Match>AUTBERLIN</Match>

            <Name>Autohaus &amp; Partner</Name>

            <Plz>10256</Plz>

            <Ort>Berlin</Ort>

          </Item>

          <Item>

            <EkVk>1</EkVk>

            <konto>55143</konto>

            <Match>AUTBERLIN</Match>

            <Name>Auto-Versand KG</Name>

            <Plz>10349</Plz>

            <Ort>Berlin</Ort>

          </Item>

          <Item>

            <EkVk>1</EkVk>

            <konto>55206</konto>

            <Match>AUTBREMEN</Match>

            <Name>Autel GmbH &amp; Co. KG</Name>

            <Plz>28329</Plz>

            <Ort>Bremen</Ort>

          </Item>

        </List>

      </UniqAccount>

    </Response>

  </soap:Body>

</soap:Envelope>

 

Ausgabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AppUniqAccountSoapOut">

  <Group elementName="UniqAccount" description="kontosuche">

  <Property name="Count" elementName="Count" description="Anzahl Ergebnisse" />

  <Group elementName="List" >

  <Property name="List" className="List[AppUniqAccountRecord]" listElementName="Item">        

  <Property name="EkVk" elementName="EkVk" description="1=Verkauf 2=Einkauf" />

  <Property name="konto " elementName="konto " description="kontonummer" />

  <Property name="Match" elementName="Match" description="Matchcode" />

  <Property name="Name" elementName="Name" description="Name" />

  <Property name="Plz" elementName="Plz" description="Plz" />

  <Property name="Ort" elementName="Ort" description="Ort" />

  </Property>

  </Group>

  </Group>

</XmlObjectDefinition>

 

AppDeleteSchedule - Löschen einer geplanten Abwesenheit

Mit der Funktion kann eine geplante Abwesenheit gelöscht werden.
Die benötigten Id's erhalten Sie von der Funktion "AppStaffDetails".

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/benstat/AppDeleteSchedule.wsdl">

      <AppDeleteSchedule>

        <Lang>ger</Lang>

        <StaffId>stolle</StaffId>

        <ScheduleId>sogadm200804011133</ScheduleId>

      </AppDeleteSchedule>

    </Request>

  </soap:Body>

</soap:Envelope>

 

 

Eingabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AppDeleteScheduleSoapIn">

  <Group elementName="AppDeleteSchedule" description="Löscht eome geplante Abwesenheit." >

  <Property name="Lang" elementName="Lang" description="Sprache ger/eng." />

  <Property name="StaffId" elementName="StaffId" description="Id des Mitarbeiters" />

  <Property name="ScheduleId" elementName="ScheduleId" description="Id der geplanten Abwesenheit" />

  </Group>

</XmlObjectDefinition>

 

Ergebnis:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/benstat/AppDeleteSchedule.wsdl">

      <AppDeleteSchedule>

        <Done>1</Done>

      </AppDeleteSchedule>

    </Response>

  </soap:Body>

</soap:Envelope>

 

Ausgabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AppDeleteScheduleSoapOut">

  <Group elementName="AppDeleteSchedule" description="Ergebnis Status">

  <Property name="Done" elementName="Done" description="Anzahl erledigter geplanter Abwesenheiten (normalerweise 1)" />

   </Group>

</XmlObjectDefinition>

 

Awl - Abrufen von Wertelisten

Mit der Funktion können hinterlegte Wertelisten abgerufen werden.

Um die möglichen Ausprägungen des Sachbearbeiter-Statuscodes zu erhalten, rufen sie die Auswahlliste "benstat.awl" ab.

Für die Texte zu den möglichen Anwesenheits-Werten, rufen Sie die Werteliste "m_anwesenheit.awl" ab.

 

Request:

 

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <Request xmlns="https://sogrdsdev21:6311/benstat/Awl.wsdl">

      <Awl>

        <AwlName>benstat.awl</AwlName>

        <Lang></Lang>

      </Awl>

    </Request>

  </soap:Body>

</soap:Envelope>

 

Eingabefelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Request" className="AwlSoapIn">

  <Group elementName="Awl" >

  <Property name="AwlName" elementName="AwlName" required="true" description="Name der Awl" />

  <Property name="Lang" elementName="Lang" description="Sprache" />

  </Group>

</XmlObjectDefinition>

 

Antwort:

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <soap:Header />

  <soap:Body>

    <Response xmlns="https://sogrdsdev21:6311/benstat/Awl.wsdl">

      <Awl>

        <AwlName>benstat.awl</AwlName>

        <Existiert>true</Existiert>

        <Titel>Benutzerstatus</Titel>

        <SpaltenTitel>

          <Spalte>Text</Spalte>

          <Spalte>Status</Spalte>

        </SpaltenTitel>

        <Wertspalte>2</Wertspalte>

        <Referenzwertspalte>1</Referenzwertspalte>

        <Zeilen>

          <Zeile>

            <Spalte>Unbekannt</Spalte>

            <Spalte>0</Spalte>

          </Zeile>

          <Zeile>

            <Spalte>Anwesend</Spalte>

            <Spalte>1</Spalte>

          </Zeile>

          <Zeile>

            <Spalte>Feierabend</Spalte>

            <Spalte>2</Spalte>

          </Zeile>

      </Awl>

    </Response>

  </soap:Body>

</soap:Envelope>

 

Ausgabedatenfelder:

 

<?xml version="1.0" encoding="utf-8"?>

<XmlObjectDefinition elementName="Response" className="AwlSoapOut">

  <Group elementName="Awl" >

  <Property name="AwlName" elementName="AwlName" description="Name der Awl" />

  <Property name="Exists" elementName="Existiert" description="Flag ob die Awl existiert." />

  <Property name="Title" elementName="Titel" description="Titel der Awl." />

  <Property name="Columntitles" elementName="SpaltenTitel" listElementName="Spalte" description="Spaltentitel der Awl." />

  <Property name="PickColumn" elementName="Wertspalte" />

  <Property name="RefColumn" elementName="Referenzwertspalte" />

  <Property name="Rows" elementName="Zeilen" listElementName="Zeile" description="Zeilen der Auswahlliste" className="IList[AwlSoapOut.Row]" >

  <Property name="ColumnValues" listElementName="Spalte" description="Spaltenwert der Auswahlliste" />

  </Property>

  </Group>

</XmlObjectDefinition>