[NEWSboard IBMi Forum]

Thema: API QGYOLSPL

  1. #1
    Registriert seit
    Oct 2008
    Beiträge
    56

    Question API QGYOLSPL

    Hallo Welt

    Ich möchte in einem COBOL-Porgramm das API QGYOLSPL aufrufen, um eine Liste von allen Spoolfiles in mehreren OUTQs zu erstellen. Die Anzahl und Namen der OUTQs können verschieden sein.

    Dafür habe ich im Parameter "Filter Information" für die OUTQ-Namen und -Bibliotheken ein Array mit 100 Elementen erstellt. Den Parameter "Number of output queue names" befülle ich z.B. mit 3 und entsprechend 3 verschiedene OUTQ-Namen (alle mit derselben Bibliothek) in die ersten 3 Elemente des Arrays. Format of Filter Information ist OSPF0100.

    Wenn die restlichen 97 Array-Elemente Blanks beinhalten, stürzt der Aufruf von QGYOLSPL mit MCH1210 ab.
    Wenn ich das Array mit LOW-VALUE initialisiere, bevor ich die ersten 3 Elemente befülle, gibt es keinen Absturz, aber im Error-Parameter steht "GUI0009", was "0 ist für Anzahl der Statusangaben nicht gültig" bedeuten soll. Der Parameter "Number of statuses" ist aber sowohl vor als auch nach dem Aufruf des APIs mit 1 befüllt, was im Debugger sichtbar ist.

    Eine Variable Länge des Arrays (mit OCCURS DEPENDING ON) scheint in dem Fall nicht möglich zu sein, weil dann beim Compilieren eine Fehlermeldung kommt, die besagt, dass das variabel lange Feld das letzte in der Struktur sein muss.

    Was muss ich tun, damit das richtig funktioniert?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da die Filterinformationen variabel aufgebaut sind, kannst du hier nicht mit festen Positionen arbeiten.
    Du kannst aber mit COBOL sehr einfach die Struktur dynamisch aufbauen:

    * Format OSPF0100
    01 Anzahl-X.
    05 Anzahl pic s9(9) comp-4.

    01 ZielFilter pic x(10000).
    01 ZielPos pic s9(9) comp-4.

    move 1 to ZielPos

    * AnzahlUser
    move n to Anzahl
    move Anzahl-X to ZielFilter(ZielPos:size of Anzahl-X)

    compute ZielPos = ZielPos + size of Anzahl-X

    if Anzahl > zero
    Move User-Array(1:Anzahl*12) to ZielFilter(ZielPos:Anzahl*12)
    endif

    compute Zielpos = Zielpos + Anzahl*12

    * Anzahl Outq's
    move n to Anzahl

    move Anzahl-X to ZielFilter(ZielPos:size of Anzahl-X)

    compute ZielPos = ZielPos + size of Anzahl-X

    if Anzahl > zero
    Move OUTQ-Array(1:Anzahl*20) to ZielFilter(ZielPos:Anzahl*20)
    endif

    compute Zielpos = Zielpos + Anzahl*20

    usw.usw.

    Wichtig ist, dass der Filterpuffer für alle Werte einen gültigen Inhalt hat, im Zweifel eben auch Zero.

    Das Format OSPF0200 ist da etwas einfacher da du hier ein Gesamtformat mit einem Header übergibst.
    Du musst nur die Anzahl und Offsets korrekt berechnen (Start ist immer 0).
    Hier hilft dir ja "size of" für die Berechnung.
    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. Probleme API QUSLJOB aufzurufen
    By TMusolf in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 25-01-07, 12:42
  2. API QLGSORT/QLGSRTIO
    By muadeep in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 03-01-07, 17:53
  3. javamail api
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 22-11-06, 16:02
  4. Eingabe sperren bei Fehlermeldung über API
    By ExAzubi in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 17-10-06, 16:48
  5. API für die Ermittlung aktiver Jobs
    By lyrics in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 29-08-06, 09:03

Tags for this Thread

Berechtigungen

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