Hinweise zur Implementierung nur für Fachpersonal:
Kurze Checkliste für den EDI
SQL Scripte s.u. korrekt ausgeführt
Dienst bin_wflowservice installiert und konfiguriert
UNC Datenbankausgabe: \\RechnerName\KWPNETZ\BNWIN\SQL2EDI\
Bncontrl.ini [KWP] EAK=1
K:\bnwin\Vorlagen\wflowEreignisseIndividuell.xml
K:\bnwin\Vorlagen\wflowEreignisse.xml
C:\Program Files (x86)\BnServerDienste\bnNETWFlowService.log
Die ID in der wflowEreignisseIndividuell.xml z.B. <Aktion Bezeichnung =“Druck Rechnung ZK 93″ Id =“Rechnung_ZK_93″> muss übereinstimmen mit der ID aus der Spalte Beschreibung der Tabelle Trigger2EDI
1.
Im SQL-Server muss als erstes das Skript
„01Dateiexport aus SQL _Voraussetzung.sql“
ausgeführt werden um den Server für das erzeugen der XML-Dateien freizuschalten.
— To allow advanced options to be changed.
EXEC sp_configure ’show advanced options‘, 1
GO
— To update the currently configured value for advanced options.
RECONFIGURE
GO
— To enable the feature.
EXEC sp_configure ‚xp_cmdshell‘, 1
GO
— To update the currently configured value for this feature.
RECONFIGURE
GO
2.
Als nächstes wird das Skript „02Trigger2Edi_Tabelle.sql“ ausgeführt um die Tabelle Trigger2Edi anzulegen aus der die XML-Dateien später erzeugt werden.
USE [BNWINS]
GO
/****** Object: Table [dbo].[Trigger2EDI] Script Date: 01.08.2013 14:51:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Trigger2EDI](
[Mandant] [varchar](5) NULL,
[Benutzerid] [varchar](10) NULL,
[Vorgang] [varchar](50) NULL,
[Vorgangsnummer] [varchar](50) NULL,
[Adresse] [varchar](50) NULL,
[Platzhalter1] [varchar](50) NULL,
[Platzhalter1_ID] [varchar](50) NULL,
[Platzhalter1_Kuerzel] [varchar](50) NULL,
[Platzhalter2] [varchar](50) NULL,
[Platzhalter2_ID] [varchar](50) NULL,
[Platzhalter2_Kuerzel] [varchar](50) NULL,
[Platzhalter3] [varchar](50) NULL,
[Platzhalter3_ID] [varchar](50) NULL,
[Platzhalter3_Kuerzel] [varchar](50) NULL,
[Platzhalter4] [varchar](50) NULL,
[Platzhalter4_ID] [varchar](50) NULL,
[Platzhalter4_Kuerzel] [varchar](50) NULL,
[Platzhalter5] [varchar](50) NULL,
[Platzhalter5_ID] [varchar](50) NULL,
[Platzhalter5_Kuerzel] [varchar](50) NULL,
[erstellt] [datetime] NULL,
[Beschreibung] [varchar](50) NULL,
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[xmlerzeugt] [datetime] NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
3.
Die XML Dateien die der SQL Server erzeugen kann dürfen keine Sonderzeichen oder Umlaute enthalten Deshalb gibt es eine Funktion die Sonderzeichen entfernt. Dieses Skript „03Function Remove ASCII.sql“ muss ebenfalls ausgeführt werden.
USE [BNWINS]
GO
/****** Object: UserDefinedFunction [dbo].[Remove_ASCII_Char] Script Date: 15.01.2014 15:48:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[Remove_ASCII_Char] (@CharData varchar(8000))RETURNS varchar(8000)
AS
BEGIN
DECLARE @Index INT,
@strASCII varchar(8000),
@strASCIIChar INT
SET @Index = 1
SET @strASCII = “
WHILE @Index < LEN(@CharData)+1
BEGIN
SET @strASCIIChar = ASCII(SUBSTRING(@CharData, @Index, 1))
IF @strASCIIChar between 48 and 58 or @strASCIIChar BETWEEN 65 and 122 or @strASCIIChar in (32, 45, 46,196, 228,214,246, 220, 252, 223)
BEGIN
— Zusammenbauen Output
SET @strASCII = @strASCII + CHAR(@strASCIIChar)
END
SET @Index = @Index + 1
END
RETURN @strASCII
END
GO
4.
Um die Ergebnisse der Schritte 2 und 3 Zusammenzuführen muss das Skript „04Skript VIEW Trigger2EDI zu XML_2012.sql“ ausgeführt werden. Es wird eine Sicht erzeugt die die Einträge der Trigger2Edi_Tabelle durch die Sonderzeichenfunktion bereinigt und für die XML Erzeugung bereit stellt.
USE [BNWINS]
GO
/****** Object: View [dbo].[View_Trigger2EDI] Script Date: 15.01.2014 15:50:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[View_Trigger2EDI]
AS
SELECT Mandant, Benutzerid, Vorgang, Vorgangsnummer, Adresse, dbo.Remove_ASCII_Char(Platzhalter1) AS Platzhalter1,
Platzhalter1_ID, Platzhalter1_Kuerzel, dbo.Remove_ASCII_Char(Platzhalter2) AS Platzhalter2, Platzhalter2_ID, Platzhalter2_Kuerzel,
dbo.Remove_ASCII_Char(Platzhalter3) AS Platzhalter3, Platzhalter3_ID, Platzhalter3_Kuerzel, dbo.Remove_ASCII_Char(Platzhalter4) AS Platzhalter4,
Platzhalter4_ID, Platzhalter4_Kuerzel, dbo.Remove_ASCII_Char(Platzhalter5) AS Platzhalter5, Platzhalter5_ID, Platzhalter5_Kuerzel,
erstellt, Beschreibung, ID, xmlerzeugt
FROM dbo.Trigger2EDI
GO
5.
Nun muss der Trigger angelegt werden der das Ereignis erkennt und einen Eintrag in der Tabelle Trigger2Edi macht. Hierzu gibt es ein Excel Übersichtsblatt welche EDIs momentan existieren und auf welche Ereignisse diese reagieren. Im Falle des korrekten Ereignisses muss als Folge dann ein Datensatz in der Tabelle Trigger2Edi erzeugt worden sein.
6.
Als nächstes muss ein SQL-Server Job mit den Namen SQL2EDI angelegt werden. Dabei wird als Schritt in diesem Job das Skript „05Skript Trigger2EDI zu XML_2012.sql“ hinterlegt. Dieses Skript am besten zunächst in einem normalen SQL Fenster öffnen und testen und erst dann in einem Job bauen.
Hier müssen noch Zeilen am Kundensystem angepasst werden.
Bei der ersten gelb markierten Zeile muss der Pfad so angepasst werden, dass er zu dem XML Übergabeordner des Kunden passt. Hierzu kann im Ordner bnwin ein neuer Ordner SQL2EDI angelegt werden. Wichtig ist das der Ordner auf einer lokalen Platte des SQL-Servers liegt.
Bei der zweiten rot markierten Zeile muss der Name der SQL-Server Instanz des Kunden sowie Benutzername (sa) und das Passwort hinterlegt werden.
Bei den rot hinterlegten Stellen muss ggf. der Datenbankname auf den Datenbanknamen des Kunden angepasst werden.
— KWP EDI XML Erzeugung
— Erzeugt aus dem ältesten Einträgen in der SQL2EDI Tabelle ohne xmlerzeugt Datum eine XML Datei im hinterlegten Pfad.
DECLARE
@FileName VARCHAR(100),
@SQLCmd VARCHAR(5000),
@dothis varchar(1)
— Hier den Pfad (inkl. Dateinamen) wo die XML Datei erzeugt werden soll eingeben
select
@FileName = ‚C:\BNWIN\SQL2EDI\SQLEreignisaktivitaet‘ + Replace (REPLACE( CONVERT(VARCHAR(26),getdate(),113),‘:‘,’_‘), ‚ ‚ , ‚_‘) +‘.xml‘
— Hier wird die Bedingung definiert wann eine XML Datei erzeugt werden soll
Set @dothis = (Select Case when (SELECT count (*)
FROM [BNWINS].[dbo].[Trigger2EDI] where xmlerzeugt is null ) > 0 then ‚1‘ else ‚0‘ end)
DECLARE @ID as bigint
SET @ID = (SELECT ( min (id) ) FROM [BNWINS].[dbo].[Trigger2Edi] where xmlerzeugt is null )
— Hier wird der Inhalt der XML Datei festgelegt
SELECT @SQLCmd = ‚bcp ‚
+ ‚“SELECT Mandant as Mandant,ISnull (Benutzerid, “ “) as Benutzerid, Beschreibung as ID, Vorgang as Vorgang, Vorgangsnummer as Vorgangsnummer,’+
+‘ ISnull (Adresse, “ “) as Adresse, isnull (Platzhalter1_ID, “LEER“) as “Platzhalter/Platzhalter1/PlatzhalterID“, ISNULL ( Platzhalter1_Kuerzel, “$LEER“) as “Platzhalter/Platzhalter1/Kuerzel“ , isnull (Replace(Replace(Replace(Replace (Platzhalter1,“ü“, “ue“),“ö“, “oe“), “ä“, “ae“),“ß“, “ss“), “0“) as “Platzhalter/Platzhalter1/Wert“ ,’+
+‘ isnull (Platzhalter2_ID, “LEER2“) as “Platzhalter/Platzhalter2/PlatzhalterID“, ISNULL ( Platzhalter2_Kuerzel, “$LEER2“) as “Platzhalter/Platzhalter2/Kuerzel“ , isnull (Replace(Replace(Replace(Replace (Platzhalter2,“ü“, “ue“),“ö“, “oe“), “ä“, “ae“),“ß“, “ss“), “0“) as “Platzhalter/Platzhalter2/Wert“,’+
+‘ isnull (Platzhalter3_ID, “LEER3“) as “Platzhalter/Platzhalter3/PlatzhalterID“, ISNULL ( Platzhalter3_Kuerzel, “$LEER3“) as “Platzhalter/Platzhalter3/Kuerzel“ , isnull (Replace(Replace(Replace(Replace (Platzhalter3,“ü“, “ue“),“ö“, “oe“), “ä“, “ae“),“ß“, “ss“), “0“) as “Platzhalter/Platzhalter3/Wert“,’+
+‘ isnull (Platzhalter4_ID, “LEER4“) as “Platzhalter/Platzhalter4/PlatzhalterID“, ISNULL ( Platzhalter4_Kuerzel, “$LEER4“) as “Platzhalter/Platzhalter4/Kuerzel“ , isnull (Replace(Replace(Replace(Replace (Platzhalter4,“ü“, “ue“),“ö“, “oe“), “ä“, “ae“),“ß“, “ss“), “0“) as “Platzhalter/Platzhalter4/Wert“,’+
+‘ isnull (Platzhalter5_ID, “LEER5“) as “Platzhalter/Platzhalter5/PlatzhalterID“, ISNULL ( Platzhalter5_Kuerzel, “$LEER5“) as “Platzhalter/Platzhalter5/Kuerzel“ , isnull (Replace(Replace(Replace(Replace (Platzhalter5,“ü“, “ue“),“ö“, “oe“), “ä“, “ae“),“ß“, “ss“), “0“) as “Platzhalter/Platzhalter5/Wert“’+
+ ‚ FROM [Bnwins].[dbo].[View\_Trigger2EDI] where id = ‚
+ “ + cast ( @ID as varchar) + “
+ ‚ FOR XML PATH (“Ereignis“), ROOT(“Ereignisse“), TYPE „‚
+ ‚ queryout ‚
+ @FileName
+ ‚ -c -T -C -t -S (local)\TFSQL2012 -U sa -P kwpsarix‚
— SQL Befehl zur Ueberpruefung ausgeben
–SELECT @SQLCmd AS ‚Command to execute‘
–XML Datei erzeugen
if @dothis = 1 EXECUTE master..xp_cmdshell @SQLCmd
if @dothis = 1 Update [BNWINS].[dbo].[Trigger2Edi] set xmlerzeugt = getdate() where ID = @id
