OpenM2 Zusatzinfo 3 - Query

Aus openM2-Wiki
Wechseln zu: Navigation, Suche


openM2


Zusatzinformation Teil 3
Query und Abfrage


Version 2.3.1


Klagenfurt, 10. April 2007


trinitec IT Solutions & Consulting GmbH


Lakeside B01
9020 Klagenfurt
Austria | Europe


http://www.trinitec.at


Versionsprotokoll
Dieses Dokument ist unter Versionskontrolle. Jeder Änderung, die sich auf den Inhalt bezieht bzw. diesen maßgeblich verändert, muß ein Eintrag in die folgende Tabelle und die Inkrementierung der Versionsnummer der Titelseite und in der Fußzeile folgen.
Die Änderungen müssen für alle Parteien transparent und nachvollziehbar bleiben und können nur bei gegenseitiger Übereinstimmung erfolgen.


Version Bearbeitet von Bis Abgenommen von am Bemerkung
1.0 Andi 13.03.2001 Version für R2.1
2.0 Andi 01.03.2001 Version für R2.2
3.0 Andi 29.03.2001 Version für R2.2AddOn1
4.0 Andi 06.02.2002 Version für R2.3

Version 1.0


  • Die Erste Version der Schulung zu QueryCreators und Abfragen.
  • Gilt ab Release 2.1 Build 2.10.1047

Version 2.0


  • Erweiterung des QueryCreators um die Felder QUERYTYPE und GROUP BY. Neuer Suchfeldtyp OBJECTID. Gilt für Release 2.2 Build 2.20.1112.

Version 3.0
Erweiterungen in Release 2.2.1 Build 1237


  • Erweiterung um die Suchfeldtypen QUERYSELECTION (queryname) und QUERYSELECTIONNUM (queryname) und QUERYSELECTIONOID (queryname). Änderung des Trennzeichens für die Querydefinition auf Beistrich - Abwärtskompatibilität ist gegeben.
  • Suchfeldtyp LESSQUALMONEY wird zu LESSEQUALMONEY und GREATERQUALMONEY zu GREATEREQUALMONEY .
  • Neuer Spaltentyp OBJECTID zur Verwendung bei Queries für QUERYSELECTIONOID, INTEGER , für Nicht-Gleitkommazahlen, INPUT_STRING, INPUT_NUMBER, INPUT_MONEY, INPUT_DATE für Eingabefelder in Verbindung mit einem Button.
  • Möglichkeiten der Verwendung einer Query beim Value Typen QUERYSELECTIONBOX , QUERYSELECTIONBOXNUM und QUERYSELECTIONBOXINT bei Formularen.
  • Möglichkeit eine Query über einen selbst definierten Button über das JavaScript showQuery (...) aufzurufen.

Version 4.0
Erweiterungen in Release 2.3


  • Möglichkeit eine Suchte über einen selbst definierten Button über das javaScript showSearch (..) aufzurufen.
  • Anzeige des Suchergebnisses über Stylesheets
  • Feld von Typ FIELDREF kann nicht als Suchfeld verwendet werden, ansonsten kommt es zu Fehlern im Ergebnis.


Einleitung

Aufbau der flexiblen Suche

Die Suche setzt sich aus 2 Objekttypen zusammen: der Abfragenvorlage (in Folge QueryCreator genannt) und der Abfrage (QueryExecutive).


Im QueryCreator werden die Regeln für eine bestimmte Suche festgelegt. Diese Regeln beziehen sich auf die SQL-Query die für diese Suche ausgeführt wird, auf die Repräsentation in der Ergebnisliste und auf die möglichen Einschränkungsfelder in denen die Suchkriterien eingegeben werden können.


Alle QueryCreator die der Benutzer sehen darf, stehen bei der erweiterten Suche zur Auswahl.
Bei der Erstellung einer Abfrage wird ebenfalls die Liste der QueryCreator zu Auswahl gestellt.
Der Abfrage muß ein QueryCreator zugewiesen werden.


Integration im System

Um die Suche nach den openM2-Typen weiterhin zu ermöglichen gibt es für jeden Typen einen QueryCreator der pro Domäne automatisch erzeugt wird.


Alle Querycreator die für alle Benutzer zugänglich sein sollen werden in der Ablage Gruppe/Systemqueries/Publicqueries angelegt. In dieser Ablage besitzt nur der Benutzer trinitec Bearbeiten und Verwaltungsrechte alle anderen nur Sehenrechte.


Um neue QueryCreator für alle Benutzer zu erzeugen muß in dieser Ablage ein QueryCreator erzeugt werden. Wenn QueryCreator für bestimmte Benutzer erzeugt werden sollen, empfiehlt es sich eine eigene Ablage für diese QueryCreator zu erstellen und für diese auch die Rechte zu setzen.


Beispiel:
QueryCreator WINNER (meisten Benutzerzugriffe pro Objekt in bestimmter Zeit) und LASTLOGIN (letztes Login der Benutzer) sollen nur für Administratoren zugänglich gemacht werden.


Vorgehensweise:


  • Erzeugung der Ablage Gruppe/Systemqueries/Adminqueries
  • Setzen der !! Sehen !!! - Rechte für Administratoren auf diese Ablage
  • Erzeugung der beiden QueryCreator in dieser Ablage (die Rechte werden übernommen)

Dadurch können nur Administratoren diese Queries durch die Erzeugung von Abfragen oder durch Start der erweiterten Suche ausführen.


Abfragenvorlage (QueryCreator)

Die Abfragenvorlage besteht aus folgenden Feldern:
queryType - zeigt an wo Query aufscheint
SELECT, FROM, WHERE, GROUPBY, ORDER BY,- für die Definition der SQL-Query
columnnames, columnattributes, columntypes,- für die Definition der angezeigten Spalten
searchfieldnames, searchfieldattributes, searchfieldtypes . - für die Definition der Suchefelder


XML - Formular

Das XML-Formular für den Import sieht folgend aus (das Beispiel zeigt eine Suche nach Waren mit Farben und Größen):


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- DOCTYPE IMPORT SYSTEM "import.dtd" -->
<IMPORT ACTION="">
<OBJECTS>
<OBJECT TYPECODE ="QueryCreator">
<SYSTEM>
<ID DOMAIN=""></ID>
<NAME>Schuhe</NAME>
<DESCRIPTION>Sucht nach Schuhe abhängig von Farbe und Größe ohne
Rechteabfrage.
</DESCRIPTION>
<VALIDUNTIL>19.02.2001</VALIDUNTIL>
</SYSTEM>
<VALUES>
<VALUE FIELD="QUERYTYPE" TYPE="TEXT">
SEARCH,REPORT,SYSTEM
</VALUE>
<VALUE FIELD="SELECT" TYPE="TEXT">
o.name, o.description, p.ean, farbe.codevalues AS farbwerte,
groesse.codevalues AS groessenwerte
</VALUE>
<VALUE FIELD="FROM" TYPE="TEXT">
ibs_Object o, ibs_Product_01 p,
(
select v.codevalues, v.productOid
from ibs_Object category, ibs_ProductCodeValues_01 v
where v.categoryOid = category.oid
and category.name = 'Farbe'
) farbe,
(
select v.codevalues, v.productOid
from ibs_Object category, ibs_ProductCodeValues_01 v
where v.categoryOid = category.oid
and category.name = 'Größe'
) groesse
</VALUE>
<VALUE FIELD="WHERE" TYPE="TEXT">
<!-- tVersionId des TOS-Types WARE -->
tVersionId = 16848129
and p.oid = o.oid
and farbe.productOid = p.oid
and groesse.productOid = p.oid
</VALUE>
<VALUE FIELD="GROUPBY" TYPE="TEXT">
</VALUE>
<VALUE FIELD="ORDERBY" TYPE="TEXT">
o.name ASC
</VALUE>


<VALUE FIELD="COLUMNHEADERS" TYPE="TEXT">
Produktname,Produktbeschreibung,Farben,Größen
</VALUE>
<VALUE FIELD="COLUMNQUERYATTRIBUTES" TYPE="TEXT">
name,description,farbwerte,groessenwerte
</VALUE>
<VALUE FIELD="COLUMNTYPES" TYPE="TEXT">
STRING,STRING,STRING,STRING
</VALUE>
<VALUE FIELD="SEARCHFIELDS" TYPE="TEXT">
Farben,Größen
</VALUE>
<VALUE FIELD="SEARCHFIELDQUERYATTRIBUTES" TYPE="TEXT">
farbwerte,groessenwerte
</VALUE>
<VALUE FIELD="SEARCHFIELDTYPES" TYPE="TEXT">
STRING;STRING
</VALUE>
</VALUES>
</OBJECT>
</OBJECTS>


Für die Standard openM2-Typen gibt's bereits ein XML-Formular welches alle nötigen QueryCreator beinhaltet.


verschiedene Abfragevorlagetypen

(QUERYTYPE)
Ein QueryCreator scheint in openM2 an verschiednen Stellen auf.


  • Bei der erweiterten Suche. ( SEARCH )
  • Bei der Abfrage. ( REPORT )
  • Systemintern für Personaliesierung in verschiedenen Bereichen (Workflow, Ware ...) ( SYSTEM )

... deshalb gibt es das Multiselektionsfeld queryType , in dem man definieren kann welche Funktionalität die Query unterstützt ( SEARCH, REPORT oder SYSTEM ).


Es kann jede Query für eine, oder mehrere beliebige Funktionen definiert werden. Wird nur SYSTEM ausgewählt, so ist diese Query weder bei der Suche noch bei der Abfrage auswählbar, wird aber zB. für einen Workflow oder eine flexible Schnittstelle im Warenkatalog benötigt.


Definition der SQL-Query

(SELECT, FROM, WHERE, GROUPBY, ORDERBY)
Wie in der DB - Schulung bereits erwähnt besteht eine SQL-Query aus mehreren Teilen (Klauseln).
Das sind die Klauseln: SELECT, FROM, WHERE, GROUP BY, ORDER BY


Im QueryCreator muß die Query in diese Klauseln zerlegt eingegeben werden ohne den Klauselbezeichner nochmals einzugeben.


Beispiel:
SELECT: name
FROM: ibs_Object, min state
WHERE: typeName = 'Ablage'
GROUPBY: name
ORDER BY: name ASC


Tabellenaliases

Tabellenaliases werden für Spalten die in mehreren Tabellen mit gleichen Namen vorkommen verwendet. Tabellenaliases dürfen NICHT bei den columnattributes des QueryCreators verwendet werden. Um dies zu verhindern müssen Spaltenaliases verwendet werden (nähere Beschreibung bei Definition von Spalten).


Beispiel:
SELECT o.name, o.description, u.fullname
FROM ibs_Object o, ibs_User u
WHERE o.oid = u.oid


    • der Spaltenname 'name' kommt in der Tabelle ibs_Object und in der Tabelle ibs_User vor und muß deshalb mit einem Tabellenalias gekennzeichnet werden.

Spaltenaliases

Spaltenaliases werden für Spalten verwendet die unter einem anderen Namen als deren Spaltenname in der Ergebnisliste aufscheinen sollen.
Spaltenaliases dürfen NICHT bei den searchfieldattributes des QueryCreators verwendet werden. Dafür kann man dort ohne Probleme Tabellenaliases verwenden. (nähere Beschreibung bei Definition Suchfelder).


Beispiel:
SELECT o.name AS objectName , o.description, u.fullname
FROM ibs_Object o, ibs_User u
WHERE o.oid = u.oid


Der Spaltenalias für die Spalte name der Tabelle ibs_Object ist in diesem Fall objectName.


Definition von Spalten

(COLUMNHEADERS, COLUMNQUERYATTRIBUTES, COLUMNTYPES)


Allgemein

Für die Definition der Spalten die in der Ergebnisliste angezeigt werden, werden die Felder columnnames, columnattributes und columntypes des QueryCreators verwendet.


columnnames: beinhaltet die Texte die im Header einer Jeder Spalte bei der Inhaltsansicht der Abfrage oder der erweiterten Suche stehen sollen. Als Trennzeichen zwischen den einzelnen Headers wird der Strichpunkt ';' verwendet.


columnattributes: beinhaltet die Attribute in der Query die zu der jeweiligen Spalte gehören. Die Reihenfolge muß ident zu den columnnames sein. Als Trennzeichen zwischen den einzelnen Attributen wird der Strichpunkt ';' verwendet. Es dürfen KEINE TABELLENALIASES in diesem Feld verwendet werden.


columntypes: beinhaltet die Bezeichnung der Typen zu jeder Spalte, da die Präsentation der Spalte von ihrem Typ abhängt. Die Reihenfolge muß wiederum ident zu den columnnames sein. Als Trennzeichen zwischen den einzelnen Attributen wird der Strichpunkt ';' verwendet.


Spaltentypen

Jeder mögliche Spaltentyp gehört zu einem oder mehreren Datenbanktypen der Spalte die im zugehörigen columnattribute verwendet wird.


Folgende Spaltentypen sind möglich:


Typename MSSQL Typ ORACLE Typ Beschreibung
STRING CHAR thumbs_down.gif

VARCHAR thumbs_down.gif

CHAR thumbs_down.gif

VARCHAR2 thumbs_down.gif

Normaler Text
NUMBER FLOAT NUMBER (x,x) Gleitkomma Zahlen
INTEGER INTEGER, SMALLINT, TINYINT INTEGER Ganze Zahlen
DATE DATETIME

SMALLDATETIME

DATE Datum ohne Zeit
MONEY MONEY

SMALLMONEY

NUMBER Zahl im Währungsformat

(Bsp: 4.123,-)

DATETIME DATETIME

SMALLDATETIME

DATE Datum mit Zeit
LONGTEXT TEXT CLOB Text mit mehr als 255 Zeichen
IMAGE CHAR thumbs_down.gif

VARCHAR thumbs_down.gif

CHAR thumbs_down.gif

VARCHAR2 thumbs_down.gif

siehe Beschreibung IMAGE als Spaltentyp
OBJECTID BINARY RAW (8) Objekt - id eines openM2 Objektes
BUTTON CHAR thumbs_down.gif

VARCHAR thumbs_down.gif

CHAR thumbs_down.gif

VARCHAR2 thumbs_down.gif

siehe Beschreibung Buttons als Spaltentyp
BUTTON_TEXT CHAR thumbs_down.gif

VARCHAR thumbs_down.gif

CHAR thumbs_down.gif

VARCHAR2 thumbs_down.gif

siehe Beschreibung Buttons als Spaltentyp
BUTTON_IMAGE (xxxx.gif) CHAR thumbs_down.gif

VARCHAR thumbs_down.gif

CHAR thumbs_down.gif

VARCHAR2 thumbs_down.gif

siehe Beschreibung Buttons als Spaltentyp
INPUT_STRING (<length>) Eingabefeld mit bestimmter Länge für den Eingabetypen STRING.
INPUT_NUMBER (<length>) Eingabefeld mit bestimmter Länge für den Eingabetypen NUMBER
INPUT_DATE (<length>) Eingabefeld mit bestimmter Länge für den Eingabetypen DATE
INPUT_MONEY (<length>) Eingabefeld mit bestimmter Länge für den Eingabetypen MONEY
VALUEDOMAIN OBJECTID OBJECTID siehe Beschreibung VALUEDOMAIN als Spaltentyp
VALUEDOMAIN(MULTIPLE) NVARCHAR(4000) NVARCHAR2(32000) siehe Beschreibung VALUEDOMAIN als Spaltentyp

IMAGE als Spaltentyp

Wird IMAGE als Spaltentyp benutzt, so muß im zugehörigen columnattribute die komplette URL zu einem Bild geliefert werden welches dann in dieser Spalte angezeigt wird.


Beispiel: Anwendungsfall Ware


SELECT : o.name, 'http:// <servername> /TOS/upload/productPictures/' + p.path + '/' + p.image AS image
FROM : ibs_Object o, ibs_Product_01 p
WHERE : o.oid = p.oid
columnnames : Name; Bild
columnattributes : name; image
columntypes : STRING; IMAGE


Buttons als Spaltentyp

Ab Release 2.1A (für Präsentationen auch früher) können in einer Spalte auch Buttons angezeigt werden. Das jeweils zum Button zugehörige Queryattribut muß das JavaScript bzw., die URL beinhalten, welche von diesem Button aufgerufen werden soll.
Wenn die OID des Objektes im JavaScript bzw. in der URL benötigt wird, muß die OID auch in der Query ausgelesen werden und als ObjektId gekennzeichnet werden (siehe Systemvariablen - #OBJECTID).


Beispiel: Bearbeiten


SELECT : oid, name, 'callOidFunction (#SYSVAR.ELEMOID#,top.load (71););' AS changeButton
FROM : ibs_Object
WHERE :
ORDER BY :
columnnames : #OBJECTID ; Name; Bearbeiten
columnattributes : oid ; name; changeButton
columntypes : SYSVAR ; STRING; BUTTON_IMAGE (change.gif)


Die Systemvariable #OBJECTID im Javascript wird während der Laufzeit ersetzt und die Referenzierung auf die Richtige JavaScript - Position im Browser (top.scripts.xxxx) wird ebenso hinzugefügt.


Das JavaScript welches aus dieser Abfrage resultiert sieht folgen aus:
top.script.callOidFunction ('0x01010B01000000B7', 'top.load (71);');


Dieses Javascript führt die Funktion 71 auf das Objekt in der aktuellen Zeile aus. Für weitere Funktionen die über dieses Javascript ausgeführt werden können siehe openM2-Funktionsliste im Anhang.


Buttontypen:


BUTTON Ein Browser Button wird angezeigt hinter dem das JavaScript liegt.
BUTTON_TEXT Es wird ein Text als Link ausgegeben hinter dem das JavaScript liegt.
BUTTON_IMAGE (image.gif) Es wird ein Bild angezeigt hinter dem als Link das JavaScript liegt.

Die Auswahl des Bildes erfolgt über die Angabe des Names des Bildes zwischen den Klammern. Diese Bild muß sich am Server unter
/TOS/<Layout_X>/images/buttons/ befinden.

VALUEDOMAIN als Spaltentyp

Dieser Spaltentyp definiert, dass es sich beim Feld, dass in der zugehörigen Spalte angezeigt wird um ein Feld vom Typ VALUEDOMAIN handelt. Angezeigt wird der Name des Wertevorratselements.

MULTIPLE Modifier

Handelt es sich um ein VALUEDOMAIN Feld, bei welchem MULTISELECTION="YES" gesetzt ist, so muss der MULTIPLE Modifier bei der Definition des Spaltentyps gesetzt werden:

VALUEDOMAIN(MULTIPLE)

Eingabefelder INPUT_xxx als Spaltentyp

Die Verwendung eines Eingabefeldes in Verbindung mit einem Button pro Ergebniszeile ist seit Release 2.2AddOn1 möglich. Diese Verwendung ist immer an eine zusätzliche Java - Implementierung gebunden, da auf die Eingabe in dem Feld irgendwie reagiert werden muss.


Einziger Anwendungsfall bis jetzt, ist der Vormerken - Button um eine Ware in den Warenkorb zu legen.


Beispiel: Query mit der Möglichkeit Waren direkt in den Warenkorb zu legen.


SELECT : oid, name, description, 'orderqty' + CONVERT (VARCHAR, id) AS inputName, 'callOidFunctionEventInputField(#SYSVAR.ELEMOID#, 5101, 600, document.forms[tri:0].orderqty' + CONVERT (VARCHAR, id) + ', #SYSVAR.FIELDVALIDATION#)' AS orderButton
FROM : ibs_Object
WHERE : tVersionId = 16848129 – Ware
ORDER BY :
columnnames : #OBJECTID,Produktname,Produktbeschreibung,Anzahl,Vormerken
columnattributes : oid;name,description,inputName,orderButton
columntypes : SYSVAR,STRING,STRING,INPUT_NUMBER(5),BUTTON_IMAGE (buttonShoppingCart.gif)


In diesem Fall wird in der TOS-Funktion 5101 (= Funktion zur kompletten Bestellungsabwicklung -> OrderCircleFunction.java) das Event 600 (= Ware in den Warenkorb legen) aufgerufen. In diesem Event wird das Eingabefeld eingelesen und die Anzahl dem Warenkorb übergeben.

Definition von Suchfeldern

(SEARCHFIELDS, SEARCHFIELDQUERYATTRIBUTES, SEARCHFIELDTYPES)


Allgemein

Für die Definition der Suchfelder die in der erweiterten Suche oder der Bearbeiten bzw. Infoansicht der Abfrage angezeigt werden, werden die Felder searchfieldnames, searchfieldattributes und searchfieldtypes des QueryCreators verwendet.


Bei Erzeugung eines Suchfeldes wird die WHERE-Klausel zur Laufzeit mit den Sucheinschränkungen des Benutzers erweitert.


searchfieldnames: beinhaltet die Texte die als Feldbezeichner für das Jeweilige Feld angezeigt werden sollen.


searchfieldattributes: beinhaltet die Attribute in der Querie die zum jeweiligen Feld gehören beziehungsweise das Attribut in auf welches die Sucheinschränkungen angewandt werden sollen. Die Reihenfolge muß ident zu den searchfieldnames sein. Als Trennzeichen zwischen den einzelnen Attributen wird der Strichpunkt ';' verwendet. Es dürfen KEINE SPALTENALIASES in diesem Feld verwendet werden.


searchfieldtypes: beinhaltet die Bezeichnung der Typen zu jeder Spalte, da die Präsentation der Spalte von ihrem Typ abhängt. Die Reihenfolge muß wiederum ident zu den columnnames sein. Als Trennzeichen zwischen den einzelnen Attributen wird der Strichpunkt ';' verwendet.


Suchfeldtypen

Jeder mögliche Suchfeldtyp gehört zu einem oder mehreren Datenbanktypen der searchfieldattributes.


Bei allen Suchfeldtypen wird ein Auswahlfeld angezeigt, bei dem ausgewählt werden kann wie die Einschränkung ausgeführt werden soll (exakt, beinhaltet, größer, kleiner ...).


Es gibt aber auch Konditionsfeldtypen , bei denen die Einschränkung auf größer, kleiner usw. schon in bei der Definition im QueryCreator festgelegt werden kann.


Suchfeldtypentabelle:


Typename MSSQL Typ ORACLE Typ Beschreibung
STRING CHAR thumbs_down.gif

VARCHAR thumbs_down.gif

CHAR thumbs_down.gif

VARCHAR2 thumbs_down.gif

Strings, die alle möglichen alphanumerischen Zeichen beinhalten.
Darstellungsform: kleines Textfeld
NUMBER INT

SMALLINT
TINYINT
DECIMAL (p,s)
NUMERIC (p,s)
FLOAT thumbs_down.gif
REAL

INTEGER

NUMBER (#,#)
LONG

ganzzahlige Zahlen, gleitkomma Zahlen, ... alle realen Zahlen
Darstellungsform: kleines Textfeld
DATE DATETIME

SMALLDATETIME

DATE Datum in der Form (TT.MM.JJJJ)
Darstellungsform: kleines Textfeld mit Formatbeschreibung
DATETIME DATETIME

SMALLDATETIME

DATE Datum und Zeit in der Form (TT.MM.JJJJ HH:MM)
MONEY MONEY

SMALLMONEY

NUMBER Geldwerte im Format: 1.111,11
Darstellungsform: kleines Textfeld
LONGTEXT TEXT CLOB Strings mit einer Anzahl bis zu 65.000 Character.
OBJECTPATH VARCHAR thumbs_down.gif VARCHAR2 thumbs_down.gif siehe Beschreibung OBJECTPATH als Suchfeltyp
OBJECTID OBJECTID RAW (8) eine openM2-interne Objektid. dieser Feldtyp ist nicht für Abfragevorlagen zulässig, die für die Suche verwendet werden, nur für Abragevorlagen des Typs 'SYSTEM'.
QUERYSELECTION (queryname) CHAR CHAR Zeigt eine Selectionbox mit dem Ergebnis einer Query an. Verwedung: Suche nach vordefinierten Strings.

Parameter:
MULTIPLE ... Die Selectionbox wird als Multiselectionbox dargestellt. Die ausgewählten Werte werden in Form von OR-Verknüpfungen oder einer IN-Klausel in die Query aufgenommen. Das Suchfeld muss in der folgenden Form definiert werden: QUERYSELECTION (queryname; MULTIPLE)

QUERYSELECTIONNUM (queryname) INT

SMALLINT
TINYINT
DECIMAL (p,s)
NUMERIC (p,s)
FLOAT thumbs_down.gif
REAL

INTEGER

NUMBER (#,#)
LONG

Zeigt eine Selectionbox mit dem Ergebnis einer Query an. Verwedung: Suche nach vordefinierten Zahlen.

Parameter:
MULTIPLE ... Die Selectionbox wird als Multiselectionbox dargestellt. Die ausgewählten Werte werden in Form von OR-Verknüpfungen oder einer IN-Klausel in die Query aufgenommen. Das Suchfeld muss in der folgenden Form definiert werden: QUERYSELECTION (queryname; MULTIPLE)

QUERYSELECTIONOID (queryname) OBJECTID RAW (8) Zeigt eine Selectionbox mit dem Ergebnis einer Query an. Verwedung: Suche in Feldern die eine Fremdoid beinhalten.

Parameter:
MULTIPLE ... Die Selectionbox wird als Multiselectionbox dargestellt. Die ausgewählten Werte werden in Form von OR-Verknüpfungen oder einer IN-Klausel in die Query aufgenommen. Das Suchfeld muss in der folgenden Form definiert werden: QUERYSELECTION (queryname; MULTIPLE)

VALUEDOMAIN(context) NAME NVARCHAR2 (63) Zeigt eine Selectionbox mit allen Wertevorratselementen aus dem definierten Wertevorrat (=context) an.

Verwendung: Suche in Feldern in welchen der 'value' (=NAME) eines Wertevorratselementes gespeichert ist.

VALUEDOMAINNUM(context) ID NUMBER (10, 0) Zeigt eine Selectionbox mit allen Wertevorratselementen aus dem definierten Wertevorrat (=context) an.

Verwendung: Suche in Feldern in welchen die 'id' (=ID) eines Wertevorratselementes gespeichert ist.

VALUEDOMAINOID(context) OBJECTID RAW (8) Zeigt eine Selectionbox mit allen Wertevorratselementen aus dem definierten Wertevorrat (=context) an.

Verwendung: Suche in Feldern in welchen die 'oid' (=OID) eines Wertevorratselementes gespeichert ist.
==>Dies ist der Standardanwendungsfall da in Feldern vom Typ VALUEDOMAIN die OID des Wertevorratselementes gespeichert wird.

VALUEDOMAIN(context:MULTIPLE) NVARCHAR(4000) NVARCHAR2(32000) Zeigt eine Selectionbox mit allen Wertevorratselementen aus dem definierten Wertevorrat (=context) an.

Verwendung: Suche in Feldern in welchen mehrere 'value's (=NAME) eines Wertevorratselementes durch MULTISELECTION_VALUE_SAPERATOR (|) getrennt gespeichert sind.

VALUEDOMAINOID(context:MULTIPLE) NVARCHAR(4000) NVARCHAR2(32000) Zeigt eine Selectionbox mit allen Wertevorratselementen aus dem definierten Wertevorrat (=context) an.

Verwendung: Suche in Feldern in welchen mehrere 'oid's (=OID) eines Wertevorratselementes durch MULTISELECTION_VALUE_SAPERATOR (|) getrennt gespeichert sind.
==>Dies ist der Standardanwendungsfall da in Feldern vom Typ VALUEDOMAIN mit MULTISELECTION=true die OIDs der Wertevorratselemente MULTISELECTION_VALUE_SAPERATOR (|) getrennt gespeichert wird.

QUERYSELECTIONxxx als Suchfeldtyp

Beschreibung

Die Suchfeldtypen QUERYSELECTION , QUERYSELECTIONNUM und QUERYSELECTIONOID zeigen als Suchfelder eine Selectionbox an die das Ergebnis einer Query als Inhalt haben.


Der Name der Query die ausgeführt wird, wird bei der Suchfeldtypdefinition in der Klammer angegeben Bsp: QUERYSELECTIONOID (_productbrand).


Die Queries die bei diesen Suchfeldern als Datenlieferant angegeben werden, dürfen keine eigenen Suchfelder haben müssen genau die columnnames value und id mit dem Typen STRING als Daten liefern.
Wobei die Werte in value für die Anzeige in der Selectionbox verwendet werden und der Wert in id als Suchwert.


Für Einschränkungen auf eine DB-Spalte der Typen CHAR, VARCHAR oder ähnliches muss der Suchfeldtyp QUERYSELECTION verwendet werden.


Wenn die Einschränkungen auf den ausgewählten Wert auf eine DB-Spalte der Typen NUMBER, INTEGER oder ähnliches ausgeführt werden soll, muss der Suchfeldtyp QUERYSELECTIONNUM verwendet werden, wobei bei diesem Typ der Wert -1 in der id für die Leerauswahl verwendet wird und somit im Ergebnis der verwendeten Query nicht zulässig ist.


Wenn die Einschränkung auf eine Spalte des Typs OBJECTID bzw. RAW(8) passieren soll, muss der Suchfeltyp QUERYSELECTIONOID verwendet werden.


Definition

Eine Selectionbox die alle Produktmarken beinhaltet und deren Ergebnis später für eine Suche nach Waren, denen diese Produktmarke zugeordnet ist verwendet wird, sieht folgend aus:


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- DOCTYPE IMPORT SYSTEM "import.dtd" -->
<IMPORT ACTION="">
<OBJECTS>
<OBJECT TYPECODE="query creator">
<SYSTEM>
<ID DOMAIN=""></ID>
<NAME> _productbrand </NAME>
<DESCRIPTION> Alle Produktmarken im System. Wird als Selectionbox für die Suche nach Waren verwendet. </DESCRIPTION>
<VALIDUNTIL>19.02.2001</VALIDUNTIL>
</SYSTEM>
<VALUES>
<VALUE FIELD="QUERYTYPE" TYPE="TEXT"> SYSTEM </VALUE>
<VALUE FIELD="SELECT" TYPE="TEXT"> brand.oid, brand.name </VALUE>
<VALUE FIELD="FROM" TYPE="TEXT"> ibs_Object brand </VALUE>
<VALUE FIELD="WHERE" TYPE="TEXT">
<!-- tVersionId des openM2-Types PRODUKTMARKE -->
tVersionId ='16871681' </VALUE>
<VALUE FIELD="GROUPBY" TYPE="TEXT"/>
<VALUE FIELD="ORDERBY" TYPE="TEXT"> name ASC </VALUE>
<VALUE FIELD="COLUMNHEADERS" TYPE="TEXT"> id, value </VALUE>
<VALUE FIELD="COLUMNQUERYATTRIBUTES" TYPE="TEXT"> oid, name </VALUE>
<VALUE FIELD="COLUMNTYPES" TYPE="TEXT"> OBJECTID,STRING </VALUE>
<VALUE FIELD="SEARCHFIELDS" TYPE="TEXT"/>
<VALUE FIELD="SEARCHFIELDQUERYATTRIBUTES" TYPE="TEXT"/>
<VALUE FIELD="SEARCHFIELDTYPES" TYPE="TEXT"/>
</VALUES>
</OBJECT>
</OBJECTS>


Verwendung

Wird diese Query in einer anderen Query als Suchfeld verwendet sieht diese folgend aus:


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- DOCTYPE IMPORT SYSTEM "import.dtd" -->
<IMPORT ACTION="">
<OBJECTS>
<OBJECT TYPECODE="query creator">
<SYSTEM>
<ID DOMAIN=""></ID>
<NAME> Ware </NAME>
<DESCRIPTION> Alle Waren des Kataloges 1.0' C'. </DESCRIPTION>
<VALIDUNTIL> 19.02.2001 </VALIDUNTIL>
</SYSTEM>
<VALUES>
<VALUE FIELD="QUERYTYPE" TYPE="TEXT"> SEARCH </VALUE>
<VALUE FIELD="SELECT" TYPE="TEXT">
o.name, p.brandNameOid, brand.name AS brandName </VALUE>
<VALUE FIELD="FROM" TYPE="TEXT">
ibs_Object o, ibs_Product_01 p, ibs_Object brand </VALUE>
<VALUE FIELD="WHERE" TYPE="TEXT">
o.oid=p.oid AND p.brandNameOid=brand.oid </VALUE>
<VALUE FIELD="GROUPBY" TYPE="TEXT"/>
<VALUE FIELD="ORDERBY" TYPE="TEXT"> name ASC </VALUE>
<VALUE FIELD="COLUMNHEADERS" TYPE="TEXT"> Name, Marke </VALUE>
<VALUE FIELD="COLUMNQUERYATTRIBUTES" TYPE="TEXT"> name, brandName
</VALUE>
<VALUE FIELD="COLUMNTYPES" TYPE="TEXT"> STRING,STRING </VALUE>
<VALUE FIELD="SEARCHFIELDS" TYPE="TEXT"> Name, Marke </VALUE>
<VALUE FIELD="SEARCHFIELDQUERYATTRIBUTES" TYPE="TEXT">
o.name, p.brandNameOid </VALUE>
<VALUE FIELD="SEARCHFIELDTYPES" TYPE="TEXT">
STRING, QUERYSELECTIONOID(_productbrand) </VALUE>
</VALUES>
</OBJECT>
</OBJECTS>

Gruppierung

Weiters besteht die Möglichkeit den Werten eine Gruppierungs-ID zuzuweisen.
Dafür muss die Query um die Spalte groupingId erweitert werden:

<VALUE FIELD="COLUMNHEADERS" TYPE="CHAR">id, value, groupingId</VALUE>
<VALUE FIELD="COLUMNQUERYATTRIBUTES" TYPE="CHAR">id, name, category</VALUE>
<VALUE FIELD="COLUMNTYPES" TYPE="CHAR">STRING, STRING, STRING</VALUE>

Der Inhalt dieser Spalte wird dann dem DOM-Baum als zusätzliches Attribut (GROUPINGID) hinzugefügt:

<OPTION GROUPINGID="CAT1" ID="1">Value 1</OPTION>
<OPTION GROUPINGID="CAT1" ID="2">Value 2</OPTION>
<OPTION GROUPINGID="CAT2" ID="3">Value 3</OPTION>

Dieses Attribut kann z.B. bei der Erstellung zweier von einander abhängiger Selectionboxen über Custom Java Script Code verwendet werden. In der ersten Selectionbox können z.B. alle Werte aus dem GROUPINGID-Attribut angezeigt werden und in der zweiten Selectionbox alle OPTION-Values mit dem in Selectionbox 1 ausgewählten GROUPINGID.

Konditionsfeldtypentabelle:

Konditionsfeldtypen sind Suchfeldtypen bei denen der Benutzer nicht mehr die Möglichkeit die Suchkondition (größer, kleiner, ...) selbst zu bestimmen. Die Eingabe des Benutzers wird immer mit einem für das Feld vorgegebenen Vergleichsoperator verknüpft.


Konditionsfeldtypen:


Konditionsfeldtyp Beschreibung
LESSNUMBER Die Werte des Ergebnisses sind kleiner als die eingegebene Zahl .
LESSEQUALNUMBER Die Werte des Ergebnisses sind kleiner oder gleich der eingegebenen Zahl .
GREATERNUMBER Die Werte des Ergebnisses sind größer als die eingegebene Zahl.
GREATEREQUALNUMBER Die Werten des Ergebnisses sind größer oder gleich der eingegebenen Zahl .
LESSDATE Die Werte des Ergebnisses sind kleiner als das eingegebene Datum .
LESSEQUALDATE Die Werte des Ergebnisses sind kleiner oder gleich dem eingegebenen Datum.
GREATERDATE Die Werte des Ergebnisses sind größer als das eingegebene Datum.
GREATEREQUALDATE Die Werte des Ergebnisses sind größer oder gleich dem eingegebenen Datum.
LESSMONEY Die Werte des Ergebnisses sind kleiner als der eingegebene Geldwert.
LESSEQUALMONEY Die Werte des Ergebnisses sind kleiner oder gleich dem eingegebenen Geldwert.
GREATERMONEY Die Werte des Ergebnisses sind größer als der eingegebene Geldwert.
GREATEREQUALMONEY Die Werte des Ergebnisses sind größer oder gleich dem eingegebenen Geldwert.

Layoutprototyp: (Anwendungsfall Objektgültigkeit)
Download attachments 65929246 image004.jpg
Im diesem Beispiel wird ein GREATEREQUALDATE - Feld (Gültig von) und ein LESSEQUALDATE - Feld (Gültig bis) verwendet, um das Ergebnis der Query auf einen bestimmten Zeitraum zu beschränken.

OBJECTPATH als Suchfeldtyp

Auswirkung:
Der Feldtyp OBJECTPATH darf maximal für ein Suchfeld im QueryCreator verwendet werden !!


Wenn der Feldtyp OBJECTPATH verwendet wird, so scheint in Folge in der erweiterten Suche, eine Listbox auf, in der man sich aussuchen kann ab welcher openM2-Ablage oder ab welchem openM2-Systemreiter, die Suche gestartet werden soll. Zur Auswahl stehen 'Global', 'aktuelle Ablage', 'Gruppe', 'Privat', ... und alle anderen Reiter die als Systemreiter zu Verfügung stehen.


Das Suchfeld welches mit dem Typ OBJECTPATH gekennzeichnet ist, muß als gemapptes Queryattribut im Feld searchfieldattributes den posnopath aus der Tabelle ibs_Object besitzen, oder ein Feld, welches den selben Aufbau besitzt.


Beispiel (MSSQL):
SELECT name, posnopath
FROM ibs_Object


Suchfelderweiterung:
searchfieldnames: Name;Suche in
searchfieldattributes: name;posnopath
searchfieldtypes: STRING; OBJECTPATH


Layoutprototyp:
Download attachments 65929246 image006.jpg


Konventionen
Wird OBJECTPATH eingesetzt, so darf der Tabellenalias root nicht verwendet werden, da dieser für den posnopath des Rootobjektes verwendet wird.


ACHTUNG bei Suchfeldern

!! !Wird ein FIELDREF Feld eines XML-Formulares welches auf der Datenbank gemappt ist, als Suchfeld referenziert, so gibt es Inkonsistenzen beim Suchergebnis|width=32,height=32!!


Verwendung von Systemvariablen

Systemvariablen können in verschiedenen Feldern des QueryCreators angewendet werden. Jede Systemvariable ist mit #SYSVAR.xxxx# gekennzeichnet.


#SYSVAR.USERID #

Überall, wo die id des aktuellen Users benötigt wird, reicht es die Systemvariable #SYSVAR.USERID# zu benutzen. Die Ersetzung dieser Variable in die aktuelle UserId, erfolgt dann zur Laufzeit.


Benötigt wird die aktuelle UserId zB. Bei den Rechten, oder bei den Neuigkeiten.
Im folgenden Beispiel wird das Recht SEHEN = 2 (siehe Rechtetabelle im Anhang) abgefragt:


Beispiel (MSSQL):
SELECT name, description FROM v_Container$rights
WHERE userId = #SYSVAR.USERID# AND (rights & 2) = 2


Beispiel (ORACLE):
SELECT name, description FROM v_Container$rights
WHERE userId = #SYSVAR.USERID# AND B_AND (rights , 2) = 2


Um auf ein anderes Recht abzufragen muß einfach die Nummer 2 der Beispielquery durch die bestimmte Rechtenummer (siehe openM2-Rechte im Anhang) ersetzt werden:


SELECT name, description FROM v_Container$rights
WHERE userId = #SYSVAR.USERID# AND (rights & x ) = x


Verknüpfung von Rechten und Objekten in Suchen

Um in einer Suche nur jene Objekte zu selektieren, auf welche der angemeldete Benutzer ein bestimmtes Recht hat, kann die Objekttabelle mit der View v_Container$rights folgend verknüpft werden:


SELECT
o.*
FROM
ibs_object o, v_Container$rights ro
WHERE
– Rechteüberprüfung
ro.oid = ü.oid
AND ro.userId = #SYSVAR.USERID#
AND (rights & x ) = x
– Rechteüberprüfung - END
...


#SYSVAR.ELEMOID#

Verwendung derzeit nur bei einem JavaScript-Aufruf bei einem Button. Damit diese Systemvariable genutzt werden kann, muss auch die oid des aktuellen Objektes mitausgelesen werden und es muss die Funktionsergebnisspalte #OBJECTID (siehe nächstes Kapitel) existieren.


Überall wo in einem dem JavaScript-Aufruf des Buttons die Systemvariable #SYSVAR.ELEMOID# gefunden wird, wird die oid des aktuellen Objektes (markiert in den inputparameters mit #OBJECTID) in der Form (0x0101002100000159) eingefügt.


#SYSVAR.FIELDVALIDATION#

Verwendung derzeit nur bei einem JavaScript-Aufruf bei einem Button in Verbindung mit einem INPUTFIELD. Damit diese Systemvariable genutzt werden kann, muss ein Eingabefeld (Spaltentyp INPUT_xxx) in der Abfragenvorlage existieren. Diese Systemvariable wird dann durch den JavaScript-Aufruf der Fieldvalidation für das Eingabefeld ersetzt.
Einziger Anwendungsfall, bis jetzt, beim Button zum Vormerken einer Ware über den JavaScript-Aufruf: ‚ putInShoppingCart (...)'.


Sonstige Systemvariablen

Systemvariable Bedeutung
#SYSVAR.DATE# aktuelles Datum in der Form tt.mm.jjjj
#SYSVAR.TIME# aktuelle Zeit in der Form mm:hh
#SYSVAR.USERNAME# Name des aktuellen Benutzers
#SYSVAR.USERFULLNAME# Voller Name des aktuellen Benutzers

Verwendung von Funktionsergebnisspalten

Ergebnisspalten die eine bestimmte Funktion von openM2 erfüllen müssen als solche gekennzeichnet sein. Dies geschieht über die Kennzeichnung in columnnames mit einer Konstante die mit # am Anfang gekennzeichnet ist.


#OBJECTID

Verwendung nur im Feld columnnames und bei Buttons im Feld SELECT .
Diese Systemvariable wird bei den Spalten verwendet und wird benötigt um von der Ergebnisliste auf ein openM2-Objekt referenzieren zu können. Die Referenz zum Objekt wird immer unter den Text der ersten Spalte gelegt.


Beispiel:


SELECT oid, name, description
FROM v_Container$rights
WHERE userId = #SYSVAR.USERID#
AND (rights & 2) = 2


Spaltenerweiterung:
columnnames: ...; #OBJECTID; Name; Beschreibung
columnattributes: ...; oid; name; description
columntypes: ...; SYSVAR; STRING; STRING


#TYPEIMAGE

Verwendung nur im Feld columnnames .


Auswirkung:
In der Ergebnisliste wird das Objecticon vor dem Text in der 1. Ergebnisspalte angezeigt.


Beispiel:


SELECT icon, oid, name, description
FROM v_Container$rights
WHERE userId = #SYSVAR.USERID#
AND (rights & 2) = 2


Natürlich kann in die Query hardcodiert ein anderer Image - Name (anstatt des Attributes icon) und damit ein anderes Image für die Objekte der Ergebnißliste verwendet werden - dann muß dieses Image aber in den Layouts unter <TOSWwwRootPath>\app\layouts\<Layout_X>\images\objecticons am Server vorhanden sein.


Spaltenerweiterung:
columnnames: ...; #TYPEIMAGE; Name; Beschreibung
columnattributes: ...; icon; name; description
columntypes: ...; SYSVAR; STRING; STRING


Layoutprototyp:
Als Beispiel wurde eine Liste von Waren verwendet, bei denen das Icon für die Ware vorm Namen angezeigt wird.
Download attachments 65929246 image008.jpg


#ISLINK

Verwendung nur im Feld columnnames .


Auswirkung:
In der Ergebnisliste vor dem Inhalt der ersten Spalte, in jeder Zeile in der sich ein Link auf ein Objekt befindet, wird dieses als Link mit einem kleinem Bild (refernence.gif) gekennzeichnet.


Beispiel:


SELECT isLink, icon, oid, name, description
FROM v_Container$rights
WHERE userId = #SYSVAR.USERID#
AND (rights & 2) = 2


Spaltenerweiterung:
columnnames: ...; #ISLINK; Name; Beschreibung
columnattributes: ...; isLink; name; description
columntypes: ...; SYSVAR; STRING; STRING


#ISNEW

Verwendung nur im Feld columnnames .


Auswirkung:
In der Ergebnisliste werden jene Objekte, die vom aktuellen Benutzer noch nicht gelesen wurden als NEU gekennzeichnet (mit dem new.gif - icon in der ersten linken Spalte).


Beispiel:


SELECT isNew, isLink, icon, oid, name, description
FROM v_Container$rightsRead
WHERE userId = #SYSVAR.USERID#
AND (rights & 2) = 2


Spaltenerweiterung:
columnnames: ...; #ISNEW; Name; Beschreibung
columnattributes: ...; isNew; name; description
columntypes: ...; SYSVAR; STRING; STRING


Layoutprototyp:
Folgendes Beispiel zeigt zwei Links auf zwei Notizen, die ganz links mit einem Quadrat als NEU gekennzeichnet sind.


Download attachments 65929246 image010.jpg


Abfrage (QueryExecutive)

Eine Abfrage ist ein openM2-Objekt welches eine abgespeicherte Suche darstellt.
Einer Abfrage ist fix ein QueryCreator zugewiesen, der für die Inhaltsansicht dieser Abfrage ausgeführt wird. Diese Zuweisung kann nicht mehr gelöst werden.


Die zusätzlichen Einschränkungen in den Suchfeldern können in der Bearbeitenansicht der Abfrage gemacht werden.


Der Import ist noch nicht implementiert , es ist jedoch für später folgende Struktur geplant:


XML - Formular

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- DOCTYPE IMPORT SYSTEM "import.dtd" -->
D
R
A
F
T
<IMPORT ACTION="">
<OBJECTS>
<OBJECT TYPECODE="Abfrage">
<SYSTEM>
<ID DOMAIN=""></ID>
<NAME>blaue Schuhe Gr. 41</NAME>
<DESCRIPTION>Liefert Schuhe die als mögliche Farbe 'blau' und als
mögliche Größe '41' beinhalten.
</DESCRIPTION>
<VALIDUNTIL>19.02.2001</VALIDUNTIL>
</SYSTEM>
<VALUES>
<VALUE FIELD="SEARCHVALUES" TYPE="TEXT">
blau,41
</VALUE>
<VALUE FIELD="MATCHTYPES" TYPE="TEXT">
SUBSTRING,SUBSTRING
</VALUE>
<VALUE FIELD="QUERYOBJECTPATH" TYPE="TEXT">Gruppe/Systemqueries/Publicqueries/Schuhe</VALUE>
</OBJECT>
</OBJECTS>


<VALUE FIELD="MATCHTYPES">
In diesem Tag wird angegeben wie das Ergebnis der Abfragenvorlage (in dem Fall der query creator 'Schuhe') mit den Suchwerten der Abfrage (in dem Fall 'blaue Schuhe') verknüpft werden soll.


Dabei gibt es jedoch Einschränkungen welcher Matchtype verwendet werden kann, je nach verwendeten Suchfeldtypen in der Abfragenvorlage.


Die Zuordung Suchwert in Abfrage zu Suchfeld in Abfragenvorlage passiert wieder über die Reihenfolge in dem die mit ';' getrennten Werte aufgezählt werden.


Folgende MATCHTYPES (Einschränkungstypen) sind bei den Suchfeldtypen möglich:


Bei Feldtyp STRING, LONGTEXT, :


  • SUBSTRING => beinhaltet
  • SOUNDEX => klingt ähnlich
  • EQUAL => ist gleich
  • GREATER => größer (Alphabeth)
  • GREATEREQUAL => größer oder gleich (Alphabeth)
  • LESS => kleiner (Alphabeth)
  • LESSEQUAL => kleiner oder gleich (Alphabeth)

Bei Feldtyp NUMBER, DATE, DATETIME und MONEY:


  • EQUAL => ist gleich
  • GREATER => größer (Alphabeth)
  • GREATEREQUAL => größer oder gleich (Alphabeth)
  • LESS => kleiner (Alphabeth)
  • LESSEQUAL => kleiner oder gleich (Alphabeth)

Anzeige des Queryergebnisses über Stylesheets

Queryergebnisse können ab Release 2.3 über Stylesheets angezeigt werden. Das richtige Stylesheet zur richtigen Query wird über den Querynamen gefunden.


Das Stylesheet für die Inhaltsansicht einer Query muss in der Ablage <TOS>/app/stylesheets liegen und <queryname>_result.xsl heissen. Wenn dieses Stylesheet nicht existiert, wird das Standardstylesheet für die Anzeige des Queryergebnisses verwendet. Dieses Stylesheet liegt unter <TOS>/app/stylesheets/general/genericresult.xsl.


Der DOM-Baum der von der Query geliefert wird sieht folgend aus:


Query:
Query : SELECT oid, name, description FROM ibs_Object WHERE name LIKE '%Info%'
columnnames : Name, Beschreibung, #OBJECTID
columnattributes : name, description, oid
columntypes : STRING, STRING, SYSVAR
searchfields: Name
searchfieldattributes: name
searchfieldtypes: STRING


Dombaum:
<QUERY>
<SYSTEM>
<NAME/>
<DESCRIPTION/>
<VALIDUNITL/>
</SYSTEM>
<RESULTROW>
<RESULTELEMENT NAME='#OBJECTID' TYPE='SYSAR'>0x010100210000009C</PARAMETER>
<RESULTELEMENT NAME='Name' TYPE='STRING'>Informationen</PARAMETER>
<RESULTELEMENT NAME='Beschreibung' TYPE='STRING'>Informationen zur Domäne</PARAMETER>
</RESULTROW>
<RESULTROW>
<RESULTELEMENT NAME='#OBJECTID' TYPE='SYSAR'>0x0101002100000123</PARAMETER>
<RESULTELEMENT NAME='Name' TYPE='STRING'>Infos</PARAMETER>
<RESULTELEMENT NAME='Beschreibung' TYPE='STRING'>Informationen Allgemein</PARAMETER>
</RESULTROW>
...
</QUERY>


Für jedes Ergebnis - Zeile wird eine <RESULTROW> und für jede Ergebnis - Spalte ein <RESULTELEMENT> erzeugt.


Im Stylesheet kann dann ein Template erzeugt werden, welches alle Resultrows abarbeitet, als Vorlage sollte man am besten das Standardstylesheet <TOS>/app/stylesheets/general/genericresult.xsl verwendet werden.


QUERY in Formularvorlagen

Feldtyp QUERY

......
<VALUE FIELD="Query" TYPE="QUERY" QUERYNAME="_query">
<INPARAMS>
<PARAMETER NAME="parameterName 1">Einschränkung 1</PARAMETER>
<PARAMETER NAME="parameterName 2"> Einschränkung 2</PARAMETER>
.
.
.
<PARAMETER NAME="parameterName n"> Einschränkung n</PARAMETER>
</INPARAMS >
</VALUE>
......


... zeigt das Ergebnis der Query _query in der Infoansicht des Formulares. Die INPARAMS werden an die SEARCHFIELDS der Query übergeben und bei der Ausführung der Query berücksichtigt.


Der erzeugte DOM-Baum dieses Feldes , wie er im XSL-Stylesheet zur Anzeige des Objektes berücksichtigt werden muss, sieht folgend aus:


<VALUE FIELD="xxx" TYPE="QUERY" QUERYNAME="xxx">
<RESULTROW>
<RESULTELEMENT NAME="xnamex" TYPE="xtypey">xvaluex</RESULTELEMENT>
<RESULTELEMENT NAME="xnamex" TYPE="xtypey">xvaluex</RESULTELEMENT>
</RESULTROW>
<RESULTROW>
<RESULTELEMENT NAME="xnamex" TYPE="xtypey">xvaluex</RESULTELEMENT>
<RESULTELEMENT NAME="xnamex" TYPE="xtypey">xvaluex</RESULTELEMENT>
</RESULTROW>
</VALUE>


.. wobei die Anzahl der RESULTELEMENTs abhängig von den Spalten der Query und die Anzahl der RESULTROWs abhängig von den Ergebniszeilen der Query ist.


Feldtyp QUERYSELECTIONBOX

<VALUE FIELD="Abteilung" TYPE="QUERYSELECTIONBOX" OPTIONS="" EMPTYOPTION="YES" REFRESH="YES"/>


... zeigt eine Selectionbox die als Inhalt das Ergebnis einer Query beinhaltet. Die Ausgabeschnittstelle der Query (definiert im Feld ‚columnnames') mußen nur value sein.
Options muß nicht angegeben werden und wird beim Speichern des Formulares mit dem Ergebnis der Query gefüllt.
Emptyoption gibt an, ob eine Leerauswahl zur Verfügung gestellt wird.
Refresh legt fest, ob bei jedem Bearbeiten des Formulares die Selectionbox mit neuen Daten gefüllt wird (d.h. mit dem Echtzeitergebnis der zugeordneten Query -> ACHTUNG bei Queries mit Benutzerabhängigen Ergebnissen !!!).


Es gibt mehrere QUERYSELECTIONBOX Typen, die definieren, mit welchen Typen der ausgewählte Wert auf der DB gespeichert wird. - Natürlich muss der ausgewählte Wert vom Typen mit dem verwendeten DBTypen übereinstimmen ((1, 2, 3, 4...) bei QUERYSELECTIONBOXINT, (1.1, 2.2, 3.3 ...) bei ... QUERYSELECTIONBOXNUM, (A, BCD, efghi, jkl mno, x ...) bei QUERYSELECTIONBOX.


Feldtyp MSSQL ORACLE
QUERYSELECTIONBOX CHAR (255)

VARCHAR (255)

CHAR thumbs_down.gif

VARCHAR thumbs_down.gif

QUERYSELECTIONBOXNUM FLOAT FLOAT
QUERYSELECTIONBOXINT INTEGER INT

(mehr dazu in der Schulung zu Formularen.)


QUERY bei ACTIONs

ACTIONs können bei Formularvorlagen und bei Workflows definiert werden und holen meistens Daten für die weitere Verarbeitung. Eine Query kann bei einer Action als Datenlieferant dienen, wenn sie genau eine Ergebnis - Zeile zurückliefert.


Die Syntax sieht folgend aus:
<LOGIC>
<ACTIONS>
<VARIABLES>
<VARIABLE><NAME>xINx</NAME><VALUE>inputvalue</VALUE></VARIABLE>
<VARIABLE><NAME>xOUTx</NAME></VARIABLE>
</VARIABLES>
<ACTION TYPE="QUERY">
<CALL>queryXXX </CALL>
<INPARAMS>
<PARAMETER NAME="xSEARCHFIELDx">#VARIABLE.xINx#</PARAMETER>
</INPARAMS>
<OUTPARAMS>
<PARAMETER NAME="xCOLUMNNAMEx">#VARIABLE.xOUTx#</PARAMETER>
</OUTPARAMS>
</ACTION>
</ACTIONS>
</LOGIC>


.. wobei der Name der INPUT-Parameter immer der Name des Suchfeldes/searchfield in der Query ist und der Name der OUPUT-Parameter immer der Name der Ergebnisspalte/columnname die gemeint ist.


Queryaufruf über Buttons in XSL-Stylesheets

Buttons können entweder in Formularvorlagen mit der Zeile: <VALUE FIELD="OK" TYPE="BUTTON" ...> oder in XSL-Stylesheets selbst definiert werden.


Aufruf einer Query

Es ist möglich eine Query über einen Button aufzurufen und eine Basisablage zu definieren in der diese Query ausgeführt werden soll.


JavaScript Aufruf hinter dem HTML Button (ONCLICK=" ... " ):


javascript:top.sripts.showQuery ('<queryName>', top.oid);


... wobei top.oid, die OID des aktuellen Objektes, als Basisablage für die Ausführung der Query verwendet wird.
Damit dieser Parameter verwendet werden kann, muss die, über den Namen aufgerufene Query ein Suchfeld des Types OBJECTPATH beinhalten. Ist das nicht der Fall, muss anstatt top.oid, der Wert ‚0x0000000000000000' übergeben werden.


Aufruf einer Suche

Es ist möglich eine Suche über einen Button aufzurufen und eine Basisablage zu definieren in der diese Suche ausgeführt werden soll.


JavaScript Aufruf hinter dem HTML Button (ONCLICK=" ... " ):


javascript:top.sripts.showSearch ('<queryName>', top.oid);


... wobei top.oid, die OID des aktuellen Objektes, als Basisablage für die Ausführung der Query verwendet wird.
Damit dieser Parameter verwendet werden kann, muss die, über den Namen aufgerufene Query ein Suchfeld des Types OBJECTPATH beinhalten. Ist das nicht der Fall, muss anstatt top.oid, der Wert ‚0x0000000000000000' übergeben werden.


Anhang

openM2-Rechte

Folgende Tabelle zeigt die ID's der openM2-Rechte die in Verbindung mit der Systemvariable #SYSVAR.USERID# abgefragt werden können.


ID Name Beschreibung
1 Neu Erzeugen eines Objektes
2 Sehen In der Liste sehen
4 Lesen Infoansicht ansehen
8 Bearbeiten Bearbeiten
16 Löschen Löschen (Infoansicht)
32 Einloggen nicht verwendet
256 Rechte ansehen Rechte auf das Objekt ansehen
512 Rechte bearbeiten Rechte zuordnen
4096 Link erstellen Link auf ein Objekt erstellen
8192 Objekt verteilen Verteilen eines Objektes
1048576 Zur Ablage hinzufügen Erzeugen eines Objektes (möglicherweise dasselbe wie 1 ??)
2097152 Inhalte der Ablage löschen Löschen in der Ablage (= 16 ??)
4194304 Inhalte der Ablage sehen Inhalt sehen (= 2)
16777216 Protokoll ansehen Protokoll des Objektes sehen.

openM2-Funktionen für Buttons

Folgende Funktionen können bei Buttons über das JavaScript:
callOidFunction (<oid>, <fct>) ausgeführt werden:
(Anm. die Funktionen wurden nicht alle getestet: bitte um Response wenn eine nicht funktioniert !!!)


Nr. Konstante Beschreibung
51 SHOWOBJECT Anzeige des BusinessObjektes (Infoansicht)
71 OBJECTCHANGEFORM Bearbeiten des BusinessObjektes (Bearbeitenansicht)
81 OBJECTDISTRIBUTEFORM Verteilen des BusinessObjektes
111 OBJECTCUT Ausschneiden
114 OBJECTCOPY Kopieren
151 GOBACK Zurück
184 FORWARD Weiterleiten im bestehenden Workflow (achtung - diese Funktion ist abhängig davon ob ein Workflow überhaupt existiert !!)
185 STARTWORKFLOW Starte einen workflow
186 FINISHWORKFLOW Beende einen workflow
441 CHECKOUT Checkout und

blockiere die bearbeitungs-funktion für die anderen users

442 CHECKIN Checkin und

blockiere die bearbeitungs-funktion für die anderen users

Beim Vormerken-Button wird jedoch ein anderes JavaScript benötigt nämlich:
loadOrderWindowInList (5004, <oid>).
Die der vollständige Scriptcall muß folgend aussehen:
top.scripts.loadOrderWindowInList (5004,'0x0101150100000264');


Nr. Konstante Beschreibung
5004 LOADORDER_FRAMESET Zeige liste der bestellung