Domino 9 und frühere Versionen > ND7: Entwicklung

@dblookup in @dowhile?

(1/3) > >>

Demian:
Moin,moin,

ich habe zum 1. Mal den Sinn einer Schleife in Formelsprache verstanden und verwendet. Bisher war mir nicht klar in welcher Situation eine Formel-Schleife was bringen sollte.

Ich habe folgende Konstellation:

Texfeld: "Events" - Mehrfachwerte
Zahlenfeld: "Tickets" - Mehrfachwerte
Zahlenfeld: "Prices" - Mehrfachwerte

das Feld Events fülle über einen Hotspot mit folgender Formel:


--- Code: ---Cache := "NoCache";
View := "lkpOrderEvents";

MarkedEvents := @PickList( [Custom] ; @DbName; View ; "" ; "Bitte wählen Sie die Veranstaltungen" ; 1);

var := @Explode(MarkedEvents;@NewLine);

@SetField("Events";var)
--- Ende Code ---


Danach wird das Feld Tickets ebenfalls über einen Hotspot gefüllt. Hierfür habe ich mit Blut, Schweiß und Tränen folgende Formel erstellt:


--- Code: ---Cache := "NoCache";
View := "lkpOrderTicketPrices";

@If(
@Elements(Events) = 0;
@Prompt([Ok];"";"Bitte wählen Sie zuerst eine oder mehrere Veranstaltungen aus."):@Return(@False);
@Nothing
);


n := 1;

@DoWhile(
tmpTicket := @Prompt([OkCancelEdit]; "Kartenanzahl"; "Bitte geben Sie die Anzahl der Karten für die Veranstaltung: " + Events[n] + " ein";"");

@If(
!@IsNumber(@TextToNumber(tmpTicket));
@Prompt([Ok];"";"Es wurde keine gültige Zahl eingegeben.") : @SetField("Tickets";"") : @Return(@False);

@TextToNumber(tmpTicket) = 0;
@Prompt([Ok];"";"Es muss eine Zahl größer 0 eingegeben werden.") : @SetField("Tickets";"") : @Return(@False);

tmpTicket = "";
@Prompt([Ok];"";"Es muss eine Zahl größer 0 eingegeben werden.") : @SetField("Tickets";"") : @Return(@False);

@If(
tmpTickets = "";
tmpTickets := tmpTicket;
tmpTickets := tmpTickets + @NewLine + tmpTicket
)
);
n := n + 1;
n <= @Elements(Events)
);

@SetField("Tickets";@Explode(tmpTickets;@NewLine))

--- Ende Code ---


Jetzt wollte ich in der 2. Aktion auch das Feld Prices füllen und habe direkt nach dem @doWhile vor das       


--- Code: ---tmpTicket := @Prompt([OkCancelEdit]; "Kartenanzahl"; "Bitte geben Sie die Anzahl der Karten für die Veranstaltung: " + Events[n] + " ein";"");
--- Ende Code ---

ein


--- Code: ---tmpPrice := @DbLookup("":Cache;@DbName;View;Events[n],"TicketPrice");
--- Ende Code ---

gesetzt. Sowohl der Wert von Events[n] als auch das Feld TicketPrice sind in der Ansicht vorhanden und mit den richtigen Werten gefüllt.

Leider bleibt tmpPrice aber leer? Kann es sein, dass @dbLookup in Kombination mit @dowhile nicht funktioniert? In der Hilfe hab ich hierzu nichts gefunden.

Ich habe das ganze jetzt aus Zeitdruck im PostSave der Maske mit Script gelöst., mich fuchst das aber trotzdem.

Hatte schonmal jemand so eine Situation, bzw. kann mir sagen, wo mein Denkfehler ist?

Demian:
Bevor die Frage(n) kommt/kommen:

in der Ansicht sind alle Spalten mit @text(Feldname) belegt. Die 1. ist natürlich aufsteigend sortiert und ich hatte auch schon ein @Text(Events[n]) in der Lookup-Formel probiert  :-:

Keydins:
Welchen Inhalt liefert dir denn Events[n] zurück? Ist da ggf. ein verstecktes Steuerzeichen oder ein überflüssiges Leerzeichen mit enthalten an dem sich das dbLookup dann aufhängt?

Demian:
Nein, leider nicht. Hatte es auch mit @trim probiert und mir auch den Wert mit führenden und endenden ' anzeigen lassen. Kein Leerzeichen nichts.

Wollte jetzt gerade mal die Selektionsformel posten da fiel mir auf, dass die 2. Spalte, die den Wert TicketPrice enthält, als Währungsspalte formatiert ist. Also habe ich da mal ein @text(TicketPrice) draus gemacht.

Verwende ich folgende Formel:


--- Code: ---@DoWhile(
tmpTicket := @Prompt([OkCancelEdit]; "Kartenanzahl"; "Bitte geben Sie die Anzahl der Karten für die Veranstaltung: " + Events[n] + " ein";"");
strTest := Events[n];
@Prompt([Ok];"";strTest);
tmpPrice := @DbLookup("":Cache;@DbName;"lkpOrderTicketPrices";Events[n];"TicketPrice");
@Prompt([Ok];"";"'" + strTest + "'" + tmpPrice);
--- Ende Code ---

wird der 1. Prompt zur Entgegennahme der Kartenanzahl ausgeführt und danach erfolgt der 1. Hinweisprompt. Der 2. Hinweisprompt wird einfach ignoriert, stattdessen kommt im 2. Durchlauf wieder der Eingabeprompt.

Änder ich in der Lookup-Formel den Feldnamen indem ich die " weglasse, werden alle 3 prompts ausgeführt, er hat für tmpPrice jedoch nichts gefunden.

Gebe ich stattdessen die 2 für die Spaltenzahl ein, klappts wunderbar? Ich habe den Namen aus der Spaltenformel rauskopiert....Cache auch gelöscht...

Äußerst seltsame Geschichte  :-:

Kann es daran liegen dass TicketPrice ein Währungsfeld und kein Textfeld ist?

it898ur:
Hallo,

wenn die Formel nach dem lookup einfach aufhört deutet das darauf hin, dass der lookup einen Fehler schmeißt. Einfach mal das Ergebnis des Lookups in ein Feld schreiben lassen, dann sieht man die eigentliche Ursache oder mit @iserror bzw. [FailSilent] abfangen, wenn der Fehler fachlich irrelevant ist (das sieht man aber erst, wenn man die eigentliche Fehlermeldung kennt).

Ansonsten gehen lookups in Formelschleifen sehr gut !

Gruß

André

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln