Autor Thema: Verschieben von Mails je nach Ende des Betreffs  (Gelesen 7561 mal)

Offline mullers

  • Frischling
  • *
  • Beiträge: 7
Verschieben von Mails je nach Ende des Betreffs
« am: 18.06.09 - 15:33:17 »
Hallo zusammen,

möchte einen Agenten erstellen, der je nach Ende der letzten 2 Zeichen des Betreffs (Endnummer einer Kundennummer), das entsprechende Mail in einen bestimmten Ordner verschiebt.

Habe folgendes Script erstellt:

Sub Initialize
   
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As  NotesDocument
   Dim collection As NotesDocumentCollection
   Dim Betreff As Variant
   Dim Endnummer As Interger
   Set db = s.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set doc = collection.GetFirstDocument()

   While Not(doc Is Nothing)
      Betreff = doc.GetItemValue("Subject")
      Endnummer =  Right("Betreff",2)

      
      If Endnummer <= 10 Then
         Call doc.PutInFolder("SB1",True)
         Call doc.RemoveFromFolder("($Inbox)")
                                Else if Endnummer <= 50 Then
         Call doc.PutInFolder("SB2",True)
         Call doc.RemoveFromFolder("($Inbox)")
                                Else if Endnummer <= 99 Then
         Call doc.PutInFolder("SB3",True)
         Call doc.RemoveFromFolder("($Inbox)")
                                End If
      Set doc = collection.GetNextDocument(doc)
   Wend
   
End Sub


Leider erscheint mir hier folgender Fehler: Type mismatch
Ich habe mal nach jeder Zeile eine MessageBox erstellt.
Hier scheint er abzubrechen:
Endnummer =  Right("Betreff",2)

Weiß aber nicht wieso??

Könnte mir jeman helfen?

Vielen Dank

Andreas

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #1 am: 18.06.09 - 15:42:01 »
Hallo,

Code
Betreff = doc.GetItemValue("Subject")(0)
Endnummer = Right(Betreff, 2)

oder

Code
Endnummer = Right(doc.GetItemValue("Subject")(0), 2)

GetItemValue liefert in jeden Fall einen Array zurueck, der dann auch nur ueber die entsprechenden Index-Nummern angesprochen werden kann.
Daher dein Type mismatch


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #2 am: 18.06.09 - 15:50:48 »
Hallo Andreas,

willkommen bei AtNotes.

Du machst da aber etliche gravierende Fehler, und das genaue Studium der DesignerHelp sei Dir dringend angeraten. Das nachlesen der korrekten Syntax, von Parametern und Rpckgabewerten ist nicht schwer und tut nicht weh.

Das mit den Messageboxes war vergebliche Liebesmüh - dafür gibt es den Debugger - und ein ordentliches ErrorHandling sei Dir von Anbeginn an geraten.

Zum Anfang die Dinge, wo der Code syntaktisch / logisch etwas ganz anderes machst, als Du bezweckst:

   Dim Endnummer As Interger

Das hast Du bestimmt nicht eingeben, oder? Oder hast Du "Interger" als Type oder Class woanders definiert?
Hast Du Option Declare gesetzt?

      Betreff = doc.GetItemValue("Subject")
      Endnummer =  Right("Betreff",2)

Zwei Zeilen, zwei schwerwiegende Fehler:
NotesDocument.GetItemValue gibt Dir was zurück? Richtig - ein Variant. Das hast Du auch korrekt instantiiert.
Aber was machst Du dann in der Zeile darauf? Du verwendest das gar nicht! EndNummer ist (oder soll sein) Integer - Du willst aber vom String "Betreff" die letzten beiden Zeichen zuweisen. "ff" ist keine Zahl.

Du bräuchtest also Right$ (Betreff (0), 2) - damit greifst Du dann auf das erste Element Deines vorher ausgelesenen Variants zurück und holst Dir dessen letzte beide Zeichen.

HTH,
Bernhard

Offline mullers

  • Frischling
  • *
  • Beiträge: 7
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #3 am: 19.06.09 - 08:38:46 »
Hallo Andreas,
Hallo Bernhard,


vielen Dank für Eure rasche Antworten.
Nun hat es super geklappt.

@Bernhard

Dir ist aufgefallen, dass mir teilweise gravierende Fehler unterlaufen sind. Dies liegt daran, dass ich kein Lotus Notes Entwickler bin. Ich bin sozusagen Endanwender im Betrieb und arbeite lediglich mit der Client-Version von Lotus 6.5.
Daher dachte ich auch, dass mir ein Debugger mir ohne den Designer nicht zur Verfügung steht (Habe aber nun den Debugger gefunden (Datei-Extras-Debug Lotus Script, Danke für den Hinweis).

Das ich Endnummer auf Interger gesetzt habe, tat ich mit Absicht. Da ich in der Betreffzeile am Ende Ziffern erwarte, sollte hier mit Ganzzahlen gearbeitet werden.

Zum Hintergrund: Eine fremde Abteilung wird meiner Abteilung per Mail diverse Daten zusenden. In der Betreffzeile wird dann am Ende die jeweilige Kundennummer vermerkt. Je nach Kundennummer ist in meinem Bereich ein anderer Sachbearbeiter zuständig.
Ich habe über unsere IT eine gemeinsame Mailin-Datenbank einrichten lassen. Ich werde für die fremde Abteilung ein Winwordvorlage mittels VBA erstellen. Nach Abschluss der Vorlage wird mittels VBA ein Mail inkl. des Worddokumentes automatisch versendet. Hierbei kann ich sicherstellen, dass die Betreffzeile am Ende immer Nummerisch ist. Ich werde aber noch versuchen im Agenten eine Prüfung durchzuführen ob die Betreffzeile wirklich nummerisch endet (Es könnte ja sein, dass Jemand ohne die Vorlage an uns schreibt). Leider bietet der Standard Agent nicht die Möglichkeit "endet mit" für den Subject an. Lediglich enthält. Und dies half mir leider nicht weiter.


Ich denke, da es sich um eine gemeinsame Mailin-Datenbank handelt, muss dieser Agent, zumal er am besten vor Eingang eines Mails erfolgen soll, direkt auf dem Server eingerichtet werden. Richtig? Das bedeutet dann sicher für mich, dass ich Änderungen (z.B. an der Sachbearbeiterzugehörigkeit) an den Agent kurzfristig nicht selber vornehmen kann.

Was ich jetzt noch plane, ist dass der Sachbearbeiter meiner Abteilung einen Agenten starten kann der die befindliche Worddatei und ein auf dem Rechner befindliches Makro startet. Wir rechnen im Jahr mit mind. 10000 Mails. Daher ist es mir wichtig, dass hier so wenig wie möglich manuell getan werden muss.

Schönen Gruß

Andreas

« Letzte Änderung: 19.06.09 - 08:44:17 von mullers »

BigWim

  • Gast
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #4 am: 19.06.09 - 09:29:19 »
Hallo Andreas,

Zitat
Das ich Endnummer auf Interger gesetzt habe, tat ich mit Absicht
ich denke, dass Bernhard eher darauf abzielte, dass "das Ding" Integer heißt und nicht Interger ;)

Und die Ausführungen bezogen sich darauf, dass mit den genannten Einstellungen viele "Schreibfehler" im voraus vermieden werden, die (zumindest bei mir) zum Alltag gehören ....


Zitat
Ich denke, da es sich um eine gemeinsame Mailin-Datenbank handelt, muss dieser Agent, zumal er am besten vor Eingang eines Mails erfolgen soll, direkt auf dem Server eingerichtet werden. Richtig? Das bedeutet dann sicher für mich, dass ich Änderungen (z.B. an der Sachbearbeiterzugehörigkeit) an den Agent kurzfristig nicht selber vornehmen kann.

Technisch besteht aber auch die Möglichkeit, dass Du auf diese MailInDatenbank Entwicklerrechte bekommst, dort den Agenten einstellst und Dich mit dem Thema Gestaltungsschutz befasst.


Viel Erfolg
Markus

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #5 am: 19.06.09 - 16:09:21 »
Nur mal so eine Frage:
Wenn Ihr offensichtlich wenigstens Admins habt, die sich auch mit Entwicklung wenigstens rudimentär auskennen sollten, warum tust Du Dir dieses Selbstexperiment dann an?
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline mullers

  • Frischling
  • *
  • Beiträge: 7
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #6 am: 23.06.09 - 14:53:30 »
Hallo,

@ Markus

vielen Dank für die Info. Mein Lotus Notes Ansprechpartner hat den Agenten nun so eingerichtet, dass ich hier nun Änderungsrechte habe. Allerdings hat das Einrichten "Vor Eingang" nicht geklappt. Na ja. So klappt es auch.

@ Gandhi

Aus Interesse, aus Spass eigene Lösungen zu finden und zu entwickeln und zur Zeiteinsparung. Ist das verkehrt? :-:

Schönen Gruß

Andreas

Offline mullers

  • Frischling
  • *
  • Beiträge: 7
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #7 am: 07.07.09 - 09:42:53 »
Guten Morgen Zusammen,

ich bräuchte nochmal Eure Hilfe.
Ich habe nun folgendes Script.

Sub Initialize
   
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As  NotesDocument
   Dim collection As NotesDocumentCollection
   Dim Endnummer As Variant
   Set db = s.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set doc = collection.GetFirstDocument()
   
   While Not(doc Is Nothing)
      Endnummer = Right(doc.GetItemValue("Subject")(0), 2)
      If Endnummer <= 29 Then
         Call doc.PutInFolder("SB1",True)
         Call doc.RemoveFromFolder("($Inbox)")
      Elseif Endnummer <= 52 Then         
         Call doc.PutInFolder("SB2",True)
         Call doc.RemoveFromFolder("($Inbox)")
      Elseif Endnummer <= 75 Then         
         Call doc.PutInFolder("SB3",True)
         Call doc.RemoveFromFolder("($Inbox)")   
      Elseif Endnummer <= 85 Then         
         Call doc.PutInFolder("SB4",True)
         Call doc.RemoveFromFolder("($Inbox)")   
      Elseif Endnummer <= 99 Then         
         Call doc.PutInFolder("SB5",True)
         Call doc.RemoveFromFolder("($Inbox)")            
      End If
      Set doc = collection.GetNextDocument(doc)
   Wend
   
End Sub

Dies läuft auch wunderbar. Allerdings sucht es alle Dokumente in allen Ordner ab und verschiebt es entsprechend.
Ist es möglich, dass der Agent lediglich die Mails aus dem Eingang prüft?

Hintergrund: Die Sachbearbeiter verschieben nach Abarbeitung die Mails in in einen Ordner (z.B. SB5/Erledigt.). Derzeit verschiebt der Agent nach Aktivierung diese Mails auch wieder in den Ordner SB5.

Ich hoffe hier könnt mir helfen.

Vielen Dank.

Andreas

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #8 am: 07.07.09 - 09:53:36 »
Hallo,

Wie ist denn Dein Agent eingestellt?

Wenn Du mit "UnprocessedDocuments" arbeitest solltest Du auch nach Bearbeiten des Dokumentes dieses auch als von dem Agenten als bearbeitet kennzeichnen.

siehe auch hierzu einen Auszug aus der Designer-Hilfe.
Zitat
For agents that run on new and modified documents, newly received mail documents, pasted documents, or newly modified documents, you must use the UpdateProcessedDoc method in NotesSession to mark each document as "processed," which ensures that a document gets processed by the agent only once (unless it's modified, mailed, or pasted again). If you do not call this method for each document, the agent processes the same documents the next time it runs.


Andreas

Offline mullers

  • Frischling
  • *
  • Beiträge: 7
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #9 am: 07.07.09 - 10:36:14 »
Hallo Andreas,

vielen Dank, dass Du mir wieder so schnell hilfst.

Der Agent ist auf Periodisch mit Zeitplan von 5 Minuten eingestellt ("vor Maileingang" und "nach Maileingang" lösten nicht den Agenten aus).  Als Ziel ist "Alle neuen und geänderten Dokumente" ausgewählt.

Ich habe nun folgende Zeile eingebaut (nach der If-Schleife).

Call s.UpdateProcessedDoc(doc) 

Dennoch greift das Makro auf die verschobenen Mails (Ordner erledigt) zu.
Wird das Dokument durch das manuelle Verschieben wieder als Unprocessed gesetzt??

Andreas

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #10 am: 07.07.09 - 10:40:10 »
Füge mal in der Schleife noch ein

Call notesSession.UpdateProcessedDoc( notesDocument )

ein (siehe auch Designer-Hilfe zu Database.UnprocessedDocuments)


hth

Thomas

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #11 am: 07.07.09 - 10:52:50 »
Ja.

Da sich in diesem Moment bei dem Dokument etwas aendert. Daher ist es fuer diesen Agenten als "noch nicht bearbeitet" gekennzeichnet.

Eventuell muss Du Deinen Agenten noch dahingehend "umbauen", dass er nur auf den Dokumenten in der Inbox laeuft.


Andreas

Offline tks

  • Senior Mitglied
  • ****
  • Beiträge: 425
  • Geschlecht: Männlich
  • ...für'n Fuss
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #12 am: 07.07.09 - 10:54:06 »
Ich würde nicht mit UnprocessedDocs arbeiten, weil dann die Dokumente jedesmal wieder als "unbearbeitet" auftauchen, wenn ein User was darin ändert und sei es auch nur, dass er das Mail aus Versehen erneut abspeichert.

Wenn Du nur den Eingang (Ordner $Inbox) abarbeiten willst, solltest Du den Agenten auf "alle Dokumente in der Datenbank" laufen lassen und dir mal db.GetView() ansehen. Zusätzlich würde ich die Dokumente, die durch den Agenten schon bearbeitet wurden mit einem Flag versehen. So kannst Du im Agenten alle schon bearbeiteten Dokumente ausfiltern.

*** EDIT: bin 'n bischen zu langsam
Thomas

*********************************
Domino 8.5.3FP6 unter W2K12
Notes 8.5.3 unter Win7
sequrIQ (watchdog & crypt)
*********************************

Offline mullers

  • Frischling
  • *
  • Beiträge: 7
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #13 am: 07.07.09 - 11:08:42 »
@ all

vielen Dank für Eure ganzen Antworten. Ich komme garnicht zum Antworten. Schon habe ich ein Hinweiß, dass bereits ein weiterer geantwortet hat.

Leider fehlt mir hierzu das Wissen über db.GetView und das setzen von Flags. Ich mache mich mal hier im Board auf die Suche ob ich hierzu passende Beiträge finde.

Gruß

Andreas

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #14 am: 07.07.09 - 11:22:32 »
Nicht so umstaendlich denkek.  ;)

