[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jul 2002
    Beiträge
    218
    moin,

    da gab es mal einen Befehl dspusrspc in der Bibl. TAATOOL

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Die TAATOOLS gibt es (leider) nicht mehr, allerdings kann man sich da auch mit DMPOBJ/DMPSYSOBJ behelfen.
    Ggf. ein Grundsätzlicher Fehler:
    Die RPG-Zählung bei Positionen in der DS "POS(nn)" beginnt bei 1, die relative Position zu einer Adresse bei 0. Die API-Strukturen beginnen ebenso bei 0.
    Ich hoffe, du hast dies berücksichtigt.

    Beim Aufruf des Spool-API's gibt es eine Error-Struktur, die man korrekt definieren muss um einen Fehler mitzubekommen. In diesem Fall ist das API bereits gescheitert und im USRSPC steht halt nichts.

    ErrorStru DS <= nur schematisch;-)
    AvailBytes bin(4) inz(%size(ErrorStru))
    ProvBytes bin(4) inz(0)
    ErrorId char(7) inz <= CPFxxxx
    unused char(1) inz
    ErrorData char(512) inz <= eigentlich beliebig, Daten zur CPF

    Wenn du
    clear ds_Error_code_ERRC0100;
    ausführst, löscht du ebenso auch AvailBytes und kein API gibt einen Fehler zurück noch wird einer ausgelöst.
    Dies ist vollkommen unnötig.
    Ist nach dem API-Call ProvBytes > 0, dann ist ein Fehler aufgetreten, ansonsten sollten Daten im USRSPC stehen.

    Auch dieses ist falsch:
    FieldPointer = UserSpacePointer + ListHeader.Offset + (ListHeader.Size * (UserSpaceCounter - 1));
    Wenn du die Strukturen ansiehst, so enthält jeder Eintrag seine eigene Länge.
    Somit bekommt der Fieldpointer die 1. Adresse und muss um die Länge der Beschreibung verschoben werden. Die Anzahl der Einträge steht dann im Header, das ist korrekt.
    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

  3. #3
    Registriert seit
    Feb 2018
    Beiträge
    7
    hallo allerseits,

    taatool hab ich hier, dspusrspc -> super!!
    boardmittel dmpobj -> DANKE!!!

    jetzt weiß ich zumindest, daß der userspace korrekt gefüllt ist

    werde mich nun den restlichen fehlern widmen...

    die ds_Error_code_ERRC0100 ist gemäß ibm-doku erstellt, müßte zumindest einigermaßen richtig sein, wenngleich ich das mit dem clear noch nicht verstanden habe warum ich den nicht machen soll. ich dachte, in der error steht dann nach dem prozeduraufruf ein fehler drin, wenn er zurückkommt? und aus Gewohnheit mache ich die felder vor dem prozeduraufruf leer. (nicht gut??)

    dcl-ds ds_Error_code_ERRC0100 qualified ;
    Bytes_provided int(10) Inz(%size(ds_Error_code_ERRC0100));
    Bytes_available int(10) inz;
    Exception_ID char(7);
    Reserved char(1);
    Exception_data varchar(128); -------------> änder ich gleich auf 512
    end-ds;

    zum rest:

    ich vermute, daß die logik, wie ich den fieldpointer errechne, noch nicht richtig ist. könnte daran liegen, daß ich dieses code-schnipsel kopiert habe aus einem Programm, das einen userspace mit völlig anderen Daten ausliest, wo das halt so paßt, hier aber halt eben nicht. werde weiter forschen :-)

    lg karin
    Last edited by karin; 07-02-18 at 09:08. Grund: korrektur

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    DSPF und EDTF können übrigens auch mit Benutzerbereichen umgehen:

    DSPF STMF('/QSYS.LIB/Bibliothek.LIB/Name.USRSPC')
    EDTF STMF('/QSYS.LIB/Bibliothek.LIB/Name.USRSPC')

    Zu den Fehler-Formaten:
    Die Inhalt der einzelnen Felder der Fehler-Formate sind hier im Detail beschrieben.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ein Clear initialisiert mit dem Default.
    Ein Reset initialisiert mit den Werten, die durch INZ oder in der *INZSR festgelegt ist.

    Mit "Bytes_provided" teilst du dem API mit, wie lang der Puffer ist, den du im Fehlerfall eben zur Verfügung stellst.
    Nach dem Clear initialisiert du mit 0, also wir die Errorstruktur nicht gefüllt.

    Bei manchen API's kann man die Errorstruktur auch weglassen. In diesem Fall wird eine Escape-Message gesendet, die mit einer Monitor-Gruppe überwacht werden kann.

    Die Länge der Exception_data ist vollkommen egal, es kommt halt auf die möglichen Fehler-ID's und die verwendeten Datenfelder an (siehe DSPMSGD, Felddefinitionen).
    Willst du die Daten gar nicht auswerten, kann man das Feld auch weglassen.
    D.h., die Minimal-Struktur ist 16 Bytes.

    DMPOBJ/EDTF können eben auch Hex anzeigen, so dass man die Strukturen mit den relativen Adressen sich genauer anschauen kann.
    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

  6. #6
    Registriert seit
    Feb 2018
    Beiträge
    7
    ok, ich habe jetzt ein Ergebnis hinbekommen, nicht schön, aber übungszweck erfüllt.
    fehler war tatsächlich die Adressierung des userspaces, diese habe ich geändert und nun sieht es schon ganz gut aus. ich kann die Inhalte des userspace z.b. mit DSPLY anzeigen, mehr brauche ich erst mal nicht.

    nun müßte ich noch eine sinnvolle schleife bauen und irgendwas sinnvolles mit dem userspace machen. hhm. wie ziemlich viele leute im Internet schon angedeutet haben, die spooldaten stehen nicht vollends brauchbar im userspace, jetzt müßte man Steuerzeichen rausfieseln und ähnliches. ist mir aber für den übungszweck nicht förderlich, lasse ich also erst mal bleiben.

    zumal ich das zusammenspiel von buffern, sizes und Offsets (beim spool-API Satzart SPFR0300) noch nicht durchdrungen habe. die logischen Erklärungen passen nicht zum DSPLY-Ergebnis, da muß es wohl noch ein paar kniffe geben, die sich mir nicht erschließen.

    lange rede kurzer sinn: ich habe einiges dazugelernt und bekomme nun wenigstens ein ordentliches grundgerüst für API-Verwendung hin, das war die grundidee der Übung.

    danke für alle hinweise!!
    lg karin

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... einfacher geht es mit verfügbaren Komponenten (wer die bei sich reinkopiert, hat da etwas nicht verstanden!). Siehe: http://bender-dv.de/Snippets.html#APILIST

    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/

  8. #8
    Registriert seit
    Oct 2013
    Beiträge
    175
    Für SCS gibt es eigentlich keinen vernünftigen Grund, CPYSPLF nicht zu verwenden.
    Und AFPDS/IPDS ist derart kompliziert, da hört sich jeder Spaß auf.
    Sprich: ich würde mir eine andere API-Thematik zum Spielen suchen.

Similar Threads

  1. Woher bekommt der QZDASOINIT seine Libl ?
    By dschroeder in forum IBM i Hauptforum
    Antworten: 16
    Letzter Beitrag: 17-03-16, 12:42
  2. NEWSboard linux - Brauchen wir so etwas?
    By Burgy Zapp in forum Intern - Hilfe - Feedback - Tests-Forum
    Antworten: 8
    Letzter Beitrag: 02-03-07, 12:24
  3. sagt jemanden TCPIP DATBASE SERVER etwas?
    By delphix in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 28-12-01, 15:18

Berechtigungen

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