Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: sculer am 16.12.05 - 15:04:54

Titel: Attachment aus einer Mail DB lösen
Beitrag von: sculer am 16.12.05 - 15:04:54
Hallo,
ich hab eigentlich vor, alle Attachments eine Mail DB zu lösen.

Dabei bin ich dann auf diesen Beitrag gestoßen
(http://atnotes.de/index.php?topic=22415.0)
der Code dafür sieht so aus:
Code
Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
      Call o.ExtractFile( "c:\samples\" & o.Source )
      Call o.Remove
      Call doc.Save( False, True )
    End If
  End Forall
End If

, und wollte dies auch gleich mal testen. Hab auch das Beispiel in der Hilfe DB gefunden und versucht dieses umzusetzen.
Jedoch gibt er immer bei der Forall Schleife eine Type Mismatch Fehlermeldung aus. Nun ist aber noch die Frage, was ist eigentlich mit dem kleinen "o" ? Es wird nirgends gesetzt noch definiert. Kann mir da jemand weiterhelfen?
mfg
 
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: scipio am 16.12.05 - 20:03:08
Forall o In rtitem.EmbeddedObjects 'Mache mit allen Objekten des RichTextItems

o = eingebettete Objekte

If ( o.Type = EMBED_ATTACHMENT ) Then 'Wenn o dann ein Attachment ist

dann

- auf Laufwerk C lösen
- entfernen
- Doc speichern
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: Axel am 16.12.05 - 21:27:06
Wo genau kommt die Fehlermeldung. Lass mal den Debugger zu Wort kommen. Da siehst du dann wo's knallt.


Axel
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: koehlerbv am 16.12.05 - 22:36:35
@Axel: Knallen wird es vermutlich in dem Moment, wo ein RTI ohne embedded objects angefasst wird.
Forall o In rtitem.EmbeddedObjects
kann man nur verwenden, wenn rtitem.EmbeddedObjects nicht empty ist.
Weitere Fehlermöglichkeit, die nicht abgeprüft wirde
Es wird versucht, das Item "Body" zu instantiieren. Dieses muss nicht vorhanden sein. Es wäre hier noch auf rtitem Is Nothing zu prüfen (die Fehlermeldung wäre ohne die Prüfung aber "Object variable not set", ich erwähne das nur der Vollständigkeit halber).

@scipio: "o" ist ein völlig frei wählbarer Bezeichner für die Elemente, die in einer Forall-Schleife durchlaufen werden soll. Das muss also nicht zwangläufig ein eingebettetes Objekt sein und kann natürlich statt "o" auch "Hurz" heissen.

Bernhard
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: scipio am 17.12.05 - 11:07:13
Man kann das o auch hurz nennen? Ist ja erstaunlich.
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: koehlerbv am 17.12.05 - 12:52:32
Aus der DesignerHelp:
Zitat
Hurz is a reference variable (refVar) for the array, list, or collection element. In the body of the ForAll loop, you use refVar to refer to each element of the array, list, or collection named by container. refVar can't have a data type suffix character appended.

Bernhard  ;D
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: sculer am 20.12.05 - 18:21:30
Hallo,
also  dass was der "Koehlerbv" angesprochen hat scheint wohl der Grund zu sein.

Zitat
@Axel: Knallen wird es vermutlich in dem Moment, wo ein RTI ohne embedded objects angefasst wird.
Forall o In rtitem.EmbeddedObjects
kann man nur verwenden, wenn rtitem.EmbeddedObjects nicht empty ist.
Weitere Fehlermöglichkeit, die nicht abgeprüft wirde
Es wird versucht, das Item "Body" zu instantiieren. Dieses muss nicht vorhanden sein. Es wäre hier noch auf rtitem Is Nothing zu prüfen (die Fehlermeldung wäre ohne die Prüfung aber "Object variable not set", ich erwähne das nur der Vollständigkeit halber).

wenn ich da nur Dokumente habe, welche einen Anhang besitzen, läuft das Script einfach durch.

Nun hab ich aber noch die Frage, wie stell ich genau die IF Bedienung`?

der Vorschlag funktioniert ja so nicht, da rtitem ja schon existiert.
rtitem Is Nothing ??

Ich hatte nun mal die Idee
Code
If rtitem.EmbeddedObjects Is Nothing Then
funktioniert jedoch nicht.

Kann bzw. weiß jemand genau mit welchem Befehl und welcher Syntax dies da stehen muss?

Danke
mfg
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: koehlerbv am 20.12.05 - 18:35:46
NotesRichTextItem.EmbeddedObjects gibt ein Array zurück. Wird nichts zurückgegeben, sind sowohl Isarray falsch als auch Isempty wahr.

HTH,
Bernhard
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: sculer am 20.12.05 - 18:51:50
Hallo,

danke erst einmal für die schnelle Antwort

Mein script sieht nun so aus:
Code
	Do Until doc Is Nothing
		Set rtitem = doc.GetFirstItem( "Body" )
		If ( rtitem.Type = RICHTEXT ) Then
			If rtitem.EmbeddedObjects Is array Then
				Forall o In rtitem.EmbeddedObjects
					If ( o.Type = EMBED_ATTACHMENT ) Then
						Call o.ExtractFile( "c:\samples\" & o.Source )
					'Call o.Remove
						Call doc.Save( False, True )
					End If
				End Forall
			End If
		End If
		Set doc=view.GetNextDocument(doc)
	Loop

Jedoch sagt er mir nun hier:
Code
If rtitem.EmbeddedObjects Is array Then

Type mismatch fehler

Ich hab es auch mit dem
"Is empty" probiert
 => kam genau die gleiche Fehlermeldung.

Wenn dies aber ein Array ist, sollte dies doch aber funktionieren1 ??
Vielleicht noch ein Tipp!

DAnke
mfg
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: koehlerbv am 20.12.05 - 19:01:49
Hast Du eigentlich eine DesignerHelp bzw. benutzt diese ?  ;)

If Isarray (rtitem.EmbeddedObjects) Then ...
oder
If Not (Isempty (rtitem.EmbeddedObjects)) Then

HTH,
Bernhard
Titel: Re: Attachment aus einer Mail DB lösen
Beitrag von: sculer am 20.12.05 - 19:30:01
Okay, dies erklärt einiges!
:)

Ja, ich benutze diesen schon, jedoch hab ich halt eben gedacht, dass es die gleiche Syntax wie "is Nothing" ist und hab da auch nicht weiter nachgeschaut.

Ich hatte vielleicht noch eher etwas in die richtung gedacht, dass es kolissioninen zw. rtitem und so kommt und nicht unbedingt an die Syntax.

Hm, aber ich danke dir.

PS: Die Befehle hab ich bisher auch noch nie gebraucht. Vielleicht ein kleiner Trost. :)
Sorry noch einmal
und danke

mfg