Zum Inhalt springen

Daten aus einer Smap verwenden für Datenauswahlblock einer 2.Smap mit Powershell


Diren Teke

Empfohlene Beiträge

Ich habe ein PowerShell Skript erstellt, welches die Daten aus einer ersten Smap ausliesst und diese in Datenauswahlblöcke einer zweiten Smap hineinlädt.

Ich veröffentliche diesen Skript als Dankeschön an SmapOne.

<#
    .SYNOPSIS
        Nimmt über die API von SmapOne Daten aus der ersten Smap(1) auf und lädt diese auf einer zweiten Smap(2) in einen Datenauswahlblock hoch und aktualisiert den entsprechenden Smap(2).

    .DESCRIPTION
        Dieses PowerShell-Skript, ist darauf ausgelegt, Daten aus Smap(1) mit Hilfe der Rest-API von Smapone in einen Datenauswahlblock der Smap(2) zu füllen und anschliessend ein Update der Smap(2) durchzuführen.

    .PARAMETER smapID
        Gibt die ID der smapOne App an, die aus der Browser-URL der App entnommen werden kann. 
            SmapOne API -> Intern und AccessToken eingeben -> Datasource -> [GET] /DataSource/{dataSourceId} -> dataSourceID eingeben -> Try it out!

    .PARAMETER dataSourceID
        Gibt die Data Source ID an, die mit dem Smap verbunden ist. 
            SmapOne API -> Intern und AccessToken eingeben -> Datasource -> [GET] /DataSource -> Try it out!

    .PARAMETER AccessToken
        Gibt das Login-Token des smapOne Accounts an. 
            Smapone-Plattform -> Mein Profil -> Rest-API -> Token verwalten.

    .INPUTS
        Daten aus einer Smap über API.

    .OUTPUTS
        Ergebnisse der API-Aufrufe und des Datenupload-Prozesses.

    .EXAMPLE
        Ausführen dieses Skriptes führt zu einem Holen von Daten aus einer Smap(1) und einem Hochladen der selben Daten an eine Smap(2). Anschliessend wird ein Update an die Nutzer des Smaps(2) durchgeführt.
        Parameter des Smaps müssen angepasst werden.

    .LINK
        Weitere Informationen zu SmapOne: https://www.smapone.com/
        Platform zum erstellen der Smaps: https://platform.smapone.com/
        Swagger zur SmapOne API: https://platform.smapone.com/Backend/swagger/ui/index
        PowerShell Invoke-RestMethod: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod

    .NOTES
        Datum: 05.01.2024
        Autor: Diren Teke
        Version: 1.0
        Systemvoraussetzungen: 
        Das Skript kann ab PowerShell Version 5.1.X betrieben werden, bei Versionen unterhalb dieser ist die Funktionsweise eventuell nicht gewährleistet.
            ->Mit $PSVersionTable.Version kann in der PowerShell Console die aktuelle Version eingesehen werden.
        
        Die vorinstallierte Version ab Windows 10 Systemen sollte 5.1.X sein.
#>


<#
--------------------------------   
Eingabe-Parameter 
--------------------------------
#>
    #Parameter für die Kommunikation mit der API setzen
        param(
            # Quelle Smap SmapID
                [string]$sourceSmapID = "Eingabe_sourceSmapID",

            # Quelle Smap DataSourceID
                [string]$sourceDataSourceID = "Eingabe_DataSourceID",

            # Ziel Smap SmapID
                [string]$destinationSmapID = "Eingabe_SmapID",

            # Ziel Smap DataSourceID 
                [string]$destinationDataSourceID = "Eingabe_DataSourceID",
            
            # Access-Token des Creator SmapAccounts
                [string]$AccessToken = "Eingabe_AccessToken"
            )

<#
--------------------------------   
Headers-Definition
--------------------------------
#>
    # Angaben zum Header als Array
        $headers = @{
            "Content-Type" = "application/json" 
            "Accept" = "application/json"
            'Authorization' = "Basic $AccessToken"
        }


