Domino 9 und frühere Versionen > ND7: Entwicklung
Wie ScriptVoodoo bekämpfen?
Basti*:
Hallo miteinander!
Ich dreh hier bald am Rad. Ich hab ein Script, das mir Kopfzerbrechen macht.
Was ich bisher weiß:
- Das Script läuft als lokale DB auf meinem 7er Client & Designer-Computer rund. Alles ok.
- Wird es auf den Server gespielt (8.5er o.s.ä.), fliegt es aus der Kurve.
- Die Fehler-Meldung: Function requires a valid ADT argument.
- Schalte ich den Debugger ein und hangel mich mehr oder weniger manuel von Zeile zu Zeile, läuft das Script mal durch und mal nicht.
Das Teil-Script, wo er rausfliegt:
.................................................
:
:
Set db = session.CurrentDatabase
Set view = db.GetView(viewname)
Set vc = view.AllEntries
Set entry = vc.GetFirstEntry()
While Not (entry Is Nothing)
Set doc = entry.Document
>>> Call dc.AddDocument(doc) <<<
Set entry = vc.GetNextEntry(entry)
Wend
:
:
.................................................
Der Debugger zeigt, dass das doc auch wirklich leer ist. Aber entry ist nicht leer! Wie kann das sein!? Entweder ich habe ein Dokument in der Ansicht, dann gibt es ein Entry und dann müsste ich darüber wieder das Doc bekommen. Oder es gibt kein Document, dann gibt es auch keinen Entry und dann will ich ja auch kein Dokument haben. Was hab ich hier falsch verstanden?!
Kleine Anmerkung:
vc.Count (ViewEntryCollection) = 5000
entry.ISDOCUMENT = TRUE
Und wie kann es sein, dass der Fehler mal auftritt und mal nicht? Ich hab leider noch keine Gesetztmäßigkeit gefunden. Ich dachte erst, wenn ich das Script als ganzes laufen lasse, gehts schief und wenn ich es Step-By-Step durchklicke, geht es gut. Aber das stimmt nun wohl doch nicht.
Hat jemand da einen Tipp, wie ich dem Übel auf die Spur kommen kann?
Basti
m3:
--- Zitat ---This error occurs when a LotusScript function or method is supplied a parameter that does not evaluate to the expected object value - it has been passed an invalid argument. Some reasons this error could occur would be because the object was not set, it was deleted or moved, or it was incorrectly specified in an earlier reference.
...
In most cases, this error can be avoided by adding conditionals, or revising code logic, to ensure that an attempt to access a deleted object, or an object with a value of Nothing, is avoided.
--- Ende Zitat ---
http://www-01.ibm.com/support/docview.wss?uid=swg21316690
Siehe auch http://www-01.ibm.com/support/docview.wss?uid=swg21093032
Peter Klett:
Hast Du es mal ohne Entry probiert?
Set db = session.CurrentDatabase
Set view = db.GetView(viewname)
Set doc = view.GetFirstDocument()
While Not (doc Is Nothing)
>>> Call dc.AddDocument(doc) <<<
Set doc = view.GetNextDocument (doc)
Wend
Ist auch kürzer.
Eine Fehlerursache könnten Lesersteuerungen sein. Vielleicht wird ein Entry gefunden, aber für das dazugehörige Dokument fehlt der Lesezugriff (nur so aus dem Bauch, habe noch nie diese Methode benutzt).
Driri:
Das ist aber keine kategorisiert View oder ?
Weil View Entries sind auch Kategoriezeilen und Summen. Prüf doch zur Not einfach mit entry.IsDocument ab, ob es tatsächlich ein Dokument ist.
Basti*:
Guten Morgen zusammen!
Vielen Dank für eure Tipps :) Die klingen gut. Werd ich gleich mal austesten.
Basti
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln