Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 11.09.02 - 16:32:22

Titel: Attachment speichern
Beitrag von: Don Pasquale am 11.09.02 - 16:32:22
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


Titel: Re: Attachment speichern
Beitrag von: Rob Green am 11.09.02 - 16:41:06
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.
Titel: Re: Attachment speichern
Beitrag von: Don Pasquale am 11.09.02 - 17:36:01
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

Titel: Re: Attachment speichern
Beitrag von: Rob Green am 11.09.02 - 18:21:48
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!
Titel: Re: Attachment speichern
Beitrag von: Don Pasquale am 11.09.02 - 18:43:35
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