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.
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.
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
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:
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:
| Einstellung | Mö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
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.
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.
Anschließend werden die App und die Einstellungen von Intune automatisch an alle ausgewählten Geräte verteilt.
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": "" }
]
}
]
}
]
}
]
}
]
}
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
| Key | Typ | Beschreibung |
|---|---|---|
flx_license | string | TheFlex-Lizenzschlüssel |
Klassische Startseiten (fioriURL_Configuration)
| Key | Typ | Beschreibung |
|---|---|---|
fioriURLName | string | Anzeigename (Pflichtfeld) |
fioriURL | string | URL (Pflichtfeld) |
fioriURLUsername | string | SAP-Benutzername – "/" erhält den lokalen Wert |
fioriURLPassword | string | SAP-Passwort – "/" erhält den lokalen Wert |
Menü-Startseiten
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
menuStartpagesEnabled | bool | false | Ordnerbasierte Menünavigation aktivieren. Hinweis: Wenn aktiviert, werden die klassischen Startseiten (fioriURL_Configuration) nicht mehr im Menü angezeigt. |
menuStartpageTitle | string | – | Anzeigename |
menuStartpageUrl | string | – | URL der Startseite |
menuStartpageFolder | string | "" | 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. |
Der Wert von menuStartpageFolder bestimmt, wo im Menü der Eintrag erscheint:
| Wert | Position 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
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
adminPassword | string | "" | Admin-Passwort für den Einstellungszugang |
requirePasswordLaunchpad | bool | false | Passwort beim Startseitenwechsel verlangen |
SslUntrustIgnore | bool | false | HTTPS-Verbindungen mit ungültigem Zertifikat erlauben |
flxBlockCopyPaste | bool | false | Kopieren und Einfügen aus Web-Inhalten sperren |
FlxCertChooser | bool | false | Zertifikatsauswahl-Dialog beim Login anzeigen |
FlxUseSmartcard | bool | false | NFC-Smartcard-Authentifizierung aktivieren |
NFCConfig | string | "" | Smartcard-Konfiguration (via QR importiert) |
Benutzeroberfläche
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
FLXShowStatusBar | bool | true | Android-Statusleiste anzeigen |
FLXShowNavigationBar | bool | true | Android-Navigationsleiste anzeigen |
FlxToolbarOverlap | bool | true | Toolbar überlagert Inhalte statt sie zu verschieben |
FlxShowCloseButton | bool | false | Schließen-Button in der Toolbar anzeigen |
FlxKeepScreenOn | bool | false | Bildschirm immer eingeschaltet lassen |
FlxConnectionStatus | bool | false | Verbindungsstatus-Anzeige einblenden |
ZoomAmount | string | "100" | Seitenzoom in Prozent |
flxSelectedLanguage | string | "" | App-Sprache: "" (System), "de_DE", "en_EN" |
Tastatur
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
FLXSoftInputModeResize | bool | true | Tastatur verschiebt UI-Elemente nach oben |
flxKeyboardPreferences | string | "default" | Tastaturverhalten: "default", "Active_on_tap", "deactivated" |
Gekoppeltes Gerät (Backhand-Scanner)
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
flxPairedDevice | string | "none" | "none", "PROGLOVE_MARK_DISPLAY_SDK", "NIMMSTA_HS50_SDK" |
flxPairedDevice_ScanMode | string | "default" | "default", "onlyBarcodes", "onlyQRCode" |
Cache & Cookies
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
ClearSessions | bool | true | Session-Daten beim App-Beenden löschen |
ClearCacheOnExit | bool | true | Datei-Cache beim App-Beenden löschen |
ClearCookieOnSwitchingLaunchpad | bool | true | Cookies beim Startseitenwechsel löschen |
ClearCacheOnSwitchingLaunchpad | bool | true | Datei-Cache beim Startseitenwechsel löschen |
PDF & Anzeige
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
FlxPdfViewerEnabled | bool | true | PDF-Links im eingebetteten Viewer öffnen |
FlxProgressIndicator | bool | true | Ladeindikator am Bildschirmrand anzeigen |
FlxDebugMode | bool | false | Erweitertes Debug-Logging aktivieren |
Logging
| Key | Typ | Standard | Beschreibung |
|---|---|---|---|
LogLevel | string | "ERROR" | "ERROR", "WARNING", "INFO", "DEBUG" |
Eigene Skripte (customScript_Configuration)
| Key | Typ | Beschreibung |
|---|---|---|
customScriptDescription | string | Anzeigename |
customScriptName | string | URL-Muster für das Skript (z.B. "https://mein-system.com*") |
customScriptCode | string | JavaScript-Code |
customScriptActive | bool | Aktivieren/deaktivieren |
Eigenes CSS (customCSSSet_Configuration)
| Key | Typ | Beschreibung |
|---|---|---|
customCSSDescription | string | Anzeigename |
customCSSName | string | URL-Muster |
customCSSCode | string | CSS-Code |
customCSSActive | bool | Aktivieren/deaktivieren |
Eigene Tastaturen (customKeyboardSet_Configuration)
| Key | Typ | Beschreibung |
|---|---|---|
inputType | string | Eingabetyp: "default", "text", "password", "number", "email", "tel", "textarea", "custom" |
cKeyboard | string | Tastatur-Layout als JSON-String |
customParameter | string | Optionaler Parameter für "custom" |
Scan-Konfiguration (scanConfig_Configuration)
| Key | Typ | Beschreibung |
|---|---|---|
scanConfigName | string | Anzeigename |
scanConfigLengthRule | string | Regeltyp: "FALLBACK", "EXACT", "AT_MOST", "AT_LEAST", "LENGTH_RANGE", "STARTS_WITH", "ENDS_WITH", "CONTAINS" |
scanConfigMatchLength | integer | Ziellänge (für längenbasierte Regeln) |
scanConfigMatchLengthMax | integer | Maximallänge (nur für LENGTH_RANGE) |
scanConfigMatchText | string | Textmuster (für STARTS_WITH, ENDS_WITH, CONTAINS) |
Scan-Aktionen (scanConfigActions – verschachteltes Bundle-Array):
| Key | Typ | Beschreibung |
|---|---|---|
scanConfigActionType | string | "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" |
scanConfigActionCount | integer | Numerischer Parameter (Zeichenanzahl, Position) |
scanConfigActionCount2 | integer | Zweiter numerischer Parameter (z.B. Länge bei EXTRACT) |
scanConfigActionText | string | Textparameter (Präfix/Suffix, Suchwert, Füllzeichen) |
scanConfigActionText2 | string | Ersetzungswert (bei REPLACE) |