<#
--------------------------------   
Auslesen-Letzte-Smap-Version
--------------------------------
#>
    # URL- REST-API-Informationen Informationen einer Smap abfragen.
        $apiInformation = "https://platform.smapone.com/Backend/intern/DataSource/$($destinationDataSourceID)?accesstoken=$($AccessToken)"

    # Holen der Informationen des Smaps.
        $SmapInformation = Invoke-RestMethod -Uri $apiInformation -Method Get -Headers $headers

    # Letzte Version extrahieren.
        $SmapVersion = $SmapInformation.latestVersion

    # Ausgabe letzte Version.
        Write-Output "Letzte Version $SmapVersion"

<#
--------------------------------   
Auslesen und Setzen der URL's der REST-API's
--------------------------------
#>
    # URL- Quelle-REST-API-Endpunkt für den Abruf der Kundendaten und Kundenwünsche.
        $sourceSmapAPI = "https://platform.smapone.com/Backend/intern/Smaps/$($sourceSmapID)/Data.Json?markAsExported=false&accesstoken=$($AccessToken)"

    # Ausgabe API-URL der Smap-Quelle
        Write-Output "URL Endpunkt Quell-Adresse: $sourceSmapAPI"

    # URL- Ziel-REST-API-Endpunkt zum weiterleiten der abgefragen Kundendaten und Kundenwünsche.
        $apiEndpunkt = "https://platform.smapone.com/Backend/intern/DataSource/$($destinationDataSourceID)/Versions/$($SmapVersion)/Definition/Values?accesstoken=$($AccessToken)"

    # Ausgabe des Ziel-API-URL's welches die aktuelle Version des Smaps beinhalten muss.
        Write-Output "URL Endpunkt Ziel-Adresse: $apiEndpunkt"

    # URL- REST-API-Endpunkt-Update für das Aktualisieren des Smaps.
        $apiEndpunktUpdate = "https://platform.smapone.com/Backend/intern/Smaps/$($destinationSmapID)/Versions/Current/DataSources/Update?updateEditVersion=true&accesstoken=$($AccessToken)"

    # Ausgabe API-URL für Smap-Update.
        Write-Output "URL Endpunkt Ziel-Adresse_Update: $apiEndpunktUpdate"

