[NEWSboard IBMi Forum]
Seite 3 von 3 Erste ... 2 3
  1. #25
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da kann man sich ggf. mit Pointern helfen:

    D MyApi DS
    D Field1 ....
    :
    D FieldN ...

    D MyPtr s *
    D MyDs ds based(MyPtr)

    Da die Struktur der einzelnen Elemente ja immer die selbe Länge aufweist, kann man sich die Adresse des Elements ja ausrechnen:

    eval MyPtr = %addr(FieldN) + (N - 1) * %size(MyDs);

    So kann man sich dann von Eintrag zu Eintrag in einer Schleife durchhangeln.
    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

  2. #26
    Registriert seit
    May 2004
    Beiträge
    470
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Da kann man sich ggf. mit Pointern helfen:

    D MyApi DS
    D Field1 ....
    :
    D FieldN ...
    Das denke ich habe ich probiert.
    Ich denke Field1 ... FieldN machst Du alle 65535 groß. Aber da liegt der Hund begraben.

    Ich habe es wie folgt definiert

    PHP-Code:
    D RcvVar          ds                       
    d  Dummy1                    65535         
    d  Dummy2                    65535 
    Und dann bringt er mir bei der Umwandlung folgenden Fehler:

    PHP-Code:
    Msg-ID  Sv Nummer Folge   Nachrichtentext                                          
    RNF0501 20     68 006800  Länge des Zeicheneintrags RCVVAR überschreitet 65535
    für
                              
    die Länge wird standardmäßig 65535 angenommen
    Oder ich habe was an Deiner Ausführung falsch verstanden

  3. #27
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nein, so meine ich das nicht.

    "MyAPI DS" beschreinb ja die Struktur des API's. Meistens gibt es dann einen Verweis auf die Einträge, z.B.:

    D MyAPI DS
    :
    :
    D NumEntry 10I 0
    D RelPosEntry 10I 0 <= Je nach API
    D FirstEntry
    D :
    D :

    D MyPtr S *
    D MyEntry DS based(MyPtr)
    D* Beschreibung des enzelnen Eintrages

    D Ind S 5I 0
    for Ind=1 to NumEntry;
    MyPtr = %addr(FirstEntry) + (Ind-1) * %size(MyEntry);
    endfor;

    Der Vor- bzw. Nachteil ist, dass durch Pointerarithmetik auch auf Speicher zugegriffen werden kann, der im Programm nicht definiert ist.
    Daher ist dies mit Vorsicht zu geniessen, man muss sich im Klaren sein, worauf man zugreift.

    Anderes Beispiel:

    D MyParam DS
    D Filler 1A

    D MyPtr S *
    D MyWork DS based(MyPtr)
    D Field 10A

    C *entry plist
    C parm MyParam

    C eval MyPtr=%addr(MyParam)

    Durch die Definition der Struktur MyWork kann ich somit auch auf nicht definierte Bereiche zugrefen. Dies ist genaus, wie das zu lange definieren von Parametern, die so gar nicht übergeben werden.

    Der Compiler und die Runtime bieten da überhaupt keinen Schutz.
    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

  4. #28
    Registriert seit
    May 2004
    Beiträge
    470
    OK ich seh schon. Ich werd dann wohl doch auf den DSPFFD zurückgreifen. Im übrigen ist die Zeile und Spalte aufgetaucht . Anscheinend hat es die Datei doch schon länger gegeben. Ich dachte die wäre neu.

  5. #29
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nunja, aus Performancegründen wäre das API auf jeden Fall schneller, und so kompliziert ist das mit den Pointern doch gar nicht.
    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. #30
    Registriert seit
    May 2004
    Beiträge
    470
    Nix gegen Dich aber ich verstehs nicht. Wahrscheinlich aber auch weil mir im Moment der Kopf raucht.
    Also im Moment habe ich für mich den Kompromiss geschlossen es mal zu lassen wie es ist.
    Die ersten Formate mit den vielen Feldern liegen noch innerhalb des 65535-Bereichs. Und bei den nachfolgenden Subfiles habe ich Bezugszahlen verwendet. Jetzt bete ich nur daß niemand auf die Idee kommt die Subfiles in der Quelle vor die Formate zu kopieren. Wenn ich dann etwas mehr Zeit habe werde ich entweder Dein (Fuerchau) Vorschlag genauer unter die Lupe nehmen oder halt einfach beim Programmstart einen DSPFFD ausführen. Das es ist wie es ist nervt aber schon ein bischen.

    Tausend Dank an Euch alle.

    Viele Grüsse Harald

  7. #31
    Registriert seit
    May 2004
    Beiträge
    470
    Noch eine Frage.

    Es gibt doch so viele Dateien in denen die Systeminformationen abgelegt sind. Gibt es nicht auch eine für die Feldbeschreibung ?

  8. #32
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Welche meinst du denn ?
    a) DSPFFD gilt auch für PF/LF
    b) PF/LF kann man per SQL aus QSYS2/SYSCOLUMNS laden
    c) Auch dafür gibts natürlich wieder ein API
    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

  9. #33
    Registriert seit
    May 2004
    Beiträge
    470
    In Bezug auf mein Problem dachte ich es gibt vielleicht eine Systemtabelle in der die Zeile und Spalte eines Bildschirmfeldes hinterlegt sind.

  10. #34
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nein, die gibts tatsächlich nicht, da DSPF/PRTF so spezifisch sind.
    Vor V5 gabs gar keine Möglichkeit, aus dem Objekt Zeilen/Spalten zu extrahieren.
    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

  11. #35
    Registriert seit
    May 2004
    Beiträge
    470
    So, ich hab es hinbekommen. Ich habe in der Funktion welches das API beinhaltet die RCVVAR als Array definiert. Jetzt funktionierts.

    Vielen Dank an alle für die Hilfe

    Viele Grüsse Harald

  12. #36
    Registriert seit
    Nov 2007
    Beiträge
    371

    Post

    für die den link benützen
    ILE Procedure for using Display File API's
    um den quellcode verwenden zu wollen


    D apiErrDs Ds
    D Apibytpv 10i 0 inz(%size(ApiErrDs))
    d ApiErrLen 10i 0 inz(0)
    d ApyMsgId 7a
    d ApyResVd 1a
    d ApyRplDta 50a
    kann man so definieren . dann funzt es auch. das fehlt nämlich noch bei diesem code beispiel


    oder so

    Format ERRC0100

    Offset Use Type Field
    Dec Hex
    0 0 INPUT BINARY(4) Bytes provided
    4 4 OUTPUT BINARY(4) Bytes available
    8 8 OUTPUT CHAR(7) Exception ID
    15 F OUTPUT CHAR(1) Reserved
    16 10 OUTPUT CHAR(*) Exception data


    Format ERRC0200

    Offset Use Type Field
    Dec Hex
    0 0 INPUT BINARY(4) Key
    4 4 INPUT BINARY(4) Bytes provided
    8 8 OUTPUT BINARY(4) Bytes available
    12 C OUTPUT CHAR(7) Exception ID
    19 13 OUTPUT CHAR(1) Reserved
    20 14 OUTPUT BINARY(4) CCSID of the CCHAR data
    24 18 OUTPUT BINARY(4) Offset to the exception data
    28 1C OUTPUT BINARY(4) Length of the exception data
    OUTPUT CHAR(*) Exception data


    je nachdem. Nachzulesen iSeries Information Center

Similar Threads

  1. DTAQ Attribute auslesen
    By kuempi von stein in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 28-11-06, 05:48
  2. Spoolfile Attribute unter V5R4
    By Weki in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 23-10-06, 11:40
  3. Spoolfile Attribute im CL ermitteln
    By asb_salem in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 21-03-06, 13:32
  4. Status Zeile im Display
    By GEGE in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-02-05, 07:45
  5. Meldungen im Display
    By chr in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 12-02-01, 15:55

Berechtigungen

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