[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2017
    Beiträge
    25

    Auflösung von Binary(4) bei Aufruf von QUSRJOBI via com.ibm.as400.access.programcall

    Hallo Zusammen,

    ich möchte in einem Android Projekt unter Java die Bibliotheksliste eines beliebigen Jobs ermitteln. Meine Präferenz bei allen Aufrufen zur System i ist immer SQL.

    Deshalb habe ich es mit der "Library_List_Info" View versucht. Diese gibt mir aber leider immer nur die Bibliotheksliste des aktuellen Jobs zurück. Meiner Meinung nach kann ich nicht via "where" beliebige Jobs auslesen.

    Dann habe ich es mit dem in der Überschrift erwähnten "com.ibm.as400.access.programcall" versucht. Hiermit rufe ich die API "QUSRJOBI" mit Format Name "JOBI0700" auf. Ich erhalte auch den entsprechenden Rückgabe String. Nur leider stimmt entweder die CCSID nicht 100% oder die Binary(4) Werte werden nicht aufgelöst. Hier ein Beispiel meines Rückgabe Parameters:

    ������·������·SUSERA1 USER 462729������ŽÅ��µ��ã™ûˆ€*ACTIVE I ������†��������������������QSYS2929 PUB400SYS QSYS QSYS2 QHLPSYS QUSRSYS QGPL QTEMP �������������������������������������������������� ���

    Habe schon einige Sachen versucht um das Binary(4) in int zu konvertieren aber leider ohne Erfolg. Gibt es da eine Möglichkeit.

    Oder gibt es vllt eine bessere Möglichkeit via SQL Procedure oder PCML Call? Für den PCML Call muss ich meiner Meinung nach erst eine Parameter Datei auf der Maschine generieren. Das ist für mich aber keine gute Lösung!

    Vielleicht habt ihr ja eine Idee. Bin für alle Verbesserungen und/oder Lösungen dankbar!

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zunächst eine Frage, wie definierst Du BINARY(4)?
    Unter BINARY(4) ist der "normale" Integer zu verstehen (Int(10) - RPG, Integer - SQL - int in Java)

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... was Du da zurückkriegst, ist kein String, das ist ein Haufen an Binärdaten, die Stück für Stück - byteweise - interpretiert und konvertiert werden müssen, wozu es ein paar kuriose Routinen in der jt400 Toolbox gibt. Beispiele findest Du in der jt400 Doku oder in den packages pords2pojo im AppServer4RPG.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Nov 2017
    Beiträge
    25
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Zunächst eine Frage, wie definierst Du BINARY(4)?
    Unter BINARY(4) ist der "normale" Integer zu verstehen (Int(10) - RPG, Integer - SQL - int in Java)

    Birgitta
    Hallo Birgitta,

    ich definiere Binary(4) erstmal gar nicht.
    Ich sehe nur das IBM das im Output der API für das Format JOBI0700 so macht und das ich das obige Ergebnis erhalte, welches ich erstmal nicht interpretieren kann.

    Eventuell gibt es ja eine einfache Lösung das zu konvertieren oder einen anderen leichteren und besseren Weg so eine Art API aufzurufen.

    Gruß
    derMuller

  5. #5
    Registriert seit
    Jun 2012
    Beiträge
    25
    Mit com.ibm.as400.access.AS400Bin4 bekommt du deine Werte raus.
    Code:
    call.run();
    byte[] as400Data = parmlist[0].getOutputData();
    
    AS400Bin4 bin4 = new AS400Bin4();
    AS400Text text10 = new AS400Text(10, as400);
    AS400Text text6 = new AS400Text(6, as400);
    
    int bytesreturned = bin4.toInt(as400Data, 0);
    int bytesavailable = bin4.toInt(as400Data, 4);
    Object jobname = text10.toObject(as400Data, 8);
    Object jobuser = text10.toObject(as400Data, 18);
    Object jobnumber = text6.toObject(as400Data, 28);

  6. #6
    Registriert seit
    Nov 2017
    Beiträge
    25
    Zitat Zitat von TR1 Beitrag anzeigen
    Mit com.ibm.as400.access.AS400Bin4 bekommt du deine Werte raus.
    Code:
    call.run();
    byte[] as400Data = parmlist[0].getOutputData();
    
    AS400Bin4 bin4 = new AS400Bin4();
    AS400Text text10 = new AS400Text(10, as400);
    AS400Text text6 = new AS400Text(6, as400);
    
    int bytesreturned = bin4.toInt(as400Data, 0);
    int bytesavailable = bin4.toInt(as400Data, 4);
    Object jobname = text10.toObject(as400Data, 8);
    Object jobuser = text10.toObject(as400Data, 18);
    Object jobnumber = text6.toObject(as400Data, 28);
    Hallo TR1,

    vielen Danke für dein Beispiel. So hat alles funktioniert! Danke!

    Was haltet ihr generell von der Art des Aufrufes?
    Gibt es eventuell bessere Lösungen?

    Gruß
    derMuller

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die Java-Toolbox kennt auch noch AS400-Struktur-Konverter. D.h., dass man die API-Struktur diesem Konverter übergibt und anschließend lesbare Inhalte erhält.

    @Birgitta:
    BIN(4) auf der AS/400 weichen von BIN(4), also Integer, auf dem PC in der Speicherung leider ab.
    AS/400 (und andere) speichern in der Reihenfolge High/Low, also 1 = x'0001'.
    Auf Intel's wird in Low/High gespeichert, als 1 = 'x'0100'.
    Wenn man dies nicht berücksichtigt kommt es natürlich zu Falschaussagen.
    Daher die Konvertierungsroutinen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. QUSRTVUS 8 binary in Receiver Variablen
    By harkne in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 06-09-17, 14:44
  2. Binary in Packed.
    By dholtmann in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 12-05-17, 14:29
  3. Zugriff auf iSeries/AS400 über Access
    By hoffi3d in forum NEWSboard Windows
    Antworten: 6
    Letzter Beitrag: 28-03-17, 14:03
  4. AS400 CALL's aus Mircrosoft Access
    By Franz.Rung in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 18-08-15, 16:13
  5. Datentransfer via ODBC AS400 + MS Access
    By kuetemaj in forum NEWSboard Windows
    Antworten: 8
    Letzter Beitrag: 11-12-08, 07:59

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •