acumatica
Acumatica BQL-Referenz
Suche…
BQL Parse und Verify
Jeder Acumatica-Anwendungsentwickler verbringt viel Zeit damit, BQL-Code zu schreiben. Gleichzeitig kennen nicht alle die zugrunde liegenden Details der Funktionsweise von BQL-Typen unter der Haube.
Das Kernstück von BQL sind zwei Schlüsselmethoden: Parse()
und Verify()
, die von der IBqlCreator
Schnittstelle IBqlCreator
werden. Die meisten der häufig verwendeten BQL-Typen, wie z. B. Where<>
, And<>
, Or<>
usw., stammen von dieser Schnittstelle.
Man muss zugeben, dass die Namen, mit denen diese Methoden historisch verbunden sind, nicht sehr beschreibend sind. Möglicherweise bessere alternative Namen für sie wären PrepareCommandText
und Evaluate
.
Parse
public void Parse(
PXGraph graph,
List<IBqlParameter> pars,
List<Type> tables,
List<Type> fields,
List<IBqlSortColumn> sortColumns,
StringBuilder text,
BqlCommand.Selection selection)
Der einzige Zweck von Parse()
besteht darin, BQL in einen SQL-Befehl zu übersetzen, der an DBMS gesendet wird. Daher akzeptiert diese Methode einen StringBuilder
Parameter, der den gerade erstellten SQL-Befehl darstellt, an den der BQL-Ersteller die SQL-Textdarstellung seiner selbst anhängt.
Zum Beispiel hängt die Parse()
Methode des Prädikats And<>
an den Befehlstext " AND "
an und fordert rekursiv die Übersetzung aller geschachtelten BQL-Ersteller an.
Insbesondere und And<ARRegister.docType, Equal<ARDocType.invoice>>
wird in etwas übersetzt wie "AND "ARRegister.DocType = 'AR'"
.
Überprüfen
public void Verify(
PXCache cache,
object item,
List<object> pars,
ref bool? result,
ref object value)
Im Gegensatz zu Parse()
arbeitet Verify()
ausschließlich auf Anwendungsebene.
Bei einem Datensatz (z. B. einem ARRegister
Objekt) können mit ihm Ausdrücke berechnet werden, einschließlich Formeln berechnen und Bedingungen auswerten.
Der result
wird zum Speichern des Ergebnisses der booleschen Zustandsbewertung verwendet. Es wird hauptsächlich von Prädikat- BQL-Erstellern wie Where<>
.
Der value
Parameter wird zum Speichern des Ausdrucksberechnungsergebnisses verwendet. Der value
einer BQL- Constant<string>
ist beispielsweise die Zeichenfolgendarstellung dieser Konstante.
Meistens beeinflussen BQL-Ersteller entweder das Ergebnis oder den Wert, selten jedoch beide.
Eine bemerkenswerte Verwendung der Verify()
-Methode ist die statische BqlCommand.Meet()
-Methode, die von PXCache
verwendet wird, um festzustellen, ob ein bestimmtes Element den BQL-Befehl erfüllt:
public bool Meet(PXCache cache, object item, params object[] parameters)
{
List<object> pars = new List<object>(parameters);
bool? result = null;
object value = null;
try {
Verify(cache, item, pars, ref result, ref value);
}
catch (SystemException ex) {
throw new PXException(String.Format("BQL verification failed! {0}", this.ToString()), ex);
}
return result == null || result == true;
}
Fazit
Die wahre Stärke und Schönheit von BQL-Erstellern liegt darin, dass die meisten von ihnen sowohl auf Datenbank- als auch auf Anwendungsebene verwendet werden können. Dadurch wird der Mechanismus zur Zusammenführung von Cumatica-Caches ermöglicht und eine großartige Möglichkeit für die Wiederverwendbarkeit von Code geschaffen.
Wenn Sie beispielsweise Datensätze aus der Datenbank auswählen, wird die Where<>
Klausel des BQL-Befehls verwendet:
- Wird
Parse()
bereitstellen, um sich während der Befehlsvorbereitung in SQL-Text zu übersetzen. - Liefert
Verify()
während der Cache - Fusion zu bestimmen , welche bereits Elemente im Cache mit WohnsitzMeet()
dieWhere<>
Bedingungen Klausel , um eine solche zwischengespeicherten Elemente in der Ergebnismenge aufzunehmen.