CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

CustomApp Teil 1 - Anwendung im Client

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.

Beispiel benutzerdefiniertes Menü

Abb. 1: Beispiel benutzerdefiniertes Menü

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_CustomApp_Parameter

Abb. 2: Tabelle T_SYS_CustomApp_Parameter

Tabelle T_SYS_CustomAppMenue

Die Einträge in diese Tabelle enthalten die gewünschten Menüpunkte:

Tabelle T_SYS_CustomAppMenue

Abb. 3: Tabelle T_SYS_CustomAppMenue

Die einzelnen Spalten in der Tabelle enthalten:

Spaltenbeschreibung Tabelle T_SYS_CustomApp_Menue

Abb. 4: Spaltenbeschreibung Tabelle T_SYS_CustomApp_Menue

Mit dem Eintrag in die Spalte Subtype wird der Typ des Menüpunktes bestimmt.
Folgende Subtypes sind möglich:

Beschreibung der SubTypes

Abb. 5: Beschreibung der SubTypes

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.

T_SYS_CustomApp_ProcParameters

Abb. 6: T_SYS_CustomApp_ProcParameters

Für den InputType sind folgende Werte möglich:

InputTypes und SQLCommand

Abb. 7: InputTypes und SQLCommand

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.

T_SYS_CustomApp_Rights

Abb. 8: T_SYS_CustomApp_Rights

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:

Rechtevergabe

Abb. 9: Rechtevergabe

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.

Relationales Modell anbinden

Abb. 10: Relationales Modell anbinden

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.

Eintragen des Custom Module Keys

Abb. 11: Eintragen des Custom Module Keys

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.

Abb. 12: Menü wird in der Analysesitzung angezeigt

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:

Daten importieren Datei auswählen

Abb. 13: Daten importieren Datei auswählen

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:

Datei importieren Anzeige der Daten

Abb. 14: Datei importieren Anzeige der Daten

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:

Daten importieren, Import ist ausgeführt

Abb. 15: Daten importieren, Import ist ausgeführt

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 importieren, Import erfolgreich ohne Bestätigung

Abb. 16: Daten importieren, Import erfolgreich ohne Bestätigung

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:

 Daten löschen, Farbe auswählen

Abb. 17: Daten löschen, Farbe auswählen

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.

Daten löschen, Parameter ist gewählt

Abb. 18: Daten löschen, Parameter ist gewählt

Nach dem Ausführen wird bestätigt, ob der Vorgang erfolgreich oder aufgrund von Fehlern nicht ausgeführt werden konnte.

Daten löschen, Vorgang erfolgreich ausgeführt

Abb. 19: Daten löschen, Vorgang erfolgreich ausgeführt

Asynchroner Aufruf Prozedur P_Transform_All

Wird der Menüpunkt Transform_All asynchron gewählt, wird folgender Bildschirm angezeigt:

Asynchrone Prozedur P_Transform_All, Starten

Abb. 20: Asynchrone Prozedur P_Transform_All, Starten

Nach dem Start und während der Ausführung der Prozedur wird in einem separat eingeblendeten Fenster die Ausführung der Prozedur angezeigt:

Asynchrone Prozedur P_Transform_All, Ergebnisanzeige

Abb. 21: Asynchrone Prozedur P_Transform_All, Ergebnisanzeige

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.

Synchrone Prozedur P_Transform_All, Ergebnisanzeige

Abb. 22: Synchrone Prozedur P_Transform_All, Ergebnisanzeige

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.

Taschenrechner

Abb. 23: Taschenrechner

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