Autor Thema: Agent in Ansichtsschaltfläche  (Gelesen 1449 mal)

Offline SaSa

  • Frischling
  • *
  • Beiträge: 2
Agent in Ansichtsschaltfläche
« am: 22.09.08 - 09:32:48 »
Hallo!

Ich habe folgendes Problem:

In einer Ansicht sollen markierte Dokumente mit einem frei einzugebenden Datum versehen werden. Das passiert z.Z. über zwei Agenten, ausgelöst durch eine Schaltfläche in der Ansicht.

Schaltfläche:
@Command([ToolsRunMacro];"(AusgangsdatumErmitteln)")

Agent (AusgangsdatumErmitteln):
varDatum := @Prompt([OkCancelEdit];"Ausgangsdatum";"Bitte geben Sie das Ausgangsdatum (tt.mm.jjjj) für die gewählten Dokumente ein";"");
@SetProfileField("(DBProfile)";"datQuittung";varDatum);
@Command([EditDocument];"1");
@Command([FileSave]);
@Command([FileCloseWindow]);
@Command([ToolsRunMacro];"(AusgangsdatumSetzen)")

Agent (AusgangsdatumSetzen):
FIELD datQuittung := @GetProfileField("(DBProfile)";"datQuittung");
FIELD txtAusgetragen := @Name([CN];@UserName);
SELECT @All

Funktioniert mit dem Setzen des Datums in allen markierten Dok auch, jedoch befindet sich in der Dokumentenmaske noch eine Teilmaske, in der die Dokumenthistorie festgehalten wird.
Die wird beim ersten markierten Dokument auch angepasst, jedoch bei den zweiten, dritten...markierten Dokument nicht.

Teilmaske Dokumenthistorie :
(aufklappbarer Abschnitt mit Feld "tx_GeaendertDurch")

tmp := @Subset(tx_GeaendertDurch; 29);
was := "" ;
@If( @IsNewDoc;
   @Do( @Set( "tmp" ; "" );
      @Set( "was" ; "erstellt am " ) ) ;
   @Do( @Set( "tmp" ; tmp);
      @Set( "was" ; "geändert am " ) ) );
@If( @IsDocBeingSaved ;
   was + @Text(@Date(@Now)) + " um " + @Text(@Time(@Now)) + " Uhr von " + @Name( [CN] ; @UserName ) ;
   "") : tmp

Was läuft falsch?

Danke und Gruß!

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Agent in Ansichtsschaltfläche
« Antwort #1 am: 22.09.08 - 22:25:26 »
Dem Szenario, das du aufbaust, liegen zwei elementare Denkfehler zugrunde:

Das Dokument, bei dem scheinbar alles richtig läuft, ist das aktive Dokument, auf dem du momentan stehst (dicker Rahmen in Ansicht drum). Dieses Dokument muß nicht zwangsläufig eines der markierten Dokumente sein (das sind die mit einem Haken davor). Mit dem ersten Agenten machst du eine Abfrage und benutzt dafür ein Feld des aktiven Dokuments. Dann editierst du das aktive Dokument (natürlich mit der Maske und Teilmaske) und trägst daher dort auch eine Historie ein. Wenn das aktive Dokument nicht zur Auswahl gehört, ist das bereits falsch.

Der zweite Agent schreibt in die markierten Dokumente Werte. Dafür wird keine Maske benötigt. Sie wird auch nicht verwendet. Deshalb taucht dort natürlich auch keine maskengebundene Historie auf. Wenn du diese Historie dort fortführen willst, dann mußt du sie in dem Agenten programmieren.

Daß dir der Fehler Eins unterläuft, liegt vermutlich daran, daß in dem Sonderfall, wenn du KEIN Dokument markierst, Notes das aktive Dokument dann als markiertes Dokument automatisch ansieht und behandelt. Und da in den meisten Fällen das aktive Dokument das erste markierte Dokument ist, erliegst du dem Irrglauben, mit dem ersten Dokument liefe alles richtig.

Diese Unterscheidung von aktivem und markierten Dokumenten ist fundamental. Wenn du einmal LotusScript programmierst, wirst du dort die Unterschiede zwischen DocumentContext bzw. CaretNoteId für das aktive Dokument und UnprocessedDocuments für die markierten Dokumente noch dringend brauchen.

Gruß

Norbert
Situs vilate in isse tabernit.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz