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

Relationale Eingabeanwendung als Alternative zur Custom App

Häufig müssen Daten in bestehenden Modellen angepasst oder ergänzt werden. Um neue Daten relational zu übernehmen oder Hintergrundprozesse zu starten, kennen wir schon die Funktionalität der Custom App mit zusätzlichen Menüpunkten in DeltaMaster. Eine weitere Möglichkeit, den DeltaMaster-Benutzern den manuellen Start von Prozeduren komfortabel über das FrontEnd ein-zurichten, bietet die relationale Eingabeanwendung.

Wollen wir beispielsweise einen Importprozess benutzergesteuert starten, könnten wir wie folgt vorgehen: Zunächst benötigen wir in unserer relationalen SQL-Datenbank eine kleine Hilfstabelle mit zwei Spalten: dem eigentlichen Parameter und einer RowID.


CREATE TABLE T_S_Start_Import 
(StartImport varchar(50),
	RowID uniqueidentifier CONSTRAINT DF_T_S_Start_Import_RowID Default newid())

Danach führen wir die vom Modeler mitgelieferte Prozedur P_Generate_DeltaMaster_TableProc aus:


CREATEEXEC P_BC_Generate_DeltaMasterTableProc 'T_S_Start_Import'

Und erhalten als Ergebnis drei neue Prozeduren:

  • P_Delete_T_S_Start_Import
  • P_Insert_T_S_Start_Import
  • P_Update_T_S_Start_Import

Die P_UPDATE- und P_DELETE-Prozeduren sind im ersten Beispielfall nicht notwendig. Die P_INSERT-Prozedur muss aber noch etwas angepasst werden. Hier haben wir am besten schon Vorarbeit geleistet: für den Importprozess von Excel- oder Textdateien sollte ein SSIS-Paket definiert sein, das alle notwendigen Schritte enthält. Je nach Anforderung beinhalten diese nur den reinen Import der Datei(en) oder aber auch nachfolgende Prozeduren zum Transformieren der Daten bis hin zum Prozessieren des Würfels.

Jetzt legen wir im SQL Server-Agent einen neuen Job an mit nur einem Schritt: Führe das SSIS-Paket aus. Wenn alles soweit vorbereitet ist, können wir uns unserer P_Insert_T_S_Start_Import widmen, die im Original folgenden Inhalt hatte:


ALTER PROCEDURE [dbo].[P_Insert_T_S_Start_Import] 
( 
	@StartImport varchar(50) = NULL ,
	@RowID varchar(255) = NULL 
) 
as 
	if @RowID is null set @RowID =  (newid())  

	INSERT INTO dbo.[T_S_Start_Import] 
	(
		StartImport,
		RowID
	)
	SELECT 
		@StartImport,
		@RowID

Wir ersetzen den “INSERT INTO” Block einfach durch den Befehl


EXEC msdb.dbo.sp_start_job N'JobName'

und schon steht das Grundgerüst.

Als nächstes müssen wir unsere Tabelle T_S_Start_Import noch in die relationale Pflegeanwendung einbinden. Hierfür muss sichergestellt sein, dass die Anwendung für die Planungsfunktionen aktiviert wurde. Auch der Bericht selbst muss für die Dateneingabe freigegeben sein. In den Einstellungen für den SQL-Durchgriff geben wir per SQL-Statement eine Drop-Down-Eingabe mit nur einem Eintrag vor:

SQL-Durchgriff Einstellungen

Abbildung 1: SQL-Durchgriff Einstellungen

Und erhalten dann folgendes Ergebnis aus Sicht des Anwenders:
 Import starten

Abbildung 2: Import starten

Nach Bestätigen durch “Übernehmen” verschwindet der Eintrag, da ja kein eigentlicher Insert in unsere Tabelle stattfindet. Stattdessen wird der angelegte Job mit dem SSIS-Paket gestartet. Zusätzlich lässt sich das SSIS-Paket oder auch die Prozedur P_Insert_T_S_Start_Import durch einen Logging-Eintrag in eine extra Tabelle erweitern. Zum Beispiel könnte folgendes Statement mit auf-genommen werden:


INSERT INTO T_S_Import_Log (Zeitpunkt, Benutzer, Logeintrag)
VALUES (getdate(),SYSTEM_USER, 'Import läuft...')

Entsprechende Einträge könnten auch zum Abschluss des SSIS-Pakets erfolgen oder auch um den Fortschritt während des Prozesses zu dokumentieren. Da wir uns in einer relationalen Anwendung befinden, können wir die Tabelle T_S_Import_Log direkt in DeltaMaster sichtbar machen, so dass der Anwender die laufenden Prozesse direkt mitverfolgen kann. Dann könnte unser LOG nach Anbinden in der relationalen DeltaMaster-Anwendung zum Beispiel so aussehen:

Log

Abbildung 3: Log

Auch Importe, denen Parameter mitgegeben werden sollen, können so gesteuert werden. Wenn beispielsweise Importe auf verschiedene Simulationsszenarien erfolgen, kann die Tabelle T_S_Start_Import um den entsprechenden Parameter erweitert werden bzw. ersetzt dieser Eintrag den bisherigen „StartImport“. In den Einstellungen des SQL-Durchgriffs kann dann die DropDown-Auswahlliste entsprechend der zur Verfügung stehenden Elemente aus z. B. einer Dimension “Simulation” angepasst werden. Die Spalte “Import starten” ist dann nicht mehr notwendig, der Start der Prozedur erfolgt über die Auswahl eines Simulationselements. Der LOG kann auch entsprechend angepasst werden, so dass explizit das Element wiedergegeben wird, auf das importiert wurde. Der INSERT der SimulationsID in die Tabelle T_S_Start_Import sollte dann zusätzlich zum sp_start_job-Befehl erfolgen, damit der Parameter bei allen im Paket enthaltenen Prozeduren mitgegeben werden kann. Erst dann wird der SQL Server-Agent Job gestartet. Die INSERT-Prozedur würde dann wie folgt aussehen:


ALTER PROCEDURE [dbo].[P_Insert_T_S_Start_Import] 
( 
	@SimulationsID varchar(50) = NULL ,
	@RowID varchar(255) = NULL 
) 
as 

	if @RowID is null set @RowID =  (newid())  


	INSERT INTO dbo.[T_S_Start_Import] 
	(
		SimulationsID,
		RowID
	)
	SELECT 
		@SimulationsID,
		@RowID
 
EXEC msdb.dbo.sp_start_job N'JobName'

Zum Abschluss des SSIS-Pakets müsste die Tabelle T_S_Start_Import dann wieder geleert werden, damit im Bericht selbst keine Einträge vorhanden sind.

Bei mehreren Import-Prozessen oder Prozeduren kann das Drop-Down-Menü auch dahingehend angepasst werden, dass der jeweilige Import ausgewählt werden kann:

 

Import starten mit DropDown

Abbildung 4: Import starten mit DropDown

Dann könnte die Prozedur P_Insert_T_S_Start_Import mit Logging wie folgt geändert werden:


ALTER PROCEDURE [dbo].[P_Insert_T_S_Start_Import] 
( 
	@StartImport varchar(50) = NULL ,
	@RowID varchar(255) = NULL 
) 
as 

IF @StartImport = 'Import 1' 
BEGIN 

	INSERT INTO T_S_Import_Log (Zeitpunkt, Benutzer, Logeintrag)
	VALUES (getdate(),SYSTEM_USER, 'Import 1 läuft...')

	EXEC msdb.dbo.sp_start_job N'JobName1'

END

IF @StartImport = 'Import 2' 
BEGIN 

	INSERT INTO T_S_Import_Log (Zeitpunkt, Benutzer, Logeintrag)
	VALUES (getdate(),SYSTEM_USER, 'Import 2 läuft...')

	EXEC msdb.dbo.sp_start_job N'JobName2'

END

Alternativ möglich ist auch der Start per Checkbox im Bericht. Dann ist allerdings nicht die INSERT-Prozedur ausschlaggebend, sondern die Prozedur P_Update_T_S_Start_Import. Zusätzlich sollte die Tabelle T_S_Start_Import vorbefüllt sein mit einer Spalte für die Bezeichnungen der Import-Pakete (oder auch auszuführenden Prozeduren, je nach Anwendungsbereich) und einer Spalte im Datentyp bit mit Vorbefüllung „0“ (False).

Abbildung 5: Vorbefüllung T_S_Start_Import

Die Prozedur P_Update_T_S_Start_Import könnte dann inklusive Logging wie folgt aussehen:


ALTER PROCEDURE [dbo].[P_Update_T_S_Start_Import] 
( 
	@ImportPaket varchar(50) = '#-OLDVALUE-#',
	@StartImport varchar(255) = '#-OLDVALUE-#',
	@RowID varchar(255) = '#-OLDVALUE-#'
)
as 

IF @ImportPaket = 'Import 1' AND @StartImport = 1
BEGIN 

	INSERT INTO T_S_Import_Log (Zeitpunkt, Benutzer, Logeintrag)
	VALUES (getdate(),SYSTEM_USER, 'Import 1 läuft...')

	EXEC msdb.dbo.sp_start_job N'JobName1'

END
IF @ImportPaket = 'Import 2' AND @StartImport = 1
BEGIN 

	INSERT INTO T_S_Import_Log (Zeitpunkt, Benutzer, Logeintrag)
	VALUES (getdate(),SYSTEM_USER, 'Import 2 läuft...')

	EXEC msdb.dbo.sp_start_job N'JobName2'

END

Beim Integrieren der Tabelle T_S_Start_Import in die DeltaMaster-Anwendung wird das Feld mit dem Datentyp bit direkt als Checkbox dargestellt. Die Eingabemöglichkeit für die Spalte „Import Paket“ sollte in den Einstellungen allerdings deaktiviert werden sowie die Prozeduren zum INSERT und DELETE.

Import starten mit Checkbox

Abbildung 6: Import starten mit Checkbox

Selbstverständlich sind auch alle Kombinationsmöglichkeiten denkbar, z. B. der Start verschiedener SSIS-Pakete und gleichzeitig die Auswahl von zu berücksichtigenden (Simulations-) Parametern über Drop-Down-Auswahl, Checkboxen oder beides. Auch jede andere Prozedur abseits von Importen kann so gestartet werden – der Fantasie sind keine Grenzen gesetzt!

In die Pflegeanwendung selbst können wir auch weitere Prozess-Schritte integrieren, z. B. das An-legen neuer Simulationsszenarien oder allgemeine Stammdatenpflege, das Freigeben von Planversionen zur Eingabe oder auch weitere Log-Tabellen.

Sämtliche genannten Anwendungsmöglichkeiten können natürlich genauso über die Custom App oder einer Kombination aus Custom App und Pflegeanwendung umgesetzt werden. Wir können uns hier also ganz flexibel den individuellen Anforderungen anpassen.