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