<#
--------------------------------   
Daten aus der Smap-Quelle auslesen, filtern, fefinieren, sortieren, redundanzen ausschliessen und umwandeln in Json
--------------------------------
#>
    # Abrufen der Kundendaten und Kundenwünsche aus der Smap-Quelle 
        $customerData = Invoke-RestMethod -Uri $sourceSmapAPI -Method Get -Headers $headers

    # Ausgabe der Rohdaten die aus der Smap-Quelle ausgelesen wurden und umwandeln in Json.
        Write-Output "Rohdaten $($customerData | ConvertTo-Json)"

    # Filtern der relevanten Daten aus den Rohdaten und die Kundenwünsche mit Ja oder Nein definieren. 
        $filteredData = $customerData | ForEach-Object {
            $multiSelect1 = $_.data.MultiSelect1 -split ' '
            $multiSelect2 = $_.data.MultiSelect2 -split ' '
            $multiSelect3 = $_.data.MultiSelect3 -split ' '
            $multiSelect4 = $_.data.MultiSelect4 -split ' '
            $Select1 = $_.data.Select1 -split ' '
            [PSCustomObject]@{
                'Auftragsnummer' = $_.data.DataRecordSelect.Auftragsnummer
                'Name' = $_.data.DataRecordSelect.Name
                'Vorname' = $_.data.DataRecordSelect.Vorname
                'Marke' = $_.data.DataRecordSelect.Marke
                'Modell' = $_.data.DataRecordSelect.Modell
                'Adresse' = $_.data.DataRecordSelect.Adresse
                'Kennzeichen' = $_.data.DataRecordSelect.Kennzeichen
                #SmapOne Diverse Fragen
                    'Tanken' = if ('Tanken' -in $multiSelect1) { 'Ja' } else { 'Nein' }
                    'Klimaservice' = if ('Klimaservice' -in $multiSelect1) { 'Ja' } else { 'Nein' } 
                #SmapOne Vignette
                    'Entfernen' = if ('Entfernen' -in $multiSelect2) { 'Ja' } else { 'Nein' } 
                    'NeueKleben' = if ('NeueKleben' -in $multiSelect2) { 'Ja' } else { 'Nein' } 
                    'NeuElektronisch' = if ('NeuElektronisch' -in $multiSelect2) { 'Ja' } else { 'Nein' } 
                #SmapOne Wischerblätter
                    'Vorne' = if ('Vorne' -in $multiSelect3) { 'Ja' } else { 'Nein' }
                    'Hinten' = if ('Hinten' -in $multiSelect3) { 'Ja' } else { 'Nein' }
                #SmapOne Reinigung
                    'Scheibenreinigung' = if ('Scheibenrein' -in $multiSelect4) { 'Ja' } else { 'Nein' } 
                    'Frontscheibereinigen' = if ('Frontscheibereinigen' -in $multiSelect4) { 'Ja' } else { 'Nein' }
                    'Innenreinigung' = if ('Innenreinigung' -in $multiSelect4) { 'Ja' } else { 'Nein' }
                    'Aussenreinigung' = if ('Aussenreinigung' -in $multiSelect4) { 'Ja' } else { 'Nein' }
                    'Kundebefragt' = if ('ja' -in $Select1) { 'Ja' } else { 'Nein' } 
            }
        

    #Redundanzen ausschliessen -> Die gefilterten Daten anhand der Auftragsnummer sortieren und nur das zuletzt Empfangene weiter verwenden.
        }  | Group-Object Auftragsnummer | ForEach-Object { 
            $_.Group | Sort-Object sendDate -Descending | Select-Object -Last 1 }

    # Konvertierung der fertigen Kundendaten mit den Wünschen zu Jsonumwandeln. Array wird mit "," "@" zwingend definiert.
        $jsonCustomerData =,@($filteredData) | ConvertTo-Json


<#
--------------------------------   
Daten an Ziel Smap senden und Smap aktualisieren (Update verteilen)
--------------------------------
#>
    # Ausgabe Rest-API Kommunikation startet (vor Invoke-RestMethoden).
        Write-Host "Rest-API Kommunikation startet"
                                                                                
    # Ausgabe des zu übermittelnden JSON-Bodys. Muss ein Array sein!
        Write-Output "Json-Body (Array) aus Jsondata an API: $jsonCustomerData"

    # Übermitteln des Json-Body (Array) mit den Daten an Ziel Smap, unbedingt Contenttyp mit Unicode utf-8.
        $datenAnAPI = Invoke-RestMethod -Uri $apiEndpunkt -Method Put -Body $jsonCustomerData -Headers $headers -ContentType "application/json; charset=utf-8"

    # Ausgabe nach Übermittlung an die API.
        Write-Output "Nach Übermittlung Daten an Ziel Smap: $datenAnAPI"

    # Aktualisiern der Ziel Smap.
        $updateSmap = Invoke-RestMethod -Uri $apiEndpunktUpdate -Method Put -Headers $headers

    # Ausgabe nach Aktualisierung der Ziel Smap.
        "Nach Update von Ziel Smap: $updateSmap"
    
    # Ausgabe Rest API Kommunikation beendet (nach Invoke-RestMethoden).
        Write-Host "Rest-API Kommunikation beendet"
 

Bearbeitet von Diren Teke
  • Danke 6
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde Dich an, um einen Kommentar zu hinterlassen

Du kannst nach der Anmeldung einen Kommentar hinterlassen



Jetzt anmelden
×
×
  • Neu erstellen...