IngramMicro Zubehör

Navigation:  Skripts > Programmerweiterungen > Beispiele > IngramMicro >

IngramMicro Zubehör

Previous pageReturn to chapter overviewNext page

Beschreibung

Das folgende Skript wird über die Funktion "erweiterter Im-/ Export" ausgeführt und importiert die Zubehör - Liste von IngramMicro in die Auftragsverwaltung. Allen Artikeln wird dadurch das entsprechende Zubehör zugeordnet. Führen Sie vor dem Import der Zubehörliste den Import der Artikel durch.

 

 

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 hinzufügen des passenden Zubehörs.

 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 Kundennummer As String = "<IhreKdNr>"

            Dim Kennwort As String = "<IhrKennwort>"

 

            'Temprärordner bereinigen und neu erstellen

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

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

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

            IO.Directory.CreateDirectory(TempFolder)

 

            'Datei herunterladen

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

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

            Dim DataStream = DownloadFile(DownloadURL, Kundennummer, Kennwort)

 

            '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 & "\ZUBEHOER.txt")

            Dim Anzahl As int64 = EOLStrings.length

            Dim IsFirstRow As Boolean = True

            Dim count As int64

            Dim artID1 As Int64

            Dim artID2 As Int64

            Dim LastArtikelNr As String = ""

 

            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...")

 

                    'Nummer splitten

                    Dim Nummern As String() = row.Split(vbTab)

                    Dim Artikelnummer As String = Nummern(0).Trim

                    Dim ZubehörNummer As String = Nummern(1).Trim

 

                    'Artikel IDs suchen

                    'Vermeide mehrfaches abrufen des Stammartikels bei aufeinanderfolgendem Vorkommen in der Liste

                    If Not LastArtikelNr = Artikelnummer Then

                        artID1 = (From a In dc.tbl_Artikel Where a.Artikelnummer = Artikelnummer Select a.ID).FirstOrDefault

                        LastArtikelNr = Artikelnummer

                    End If

                    artID2 = (From a In dc.tbl_Artikel Where a.Artikelnummer = ZubehörNummer Select a.ID).FirstOrDefault

 

                    If artID1 > 0 And artID2 > 0 Then

                        'Auf vorhandes Zubehör prüfen

                        Dim Zubehör = (From a In dc.tbl_Artikel_Zubehörs Where a.ArtikelID = artID1 And a.Artikel2ID = artID2).FirstOrDefault

 

                        'Neues Zubehör hinzufügen

                        If Zubehör Is Nothing Then

                            'e.LogMessageDelegate.Invoke("Neues Zubehör: " & Artikelnummer  & " | " & ZubehörNummer )

                            Dim Zubeh = New tbl_Artikel_Zubehör With {.ArtikelID = artID1, _

                                                                                            .Artikel2ID = artID2}

                            dc.tbl_Artikel_Zubehörs.InsertOnSubmit(Zubeh)

                            dc.SubmitChanges()

                        End If

                        'else

                        'e.LogMessageDelegate.Invoke("Artikel nicht gefunden: " & Artikelnummer  & " | " & ZubehörNummer )

                    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