Beispiel IngramMicro Artikelimport

Navigation:  Skripts > Programmerweiterungen > Interfaces > IArtikelsuche >

Beispiel IngramMicro Artikelimport

Previous pageReturn to chapter overviewNext page

Imports Microsoft.VisualBasic

Imports System

Imports System.Collections.Generic

Imports System.Linq

Imports Styletronix.AuftragsverwaltungV2.Common

Imports Styletronix.AuftragsverwaltungV2

Imports Styletronix.AuftragsverwaltungV2.IPC

Imports Styletronix

Imports Styletronix.Threading.Thread_Manager

 

Namespace LagerstandAbfrage

  Public Class DynamicCode

      Implements IPC.IPluginDetails

      Implements IPC.IArtikelsuche

      Implements IPC.ICommonPlugIn

 

#Region "Benutzereinstellungen"

      Private DownloadURL = "http://www.ingrammicro.de/cgi-bin/scripts/get_PL.pl"

      Private Kundennummer As String = "xxxxxx" 'Hier Ihre Kundennummer eintragen

      Private Kennwort As String = "xxxxxx" 'Hier Ihr Kennwort eintragen

 

      Private Folder As String = IO.Path.GetDirectoryName(My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData) & "\" & Styletronix.Utils.Settings.DB_GUID & "\Temp"

      Private PlugInKennung As String = "IngramMicro"

      Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Folder & ";Extended Properties=dBase III"

#End Region

 

#Region "Deklarationen"

      Private _Host As Object

      Private RunningUserTokens As New List(Of Object)

#End Region

#Region "PluginDetails"

      Public ReadOnly Property Plugin_Company As String Implements IPC.IPluginDetails.Plugin_Company

          Get

              Return "Styletronix.net"

          End Get

      End Property

      Public ReadOnly Property Plugin_Description As String Implements IPC.IPluginDetails.Plugin_Description

          Get

              Return "Artikelimport aus einer lokalen dBase Artikeldatenbank von IngramMicro"

          End Get

      End Property

      Public ReadOnly Property Plugin_Icon As System.Drawing.Image Implements IPC.IPluginDetails.Plugin_Icon

          Get

              Return Nothing

          End Get

      End Property

      Public ReadOnly Property Plugin_Name As Object Implements IPC.IPluginDetails.Plugin_Name

          Get

              Return "Artikelabfrage - IngramMicro dBase Artikeldatenbank"

          End Get

      End Property

      Public ReadOnly Property Plugin_Version As System.Version Implements IPC.IPluginDetails.Plugin_Version

          Get

              Return New Version(1, 0, 0)

          End Get

      End Property

#End Region

 

#Region "IArtikelsuche"

      Public Event ArtikelSucheCompleted(sender As Object, e As AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompleted

 

      Public Event ArtikelSuchePartialResult(sender As Object, e As AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSuchePartialResult

 

      Public Sub BeginArtikelSuche(Artikelnummer As String, userToken As Object) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.BeginArtikelSuche

          Try

               RunningUserTokens.Add(userToken)

 

              Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString)

               dBaseConnection.Open()

 

               Artikelnummer = Artikelnummer.ToUpper

              Dim dBaseCommand As New System.Data.OleDb.OleDbCommand(String.Format("SELECT * FROM mac_dbf WHERE UCASE(ARTIKEL_Nr) Like '{0}' OR UCASE(HSTNUMMER) LIKE '{0}' OR UCASE(EANCODE) LIKE '{0}' OR UCASE(EANCODE) LIKE '0{0}'", Artikelnummer), dBaseConnection)

              Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader(System.Data.CommandBehavior.Default)

 

              Do While dBaseDataReader.Read

                  If Not RunningUserTokens.Contains(userToken) Then GoTo ende

 

                  Dim art As New tbl_Artikel

                   art.Artikelnummer3 = dBaseDataReader("ARTIKEL_Nr").ToString

                   art.Gruppe1 = dBaseDataReader("GRUPPE1").ToString

                   art.Gruppe2 = dBaseDataReader("GRUPPE2").ToString

                   art.Gruppe3 = dBaseDataReader("GRUPPE3").ToString

                   art.Artikelnummer2 = dBaseDataReader("HSTNUMMER").ToString

                   art.Artikelnummer = dBaseDataReader("EANCODE").ToString

                  If art.Artikelnummer.Length = 13 And art.Artikelnummer.StartsWith("0") Then

                       art.Artikelnummer = art.Artikelnummer.Remove(0, 1)

                  End If

                   art.Artikelnummer4 = dBaseDataReader("CATALOGUEI").ToString

                   art.VK = dBaseDataReader("EVP").ToString

                   art.EK = dBaseDataReader("HEK").ToString

                   art.Name = dBaseDataReader("HERSTELLER").ToString & " " & dBaseDataReader("ARTIKEL1").ToString & vbCrLf & dBaseDataReader("ARTIKEL2").ToString

                  If String.IsNullOrWhitespace(art.Artikelnummer) Then art.Artikelnummer = art.Artikelnummer3

 

                  'Bild herunterladen

                  Dim imgURL = dBaseDataReader("PICTUREFIL").ToString

                  If art.Thumb Is Nothing AndAlso Not String.IsNullOrWhiteSpace(imgURL) Then

                       imgURL = "http://ec.ingrammicro.de/jpg/" & imgURL

                      Try

                          Dim img = Styletronix.Imaging.Utils.GetImageFromURL(imgURL)

                          If Not img Is Nothing Then

                               art.Bild = Styletronix.Imaging.Utils.GetImageFromBinary(img)

                          End If

                      Catch ex As Exception

                      End Try

                  End If

 

                  Dim ArtikelText = String.Format("{1}{0}{2}", vbCrLf, art.Artikelnummer, art.Name)

 

                  Dim args As New Styletronix.AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs

                   args.PlugInKennung = PlugInKennung

                   args.userToken = userToken

                   args.Text = ArtikelText

                   args.ArtikelDetails = art

 

                  RaiseEvent ArtikelSuchePartialResult(Me, args)

              Loop

 

 

ende:

               dBaseConnection.Close()

 

              Dim args2 As New Styletronix.AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs

               args2.PlugInKennung = PlugInKennung

               args2.userToken = userToken

              RaiseEvent ArtikelSucheCompleted(Me, args2)

 

              Try

                  If Me.RunningUserTokens.Contains(userToken) Then Me.RunningUserTokens.Remove(userToken)

              Catch ex As Exception

              End Try

 

          Catch ex As Exception

               MsgBox(ex.ToString, MsgBoxStyle.OkOnly, Me.Plugin_Name)

          End Try

      End Sub

 

      Public Sub CancelArtikelSuche(userToken As Object) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.CancelArtikelSuche

          Try

              If Me.RunningUserTokens.Contains(userToken) Then Me.RunningUserTokens.Remove(userToken)

          Catch ex As Exception

 

          End Try

      End Sub

 

      Public Function GetArtikelSucheStatus(userToken As Object) As AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheStatusResult Implements AuftragsverwaltungV2.IPC.IArtikelsuche.GetArtikelSucheStatus

          If Me.RunningUserTokens.Contains(userToken) Then

              Return IArtikelsuche.ArtikelSucheStatusResult.Running

          Else

              Return IArtikelsuche.ArtikelSucheStatusResult.Completed

          End If

      End Function

#End Region

 

#Region "ICommonPlugIn"

      Public Sub Initialize(Host As Object) Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.Initialize

          Me._Host = Host

 

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

 

          Dim Vorbereitung As New DatenbankVorbereitung

           Vorbereitung.DownloadURL = Me.DownloadURL

           Vorbereitung.Kennwort = Me.Kennwort

           Vorbereitung.Kundennummer = Me.Kundennummer

           Vorbereitung.Folder = Me.Folder

           Styletronix.Threading.Thread_Manager.Instance.AddThread(Vorbereitung)

      End Sub

 

      Public ReadOnly Property Plugin_HasConfigMenu As Boolean Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.Plugin_HasConfigMenu

          Get

              Return False

          End Get

      End Property

 

      Public Sub ShowConfigMenu() Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.ShowConfigMenu

          Throw New NotImplementedException

      End Sub

 

      Public Function ShutDown() As Boolean Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.ShutDown

          Return True

      End Function

 

      Public Function ShutDownRequest() As AuftragsverwaltungV2.IPC.ICommonPlugIn.Shutdown_Result Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.ShutDownRequest

          Dim ret As New AuftragsverwaltungV2.IPC.ICommonPlugIn.Shutdown_Result

           ret.Cancel = False

          Return ret

      End Function

#End Region

 

      Private Class DatenbankVorbereitung

          Implements Styletronix.Threading.Thread_Manager.IThread

          Public Folder As String

          Public DownloadURL As String

          Public Kundennummer As String

          Public Kennwort As String

 

          Public ReadOnly Property AllowCancel As Boolean Implements Styletronix.Threading.Thread_Manager.IThread.AllowCancel

              Get

                  Return False

              End Get

          End Property

          Private _BarSubItem As DevExpress.XtraBars.BarSubItem

          Public Property BarSubItem As DevExpress.XtraBars.BarSubItem Implements Styletronix.Threading.Thread_Manager.IThread.BarSubItem

              Get

                  Return Me._BarSubItem

              End Get

              Set(value As DevExpress.XtraBars.BarSubItem)

                  Me._BarSubItem = value

              End Set

          End Property

 

          Public Sub Cancel() Implements Styletronix.Threading.Thread_Manager.IThread.Cancel

              Throw New NotImplementedException

          End Sub

 

          Public ReadOnly Property Caption As String Implements Styletronix.Threading.Thread_Manager.IThread.Caption

              Get

                  Return "IngramMicro DB Download"

              End Get

          End Property

 

          Public Sub DoWork() Implements Styletronix.Threading.Thread_Manager.IThread.DoWork

              Try

                  RaiseEvent Thread_Progress_Changed(Me, 0, "Datei herunterladen...")

                  Dim DataStream = DownloadFile(DownloadURL, Kundennummer, Kennwort)

 

                  RaiseEvent Thread_Progress_Changed(Me, 80, "Temporärer Ordner vorbereiten...")

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

                   IO.Directory.CreateDirectory(Folder)

 

                  'Datei entpacken

                  RaiseEvent Thread_Progress_Changed(Me, 90, "Datenbank extrahieren...")

                   DataStream.Position = 0

                   ExtractFile(DataStream, Folder)

 

                  RaiseEvent Thread_Completed(Me, Nothing)

              Catch ex As Exception

                  RaiseEvent Thread_Completed(Me, ex)

              End Try

          End Sub

          Private _Thread As System.Threading.Thread

          Public Property Thread As System.Threading.Thread Implements Styletronix.Threading.Thread_Manager.IThread.Thread

              Get

                  Return Me._Thread

              End Get

              Set(value As System.Threading.Thread)

                  Me._Thread = value

              End Set

          End Property

 

          Public Event Thread_Completed(sender As Object, Result As Object) Implements Styletronix.Threading.Thread_Manager.IThread.Thread_Completed

 

          Public Event Thread_Log_NewEntry(sender As Object, Caption As String, Message As String, Exception As Object, Status As System.Diagnostics.EventLogEntryType) Implements Styletronix.Threading.Thread_Manager.IThread.Thread_Log_NewEntry

 

          Public Event Thread_Progress_Changed(sender As Object, Progress As Integer, StatusText As String) Implements Styletronix.Threading.Thread_Manager.IThread.Thread_Progress_Changed

 

          '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 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 Class

End Namespace