State of the Art Integrierbarkeit einer Bestellanwendung in kundeneigene IT-Infrastruktur

time Mittwoch, 19. August 2020 — Stefan Schnuderl

#api #lösung

CaseStudy zur Integrierbarkeit von Geschäftsanwendungen in kundeneigene IT-Prozesse, am Beispiel von Mama Bringt's für ADLER Lacke

Einer der Vorteile unserer Geschäftslösungen besteht in der einfachen State of the Art Integrierbarkeit in die Kundeninfrastruktur.
Wir möchten an einem Beispiel von Adler Lacke diese Integrierbarkeit demonstrieren.

Ausgangslage

Adler Lacke ist Kunde von Mama Bringt’s, der führenden Großküche für Betriebsrestaurants und Kantinenessen in Tirol und Vorarlberg. Guid.New durfte die Bestellanwendung für Mama Bringt’s umsetzen. Ein besonderer Vorteil der Anwendung ist die gute Integrierbarkeit in die Endkundeninfrastruktur, folgende Schnittstellen werden von Adler Lacke verwendet:

  • Abruf der monatlichen Bestellungen für die Personalverrechnung
    Es wird dazu monatlich eine Datei via SFTP bereitgestellt. Die Datenschnittstelle der Mama Bringt’s Bestellapp wird zu diesem Zweck via Powershell abgefragt, die Daten in gewünschter Form aggregiert und exportiert. Vorteil dieses Ansatzes ist die einfache und umfangreiche Anpassbarkeit an individuelle Kundenanforderungen, die ohne Programmierung an der Bestell-Lösung vorgenommen werden kann.
  • Steuerung der Benutzerverwaltung
    Die Benutzerverwaltung wurde von Adler über REST-Schnittstelle angebunden. Die Schnittstelle folgt der OpenAPI Specification, die Authentifizierung OAuth. Dadurch ist eine Anbindung aus Systemen von Adler sehr einfach und intuitiv. Zusätzlich wird eine Dokumentation und eine Sandbox-Instanz zum Verifizieren der Umsetzung zur Verfügung gestellt.

Systemanforderung

Adler Lacke hatte die weitere Anforderung, dass Bestellungen von Mitarbeitern, die das Unternehmen verlassen, von der Personalbuchhaltung zu prüfen sind. Diese Informationen steht über die API für entsprechend berechtige Benutzer zur Verfügung. Die Umsetzung erlaubt die Eingabe der Personalnummer sowie des zu prüfenden Zeitraumes und erzeugt ein PDF mit der Listung der Bestellungen.

Umsetzung

Im ersten Schritt authentifizieren wir uns an der API. Die Authentifizierung wird via Auth0 verwaltet:

 
$apiUrl="[API Url]";

$credential = Get-Credential;

#get bearer token
$tokenRequest = @{
	grant_type='http://auth0.com/oauth/grant-type/password-realm'
	client_id='[client id]'
	client_secret='[client secret]'
	realm='Username-Password-Authentication'
	audience='recheismenu.api'
	username=$credential.UserName
	password=$credential.GetNetworkCredential().password
}

$tokenRequestAsJson = $tokenRequest | ConvertTo-Json
$token = Invoke-RestMethod -Method Post -Uri "https://[recheis host].eu.auth0.com/oauth/token" -Body $tokenRequestAsJson -ContentType 'application/json';
  
$requestHeaders = @{"Authorization" = "Bearer " + $token.access_token}

Mit dem entsprechenden Zugriff werden nun die Benutzer von Adler abgerufen:

 
# fetch data from user 
$users = Invoke-RestMethod -Uri "$apiUrl/users" -Headers $requestHeaders;
$user = $users | Where-Object { $_.employeeNumber -eq $mitarbeiterNummer }
if(!$user) 
{
    throw "Kein Mitarbeiter mit der Mitarbeiternummer $mitarbeiterNummer gefunden"
}

Nun können die Bestellungen des gewählten Benutzers geholt werden. Der Kontext der API wird auf den entsprechenden Benutzer über die delegated-user-id gesetzt:

# fetch orders from user
$requestHeaders = @{"Authorization" = "Bearer " + $token.access_token; "delegated-user-id" = $user.id}
$requestParams = @{"fromDate"=$von.ToString('yyyy-MM-dd'); "toDate"=$bis.AddDays(1).ToString('yyyy-MM-dd'); };
$orders = Invoke-RestMethod -Uri "$apiUrl/mobile/dailyOffers" -Headers $requestHeaders -Body $requestParams;

Mit den Daten wird ein PDF erzeugt und geöffnet:

New-PDF {
    New-PDFText -Text "Folgende offene Bestellungen von $($user.firstName) $($user.lastName) (Personalnummer $($user.employeeNumber)) befinden sich im System:"
    New-PDFList -Indent 3 
    {
        foreach($order in $orders)
        {
            $orderDate = [datetime]$order.date
            foreach($offer in $order.offers)
            {
                if($Null -eq $offer.orderForUser) { continue; } # filter canceled menu
                $line = "$($orderDate.ToString('dd.MM.yyyy')): $([int]$offer.orderForUser.amount) $($offer.article.name)"
                New-PDFListItem -Text "$line"
            }
        }
    }
} -FilePath "$env:Temp\OrderedMenus_${mitarbeiterNummer}_$((Get-Date).ToString('yyyyMMdd_HHmm')).pdf" -Show

 

 

Es ist extrem praktisch, selbst Anbindungen an unsere IT-Systeme vornehmen zu können. Das erweitert unseren Integrationsspielraum und damit den Mehrwert der Lösung immens.

– Daniel Noggler, IT Adler Lacke