Domino 9 und frühere Versionen > Entwicklung
Attachment speichern
(1/1)
Don Pasquale:
Liebe Gemeinde,
ich versuche ein Attachment auf die Platte zu speichern,
leider bekomme ich eine
"Variant does not contain Object" Fehlermeldung bei
der mit -> markierten Zeile.
Was mache ich falsch ?
Gruß
Don Pasquale
--- Code: ---
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
->Set doc = Current.NotesDocument
Dim rtitem As Variant
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:\temp\" & o.Source )
Call o.Remove
Call doc.Save( False, True )
End If
End Forall
--- Ende Code ---
Rob Green:
Das Document kannst Du so nicht ansprechen.
wenn Du aus dem Frontend kommst, dann
lautet das Fokussieren des Backend-Docs:
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Wenn Du aus dem Backend selbst kommst, mußt Du das zu bearbeitende Doc anders fokussieren. Nehmen wir an, Du hast in einer View das Doc mit einem "Häckchen" gemarked und drückst auf den Action Button, mußt Du über die unprocessed property das Doc arretieren:
(alles aus der Notes Designer Help, btw)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
tue dies tue das
Set doc = collection.GetNextDocument(doc)
Wend
etc...
Das Unprocessed "erkennt" den Haken quasi.
Don Pasquale:
Hi Rob_Green,
danke für deine Hilfe.
Front-End, Back_End, ok da ist noch ein weiter Weg.
Das Abspeichern des Attachments (immer ein tif) soll aus dem geöffneten Formular erfolgen. Front-End ?
Jetzt bekomme ich ein Type Mismatch.
--- Code: ---
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Dim rtitem As Variant
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:\temp\Ablage\1" & o.Source )
Call o.Remove
Call doc.Save( False, True )
End If
End Forall
End If
--- Ende Code ---
Rob Green:
das liegt daran, daß Du wohl das Script bereits hast laufen lassen. Denn beim ersten Lauf ist der Anhang wech, man sieht ihn aber noch optisch, da im $FIle das Attachement noch drin ist.
Mal auf die Schnelle (muß jetzt weg...nachher weiter..eventuell kannste es korrigieren):
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Dim Filename As String
Dim rtitem As Variant
Set rtitem = doc.GetFirstItem( "body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
Filename = o.source
Forall files In doc.items
If files.name = "$FILE" Then
If files.values(0) = Filename Then
Call files.remove
End If
End If
End Forall
Call o.ExtractFile( "c:\temp\" & o.Source )
Call o.Remove
Call doc.Save(True, True )
End If
End Forall
End If
Leider ist nach dem löschen des Eintrags in $FIle auch der spätere Bezug zum o.source weg, wenn man dann noch das Attachement löschen will. Man sollte also vorher o.source ner Variablen übergeben, damit es während des Laufs erhalten bleibt.
Hm..oder auch nicht...mal sehen, aber auf jeden Fall:
Dein Fehler lag hundert pro daran, daß das Script 2x - Nx durchgelaufen ist. Wenn einmal das Attachement weg ist,kommt umgehend der TypeMismatch!!!
Aber Achtung, wie gesagt, der Code ist noch fehlerhaft...wer macht weiter? Ich muß wehc jetzt!
Don Pasquale:
Hi Rob,
danke für die Mühe. Ich habe einfach die If-Schleife auskommentiert und nun funzt es. Und das Attachment bleibt erhalten. Es ist zwar noch nicht _die_ Lösung, aber man kann damit arbeiten.
Danke
Don Pasquale
--- Code: ---
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Dim Filename As String
Dim rtitem As Variant
Set rtitem = doc.GetFirstItem( "body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
Call o.ExtractFile( "c:\temp\ablage\1\" & o.Source )
Call o.Remove
Call doc.Save(True, True )
End Forall
End If
--- Ende Code ---
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln