Autor Thema: OpenView-@Befehl  (Gelesen 4676 mal)

Jürgen Schomann

  • Gast
OpenView-@Befehl
« am: 06.02.11 - 11:21:49 »
ich möchte in einer Ansicht einen Agenten aufrufen, der in eine andere Ansicht wechselt und dort prüfen soll ob es ein Dokument enthält.
Dazu habe ich folgende Anweisungen testweise ausgeführt.

@Command([OpenView]; "Ansicht"; ""; "1");
@Prompt([Ok];"";@Text(@DocumentUniqueID));

die Ansicht wird zwar gewechselt, aber ich erhalte als Dokument-ID immer noch die von dem in der alten Ansicht ausgewählten Dokument und nicht die ID des Dokuments in der neuen Ansicht. Es scheint so, dass der OpenView-@Befehl nur angestoßen wird und die Abarbeitung gleich weitergeht, ungeachtet ob der Befehlt fertig ist.

Nur wenn ich folgende Anweisungen ausführe:

@Command([RunAgent]; "Agent1"); mit der Anweisung @Command([OpenView]; "<Ansicht>"; ""; "1");
@Command([RunAgent]; "Agent2"); mit der Anweisung @Prompt([Ok];"";@Text(@DocumentUniqueID));

erhalte ich im 2. Agenten die ID des Dokuments in der neuen Ansicht. Die Abarbeitung der Agenten wird hier immer erst abgewartet. Im Gegensatz dazu scheint der OpenView-@Befehl in dem ersten Beispiel nicht abgewartet zu werden.
Gibt es eine Erklärung dafür oder einene andere Möglichkeit, so dass ich nicht extra Agenten für die o. g. Befehlsfolge erstellen muss?

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: OpenView-@Befehl
« Antwort #1 am: 06.02.11 - 12:10:48 »
Erklärung: Deine aufgerufene Ansicht hat den Focus zu diesem Zeitpunkt noch nicht., Beschäftige dich mal mit der Reihenfolge in der die Formelsprache Befehle, Speziell @Command Befehle abarbeitet. Siehe auch @PostedCommand.

Andere Vorgehensweise: Benutze Lotus Script. Da ist das ohne Error Handling ein 5 bis 10 Zeiler, je nachdem wie ausführlich du schreibst.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Jürgen Schomann

  • Gast
Re: OpenView-@Befehl
« Antwort #2 am: 06.02.11 - 13:35:44 »
Der @Command-Befehl wird doch aber bei OpenView gleich abgearbeitet. Bestimmte Befehle, wie z. B. FileCloseWindow, werden trotz @Command aber wie @PostedCommand abgearbeitet. Es gibt hier aber auch ein Äquivalent CloseWindow, das sofort abgearbeitet wird.
Das mit dem Focus ist mir schon klar. Wenn ich aber die Befehlsfolge

@Command([RunAgent]; "Agent1"); mit der Anweisung @Command([OpenView]; "<Ansicht>"; ""; "1");
@Command([RunAgent]; "Agent2"); mit der Anweisung @Prompt([Ok];"";@Text(@DocumentUniqueID));

abarbeite, wird doch auch gewartet bis der 1. Agent fertig ist.
Eine Lösung mit LotusScript wäre z. B. OpenView für NotesUIDatabase, die damit dann auch den Focus erhält? Könnte man mit RunAgent diesen LotusScript-Agenten auch in eine @Formel-Agenten einbauen, und wird dann auch gewartet bis er fertig ist. Die Umgebung ist nämlich eine komplexere Struktur in einer Fremdanwendung.

Offline Kadlec

  • Senior Mitglied
  • ****
  • Beiträge: 489
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: OpenView-@Befehl
« Antwort #3 am: 06.02.11 - 15:46:04 »
Du brauchst nur die DocUID? Warum holst Du die nicht mit @DBLookup?

Boris

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: OpenView-@Befehl
« Antwort #4 am: 07.02.11 - 01:06:48 »
vielleicht hilft dir @updateFormulaContext hier weiter.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: OpenView-@Befehl
« Antwort #5 am: 07.02.11 - 09:16:04 »
Das mit dem Focus ist mir schon klar. Wenn ich aber die Befehlsfolge

@Command([RunAgent]; "Agent1"); mit der Anweisung @Command([OpenView]; "<Ansicht>"; ""; "1");
@Command([RunAgent]; "Agent2"); mit der Anweisung @Prompt([Ok];"";@Text(@DocumentUniqueID));

abarbeite, wird doch auch gewartet bis der 1. Agent fertig ist.
Überleg dir doch einfach mal wieviele Agents du in einer Client Umgebung gleichzeitig laufen lassen kannst.

Ich begreife allerdings immer noch nicht ganz, warum du rausfinden musst ob eine andere Ansicht "ein" Dokument enthält. Stellst du sicher das es immer GENAU ein Dokument ist? Gibt es einen Schlüssel mit dem du zugreifen kannst oder ist das vollkommen egal, Hauptsache da steht was drin?

Für Fall eins wäre @dbColumn anstelle von @dbLookup die bessere Wahl, denn wenn du mindestens einen Eintrag zurückbekommst, hast du da ja ein Dokument drinstehen. Bei Fall 2, stimme ich Boris zu. Dann brauchst du eigentlich nur einen @dbLookup.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Jürgen Schomann

  • Gast
Re: OpenView-@Befehl
« Antwort #6 am: 07.02.11 - 12:24:33 »
Vielen Dank für eure Hinweise. Der Hinweis mit @UpdateFormulaContext scheint zu klappen. Der ganze Vorgang ist wie gesagt ziemlich umfangreich und in Formelsprache programmiert. Ich will nicht zu viel eingreifen, nur versuchen etwas zu optimieren.
Entschuldigung, es geht nicht um Ansichten, sondern um einen privaten Ordner. Dieser soll geprüft werden, ob er Dokumente enthält und dann auf Anfrage geleert werden oder nicht.
Die Anwendung benutzt u. a. folgende Befehlsfolge:

    @PostedCommand([ToolsRunMacro]; "Agent1");
    @PostedCommand([ToolsRunMacro]; "Agent2");
    @PostedCommand([ToolsRunMacro]; "Agent3")

Agent1 enthält die Befehlsfolge:

@Command([OpenView]; "Ordner"; ""; @If(@ViewTitle = "Ordner; "1"; "0"))

Agent2 enthält die Befehlsfolge:

@If(@Text(@DocumentUniqueID) = @Repeat("0"; 32);
  @Return("");
  ""
);
@If (
  @Prompt([YesNo]; "Titel"; "Anfrage") = 1;
  @Do(
    @Command([EditSelectAll]);
    @Command([RemoveFromFolder])
  );
  ""
)

Agent3 enthält die Befehlsfolge:

@Command([FileCloseWindow])


Ich könnte das in LotusScript auch über NotesView.AllEntries, Anfrage stellen und dann ggf. NotesViewEntryCollection.RemoveAllFromFolder erreichen.

Noch eine Frage zum Unterschied von ToolsRunMacro-@Befehl und RunAgent-@Befehl. Sind diese äqivalent bezüglich der Abarbeitung im gleichen Prozess, außer natürlich, dass ToolsRunMacro erst am Ende der Formel und RunAgent sofort ausgeführt wird. Es wäre dann wirklich ein Makro wie aus anderen Programmiersprachen gewöhnt.
In LotusScript wird bei NotesAgent.Run dagegen wirklich ein neuer Prozess aufgemacht.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz