Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Colibri am 08.07.04 - 17:04:20
-
Hallo,
habe folgenden code in einer Maskenaktion
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim maildb As New NotesDatabase("","")
Dim maildoc As Notesdocument
Dim mailuidoc As Notesuidocument
Dim uidoc As NotesUIDocument
Dim wordobj As Variant
Dim obj As NotesEmbeddedObject
Dim rtitem As NotesRichTextItem
Dim temp As String
Set uidoc = ws.currentdocument
Call uidoc.Refresh(True)
Call uidoc.save
temp = Environ$ ("temp")
Set wordobj = uidoc.GetObject( "Word" )
wordobj.SaveAs(temp + "\dokument.doc")
Call uidoc.close
Call maildb.openmail
Set maildoc = maildb.CreateDocument
maildoc.Form = "Memo"
Set rtitem = New NotesRichTextItem(maildoc, "body")
Set obj = rtitem.EmbedObject(EMBED_ATTACHMENT, "" , temp + "\dokument.doc")
Set mailuidoc = ws.EditDocument(True, maildoc)
End Sub
An 30 PC's funktiniert das Problemlos, aber an 4 kommt die Fehlermeldung "Variant does not contains an object" und zwar bei der Zeile wordobj.SaveAs(temp + "\dokument.doc") Auf allen PC's ist Word 2000 installiert, das Betriebssystem ist Win2000 oder WinXP. Woran könnte das liegen?
-
Das sieht stark nach einer unvollständigen Installation von Word aus - das OS weiss mit dem Object "Word" nix anzufangen.
Bernhard
-
Hallo Colibri,
hast Du bei den 4 PCs mal nachgeschaut, ob die die Umgebungsvariable "temp" überhaupt gesetzt haben?
Einstellungen -> Systemsteuerung -> System -> Erweitert -> Umgebungsvariablen
Gibt es dort einen Eintrag ala TEMP = C:\WINNT\TEMP
HTH
Thomas
-
@Thomas:
Das kann's nicht sein, denn die Variable temp ist ein String und kein Variant. Ausserdem würde Environ$ einen Leerstring im von Dir skizzierten Szenario liefern.
Nicht instantiiert lt. Fehlermeldung ist "wordobj" ...
Bernhard
-
Na ja, das ist die eine Variante, es kann ja auch sein, dass Word selber einen Fehler macht. Könnte mir vorstellen, dass in den 4 Installationen Word so eingestellt ist, dass beim Oeffnen nicht automatisch ein leeres Doc aufgeht, und dann könnte das Wordobj das Dokument mangels Existenz nicht speichern. Weiss nicht, was dann für ein Fehler kommt, aber Objekt nicht vorhanden wäre da durchaus logisch.
Colibri: was sagt den der Debugger zur Variablen Wordobj, ist die instantiiert? Du könntest ja mal nach dem
Set wordobj = uidoc.GetObject( "Word" )
noch so etwas einsetzen:
if wordobj is nothing then
Print "Objekt konnte nicht erstellt werden"
exit sub
End if
oder sowas ähnliches.
-
@Bernhard,
vielen Dank für den Hinweis, da habe ich wohl die Designer-Hilfe falsch interpretiert.
If you specify the environment variable by name with environName, LotusScript returns the value of the specified environment variable. If that environment variable is not found, LotusScript returns the empty string (""). If environName is the empty string or evaluates to NULL or EMPTY, LotusScript generates an error.
Viele Grüße
Thomas
-
@Bernhard,
vielen Dank für den Hinweis, da habe ich wohl die Designer-Hilfe falsch interpretiert.
Sowas ist mir auch schon etliche Male passiert - mittlerweile liest man Dokus mit den gewonnenen Erfahrungen eben "leichter" ;)
Und die Fehlermeldungen passen dann auch in den allermeisten Fällen - siehe dieser Fall.
Bernhard
-
Hallo,
vielen Dank erstmal für die Antworten. Kann wegen Zeitverschiebung erst heute nachmittag wieder auf die PC's zugreifen wo's nicht geht.
@Bernhard
Ich habe an einem der PC's das komplette Office schon neu installiert, und alle updates via MS-Homepage gemacht, hat aber nichts gebracht. Auserdem habe ich in der selben Anwendung eine Ansichtenaktion die folgendes macht (Code nur auszugsweise)
'Vorlage holen und nach temp kopieren
temp = Environ$ ("temp")
Set view = db.getView("2.2")
Set doc = view.GetDocumentByKey("brief",True)
Set object = doc.GetAttachment("brief.doc")
Call object.ExtractFile(temp + "\temp.doc")
'Vorlage als Objekt in das neue Dokument kopieren
Set uidoc = ws.ComposeDocument("","","word")
Call uidoc.GotoField( "Body" )
Call uidoc.CreateObject("Word","", temp + "\temp.doc")
Set wordobj = uidoc.GetObject( "Word" )
Diese Code funktioniert an allen PC's problemlos :-\
@Thomas
An der temp Variable liegt es nicht, ich habe es auch schon mit einem festen Pfad versucht, klappt auch nicht :(
@Semeaphoros
Das werde ich mal veruschen, weist Du zufällig wo Ich in Word einstellen kann, ob es mit leerem Dokument aufgeht oder nicht.
-
Weiss nicht, obs eine Option, die man einstellen kann, gibt, dort, wo ich das im Einsatz gesehen habe, wird das über einen Schalter beim Aufstarten von Word gemacht, ist also im Icon hinterlegt. Du kannst das aber einfach umgehen, wenn Deine Wordobj-Variable belegt ist, dann erzeuge doch als allererstes ein neues Dokument in Word und mache dann weiter.
-
Hi,
dafür gibt es keine Option.
Bei uns wird das auch über den Startparameter /N gemacht. Dieser wird wie Semeaphoros schon geschrieben hat, beim Icon hinterlegt.
Axel
-
@Semeaphoros
Hmmm, wenn es dafür keine Option gibt, sondern nur im Icon hinterlegt ist, kann das ja aber nicht mein Problem sein an den 4 PC's, oder?
-
Vergiss nicht, das ist Microsoft ...........
Ich würd jetzt trotzdem damit rechnen und überprüfen, ob tatsächlich ein Doc offen ist oder nicht.
-
Habe jetzt wieder Zugriff auf einen der PC's wo's nicht geht.
if wordobj is nothing then
Print "Objekt konnte nicht erstellt werden"
exit sub
End if
Das bringt eine type mismatch, aber laut debugger ist das wordobj leer
Die Sache mit Word habe ich auch geprüft, Word startet an diesem PC wie an jedem anderen, mit einem leeren Dokument.
Noch jemand eine Idee?
-
gerade habe ich festgestellt, daß an diesem PC folgendes auch nicht klappt:
Ich habe das NotesDocument geöffnet. Wenn ich jetzt mit der rechten Maustaste auf des Object klicke und den Befehl "open" auswähle, kommt folgende Fehlermeldung "An error has occured while processing a request on an object" An einem anderen PC wird das gleiche Worddokument problemlos geöffnet. :-\
-
Dann ist entweder Word nicht korrekt als COM-Server registriert - versuche mal, in einem RT-Feld "Erstellen" - "Objekt", dann siehst Du gleich, obs da ist - oder in der notes.ini stimmt etwas nicht mit der Liste, die dort drin ist. Sorry, kann nicht auswendig sagen, welche ini-Variablen da r-elefant sind
-
Also die Notes.ini habe ich jetzt verglichen. Alle Zeilen mit Word sind gleich wie an einem PC wo's geht. Ich kann zwar ein Wordobject in einem rtFeld erstellen, das Notesdokument dann aber nicht speichern.
Was auch komisch ist, in der Menuleiste von Notes steht normalerweise (wenn man ein Dokument anklick) Dokument. An diesem PC steht in der Menuleiste aber Word.Document.8
Ich werde an diesem PC jetzt wohl das Office mal neu installieren lassen, vielleicht hilft das.
Danke und ein schönes WE
-
Das ist genau das, was mich die ganze Zeit gewundert hat: Warum funktioniert bei Dir überhaupt ein GetObject ("Word"). Leider hatte ich nicht genug Zeit, mich hier in für mich (noch) etwas unsicheres Terrain zu begeben:
Muss es denn nicht heissen:
Set wordobject = uidoc.GetObject ("Word.Application") bzw.
Set wordobject = uidoc.GetObject ("Word.Application.8") bzw.
Set wordobject = uidoc.GetObject ("Word.Application.9")
Das scheint mir - wie Jens es ja schon schrieb - ein Problem auf OS-Seite (Registry) bei Euch zu sein.
Such mal spassenshalber hier nach "GetObject" und dann nach "Word". Dann verdichtet sich das mit meinem Verdacht, das "Word" alleine nicht ausreicht, um der Registry die notwendigen Informationen für das COM-Objekt zu entlocken.
HTH,
Bernhard
-
Du kannst eingebetteten Objekten einen Namen geben.
Über den Namen kannst du sie dann ansprechen.
Wenn das Objekt "Word" heißt, dann is es ok.
Mit der GetObjekt-Methode der NotesUIDocument-Klasse holst du dir ein Handle auf ein Objekt, das im Dokument ist.
Mit der LS-Funktion GetObject holst du dir ein Handle auf ein Objekt, das außerhalb deines UIDocs ist.
Also GetObject("Word.Application") holt die ein Handle auf eine geöffnete Word-Anwendung (oder auch nicht, wenn keine offen ist)
-
Hab auch das Gefühl, dass die Registry hier verschossen ist, ob das aber mit einer Neuinstallation behoben wird, ist fraglich, da MS die Registry bekanntlich nicht aufräumt.
-
Es hat geklappt ;D mein Hilfsadmin vor Ort hat das Office deinstalliert und die Registry von Hand aufgeräumt, jetzt funktioniert es.
Vielen Dank an alle die mitgeholfen haben.
Colibri
-
Die Rehschizophrenie von Hand aufzuräumen war bestimmt ein weiser Entschluss ...