Autor Thema: @dblookup in @dowhile?  (Gelesen 4262 mal)

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
@dblookup in @dowhile?
« am: 19.08.10 - 12:08:16 »
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)


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


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

ein

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

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?
« Letzte Änderung: 19.08.10 - 12:16:02 von Demian »
Gruß
Demian

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #1 am: 19.08.10 - 12:21:15 »
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  :-:
Gruß
Demian

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #2 am: 19.08.10 - 15:41:34 »
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?
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #3 am: 19.08.10 - 20:43:43 »
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);

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?
Gruß
Demian

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: @dblookup in @dowhile?
« Antwort #4 am: 20.08.10 - 08:31:31 »
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é

Offline Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #5 am: 20.08.10 - 08:40:27 »
Der 2. Hinweisprompt im ersten Durchlauf setzt auf, da Währungsfelder Zahlenfelder sind und Zahlen gibt @Prompt ohne eine Umwandlung in Text nicht aus. Ein @Text(tpmPrice) müsste dem 2. Hinweisprompt auf die Beine helfen. Das dbLookup greift in diesem Fall nicht in die Ansicht (in der du die Zahl als Text anzeigen lässt), um den Preis zu holen sondern in das durch den Schlüssel Events[n] definierte Dokument.

Der 2. Fall führt dazu, dass eine leere Variable als Feldname übergeben wird und tmpPrice somit auch leer ist. An leeren Werten stört sich das 2. Hinweisprompt nicht.

Der 3. Fall funktioniert, da du hier den Wert für den Preis aus einer Spalte abrufst und die enthält durch die Wandlung mit @Text einen Textwert, den das Prompt anzeigen kann.

Gruß
Dirk
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Grischu

  • Frischling
  • *
  • Beiträge: 40
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #6 am: 20.08.10 - 08:42:17 »
Code
tmpPrice := @DbLookup("":Cache;@DbName;View;Events[n],"TicketPrice");


Fehlen da nicht einfach 2 " ums Cache rum ?
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 Keydins

  • Aktives Mitglied
  • ***
  • Beiträge: 163
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #7 am: 20.08.10 - 08:45:22 »
Nein, cache hat er als Variable mit dem Wert "NoCache" definiert.  ;)
Gruß Dirk

Aktuelle Notesumgebung
~800 BasicClients 9.0.1 FP9 SHF55
  10 FullClients 9.0.1 FP7 SHF143
    7 DominoServer 9.0.1 FP9 HF 139 / 64 Bit

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #8 am: 20.08.10 - 09:24:56 »
Moin ihr drei,

was soll ich sagen:

Zitat
Ein @Text(tpmPrice) müsste dem 2. Hinweisprompt auf die Beine helfen

das wars. Wobei ich nicht versteh, warum es keinen Fehler hagelt. Das erklärt aber auch, warum es bei Angabe der Spaltennummer funktioniert hat. Hier greift er wie von dir für Fall 3. beschrieben auf den Spaltenwert zurück, der ja mit @text(TicketPrice) belegt war, bei Angabe des Feldnamens greift er aber auf den Dokumentwert und das ist ein Zahlen/Währungsfeld.

Bin im allgemeinen eher der Script-Typ, und was Formeln betrifft noch nicht so fit.

Vielen, vielen Dank für die Lösung.
Gruß
Demian

Offline Kadlec

  • Senior Mitglied
  • ****
  • Beiträge: 489
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: @dblookup in @dowhile?
« Antwort #9 am: 20.08.10 - 10:28:54 »
Warum sollte ein Fehler hageln?
Wenn Du eine Zahl über z.B @Prompt([OK]....ausgeben willst bekommst Du auch keinen Fehler, es wird halt nichts angezeigt.

Boris

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #10 am: 20.08.10 - 10:57:10 »
ja, nur normalerweise kommen in der Formelsprache zum Beispiel in Ansichten dann so Fehler wie "Eintrag im Index nicht gefunden" oder in diesem Fall hätte ich ein "Fehler - falscher Datentyp..." - oder wie die Meldung normal heißt - erwartet.
Gruß
Demian

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #11 am: 20.08.10 - 11:01:24 »
In Ansichten: Ja. Aber der Rückgabewert ist in diesem Fall in Wirklichkeit @Error, und das ist kein Text und kann von @Prompt nicht dargestellt werden (umwandeln kann man das auch nicht).

Bernhard

Offline Demian

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 569
  • Geschlecht: Männlich
Re: @dblookup in @dowhile?
« Antwort #12 am: 20.08.10 - 12:10:39 »
hhm ok. Ich gelobe Besserung.  ;D Wenn ich mich jetzt intensiver mit der Formelsprache auseinander setze, werd ich versuchen mit dran zu denken @iserror zu arbeiten. :o

Gruß
Demian

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz