Autor Thema: Hilfe bei einer Schleife  (Gelesen 3898 mal)

Offline jimmyone

  • Junior Mitglied
  • **
  • Beiträge: 96
Hilfe bei einer Schleife
« am: 18.03.10 - 18:36:03 »
Hallo zusammen,

ich habe folgenden Code:
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Hilfe bei einer Schleife
« Antwort #1 am: 18.03.10 - 23:03:50 »
Könnt ihr mir da helfen?

Vermutlich ja. Wenn Du uns eine verständliche Problembeschreibung zukommen lässt. Der Code ist nichtssagend, die Beschreibung lässt viel zu viele Deutungen offen.

Bernhard

PS: Wie Schleifen funktionieren, steht in der DesignerHelp, die wir hier garantiert nicht wiederkäuen werden. Ich bin mit aber ziemlich sicher, dass diese nicht Dein wirkliches Problem darstellen.

Offline Grischu

  • Frischling
  • *
  • Beiträge: 40
  • Geschlecht: Männlich
Re: Hilfe bei einer Schleife
« Antwort #2 am: 19.03.10 - 07:32:37 »
War Unsinn, darum gelöscht :(
« Letzte Änderung: 19.03.10 - 07:35:27 von Grischu »
Twitter is eine typische Erscheinung der Generation ADS & SMS. Für einen Brief zu faul, für einen kompletten Satz zu dumm und für korrekte Grammatik zu cool.

Offline jimmyone

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Hilfe bei einer Schleife
« Antwort #3 am: 19.03.10 - 10:38:40 »
OK...

Also es geht darum festzustellen, welcher Rechner welche Software zugewiesen hat.
Dazu gibts im Softwareformular ein Feld nRechnerSoftware. Das ist ein CFD.
Weiterhin gibts ein Form Hardware, wo man erfasst ist es ein Notebook, eine Workstation oder ein Server und man kann dort Software auswählen, welche aus einer View nSoftwareverfügbar kommt.

Dann habe ich eine View mit folgenden Feldern...
Rechner - SoftwareNBs - SoftwareWS - SoftwareSRV

Jenachdem, was im Hardwareform gewählt wurde, ob NB, WS oder Server sind die Felder gfüllt.
Immer gefüllt ist Rechner. Das Feld zeigt den Namen an.

Jetzt muss ich es ja irgendwie hinkriegen, das im Softwareform nur die Rechnernamen angezeigt werden, die diese Software auch zugewiesen haben.

Ich denke, das muss irgendwie über einen Vergleich laufen... Also habe ich den oberen Code geschrieben, welcher anhand der DocUNID im Hardwareform den Rechnernamen sucht.
Den kann ich ja dann mit dem Namen in der View vergleichen zusätzlich noch die Software einschließen und wenns da ein True gibt, dann anzeigen...

Das Problem ist aber, das ohne Schleife in dieser Variablen blos ein Dokument steht.

Ich bin kein Entwickler... So habe ich mir das gedacht.
Kann jetzt natürlich sein, das es da Denkfehler gibt... Ich versuche auch, nach Möglichkeit das selbst hinzukriegen.

Grüße,
Jimmy

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Hilfe bei einer Schleife
« Antwort #4 am: 19.03.10 - 11:01:20 »
Hallo,

Mal so als Einwurf.

Koennte man dieses nicht auch ueber eine "embedded view" realisieren?


Andreas

Offline jimmyone

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Hilfe bei einer Schleife
« Antwort #5 am: 19.03.10 - 12:34:24 »
Würde das gerne mit dem Feld machen...
Ich habe im Grunde schon alles zusammen... Das funktioniert auch.

Ich habe in die Help mal geschaut... Aber das hilft mir nicht weiter.
Einfach weil ich nicht weiß, wenn ich jetzt eine while Schleife habe, wie ich dann in der Schleife entweder der Var mehrere Werte zuweise, mit Komma getrennt oder eben daraus ein Array mache...

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Hilfe bei einer Schleife
« Antwort #6 am: 19.03.10 - 12:42:10 »
Eine "embedded view" geht nicht in einem Feld.

Es handelt sich hierbei, wie der Name schon sagt, um eine eingebettete Ansicht in einer Maske.
Diese Ansicht ist nach einem bestimmten Kriterium, hier bei Dir wahrscheinlich die Software, kategorisiert.
Diese wird dann mit dem Wert eines Feldes aus der Maske verglichen.

Un dals Ergebins werden in der eingebetteten Ansicht nur noch die Dokumente angezeigt, bei denen der Wert aus der kategorisierten Spalte mit dem Wert des entspechenden Feldes aus der Maske uebereinstimmt.

Eine gesonderte Schleife brauchst Du hierbei nicht mehr. Das uebernimmt quasi LN fuer Dich.


Andeas

Offline jimmyone

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Hilfe bei einer Schleife
« Antwort #7 am: 19.03.10 - 15:21:59 »
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:
Code
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:

Code
@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... ???
« Letzte Änderung: 19.03.10 - 15:34:51 von jimmyone »

Offline Grischu

  • Frischling
  • *
  • Beiträge: 40
  • Geschlecht: Männlich
Re: Hilfe bei einer Schleife
« Antwort #8 am: 19.03.10 - 15:44:20 »
Ich würde eine View machen.
1. Sortierte Spalte mit der installierten Software. Formel also    SoftwareNBs:SoftwareWS:SoftwareSRV
Mehrfachwerte getrennt anzeigen nicht vergessen.

und dann ein

AlleRechner := @Dblookup("":"NoCache";"":"";"<ViewName>";SoftwareID;"rechnername";[FAILSILENT])


SoftwareID ist in dem Fall der Wert der in den Feldern SoftwareNBs, SoftwareWS und SoftwareSRV steht.
Twitter is eine typische Erscheinung der Generation ADS & SMS. Für einen Brief zu faul, für einen kompletten Satz zu dumm und für korrekte Grammatik zu cool.

Offline jimmyone

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Hilfe bei einer Schleife
« Antwort #9 am: 19.03.10 - 15:57:20 »
Danke für deine Antwort...

Mir gehts aber jetzt nicht un ne View... Natürlich bin ich für praxis Tipps dankbar, aber ich will ja versuchen, Dinge zu verstehen...
Wieso funktioniert die Schleife nicht, was mache ich falsch...

Wir gibt er immer die Zahl 1 zurück oder Out of Array range... ???

Das ist mir gerade viel wichtiger...  :)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Hilfe bei einer Schleife
« Antwort #10 am: 19.03.10 - 16:22:04 »
Es gibt diesen Befehl:
Code
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).
Code
rechnernameN := @Implode( @DbColumn("":"NoCache";"";"($nSoftwareInstalled)";1), ";" );
reicht.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

BigWim

  • Gast
Re: Hilfe bei einer Schleife
« Antwort #11 am: 19.03.10 - 17:27:56 »
Zitat
Das ist mir gerade viel wichtiger... 
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]);

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.

Code
_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
Code
rechnername[i]
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?

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;
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

Offline jimmyone

  • Junior Mitglied
  • **
  • Beiträge: 96
Re: Hilfe bei einer Schleife
« Antwort #12 am: 20.03.10 - 10:05:20 »
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

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
« Letzte Änderung: 20.03.10 - 10:07:09 von jimmyone »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz