Показать сообщение отдельно
Старый 17.07.2007, 15:40   #1  
Blog bot is offline
Blog bot
Участник
 
25,477 / 846 (79) +++++++
Регистрация: 28.10.2006
jinx: Abfragen und Nutzungsdaten
Manchmal ist es notwendig eine Abfrage (Query) ?ber den Quellcode zu manipulieren um dort bspw. Einschr?nkungen vorzubelegen. Am h?ufigsten ist mir das in letzter Zeit bei Berichten passiert, es ist aber auch schon vorgekommen das ich komplette Abfragen in Tabellen abgespeichert habe um diese sp?ter nochmals benutzen bzw. manipulieren zu k?nnen. In beiden F?llen bin ich dabei auf die gleichen Probleme gestossen.
M?chte man Abfragen (bspw. In Berichten) mittels Quellcode manipulieren kann es Aufgrund der Nutzungsdaten zu Problemen in der Anzeige und in der Ausf?hrung der Abfrage kommen. Denn trotz manueller ?nderung an der Abfrage werden beim Aufruf des Dialoges der Abfrage noch die Nutzungsdaten des letzten Aufrufes der aktuellen Abfrage genommen/ geladen. Das f?hrt dann dazu das die Ver?nderungen nicht angezeigt oder beim Ausf?hren benutzt werden, sondern genau die Einschr?nkungen/ Einstellungen die auch im Dialog erscheinen.
Um das zu verhindern k?nnen mittels der Klasse SysQueryRun noch zus?tzliche Einstellungen getroffen werden. Hierzu wird eine neue Instanz von SysQueryRun angelegt, die mit der aktuellen Abfrage initialisiert wird.

Mittels
sysQueryRun.promptLoadLastUsedQuery(false);
wird festgelegt, dass die Nutzungsdaten des letzten Aufrufes nicht vorbelegt bzw. verwendet werden. Somit hat man nun die M?glichkeit die Abfrage mittels Quellcode zu manipulieren, ohne das es hier zu Problemen der Nutzungsdaten kommt, da diese nicht mehr ber?cksichtigt werden.
Im Bericht kann das beispielsweise so aussehen

X++:
public void init()
{
    SysQueryRun sysQueryRun;

    super();

    element.query().dataSourceNo(1).addRange(fieldnum(Tabelle, Feld)).value("NeuerWert");

    sysQueryRun = new SysQueryRun(element.query());

    sysQueryRun.promptLoadLastUsedQuery(false);

    element.queryRun(sysqueryRun);
}
Weitere nette M?glichkeiten bieten noch folgende Methoden
  • sysQueryRun.promptAllowSave ( boolean ); - speichern der Abfrage erlauben
  • sysQueryRun.promptShowSorting(boolean); - Sortierung anzeigen
  • sysQueryRun.promptAllowAddRange(QueryAllowadd); - Hinzuf?gen neuer Einschr?nkungen erlauben
  • sysQueryRun.promptAllowAddSorting(QueryAllowadd); - Hinzuf?gen neuer Sortierungen erlauben
  • sysQueryRun.promptAllowAddDataSource(boolean); - Hinzuf?gen neuer Tabellen erlauben#
  • sysQueryRun.promptShowReset(boolean); - Zur?cksetzten der Abfrage
  • sysQueryRun.promptSaveQueryPrUser(boolean);
Da SysQueryRun von QueryRun abgeleitet ist, kann SysQueryRun von jeder Standardquery initialisiert werden um dann die erweiterten Funktionen von SysQueryRun nutzen zu k?nnen.

Noch eine kleine Besonderheit, die mir bei den Berichten und deren Aufruf aufgefallen ist:
Wird der Bericht direkt (ohne MenuItem) aufgerufen erh?lt man immer die Originalen inkl. der per Quellcode getroffenen Einschr?nkungen angezeigt. Wir der Bericht aber ?ber ein MenuItem aufgerufen erh?lt man die zu letzt vom Benutzer inkl. der per Quellcode getroffenen Einschr?nkungen/ Einstellungen. Dabei werden die evtl. vorhandenen Einstellung ?berschrieben, wenn auf vorhandene Element zugriffen wird (findRange (Wert wird ?berschrieben) anstelle von addRange (alter Wert wird beibehalten und ein neuer hinzugef?gt)). Somit gehen in diesem Fall nicht alle vom Benutzer festgelegten Einstellungen verloren.




Es wird keine Haftung oder Gew?hrleistung auf die Richtigkeit der gemachten Angaben gegeben. Die Verwendung erfolgt auf eigene Gefahr. Copyright © Mathias F??ler * jinx's AX Blog http://starside.eu *

More...