GetView(...) => siehe NotesDatabase-Klasse -> erstellt ein Objekt auf die Angegebene Ansicht/Ordner

z.B. db.GetView("$Inbox") -> oeffnet den Posteingang

Mit Flag wird hier gemein, dass Du, nachdem Dein Agent das Dokument bearbeitet hat, ein eigenes zusaetzliches Feld, z.B. AlwaysProcessed schreibst.
doc.AlwaysProcessed = "1" oder Call doc.ReplaceItemValue("AlwaysProcessed", "1") und dann
call doc.Save(True, False, True)

Beim naechsten Lauf Deines Agenten pruefst Du, ob in dem Dokument dieses Feld vorhanden ist.
Wenn ja, braucht es nicht mehr bearbeitet zu werden.

So die Kurzform.


Andreas

Offline mullers

  • Frischling
  • *
  • Beiträge: 7
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #15 am: 08.07.09 - 08:50:06 »
Guten Morgen,

der GetView-Hinweis hat mir weitergeholfen.

Habe folgende Änderung vorgenommen.

   'Set collection = db.UnprocessedDocuments
   'Set doc = collection.GetFirstDocument()
   Set view = db.GetView("($Inbox)")   'NEU
   Set doc = view.GetFirstDocument   'NEU

Als Ziel habe ich "Alle Dokumente in der Datenbank" ausgewählt.
Nun greift der Agent nur auf die Dokumente im Eingang zu.

:knuddel: Ihr seid echt klasse.  :knuddel:

Das Setzen und Auslesen eines Flags ist wohl nicht notwendig

Vielen Dank

Andreas

Offline tks

  • Senior Mitglied
  • ****
  • Beiträge: 425
  • Geschlecht: Männlich
  • ...für'n Fuss
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #16 am: 08.07.09 - 10:11:35 »
Das Setzen und Auslesen eines Flags ist wohl nicht notwendig

Jain  :-P

Ohne Flag (und Prüfung darauf) durchläufst Du immer ALLE Dokumente in der Inbox. Das kann irgendwann mal auf die Laufzeit gehen (und ist ja auch unnütz, ein Dokument, das der Agent schon bewertet hat, muss er ja nicht nochmal bewerten). Zudem würde er Dokumente, die wieder in die Inbox geschoben wurden, wieder verschieben. Aber das kann ja dann auch gewollt sein  O0
Thomas

*********************************
Domino 8.5.3FP6 unter W2K12
Notes 8.5.3 unter Win7
sequrIQ (watchdog & crypt)
*********************************

BigWim

  • Gast
Re: Verschieben von Mails je nach Ende des Betreffs
« Antwort #17 am: 08.07.09 - 12:45:31 »
Zitat
Zudem würde er Dokumente, die wieder in die Inbox geschoben wurden, wieder verschieben. Aber das kann ja dann auch gewollt sein 

Genau, und deshalb ist mein "Flag" bei solchen Problemstellungen immer ein Datum mit Uhrzeit. So kannst Du erkennen, a) dass es vorschoben wurde und b) wann und kannst entsprechend reagieren (falls notwendig)

Markus

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz