Zum Hauptinhalt springen

Konfiguration von TheFlex mit Intune

Ein MDM (Mobile Device Managment System) ist eine Softwarelösung, die Unternehmen bei der Verwaltung und Sicherung mobiler Geräte wie Smartphones, Tablets und Laptops unterstützt. MDM-Systeme ermöglichen es Unternehmen, Geräte aus der Ferne zu überwachen, zu konfigurieren und zu steuern, unabhängig vom Standort oder dem Netzwerk, mit dem sie verbunden sind. MDM-Systeme sind besonders nützlich für Unternehmen mit einer großen Anzahl von Mitarbeitern, die über mobile Geräte auf Unternehmensressourcen zugreifen.

Der folgende Artikel beschreibt die Vorgehensweise zur Konfiguration der Android Version von TheFlex mit Microsoft Intune.

App-Configuration-Policy erstellen

Besuchen Sie die Microsoft Endpoint Manager-Website und melden Sie sich mit Ihren Anmeldeinformationen an. Navigieren Sie zu Apps und wählen Sie App-Konfigurationsrichtlinien aus.

Screenshot der Intune App Configuration Policy

Klicken Sie auf Neue Richtlinie erstellen und wählen Sie Managed Devices aus.

Dort kann als Name TheFlex, als Zielplatform Android Enterprise, ein entsprechender Profil Typ und letztendlich die App TheFlex ausgewählt werden.

Screenshot der Intune App Configuration Policy

Konfiguration der Einstellungen

Optional gibt es die Möglichkeit direkt die erforderlichen Berechtigungen für TheFlex freizuschalten. Folgende Berechtigungen sind für TheFlex notwendig:

  • WiFi
  • NFC
  • Bluetooth
  • Camera
  • GPS
  • Flashlight
  • Vibrate
  • Audio
  • Read Storage
  • Write Storage

Screenshot der Intune Android Permissions

Im nächsten Schritt müssen die TheFlex-spezifischen Einstellungen konfiguriert werden. Da die wichtigste und auch verpflichtende Einstellung die Startseiten sind, kann dies nicht über die Oberfläche von Intunes durchgeführt werden. Der Grund dafür ist, dass mehrere Startseiten konfiguriert werden können und diese Funktion von Intunes nicht unterstützt wird.

Aus diesem Grund müssen die Einstellungen als JSON-Daten eingegeben werden:

Screenshot der Intune Android JSON Einstellungen

Intune generiert automatisch Beispieldaten. Die Empfehlung ist diese in ein anderes Programm wie Notepad++ zu kopieren und dort zu bearbeiten.

Konfiguration normaler Einstellungen

Die meisten Einstellungen sind entweder als "true" oder eine Zahl vordefiniert. Diese können nach Belieben auf den entsprechenden Wert angepasst oder auf dem Standardwert belassen werden.

Wichtig: Für alle Text-Einstellungen schreibt Intune automatisch den Wert STRING_VALUE. Dies muss mindestens durch einen leeren String "" ersetzt werden. Es wird jedoch empfohlen diesen STRING_VALUE durch eine gültige Einstellung zu ersetzen:

EinstellungMögliche Werte (immer in "" eintragen)
Zusätzliche Displays"none", "PROGLOVE_MARK_DISPLAY_SDK", "NIMMSTA_HS50_SDK"
Tastaturverhalten"default", "deactivated", "Active_on_tap"
Sprache"de_DE", "en_EN"
Protokollierung"ERROR", "WARN", "INFO", "DEBUG"

Konfiguration der Lizenz

Unter dem Schlüssel flx_license kann als valueString der Lizenzcode eingetragen werden. Auch hier muss der Lizenzcode in Anführungsstriche gesetzt werden, da er sonst von Intune als nicht gültig erkannt wird.

Konfiguration der Startseiten

