IngramMicro EOL

Navigation:  Skripts > Programmerweiterungen > Beispiele > IngramMicro >

IngramMicro EOL

Previous pageReturn to chapter overviewNext page

Beschreibung

Das folgende Skript wird über die Funktion "erweiterter Im-/ Export" ausgeführt und importiert die EOL Liste von IngramMicro in die Auftragsverwaltung. Alle Artikel die in der EOL Liste enthalten sind, werden als Auslaufartikel gekennzeichnet.

 

Voraussetzung

Auftragsverwaltung ab Version 11.12.1

 

Ablauf des Skripts

 1. Automatischer Download der Datenbank bei IM

 2. Entpacken der Datenbank und einlesen der Artikel

 3. Suchen vorhandener Artikel und markieren als "Auslauf Artikel"

 4. Bereinigung der heruntergeladenen Dateien

 

Installation

 • Passen Sie die Parameter "<IhreKDNr>" und "<IhrKennwort>"  an.

 • Öffnen Sie den Skript über die erweiterte Im- und Export Funktion

 

Skript

Imports Microsoft.VisualBasic

Imports System

Imports System.Collections.Generic

Imports System.Linq

Imports Styletronix.AuftragsverwaltungV2.Common

Imports Styletronix.AuftragsverwaltungV2

 

Namespace AdvancedImport

    Class DynamicCode

 

        'Funktion, die beim start des Skripts aufgerufen wird.

        Public Shared Sub DoWork(ByRef e As Styletronix.AuftragsverwaltungV2.ImportAssistent.frm_AdvancedImport.ScriptParams)

 

            'Parameter

            Dim DownloadURL = "http://www.ingrammicro.de/cgi-bin/scripts/get_file.pl?NAME=EOL.zip"

            Dim Kundennummer As String = "<IhreKDNr>"

            Dim Kennwort As String = "<IhrKennwort>"

 

            'Datei herunterladen

            e.ProgressDelegate.Invoke(0, "Datei herunterladen...")

            Dim DataStream = DownloadFile(DownloadURL, Kundennummer, Kennwort)

 

            'Temprärordner bereinigen und erstellen

            e.ProgressDelegate.Invoke(0, "Temporärer Ordner vorbereiten...")

            Dim TempFolder = My.Computer.FileSystem.SpecialDirectories.Temp & "\AuftrV2_IMdb"

            If IO.Directory.Exists(TempFolder) Then IO.Directory.Delete(TempFolder, True)

            IO.Directory.CreateDirectory(TempFolder)

 

            'Datei entpacken

            e.ProgressDelegate.Invoke(0, "Daten extrahieren...")

            DataStream.Position = 0

            ExtractFile(DataStream, TempFolder)

 

            'Verbindung zur Datenbank der Auftragsverwaltung herstellen

            Dim dc As New DC_AllgemeinDataContext(Einstellungen.SQL_Verbindungszeichenfolge)

 

            'Textdatei lesen

            Dim EOLStrings As String() = IO.File.ReadAllLines(TempFolder & "\EOL.txt")

            Dim Anzahl As int64 = EOLStrings.length

            Dim IsFirstRow As Boolean = True

            Dim count As int64

            For Each row As String In EOLStrings

                If IsFirstRow Then

                    'Überspringe erste Zeile mit Überschrift

                    IsFirstRow = False

                Else

                    'Fortschritt anzeigen

                    count += 1

                    Dim Progress As int64 = count / Anzahl * 100

                    e.ProgressDelegate.Invoke(Progress, "Prüfe Artikel...")

 

                    Dim Artikelnummer As String = Mid(row, 1, 8).Trim

                    Dim art As Common.tbl_Artikel = (From a In dc.tbl_Artikel Where a.Artikelnummer = Artikelnummer).FirstOrDefault

                    If Not art Is Nothing Then

                        If art.IstAuslaufartikel = False Then

                            e.LogMessageDelegate.Invoke("Artikel EOL gesetzt: " & Artikelnummer)

                            art.IstAuslaufartikel = True

                            dc.SubmitChanges()

                        End If

                    End If

                End If

 

                'Auf Abbruch durch Benutzer reagieren

                If e.GetCancelDelgate.Invoke Then

                    e.LogMessageDelegate.Invoke("Abbruch durch Benutzer.")

                    Exit For

                End If

            Next

 

            'Datenbankverbindungen schließen

            e.LogMessageDelegate.Invoke("Verbindung zu Datenbanken beenden...")

            dc.Dispose()

 

            'Temporärdateien löschen

            e.LogMessageDelegate.Invoke("Temporäre Daten löschen...")

            IO.Directory.Delete(TempFolder, True)

            e.LogMessageDelegate.Invoke("Beendet")

 

        End Sub

 

 

        'Funktion zum Herunterladen von Dateien von einem Server per HTTP / HTTPs

        Private Shared Function DownloadFile(ByVal URL As String, ByVal Benutzer As String, ByVal Kennwort As String) As IO.MemoryStream

            Dim wc As New Net.WebClient

            wc.Credentials = New System.Net.NetworkCredential(Benutzer, Kennwort)

            Dim data As Byte() = wc.DownloadData(URL)

            Dim DataStream As New IO.MemoryStream

            DataStream.Write(data, 0, data.Length)

            Return DataStream

        End Function

 

 

        'Funktion zum Herunterladen von Dateien von einem Server per HTTP / HTTPs

        Private Shared Sub DownloadFile(ByVal URL As String, ByVal TargetFile As String)

            Dim wc As New Net.WebClient

            Dim data As Byte() = wc.DownloadData(URL)

            Dim oFileStream = New System.IO.FileStream(TargetFile, System.IO.FileMode.Create)

            oFileStream.Write(data, 0, data.Length)

            oFileStream.Close()

        End Sub

 

 

        'Funktion zum Extrahieren von Dateien aus ZIP-Archiv

        Private Shared Sub ExtractFile(ByRef DataStream As IO.MemoryStream, ByVal TargetFolder As String)

            Dim strmZipInputStream = New ICSharpCode.SharpZipLib.Zip.ZipInputStream(DataStream)

            Dim objEntry As ICSharpCode.SharpZipLib.Zip.ZipEntry

            objEntry = strmZipInputStream.GetNextEntry()

            Do While Not IsNothing(objEntry)

                If objEntry.IsFile Then

                    Dim TargetName = IO.Path.Combine(TargetFolder, objEntry.Name)

                    Dim Folder = IO.Path.GetDirectoryName(TargetName)

                    If Not IO.Directory.Exists(Folder) Then IO.Directory.CreateDirectory(Folder)

                    If IO.File.Exists(TargetName) Then IO.File.Delete(TargetName)

                    Dim file = New IO.FileStream(TargetName, IO.FileMode.Create)

                    Dim buff(2048) As Byte

                    Dim size = strmZipInputStream.Read(buff, 0, buff.Length)

                    Dim pos As Int64 = 0

                    Do While size > 0

                        file.Write(buff, 0, size)

                        size = strmZipInputStream.Read(buff, 0, buff.Length)

                        pos += size

                    Loop

                    file.Close()

                End If

                objEntry = strmZipInputStream.GetNextEntry()

            Loop

            strmZipInputStream.Close()

        End Sub

 

    End Class

End Namespace