Direkt zum Hauptinhalt

Einer Schaltfläche eine Aktion zuweisen

Ziel​

Einer Schaltfläche in der Befehlsleiste eines Formulars oder einer Ansicht etwas zu tun geben, wenn sie gedrückt wird.

Voraussetzungen​

  • Ein Formular oder eine Ansicht, das bzw. die Sie in seinem Designer bearbeiten, mit mindestens einer Aktion in der Leiste Aktionen.

Schritte​

  1. Öffnen Sie das Formular im Formular-Designer oder die Ansicht im Ansichts-Designer.

  2. Wählen Sie Ihre Schaltfläche in der Leiste Aktionen aus.

  3. Wählen Sie unter Beim Drücken, was sie tut:

    AuswahlWas sie brauchtWas passiert
    Ansicht öffneneine Tabelle (leer bedeutet diese Tabelle) und eine ihrer Ansichtendie Liste öffnet sich mit dieser Ansicht
    Neuer Datensatzeine Tabelle (leer bedeutet diese Tabelle)ein leeres Datensatzformular öffnet sich
    Dashboard öffnenein Dashboarddas Dashboard öffnet sich
    Bildschirm öffnenein gezeichneter Bildschirmder Bildschirm öffnet sich
    Bericht ausführenein Berichtder Bericht öffnet sich als eigener Bildschirm – eingegrenzt auf den geöffneten Datensatz, falls es einen gibt
    Webadresse öffneneine http://- oder https://-Adresse, die Felder des Datensatzes nennen darfsie öffnet sich in einem neuen Tab
    Skript ausführenhier nichts – siehe untenIhr BS Lang-Skript wird ausgeführt
  4. Wählen Sie das Ziel aus der Liste. Jedes dieser Felder öffnet eine durchsuchbare Liste dessen, was Ihre Umgebung tatsächlich hat, mit dem Anzeigenamen in der ersten Zeile und dem logischen Namen darunter. Tippen Sie zum Filtern – beide Zeilen werden berücksichtigt, sodass par_inv „Invoices“ findet und die Eingabe inv ebenfalls.

  5. Speichern Sie das Formular bzw. die Ansicht.

Lassen Sie die Tabelle leer, wann immer Sie „diese“ meinen. Ein Befehl, der keine Tabelle nennt, wirkt auf die Tabelle, auf der er platziert ist; dieselbe Schaltfläche lässt sich also auf ein anderes Formular kopieren, ohne neu ausgerichtet zu werden. Das bedeutet der Text Diese Tabelle im leeren Feld, und das ✕ neben einer gewählten Tabelle stellt diesen Zustand wieder her.

Die Ansichtsliste gehört zur Tabelle darüber. Wählen Sie zuerst die Tabelle; angeboten werden die Listenansichten dieser Tabelle, also die, die eine Listenseite öffnen kann. Ändern Sie die Tabelle, wird eine bereits gewählte Ansicht entfernt, weil sich eine Ansicht der einen Tabelle nicht auf einer anderen öffnen lässt – besser neu wählen, als eine Schaltfläche zu speichern, die fehlschlägt, sobald jemand sie drückt.

Ein Bericht kennt seine eigene Tabelle, daneben gibt es also keine Tabelle zu wählen.

Eine Webadresse kann den Datensatz mitnehmen​

Setzen Sie den logischen Namen eines Felds in geschweifte Klammern, und die Adresse verwendet den Wert dieses Felds aus dem geöffneten Datensatz:

https://teams.microsoft.com/l/call/0/0?users=4:{pw_phone_number}
https://www.openstreetmap.org/search?query={address1_city}

Der Wert wird für Sie URL-codiert, sodass eine Telefonnummer wie +44 20 7946 0000 unversehrt ankommt. Die Adresse muss trotzdem mit http:// oder https:// beginnen, ausgeschrieben: Ein Feld kann einen Teil einer Adresse ausfüllen, nie ihr Schema.

Ist das Feld leer, öffnet sich nichts, und die Person, die die Schaltfläche gedrückt hat, erfährt, um welches Feld es geht. In einer Liste gibt es keinen geöffneten Datensatz; eine Adresse mit einem Feld darin funktioniert also nur auf einem Formular.

Die ersten fünf führen den Benutzer woandershin – und lassen einen Weg zurück​

Ansicht öffnen, Neuer Datensatz, Dashboard öffnen, Bildschirm öffnen und Bericht ausführen sind Navigationen: Jede ersetzt den Bildschirm, auf dem die Schaltfläche gedrückt wurde, und die Adressleiste zeigt das an, sodass das Ergebnis aktualisiert, als Lesezeichen gespeichert oder an jemanden gesendet werden kann.

Deshalb trägt der Bildschirm, den ein Befehl öffnet, eine Schaltfläche ←, die dorthin zurückführt, woher man kam. Wenn Sie mit der Maus darauf zeigen, nennt sie den Ort – „Zurück zu Accounts“ oder „Zurück zu Invoices · Contoso Ltd“, wenn die Schaltfläche auf einem Datensatz gedrückt wurde.

Sie steht dort, wo die Navigation des jeweiligen Bildschirms ohnehin liegt, also immer in derselben Ecke:

  • Eine Liste und ein Datensatzformular setzen sie an den Anfang der Befehlsleiste, wo der Pfeil eines Formulars schon immer war – auf einem Formular ist sie dieser Pfeil, es gibt also einen Weg hinaus statt zwei;
  • ein Bericht setzt sie an den Anfang seiner eigenen Symbolleiste, vor den Namen des Berichts;
  • ein Dashboard und ein gezeichneter Bildschirm haben keine Symbolleiste, daher steht sie in der linken oberen Ecke.

Der Pfeil begleitet Sie, solange Sie sich innerhalb der App weiterbewegen; wenn Sie also einen Datensatz aus einer Liste öffnen, zu der eine Schaltfläche Sie geführt hat, geht der Weg zurück nicht verloren. Er verschwindet, wenn Sie etwas aus der Navigation der App selbst wählen – das ist eine Planänderung, nicht Teil des Wegs. Ein Bildschirm, den Sie selbst über die Navigation erreicht haben, hat keinen Zurück-Pfeil, weil es nichts rückgängig zu machen gibt.

Hat das Formular, das Sie verlassen, nicht gespeicherte Änderungen, werden Sie vorher gefragt – dieselbe Frage, die jeder andere Weg aus einem Formular stellt.

Ein aus einem Datensatz ausgeführter Bericht druckt diesen Datensatz; einer, der aus einer Liste ausgeführt wird, umfasst die ganze Tabelle. Suche und Filter einer Liste werden nicht mitgenommen, weil ein Bericht über seinen eigenen Namen adressiert wird und ein Filter nichts ist, was eine Adresse transportieren kann. Um über eine engere Menge von Datensätzen zu berichten, geben Sie dem Bericht selbst den Filter.

Wann Sie stattdessen ein Skript schreiben​

Wählen Sie Skript ausführen, und die Schaltfläche Code bearbeiten erscheint. Greifen Sie dazu, wenn das, was die Schaltfläche tut, von etwas abhängt, das nur der Browser weiß – was der Benutzer eingegeben oder welche Zeilen er angehakt hat.

Ein Skript kann aufrufen:

AufrufWas er tut
getValue(field)der aktuelle Wert eines Felds im geöffneten Formular
setValue(field, value)setzt ein Feld im geöffneten Formular (speichert nicht)
recordId()die ID des geöffneten Datensatzes oder ""
selectedCount() / selectedId(index)wie viele Zeilen angehakt sind, und eine davon
openRecord(table, id)öffnet einen Datensatz; eine leere ID öffnet einen leeren
newRecord(table, { field: value })öffnet einen leeren Datensatz mit diesen bereits ausgefüllten Feldern. Gespeichert wird erst, wenn die Person Speichern drückt
openView(table, view) / openDashboard(name) / openScreen(name) / runReport(name)dieselben Schritte wie in der Auswahl
openUrl(url)öffnet eine http/https-Adresse in einem neuen Tab; ein {field} darin wird wie oben ausgefüllt
notify(message)teilt dem Benutzer etwas mit
refresh()lädt neu, was auf dem Bildschirm ist
save()drückt Speichern des Formulars, nach dem, was das Skript gesetzt hat. Nur auf einem Formular
if (selectedCount() == 0) {
notify("Tick a ticket first.");
} else {
openRecord("par_ticket", selectedId(0));
}

So öffnet die Schaltfläche Call von Sales mit einem Druck Teams und einen Telefonanruf zum Kunden:

openUrl("https://teams.microsoft.com/l/call/0/0?users=4:{telephone1}");
newRecord("pw_activity", {
pw_type: 110000002,
pw_regarding: "contact:" + recordId(),
pw_phone_number: getValue("telephone1")
});

Ein Nachschlagefeld, das auf mehrere Tabellen verweisen kann, wird als table:id ausgefüllt, wie hier pw_regarding.

Der Editor unterstreicht Fehler während der Eingabe und vervollständigt diese Funktionen – derselbe Editor, in dem eine Geschäftsregel geschrieben wird.

Was ein Befehl nicht kann​

Er kann keinen Datensatz schreiben und nichts erzwingen. setValue ändert das Formular vor dem Benutzer, und was gespeichert werden darf, entscheidet der Server. Eine Regel, die gelten muss, egal wer was drückt, gehört in einen Server-Plug-in-Schritt.

save() ist kein Weg daran vorbei. Es drückt für den Benutzer das eigene Speichern des Formulars, mit denselben Prüfungen: erforderliche Felder, die Regeln, die beim Speichern laufen, und was auch immer der Server ablehnt. Damit kann eine Schaltfläche ein Feld setzen und es auch speichern, wie Senden bei einer E-Mail:

setValue("pw_delivery", 110000001);
save();

Jede Oberfläche hat zudem ihre eigenen Grenzen, und ein Befehl, der mehr verlangt, erhält einen entsprechenden Hinweis, statt scheinbar zu funktionieren:

  • Eine Liste hat keinen geöffneten Datensatz, daher bewirkt setValue dort nichts;
  • eine Registerkarte „Verknüpft“ innerhalb eines Formulars hat keine eigene Adresse und kann daher nicht navigieren;
  • ein Formular lädt sich bei refresh() nicht selbst neu, weil es Änderungen enthält, deren Verlust niemand verlangt hat.

Die Einträge einer geteilten Schaltfläche tun jeweils ihr Eigenes​

Fügen Sie eine geteilte Schaltfläche hinzu, können ihre Menüeinträge ein eigenes Verhalten haben – ein Eintrag öffnet eine Webadresse, während ein anderer einen Datensatz beginnt. Ein Eintrag, den Sie unverändert lassen, übernimmt das Verhalten der übergeordneten Schaltfläche.

Im Mehr-Menü (…) ist eine geteilte Schaltfläche eine Gruppe: ihr Name, mit ihren Einträgen darunter. Der Name ist selbst nur dann ein Eintrag, wenn die Schaltfläche selbst etwas tut; sonst ist er nur die Überschrift.

In der Leiste gilt dasselbe: Hat eine geteilte Schaltfläche kein eigenes Verhalten, öffnet ein Klick auf ihren Namen ihr Menü, genau wie ihr Pfeil.

Fehlerbehebung​

  • „… does nothing yet: it has neither an action nor a script.“ – Der Schaltfläche wurde nie ein Verhalten gegeben. Wählen Sie eines unter Beim Drücken.
  • „… is missing what it should open.“ – Das Verhalten ist festgelegt, aber sein Feld ist leer, oder die Webadresse ist nicht http/https. Eine javascript:-Adresse wird auf jeder Ebene abgelehnt, auch beim Import.
  • „… needs …, which is empty on this record.“ – Die Webadresse nennt ein Feld, das leer ist. Füllen Sie das Feld aus, oder drücken Sie die Schaltfläche auf einem Datensatz, in dem es gefüllt ist.
  • „… could not run: …“ – Das Skript ist fehlgeschlagen. Die Meldung stammt vom Interpreter selbst, und der Bildschirm funktioniert weiter.
  • „… asked for something this screen cannot do.“ – Siehe die Grenzen oben.
  • Der Bericht hat sich geöffnet, zeigt aber alle Datensätze. Er wurde aus einer Liste oder aus einem nie gespeicherten Datensatz ausgeführt – es gibt keinen Datensatz, auf den er eingegrenzt werden könnte. Öffnen Sie zuerst den Datensatz.
  • Die Schaltfläche „Code bearbeiten“ fehlt. – Die Schaltfläche nennt bereits ein Verhalten. Wählen Sie Skript ausführen, um den Editor zurückzubekommen; zwei Verhalten auf einer Schaltfläche würden bedeuten, dass eines davon stillschweigend unterliegt.

Verwandte Szenarien​