PDA

View Full Version : dbSuggestionForm mit Anzeige mehrerer



Ralf
13-Apr-2016, 03:31 AM
Hallo,

In der Demo "dbSuggestionForm" ist ein Beispiel (Customer State), dass mehr als ein Feld Zeigt (zip + state).
Das wird dort über die ValidationTable gelöst.

Ist es grundsätzlich auch möglich ein zweites Dateifeld zu zeigen ohne über "peSuggestionMode to smCustom" mit Struct oder arrays zu arbeiten?

Ralf

GhostShotIV
13-Apr-2016, 04:35 AM
Hallo Ralf,

ich habe bisher noch nie die neuen dbSuggestionForms verwendet, aber von der Hilfe her sieht es so aus, als ob das "OnFindSuggestions" Event das können dürfte, was du suchst.
Es wird (wenn ich das Beispiel der Hilfe richtig verstehe) auch aufgerufen, wenn peSuggestionMode auf smFind steht.

In diesem kann man dann den aSuggestions Struct entsprechend um die zusätzlich anzuzeigenden Werte erweitern.
In der Hilfe ist ein Beispiel für "OnFindSuggestions" und ein Link auf das "tSuggestion" Struct, bei dem man dann das "aValues" String Array mit den anzuzeigenden Werten füllen kann.

Ralf
13-Apr-2016, 06:37 AM
hallo Ghost,

ne genau das brauche ich nicht.

Ich möchte bei der Suche in der Adressenverwaltung nicht nur das erste Namensfeld "Name1" sondern zur Unterscheidung dazu auch "Name2" mit anzeigen. Weil es div Adressen mit der gleichen Name1 gibt. Wenn ich jetzt ein Struct oder Array mit 25.000 Daten füllen muss geht das nicht mehr (zu langsam).

Ralf

GhostShotIV
13-Apr-2016, 07:10 AM
Hallo Ralf,

dafür muss man nicht zwangsweise einen eigenen Struct komplett füllen.
Hier ein Beispiel, das man in die DemoSuggestionForm.vw einsetzen kann (in oSuggestionForm1)

Procedure OnFindSuggestions String sSearch tSuggestion[] ByRef aSuggestions
Handle hoServer
Integer I iFile
RowID riRecord
Forward Send OnFindSuggestions sSearch (&aSuggestions)
Get Server to hoServer
Get Main_File of hoServer to iFile
For I from 0 to (SizeOfArray(aSuggestions)-1)
Move (DeserializeRowID(aSuggestions[I].sRowId)) to riRecord
Send FindByRowId of hoServer iFile riRecord
If (Found) Begin
Get Field_Current_Value of hoServer Field Customer.Address to aSuggestions[I].aValues[SizeOfArray(aSuggestions[I].aValues)]
Get Field_Current_Value of hoServer Field Customer.City to aSuggestions[I].aValues[SizeOfArray(aSuggestions[I].aValues)]
End
Loop
End_Procedure

Mit dem "Forward Send" lassen wir die Klasse das übliche tun und gehen danach nur noch durch die bereits gefilterten/vorgeschlagenen Werte, suchen den jeweiligen Datensatz raus (mit der RowID die auf aSuggestions[I].sRowId steht) und können damit andere Werte in dem ".aValues" Array von "aSuggestions[I]" ergänzen (hier Address und City).

Ralf
13-Apr-2016, 11:31 AM
Hallo Gohst,

Das ist schon ganz prima, hat nur den Nachteil, dass wenn eine Auswahl angezeigt z.B. nach dem "set piStartAtChar to 3" 3.Zeichen, muss diese auch benutzt bzw. ausgewählt werden. Es kann dann nicht weiter zur Einschränkung des Auswahl eingegeben weden wie das sonst der Fall ist.

Ralf