Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: JanHoener am 30.04.05 - 19:07:09

Titel: Function requires a valid ADT argument
Beitrag von: JanHoener am 30.04.05 - 19:07:09
hallo zusammen.
ich habe folgendes Script:
Sub Initialize
   Dim s As New notessession
   Dim db As notesdatabase
   Dim col As notesdocumentcollection
   Dim docLoop As notesdocument
   Dim docWork As notesdocument
   Set db=s.currentdatabase
   Set col=db.alldocuments
   Set doc=col.getfirstdocument
   While Not doc Is Nothing
      Set docWork=docLoop
      Set docLoop=col.getnextdocument(docWork)
      If docWork.form(0)={Album} Then
         docWork.AltInterpretSort=Metaphon(docWork.Interpret(0))
         Call docWork.save(True,True)
      End If
   Wend
End Sub

Dies ist angepasst und von http://www.sns1.de/partner/flamme/wflamme.nsf/Shortcut/Klangfarben?OpenDocument&ExpandSection=2#_Section2 übernommen.
Meine Anpassungen: ich möchte auf die Maske "Album" zugreifen, das zu Prüfende Feld heißt "Interpret" und geschrieben wird in das Feld "AltInterpretSort".

Was mache ich falsch?
Titel: Re: Function requires a valid ADT argument
Beitrag von: Marinero Atlántico am 30.04.05 - 19:17:26
Kein Errorhandling.
Dann könntest du nämlich sehen in welcher Zeile dieser Fehler auftritt:
Probier das mal:
Code
Sub Initialize
on Error goto ABJETZTBENUTZEICHIMMERERRORHANDLING
   Dim s As New notessession
   Dim db As notesdatabase
   Dim col As notesdocumentcollection
   Dim docLoop As notesdocument
   Dim docWork As notesdocument
   Set db=s.currentdatabase
   Set col=db.alldocuments
   Set doc=col.getfirstdocument
   While Not doc Is Nothing
      Set docWork=docLoop
      Set docLoop=col.getnextdocument(docWork)
      If docWork.form(0)={Album} Then
         docWork.AltInterpretSort=Metaphon(docWork.Interpret(0))
         Call docWork.save(True,True)
      End If
   Wend
exit sub
ABJETZTBENUTZEICHIMMERERRORHANDLING:
print |Fehler in --Name-- | & Error$ & "(" & Cstr(Err) & ") in Zeile:" & Cstr(Erl)
exit sub
End Sub
Titel: Re: Function requires a valid ADT argument
Beitrag von: JanHoener am 30.04.05 - 19:21:07
er sagt mir fehler in zeile 13...und nun?
Titel: Re: Function requires a valid ADT argument
Beitrag von: TMC am 30.04.05 - 19:34:58
docLoop ist hier wohl "Nothing".
Die doc - Variable hast Du gar nicht deklariert.

Auf den ersten Blick musst Du mal Deine Variablen-Bezeichnungen checken.
Titel: Re: Function requires a valid ADT argument
Beitrag von: koehlerbv am 30.04.05 - 19:38:54
Und mit Option Declare wäre das nicht passiert ...
Titel: Re: Function requires a valid ADT argument
Beitrag von: Marinero Atlántico am 30.04.05 - 19:47:43
er sagt mir fehler in zeile 13...und nun?
Das hättest du auf die entsprechende Zeile mappen können.
So mußte Mathias die Zeilen durchzählen.
Ist jetzt nicht persönlich gemeint, aber wenn du das Ergebnis dieses Threads ernst nimmst, hast du eine Menge gelernt.
Viel wichtiger als ein enzyklypodisches Wissen über die Bedeutung jeder Fehlermeldung ist eine entsprechende Arbeitsmethodik. Meine Kunden kapieren das auch nicht, aber die Anzahl der Fehlermeldungen aus einer Computerplattform ist größer als das menschliche Gedächtnisvermögen.
Was kostet Zeit: Einen Fehler zu lokalisieren oder einen Fehler zu beheben?
Einen Fehler zu lokalisieren.
Wie kannst du den Fehler lokalisieren?
Durch die Zeile, die ich gepostet habe.

Aus deinem Code direkt ging der Fehler unbedingt gar nicht hervor. Man mußte die Nebenannahme machen, dass du in die Option-Sektion des Skripts kein Option Declare geschrieben hast, was die meisten machen und eine best practice ist.

