Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: theBastian am 26.03.04 - 10:51:53
-
Guten Morgen,
schwitze noch immer an der bereits genannten DB (siehe unten) und bin jetzt dabei eine Rechnungs-Maske zu erstellen.
Die Rechnung soll einem bestimmten Projekt zugeordnet werden. Dieses wird vom User per Dialogliste ausgewählt. Danach muss ein Bestandteil (von 9 möglichen) dieses Projektes ausgewählt werden (auch Dialogliste). Natürlich soll der User nur die Bestandteile des soeben ausgewählten Projektes in der Dialogliste sehen. Dazu habe ich eine versteckte Ansicht gebaut, in der das Projekt und alle Bestandteile in je einer Spalte stehen.
Mit der folgenden Formel will ich die Bestandteile auslesen:
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil1):
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil2):
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil4);
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil5):
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil6):
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil7):
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil8):
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil9)
Dabei ist "Projekt" das Feld (in der Rechnungs-Maske) welches das soeben ausgewählte Projekt enthält. Die Spalte Projekt ist sortiert.
Will ich dann die Dialogliste Bestandteile aufrufen, öffnet sich das Fenster aber anstatt der Bestandteile steht da:
Too many arguments for database function
Und dabei habe ich in der Formel eine Prüfung, ob der Bestandteil leer ist, noch garnicht eingebaut. Hat jemand eine Idee, wie ich diesen Fehler beheben oder umgehen kann)
cu
Sebastian
-
holla,
ich glaube ich habe denn fehler denn du machst.
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;Bestandteil1):
versuch hiermit:
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;1):
das wo du "Bestandteil1", "Bestandteil2" usw. mach nur spaltennummer 1 , 2 usw.
und noch ein guter tip benutze temporere variable z.B.
tmp10:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;1);
tmp20:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;2);
usw.
dann die variablen als liste sätzen
tmp10:tmp20:usw.
mfg
brixxton
-
Danke für Deine schnelle Antwort. Hatte auch schon Spaltennummern probiert aber ohne Erfolg. Jetzt habe ich die Variablengeschichte umgesetzt:
tmp10:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;1);
tmp20:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;2);
tmp30:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;3);
tmp40:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;4);
tmp50:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;5);
tmp60:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;6);
tmp70:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;7);
tmp80:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;8);
tmp90:=@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;9);
tmp10:tmp20:tmp30:tmp40:tmp50:tmp60:tmp70:tmp80:tmp90
Leider mit dem gleichen Fehler. Das war es also nicht.
-
aus der hilfe:
@DbColumn( Klasse : Cache; Server : Datenbank ; Ansicht ; SpaltenNr )
deine formel:
@DbColumn("":"NoCache";"":"";"(Bestandteile)";Projekt;1);
da ist wohl ein parameter zuviel drinne... ;D
-
jetzt weis ich.
der fehler ist da drin das du mit @DBLookup arbeiten willst und momentan @DBColumn benutzt, des wegen schribt der notes zuviel argumente weil du ein key in @DBColumn benutzt und das Funktioniert nicht.
so muss DBColumn aussehen:
@DbColumn("":"NoCache";"":"";"(Bestandteile)";1);
aus der hilfe:
@DbColumn( class : cache ; server : database ; view ; columnNumber )
so muss DBLookup aussehen:
@DbLookup("":"NoCache";"":"";"(Bestandteile)";Projekt;1);
aus der hilfe:
@DbLookup( class : cache ; server : database ; view ; key ; fieldName ; keywords ) or
@DbLookup( class : cache ; server : database ; view ; key ; columnNumber ; keywords)
wo bei keywords optional ist also muss du es nicht benutzen.
MfG
brixxton
-
@brixxton,
da war ich schneller ;D
-
stimmt, mein Fehler. Also werde ich das Ganze nochmal mit @DbLookup versuchen.
Dank Euch für die schnelle Hilfe. Melde nachher den Stand.
-
Aktueller Stand:
habe die Formel etwas umgeändert:
tmp10:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil1);
tmp20:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil2);
tmp30:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil3);
tmp40:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil4);
tmp50:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil5);
tmp60:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil6);
tmp70:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil7);
tmp80:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil8);
tmp90:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil9);
tmp10:tmp20:tmp30:tmp40:tmp50:tmp60:tmp70:tmp80:tmp90
ReProjekt soll hierbei als Schlüssel fungieren. (Habe nur zur Sicherheit von Projekt in ReProjekt umgenannt, da Feld Projekt in anderer Maske schon existiert.)
Bestandteil1-9 das jeweilige Feld, welches als Dialogliste ausgegeben werden soll.
Leider bleibt das 2. Dialogfeld jetzt komplett leer. Hat noch jemand eine Idee?
-
;D zu klaussal:
ja ja ist gut du warst schneller nur des wegen weil ich es besser erklären wollte und mehr schreiben musste. 8)
zu dem lätzten eintrag:
das muss du mir leider etwas besser erklären weil wie ich das verstanden habe du hast mehrere felder also in dem sinne 9 dialogfelder oder ? ???
mfg
brixxton
-
Es sind 2 Dialogfelder:
Es gibt eine Maske, welche Projekte erfasst. Sie enthält die Felder Projekt (Text), Bestandteil1-9 (Text) und andere (hierfür unwichtige).
Es gibt eine weitere Maske (Rechnung), und um diese geht es. Ich muss die Rechnung einem bereits erfassten Projekt und dem richtigen Bestandteil zuordnen.
1. Dialogfeld: Auswahl des Projektes per Dialogfeld und eine Ansicht, die alle Projekte darstellt; das gewünschte Projekt wird ausgewählt --> funktioniert
2. Dialogfeld: hier sollen die Bestandteile 1-9 erscheinen; aber natürlich nur die von dem Projekt, welches ich im 1. Dialogfeld ausgewählt habe.
Hoffe, ich konnte das einigermaßen erklären.
-
dann gehst du in die einstellungen von dem erstem feld und bei zweiten tabulator wo du die "Formel für auswahl verwenden" eingibst muss du bei "Optionen" häckchen bei "Felder bei Schlüsselwortänderung aktualisieren" sätzen.
dann wird das zweite Feld gefühlt wenn die formel in dem feld richtig geschrieben ist.
mfg
brixxton
-
Haken war von Anfang an drin. Das ist es nicht. :(
-
dann stimmt irgend etwas mit der formel nicht in dem zweitem feld.
mach die formel hier rein und die namen von den beiden feldern.
mfg
brixxton
-
1. Dialogfeld: Bezeichnung "ReProjekt"; keine Formel, nur Auswahl View und dann die Spalte
2. Dialogfeld: Bezeichnung "Bestandteil"; Formel
tmp10:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil1);
tmp20:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil2);
tmp30:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil3);
tmp40:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil4);
tmp50:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil5);
tmp60:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil6);
tmp70:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil7);
tmp80:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil8);
tmp90:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil9);
tmp10:tmp20:tmp30:tmp40:tmp50:tmp60:tmp70:tmp80:tmp90
(Bestandteil) -> Ansicht
ReProjekt -> 1. Dialogfeld in der Maske "Rechnung"
Bestandteil1-9 -> Felder in dem Projekt, welches im Feld ReProjekt ausgewählt wurden
-
momentan:
tmp10:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;Bestandteil1);
versuch das hier:
tmp10:=@DbLookup("":"NoCache";"":"";"(Bestandteile)";ReProjekt;"Bestandteil1");
veruschmal Bestandteil1 usw. in anführungszeichen zu sätzen.
noch ein guter rat hilfe von domino designer lesen.
MfG
brixxton
-
Danke für den Hinweis. Dachte "" muss bei Feldern nicht sein. Sorry.
Aktueller Stand: es werden immer die Bestandteile des Projekts angezeigt, welches in der 1. Zeile der Ansicht (Bestandteile) angezeigt wird. Egal, welches Projekt ich auswähle. Auch F9 bringt nichts.
Also noch nicht so ganz wie gewünscht.
-
Nicht "versuchen", sondern machen:
Bei Bestandteil1 implizierst Du, dass der Name des auszulesenden Feldes in der Variablen Bestandteil1 steht. Die gibt es bei Dir aber gar nicht, dbLookup liest also den Inhalt des Feldes mit dem Namen "" aus. Gibt es auch nicht, also ist der Rückhgabe-Wert "". Genau das siehtst Du ja auch, Notes macht also genau das, was Du ihm gesagt hast.
"Bestandteil1" hingegen ist korrekt, das ist der String, der nun wirklich den Namen des auszulesendes Feldes beschreibt.
Bernhard
-
Bei Nutzung von "Bestandteil1" tritt nun der Fehler auf, den ich im letzten Posting beschrieben habe.
-
in der erste spalte müssen die projekte stehen.
die projekte spalte muss du kategoriesieren sonst funktioniert das nicht mit dem @DBLookup
mfg
brixxton
-
Spalte1 sind die Projekte, kategorisiert und sortiert. Habe sicherheitshalber nochmal nachgeschaut. War aber schon so.
-
welche version von notes hast du.
mfg
brixxton
-
Notes 6.5.1 en
-
Bist Du Dir sicher, dass in Reprojekt das steht, was Du dort erwartest ? Lass Dir das mal innerhalb Deiner Formel mit @Prompt ausgeben ...
Ansonsten ist eine Ferndiagnose schwierig (zumindest mir fällt jetzt nix ein ...).
Benrhard
-
Habe nicht @Prompt verwendet sondern eine Rechnung erstellt, gespeichert und dann in den Eigenschaften des Docs das Feld ReProjekt gesucht. Dort steht genau das Projekt drin, welches ich ausgewählt habe.
-
Habe jetzt @Prompt vor die Formel gebaut und es passiert folgendes:
- Projekt ausgewählt;
- Klick auf Dialogfeld2 -> Prompt mit dem richtigen Projekt und Dialogfeld mit den richtigen Bestandteilen erscheinen
- Projekt geändert
- Klick auf Dialogfeld2 -> kein Prompt und die Bestandteile vom vorigen Projekt erscheinen
Aber die Refresh bei beiden Feldern sind gesetzt ???
-
ja da hatte ich auch probleme und leiser keine lösung auser F9 gefunden.
ist halt so, damit müssen wir leben was sie noch probieren können ist @Command( [RefreshHideFormulas] ) hinter der Formel die Sie benutzen.
mfg
brixxton
-
Würde das nicht eher etwas in Dialogfeld1 bringen? Dort statt View-Auswahl eine DbColumn-Formel mit Refresh am Ende? Sollte dann ja auf alle Formel (also auch Dialogfeld2) wirken. ???
--> @Commands not allowed
Also wird das dort nichts.
-
funktioniert das alles wenn du F9 benutzt.
mfg
brixxton
-
Mit F9 funktioniert das Ganze. Ist aber nicht so das Wahre.
-
dann schreibst du in das erste feld eine @DBColumn Formel und nicht auswahl über Ansicht.
das ist die lösung dann Funktioniert das alles.
es ist vieleicht ein bug in notes.
mfg brixxton
-
Fahre erst mal nach Hause und teste dort weiter. Melde mich gegen Abend nochmal.
Danke erstmal für Deine Hilfe. Hat mich schon viel weiter gebracht.
Bis später.
-
Dein Dialogfeld2 ist aber schon ein berechnetes Feld ?
Ich kann jedenfalls nicht darüber klagen, dass ein mit @dbLookup auf Basis von Feld1 berechnetes Feld2 nicht funktionieren würde ...
Es gibt aber einen Fakt, der Dich vielleicht sowieso zu einem anderen Ansatz lenken wird: Performance !
Wenn Du Deine @dbLookups in Dialogfeld2 zu stehen hast, dann wird ja jedes Mal beim Öffnen eines Dokuments das ganze Zeugs durchgerödelt - bei grossen DBs merkst Du das dann ganz deutlich. Günstiger ist dann m.E. ein Hotspot zur Auswahl des Projekts, dessen Formel dann nicht nur Dialogliste1 (was dann natürlich Text würde) füllt, sondern mit @SetField und Deiner bisherigen Formel Dialogliste2 füttert. Der Buhtong müsste natürlich im Lesen-Modus verborgen sein, damit der User nicht auf schlechte Gedanken kommt ;D
HTH,
Bernhard
-
Moin Moin,
hatte natürlich am WE keine Zeit und bin erst jetzt zum Testen gekommen.
Warum sollte mein Feld2 berechnet sein? Der User soll sich doch einen Bestandteil aussuchen können.
Performance habe ich auch schon überlegt aber ich hoffe, das pro Jahr nicht mehr als 10-20 Projekte zusammen kommen.
cu
Sebastian
-
Guten Morgen,
habe jetzt den Vorschlag von brixxton umgesetzt. Funktioniert ohne Probleme.
Danke Euch nochmal.
cu
Sebastian