Es muss mindestens eine Startseite gepflegt sein, da die Konfiguration von TheFlex sonst als nicht gültig abgelehnt und zurückgesetzt wird. Dazu muss im Abschnitt fioriURL_Configuration mindestebns eine managedProperty hinzugefügt beziehungsweise konfiguriert werden:

  • fioriURLName: Name der Startseite (verpflichtend, darf nicht leer sein)
  • fioriURL: URL der Startseite (verpflichtend, darf nicht leer sein)
  • fioriURLUsername: Optionaler SAP User
  • fioriURLPassword: Optionales SAP Passwort
Empfehlung

Am Ende dieses Artikels ist eine gültige Konfiguration als JSON. Diese kann in Microsoft Intune reinkopiert werden. Es empfiehlt sich direkt einen gültigen Lizenzcode mit einzufügen.

Hinweis

In manchen Fällen kann es sinnvoll sein, dass alle Einstellungen per Intune auf die Geräte übertragen werden außer Username und Passwort.

Dies kann notwendig sein, wenn zwar alle Einstellungen zentral verwaltet werden sollen, die Nutzer jedoch trotzdem ihre persönlichen Zugangsdaten für bestimmte Startseiten abspeichern können sollen.

Um dies mit Intune zu ermöglichen, muss als fioriURLUsername und fioriURLPassword ein "/" (ein einfaches Slash) in Intune eingetragen werden. Falls das Gerät ein "/" empfängt, dann wird es die lokale Einstellung nicht überschreiben.

Auswahl von Benutzergruppen

Im nächsten Schritt muss konfiguriert werden für welche Geräte- oder Benutzergruppen diese Konfigurationsrichtlinie gelten soll.

Screenshot der Intune user Groups

Anschließend werden die App und die Einstellungen von Intune automatisch an alle ausgewählten Geräte verteilt.

Achtung

Falls TheFlex bereits installiert und konfiguriert war, zum Beispiel zum lokalen Testen, dann müssen die Einstellungen zurückgesetzt werden. Dies kann entweder in den TheFlex- oder den allgemeinen Android-Einstellungen durchgeführt werden.

Beispiel-JSON für eine Intune-Konfiguration

Das folgende JSON enthält alle verfügbaren TheFlex-Einstellungen. Es kann in den Intune-JSON-Editor kopiert und nach Bedarf angepasst werden. Nicht benötigte Keys können einfach entfernt werden.

{
"kind": "androidenterprise#managedConfiguration",
"productId": "app:de.flexus.apps.theflex",
"managedProperty": [

{ "key": "flx_license", "valueString": "" },

{
"key": "fioriURL_Configuration",
"valueBundleArray": [
{
"managedProperty": [
{ "key": "fioriURLName", "valueString": "Meine App" },
{ "key": "fioriURL", "valueString": "https://mein-sap-system.example.com" },
{ "key": "fioriURLUsername", "valueString": "" },
{ "key": "fioriURLPassword", "valueString": "" }
]
}
]
},

{ "key": "menuStartpagesEnabled", "valueBool": true },
{
"key": "menuStartpage_Configuration",
"valueBundleArray": [
{
"managedProperty": [
{ "key": "menuStartpageTitle", "valueString": "Kommissionierung" },
{ "key": "menuStartpageUrl", "valueString": "https://mein-sap-system.example.com/picking" },
{ "key": "menuStartpageFolder", "valueString": "Lager/Zone A" }
]
},
{
"managedProperty": [
{ "key": "menuStartpageTitle", "valueString": "Wareneingang" },
{ "key": "menuStartpageUrl", "valueString": "https://mein-sap-system.example.com/wareneingang" },
{ "key": "menuStartpageFolder", "valueString": "Lager/Zone A" }
]
},
{
"managedProperty": [
{ "key": "menuStartpageTitle", "valueString": "Inventur" },
{ "key": "menuStartpageUrl", "valueString": "https://mein-sap-system.example.com/inventur" },
{ "key": "menuStartpageFolder", "valueString": "Lager" }
]
},
{
"managedProperty": [
{ "key": "menuStartpageTitle", "valueString": "Dashboard" },
{ "key": "menuStartpageUrl", "valueString": "https://mein-sap-system.example.com/dashboard" },
{ "key": "menuStartpageFolder", "valueString": "" }
]
}
]
},

{ "key": "adminPassword", "valueString": "" },
{ "key": "requirePasswordLaunchpad", "valueBool": false },
{ "key": "SslUntrustIgnore", "valueBool": false },
{ "key": "flxBlockCopyPaste", "valueBool": false },
{ "key": "FlxCertChooser", "valueBool": false },
{ "key": "FlxUseSmartcard", "valueBool": false },
{ "key": "NFCConfig", "valueString": "" },

{ "key": "FlxPdfViewerEnabled", "valueBool": true },
{ "key": "FlxProgressIndicator", "valueBool": true },
{ "key": "FlxDebugMode", "valueBool": false },

{ "key": "FLXShowStatusBar", "valueBool": true },
{ "key": "FLXShowNavigationBar", "valueBool": true },
{ "key": "FlxToolbarOverlap", "valueBool": true },
{ "key": "FlxShowCloseButton", "valueBool": false },
{ "key": "FlxKeepScreenOn", "valueBool": false },
{ "key": "FlxConnectionStatus", "valueBool": false },
{ "key": "ZoomAmount", "valueInteger": 100 },
{ "key": "flxSelectedLanguage", "valueString": "" },

{ "key": "FLXSoftInputModeResize", "valueBool": true },
{ "key": "flxKeyboardPreferences", "valueString": "default" },

{ "key": "flxPairedDevice", "valueString": "none" },
{ "key": "flxPairedDevice_ScanMode", "valueString": "default" },

{ "key": "ClearSessions", "valueBool": true },
{ "key": "ClearCacheOnExit", "valueBool": true },
{ "key": "ClearCookieOnSwitchingLaunchpad","valueBool": true },
{ "key": "ClearCacheOnSwitchingLaunchpad", "valueBool": true },

{ "key": "LogLevel", "valueString": "ERROR" },

{
"key": "customScript_Configuration",
"valueBundleArray": [
{
"managedProperty": [
{ "key": "customScriptDescription", "valueString": "Mein Skript" },
{ "key": "customScriptName", "valueString": "https://mein-sap-system.example.com*" },
{ "key": "customScriptCode", "valueString": "console.log('TheFlex bereit');" },
{ "key": "customScriptActive", "valueBool": true }
]
}
]
},

{
"key": "customCSSSet_Configuration",
"valueBundleArray": [
{
"managedProperty": [
{ "key": "customCSSDescription", "valueString": "Mein CSS" },
{ "key": "customCSSName", "valueString": "https://mein-sap-system.example.com*" },
{ "key": "customCSSCode", "valueString": "body { font-size: 16px; }" },
{ "key": "customCSSActive", "valueBool": true }
]
}
]
},

{
"key": "customKeyboardSet_Configuration",
"valueBundleArray": [
{
"managedProperty": [
{ "key": "inputType", "valueString": "default" },
{ "key": "cKeyboard", "valueString": "{ 'rows': [{ 'buttons': [{ 'text': 'ENTER', 'function': 'ENTER', 'color': '#ffff33', 'weight': 1 }] }] }" },
{ "key": "customParameter", "valueString": "" }
]
}
]
},

{
"key": "scanConfig_Configuration",
"valueBundleArray": [
{
"managedProperty": [
{ "key": "scanConfigName", "valueString": "EAN-13" },
{ "key": "scanConfigLengthRule", "valueString": "EXACT" },
{ "key": "scanConfigMatchLength", "valueInteger": 13 },
{ "key": "scanConfigMatchText", "valueString": "" },
{
"key": "scanConfigActions",
"valueBundleArray": [
{
"managedProperty": [
{ "key": "scanConfigActionType", "valueString": "CUT_FIRST" },
{ "key": "scanConfigActionCount", "valueInteger": 1 },
{ "key": "scanConfigActionText", "valueString": "" }
]
}
]
}
]
}
]
}

]
}
Hinweis

JSON unterstützt keine Kommentare. Die Struktur oben dient zur Übersichtlichkeit in dieser Dokumentation. Vor dem Einfügen in Intune nicht benötigte Einträge einfach entfernen.

Erklärung aller Intune JSON Keys

Lizenz

KeyTypBeschreibung
flx_licensestringTheFlex-Lizenzschlüssel

Klassische Startseiten (fioriURL_Configuration)

KeyTypBeschreibung
fioriURLNamestringAnzeigename (Pflichtfeld)
fioriURLstringURL (Pflichtfeld)
fioriURLUsernamestringSAP-Benutzername – "/" erhält den lokalen Wert
fioriURLPasswordstringSAP-Passwort – "/" erhält den lokalen Wert

Menü-Startseiten

KeyTypStandardBeschreibung
menuStartpagesEnabledboolfalseOrdnerbasierte Menünavigation aktivieren. Hinweis: Wenn aktiviert, werden die klassischen Startseiten (fioriURL_Configuration) nicht mehr im Menü angezeigt.
menuStartpageTitlestringAnzeigename
menuStartpageUrlstringURL der Startseite
menuStartpageFolderstring""Ordnerpfad für diesen Eintrag. Mit "/" als Trennzeichen für Unterordner, z.B. "Lager/Zone A". Alle Einträge mit gleichem Pfad erscheinen im selben Ordner. Leer ("") = Root-Ebene, kein Ordner.
Beispiele für Ordnerpfade

Der Wert von menuStartpageFolder bestimmt, wo im Menü der Eintrag erscheint:

WertPosition im Menü
""Root-Ebene – direkt im Menü, kein Ordner
"Lager"Im Ordner Lager
"Lager/Zone A"Im Unterordner Zone A innerhalb von Lager

Das JSON-Beispiel oben erzeugt folgende Menüstruktur:

📁 Lager
📁 Zone A
📄 Kommissionierung
📄 Wareneingang
📄 Inventur
📄 Dashboard

Einträge mit identischem Pfad werden automatisch im selben Ordner gruppiert. Ordner werden implizit angelegt – sie müssen nicht separat definiert werden.

Sicherheit

KeyTypStandardBeschreibung
adminPasswordstring""Admin-Passwort für den Einstellungszugang
requirePasswordLaunchpadboolfalsePasswort beim Startseitenwechsel verlangen
SslUntrustIgnoreboolfalseHTTPS-Verbindungen mit ungültigem Zertifikat erlauben
flxBlockCopyPasteboolfalseKopieren und Einfügen aus Web-Inhalten sperren
FlxCertChooserboolfalseZertifikatsauswahl-Dialog beim Login anzeigen
FlxUseSmartcardboolfalseNFC-Smartcard-Authentifizierung aktivieren
NFCConfigstring""Smartcard-Konfiguration (via QR importiert)

Benutzeroberfläche

KeyTypStandardBeschreibung
FLXShowStatusBarbooltrueAndroid-Statusleiste anzeigen
FLXShowNavigationBarbooltrueAndroid-Navigationsleiste anzeigen
FlxToolbarOverlapbooltrueToolbar überlagert Inhalte statt sie zu verschieben
FlxShowCloseButtonboolfalseSchließen-Button in der Toolbar anzeigen
FlxKeepScreenOnboolfalseBildschirm immer eingeschaltet lassen
FlxConnectionStatusboolfalseVerbindungsstatus-Anzeige einblenden
ZoomAmountstring"100"Seitenzoom in Prozent
flxSelectedLanguagestring""App-Sprache: "" (System), "de_DE", "en_EN"

Tastatur

KeyTypStandardBeschreibung
FLXSoftInputModeResizebooltrueTastatur verschiebt UI-Elemente nach oben
flxKeyboardPreferencesstring"default"Tastaturverhalten: "default", "Active_on_tap", "deactivated"

Gekoppeltes Gerät (Backhand-Scanner)

KeyTypStandardBeschreibung
flxPairedDevicestring"none""none", "PROGLOVE_MARK_DISPLAY_SDK", "NIMMSTA_HS50_SDK"
flxPairedDevice_ScanModestring"default""default", "onlyBarcodes", "onlyQRCode"

Cache & Cookies

KeyTypStandardBeschreibung
ClearSessionsbooltrueSession-Daten beim App-Beenden löschen
ClearCacheOnExitbooltrueDatei-Cache beim App-Beenden löschen
ClearCookieOnSwitchingLaunchpadbooltrueCookies beim Startseitenwechsel löschen
ClearCacheOnSwitchingLaunchpadbooltrueDatei-Cache beim Startseitenwechsel löschen

PDF & Anzeige

KeyTypStandardBeschreibung
FlxPdfViewerEnabledbooltruePDF-Links im eingebetteten Viewer öffnen
FlxProgressIndicatorbooltrueLadeindikator am Bildschirmrand anzeigen
FlxDebugModeboolfalseErweitertes Debug-Logging aktivieren

Logging

KeyTypStandardBeschreibung
LogLevelstring"ERROR""ERROR", "WARNING", "INFO", "DEBUG"

Eigene Skripte (customScript_Configuration)

KeyTypBeschreibung
customScriptDescriptionstringAnzeigename
customScriptNamestringURL-Muster für das Skript (z.B. "https://mein-system.com*")
customScriptCodestringJavaScript-Code
customScriptActiveboolAktivieren/deaktivieren

Eigenes CSS (customCSSSet_Configuration)

KeyTypBeschreibung
customCSSDescriptionstringAnzeigename
customCSSNamestringURL-Muster
customCSSCodestringCSS-Code
customCSSActiveboolAktivieren/deaktivieren

Eigene Tastaturen (customKeyboardSet_Configuration)

KeyTypBeschreibung
inputTypestringEingabetyp: "default", "text", "password", "number", "email", "tel", "textarea", "custom"
cKeyboardstringTastatur-Layout als JSON-String
customParameterstringOptionaler Parameter für "custom"

Scan-Konfiguration (scanConfig_Configuration)

KeyTypBeschreibung
scanConfigNamestringAnzeigename
scanConfigLengthRulestringRegeltyp: "FALLBACK", "EXACT", "AT_MOST", "AT_LEAST", "LENGTH_RANGE", "STARTS_WITH", "ENDS_WITH", "CONTAINS"
scanConfigMatchLengthintegerZiellänge (für längenbasierte Regeln)
scanConfigMatchLengthMaxintegerMaximallänge (nur für LENGTH_RANGE)
scanConfigMatchTextstringTextmuster (für STARTS_WITH, ENDS_WITH, CONTAINS)

Scan-Aktionen (scanConfigActions – verschachteltes Bundle-Array):

KeyTypBeschreibung
scanConfigActionTypestring"CUT_FIRST", "CUT_LAST", "TAKE_FIRST", "TAKE_LAST", "PREFIX", "SUFFIX", "INSERT_AT", "EXTRACT", "REPLACE", "REMOVE_LEADING_ZEROS", "REMOVE_TRAILING_ZEROS", "PAD_LEFT", "PAD_RIGHT", "UPPERCASE", "LOWERCASE"
scanConfigActionCountintegerNumerischer Parameter (Zeichenanzahl, Position)
scanConfigActionCount2integerZweiter numerischer Parameter (z.B. Länge bei EXTRACT)
scanConfigActionTextstringTextparameter (Präfix/Suffix, Suchwert, Füllzeichen)
scanConfigActionText2stringErsetzungswert (bei REPLACE)