Autor Thema: NotesSession in einer Klasse  (Gelesen 2042 mal)

Offline Aladdin Sane

  • Aktives Mitglied
  • ***
  • Beiträge: 181
  • Geschlecht: Männlich
  • Sowieso...
NotesSession in einer Klasse
« am: 04.04.05 - 15:35:53 »
Hallo,

ich habe folgende Klasse gebaut:

01 Class Class_Mail
02 Private session       As NotesSession
03      
04 Sub new( )
05   Dim session       As New NotesSession   
06   Set db      = session.currentdatabase
07 End Sub
...


Obwohl ich session für die ganze Klasse deklariere, ist der Eintrag in Zeile 05 nötig,
sonst kommt es zur Fehlermeldung "Object Variable Not set" bem Erzeugen eines Objektes.
   
Weiß jemand warum?

pASCAL

« Letzte Änderung: 04.04.05 - 15:43:09 von Aladdin Sane »

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: NotesSession in einer Klasse
« Antwort #1 am: 04.04.05 - 15:43:42 »
Hi,

... und wo ist das Problem oder die Frage?   ??? ???


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Aladdin Sane

  • Aktives Mitglied
  • ***
  • Beiträge: 181
  • Geschlecht: Männlich
  • Sowieso...
Re: NotesSession in einer Klasse
« Antwort #2 am: 04.04.05 - 15:45:11 »
Hoppla...

Eintrag war noch gar nicht fertig.... jetzt aber.

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: NotesSession in einer Klasse
« Antwort #3 am: 04.04.05 - 15:49:59 »
du musst das NotesSession-Objekt mit dem Konstruktor new erzeugen

Achtung: bei dir ist session (05) im Konstruktor was anderes als deine Instanzvariable session (02)

die Zeile 05 müsste so heißen:
Set session = New NotesSession
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: NotesSession in einer Klasse
« Antwort #4 am: 04.04.05 - 15:51:14 »
Das lässt sich mit einem Quote aus der Entwicklungs-Hilfe leicht beantworten:
Zitat
Declarations do not produce executable code.
The result of a declaration is information about a procedure, a variable, or a constant; for example, its type, dimensions, or value. This governs the behavior of the script that uses the declared item; but the declaration itself is not executed when the script runs.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: NotesSession in einer Klasse
« Antwort #5 am: 04.04.05 - 15:51:31 »
Hi,

ist ja klar. Du hast zwar in Zeile 2 die Variable deklariert, aber nicht initialisiert.

Du kannst das aber auch so machen:

Set session = New NotesSession  

Du brauchst hier kein DIM mehr.


Axel


Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Aladdin Sane

  • Aktives Mitglied
  • ***
  • Beiträge: 181
  • Geschlecht: Männlich
  • Sowieso...
Re: NotesSession in einer Klasse
« Antwort #6 am: 04.04.05 - 16:02:04 »
Okay, vielen Dank.

Aber wenn ich den folgenen Code außerhalb einer Klasse kompiliere, funktioniert es:

Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.currentdatabase


Marinero Atlántico

  • Gast
Re: NotesSession in einer Klasse
« Antwort #7 am: 04.04.05 - 16:11:46 »

Du brauchst hier kein DIM mehr.

Wie von Thomas richtig gesagt, führt das dim sogar zu einem "Variable Shadowing", d.h. du legst eine lokale (d.h. lokal im Konstruktor deklarierte Variable an, die die Instanzvariable überdeckt. Solche dinge haben mich mal sehr verwirrt.
In Lotusscript kann man glaub ich Instanzvariablen nicht direkt deklarieren und instantiieren (was in Java geht). In nicht-OO Lotusscript geht es auch (wie du gezeigt hast).
Code
private session = new notessession() ' does not work

deshalb:
Code
private session as NotesSession 'deklarieren

sub new() 
Set session = new NotesSession() ' instantiieren. 
end sub

Traditionell war es der Sinn von KOnstruktoren deklarierte Instanzvariablen zu initialisieren.
ESOTERISCH_START
Mit heutigen auf Modularität ausgerichteter OO Praxis (sehr starK: Inversion Of control) hat sich das explizite initialisieren von Variablen in Konstruktoren als unmodular herausgestellt. Das ist aber ein ganz anderer Gedanke.
ESOTERISCH_END

Sofern du dir in deinem Kopf Klarheit bzgl. der Begrifflichkeit von:
- Deklarieren
- Initialisieren
schaffst, dürfte es kein problem mehr machen.
« Letzte Änderung: 04.04.05 - 16:14:48 von Marinero Atlántico »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz