Autor Thema: @Command vs. @PostedCommand  (Gelesen 11084 mal)

Glombi

  • Gast
@Command vs. @PostedCommand
« am: 13.01.04 - 16:23:09 »
Ausgangslage ist der Thread:
http://www.atnotes.de/index.php?board=7;action=display;threadid=13268;start=0;boardseen=1

Historisches zu @Command:
In der Notes Version 3 wurde ein neue Gruppe von Befehlen innerhalb der @Formelsprache eingeführt, die sogenannten @Command-Befehle. Mit diesen Befehlen ließen sich die Menübefehle programmtechnisch ausführen: Man konnte Dokumente öffnen, speichern und schließen, Datenbanken und Ansichten öffnen usw.

Für die @Command-Befehle galt jedoch folgende Einschränkung: Diese Befehle konnten zwar an beliebiger Stelle im Programmcode implementiert werden, ausgeführt wurden diese jedoch erst am Ende der gesamten Formel. Die @Command-Befehle wurden dann in der Reihenfolge ihres Auftretens im Programmcode ausgeführt.

Seit der Notes-Version 4 werden die @Command-Befehle an der Stelle im Programmcode eingeführt, an der sie stehen.

Aus Kompatibilitätsgründen wurden in Notes 4 die @PostedCommand-Befehle ausgeführt, die das gleiche Verhalten wie die @Commands unter Notes 3 haben.

@Command-Befehle in Formeln, die unter Notes 3 entwickelt wurden, werden beim Kompilieren durch einen Notes 4 Client automatisch in @PostedCommand umbenannt.
Andersherum können @Command-Befehle, die in Notes 4 oder höher implementiert werden, mit einem Notes 3 Client nicht ausgeführt werden.

Besonderheiten:
Es gibt einige @Command-Befehle, die nicht an der Stelle ihres Auftretens im Programmcode ausgeführt werden. Dieses ist z.B. der Befehl @Command([FileCloseWindow]).

Die Notes-Hilfe sagt dazu:
Ausführungsreihenfolge
Dieser Befehl wird nur nach der Auswertung der gesamten Formel ausgeführt, unabhängig davon, ob @Command oder @PostedCommand verwendet wird.

Diese Aussage ist irreführend, da der Befehl absolut gesehen natürlich nicht unbedingt am Ende der gesamten Formel ausgeführt wird. Gibt es nämlich im Porgrammcode unterhalb des @Command([FileCloseWindow]) oder @PostedCommand([FileCloseWindow]) weitere @PostedCommand-Befehle, so wird das @Command([FileCloseWindow]) vor diesen Befehlen ausgeführt.

Typische Anwendungen:
Sie möchten ein Dokument speichern, schließen und ein neues Dokument erstellen. Da bei Verwendung der @Command-Befehle das Speichern und Erstellen an der Stelle im Programmcode ausgeführt wird, das Schließen aber erst am Ende der Formel, lässt sich die Reihenfolge nicht erzwingen. Daher muss für alle Befehle - zumindest nach dem FileSave - das @PostedCommand verwendet werden.
Beispiel:
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow]);
@PostedCommand([Compose]; "Name der Maske)

Weitere Ausführungen bzw. Fragen sind willkommen.

Andreas
« Letzte Änderung: 14.01.04 - 08:37:08 von Glombi »

Glombi

  • Gast
Order of evaluation for formula statements
« Antwort #1 am: 13.01.04 - 16:38:05 »
In der Notes-Version 6 wurden etliche neue @Command-Befehle eingeführt, um die missliche Lage, dass bestimmte @Command erst am Ende ausgeführt werden, zu verbessern.

Eine Übersicht der @Commands ist angehängt. Zu finden ist diese in der Notes 6 Designer Hilfe unter "Order of evaluation for formula statements"

Insbesondere sollte man sich dort auch das Thema "What's new in Domino Designer 6" ansehen.
« Letzte Änderung: 13.01.04 - 16:39:28 von Glombi »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:@Command vs. @PostedCommand
« Antwort #2 am: 13.01.04 - 20:44:44 »
Hi Andreas,

gute Idee dass Du das Thema aufgreifst. Spontan fällt mir grad leider nichts erwähnenswertes bzw. interessante Beispiele ein, aber das kommt bestimmt noch ;-)

Etwas ist noch widersprüchlich:
Zitat
Gibt es nämlich im Porgrammcode unterhalb des @Command([FileCloseWindow]) oder @PostedCommand([FileCloseWindow]) weitere @PostedCommand-Befehle, so wird das @Command([FileCloseWindow]) vor diesen Befehlen ausgeführt.
Soweit klar, genau so bin ich das auch gewohnt.

Zitat
Daher muss für alle Befehle das @PostedCommand verwendet werden.
Beispiel:
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow]);
@PostedCommand([Compose]; "Name der Maske)

Widerspruch zum 1. Quote, weil ja lt. Text auch @Command([FileSave]) gehen würde.
Ich hätte jetzt auch gemeint, dass es egal ist, ob hier in diesem Beispiel das FileSave mit @PostedCommand oder @Command ausgeführt wird.

Vielleicht kannst Du das noch im Detail erklären.

Danke,
Matthias

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:@Command vs. @PostedCommand
« Antwort #3 am: 13.01.04 - 21:00:20 »
Hi Matthias,
Du hast Recht, es geht auch
@Command([FileSave]);
@PostedCommand([FileCloseWindow]);
@PostedCommand([Compose]; "Name der Maske)

aber ich finde es irgendwie ästhetischer, wenn man dann alles als @PostedCommand schreibt.

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:@Command vs. @PostedCommand
« Antwort #4 am: 13.01.04 - 21:08:00 »
aber ich finde es irgendwie ästhetischer, wenn man dann alles als @PostedCommand schreibt.

Stimmt  ;D
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz