Terug naar lijst

In de eerste blog van deze serie (Gebruik Getconnectoren uit AFAS – part 1) zijn de eerste twee stappen beschreven om een Getconnector van AFAS aan te roepen. Op basis van deze stappen hebben we een output bestand opgehaald via de connectie.

In dit tweede deel worden de laatste twee stappen in het proces beschreven met als uitkomst dat de gegevens in de database worden weggeschreven.

Stappenplan
Stap 1: Gegevens AFAS getconnector verzamelen
Stap 2: Connectie AFAS getconnector
Stap 3: Bewerken output getconnector
Stap 4: Wegschrijven data in database

Stap 3: Bewerken output getconnector

Klik met de rechtermuisknop op de Web Service Task in de Control Flow en kies voor Execute Task:

De getconnector wordt nu aangeroepen de resultaten worden weggeschreven naar het output bestand (In dit voorbeeld c:afasoutput.xml).

Als alles goed gaat, zie je een groen vinkje boven de Web Service Task verschijnen:

Als we het output bestand bekijken, zien we dat in de output verschillende tekens zijn vervangen door zogenaamde HTML Entity Names. Het groter dan teken (>) is bijvoorbeeld vervangen door > 

 SSDT kan met deze tekens niet omgaan en we zullen deze tekens dan ook eerst moeten vervangen.

Start met het aanmaken van een variabel met de naam varFilePath, die verwijst naar het outputbestand:

 

Sleep nu een Script Task vanuit de SSIS Toolbox naar de Control Flow. En verbind de groene pijl van de Web Service Task met de Script Task.

Kies als ScriptLanguage voor Visual C# 2012 en kies onder de ReadWriteVariables voor de zojuist aangemaakte variabele:

Open het Script door op Edit Script te klikken.

Zorg dat onder de region NameSpaces de volgende namespaces zijn opgenomen:

Neem onder public void Main() de volgende code op:

     String ErrInfo = "";
            String FilePath = Dts.Variables["User::varFilePath"].Value.ToString();
            try
            {
                String FileContent; //Variable to store File Contents
                FileContent = ReadFile(FilePath, ErrInfo);
                if (ErrInfo.Length > 0)
                {
                    Dts.Log("Error while reading File " + FilePath, 0, null);
                    Dts.Log(ErrInfo, 0, null);
                    Dts.TaskResult = (int)ScriptResults.Failure;
                    return;
                }

               
               FileContent = FileContent.Replace("<", "<"); FileContent = FileContent.Replace(">", ">");
               FileContent = FileContent.Replace("&", "&");
               FileContent = FileContent.Replace("encoding="utf-16"", string.Empty);
                    
               FileContent = FileContent.Replace("<string>",string.Empty);
               FileContent = FileContent.Replace("</string>", string.Empty);
               

                WriteToFile(FilePath, FileContent, ErrInfo);
                if (ErrInfo.Length > 0)
                {
                    Dts.Log("Error while writing File " + FilePath, 0, null);
                    Dts.Log(ErrInfo, 0, null);
                    Dts.TaskResult = (int)ScriptResults.Failure;
                    return;
                }
            }
            catch (Exception e)
            {
                Dts.Log(e.Message, 0, null);
                Dts.TaskResult = (int)ScriptResults.Failure;
            }
        }

        public String ReadFile(String FilePath, String ErrInfo)
        {
            String strContents;
            StreamReader sReader;
            try
            {
                sReader = File.OpenText(FilePath);
                strContents = sReader.ReadToEnd();
                sReader.Close();
                return strContents;
            }
            catch (Exception e)
            {
                MessageBox.Show(ErrInfo);
                ErrInfo = e.Message;
                return "";
            }
        }

        public void WriteToFile(String FilePath, String strContents, String ErrInfo)
        {
            StreamWriter sWriter;
            try
            {
                sWriter = new StreamWriter(FilePath);
                sWriter.Write(strContents);
                sWriter.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show(ErrInfo);
                ErrInfo = e.Message;
            }
        }

Download het script door op de volgende link te kliken: afas script.

Voer de Script Task uit door er met de Rechtermuisknop op te klikken en te kiezen voor Execute Task:

Als de Script task succesvol is voltooid zijn alle “gekke” tekens vervangen.

 

Stap 4: Wegschrijven data in database

Sleep een Data Flow Task naar de Control Flow.

Open de data flow task door dubbel te klikken.

Sleep nu vanuit de SSIS Tool box een XML Source naar de Data Flow.

Open de XML Source Editor en kies bij de XML location voor het output bestand uit de connector.

Klik op Generate XSD om een definitie bestand voor het XML document te maken.

Als je op de tab Columns klikt krijg je een overzicht van alle beschikbare kolommen in het XML bestand. De waarschuwingsmelding van SSDT omtrent de lengte van de velden kun je negeren door op OK te klikken.

Sleep nu een OLE DB Destination naar de Data Flow en verbind de blauwe pijl vanuit de XML Source hiermee.

Open de OLE DB Destination Editor en maak een nieuwe OLE DB Connection Manager aan door op New te klikken.

Maar verbinding met een SQL database waar de gegevens in moeten worden weggeschreven:

Maak een Nieuwe tabel aan in de OLE DB Destionation Editor door op new te klikken.

Klik vervolgens op het tabje Mappings om de kolommen en de tabel op elkaar aan te sluiten.

Ga nu terug nar de Control Flow en klik met de rechtermuisknop op de Data Flow Task en kies voor Execute Task. De gegevens uit het XML bestand worden nu uitgelezen en weggeschreven naar de database.

Als je de Data Flow Task opent zie je zelfs hoeveel regels er zijn verwerkt:

Afsluiting

In bovenstaand stappenplan is beschreven hoe de gegevens vanuit een AFAS getconnector kan worden uitgelezen en de gegevens kunnen worden weggeschreven naar een database voor verdere verwerking en analyse.

Een eerste stap voor het ontginnen van de goudmijn is gelegd.

Veel succes.


[show_avatar email=2 align=left user_link=authorpage show_name=true show_biography=true show_postcount=true]