As of r380, Functions is generally available.
Read more in the Community thread.
Verwenden Sie „Functions“ zum Schreiben in Tabellen
Empfohlene Vorgehensweise
Erstellen Sie Funktionen, wenn mehrere Apps oder App-Schritte in dieselbe Tabelle schreiben und wenn Sie Folgendes durchsetzen müssen:
- Pflichtfelder
- Gültige Werte (z. B. muss der Status aus einer genehmigten Liste stammen)
- Konsistente Metadaten (Erstellt von, Erstellt am)
Warum dies wichtig ist
Wenn Citizen-Developer Tabelleneinträge direkt in Triggern erstellen, kann es vorkommen, dass sie:
- die Namenskonventionen für IDs nicht einhalten
- erforderliche Felder vergessen
- Feldwerte falsch schreiben („in progress“ statt „in-progress“)
- Metadaten inkonsistent ausfüllen
Eine Funktion sorgt für die Einhaltung des gleichen Schemas und verhindert diese Fehler.
Beispiel
Anstatt jeden App-Entwickler „Beispiel“-Datensätze mit inkonsistenten Feldern und Inhalten erstellen zu lassen, erstellen Sie eine Funktion „Beispiel erstellen“, die:
- konsistente Eingaben erfordert (Auftrags-ID, Probentyp, Menge, Zeitstempel, Benutzer, App-Name)
- überprüft, ob der Probentyp aus einer genehmigten Liste stammt
Funktion:CreateSampleEingaben: - job_id (Text) - sample_type (Text) - quantity (Zahl) - app name (Text) - user requesting (Benutzer)
Logik: 1. Überprüfen, ob „sample_type“ in [„A“, „B“, „C“] enthalten ist. 2. Falls ungültig, Fehlermeldung ausgeben. 3. Erstellt einen Tabelleneintrag mit: - ID: innerhalb der Funktion generiert - Job-ID: Eingabe - Probentyp: Eingabe - Menge: Eingabe - Chargennummer: Eingabe (oder leer, falls nicht angegeben) - Erstellt von: Eingabe4. Gibt eine Erfolgsmeldung zurück
Ausgaben: - Status (Text): „success“ oder „error“ - Meldung (Text): Fehlerbeschreibung bei Fehlschlag
Wenn Sie einen Tabelleneintrag für eine Probe erstellen müssen, übergeben Sie die Eingaben an eine Funktion, und die Funktion erledigt den Rest.
Zu vermeidendes Muster
Erstellen Sie nicht für jeden Tabellenschreibvorgang eine eigene Funktion, auch nicht für einfache Vorgänge.
Warum dies zu Problemen führt
- Es entsteht ein Funktionswust (Hunderte von Einmal-Funktionen)
- Erhöht die Komplexität ohne Nutzen bei einfachen Schreibvorgängen
- Erschwert die Fehlersuche (mehr Stellen, die überprüft werden müssen)
Wann sollten Funktionen für Tabellenschreibvorgänge vermieden werden?
- Aktualisierung eines bestehenden Tabelleneintrags (z. B. Aktualisierung des Status oder Verringerung der Menge)
- Schreibvorgänge einer einzelnen App in eine Tabelle
- Keine Governance oder Validierung erforderlich
Verwenden Sie Funktionen für sich wiederholende, mehrstufige Logik
Empfohlener Ansatz
Wenn dieselbe Abfolge von Trigger-Aktionen in vielen Schritten über mehrere Apps hinweg auftritt, extrahieren Sie diese in eine Funktion.
Beispiel: ZPL-Code zum Drucken eines Etiketts abrufen
Funktion:ZPL-Code abrufenEingaben: – Material-ID (Text)
Variablen: – ZPL-Code-Variable (Text)
Ausgaben: - ZPL-Code (Text)
Logik: 1. Daten aktualisieren: Konfiguration „ZPL-Code-Variable“ – Setzen auf – [Ausdruck für den ZPL-Code einschließlich @Inputs.Material-ID] 2. Zurückgeben: „ZPL-Code“ Datenquelle „ZPL-Code-Variable“
Zu vermeidendes Muster
Erstellen Sie keine Funktionen für Logik, die insgesamt nur 1–2 Mal in allen Apps vorkommt.
Warum dies zu Problemen führt
- Der Aufwand für die Verwaltung der Funktion übersteigt den Nutzen
- App-Entwickler müssen sich für einen seltenen Fall mit der Funktionsschnittstelle vertraut machen
- Erschwert die Fehlersuche, da zwischen Funktionen und Apps gewechselt werden muss
Betten Sie Connector-Funktionen in Funktionen ein
Empfohlener Ansatz
Wenn Sie eine Connector-Funktion verwenden, übergeben Sie die Eingaben der Connector-Funktion an eine Funktion, die die Connector-Funktion aufruft. Die Funktion kann dann Zeitüberschreitungsversuche und die Fehlerbehandlung einfacher und zentralisiert handhaben, wodurch Sie die App-Logik in Ihrer gesamten Lösung vereinfachen können.
Das Einbetten von Connector-Funktionen in Funktionen kann zudem den Aufwand einer möglichen zukünftigen ERP-Migration minimieren, da dadurch die Anzahl der Änderungen reduziert wird, die an einzelnen Apps vorgenommen werden müssen.
Beispiel
Funktion: „Update ProcessOrder“Eingaben: - Auftrags-ID (Text) - Status (Text)
Ausgaben: - Fehlermeldung (Text)
Variablen: – HTTP-Code (Ganzzahl) – Zeitüberschreitungs-Wiederholversuche (Ganzzahl) – Fehlermeldung (Text)
Logik: 1. Connector-Funktion ausführen 2. Wenn der HTTP-Code erfolgreich ist, die Funktion beenden 3. Wenn der HTTP-Code ein Timeout ist und „Timeout-Wiederholversuche“ kleiner oder gleich einem festgelegten Wert ist, „Timeout-Wiederholversuche“ erhöhen und zu „Connector-Funktion ausführen“ zurückkehren4. Wenn der HTTP-Code ein Code ist, der durch die Funktionslogik nicht aufgelöst werden kann, eine hilfreiche Meldung in der Ausgabe „Fehlermeldung“ zurückgeben
Übergeben Sie Datensatz-IDs, nicht einzelne Tabellenfeldwerte
Empfohlene Vorgehensweise
Wenn eine Funktion Daten aus einem Tabellendatensatz benötigt, übergeben Sie die Datensatz-ID und laden Sie den Datensatz innerhalb der Funktion.
Beispiel
Das folgende Beispiel ist zwar logisch korrekt (wobei „Auftrags-ID“ die ID aus der Tabelle „Aufträge“ ist und die anderen Felder Spalten in dieser Tabelle sind), es gibt jedoch eine einfachere Konfiguration.
Funktion:Bestellung verarbeitenEingaben: - Bestell-ID (Text) - Kundenname (Text) - Produkt-ID (Text) - Menge (Zahl) - Fälligkeitsdatum (Datum/Uhrzeit) - Priorität (Text)
Logik: 1. [Logik anhand der Eingabefelder ausführen]
Das folgende Beispiel verwendet nur wenige Eingaben, um dasselbe Ergebnis zu erzielen:
Funktion:Bestellung verarbeitenEingaben: - Bestell-ID (Text)
Logik: 1. Tabelleneintrag abrufen: Tabelle „Orders“, wobei ID = Eingabe „Auftrags-ID“ 2. [Logik anhand der Felder des Tabelleneintrags ausführen]
Warum das zweite Beispiel der bessere Ansatz ist:
- Weniger Eingaben (1 statt 6+)
- Die Funktion lässt sich leicht anpassen, wenn sich das Tabellenschema ändert
- Übersichtlichere Funktionsaufrufe in Apps
- Verringert das Risiko, das falsche Feld der falschen Eingabe zuzuordnen
Funktionen und Eingaben einheitlich benennen und beschreiben
Empfohlene Vorgehensweise
Verwenden Sie eine einheitliche Namenskonvention für alle Funktionen in Ihrem Arbeitsbereich.
Funktionsnamen
- Verwenden Sie Verb + Substantiv: „Beispiel erstellen“, „Auftragsstatus aktualisieren“, „Seriennummer validieren“
- Verwenden Sie keine reinen Substantive: „Beispiel“, „Auftrag“, „Seriennummer“
Funktionsbeschreibung
- Verfassen Sie eine intuitive Beschreibung der Funktionsweise. Schreiben Sie beispielsweise für eine Funktion namens „Create Defect“ eine Beschreibung wie „Erstellt einen neuen Datensatz in der Tabelle ‚Defects‘ mit dem Status ‚OPEN‘“.
Bezeichnungen für Eingaben
- Verwenden Sie eine einheitliche Terminologie: immer „Auftrags-ID“ (nicht manchmal „Auftrags-ID“ oder „Work_id“)
- Passen Sie die Feldnamen der Tabellen nach Möglichkeit an
Namen von Logikblöcken
- Formulieren Sie eindeutig: „Auftragsdatensatz abrufen“ statt „Tabellendatensatz abrufen“
- Helfen Sie zukünftigen Lesern: „Probentyp validieren“ statt „Wert prüfen“
Warum das wichtig ist
- App-Entwickler verstehen den Zweck der Funktionen schnell
- Reduziert die kognitive Belastung bei der Verwendung mehrerer Funktionen
- Erleichtert die „Wo-wird-verwendet“-Analyse
- Verbessert die Dokumentation und Schulung
Nahtlose Handhabung von Eingabevalidierung und Benutzerfehlermeldungen
Empfohlene Vorgehensweise
Kennzeichnen Sie Funktionseingaben stets als Pflichtfelder und wenden Sie gegebenenfalls Regeln zur Eingabevalidierung an. Führen Sie keine Validierung von Eingaben innerhalb von Funktionen durch.
Warum dies wichtig ist
- App-Benutzer erhalten bei der Eingabe von Werten klares Feedback
- Vereinfacht die Funktionslogik, da die App die Eingabevalidierung übernimmt und die Funktion mit bekanntermaßen gültigen Eingaben ausgeführt wird
- Verhindert fehlerhafte Daten durch ungültige Eingaben
Zu vermeidendes Muster
Validieren Sie Eingaben nicht innerhalb der Funktion.
Warum dies zu Problemen führt
- Dies ist redundant, da im App-Editor bereits Funktionen zur Eingabevalidierung verfügbar sind
- Zusätzliche unnötige Verzögerung durch die erneute Überprüfung der Eingaben auf Gültigkeit innerhalb der Funktion
App builders can bypass the system by passing blank static values in function inputs. For functions where validated data is critical, it may be best practice to validate inputs in the function itself (in addition to marking required fields in the app).
Minimieren Sie Tabellenabfragen innerhalb von Schleifen
Wenn Ihre Funktion ein Array durchläuft, vermeiden Sie es, bei jeder Iteration Tabellen abzufragen. Führen Sie stattdessen vor der Schleife eine einmalige Abfrage durch und greifen Sie auf das Ergebnis zurück.
Verwenden Sie Funktionen für Logik, nicht für einfache Verweise
Erstellen Sie keine Funktionen, die lediglich einen einzelnen Tabelleneintrag abrufen – dafür sind „ record placeholders “ da. Reservieren Sie Funktionen für Logik, die Daten transformiert.
Begrenzen Sie die Ausgabegröße
Wenn Ihre Funktion große Objekte oder Arrays zurückgibt, sollten Sie in Erwägung ziehen, nur die Felder zurückzugeben, die die App benötigt, und nicht das gesamte Objekt-Array.
Weitere Ressourcen
{{snippet.Haben Sie gefunden, wonach Sie gesucht haben?}}

