Hallo!
Aus irgendwelchen Gründen funktioniert die Eigenschaft des NotesDocuments "EmbeddedObjects" bei mir nicht.
Ich habe ein Dokument, was auf jeden Fall einen Anhang enthält. Dies kann ich in den Eigenschaften des Dokuments unter %file sehen. Wenn ich versuche in meinem Script die Anhänge anzusprechen, bekomme ich über das Objekt "NotesDocument" eine Fehlermeldung "Type Mismatch".
.......
If form.HasEmbedded Then
print("Dokument hat Anhänge")
Forall test In form.EmbeddedObjects
print( test.Name )
End Forall
Else
print("Dokument hat keine Anhänge")
End If
An der Stelle "Forall" kommt die Fehlermeldung.
PS: Den Ausschnitt habe ich aus der Hilfe entnommen...
Hat jemand eine Idee?
Zunächst vielen Dank für eure Antworten!
Ich versuche den kompletten Ablauf zu schildern:
Ich möchte gerne aus einem Webmaske mehrere Anhänge einfügen (z. Z. sind es vier Auswahlfelder). Dies mache ich über die folgende HTML-Befehle:
<Input Type="file" name="%%File.1" size="35" title="Hier Datei auswählen"/> <br />
<Input Type="file" name="%%File.2" size="35" title="Hier Datei auswählen"/> <br />
<Input Type="file" name="%%File.3" size="35" title="Hier Datei auswählen"/> <br />
<Input Type="file" name="%%File.4" size="35" title="Hier Datei auswählen"/> <br />
Anschließend läuft im Web-Querysave ein Agent, der die Anhänge im Dateinamen umbennen soll. Es soll ein bestimmter Suffix an jeder Datei angehängt werden.
Ich wollte zunächst gerne ausprobieren, ob es generell funktioniert, daher ist der Agent zunächst von der Komplexität auch gar nicht groß.
In dem Agenten versuchte ich zunächst zu prüfen, ob überhaupt Anhänge im Dokumente vorhanden sind. Anschließend wollte ich alle angefügten Anhänge durchgehen und prüfen. Allerdings bekomme ich den Fehler Type mismatch (13) in der Zeile ... Forall test In form.EmbeddedObjects
Sub Initialize
On Error Goto Fehler
Dim s As New NotesSession
Dim thisdb As NotesDatabase
Dim context As NotesDocument
Dim form As NotesDocument
Set context = s.DocumentContext
Set thisdb = s.CurrentDatabase
print ("Agent gestartet!")
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'Umwandeln zu einem Formular
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Set form = convertContext2Form(context)
If form.HasEmbedded Then
print ("Dokument hat Anhänge")
Forall test In form.EmbeddedObjects
print (test.Name )
End Forall
Else
print ("Dokument hat keine Anhänge")
End If
Exit Sub
Fehler:
print ("Agent: WQS\Testanhang\" + Cstr(Getthreadinfo(1)))
Exit Sub
End Sub
Funktion: convertContext2Form(context)
Function convertContext2Form(context As NotesDocument) As NotesDocument
On Error Goto Fehler
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'verwandelt das Contextdokument zum form-Dokument
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
With context
Call .ReplaceItemValue("Form", "ABUS")
Call .ReplaceItemValue("formid", .UniversalID)
Call .ReplaceItemValue("status", 1)
Call .ReplaceItemValue("SaveOptions", "1")
Call .ReplaceItemValue("Created", Cstr(Now))
End With
Set convertContext2Form= context
Exit Function
Fehler:
Print("Agent: (WQS)\TestAnhang\" + Cstr(Getthreadinfo(1)))
Exit Function
End Function
Interessant ist auf jeden Fall, dass der Agent in die True-Verzweigung der IF-Anweisung rein springt (If form.HasEmbedded Then), also merkt er ja, dass das Dokument Anhänge enthält....
....Als das nicht funktionierte und ich nicht weiter kam, habe ich einen weiteren Testagenten erstellt, der über das gespeicherte Dokument, das ich zuvor über das Web erstellt habe, durchgeht und prüft, ob Anhänge vorhanden sind und mir in einer Messagebox die Namen der Anhänge ausgibt.
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim doc As NotesDocument
Dim test As Variant
Set db = s.CurrentDatabase
Set col = db.UnprocessedDocuments
Set doc = col.GetfirstDocument
If doc.HasEmbedded Then
Forall o In doc.EmbeddedObjects
Messagebox( o.Name )
End Forall
Else
Messagebox "No embedded objects found"
End If
End Sub
Das Bsp. des Scripts habe ich aus der Designer-Hilfe entnommen. Hier wird die gleiche Fehlermeldung "Type mismatch" an gleichen Stelle ausgegeben...
War die Noteshilfe nicht das Teil, bei welchem in R5 die @Command Befehle immer übersetzt waren mit @Befehl und die Teile bei denen man bei Lotus selbst nicht wusste für was sie sind, immer nur erschreckend kurz und immer stur gleich behandelt wurden?
;D
Kann es sein, das Du nur ein EmbeddedObject im Dokument hast?
In diesem Falle würde
Forall o In doc.EmbeddedObjects
nicht auf ein Array zugreifen.
Ist das die Zeile bei welcher der Fehler auftritt?