Benutzerdefiniertes Objekt Abfragen in ZoomFlex
Dieser Artikel befasst sich, wie Sie benutzerdefinierte Abfragen in ZoomFlex verwenden, um Daten vom Server-Side-Objekte zurückgeben.
In den generierten Code ZoomFlex unter der & # # 39; events & # # 39; Ordner ist ein [Klassenname] GetObjectsEvent.as Datei. Dieses Ereignis hat 3 Eigenschaften, die Spalten, und fieldName fieldValue sind. Dies bedeutet, wenn Sie die Veranstaltung, die Sie in den Spalten passieren können Sie aus der Datenbank zurück Versendung, den Feldnamen und Feld Wert, der in SQL Begriffe etwas aussehen würde
Wählen Sie Spalten aus myclasstable wo fieldname = Feldwert
Das ist in Ordnung, wenn Sie die Filter nur auf einem Feld-Wert-Paar, aber was passiert, wenn man auf mehreren Namen Paar Werte filtern möchten?
Die Antwort ist recht einfach und ist eine schnelle 5 Minuten Arbeit. Man muss einfach nur eine neue Eigenschaft, die Veranstaltung, fügen die entsprechenden Argumente für den Befehl und delegieren und machen Sie einen schnellen Wechsel an den Delegaten getVOsByFilter Funktion.
Hier sind die Schritte
Öffnen Sie das generierte [Klassenname] GetObjectsEvent.as Datei
Fügen Sie eine zusätzliche Eigenschaft namens whereClause
öffentlichen var Säulen: String = "";
öffentlichen var fieldName: String = "";
öffentlichen var fieldValue: String = "";
öffentlichen var whereClause: String = "";
Auch die anderen Funktionen Update für den Fall,
public function RssGetObjectsEvent (EventID: String, fieldName: String = "", fieldValue: String = "", whereClause: String = "", Spalten: String = "LABEL, OBJ_UUID, geschaffen", Handler: Rückrufe = null) (
super (eventID, Handler, true, true);
this.fieldName = fieldName;
this.fieldValue = fieldValue;
this.columns = Spalten;
this.whereClause = whereClause;
)
überschreiben public function clone (): Event (
return new RssGetObjectsEvent (this.type). CopyFrom (this);
)
überschreiben public function CopyFrom (ev: Event): Event (
/ / Kopie benutzerdefinierte Attribute
if (eV ist RssGetObjectsEvent) (
this.columns = (ev als RssGetObjectsEvent). Spalten;
this.fieldName = (ev als RssGetObjectsEvent). fieldName;
this.fieldValue = (ev als RssGetObjectsEvent). fieldValue;
this.whereClause = (ev als RssGetObjectsEvent). whereClause;
)
Rückkehr super.copyFrom (this);
)
Öffnen Sie nun den Befehl / [Klassenname] Command.as
Finden Sie die getVO & # # 39; sByFilter Funktion und fügen Sie das Argument whereClause
public function getVOsByFilter (event: RssGetObjectsEvent): void (
var Handler: Rückrufe = new Callbacks (onResults_getVOsByFilter, this.onFault);
var delegieren: RssDelegate = new RssDelegate (Handler);
delegate.getVOsByFilter (event.fieldValue,
event.fieldName,
event.columns,
__model.blockSize,
__model.maxRows,
__model.startRow,
event.whereClause);
)
Öffnen Sie nun die Delegierten / [cassname] Delegate.as
Finden Sie die getVOsByFilter Funktion und fügen Sie das Argument whereClause
public function getVOsByFilter (filterValue: String,
Filtername: String,
Spalten: String,
Blockgröße: int,
maxRows: int,
StartRow: int,
whereClause: String): void (
finden, wo das whereClause als Argument an den Server in der getVOsByFilter Funktion übergeben wird und setzen ihn auf den Wert des übergebenen Arguments whereClause
oArgs ["whereClause"] = whereClause;
Jetzt in Ihrem Profil können Sie fügen Sie den Code, um das Event Dispatch
dispatchEvent (neu RssGetObjectsEvent (RssGetObjectsEvent.GETBYFILTER ,"",""," label = # & # 39; & # x # 39; und schuf = & # # 39; Test & # # 39 ;","*", null)) ;
Wie Sie sehen, ich bin auf dem Etikett Filterung = "x" und schuf = "test" sowie der Rückkehr alle Spalten mit Hilfe der "*" in meiner select-Klausel.
Zur Prüfung der Veranstaltung ist Dispatching richtig auf Ihre Bewerbung gehen und führen Sie es so, dass das Ereignis (i & # # 39 Depeschen; m vorausgesetzt, Sie sind mit dem Benutzer interagieren mit einem Eingang, wie ein Button). Öffnen Sie die ZoomFlex Debug-Bildschirm und suchen Sie nach der Veranstaltung. Wenn Sie auf die Veranstaltung klicken Sie sollten Ihren whereClause an den Server übergeben wird.
------------- Remote Object Argumente ---------------------------
Preis:
whereClause: label = & # # 39; & # x # 39; und schuf = & # # 39; Test & # # 39;
Blockgröße: 200
className: com.a3.model.vo: RssVO
useBlockFactor: true
selectFields: *
StartRow: 1
filterValueText:
filterValuefilterName:
Comments
I guess there is always the ColdFusion route but would be nice to just do it from Flex with this dispatchEvent.
"Ordering is done by two arguments. The first is orderBy which is the column(s) to order by. This defaults to label. The second is orderDir which specifies whether to order ascending (asc) or descending (desc). This defaults to asc. Multiple columns can be specified in orderBy, however if you need better control over the ordering, use the argument orderClause, which allows you to specify a complete ordering clause, excluding the command, ORDER BY, which may be db specific."
# Posted by: Arnold Young | 16 May 2008 | 08:34 PM
Arnold, you seem to have answered your own question I think. You simply follow the same steps for adding a whereclause to add an orderby and orderdir argument to the filtered VO event.
# Posted by: Grant Strake | 16 May 2008 | 08:44 PM














Thanks - this is great! Can we extend this to have an orderBy Property also? That way we would have three main parts of a select statement covered here -- SELECT, WHERE, and ORDER BY with this extended dispatchEvent? The sorting in Flex seems to be more code than needed like 7 lines where an ORDERBY would handle it much simpler. For instance, it is quite involved sorting date/time descending properly in a Flex array collection.
# Posted by: Arnold Young | 16 May 2008 | 11:53 AM