Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: MrMagoo am 21.08.03 - 08:34:48

Titel: Anhänge löschen wenn vorhanden
Beitrag von: MrMagoo am 21.08.03 - 08:34:48
Hallo habe da doch nochmal ein Frage.
dieser Agent nimmt sich die markierten Mails und löscht die Anhänge heraus. Wie kann ich Abfragen ob überhaupt ein Anhang vorhanden ist??

Sub Initialize
   Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim rtitem As Variant
   Dim object As NotesEmbeddedObject
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   Set doc = collection.GetFirstDocument
   
   While Not (doc Is Nothing)
      Set rtitem = doc.GetFirstItem( "Body" )
      If ( rtitem.Type = RICHTEXT ) Then      
         Forall o In rtitem.EmbeddedObjects
            Call o.Remove
            Call doc.Save( False, True )
         End Forall   
      End If
      Set doc = collection.GetNextDocument(doc)
   Wend
End Sub
Titel: Re:Anhänge löschen wenn vorhanden
Beitrag von: MrMagoo am 21.08.03 - 09:03:47
Tja manchmal habe ich dann doch nen Geistesblitz
so gehts

Sub Initialize
   Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim rtitem As Variant
   Dim object As NotesEmbeddedObject
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   
   If collection.Count = 0 Then  
      Msgbox "Kein Dokument ausgewählt"   
   Else
      
      Set doc = collection.GetFirstDocument
      While Not (doc Is Nothing)
         Set rtitem = doc.GetFirstItem( "Body" )
         If ( rtitem.Type = RICHTEXT ) Then   
            If Isarray( rtitem.embeddedObjects) Then
               Forall o In rtitem.EmbeddedObjects
                  Call o.Remove
                  Call doc.Save( False, True )
               End Forall   
            Else
               Msgbox "is nicht"
            End If
         End If
         Set doc = collection.GetNextDocument(doc)
      Wend
      Msgbox "Anhang / Anhänge gelöscht"
   End If
End Sub
Titel: Re:Anhänge löschen wenn vorhanden
Beitrag von: Thomas Schulte am 21.08.03 - 10:55:13
Gut außenrum Programmiert aber wie wäre es denn mit
flag = notesDocument.HasEmbedded ?

Thomas
Titel: Re: Anhänge löschen wenn vorhanden
Beitrag von: BradCirclepit am 19.01.09 - 16:11:36
Das funktioniert soweit echt gut! Wenn man jetzt allerdings Termine in der Schablone hat wird die Fehlermeldung ``object variable is not set`` ausgegeben. Wie könnte man diese Fehlermeldung umgehen, oder von Grund auf ausschließen?
Titel: Re: Anhänge löschen wenn vorhanden
Beitrag von: koehlerbv am 19.01.09 - 16:20:03
Termine? In der Schablone? Was willst Du uns damit sagen? Und wie sieht Dein Code aus und wo kommt die Fehlermeldung?

Bernhard
Titel: Re: Anhänge löschen wenn vorhanden
Beitrag von: BradCirclepit am 19.01.09 - 16:29:28
Termine? In der Schablone? Was willst Du uns damit sagen? Und wie sieht Dein Code aus und wo kommt die Fehlermeldung?

Bernhard

Wenn mich jemand über die Kalender-Funktion einlädt und ich die Informationsmail bezüglich der Einladung in mein E-Mail Postfach bekomme, dann steht diese Mail ja mit dem Briefumschlag-Icon in der normalen Mail-Schablone.

Wenn ich jetzt mit folgendem Code:

Sub Initialize
   Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim rtitem As Variant
   Dim object As NotesEmbeddedObject
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   
   If collection.Count = 0 Then 
      Msgbox "Kein Dokument ausgewählt"   
   Else
     
      Set doc = collection.GetFirstDocument
      While Not (doc Is Nothing)
         Set rtitem = doc.GetFirstItem( "Body" )
         If ( rtitem.Type = RICHTEXT ) Then   
            If Isarray( rtitem.embeddedObjects) Then
               Forall o In rtitem.EmbeddedObjects
                  Call o.Remove
                  Call doc.Save( False, True )
               End Forall   
            Else
               Msgbox "is nicht"
            End If
         End If
         Set doc = collection.GetNextDocument(doc)
      Wend
      Msgbox "Anhang / Anhänge gelöscht"
   End If
End Sub

wie ihn MrMagoo geschrieben hat alle Mails markiere und das Script ausführe, dann werden alle Anhänge soweit gelöscht bis er bei diesen Termin-Emails hängen bleibt und diese Fehlermeldung ausgibt. Die Mails die nach der Fehlermeldung noch markiert wären werden dann nicht berücksichtigt und behalten ihren Anhang.
Titel: Re: Anhänge löschen wenn vorhanden
Beitrag von: koehlerbv am 19.01.09 - 17:01:32
In der Schablone steht da immer noch nix, sondern in Deiner Datenbank  ;) Und ein ErrorHandling hast Du auch nicht eingebaut und kannst daher nicht die Zeile nennen, in der es knallt. Jetzt habe ich das extra nachbauen müssen - das macht nicht glücklich ...

Bei einer Einladung (Form = "Notice") gibt es kein Body-Item. Du musst also prüfen, ob das Item überhaupt vorhanden ist. Details gibts jetzt zur Strafe von mir auch nicht - das steht alles in der DesignerHelp unter NotesItem  ;)

Bernhard
Titel: Re: Anhänge löschen wenn vorhanden
Beitrag von: BradCirclepit am 21.01.09 - 10:49:04
Habe es jetzt so gelöst, dass ich überprüfe ob überhaupt ein gültiger Wert vorhanden ist. Wenn der Wert ungültig ist soll er gar nichts machen, ist der Wert gültig macht er den Rest wie gehabt.

Vielen Dank für die Informationen.


Sub Initialize
   Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim rtitem As Variant
   Dim object As NotesEmbeddedObject
   
   Set db = session.CurrentDatabase
   Set collection = db.UnprocessedDocuments
   
   If collection.Count = 0 Then
      Msgbox "Kein Dokument ausgewählt"   
   Else
      
      Set doc = collection.GetFirstDocument
      While Not (doc Is Nothing)
         Set rtitem = doc.GetFirstItem( "Body" )
         If (rtitem Is Nothing) Then         
         Else
            If ( rtitem.Type = RICHTEXT ) Then   
               If Isarray( rtitem.embeddedObjects) Then
                  Forall o In rtitem.EmbeddedObjects
                     Call o.Remove
                     Call doc.Save( False, True )
                  End Forall   
               End If
            End If
         End If
         Set doc = collection.GetNextDocument(doc)
      Wend
      Msgbox "Anhang / Anhänge gelöscht"
   End If
End Sub