Seite 1 von 1

Feldwert gegen die Einträge in der Dropdownliste prüfen.

Verfasst: 02.02.2011, 16:49
von ciberadobe
Hallo zusammen.

Habe hier auf dem Forum viele nützliche Sachen gefunden und benutzen können, vielen Dank.

Bei einem Problem komme ich alleine nicht weiter und bitte Euch um Hilfe.

Ich möchte in einem Feld eingegebenen Wert gegen die Einträge in der Dropdownliste prüfen - wenn Wert nicht aus der Liste darf das Feld nicht verlassen werden. "Nicht verlassen werden" ist dabei kein Problem, sondern prüfen.

Ich arbeite mit Adobe Live Cycle Designer in SAP, Sprache Javascript, Client. Formular offline, dynamisch.

Eine Beispieldatei ist dabei.

Im Designer hatte ich das Feld BUKRS als Textfeld definiert, dann auf Typ Dropdown geändert und die Tabelle GT_BUKRS_BUTXT als Listenwerte angebunden.

Die Tabelle GT_BUKRS_BUTXT hat zwei Spalten - BUKRS(4 Stellen) - Elementwert und BUKRS_BUTXT Elementbezeichnung. In der Bezeichnung steht vorne 4-Stellige Nummer vom BUKRS. Für Feld BUKRS ist die Option "Benutzereingabe erlaubt" freigeschaltet.

Der User sieht die Werte der Spalte BUKRS_BUTXT. In diesem Feld habe ich dank den Beiträgen von Matthias (mas498) so realisiert, daß man beim Click in das Feld die DD Liste sich öffnet und wenn der User mehrere Zeichen nacheinander eingibt die DD Liste auf die passende Einträge reduziert und gezeigt wird.

Nach der Auswahl möchte ich quasi die ersten 4 Zeichen vom ausgewählten Wert gegen die Elementwerte der DD prüfen.

Danke schon mal und Grüße

Ciberadobe.

 

 

 

Feldwert gegen die Einträge in der Dropdownliste prüfen.

Verfasst: 03.02.2011, 10:37
von yuc2me
Hallo ciberadobe,

wenn es möglich ist, dann gib den Feldern doch etwas einfachere Bezeichnungen.
Ich persönlich bekomm Augenkrebs wenn ich das lesen muss. ;)
... ich habe auch sehr viele Fehlermeldungen in meiner JavaScript-Konsole, die ich nicht unbedingt zuordnen kann.

Zu deinem Problem. Du kannst den Wert mittels einer Schleife prüfen.
Hier ein Schema, welches in Change-Event müsste.

Code: Alles auswählen

var newTXT = event.newText;  var searchString = new RegExp(newTXT+".*","gi");
var Counter = 0;
for (i=0; i < DropDownList.length; i++) {
     var rslt = String(DropDownList.item(i)).search(searchString);
     if (rslt!=-1) Counter++;
}
if (Counter==0) app.alert("nicht in DropDownList");
RegExp erstellt einen regulären Ausdruck mit einem Platzhalter ".*"
Dann wird die DropDownList durchlaufen und jeder Wert einzeln geprüft.
Wenn etwas gefunden wird gibt search die Position zurück. Sprich: >-1.

Ich hoffe ich kann dir mit meinem Ansatz helfen.

MfG, yuc2me.

Feldwert gegen die Einträge in der Dropdownliste prüfen.

Verfasst: 04.02.2011, 14:48
von ciberadobe
 

Hallo yuc2me.

Danke für Deine Antwort. Ich habe Dein Vorschlag natürlich dankend ausprobiert, leider noch kein Erfolg.

Die Meldung kommt immer, ob ich den Eintrag ändere oder nicht.

Die neue funktion habe ich im EXIT Ereigniss angebunden, da in CHANGE hat überhaupt nicht reagiert.


In der Zeile: var searchString = new RegExp(newTXT+".*","gi");

habe ich das mit dem Platzhalter ".*" und "gi" nicht verstanden.


Ich habe neue Datei mit meinen Versuchen angehängt. Ich arbeite mit Livecycle Designer aber in der SAP Welt, deswegen habe ich z.B. [fontsize=2]xfa.host.messageBox() statt  app.alert() benutzt[/fontsize]. Ist der Fehler eventuell noch in so kleinen Syntaxisfeinheiten versteckt? Kannst Du bei Dir diese Funktionalität vielleicht versuchen nachzubauen.

Für bisherige und weitere Unterstützung bin ich sehr dankbar.

MfG, ciberadobe.


------------------------------------------------

Beim Feld BUKRS:
[fontsize=2]
data.#subform[0].BUKRS::exit - (JavaScript, client)

AllgScript.Eingabewert_gegen_DDListe_neu_exit();

**********************************
[fontsize=2]
data.#variables[0].AllgScript - (JavaScript, client)
[/fontsize][/fontsize][fontsize=2][fontsize=2]
//Die funktion ist im exit Ereignis des Feldes BUKRS
[/fontsize]
[/fontsize]
[fontsize=2][fontsize=2]
function[/fontsize]
[/fontsize]
[fontsize=2] Eingabewert_gegen_DDListe_neu_exit() {
[/fontsize][fontsize=2][fontsize=2]
[/fontsize]
[/fontsize]
[fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] newTXT [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] event.newText;

[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] searchString [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] [/fontsize][fontsize=2][fontsize=2]new[/fontsize][/fontsize][fontsize=2] RegExp(newTXT[/fontsize][fontsize=2][fontsize=2]+[/fontsize][/fontsize][fontsize=2]".*"[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2]"gi");

[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] Counter [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] 0;

[/fontsize][fontsize=2][fontsize=2]for[/fontsize][/fontsize][fontsize=2] ([/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] i [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] 0; i [/fontsize][fontsize=2][fontsize=2]<[/fontsize][/fontsize][fontsize=2] $record.GT_BUKRS_BUTXT.length; i[/fontsize][fontsize=2][fontsize=2]++[/fontsize][/fontsize][fontsize=2]) {

[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] rslt [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] String($record.GT_BUKRS_BUTXT.item(i)).search(searchString);

[/fontsize][fontsize=2][fontsize=2]if[/fontsize][/fontsize][fontsize=2] (rslt [/fontsize][fontsize=2][fontsize=2]!=[/fontsize][/fontsize][fontsize=2] [/fontsize][fontsize=2][fontsize=2]-[/fontsize][/fontsize][fontsize=2]1) { Counter[/fontsize][fontsize=2][fontsize=2]++[/fontsize][/fontsize][fontsize=2];  }[/fontsize]

[fontsize=2] }

[/fontsize][fontsize=2][fontsize=2]if[/fontsize][/fontsize][fontsize=2] (Counter [/fontsize][fontsize=2][fontsize=2]==[/fontsize][/fontsize][fontsize=2] 0) {[/fontsize]

[fontsize=2]xfa.host.messageBox("Inhalt des Eintrages aus der Werteliste darf nicht verändert werden - Eingabewert_gegen_DDListe_neu_exit."); }

} [/fontsize][fontsize=2][fontsize=2]// function Eingabewert_gegen_DDListe_neu_exit
[/fontsize]
[/fontsize]

 

Feldwert gegen die Einträge in der Dropdownliste prüfen.

Verfasst: 07.02.2011, 12:55
von yuc2me
Hallo ciberadobe,

probier es mal bitte mit einer kleinen Korrektur. es heiste "XFA.event.newText".
Falls das nicht funktioniert, dann muss man da vielleicht der Funktion mit übergeben.
"AllgScript.Eingabewert_gegen_DDListe_neu_change(xfa.event.newText);"
Meiner Meinung nach sollte es in das changeEvent des DropDown, auch wenn ich immernoch nicht so recht weiß, was du damit bezwecken willst. ;)

Zu dem Thema RegExp:

".*" bedeutet kein oder ein beliebiges Zeichen
"gi" bedeutet global auf Suchstring anwenden und Groß-/Kleinschreibung ignorieren.

MfG, yuc2me

Feldwert gegen die Einträge in der Dropdownliste prüfen.

Verfasst: 08.02.2011, 10:00
von ciberadobe
Hallo yuc2me.


Ich versuche es an drei Finger zu erklären, obwohl ich mein Anliegen im ersten Beitrag beschrieben habe. Dachte ich zumindest, oft ist es von der Seite schwirieger zu verstehen, was der andere eigentlich möchte, geht mir oft auch so.

Beispiel: Ich habe eine Dropdown Liste mit fünf Einträgen,

Text      Wert

Papa     1

Mama    2

Kind1     3

Kind2     4

Kind12   5

Benutzereingabe im Feld mit dieser DD Liste ist erlaubt, dies ist ein MUSS.

Weil man nicht aus einer großen Liste den Eintrag suchen möchte, sondern durch die Eingabe im Feld die Liste eingränzen und aus dem Rest was auswählen. Man gibt im Feld "Kind" ein und es werden drei Einträge angezeigt - Kind1, Kind2, Kind12. Wenn man "Kind1" eingibt bleiben Einträge Kind1 und Kind12. Man hofft so die Formulare schneller ausfüllen zu können. Mit dem Eingränzen der Listeneinträge die nach der Eingabe im Feld angezeigt werden, funktioniert das soweit, nur man möchte nachcher diese Eingabe überprüfen - gegen die Werte aus der DD Liste. Überprüfen, weil die Benutzereingabe im Feld erlaubt ist und der User kann da Misst eintragen.

Ich würde sogar sagen man braucht hier kein [fontsize=2]RegExp. Wozu? Mir reicht schon zu wissen das ein Eintrag aus der DD Liste mit dem aktuellen Wert übereinstimmt, dann ist alles OK.[/fontsize]

[fontsize=2]Aktuellen ausgewählten Wert aus dem Feld holen, Schleife über die DD Liste machen und jeden Eintrag aus der Liste mit diesem aktuellen Wert vergleichen. Wenn etwas gleich ist dann OK, Wert kommt aus der DD Liste.[/fontsize]
[fontsize=2][fontsize=2][fontsize=2][fontsize=2][fontsize=2]
Im Feld wird die funktion aufgerufen:

AllgScript.Eingabewert_gegen_DDListe_neu_exit(xfa.event.newText[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2] $record.GT_BUKRS_BUTXT);
[/fontsize]
function[/fontsize]
[/fontsize]
[fontsize=2] Eingabewert_gegen_DDListe_neu_exit(oFeldwertneu[/fontsize][fontsize=2][fontsize=2],[/fontsize][/fontsize][fontsize=2] oDDListe) {[/fontsize]
[fontsize=2][fontsize=2]
[/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] Counter [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] 0;
[/fontsize][/fontsize][/fontsize][fontsize=2][fontsize=2][/fontsize][/fontsize]
[fontsize=2][fontsize=2]for[/fontsize][/fontsize][fontsize=2] ([/fontsize][fontsize=2][fontsize=2]var[/fontsize][/fontsize][fontsize=2] i [/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] 0; i [/fontsize][fontsize=2][fontsize=2]<[/fontsize][/fontsize][fontsize=2] oDDListe.length; i[/fontsize][fontsize=2][fontsize=2]++[/fontsize][/fontsize][fontsize=2]) {

[/fontsize][fontsize=2]  if (oDDListe.item(i)).rawValue ==  [fontsize=2]oFeldwertneu.rawValue[/fontsize])[/fontsize][fontsize=2] {[/fontsize]

  [fontsize=2] Counter[/fontsize][fontsize=2][fontsize=2]++[/fontsize][/fontsize][fontsize=2]; } // Feldwert stimmt mit einem der Einträge aus der DD Liste überein[/fontsize]

[fontsize=2]} // Ende for Schleife
[fontsize=2]
[/fontsize][fontsize=2][fontsize=2]if[/fontsize][/fontsize][fontsize=2] (Counter =[/fontsize][fontsize=2][fontsize=2]=[/fontsize][/fontsize][fontsize=2] 0) // nichts passendes gefunden[/fontsize]

[fontsize=2]{ xfa.host.messageBox("Inhalt des Feldes nicht in der Werteliste enthalten."); }[/fontsize][fontsize=2]

} [/fontsize][fontsize=2][fontsize=2]// Ende function Eingabewert_gegen_DDListe_neu_exit[/fontsize][/fontsize][/fontsize][/fontsize][fontsize=2]
[/fontsize]
Wissen über genaues referenzieren auf die Texte und Werte der DD Liste in der Schleife über diese DD Liste fehlt mir ein wenig. Aber ich denke ich bin nah dran.


Danke für die Unterstützung.

MfG, ciberadobe.