Gruß Axel
Titel: Re: Function requires a valid ADT argument
Beitrag von: JanHoener am 30.04.05 - 19:49:26
Was meint ihr mit Option Declare?
Titel: Re: Function requires a valid ADT argument
Beitrag von: DaWutz am 30.04.05 - 19:51:18
Schreib das vor dein Script, und Du wirst von Notes GEZWUNGEN alle Variablen ordentlich zu deklarieren. Gibt am Anfang sicherlich viel Mecker, aber wenn man sich dran gewöhnt hat, vergisst man auch nichts zu deklarieren und bekommt keine Fehlermeldungen mehr in diese Richtung!
Titel: Re: Function requires a valid ADT argument
Beitrag von: JanHoener am 30.04.05 - 19:57:08
habe jetzt noch Dim doc As notesdocument eingefügt. Meiner MEinung ist alles deklariert. Aber er meckert immer noch über den gleichen Fehler.
Versteh ich einfach nicht!
Titel: Re: Function requires a valid ADT argument
Beitrag von: DaWutz am 30.04.05 - 20:01:55
Also wenn ich das richtig sehe, dann ist dies
Code
Set docWork=docLoop
      Set docLoop=col.getnextdocument(docWork)
in der falschen Reihenfolge.

Zuerst sagst Du ihm er soll docWork mit dem docLoop befüllen, und im nächsten Schritt füllst du erst docLoop - wie soll das gehen?

Vor allem füllst Du docLoop mit einem Element aus einer Collection die auf docWork beruht - da beisst sich die Katze doch irgendwie in den Schwanz, oder? Setz vor der Schleife dein docLoop mal auf einen Wert und schau was passiert!
Titel: Re: Function requires a valid ADT argument
Beitrag von: TMC am 30.04.05 - 20:03:44
Jan,

bitte nicht einfach Code kopieren und anpassen, ohne zu wissen, was da passiert.
Siehe oben meine 1. Antwort. docLoop is Nothing. Du nutzt das NotesDocumentCollection Object, und holst Dir dort über docLoop bzw. dann docWork das nächste Dokument.
Aber Du hast nicht definiert, was das docLoop-Objekt überhaupt enthält. Du hast nur zugeordnet: docLoop = irgend ein NotesDocument (über Dim). Erstmal ist das also leer. Du musst aber jetzt docLoop ein physisches Dokument zuordnen.

Tipp: Geh Zeile für Zeile durch. Wenn Du eine Zeile nicht verstehst: poste hier, wir erklären gerne.

Was meint ihr mit Option Declare?
Benutz bitte auch die Designer-Hilfe. Im Designer: F1 drücken. Dort wird Option Declare auch erklärt.
Titel: Re: Function requires a valid ADT argument
Beitrag von: Marinero Atlántico am 30.04.05 - 20:06:53
in Zeitlupe:
Code
Dim s As New notessession
   Dim db As notesdatabase
   Dim col As notesdocumentcollection
   Dim docLoop As notesdocument
   Dim docWork As notesdocument
   Set db=s.currentdatabase
   Set col=db.alldocuments
   Set doc=col.getfirstdocument
   While Not doc Is Nothing
      Set docWork=docLoop : docLoop ist Nothing. DocWork ist auch Nothing
      Set docLoop=col.getnextdocument(docWork) : docWork ist nothing deshalb fehler. 

Warum brauchst du eigentlich 3 NotesDocument Objekte (doc, docWork und docLoop).
Das ist mindestens 1 zuviel.
Durch die unökonomische Verwendung von Variablennamen wird dein Code unübersichtlich.

Eigentlich ist das, was in Java eine NullPointerException ist. Relativ schwer zu debuggen.
NullPointerExceptions sind oft Fehler, die schwer zu lokalisieren sind.
Titel: Re: Function requires a valid ADT argument
Beitrag von: JanHoener am 30.04.05 - 20:08:20
Naja, ansich dachte ich, dass der Agent wie angeboten laufen wird. Ist aber anscheinend nicht der Fall. Deswegen frage ich hier ja. Wenn ich alles kappieren würde, würd ich ja nicht fragen...

