Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: RvM am 23.05.03 - 18:30:14
-
Folgende Aufgabe:
Im Web wird eine Bestellung durchgeführt. In diesem Formular sind berechnete Zahlenfelder, deren Inhalte ich via $$Return als Query_String an eine neue Seite übergebe
In dieser Seite wird per Agent der Query_String ausgelesen und die Teile wiederrum berechneter Felder zugewiesen.
Um in diesem Formular weitere Berechnungen durchzuführen, wollte ich in einem Zahlenfeld mit @TextToNumber einen Teil des Query_String in eine Dezimalzahl umwandeln.
Leider werden in diesen berechneten Zahlenfelder dieser Query_String Teil nicht umgewandelt.
Warum nicht?
-
Hi RvM,
das ist eher ein Thema für das Entwicklungsforum, aber egal.
Bitte poste doch mal den Code, damit man leichter nachvollziehen kann, was Du da genau machst.
Meff
-
@Meff:
Okay ich versuchs mal.
Also das $$RETURN-Feld hat folgende Berechnung:
nametotal:=Vorname +" "+Name;
db:=@ReplaceSubstring(@Subset(@DbName;-1);"\\";"/");
"["+db+"/Videodanke?openform&"+nametotal+"~"+Anzahl+"|"+Zahlart+"]"
wobei im Formular das Feld "Anzahl" ein Listenfeld und "Zahlart" ein Optionsfeld ist.
Das Dokument "Videodanke" wird mit einem "WebQueryOpen"-Agenten gestartet, dessen Berechnung sieht wie folgt aus:
queryStr := @Right(Query_String;"&");
X:=@ReplaceSubstring(queryStr;"%20";" ");
FIELD Name:=@Left(X;"~");
FIELD Zahlart:=@Right(X;"|");
FIELD Anzahl:=@TextToNumber(@Right(@Left(X; "|");"~"));
""
Das Feld Zahlart ist ein berechnetes Textfeld mit der Formel "Zahlart" und das Feld Anzahl ist ein Zahlenfeld mit der berechneten Formel "@TextToNumber(Anzahl)", wobei diese Formel immer als Ergebnis ein "@ERROR" rausschmeisst.
Ich hoffe, das diese Infos reichen.
-
hmm. Formel Desperado, wa ;)
Ich würde:
FIELD Anzahl:=@TextToNumber(@Right(@Left(X; "|");"~"));
""
erstmal ohne @TextToNumber testen:
FIELD Anzahl:=@Right(@Left(X; "|");"~");
Dann siehst du vielleicht schon das problem.
-
Danke für den Tipp, habe ich aber auch schon getestet.
Formeln: Ja ich liebe Formeln (aus reinem Mangel an Scriptkentnisse - ich raff das objektorientierte Denken nicht :()
-
;D
Ich habe die Lösung gefunden:
In berechneten Texten klappt es mit @TextToNumber, nicht aber in berechneten Feldern!
Warum???
Fragt micht nicht!
-
Noch ein allgemeine Tipp zur Vereinfachung der Formelwüsten bei Parameterübergabe per URL. Vom Gottvater der Domino Webentwicklung, Jake Howlett, stammt folgende Technik:
1. Alle Parameter in web-üblichen Art und Weise übergeben, also z.B. in der Form
"["+db+"/Videodanke?openform&nametotal="+nametotal+"&Anzahl="+Anzahl+"&Zahlart="+Zahlart+"]"
Es geht natürlich auch anders, aber so ist die Parameterübergabe standardisiert und man kann eben leichter Code von anderen wiederverwerten anstatt immer seine eigene Behandlung von Trennzeichen durchziehen zu müssen.
2. Auf jeder Maske, die Parameter auslesen soll zwei Felder erstellen, z.B.
Textfeld "ArgNames", computed for display, allow multiple Values Formel:
@Left(@Explode(@Right(Query_String;"&");"&");"=")
Textfeld "ArgValues", computed for display, allow multiple values, Formel:
@Right(@Explode(@Right(Query_String;"&");"&");"=")
3. Wenn man jetzt z.B. den Wert des Parameters "Anzahl" auslesen will, benutzt man die Formel
_pos := @Member("Anzahl"; ArgNames);
@GetMembers(ArgValues; _pos)
Der große Vorteil: Wenn man die beiden Felder in eine Teilmaske packt, die man in jede betroffene Webmaske aufnimmt, muss man sich immer nur dieses letzte, simple Stückchen Code merken und den Namen des Parameters auf den man zugreifen möchte.
-
desweiteren wuerde ich die CGI-Variable Query_String_Decoded verwenden...
gruss
-
desweiteren wuerde ich die CGI-Variable Query_String_Decoded verwenden...
Je nachdem, was man alles übergeben will oder muss, sicher sehr sinnvoll.
Allerdings sollte man bedenken, dass Query_String_Decoded nicht zusammen mit Rufzeichen anstelle von Fragezeichen (z.B. wenn im Serverdokument die Option "Make this site accessible to web search site crawlers" eingeschaltet ist) funktioniert.
Query_String kann es dagegen lustigerweise.