Domino 9 und frühere Versionen > ND7: Entwicklung
Hilfe bei einer Schleife
m3:
--- Zitat von: jimmyone am 19.03.10 - 15:21:59 ---Es gibt diesen Befehl:
--- Code: ---rechnername:=@GetDocField(@DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1);"rechnername");
--- Ende Code ---
Anhand dessen soll er den Rechnernamen aus dem Form holen...
--- Ende Zitat ---
Ähhhhh? Du holst Dir aus der View "($nSoftwareInstalled)" die Liste (keinen String, eine Liste!) von irgendwas und übergibst diese Liste dann an @GetDocField, das an dieser Stelle einen String (keine Liste!) mit der UNID EINES Dokuments erwartet?
1) Wozu @getDocField, wenn Du eh schon im Dokument bist? Da kannst Du einfach mit "rechnername" arbeiten, wenn Du den Rechnernamen des aktuellen Dokuments haben willst.
2) Was machst Du, wenn @DbColumn mehr als 64 KB zurückliefert, weil die Spalte mehr als x Einträge mit Größe y (wobei y*x > 64 KB) zurückliefert?
3) Wenn Du Dir sicher bist, dass @DbColumn IMMER < 64 KB zurückliefert, kannst Du aus der Liste einfach mit @Implode einen String machen und brauchst die For-Schleife nicht (was Du machen willst, wenn ich das zweite Code-Snippet richtig interpretiere).
--- Code: ---rechnernameN := @Implode( @DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1), ";" );
--- Ende Code ---
reicht.
BigWim:
--- Zitat ---Das ist mir gerade viel wichtiger...
--- Ende Zitat ---
Hier meine Meinung, wobei ich kein ausgefuchster Entwickler bin...
--- Zitat ---
--- Code: ---@For(i := 1; i <= @Elements(@DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1)); i := i + 1
test:=@Implode(rechnername[i];";"));
@Text(test[2]);
--- Ende Code ---
Ergibt ein Out of Range Array....
--- Ende Zitat ---
Um Fehler herausfinden, ist es sinnvoll, die Arbeitsschritte zu zerlegen, damit Du Dir auch die Zwischenergebnisse ansehen kannst. Stichwort Debuggen.
In der Formelsprache gibt es leider keinen direkten Weg (zumindest den ich kenne), aber zumindest hast Du die Möglichkeit mit @StatusBar oder @Prompt Werte ausgeben zu lassen, bzw mit @SetField in entsprechende Felder in der Maske.
--- Code: ---_Liste := @DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1);
_Anzahl := @Elements(_Liste);
@For(i := 1; i <= _Anzahl; i := i + 1;
test:=@Implode(rechnername[i];";"));
@Text(test[2]);
--- Ende Code ---
Das Out auf Range wird von wohl von diesem Teil her kommen
--- Code: ---rechnername[i]
--- Ende Code ---
und bedeutet, dass Du auf einen Index [ i ] zugreifen willst, den es nicht gibt. Meistens passiert mir das, weil ich nicht auseinanderhalten kann, was 0- oder 1-basiert ist, also ob der Index mit 0 oder 1 beginnt. Aber gut, dass ist ein anderes Thema :-\
--- Zitat ---Was mache ich denn falsch?
--- Ende Zitat ---
Ich vermute mal:
a) Entweder liefert der DBColumn nicht das von Dir erwartete / erhoffte Ergebnis
b) Der Index ist 0-basiert und ein
--- Code: ---_Anzahl := @Elements(_Liste) -1;
--- Ende Code ---
würde helfen.
Ich tippe mal mutig auf B).
Ich hoffe, meine Ausführungen treffen halbwegs in Schwarze und helfen Dir ein Stück weit weiter.
Markus
jimmyone:
Hallo zusammen,
zunächst möchte ich euch allen für eure Hilfsbereitschaft danken...
Ich habe es jetzt hinbekommen. Allerdings nicht ohne Hilfe.
Es gibt bei uns eine richtige Entwicklungsabteilung, welche Unternehmensweite Anwendungen und DBs baut.
Die kümmern sich aber nicht um den Kleinkram, den jemand haben will...
Jedenfalls habe ich aus der Abteilung einen Kollegen gefragt und der war dann auch so freundlich, mal darüber zu gucken... Ich musste die View verändern, die war Kategorisiert und auch den Code ändern.
Das Endergebnis, was der Kollege gebaut hat, ist das:
--- Code: ---rechner:=@DbColumn("":"NoCache";"";"($nSoftwareNB)";2);
software:=@DbColumn("":"NoCache";"";"($nSoftwareNB)";1);
swname:=software_typ+" - "+hersteller+" "+nSoftwarename;
@For(i:=1;i<=@Elements(rechner);i:=i+1;
@If(swname=software[i];zRechner:=zRechner+@Text(rechner[i]+" ");@False)
);
zRechner
--- Ende Code ---
Das funktioniert einwandfrei....
Mein Kollege meinte auch, lass das mit Notes Development, ich kann nicht von auf 100 gehen, das kann nur scheitern, wo er auch nicht ganz Unrecht mit hat... Jedenfalls machen die Kollegen das jetzt weiter.
Er meinte auch, die DocUNID brauche ich gar nicht... Da war einiges schief.
Deshalb lass ich das jetzt auch. Bin einfach zu unwissend in dem Fach. Mal sehen wie es nach der Schulung aussieht.
Grüße,
Jimmy
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln