Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Aladdin Sane am 29.07.04 - 17:01:45

Titel: COM Fehler
Beitrag von: Aladdin Sane am 29.07.04 - 17:01:45
Hallo,

ich versuche über Visual Basic in Excel die COM-Schnittstelle zu Notes auszuprobieren.
Ich habe den erforderlichen Verweis (Lotus DOmino Objects) drin, aber ich bekomme
trotzdem die Fehlermeldung "Unzulässige Benutzung des Schlüsselwortes New" bei der ersten Zeile Code:

Dim s as New NotesSession.

Titel: Re:COM Fehler
Beitrag von: Driri am 29.07.04 - 17:03:33
Ich bin mir nicht sicher, aber ich glaube unter VB gibt es das "New" nicht. Also einfach

Dim s as NotesSession
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 17:04:43
Schick mal den kompletten Code. Wie hast Du von VBA aus das Objekt "Notes" erstellt ?

Bernhard
Titel: Re:COM Fehler
Beitrag von: Aladdin Sane am 29.07.04 - 17:24:04
Die Hilfe des Designers gibt zweiMöglichkeiten an:

1. Dim session as New NotesSession
gibt bei mir den o.g. Fehler

2.  Dim s As NOTESSESSION
    Set s = CreateObject("Lotus.NotesSession")

Hier bekomme ich für Zeile 2 die Fehlermeldung "Das angegebene Modul wurde nicht gefunden".



Hier der ganze code:
   
Sub Warhol()
    Dim s As NOTESSESSION
    Set s = CreateObject("Lotus.NotesSession")
   
    Call s.Initialize
    MsgBox s.CommonUserName, , "Common user name"
End Sub


@koehlerbv:
meinst du mit Objekt "Notes" die NotesSession?
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 18:37:03
Da gibt es jetzt eine Menge Möglichkeiten, was bei Dir schief läuft ...
Ist Notes korrekt in der Registry registriert ?
Hast Du den Code mit dem VBA-Editor auch kompiliert (sonst kriegst Du die von Dir beschriebene Meldung)
Dein NotesObject muss vom Typ Variant sein - NotesSession kennt VBA (logischerweise) als Datentyp nicht.
Dieses Beispiel funktioniert unter den oben genannten Bedingungen auf jeden Fall:
Code
Sub Test()
 Dim s As Variant
 Set s = CreateObject("Lotus.NotesSession")
  
 Call s.Initialize
 MsgBox s.CommonUserName, , "Common user name"

End Sub

HTH,
Bernhard
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 18:38:38
Nachtrag:
Folge mal dem letzten Posting von unserem Anton in folgenden Thread:
http://www.atnotes.de/index.php?board=7;action=display;threadid=9773;start=0 (http://www.atnotes.de/index.php?board=7;action=display;threadid=9773;start=0)

Hilfreich !

Bernhard
Titel: Re:COM Fehler
Beitrag von: Glombi am 29.07.04 - 19:21:31
Mit VB geht es so:

Dim session As NotesSession
Set session = CreateObject("Lotus.NotesSession")
Call session.Initialize

Voraussetzung ist natürlich, das die Lotus Domino Klassen in VB eingebunden werden. Ggf. muss der Pfad für die NOTES.INI im PATH stehen.

Andreas
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 19:32:32
Wie
Code
Dim session As NotesSession
aber in VBA funktionieren sollte, ist mir schleierhaft, Andreas. VBA kennt doch kein Objekt oder keine Variable dieses Typs ...

Bernhard
Titel: Re:COM Fehler
Beitrag von: Glombi am 29.07.04 - 19:55:44
Wie
Code
Dim session As NotesSession
aber in VBA funktionieren sollte, ist mir schleierhaft, Andreas. VBA kennt doch kein Objekt oder keine Variable dieses Typs ...

Bernhard
Daher schrieb ich ja
Voraussetzung ist natürlich, daß die Lotus Domino Klassen in VB eingebunden werden. Ggf. muss der Pfad für die NOTES.INI im PATH stehen.

Ich habe es gerade letzte Woche so progammiert.

Das schöne ist, Du siehst dann im VB Editor alle Methoden und Properties der Notes Objekte.

Andreas
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 20:05:06
Ich glaub', ich hab' jetzt doch einen Filmriss:
Was nützt die NOTES.INI im PATH, wenn VBA mit "NotesSession" erstmal nix anfangen kann ?
Wie teilst Du dem VBA-Code mit, dass es da Notes-Classes gibt, wenn nicht über die Zuweisung der NotesSession an ein VBA-Variant ?

Bernhard
Titel: Re:COM Fehler
Beitrag von: Axel am 29.07.04 - 20:38:13
Wie
Code
Dim session As NotesSession
aber in VBA funktionieren sollte, ist mir schleierhaft, Andreas. VBA kennt doch kein Objekt oder keine Variable dieses Typs ...

Bernhard

Hi,

das funktioniert auch in VBA. Wenn über Extras - Verweise die Lotus Domino Objects eingebunden werden, dann ist auch so eine Dim - Anweisung möglich. Auch brauch der Notes.ini-Pfad nicht im Path zu stehen.

Zitat
Sub Warhol()
    Dim s As NotesSession
   
    Set s = CreateObject("Lotus.NotesSession")
    Call s.Initialize
    MsgBox s.CommonUserName
End Sub

Das habe ich soeben in VBA (als Word-Macro) getestet. Funktioniert einwandfrei. Ich habe in "grauer Vorzeit", noch zu Office 2000 und Notes 4.6 Word-Vorlagen erstellt, in denen es möglich war, von Word aus in einer Notes-Datenbank nach Adressen zu suchen und die entsprechenden Daten zu übernehmen.

@Aladdin Sane
Ich werde das Gefühl nicht los, dass bei dir Notes nicht sauber in der Registry registriert ist. Schau doch mal mit regedit unter HKEY_CLASSES_ROOT nach ob es da die entsprechenden Einträge, Lotus.NotesSession usw. gibt. Es gibt bei mir zusätzlich auch noch Notes.NotesSession. Vielleicht ist der Eintrag bei dir vorhanden. Eines ist sicher, obiger Code funktioniert ohne Probleme.

Axel


 
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 21:09:27
Zitat
Wenn über Extras - Verweise die Lotus Domino Objects eingebunden werden
Aber warum der Krampf ? Dann müsste doch der Anwender vorher diese Settings selbst vornehmen ...
Aber wie gesagt: Ich mag' ja wirklich momentan auf dem Schlauch stehen oder ein Brett vor'm Kopf haben oder beides ...

Bernhard
Titel: Re:COM Fehler
Beitrag von: animate am 29.07.04 - 21:26:01
Ich finde, das ist kein Krampf. Im Gegenteil, ich denke, der Weg über CreateObject ist Karmpf.
In VB (und auch in den dotnet-IDE)  ist es üblich, Bibliotheken auf diese Weise einzubinden. Auch die Standardbibliotheken, die du z. B. in Word-VBA nutzt, sind so eingebunden. Schaus dir mal an.
(Ach so, der Entwickler muss den Verweis machen, der Anwender nicht.)

Bei dir, Alladin, ist evtl. die Notes-Bibliothek nicht registriert.
Um sie zu registrieren musst du folgendes in der Kommandozeile eingeben:

regsvr32 c:\programme\lotus\notes\nlsxbe.dll

Musst halt mal probieren, obs dann geht.
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 22:27:13
Hilf mir bitte mal auf die Sprünge, Thomas.
Ich schicke irgendeinem anderen Notes-User ein Excel-Sheet, und in diesem soll ein Makro auf Notes zugreifen. Wie teile ich VBA mit, dass es mit der Klasse NotesSession etwas anzufangen weiss ? Welches Statement ist da erforderlich ?
Und wo liegt der Nachteil von
Code
Dim s As Variant
Set s = CreateObject("Lotus.NotesSession")

Wie gesagt - ich stehe heute sicherlich auf dem Schlauch und habe viel zu lange immer nur aus der anderen Richtung gearbeitet ...

Merci,
Bernhard
Titel: Re:COM Fehler
Beitrag von: animate am 29.07.04 - 22:45:19
also du erzeugst ein Makro in einem Excel-Sheet.
Da du wießt, dass du die Notes-Bibliothek verwenden willst, machst du das Excel bekannt, in dem du einen Verweis auf diese Bibliothek erstellst (Extras->Verweise... und da dann die Notes-Bibliothek ankreuzen. Weiß nicht genau, wie die heißt. Dort siehst du dann auch, dass die Bibliothek, die dir die Excel-Klassen zur Verfügung stellt, genauso eingebunden ist.)

Du erstellst das Makro und kannst da drin alle Klassen verwenden, die dir die Bibliothek zur Verfügung stellt.

Du schickst die Datei einem User, bei dem die Bibliothek vorhanden ist. Er muss nix tun. Die Verweise auf Bibliotheken werden mit dem Makro gespeichert.

Vorteil ist z.B. Typsicherheit, Auto-Code-Komplettierung (Strg-Space)
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 29.07.04 - 23:24:55
Für mich wird das jetzt doch mehr und mehr zum Krampf. Ich habe hier auf der Test-Kiste absolute Standard-Installationen von Notes und Excel. Mit einem CreateObject habe ich null Probleme - der andere Weg bringt null-komma-nix ("Typen unverträglich" bei session = CreateObject ("Lotus.NotesSession")
Der Verweis auf Notes wurde natürlich vorab eingebunden.

Ansonsten ist ja "mein" Weg über ein Variant nur dadurch unterschiedlich, das die Variable session als Variant und nicht als NotesSession deklariert wurde.

Ich sag's aber nochmal: Ich mag' ja wirklich völlig daneben liegen. Nur: Mein Weg funktioniert, der andere nicht. Was, wenn das dann auch beim Anwender passiert ...

Bernhard (jetzt wirklich sehr gespannt !)
Titel: Re:COM Fehler
Beitrag von: Axel am 30.07.04 - 08:34:07
Hi,

welchen Verweis hast du den eingebunden? Du musst die Lotus Domino Objects einbinden. Dann sollte es funktionieren. Ich hab damit absolut keine Probleme und hatte auch auf allen Rechnern in unserem Unternehmen keine Probleme. Wenn ein Rechner Terror machte war es in der Regel eine nicht oder unsauber registrierte Bibliothek. Nach einer Neuinstallation war die Sache behoben. Die Probleme hast du aber auch, wenn du über CreateObject gehst.

An sonsten kann ich der Argumentation von Thomas voll zustimmen, von wegen Typsicherheit und Codekomplettierung. Das erspart ne Menge Tipparbeit und -fehler.


Axel


Titel: Re:COM Fehler
Beitrag von: Semeaphoros am 30.07.04 - 08:52:36
Also, für alle nur Notes-Koehler-Domino-und-so-Entwickler, das ist ja nicht wirklich VBA-Spezifisch.

Man gehe im Designer in irgend ein LotusScript hinein, klicke links, wo die Objekte aufgelistet sind, auf den Reiter "Referenz" und wähle dort die OLE-Klassen aus. Sofern eine COM-Fähige Applikation korrekt installiert ist, taucht sie und die durch sie zur Verfügung gestellten Objekte hier auf. Verantwortlich dafür ist der von der COM-Technologie zur Verfügung gestellte Object-Broker, der mit gängigen Win-Versionen gleich mitkommt.

Der einzige Unterschied zwischen Notes und VBA ist lediglich, dass VBA es darüber hinaus noch erlaubt, diese Objektbibliotheken an- oder wieder abzuwählen, so dass für den Entwickler die Liste nicht soooo ewig lang wird, wie das sonst in den heutigen Installationen normalerweise der Fall ist. Erleichtert die Uebersicht.
Titel: COM Klassen: late-binding - early-binding / PATH
Beitrag von: Glombi am 30.07.04 - 08:58:21
Ein Aspekt bzgl. des PATH ist noch offen. Hier der entsprechende Auszug aus der Hilfe (daher meine Bemerkung "ggf."):

The Domino COM objects must be able to locate a valid NOTES.INI file, looking first in the Domino or Notes program directory and then at the PATH system variable. The KeyFileName setting in the NOTES.INI file specifies the user ID that COM uses.

Bzgl. Verwendung von
dim s as Variant
vs
dim s as NotesSession

Variant ist late-binding, NotesSession is early-binding.

Hier die Designer Hilfe dazu:
COM provides both early-binding (custom) and late-binding (dispatch) interfaces. Early binding makes the Domino classes available as typed variables with compile-time checking. Late binding can be used where the language (for example, VBScript) precludes early binding.

Creating a session object
To access the Domino Objects, create an object based on the registered Lotus.NotesSession class.
Visual Basic
Include the Domino object library in the Visual Basic project:
Choose Project - References.
Check "Lotus Domino Objects."
The location will show the path to DOMOBJ.TLB in the Domino or Notes program directory.
Alternatively, you can select the Browse button and specify DOMOBJ.TLB in the Domino or Notes program directory.
The Domino Objects then become available to the project. You can see them in the Object Browser and they appear as prompts when you start typing an object name.
The classes appear in the left-hand pane of the browser; the properties and methods appear in the right-hand pane for the selected class. Constants appear in the left-hand pane as Enum data structures; the members appear in the right-hand pane. For example, the Enum structure named ACLLEVEL contains the members ACLLEVEL_AUTHOR, ACLLEVEL_DEPOSITOR, and so on. The error constants appear in the right-hand pane when NOTES_ERRORS is selected in the left-hand pane.
To access the Domino Objects, create a NotesSession object with either:
Dim session As New NotesSession
Or:
Dim session As NotesSession
Set session = CreateObject("Lotus.NotesSession")
Hinweis  If you declare the session variable as Variant or Object, COM uses late binding.

Ich denke, jetzt sollte alles klar sein.

Andreas
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 30.07.04 - 11:47:36
Ich bin ja auch sowas von bescheuert  >:(
Wenn man den Verweis zum falschen Produkt einträgt (Lotus Notes Automation Class statt Lotus Domino Objects), dann kann Excel logischerweise nix machen ...

Jetzt funktionieren jedenfalls beide Varianten "as expected and described".

Merci an alle, die mir das Brett vor'm Kopp abgeschraubt haben,

Bernhard
Titel: Re:COM Fehler
Beitrag von: Aladdin Sane am 30.07.04 - 15:50:44

und bei mir lag's tatsächlich an der Registry...

vielen Dank für die Hilfe, Leute.

pASCAL
Titel: Re:COM Fehler
Beitrag von: koehlerbv am 30.07.04 - 16:00:06
So klärt sich alles auf  :)
Bei Dir die Registry, bei mir der dicke Balken vor der Birne.

Hat das
Zitat
Bei dir, Alladin, ist evtl. die Notes-Bibliothek nicht registriert.
Um sie zu registrieren musst du folgendes in der Kommandozeile eingeben:

regsvr32 c:\programme\lotus\notes\nlsxbe.dll

dann eigentlich bei Dir geholfen oder hast Du anders Hand angelegt ?

Bernhard
Titel: Re:COM Fehler
Beitrag von: Aladdin Sane am 30.07.04 - 16:29:24

Hat genauso geholfen, wie vorgeschlagen - nur ohne Ordner "Programme" bei mir...

regsvr32 c:\lotus\notes\nlsxbe.dll
Titel: Re: COM Klassen: late-binding - early-binding / PATH
Beitrag von: Ringo999 am 19.07.05 - 11:17:10
Ein Aspekt bzgl. des PATH ist noch offen. Hier der entsprechende Auszug aus der Hilfe (daher meine Bemerkung "ggf."):

The Domino COM objects must be able to locate a valid NOTES.INI file, looking first in the Domino or Notes program directory and then at the PATH system variable. The KeyFileName setting in the NOTES.INI file specifies the user ID that COM uses.

Hallo Andreas,

weisst Du ob folgendes möglich ist?

Zitat
Das Problem: Die Clients, auf denen die Anwendung laufen soll, haben einen speziellen Pfad "Userdata" mit Schreibrechten für Dateien wie die NOTES.INI (z.b. c:/userdata/lotusnotes/notes.ini). Dieser Pfad ist nicht in der PATH Umgebungvariable hinterlegt.
Gibt es eine Möglichkeit den DOMINO COM OBJECTS manuell den absoluten Pfad zur NOTES.INI in VBA mitzuteilen (also ohne PATH zu ändern)?

Danke
RINGO
Titel: Re: COM Fehler
Beitrag von: Axel am 19.07.05 - 11:33:57
Frage wurde auch hier gestellt:

http://www.atnotes.de/index.php?topic=24284.msg155872#msg155872


Axel