Domino 9 und frühere Versionen > ND8: Entwicklung

LotusScript: Mailanhang auslesen

<< < (2/3) > >>

magic_halli:
Ich nochmal...
Ein Fehler tritt auf, wenn ich der Agent auf eine Mail ohne Anhang, nur mit Text, angewendet wird! Der Fehler lautet: "Falscher Datentyp in Methode ForAllInit: FROMVAR wurde gefunden. Unknown wurde erwartet". Aha?!?
Mein Code:

--- Code: ---Sub Initialize

Dim session As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument

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

'-----Attachment extrahieren und speichern-----
Dim attachment As Variant
Dim fileCount As Integer
fileCount = 0
Set attachment = doc.GetFirstItem("Body")
If ( attachment.Type = RICHTEXT ) Then
Forall o In attachment.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
fileCount = fileCount + 1
Call o.ExtractFile( "D:\temp\" & o.Name )
Messagebox("Attachment gespeichert.")
End If
End Forall
End If

End Sub

--- Ende Code ---
Der Debugger bleibt mit der Meldung "Type Missmatch" in der Zeile stehen: Forall o In attachment.EmbeddedObjects !

Es sollen einfach alle Anlagen (Files) gespeichert werden, oder aber es soll nichts passieren. Was ist falsch?

Danke und Gruß

mde:
Hi,

du solltest prüfen ob ein Attacment vorhanden ist
Aus der Hilfe

Notes Document class
To get: notesEmbeddedObjectArray = notesDocument.EmbeddedObjects
.....
 If doc.HasEmbedded Then...

Grß Michael

magic_halli:
Habs gefunden... funzt. Danke.

AndyG:
Hallo Zusammen,

ich habe das Script zum Speichern der Anlagen auch in Produktion,
habe ich es noch nicht geschafft, den Agenten so einzustellen, das er
automatisch nach Eingang von Emails am Server startet.

Derzeit starte ich das Script über einen Button im Menü.

Hier das funktionierende Script:
===============================
 'Alle Anhänge aller Dokumente in einer Datenbank speichern, incl Papierkorb
%REM
   Agent Anlagen speichern > DVA
      Description: Comments for Agent
%END REM
Option Public
Option Declare

'---------------------------------------------------------
'Automatisches Speichern von Anlagen  
'---------------------------------------------------------


Sub Initialize
   
   Dim session As New NotesSession  
   Dim db As NotesDatabase  
   Dim collection As NotesDocumentCollection  
   Dim doc As NotesDocument  
   Set db = session.CurrentDatabase  
   Set collection = db.AllDocuments
   Dim i As Integer
   Dim loeschen As Boolean
   loeschen = True
   
   For i = 1 To collection.Count    
      'Wenn das Dokument im Ordner  INBOX ist, dann weiter
      
      
      Set doc = collection.GetNthDocument( i )  
      
         If doc.HasEmbedded Then    
            Dim rtitem As Variant
            Set rtitem = doc.GetFirstItem( "Body" )
            Forall o In rtitem.EmbeddedObjects
               If o.Type = EMBED_ATTACHMENT Then  
                  Call o.ExtractFile( "\\server01\GROUPDATA\Datentransfer\IN\" & o.Source )
                  'Objekt entfenen
                  'Call o.Remove
                  
                  'Call doc.Save( True, True )
                  'Call doc.Remove(loeschen)
                  
                  'Doc in anderen Ordner verschieben
                  'Call doc.PutInFolder("Loeschen")
                  
                  'Doc aus Inbox entfernen
                  'Call doc.RemoveFromFolder("($Inbox)")
                  
               End If
            End Forall  
            'Doc in Papierkorb löschen
            'Call doc.Remove(loeschen)
            
            'Doc dauerhaft löschen
            Call doc.RemovePermanently(True)
         End If
         Next
      'Löschen der DocumentCollection
      'Call collection.RemoveAll(loeschen)
End Sub
===============================
(Achtung: ohne Gewähr)


Nun meine Frage/n:
Kann dieses Script so wie es geschrieben ist überhaupt als Backend-Agent am Server laufen
und was muss ich genau nacheinander durchführen und einstellen damit das Funktioniert?

Ich hoffe es kann mir jemand dabei helfen, wäre echt nett!

Grüße aus München

AndyG

PS.: Lotus Notes 8.5 natürlich ;-)

pram:
Hallo Andy,

ein paar Anmerkungen von mir:


> Set doc = collection.GetNthDocument( i )
GetNthDocument ist "böse", sollte durch getFirst/getNext verwendet werden.

> Forall o In rtitem.EmbeddedObjects
Kann funktionieren, muss aber nicht. v.a. wenn das Item im Dokument ist. besser ist m.e:

--- Code: ---v = Evaluate("@attachmentNames",doc)
Forall att in v
   set o = doc.GetAttachment(att)
...

--- Ende Code ---

> Call o.ExtractFile( "\\server01\GROUPDATA\Datentransfer\IN\" & o.Source )
Ein Server kann i.d.R nicht auf einen Netzwerkpfad zugreifen.

Den Agenten würde ich periodisch laufen lassen. Alle nicht verarbeiteteb Dokumente liegen in einer Ansicht. Bereits bearbeitete Mail-Dokumente würde ich mit einem Flag markieren, so dass sie aus der Ansicht herausfallen.

Gruß
Roland

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln