Einführung
Dieses Interface wird für die Lagerstandabfrage von Artikeln benötigt. Wird im Kontextmenü eines Artikels die Liste "Lagerstand" aufgerufen, werden alle Skripts aus dem Autostart-Ordner nach diesem Interface durchsucht und die entsprechenden Funktionen aufgerufen. Das IRealtimeLagerstand Interface ist für erweiterte Lagerabfragen gedacht, die auch mehrere Lager gleichzeitig abfragen können. Sämtliche Asynchronen Vorgänge müssen im Skript selbst erstellt werden, da die Hauptanwendung sonst während der Abfrage nicht mehr reagiert.
Für einfache Abfragen ist das Interface Ilagerstandabfrage entwickelt worden.
Ablauf
1. | Der Skript wird beim starten der Auftragsverwaltung kompiliert und verbleibt im Arbeitsspeicher bis die Anwendung beendet wird. |
2. | Ein User wählt einen Artikel aus und geht im Kontextmenü mit der Maus auf "Lagerstand" |
3. | Die Funktion BeginRequest() wird ausgeführt und die Artikeldaten wie Artikelnummer, Artikelnummer1-9 usw. werden als Artikeldaten übergeben. Zusätzlich wird noch eine ReferenzID übermittelt. Diese muss bei Rückmeldung der Ergebnisse mit ausgegeben werden um Anfrage und Rückmeldung zuordnen zu können. |
4. | Der Skript kann nun den Lagerstand oder auch mehrere Lagerstände laden und anschließend für jedes Lager das Ereignis RequestCompleted() aufrufen. |
5. | Jeder Aufruf des Ereignisses RequestCompleted() fügt eine neue Zeile in die Lagerliste ein. Einträge können einen Tag enthalten. Dieser ist nur für das Skript erforderlich, falls dieses auf die Lagerinfo_Clicked() Funktion reagieren möchte. Der Tag wird dabei zur Identifizierung des Eintrags verwendet. |
6. | Die Funktion CancelRequest() wird ausgeführt, sobald die Lagerliste ausgeblendet wird. Der Skript sollte dann keine weiteren Daten durch das Ereignis RequestCompleted() liefern. |
Wichtige Hinweise
• | Der Skript bleibt während der gesamten Laufzeit der Auftragsverwaltung aktiv. |
• | Es können mehrere BeginRequest, CancelRequest oder Lagerinfo_Clicked Ereignisse parallel in beliebiger Reihenfolge auftreten. Anfragen für einzelne Artikel können anhand der ReferenzID unterschieden werden. |
• | Die Funktion BeginRequest wird im Thread der Hauptanwendung ausgeführt. Die Anwendung wird also nicht reagieren, bis die Abfrage beendet ist. Aus diesem Grund sollte BeginRequest verwendet werden, um einen Asynchronen Vorgang zu starten. Das Event RequestCompleted muss im Thread der Hauptanwendung ausgeführt werden. z.B. durch Verwendung von Host des ICommonPlugIn-Interface. |
Host.Invoke(Sub()
RaiseEvent RequestCompleted …
End Sub)
Interface
Assembly: Styletronix.AuftragsverwaltungV2.IPC
Public Interface IRealtimeLagerstand
Inherits ICommonPlugIn
Structure LagerRequestArgs
Dim Artikeldaten As Dictionary(Of String, String)
Dim ReferenzID As Int64
End Structure
Structure LagerRequestResult
Dim ReferenzID As Int64
Dim Lagerstand As String
Dim Lager As String
Dim Datum As DateTime
Dim Tag As Object
Dim Ex As Exception
End Structure
Structure CancelRequestArgs
Dim ReferenzID As Int64
End Structure
Structure LagerInfoClickedArgs
Dim Lager As String
Dim ReferenzID As Int64
End Structure
Structure BeginLagerRequestResult
Dim Lager As List(Of String)
End Structure
Function BeginRequest(ByVal sender As Object, ByVal e As LagerRequestArgs) As BeginLagerRequestResult
Sub CancelRequest(ByVal sender As Object, ByVal e As CancelRequestArgs)
Sub Lagerinfo_Clicked(ByVal sender As Object, ByVal e As LagerInfoClickedArgs)
ReadOnly Property ReferenzID As Int64
Event RequestCompleted(ByVal sender As Object, ByVal e As LagerRequestResult)
End Interface
Mögliche Keys für Artikeldaten
Artikelnummer
Artikelnummer2
Artikelnummer3
Artikelnummer4
Artikelnummer5
Artikelnummer6
Artikelnummer7
Artikelnummer8
Artikelnummer9
GlobalID
Lagerplatz
Lieferant (Name aus Feld Name1)
Artikelnummer_Lieferant