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
-
Öffnen Sie das Formular im Formular-Designer oder die Ansicht im Ansichts-Designer.
-
Wählen Sie Ihre Schaltfläche in der Leiste Aktionen aus.
-
Wählen Sie unter Beim Drücken, was sie tut:
Auswahl Was sie braucht Was passiert Ansicht öffnen eine Tabelle (leer bedeutet diese Tabelle) und eine ihrer Ansichten die Liste öffnet sich mit dieser Ansicht Neuer Datensatz eine Tabelle (leer bedeutet diese Tabelle) ein leeres Datensatzformular öffnet sich Dashboard öffnen ein Dashboard das Dashboard öffnet sich Bildschirm öffnen ein gezeichneter Bildschirm der Bildschirm öffnet sich Bericht ausführen ein Bericht der Bericht öffnet sich als eigener Bildschirm – eingegrenzt auf den geöffneten Datensatz, falls es einen gibt Webadresse öffnen eine http://- oderhttps://-Adresse, die Felder des Datensatzes nennen darfsie öffnet sich in einem neuen Tab Skript ausführen hier nichts – siehe unten Ihr BS Lang-Skript wird ausgeführt -
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. -
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:
| Aufruf | Was 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
setValuedort 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. Einejavascript:-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
- Schaltflächen in einer Befehlsleiste gruppieren.
- Befehl umbenennen, ausblenden oder neu anordnen – die Wörter, das Symbol, die Reihenfolge und ob der Befehl ausgeblendet beginnt.
- Geschäftsregel schreiben – die andere Hälfte der Formularlogik: was passiert, ohne dass jemand etwas drückt.