Domino 9 und frühere Versionen > ND6: Entwicklung
Gültigkeit von Variablen
koehlerbv:
Markus, Du fütterst uns hier bruchstückhaft mit Informationen, die offensichtlich mit des Pudels Kern nichts zu tun haben. Hinzu kommt Code, der nicht beteiligt sein kann, dann auskommentierte Zeilen etc. pp. - ich sage Dir mit einiger Forenerfahrung voraus: Sowas liest dann keiner mehr.
Was ich in erster Linie nicht verstehe: Warum kaprizierst Du Dich überhaupt auf das Objekt docCheck, was ja nirgendwo als Parameter vorkommt?
Wenn Du Antworten haben willst: Beschreibe logisch nachvollziehbar Dein Konstrukt. Und beschreibe das, was man in solchen Situationen als erstes macht: Was beobachtest Du bei der Codeausführung im Entwanzer?
Bernhard
BigWim:
--- Zitat ---die offensichtlich mit des Pudels Kern nichts zu tun haben
--- Ende Zitat ---
sorry, ich bin mir immer noch unsicher, wann Quellcode, wann Beschreibung, ist zu lang, zu kurz, zu wenig ...
--- Zitat ---Warum kaprizierst Du Dich überhaupt auf das Objekt docCheck, was ja nirgendwo als Parameter vorkommt?
--- Ende Zitat ---
Weil hier der Fehler liegt - definitiv, ich aber nicht erkennen kann warum.
Es scheint ein Unterschied zu machen, ob ich auf diese Weise ein Objekt oder eine Variable benutze. Mir macht es Sorgen, weil es mich zum ersten mal trifft, obwohl zigmal benutzt - und Programmierung sollte ja nicht aus Glück bestehen ...
--- Zitat ---was man in solchen Situationen als erstes macht:
--- Ende Zitat ---
Ok, ich beschreibe. Von kurz nach lang - und eins nach dem anderen
--- Zitat ---Beschreibe logisch nachvollziehbar Dein Konstrukt
--- Ende Zitat ---
- Für alle Dokumente in einer View sind Fälligkeiten neu zu berechnen.
- Benutze dafür den (für mich) üblichen funktionierenden Code
--- Code: ---Sub BerechneFaelligkeiten
Dim uiws as new notesuiworkspace
Dim viewCheck as notesview
Dim docCheck as notesdocument
Dim db as notesdatabase
set db = uiws.currentdatabase.database
Set viewCheck = db.GetView ("<ViewName>")
Set docCheck = viewCheck.GetFirstDocument
While Not docCheck Is Nothing
Set docCheck = viewCheck.GetNextDocument(docCheck)
Wend
EndSub
--- Ende Code ---
Neue Anforderung an diese Funktion.
- keine hardcodierte View
- Berechnung eines einzelnen Dokuments
Codeerweiterung wie folgt
--- Code: ---Sub BerechneFaelligkeiten [color=blue](docCheck as notesdocument, sViewName as string)[/color]
Dim uiws as new notesuiworkspace
Dim viewCheck as notesview
[s]Dim docCheck as notesdocument[/s]
Dim db as notesdatabase
set db = uiws.currentdatabase.database
[color=blue]
if docCheck is nothing then
[/color]
Set viewCheck = db.GetView ([color=blue]sViewName[/color])
Set docCheck = viewCheck.GetFirstDocument
While Not docCheck Is Nothing
Set docCheck = viewCheck.GetNextDocument(docCheck)
Wend
else
[color=blue]
...
endif
[/color]
EndSub
--- Ende Code ---
Rufe ich Funktion nun auf mit
--- Code: --- Call BerechneFälligkeiten (nothing, "MeineView")
--- Ende Code ---
--- Zitat ---Was beobachtest Du bei der Codeausführung im Entwanzer?
--- Ende Zitat ---
liefert mir
--- Code: --- Set docCheck = viewCheck.GetFirstDocument
--- Ende Code ---
IMMER nothing zurück. Ich bin in der richtigen View, die Anzahl der Dokumente stimmt ....
Ändere ich den Funktionsaufruf wie folgt ab, läuft es fehlerfrei.
--- Code: ---Sub BerechneFaelligkeiten [color=blue]([color=red]docHallo[/color] as notesdocument, sViewName as string)[/color]
Dim uiws as new notesuiworkspace
Dim viewCheck as notesview
[color=blue]Dim docCheck as notesdocument[/color]
Dim db as notesdatabase
set db = uiws.currentdatabase.database
[color=blue]
if [color=red]docHallo[/color] is nothing then
[/color]
Set viewCheck = db.GetView ([color=blue]sViewName[/color])
Set docCheck = viewCheck.GetFirstDocument
While Not docCheck Is Nothing
Set docCheck = viewCheck.GetNextDocument(docCheck)
Wend
else
[color=blue]
...
endif
[/color]
EndSub
--- Ende Code ---
koehlerbv:
Ah - jetzt sehe ich erst den Unterschied zwischen docCheck und docHallo und worauf Du hinaus willst.
Du hebelst hier die Vererbung der Objekte aus (oder versuchst es zumindest). Dein Parameter docCheck kommt von irgendwo her, dann versuchst Du docCheck als Child von NotesView als Child von NotesDatabase zu instantiieren - obwohl Dein Parameter von diesen Vorfahren nichts weiss.
Das kann so also nichts werden.
Bernhard
MadMetzger:
Ich denke es hilft an dieser Stelle die Funktion in zwei Teile zu spalten:
1. Eine Funktion, die die Fälligkeit für ein Dokument berechnet
2. Eine Funktion, die über eine beliebige View iteriert und erstere Funktion verwendet
Damit sparst du dir das eine oder andere if und trennst Iterierlogik von Berechnungslogik. Das führt auch zu etwas besser lesbarem Code.
@Bernhard: Das ist keine Vererbung an der Stelle. Wir hatten das Thema irgendwann schon mal.
BigWim:
Danke Bernhard, für die schnelle Antwort.
Ich hielt das (bis jetzt) für eine kluge Idee, mir ein Dim doc as Notesdocument sparen zu können. Das hier die Vererbung im Spiel ist, war mir nicht bewußt und so ganz verstehe ich das nicht. Muß ich zugeben.
Die Funktion rechnet entweder nur ein Dokument oder eine View neu. Für mich ist "NotesDocument" erst einmal nichts anderes als ein Typ von xy. Und ob die Deklaration nun als Parameterübergabe erfolgt oder innerhalb der Funktion war für mich (bis jetzt) einerlei.
Aber ich glaube Dir auf jeden Fall und tue so etwas nie nie wieder.
Danke für die Bestätigung
Markus
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln