Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Hedwig14 am 15.07.11 - 15:54:31

Titel: Dateianhänge lösen
Beitrag von: Hedwig14 am 15.07.11 - 15:54:31
Hallo !
ich habe ein kleines Problem.
Ich möchte per Script bei ca 200 Documenten die Dateianhänge lösen.
Nun werden die Anhänge aber nicht im Richtext-Feld "Body" gespeichert sondern in "$File". Daher passt mein Script leider nicht ! Wie muss ich das Scipt jetzt umschreiben ???


While Not(doc Is Nothing)
'Set rtitem = doc.GetFirstItem( "Body" )
Set rtitem = doc.GetFirstItem( "$FILE" )

If ( rtitem.Type = RICHTEXT ) Then
 Forall o In rtitem.EmbeddedObjects
   If ( o.Type = EMBED_ATTACHMENT ) Then
   datei = o.name            
   fileCount = fileCount + 1
   Call o.ExtractFile    ( pfad + datei)
  'Call o.Remove
  'Call doc.Save( True, True )
End If
End Forall
End If
Call session.UpdateProcessedDoc( doc )
Set doc = collection.GetNextDocument(doc)
Wend
Titel: Re: Dateianhänge lösen
Beitrag von: Tode am 15.07.11 - 16:08:21
Attachments sind immer in "$File"... die Frage ist: Wie kommen sie dahin... Meist sind sie in einerm Richtextfeld angehängt, dann ist Dein Code mit set rtitem = doc.GetFirstItem( "Body" ) korrekt...

Manchmal sind Attachments aber auch direct ans Dokument gehängt, dann musst Du googeln, weil man an solche Attachments leider nicht über NotesDocument.EmbeddedObjects rankommt (Auszug aus der Designer- Hilfe: "Unlike the EmbeddedObjects property in NotesRichTextItem, this property does not include file attachments, nor OLE/1 objects created in Notes Release 3")..

Manchmal sind Attachments auch als MIME- Element im Dokument drin, dann braucht man wieder anderen Code (gilt für Mails, die aus dem Internet gekommen sind).

Das "sauber" zu handeln erfordert jede Menge Know How... Vielleicht findest Du ja was fertiges, oder einer hier im Forum hat was, aber üblicherweise sind solch komplexe Anforderungen das Kapital, aus dem Dienstleister (ich auch) Ihren Profit ziehen, deshalb kann es durchaus sein, dass Du nichts "für Ummme" findest...

Viel Glück
Titel: Re: Dateianhänge lösen
Beitrag von: Mitch am 15.07.11 - 16:35:17
Wie Torsten gesagt hat: Erstmal gucken ob die nicht in einem anderen Feld hängen. Oder direkt am Dokument (doc.EmbeddedObjects).

Im Notfall könntest du auch mit doc.GetAttachment arbeiten, in der Art von:

Code
	Forall item In doc.Items
		If item.Name = "$FILE" Then
			Set obj = doc.GetAttachment(item.Values(0))
			Call obj.ExtractFile("C:\Temp\" & obj.Source)
			Call obj.Remove
		End If
	End Forall
	Call doc.Save(True, False)

Damit kommt man auch an Attachments dran, die weder in einem Item noch unter doc.EmbeddedObjects hängen (allerdings haben die dann meistens keinen schönen Dateinamen).

Gruß,

Mitch
Titel: Re: Dateianhänge lösen
Beitrag von: koehlerbv am 15.07.11 - 16:40:13
... ob die nicht in einem anderen Feld hängen.

Mitch - Feld ist hier falsch und völlig uninteressant und etwas ganz anderes: Es geht um Items. Ein himmelweiter Unterschied ...

Bernhard
Titel: Re: Dateianhänge lösen
Beitrag von: Mitch am 15.07.11 - 16:50:33
Hast Recht, ich weiß es ja eigentlich auch:

Damit kommt man auch an Attachments dran, die weder in einem Item noch unter doc.EmbeddedObjects hängen (allerdings haben die dann meistens keinen schönen Dateinamen).

Schlechte Angewohnheit... :)
Titel: Re: Dateianhänge lösen
Beitrag von: koehlerbv am 15.07.11 - 16:59:27
Ich seh schon  :)

Sorry für das penetrante Darauf-Herumreiten, aber das ist gerade für Anfänger wie "Hedwig14" u.a. entscheidend, diesen Unterschied genau zu kennen. Man kann Dokumente mit x Masken (und n*x Feldern) bearbeiten, aber in den Items kann etwas anderes stehen, als die Felder erwarten lassen. Es kann weit mehr Items in einem Dokument geben, als in der einen Maske, mit der es gemeinhin erzeugt und bearbeitet wird. Ein Agent kann wieder etwas ganz anderes treiben ...

Das ist wie mit Back- und Frontend: Ohne diese Grundzusammenhänge (und -begriffe!) geht es nicht.

Bernhard