Bernhard, ich konnte gerade denselben Fehler feststellen (Fenster bleibt leer).
Wenn ich dann 3 Msgboxes hinzufüge im Postopen, dann geht es.
Sub Postopen(Source As Notesuidocument)
Dim doc As NotesDocument
Dim adobe As Variant
Dim rtItem As Variant
Dim strWinTemp As String
Dim strStartPDF As String
If Source.EditMode = True Then Exit Sub 'Exit wenn Dok in Bearbeitung
Set doc= Source.Document
Set adobe = Source.GetObject("Acrobat Control for ActiveX")
Set rtItem = doc.GetFirstItem("PDF")
strWinTemp = WinTemp 'see function.....
Msgbox "strWinTemp"
Forall obj In rtItem.EmbeddedObjects
If (obj.Type=Embed_Attachment) Then
Call obj.ExtractFile(strWinTemp & "\" & obj.Source)
Msgbox "Extrahiert"
adobe.LoadFile(strWinTemp & "\" & obj.Name)
Msgbox "Geladen"
End If
End Forall
End Sub
Wohl ein Timing-Problem? Vielleicht sollte man einen sleep einbauen..... ??
Matthias
Ich kriege einen Klaps - das ActiveX-Control will wirklich, dass vorher irgendwas im FrontEnd passiert !
Mit folgendem Code im PostOpen geht es sich - dazu muss man sich noch eine Maske "(DummyForm") basteln, und die Adobe-Maske sollte die Vorgabemaske sein.
Sub Postopen(Source As Notesuidocument)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim dbCurrent As NotesDatabase
Dim docTemp As NotesDocument
Dim uidocTemp As NotesUIDocument
Dim doc As NotesDocument
Dim adobe As Variant
Dim rtItem As NotesRichTextItem
Dim strWinTemp As String
Dim strStartPDF As String
On Error Goto ErrorRoutine
If Source.EditMode = True Then Exit Sub 'Exit wenn Dok in Bearbeitung
Set doc= Source.Document
Set adobe = Source.GetObject("Acrobat Control for ActiveX")
Set rtItem = doc.GetFirstItem ("PDF")
strWinTemp = WinTemp 'see function.....
'Msgbox "strWinTemp"
Forall obj In rtItem.EmbeddedObjects
If (obj.Type=Embed_Attachment) Then
Call obj.ExtractFile(strWinTemp & "\" & obj.Source)
'Sleep (5)
'Msgbox "Extrahiert"
Set dbCurrent = session.CurrentDatabase
Set docTemp = dbCurrent.CreateDocument
docTemp.Form = "(DummyForm)"
Set uidocTemp = ws.EditDocument (False, docTemp, True)
Call uidocTemp.Close
adobe.LoadFile(strWinTemp & "\" & obj.Name)
'Msgbox "Geladen"
End If
End Forall
Exit Sub
ErrorRoutine:
Msgbox "An error occured: " & Error$ & " (in line " & Cstr (Erl) & ")"
Exit Sub
End Sub
Mal sehen, ob dafür einer eine logische Begründung findet ...
By the way: Hilft das eigentlich bei der ursprünglichen Frage dieses Threads ? Unschön ist auch die Bedienung, um aus dem PDF wieder back to Notes zu kommen - die meisten Anwender werden da wohl aus Versehen Notes schliessen anstatt Adobe Acrobat Reader (mit Babelfish: "Lehmziegel Turner Leser" ;-) zu schliessen. Aber die Idee an sich hat was.
Ciao,
Bernhard
An sich wäre es ja nett, wenn man die sowieso vorhandene Form "Adobe" für NotesUIWorkspace.EditDocument gleich verwenden könnte. Aber hier gilt:
"Wer ander'n eine Gräbe grubt,
sich selber in die Nase pupt !"
Damit wird ja gleich wieder das PostOpen der zu öffnenden Maske ausgeführt ...
Geht schon:
Sub Postopen(Source As Notesuidocument)
On Error Goto errHandler
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim dbCurrent As NotesDatabase
Dim docTemp As NotesDocument
Dim uidocTemp As NotesUIDocument
Dim doc As NotesDocument
Dim adobe As Variant
Dim rti As NotesRichTextItem
Dim strWinTemp As String
Dim strStartPDF As String
Dim oFirst As NotesEmbeddedObject
If Source.EditMode = True Then Exit Sub 'Exit wenn Dok in Bearbeitung
Set doc= Source.Document
If source.FieldGetText("TempFlag") = "1" Then Exit Sub
Set adobe = Source.GetObject("Acrobat Control for ActiveX")
Set rti = doc.GetFirstItem("PDF")
Set oFirst = rti.EmbeddedObjects(0)
If oFirst Is Nothing Then
Msgbox "No embedded object in document"
Exit Sub
End If
strWinTemp = WinTemp 'see function.....
Call oFirst.ExtractFile(strWinTemp & "\" & oFirst.Source)
Set dbCurrent = session.CurrentDatabase
Set docTemp = dbCurrent.CreateDocument
docTemp.Form = "Adobe"
docTemp.TempFlag = "1"
Set uidocTemp = ws.EditDocument (False, docTemp, True)
Call uidocTemp.Close
adobe.LoadFile(strWinTemp & "\" & oFirst.Name)
exitScript:
Exit Sub
errHandler:
Msgbox "An error occured." & Chr(10) & Chr(10) _
& "Error text: " & Error$ & Chr(10) _
& "Error number: " & Err & Chr(10) _
& "Line: " & Erl & Chr(10) _
,64,"Error"
Resume exitScript
End Sub
Bitte nicht erschrecken, ist mein Baustellen-Code zum testen :-)
Ich habe in der Maske ein Hidden-Field "TempFlag".
So klappt es jetzt lt. den ersten Tests :)
Matthias
cool, vielen Dank Bernhard 8)
Habe das Errorhandling entsprechend aktualisiert (und mich für einen etwas milderen Text entschieden :-)):
Case 8495 'Adobe Acrobat Reader is not installed
Msgbox "Please install Adobe Reader for viewing this file, see http://www.adobe.com .... ", 64, "Info"
Call Source.close
Resume exitScript
Matthias