Autor Thema: Item ändern mit Aktion  (Gelesen 12800 mal)

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Item ändern mit Aktion
« am: 10.01.12 - 09:44:09 »
Guten Morgen.

Wir haben eine Anwendung zugekauft, in der wir Dokumente erstellt haben. In der Maske wird eine versteckte Teilmaske eingebunden und hier wird im Postsave geprüft, ob sich ein bestimmtes Feld geändert hat. Trifft dies zu, wird eine Mail versendet, die einer Mail-IN mitteilt, dass sich was geändert hat.

Jetzt muss in vielen Dokumenten dieses Feld nach einem bestimmten Kriterium geändert werden.
Ich dachte mir, ich schreibe einen Agenten (Formel, nicht Skript)), der zwei Dialogfelder hat "alter Wert" "neuer Wert" und sich dann die Dokumente sucht und den Wert des Items austauscht.

Irre ich mich, wenn ich mir denke, dass dabei aber diese Änderungsmail nicht versendet wird?
Wenn nein, was müsste ich machen, damit die Mail doch versendet wird? Ich brauche keinen Code, sondern nur eine formale Beschreibung der Vorgehensweise.

Vielen Dank schon mal.

Gruss
Geri

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Item ändern mit Aktion
« Antwort #1 am: 10.01.12 - 09:56:37 »
Guten Morgen

Wenn Du das Dokument im Backend (per Agent) änderst, wird der Postsave nicht ausgeführt. Daher wird kein Mail verschickt.

Ist das Mail zwingend nötig? Dann würde ich den entsprechenden Code aus dem Postsave Event in deinen Agenten einfügen oder die Meldung in deinem Agenten generieren.

Gruss
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #2 am: 10.01.12 - 10:21:36 »
Hallo und Danke!
Zitat
Wenn Du das Dokument im Backend (per Agent) änderst, wird der Postsave nicht ausgeführt. Daher wird kein Mail verschickt.
Gut, dann hatte ich das schon richtig verstanden.

Zitat
Ist das Mail zwingend nötig?
Ja, absolut. Die Mail ist für die Buchhaltung, dass sich der Inventarstandort (=Kostenstelle) geändert hat und in der Anlagenbuchhaltung eine Umbuchung vorzunehmen ist.

Zitat
Dann würde ich den entsprechenden Code aus dem Postsave Event in deinen Agenten einfügen oder die Meldung in deinem Agenten generieren.
Dann muss ich aber statt Formel Script verwenden, der Code ist Script. Da bin ich nun gar nicht fit.
Hmm, Moment, ich könnte doch diesen Code in einen Agenten eintragen, welcher durch "Auswahl in der Agentenliste" von meinem Formelagenten aufgerufen wird?!
Geri

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #3 am: 10.01.12 - 11:06:11 »
Dazu müsstest Du aber das gerade bearbeitete Dokument an den Agent übergeben. Trivial wird das nicht, wenn man nicht in LS fit ist.

Bernhard

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #4 am: 10.01.12 - 11:43:09 »
Hallo Bernhard,

da hab ich mir auch eben die Zähne ausgebissen.


Den Code als Sub in einer Scriptbibliothek ablegen und dann per Formel aufrufen geht ja auch nicht, so wie ich das sehe. Zumindest finde ich in der Formelübersicht keinen entsprechenden Aufruf...

Per Formel Dokument öffnen, Feld verändern und dann speichern scheitert am Speichern. :'(

Ich glaube, ich mach das dann doch komplett in Script. Hab ja hier ein sehr dickes Buch liegen...

Danke nochmal und beste Grüsse.
Geri

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #5 am: 10.01.12 - 12:35:46 »
Nun denn - der Benutzer markiert sich in der Ansicht die gewünschten Dokumente oder sucht sich diese über Volltext.

Der Agent läuft auf "Alle ausgewählten Dokumente" und führt folgendes Script aus:

Zitat
Sub Initialize
   
   Dim ws               As New NotesUIWorkspace
   Dim session            As New NotesSession
   Dim db               As NotesDatabase
   Dim dc               As NotesDocumentCollection
   Dim doc               As NotesDocument
   Dim uidoc                    As NotesUIDocument
   Dim Kostenstelle_neu           As String

   Set db               := session.CurrentDatabase
   Set dc               := db.UnprocessedDocuments
   Set doc               := dc.GetFirstDocument

   Kostenstelle_neu                    := (InputBox$("Bitte neue Kostenstelle angeben!"))

   
   While Not doc Is Nothing
      
      Set uidoc         := ws.EditDocument(True, doc)
      Call uidoc.FieldSetText(Kostenstelle, Kostenstelle_neu )
      Call uidoc.Refresh
      Call uidoc.Save
      Call uidoc.Close
      
      Set doc := dc.GetNextDocument(doc)
   Wend
   
