VB.net – AS400 DATAQ lesen & schreiben

Zugegeben, dieses Tutorial richtet sich nicht an den Hobby Programmierer. Die meisten Nerds werden eine AS400 von IBM nicht im Keller stehen haben. Für alle die aber in ihrer Firma mit solch einer Datenbankmaschine arbeiten, könnte der folgende Code ganz nützlich sein.
DATAQs auf der AS400 stellen eine praktische Schnittelle dar, welche sich lesen und beschreiben lassen. Dabei existieren 2 verschiedene Arten. DATAQ keyed und FIFO (first in, first out), letzteres werde ich per VB.net ansprechen um Daten direkt in meinen Programm zu verwenden.
cwbx.dll
Die cwbx.dll ist unsere Schnittstelle zur AS400. Diese Datei ist im ISeries Client enthalten und muss als Addin in das Projekt eingebunden werden.

SharpDevelop > Projekt > Refernez hinzufügen > .net Assemblybrowser
Zu finden ist die cwbx.dll bei einer Standartinstalltion unter C:\Programme\IBM\Client Access\Shared.
Funktion DATAQ lesen
Für die Verbindung zur AS400 werden mehrere Variablen benötigt. Eine Verbindung kann nur aufgebaut werden wenn User, Passwort, DATQ Name, Bibliothek und DNS/IP der AS400 bekannt sind.
Diese Variablen kann man nun direkt in die Funtkion schrieben oder global definieren. In diesen Beispiel kommen sie in meine Funktion.
Hinweis: Das Passwort sollte nicht im Quellcode definiert werden. Dies macht das Programm unflexibel. Ändern sich Verbindungseigenschaften muss das Programm neu erstellt werden. Auch aus Sicherheitsgründen nicht zu empfehlen.

Public Function func_as400_read_dtaq
'var
Dim AS400_User As String = "Benutzer"
Dim AS400_Password As String = "Passwort"
Dim AS400_Queue As String = "DATAQ"
Dim AS400_Libary As String = "BIBLIOTHEK"
Dim AS400_Name As String = "AS400"
Dim DATAQ_result As string
'konverter für die empfangenen daten
Dim conv As New cwbx.StringConverterClass
'als object definieren
Dim as400 As new cwbx.AS400System
'dtaq ohne key
Dim dtaq As New cwbx.DataQueueClass
'object bestücken, as400, benutzer, passwort
With as400
    .Define(AS400_Name)
    .UserID = AS400_User
    .Password = AS400_Password
End With
'verbinden
as400.Connect(cwbx.cwbcoServiceEnum.cwbcoServiceDataQueues)
'Bibliothek und dtaq zuweisen
dtaq.LibraryName = AS400_Libary
dtaq.QueueName = AS400_Queue
'dtaq der 400 zurodnen
dtaq.system = as400
'try für fehlerbehandlung
try
    'daten über den konverter als string speichern
    DATAQ_result = conv.FromBytes(dtaq.Read)
    return DATAQ_result
Catch
    DATAQ_result = "DATAQ ist leer"
    return DATAQ_result
End Try
'verbindung schliessen
as400.Disconnect (cwbx.cwbcoServiceEnum.cwbcoServiceDataQueues)
End Function

Wird die Funktion aufgerufen, liest sie den ersten Satz in der DATAQ. Anschließend wird dieser Satz automatisch aus der DATAQ gelöscht.
Funktion DATAQ schreiben
Um nun Daten in eine DATAQ zu schreiben, bedarf es nur ein paar kleinen Änderungen. Die Anmeldung und die Verbindungsdefinition gleicht der DATAQ lesen Funktion.
Der Funktion wird der zuschreibende String übergeben

Public Sub func_as400_write_dtaq(sub_send As String)
'var
Dim AS400_User As String = "Benutzer"
Dim AS400_Password As String = "Passwort"
Dim AS400_Queue As String = "DATAQ"
Dim AS400_Libary As String = "BIBLIOTHEK"
Dim AS400_Name As String = "AS400"
Dim DATAQ_result As string
Dim conv As New cwbx.StringConverterClass
Dim as400 As new cwbx.AS400System
Dim dtaq As New cwbx.DataQueueClass
With as400
    .Define(AS400_Name)
    .UserID = AS400_User
    .Password = AS400_Password
End With
as400.Connect(cwbx.cwbcoServiceEnum.cwbcoServiceDataQueues)
dtaq.LibraryName = AS400_Libary
dtaq.QueueName = AS400_Queue
dtaq.system = as400
'string in die DATAQ schreiben
dtaq.Write(conv.ToBytes(sub_send))
'verbindung schliessen
as400.Disconnect (cwbx.cwbcoServiceEnum.cwbcoServiceDataQueues)
End Sub

Aufruf mit Übergabe String.

Call func_as400_write_dtaq("DATAQ beschreiben mit VB.net"