Mit DLE Masken und Menüs lassen sich spezifische Einstiegsmasken definieren und beim Start der DLE aufrufen. DLE Masken werden standardmäßig im Verzeichnis „DLE_HOME/packages/[Paketname]/resources/forms/…“ abgelegt.
Mit DLE Masken und Menüs lassen sich spezifische Einstiegsmasken definieren und beim Start der DLE aufrufen. DLE Masken werden standardmäßig im Verzeichnis „DLE_HOME/packages/[Paketname]/resources/forms/…“ abgelegt.
DLE Masken werden in XML definiert. Um eigene Masken definieren zu können sollte man daher in XML bewandert sein. Folgender Codeblock zeigt den grundlegenden Aufbau einer DLE Maske.
<?xml version="1.0" encoding="ISO-8859-1"?>
<Form name="MENU_NAME" display="MENU_TITLE">
<Property name="Image" value="~/packages/DLE/resources/forms/pics/form.jpg"/>
<menu …>
…
</menu>
</Form>
Den Rahmen der Maske bildet der Form-Tag. Neben einem eindeutigen Namen der Maske kann hier auch ein Titel angegeben werden. Im weiteren kann derzeit lediglich eine zusätzliche Eigenschaft für eine Maske mittels Property-Tag definiert werden – ein Hintergrundbild. Hintergrundbilder müssen mit dem Property-Tag definiert werden, das Attribut „name“ muss den Wert „Image“ besitzen und dem Attribut „value“ muss der Dateipfad und Dateiname des Bildes zugeordnet werden.
Um die erstellte Start-Maske aufzurufen, muss eine SHELL- bzw. BAT-Datei erstellt werden. Die Startdateien müssen im Verzeichnis DLEHOME/scripts abgelegt sein. Das folgende Beispiel zeigt den Inhalt einer BAT-Datei zum Aufruf eines spezifischen Menüs.
@echo off
rem ---------------------------------------------------------
rem Start DLE Folder Administration
rem Copyright (c) by VISION-FLOW Software GmbH
rem ---------------------------------------------------------
"C:\Projekte\DLE_Projekt\java\bin\java" -jar ..\dlestart.jar -menu packages/Paketname/resources/forms/startmaske.xml %*
Die Menüs für die Masken und Datensichten werden auf dieselbe Art und Weise in XML definiert und je nach Gebrauch in die jeweilige Definition eingebunden. Die XML-Beschreibung der Menüs ist wie folgt aufgebaut:
…
<menu name="ExampleMenu" translate="true">
<item name="MenuEintraege" display="Menüeinträge">
<item name="Auswertungen" display="Auswertungen">
<item name="AuswertungenErstellen"
display="Auswertungen erstellen"
dleCommand="singleDleCall">
<Properties>
<Property name="FOLDER"
value="DLE:GeneralBricks"/>
<Property name="BASE:BrickName"
value="AuswertungenErstellen"/>
</Properties>
</item>
<item name="AuswertungenAnzeigen"
display="Auswertungen anzeigen"
dleCommand="singleDleCall">
<Properties>
<Property name="FOLDER"
value="DLE:GeneralBricks"/>
<Property name="BASE:BrickName"
value="AuswertungenAnzeigen"/>
</Properties>
</item>
</item>
<item name="tododata"
display="ToDo Liste"
formCommand=
"at.visionflow.dle.client.admin.dpe.DLETodoForm"
/>
<item name="separator"/>
<item name="closeDleAction"
display="Schließen"
mnemonic="alt|f4"
menuFormActionCommand="closeDleAction"/>
item name="separator"/>
<item name="applications"
display="DLE-Anwendungen
dleApplicationsCommand=
"at.visionflow.dle.client.admin.DLEAdministrationForm"
>
<Properties>
<Property name="PACKAGELIST"
value="PACKAGE_1; PACKAGE_2"/>
<Property name="MENULIST"
value="PACKAGE3:MENUE_1.xml"/>
<Property name="EXCLUDE_MENULIST"
value=" PACKAGE_1: MENUE_1.xml" />
</Properties>
</item>
</item>
</menu>
…
Jedes Menü hat einen eindeutigen Namen. Zudem kann mit dem Attribut „translate“ festgelegt werden, ob die Menüeinträge übersetzt werden sollen oder nicht. Ist translate="false" angegeben, wird nicht übersetzt, sondern es werden die Werte der „display“-Attribute dargestellt (Standard).
Ein Menü besteht gewöhnlich aus mehreren Einträgen (items). Jeder Eintrag kann verschachtelt wieder beliebig viele Einträge enthalten.
Es werden nachfolgende vier Typen von Einträgen unterschieden, die nach dem „command“-Attribut differenziert werden:
Zusätzlich, neben den bereits erwähnten Einträgen gibt es noch die Möglichkeit, Trennlinien einzufügen. Dies geschieht nicht über das „command“-Attribut, sondern über den Namen (name="separator").
Des Weiteren hat jeder Eintrag ein „name“-Attribut (muss angegeben und eindeutig sein), ein „display“-Attribut das den Anzeigetext enthält falls nicht übersetzt wird (nicht verpflichtend) und ein „mnemonic“-Attribut über das ein Tastaturkürzel bestimmt werden kann um den Eintrag mittels Tastatur aufzurufen.
Es ist möglich das Todo-Menü in einer Datensicht wieder zu verwenden und so die Statuswechsel über eine Datensicht (strukturiert) auszuführen. Dies ist insbesondere dann hilfreich, wenn man eigene Objekte hat die als Todo gehandhabt und verarbeitet werden (z.B. Auftrag). Das jeweilige Metdadatenobjekt (üblicherweise ein Datenbank-View oder Query-Objekt) muss jedoch min. die beiden Attribute TODO_ID und OWNER_IDC haben, damit das Todo-Menü innerhalb einer Datensicht verwendet werden kann. Das Todo-Menü selber wird dabei ganz einfach über den XML-Tag <TodoMenu/> eingebunden.
<?xml version="1.0" encoding="ISO-8859-1"?>
<Form name="TODO"
title="Auftragsbearbeitung"
width="900"
height="700"
defaultPackage="DLETEST">
<Application name="AUFTRAG">
<ApplicationObjects>
<Root>AUFTRAG</Root>
<AUFTRAG order="CREATEDDATE DESC" where="">
<DisplayedAttributes>
<ORDER width="100" />
<ORDERDESCRIPTION width="300" />
…
<CREATEDDATE width="100" />
<TODO_ID width="90"/>
<OWNER_IDC width="90"/>
</DisplayedAttributes>
<TodoMenu/>
</AUFTRAG>
</ApplicationObjects>
</Application>
<LayOuts>
<OneTable>
<Controls>
<Control type="MainTable"
gridx="0"
gridy="0"
gridwidth="1"
gridheight="1">
<ApplicationObject>AUFTRAG</ApplicationObject>
</Control>
</Controls>
</OneTable>
</LayOuts>
<LayOutChoosen>OneTable</LayOutChoosen>
</Form>
Grundsätzlich besteht in einer Datensicht (strukturiert) die Möglichkeit mehrere Zeilen auszuwählen und für alle Zeilen einen Brick aufzurufen. Um Multiselektion grundsätzlich zu erlauben muss im Control des gewählten Layouts das Attribut „multiple“ auf „true“ gesetzt sein. Ist das Attribut gesetzt können für die verschiedenen Einträge unterschiedliche Modi über das dleCommand definiert werden:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Form name="Addresses"
title="Adressen"
width="900"
height="700"
defaultPackage="DLETEST">
<Application name="AddressApplication">
<ApplicationObjects>
<Root>Address</Root>
<Address>
<DisplayedAttributes>
<Name1 width="200" />
<Name2 width="200" />
<Street width="150" />
<HouseNumber width="50" />
<ZIPCode width="50" />
<Place width="150" />
<Countrycode width="50" />
<Email width="100" />
</DisplayedAttributes>
<menu name="AdressMenu"
packageName="DLETEST"
translate="true">
<item name="Details"
display="Details"
dleCommand="singleDleCall"
readOnly="False">
<Properties>
<Property name="FOLDER"
value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName"
value="ShowAddressDetails"/>
</Properties>
</item>
<item name="Modify"
display="Ändern"
dleCommand="multiDleMultiCall"
readOnly="False">
<Properties>
<Property name="FOLDER"
value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName"
value="ModifyAddress"/>
</Properties>
</item>
<item name="EMail"
display="E-Mail senden"
dleCommand="singleDleMultiCall"
readOnly="False">
<Properties>
<Property name="FOLDER"
value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName"
value="EMail"/>
</Properties>
</item>
</menu>
</Address>
</ApplicationObjects>
</Application>
<LayOuts>
<TableShowAdressesLayout>
<Controls>
<Control type="MainTable"
gridx="0"
gridy="0"
gridwidth="1"
gridheight="1"
multiple="true">
<ApplicationObject>Address</ApplicationObject>
</Control>
</Controls>
</TableShowAdressesLayout>
</LayOuts>
<LayOutChoosen>TableShowAdressesLayout</LayOutChoosen>
<BrickOnClose>
<Properties>
<Property name="FOLDER" value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName" value="AddressSearch"/>
</Properties>
</BrickOnClose>
</Form>
Ob „multiDleMultiCall“ oder „singleDleMultiCall“ gewählt wird, ist von der jeweiligen Aufgabenstellung abhängig. Wenn nur Teile eines Bricks alle gewählten Zeilen (Datenobjekte) betreffen, dann ist „singleDleMultiCall“ zu bevorzugen. Haben wir beispielsweise eine Liste von Firmenadressen und möchten an bestimmte Unternehmen eine Angebotsanfrage per Mail senden, wobei der Inhalt der E-Mail bis auf den Ansprechpartner und Empfängeranschrift derselbe ist, ist es leichter das Problem im „singleDleMultiCall“-Modus zu lösen. Bei dem Besipiel lässt sich der E-Mail-Brick in zwei Teile zerlegen:
Für dieses Beispiel ist „singleDleMultiCall“ zu bevorzugen, da man den Angebotstext nur einmal für alle zu sendenden E-Mails nur einmal zu erfassen möchte und hinterher an alle gewählten Adresszeilen E-Mails versendet werden. Würde man hier „multiDleMultiCall“ definieren, würde für jede gewählte Zeile der komplette Brick extra aufgerufen werden. D.h., für jede, in der Datensicht, selektierte Zeile müsste man den Angebotstext separat erfassen. Das wäre für manche Anwendungen nicht praxisnah. Daher bietet die DLE hier mehrere Ansätze.
Über die DSE (Dynamic Security Engine) lassen sich auch Menüeinträgen Rechte zuordnen. Voraussetzung dafür ist eine bestehende DLE-Rechteverwaltung. Im Gegensatz zu anderen Programmfunktionen ist bei Menüeinträgen nicht wichtig, ob diese editiert, gedruckt, gelöscht, … werden dürfen (gilt für Menüeinträge nicht) sondern lediglich, ob sie aufgerufen werden dürfen. Um dies zu erreichen sind keine besonderen Unterfunktionen auszuwählen. Sobald eine Unterfunktion erlaubt ist, ist auch das Ausführen des Menüeintrages erlaubt.
Um die Rechteprüfung der Menüeinträge zu aktivieren ist lediglich der Funktionsname mit dem Paket im Menüeintrag festzulegen:
…
<item name="alteruserpwd"
display="Alter user password"
classCommand="
at.visionflow.dle.client.admin.orgunit.DLEEditUserPwdForm"
functionName="DLE:alterPwd"/>
…
Einer Form/Datensicht können auf ähnliche Weise wie Menüs auch zusätzliche Schaltflächen (Buttons) hinzugefügt werden. Auf nachfolgender Abbildung ist zu sehen, wie den aktuellen Schaltflächen eine zusätzliche Schaltfläche mit einem PDF-Icon hinzugefügt wurde. Neue Schaltflächen werden den Standardschaltflächen der Form/Datensicht ergänzt.
Nachfolgendes Beispiel zeigt, wie man Schaltflächen in eine Form/Datensicht hinzufügt. Im Aufbau sind die Schaltflächen den Menüs sehr ähnlich – die Attribute entsprechen denen von Menüeinträgen. Gleich wie bei den Menüs kann man einer Schaltfläche eine Einfachauswahl/Mehrfachauswahl zuordnen. Entsprechend werden beim Brickaufruf die ausgewählten Zeilen mitgeliefert (siehe Menüs). Ergänzend ist bei den Schaltflächen das Attribut „icon“ hinzugekommen, über das ein Pfad zu dem Bild hinterlegt werden kann, das auf der Schaltfläche angezeigt werden soll. Alternativ oder zusätzlich kann der Schaltfläche über das Attribut „display“ ein Wert gesetzt werden.
<?xml version="1.0" encoding="ISO-8859-1"?>
<Form name="Addresses"
title="Adressen"
width="900"
height="700"
defaultPackage="DLETEST">
<Application name="AddressApplication">
<ApplicationObjects>
<Root>Address</Root>
<Address>
<DisplayedAttributes>
<Name1 width="200" />
<Name2 width="200" />
<Street width="150" />
<HouseNumber width="50" />
<ZIPCode width="50" />
<Place width="150" />
<Countrycode width="50" />
<Email width="100" />
</DisplayedAttributes>
<menu name="AdressMenu"
packageName="DLETEST"
translate="true">
<item name="Details"
display="Details"
dleCommand="singleDleCall"
readOnly="False">
<Properties>
<Property name="FOLDER"
value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName"
value="ShowAddressDetails"/>
</Properties>
</item>
<item name="Modify"
display="Ändern"
dleCommand="multiDleMultiCall"
readOnly="False">
<Properties>
<Property name="FOLDER"
value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName"
value="ModifyAddress"/>
</Properties>
</item>
<item name="EMail"
display="E-Mail senden"
dleCommand="singleDleMultiCall"
readOnly="False">
<Properties>
<Property name="FOLDER"
value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName"
value="EMail"/>
</Properties>
</item>
</menu>
<buttons name="AdressMenu"
packageName="DLETEST"
translate="true">
<button name="toPdf"
display=""
dleCommand="singleDleCall"
readOnly="False"
width="18"
icon="~/temp/PDF_16x16.jpg">
<Properties>
<Property name="FOLDER"
value="DLE:GeneralBricks" />
<Property name="BASE:BrickName"
value="AddressesToPdf" />
</Properties>
</button>
</buttons>
</Address>
</ApplicationObjects>
</Application>
<LayOuts>
<TableShowAdressesLayout>
<Controls>
<Control type="MainTable"
gridx="0"
gridy="0"
gridwidth="1"
gridheight="1"
multiple="true">
<ApplicationObject>Address</ApplicationObject>
</Control>
</Controls>
</TableShowAdressesLayout>
</LayOuts>
<LayOutChoosen>TableShowAdressesLayout</LayOutChoosen>
<BrickOnClose>
<Properties>
<Property name="FOLDER" value="DLETEST:GENERAL"/>
<Property name="BASE:BrickName" value="AddressSearch"/>
</Properties>
</BrickOnClose>
</Form>