End Sub

Würde das tun? Im Moment ist mein Testsystem in Wartung, kann es also nicht ausprobieren.

Grüsse
Geri

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #6 am: 10.01.12 - 12:41:13 »
":=" ist falsch, in LS ist das "=".

Weiters: Warum machst Du das im Frontend? Du kannst doch gleich im Backend Deinen Wert setzen:

While Not doc Is Nothing
   doc.Kostenstelle = Kostenstelle_neu
   Call doc.Save (True, False, True)
   Set doc = dc.GetNextDocument(doc)
Wend

Bernhard
« Letzte Änderung: 10.01.12 - 13:19:10 von koehlerbv »

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #7 am: 10.01.12 - 13:02:50 »
":=" ist falsch, in LS ist das "=".
Schande, zu viel PL/SQL im Kopf. :-X


Zitat
doc.Kostenstelle = Kostenstelle_neu
Ja, da hab ich zu kompliziert gedacht.


Zitat
Weiters: Warum machst Du das im Frontend? Du kannst doch gleich im Backend Deinen Wert setzen:

Ich dachte, dann zieht doch das andere Script aus dem Postsave der Teilmaske nicht? ???
Geri

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #8 am: 10.01.12 - 13:05:50 »
Den entsprechenden Code bzw. die Aufrufe zu fertigen Routinen kannst Du doch in Deinem Agentileinchen auch einsetzen, Geri.

Bernhard

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #9 am: 10.01.12 - 13:17:13 »
Den entsprechenden Code bzw. die Aufrufe zu fertigen Routinen kannst Du doch in Deinem Agentileinchen auch einsetzen, Geri.

Bernhard

 ;D
Du traust mir nun wahrlich zu viel zu. Das Büchlein, aus dem ich mir den Code zusammengesucht habe, hat nur über 1200 Seiten. Bis ich mir daraus dann zusammengesaugt habe, was das andere Script genau macht und es angepasst habe, werden wohl einige Sekunden vergehen...
Und der andere Code ist nicht in einer Bibliothek abgelegt, sondern direkt im Postsave (bzw. im Postopen wird sich da auch was gemerkt / zusammengebastelt).

Aber Du hast schon wahr! :)

Grundsätzlich würde mein Agent aber laufen?!

Edit: Wenn ich drüber nachdenke - ich habe die Befürchtung, dass das lange laufen wird und ein ziemliches Geflacker auf dem Bildschirm werden wird. :-[

Ich versuch mal, ob ich die Scripte zusammen führen kann. Darf ich dann zur Überprüfung das Ding nochmal hier rein stellen?

Danke erstmal.
« Letzte Änderung: 10.01.12 - 13:19:40 von smokyly »
Geri

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #10 am: 10.01.12 - 13:20:23 »
Mein Vorschlag für das Backend würde aber nicht "flackern". Flott ist das auch.

Wie wird denn bzgl. was im PostSave aufgerufen?

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #11 am: 10.01.12 - 13:27:00 »
Das Verfahren über das Frontend hat neben dem Flackern auch noch einen weiteren Nachteil: Probier das mal mit mehreren Dokumenten aus. Spätestens beim 50. oder 60. Dokument raucht Dir nämlich der Client ab (ich habe solch eine Routine, die über das Frontend MUSS, das geht da leider nicht anders, dort haben wir eine Grenze von 40 eingestellt).

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #12 am: 10.01.12 - 13:32:52 »
Mein Vorschlag für das Backend würde aber nicht "flackern". Flott ist das auch.
Ja, das hatte ich verstanden, drum mein Umschwenken.


Zitat
Wie wird denn bzgl. was im PostSave aufgerufen?

Bernhard

Es wird eine Mail erstellt, durch einen Vergleich des aktuellen Wertes eines Items des Dokuments und einer Variablen(!, also kein Feld), die woher auch immer kommt und dann wird da noch was mit Workflow gesteuert und gemacht, aber da steig ich nicht durch, da dann Bibliotheken aufgerufen werden. Das mit der Mail war ne Schnellanpassung für uns, der Rest ist Standard des Herstellers.

So wie ich das sehe, zieht bei einer Änderung des Feldes im Dialog nur die Mailgeschichte, ganz sicher bin ich natürlich nicht.

Jetzt raucht die Birne...
Geri

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #13 am: 10.01.12 - 13:38:00 »
... und einer Variablen(!, also kein Feld), die woher auch immer kommt ...
Die Variable ist bestimmt in den Declarations deklariert und wird im PostOpen gesetzt.

Das ist ein gängiges und gutes Verfahren:
Globale Variable im PostOpen mit dem aktuellen Feldwert setzen
Im PostSave (oder QuerySave) den nun aktuellen Feldwert mit der Variablen (also dem Wert zum Zeitpunkt des Öffnens) vergleichen und daraus Aktionen ableiten

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #14 am: 10.01.12 - 13:38:04 »
Das Verfahren über das Frontend hat neben dem Flackern auch noch einen weiteren Nachteil: Probier das mal mit mehreren Dokumenten aus. Spätestens beim 50. oder 60. Dokument raucht Dir nämlich der Client ab (ich habe solch eine Routine, die über das Frontend MUSS, das geht da leider nicht anders, dort haben wir eine Grenze von 40 eingestellt).

Danke für die Info. Gut zu wissen.
Geri

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #15 am: 10.01.12 - 13:41:22 »
Die Variable ist bestimmt in den Declarations deklariert
Da hatte ich zuerst gesucht.

Zitat
und wird im PostOpen gesetzt.
Super, gefunden, hier deklariert und gesetzt.

Zitat
Das ist ein gängiges und gutes Verfahren:
Globale Variable im PostOpen mit dem aktuellen Feldwert setzen
Im PostSave (oder QuerySave) den nun aktuellen Feldwert mit der Variablen (also dem Wert zum Zeitpunkt des Öffnens) vergleichen und daraus Aktionen ableiten
OK, und nun hab ich auch schon die Idee, wie ich das dann im Backendscript umsetze.

Beste Grüsse!
Geri

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #16 am: 10.01.12 - 13:49:06 »
Zitat
und wird im PostOpen gesetzt.
Super, gefunden, hier deklariert und gesetzt.
Wenn die Variable im PostOpen deklariert ist, kann sie nicht im PostSave zur Verfügung stehen. Sie muss in den Declarations der Maske oder den Declarations von Globals deklariert sein. Falls die gleiche Variable nochmal im PostOpen deklariert ist, gelangen die Daten nicht in die global deklarierte Variable, und der Inhalt ist wiederum nicht im PostSave verfügbar.

Sorry für meine Pingeligkeit, aber das ist für die Funktionsweise sehr wichtig.

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #17 am: 10.01.12 - 13:59:45 »
Hallo Peter, das ist eine Teilmaske, da steht in den Deklarationen nichst drin. Im Postopen finde ich das:

Zitat
Kostenstelle         = source.Document.Kostenstelle(0)

Also ist das keine implizite Deklaration mit Wertsetzen, sondern nur eine Zuweisung?
Hat natürlich für mein Anliegen nicht wirklich was zu tun, ist Interesse.
Geri

Offline smokyly

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.169
  • Geschlecht: Männlich
  • Nicht jeder ist ersetzbar.
Re: Item ändern mit Aktion
« Antwort #18 am: 10.01.12 - 15:13:15 »
Also so sieht der Code für den Agenten im Initalize aus:

Zitat
Sub Initialize
  

   Dim session            As New NotesSession
   Dim db               As NotesDatabase
   Dim dc               As NotesDocumentCollection
   Dim doc               As NotesDocument
   Dim Kostenstelle_neu           As String
   Dim Kostenstelle_alt         As String

   Set db               = session.CurrentDatabase
   Set dc               = db.UnprocessedDocuments
   Set doc              = dc.GetFirstDocument

   Kostenstelle_neu     = (InputBox$("Bitte neue Kostenstelle angeben!"))

  
   While Not doc Is Nothing
      
      Kostenstelle_alt=doc.Kostenstelle
      doc.Kostenstelle = Kostenstelle_neu

      Call doc.Save(True,False,True)
      Call sendmail(doc,Kostenstelle_alt)      
      Set doc = dc.GetNextDocument(doc)
   Wend
  
End Sub

Dann habe ich noch eine Sub "sendmail" gebastelt, die das Mail erstellt und noch die anderen benötigten Funktionen / Subs aus der Teilmaske in den Agenten geschoben. In den Options hab ich mit Use eine benötigte Bibliothek angegeben.
Konnte den Agenten ohne Fehler speichern.
A-Bär: Das verstehe ich noch nicht ganz - das sendmail hat ja zwei Übergabeparameter:
Zitat
Sub Sendmail(Source As NotesDocument, P_Kostenstelle_agent As String)
Muss ich Source und P_Kostenstelle_agent denn nun nochmal in den Declarations aufnehmen, oder sind diese denn nun implizit definiert? Ich behaupte mal Letzteres, da es in anderen Sprachen auch so ist.

Geri

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Item ändern mit Aktion
« Antwort #19 am: 10.01.12 - 15:23:07 »
Das ist schon korrekt so, Geri. Subs / Functions deklarieren ihre Parameter implizit.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz