Bereits im Oktober 2010 bzw. Januar 2011 beschrieb Enrico Kreller in seinen Blogbeiträgen „Einbindung eines benutzerdefinierten Menüs in den DeltaMaster” Teil 1 und Teil 2 die Möglichkeit, im DeltaMaster ein separates Menü anzuzeigen, über das der Anwender die verschiedensten Aktionen ausführen kann:
Einbindung eines benutzerdefinierten Menüs in den DeltaMaster Teil 1
Einbindung eines benutzerdefinierten Menüs in den DeltaMaster Teil 2
Dieses benutzerdefinierte Menü heißt nun nicht mehr DataEntryMenue sondern CustomApp und verfügt über verbesserte Funktionalitäten und Komponenten, die den Einsatz sowohl im DeltaMaster-Client als auch in der webbasierten DeltaMaster-Anwendung ermöglichen.
Inhalt dieses Blogbeitrags soll daher der Einsatz des Menüs im DeltaMaster-Client sein. Die Beschreibung, wie dieses Menü im Web funktioniert, erfolgt in Teil 2 zu einem späteren Zeitpunkt.
Möglichkeiten und Voraussetzungen
Mit der CustomApp lässt sich ganz individuell ein Menü in DeltaMaster erstellen mit welchem Prozeduren auf der relationalen Datenbank mit und ohne Transaktionssteuerung ausgeführt werden können, die den Aufruf eines WebLinks oder das Starten einer externen Prozedur realisieren.
So kann man z. B. größere Datenmengen, deren Volumen eine manuelle Eingabe übersteigt, über eine definierte Schnittstelle importieren oder löschen. Es lassen sich Daten in einem relationalen Eingabemodell nach vordefinierten Kriterien zum Beispiel von einer Wertart zu einer anderen kopieren. Aber auch das Starten des Transform-Prozesses und der Aufruf externer Programme (*.exe) sind möglich.
Alle erforderlichen Dateien für den Einsatz der CustomApp in DeltaMaster befinden sich im Download. Dieses Zusatzmaterial wird in das aktuelle DeltaMaster-Programmverzeichnis entpackt. Damit befinden sich die Komponenten CustomApp.dll und CustomApp.resources.dll an Ort und Stelle und auch die Client.exe.config verfügt über den entsprechenden Moduleintrag.
Mitgeliefert wird auch die Datei CustomApp.sql. Sie enthält alle Anweisungen zum Erstellen der erforderlichen Tabellen und Sichten und sollte deshalb auf der entsprechenden relationalen Datenbank ausgeführt werden.
Tabellen und Objekte
Nun sind diese Tabellen mit den entsprechenden Inhalten für das Menü zu füllen.
Gezeigt wird dies anhand des in Abbildung 1 dargestellten Menüs aus unserer Beispieldatenbank Chair. Um dieses Menü zu erzeugen sind folgende Einträge in die neu erstellten Tabellen notwendig:
Tabelle T_SYS_CustomApp_Parameter
In diese Tabelle wird der Name des Menüs in der gewünschten Sprache eingetragen.
Tabelle T_SYS_CustomAppMenue
Die Einträge in diese Tabelle enthalten die gewünschten Menüpunkte:
Die einzelnen Spalten in der Tabelle enthalten:
Mit dem Eintrag in die Spalte Subtype wird der Typ des Menüpunktes bestimmt.
Folgende Subtypes sind möglich:
Mit Aufruf des Menüpunktes 1 Daten importieren sollen Daten importiert werden. Durch die Angabe von Subtype = 1 wird sichergestellt, dass nach Auswahl dieses Menüpunktes eine Eingabemöglichkeit/Auswahl einer Importdatei erfolgt. Parameter sind hier nicht erforderlich, daher bleibt das Feld Criteria2 leer.
Der Aufruf des Menüpunktes 2 ermöglicht das Löschen von Daten in einer Datenbanktabelle. Da hierfür Parameter notwendig sein können, um die Anzahl der zu löschenden Datensätze sinnvoll eingrenzen zu können, wird hier Subtype 2 verwendet. So können z. B. nur Daten von einem Kunden, von einem bestimmten Datum oder einer Produktgruppe über das Setzen der entsprechenden Parameter gewählt werden. In Criteria2 muss dann der Eintrag T_SYS_CustomAppMenue_ProcParameters gesetzt werden, da in dieser Tabelle die Parameter zu spezifizieren sind.
Tabelle T_SYS_CustomAppMenue_ProcParameters
Mit den Einträgen in diese Tabelle werden für jeden Menüpunkt, für den in der Tabelle T_SYS_CustomApp_Menue über den SybType eine Parametereingabe definiert wurde, die Parameter festgelegt und über das SQLCommand eine weitere Prozedur oder SQL-Statement angegeben, die eine Auswahl der zur Verfügung stehenden Elemente für den jeweiligen Parameter zur Verfügung stellt. Die in der Spalte Procedure einzutragende Prozedur muss der in der Tabelle T_SYS_CustomApp_Menue in Spalte Criteria1 entsprechen.
Für den InputType sind folgende Werte möglich:
Im gezeigten Beispiel wurde für das Löschen von Daten mit P_Delete_CustomApp_Data der Parameter Farbe gewählt, damit der entsprechende Eintrag in der Datenbanktabelle gelöscht werden kann. Der InputType = 2 wurde gesetzt, um nur Elemente, die aus der unter SQLCommand angegebenen Prozedur zurückgegeben werden, in einer Combobox anzuzeigen. Wird InputType = 1 gewählt, muss in der Spalte SQLCommand kein Eintrag erfolgen.
Tabelle T_SYS_CustomApp_Rights
Durch die Einträge in dieser Tabelle werden einzelnen Benutzern oder Benutzerrollen die Berechtigungen zum Ausführen der jeweiligen Menüeinträge erteilt oder verweigert.
UserID – Domaine-Username (Domain\User).
Menue_ID – entspricht der Menue_ID aus Tabelle T_SYS_CustomAppMenue
RightsID – Berechtigung zum Ausführen des entsprechenden Menüpunktes
Für die RightsID können folgende Werte eingetragen werden:
Wird ein Eintrag für eine Rolle/User weggelassen, ist dies gleichbedeutend mit dem Eintrag = 0.
In dem gezeigten Beispiel hat die UserID = BC\Test1 die Berechtigung den Menüpunkt 1 Daten importieren (mit Transaktion) auszuführen. Alle anderen Menüpunkte können nicht ausgeführt werden. UserID = BC\Test2 kann den Menüpunkt 3 Daten löschen ausführen, aber alle anderen Menüpunkte nicht. UserID = BC\kauter kann alle in der Tabelle T_SYS_CustomAppMenue eingetragenen Menüpunkte ausführen.
Damit die so festgelegten Berechtigungen auch tatsächlich greifen, wird in der Sicht V_SYS_CustomApp_Menue eine Verknüpfung mit der Tabelle T_SYS_CustomApp_Rights realisiert. Diese Sicht ist inklusive der Verknüpfung Bestandteil des mitgelieferten SQL-Statements CustomApp.sql. Hier muss nichts angepasst werden.
SELECT TOP 1000
m.Menue_ID,
Menue_Pos,
Menue_EN,
Menue_DE,
Menue_ES,
Menue_FR,
Menue_IT,
Menue_NL,
Menue_PT,
Menue_RU,
Menue_JP,
Menue_KR,
Menue_CN,
Subtype,
Criteria1,
Criteria2,
ISNULL(Menue_Active,1) Menue_Active
FROM
dbo.T_SYS_CustomAppMenue AS m
INNER JOIN T_SYS_CustomApp_Rights r ON m.Menue_ID = r.Menue_ID AND r.UserID = SYSTEM_USER AND r.RightsID = 1
ORDER BY
Menue_Pos
Aktivieren der Menüfunktion in DeltaMaster
Für die Verwendung der CustomApp in der entsprechenden Analysesitzung muss zum einen das relationale Modell angebunden werden.
Damit das benutzerdefinierte Menü nun auch in DeltaMaster sichtbar wird, muss zum anderen die jeweilige Analysesitzung (*.das) einmal mit einer Entwicklerversion von DeltaMaster geöffnet und unter Modell – Modellbrowser auf der Registerkarte System im Feld Custom Module Keys der Eintrag CUSTOMAPP eingetragen werden.
Die Eingabe muss mit dem Eintrag des Keys in der client.exe.config (siehe 1 Möglichkeiten und Voraussetzungen) übereinstimmen.
Danach wird die Analysesitzung gespeichert und kann von nun an wieder mit der „normalen“ Version von DeltaMaster geöffnet werden. Es erscheint das benutzerdefinierte Menü mit dem in Tabelle T_SYS_CustomApp_Parameter eingegebenen Namen – in unserem Beispiel mit dem Namen Dateneingabe.
Es kann losgehen
Daten importieren (mit Transaktion)
Wird der erste Menüpunkt unseres kleinen Beispielmenüs Daten importieren (mit Transaktion) gewählt, erscheint in dem Bereich, in dem sonst die Analysen angezeigt werden, folgende Eingabeaufforderung:
Mit Datei auswählen gelangt man in den Datei-Explorer und kann die zu importierende Datei aus dem entsprechenden Verzeichnis auswählen.
Danach werden die ersten 100 Zeilen der Datei angezeigt:
Rechts oben wird der Dateiname der ausgewählten Datei angezeigt, mit Starten kann der Import gestartet werden. Importdateien können vom Typ txt oder csv sein. Die Benennung der Spalten muss exakt den Parametern in der Importprozedur entsprechen. Die CustomApp ist bei der Prüfung case-sensitiv – also auch auf Groß- und Kleinschreibung achten.
Die Feldinhalte sollten weder ein TAB noch ein Semikolon („;“) im Text enthalten. Diese Zeichen werden als Spaltentrenner interpretiert und führen dazu, dass die Datei nicht importiert werden kann. Mitunter wird die Datei dann nicht einmal im Vorschaufenster angezeigt oder es erscheint eine Fehlermeldung, dass die Dateispezifikation nicht übereinstimmt.
Nach dem Starten werden die Daten über die in der Tabelle T_SYS_CustomApp_Menue hinterlegte Importprozedur (in diesem Beispiel P_Import_CustomApp_Data) nach den dort festgelegten Prüfungen und Regeln in die Datenbank übernommen. Diese Prozedur und auch alle weiteren in diesem Beispiel verwendeten Prozeduren sind im Anhang zu finden.
Da der Datenimport mit Transaktion gewählt wurde, ist der Import mit Daten übernehmen zu bestätigen. Nach Übernahme aller Daten erscheint folgender Bildschirm:
In der untersten Zeile werden die Anzahl der verarbeiteten Datensätze und die Anzahl der Datensätze mit Fehler ausgegeben. Fehlerhafte und daher von der Importprozedur abgewiesene Datensätze werden separat mit entsprechender Fehlermeldung ausgegeben. Die Ausgaben im Log können über Speichern in eine Textdatei oder in die Zwischenablage gespeichert werden.
Daten importieren (ohne Transaktion)
Wird der Datenimport mit dem zweiten Menüpunkt Daten importieren (ohne Transaktion) ausgeführt, sind die Auswahl der Importdatei und der Start des Imports mit denen des Menüpunkts Daten importieren (mit Transaktion) identisch (siehe Abbildung 8 und 9). Da der Datenimport ohne Transaktion erfolgt, muss der Import nicht bestätigt werden, die Daten sind bereits übernommen. Es fehlen daher die Elemente Abbrechen und Daten übernehmen in der Ansicht.
Daten löschen
Wird der Menüpunkt Daten löschen gewählt, erscheint in dem Bereich, in dem sonst die Analysen angezeigt werden, folgende Anzeige:
Mit dem Dropdown-Menü Farbe wird die Farbe ausgewählt, welche gelöscht werden soll. Nachdem die zu löschende Farbe gewählt ist, kann der Vorgang abgebrochen oder ausgeführt werden.
Nach dem Ausführen wird bestätigt, ob der Vorgang erfolgreich oder aufgrund von Fehlern nicht ausgeführt werden konnte.
Asynchroner Aufruf Prozedur P_Transform_All
Wird der Menüpunkt Transform_All asynchron gewählt, wird folgender Bildschirm angezeigt:
Nach dem Start und während der Ausführung der Prozedur wird in einem separat eingeblendeten Fenster die Ausführung der Prozedur angezeigt:
Synchroner Aufruf Prozedur P_Transform_All
Wird die gleiche Prozedur mit dem Menüpunkt Transform All synchron ausgeführt, erscheint nach dem Starten der Prozedur das Zusatzfenster nicht. Das Ergebnis, ob die Prozedur erfolgreich ausgeführt wurde, erscheint direkt in DeltaMaster.
Starten eines externen Programms
Mit dem Menüpunkt Taschenrechner starten wird das externe Programm (calc.exe) aufgerufen. Es erscheint der kleine Taschenrechner als separates Fenster. Nachdem die gewünschten Berechnungen mit dem Taschenrechner abgeschlossen sind, kann das Programm mit „Abbrechen“ wieder beendet werden.
Externer Browseraufruf
Wird der letzte Menüpunkt in unserem Beispielmenü aufgerufen, öffnet sich die in der Tabelle T_SYS_CustomApp_Menue unter dem Menüpunkt Internetseite aufrufen eingetragene Internetseite – in unserem Beispiel unsere Homepage www.bissantz.de.
Anhang
Prozedur P_Import_CustomApp_Data
CREATE proc [dbo].[P_Import_CustomApp_Data]
@ColorID VARCHAR(2),
@Top_ID SMALLINT,
@Top_en VARCHAR (50),
@Top_de VARCHAR (50),
@L1_en VARCHAR (50),
@L1_de VARCHAR (50)
AS
BEGIN
DECLARE @Anz INT = 0
SELECT @Anz = COUNT(*) FROM T_IMPORT_Color WHERE ColorID = @ColorID
if(@Anz > 0)
BEGIN
RAISERROR ('Farbe existiert bereits',16,1)
RETURN
END
ELSE
BEGIN
INSERT INTO T_IMPORT_Color (ColorID, TopID, EN_Top, DE_Top, EN_L1, DE_L1, ChangeDate)
VALUES
(@ColorID,@Top_ID,@Top_en,@Top_de,@L1_en,@L1_de, GETDATE())
END
END
Prozedur P_Delete_CustomApp_Data
CREATE proc [dbo].[P_Delete_CustomApp_Data]
@ColorID varchar(50)
AS
BEGIN
DECLARE @sql varchar(1000)
set @sql = 'DELETE FROM T_Import_Color WHERE ColorID = '
set @sql = @sql + @ColorID
exec(@sql)
END
5.3 Prozedur P_Select_CustomApp_Color
CREATE PROC [dbo].[P_Select_CustomApp_Color]
AS
BEGIN
SELECT
ColorID,
DE_L1 AS ColorName
FROM
T_IMPORT_Color
ORDER BY
ColorID
END
Prozedur P_Select_CustomApp_Color
CREATE PROC [dbo].[P_Select_CustomApp_Color]
AS
BEGIN
SELECT
ColorID,
DE_L1 AS ColorName
FROM
T_IMPORT_Color
ORDER BY
ColorID
END
Prozedur P_Transform_All
CREATE PROC [dbo].[P_Transform_All] AS
EXEC dbo.P_SYSLOG_StartTransformation
EXEC dbo.P_SYSLOG_Reset
EXEC P_SYSLOG_Exec 'dbo.P_SYS_PreProcess'
EXEC P_SYSLOG_Exec 'dbo.P_Transform_10_DeleteFactTables'
EXEC P_SYSLOG_Exec 'dbo.P_Transform_11_DeleteDimTables'
EXEC P_SYSLOG_Exec 'dbo.P_Transform_12_P_DIMs_Ausfhren'
EXEC P_SYSLOG_Exec 'dbo.P_AktualisierungFaktorKennzahlenberechnung'
EXEC P_SYSLOG_Exec 'dbo.P_Transform_13_P_FACTs_Ausfhren'
EXEC dbo.P_SYSLOG_StopTransformation