Hallo zusammen,
ich habe folgenden Code:
rechner_form:=@GetDocField(@DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1);"rechnername");
Ziel ist, das er aus existierenden Forms anhand der UnID das Feld Rechnername holt und das eine Variable packt... Ich muss später einen Vergleich machen und dafür brauche ich den Wert...
Dafür müsste ich aber eine Schleife haben...
Ich komme mit den Schleifen aber nicht ganz zurecht...
Also das er in der Schleife das ganze druchgeht und dann später alle Werte in der Var stehen...
Könnt ihr mir da helfen?
Danke.
James
Ich danke dir...
Dann werde ich das mal versuchen... Bin schon sehr gespannt.
Aber vielleicht, nur damit ich es einmal gesehen habe...
Wie müsste folgendes in der FOR Schleife aussehen? Nur damit ich die Logik der Formelsprache hier verstehe...
Es gibt diesen Befehl:
rechnername:=@GetDocField(@DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1);"rechnername");
Anhand dessen soll er den Rechnernamen aus dem Form holen... Meine Idee zur For Schleife sah auf Basis der Help so aus:
@For(i := 1; i <= @Elements(@DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1)); i := i + 1
test:=@Implode(rechnername[i];";"));
@Text(test[2]);
Ergibt ein Out of Range Array....
Was mache ich denn falsch?
Edit: Wenn ich das @Text in der Schleife mache, kommt nur die Zahl 1 raus... Obwohl der Rechnername da stehen müsste... Nichts andere holt @DocFiled... Also die Var rechnername... ???
Es gibt diesen Befehl:
rechnername:=@GetDocField(@DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1);"rechnername");
Anhand dessen soll er den Rechnernamen aus dem Form holen...
Ä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).
rechnernameN := @Implode( @DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1), ";" );
reicht.
Das ist mir gerade viel wichtiger...
Hier meine Meinung, wobei ich kein ausgefuchster Entwickler bin...
@For(i := 1; i <= @Elements(@DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1)); i := i + 1
test:=@Implode(rechnername[i];";"));
@Text(test[2]);
Ergibt ein Out of Range Array....
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.
_Liste := @DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1);
_Anzahl := @Elements(_Liste);
@For(i := 1; i <= _Anzahl; i := i + 1;
test:=@Implode(rechnername[i];";"));
@Text(test[2]);
Das Out auf Range wird von wohl von diesem Teil her kommen
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 :-\
Was mache ich denn falsch?
Ich vermute mal:
a) Entweder liefert der DBColumn nicht das von Dir erwartete / erhoffte Ergebnis
b) Der Index ist 0-basiert und ein
_Anzahl := @Elements(_Liste) -1;
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
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:
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
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