Wie gesagt, ich habe nichts selbst programmiert...lediglich copy & paste.
Wie sollte denn das Script aussehen?
Titel: Re: Function requires a valid ADT argument
Beitrag von: TMC am 30.04.05 - 20:16:35
Copy & Paste schön und gut.
Tipp: trotzdem solltest Du immer verstehen, was Du da einsetzt.
Nutz doch die oben genannten Tipps als Chance, hierbei was zu lernen.
Man könnte Dir jetzt schnell die Lösung als Code komplett posten, aber was hast Du dann selbst für einen Nutzen davon?
Der Code ist eigentlich ein sehr schönes Beispiel, um was zu lernen. Du musst nur wollen.
Titel: Re: Function requires a valid ADT argument
Beitrag von: JanHoener am 30.04.05 - 20:19:50
glaub mir, ich würde wollen. Allerdings ist es das letzte, was mir noch zur vollständigen Datenbank fehlt und Abgabe ist in 40Min. Also ist es recht dringend!
Könntet ihr dieses mal nochmal ne Ausnahme machen?
Alles andere läuft schon.
Vielen Dank.
Titel: Re: Function requires a valid ADT argument
Beitrag von: TMC am 30.04.05 - 20:29:59
40 Minuten wirst Du IMHO so nicht einhalten können. Du weißt ja gar nicht, ob der Rest der Routine sauber funktioniert. Würde lieber um Verlängerung bitten oder das weglassen.

Wie auch immer:

<find>doc</find>
<replace_with>docLoop</replace_with>

Auf den ersten Blick sollte es das sein.
Titel: Re: Function requires a valid ADT argument
Beitrag von: animate am 30.04.05 - 20:34:45
ersetze doc durch docLoop. Müsste reichen.
Der Agant wie er aud der Seite angeboten wird kann so nicht funktionieren.
Titel: Re: Function requires a valid ADT argument
Beitrag von: JanHoener am 30.04.05 - 20:52:00
vielen dank...jetzt läuft er...
Titel: Re: Function requires a valid ADT argument
Beitrag von: TMC am 30.04.05 - 21:24:26
Danke, Thomas, das war die "lange" Schreibweise  :)

Eigentlich kann ich nicht nachvollziehen, wie man solch offensichtlich falschen Code auf einer Webseite publizieren kann. Zumindest einem erfahrenen Notes-Programmierer darf das eigentlich nicht passieren. Zumal das auch nicht ein Tippfehler ist (siehe Option Declare).

Weiteres Beispiel: http://www.11tmr.com/11tmr.nsf/d6plinks/MWHE-6AVMHV
Titel: Re: Function requires a valid ADT argument
Beitrag von: koehlerbv am 30.04.05 - 23:46:20
Ich verstehe es nicht. Absolut nicht.
Was jemand im Web veröffentlicht, ist sein Vergnügen. Wenn er wegen Schusslichkeit in einen Code einen Fehler 'reinbringt (muss ja bei Wolfgang Flamme so gewesen sein, denn der Code hat ja bestimmt irgendwann vorher bei ihm funktioniert), so kann man das beklagen, aber nicht verklagen - der Code ist ja für lau. Wenn Wolfgang Flamme den Code unnötig verkompliziert (wozu zwei NotesDocument objects?), ist das ebenfalls nur beklagbar, aber auch nicht verklagbar.
Wenn aber jemand in einer wissenschaftlichen Arbeit etwas unbesehen und vollkommen unverstanden übernimmt - sorry, dafür habe ich keinerlei Verständnis. Derartige Arbeiten wurden während meines Studiums haarklein von den Prüfern auseinandergenommen - spätestens bei der mündlichen Abnahme / Prüfung der Arbeit, wir wären gar nicht auf die Idee gekommen, da irgendwas einzubauen, was wir nicht verstanden oder selber gemacht hätten.

Bernhard
Titel: Re: Function requires a valid ADT argument
Beitrag von: TMC am 01.05.05 - 01:17:06
+1

Trotzdem sehe ich es nicht ein, dass Code von Leuten veröffentlicht wird von denen man annimmt, dass die es "drauf haben", wo Grundsätze wie Option Declare - Beachtung fehlen. Umso mehr ein Beweis, dass man sich auf nichts und niemanden verlassen darf, wenn man sauber programmieren will.
Mein o.g. 2. Beispiel (der Link) zeigt, dass da wohl was von VBA rübergeholt wurde. Ein schönes Beispiel zum Thema "verlasst Euch nicht auf Blog-Aussagen". Diese Aussage ist für Entwickler relativ schnell überschaubar enttarnt. Viel schwieriger wird es bei anderen Themen, um den Wahrheitsgehalt festzustellen. Sehr schnell nimmt man da was als gegeben an aus einem Blog, ob wohl es hinten und vorne nicht stimmt. Ich muss da auch noch mehr Skepsis zeigen.
Titel: Re: Function requires a valid ADT argument
Beitrag von: Semeaphoros am 01.05.05 - 10:09:17
Naja, ist schon so, ändert aber nix daran, dass es einen sehr schlechten Eindruck hinterlässt. Die Nachfrage, die sich Wolfgang da gefallen lassen muss, ob er denn dann in anderen Gebieten auch so unsorgfältig ist ..... und diese Nachfrage wird häufig eben nur gedacht und nicht ausgesprochen. Deshalb: lieber nix als etwas fahrlässig fehlerhaftes posten (in Tipps oder so, ist was anderes, wenn es im Rahmen eines Forums passiert).
Titel: Re: Function requires a valid ADT argument
Beitrag von: DaWutz am 01.05.05 - 10:35:38
Naja, der Agent der da gepostet wurde ist sicherlich auch so gerannt - nur das halt ein "Flüchtigkeitsfehler" drin war. Das kann und darf meiner Meinung nach passieren. Durch das finden eines solchen den Schreiber mangelnde Kenntnis oder gar Sorgfalt vorzuwerfen halte ich für nicht unbedingt kollegial.

Zitat
Deshalb: lieber nix als etwas fahrlässig fehlerhaftes posten (in Tipps oder so, ist was anderes, wenn es im Rahmen eines Forums passiert).
Naja, wenn jeder so denkt, dann muss man sich nicht wundern, wenn man - wenn man selber mal was sucht - nix gescheites findet. Lieber ein Ansatz mit einem kleinen Haken als garkein Ansatz. (Meine Meinung!)

Aber von daher finde ich pers. auch sowas wie die Rubrik "Best Practices" und die Vorstufe dazu "Diskussion zu Best Practices" prima. Dort kann man sich entsprechend über eine Sache auslassen und wenn sie dann als gut befunden wird, kommt sie in die nächste Rubrik und kann getrost veröffentlich werden.

Da sollten sich viele andere Boards ruhig mal ein Beispiel dran nehmen!

PS: Ok, sorry wenn das zu OT war, aber das musste jetzt raus. -> Hab grade selber ein wenig Prüfungsstress hinter mir, und renne nun mit großen Schritten auf die nächste (Dienstag) zu!
Titel: Re: Function requires a valid ADT argument
Beitrag von: Marinero Atlántico am 01.05.05 - 12:01:42
Wolfgang hat das sichtlich als Pseudo-Code-Skizze veröffentlicht. Sonst wäre ja ein Error-Handler drin  ;D
Für mich ist das Internet nicht als Medium, wo die perfekte Wahrheit veröffentlicht wird. Man darf sich halt nur nicht darüber ägern, wenn man verbessert wird.
Ausserdem ist das ein Fehler, der sehr leicht auffällt.
Wirklich problematisch sind Fehler, die nicht so schnell auffallen, sondern nur unter bestimmten (Grenz-)Bedingungen.

Blogs sind auch so was Foren. Nur vielleicht ein bischen mehr Selbst-Präsentationscharakter.
Zur Zeit werden ca. 70% meiner nicht vielen technologischen Javaranch-Postings verbessert. Man muß damit fertig werden. So ist das halt. Es gibt dort bei ca. 400 Postings am Tag und ca. 500 regulars vielleicht nur 10 Leute, die in ihrem Spezialgebiet fast nie oder nur bei sprachlichen Flüchtigkeitsfehlern verbessert werden. Gute Diskussionen ergeben aber dann ein korrektes Gesamtbild.
Blogs und Foren sind einfach nicht dafür gedacht, dass Leute 40 Min. vor Spielschluss Skripts in einer Sprache copy-und-pasten, die sie offenbar nur recht rudimentär verstehen.

Wenn man nur noch 100% richtige Sachen sagt, lernt man nichts dazu. 

Dank Wolfgangs Fehler ist ja diese Diskussion erst aufgekommen. Und da kann man viel wichtigere Sachen rausziehen.