[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2004
    Beiträge
    444

    Programmtechnisch feststellen ob eine Bildschirmdatei *DS3 oder *DS4 hat

    Hallo zusammen,

    ich möchte in einem Programm feststellen ob eine Bildschirmdatei im Modus *DS3 oder *DS4 angezeigt wird.
    Diese Information erhalte ich z.B. mit einem DSPFD *OUTFILE
    Aber gibt es eine Systemtabelle oder ein API was mir das auch liefert?

    Danke

  2. #2
    Registriert seit
    Nov 2004
    Beiträge
    325
    Moin, in der INFDS Stelle 152 - 153 B 0 steht die Anzahl der Zeilen Stelle 154 - 155 B 0 steht die Anzahl der Breite mfg DKSPROFI

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Wie sie angezeigt ist, sagt dir das Format, dass geschrieben wird, da ein Format speziell für DS3 oder DS4 geschrieben sein bzw. per Bezugszahl DS3/DS4 aktivert sein muss.
    Um festzustellen, ob ein Device das kann gibts nun 2 Möglichkeiten:

    RTVCFGSRC (oder API) des Devices und den Displaytyp abfragen, der 27x132 kann (den Typ kenne ich nicht).
    Oder pragmatisch einen Write mit DS4 machen und mit Monitor abfangen.
    Kann das Device DS4 kannst du diese Formate verwenden, ansonsten eben nicht.

    Arbeitet nun PGM A in DS4 und ruft nun PGM B auf, kannst du den aktuellen Modus leider nicht so einfach feststellen. Man kann zwar per API prüfen, welche DSPF's offen sind, aber leidern nicht feststellen, welches der übergeordneten Programme denn welche DSPF geöffnet hat und welches Format gerade angezeigt wird.

    Es gibt zwar noch das SaveScreen-API, https://www.ibm.com/docs/en/i/7.4?to.../QsnSavScr.htm, allerdings kann man leider nicht auf den Puffer zugreifen.
    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. #4
    Registriert seit
    Nov 2004
    Beiträge
    325
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wie sie angezeigt ist, sagt dir das Format, dass geschrieben wird, da ein Format speziell für DS3 oder DS4 geschrieben sein bzw. per Bezugszahl DS3/DS4 aktivert sein muss. Um festzustellen, ob ein Device das kann gibts nun 2 Möglichkeiten: RTVCFGSRC (oder API) des Devices und den Displaytyp abfragen, der 27x132 kann (den Typ kenne ich nicht). Oder pragmatisch einen Write mit DS4 machen und mit Monitor abfangen. Kann das Device DS4 kannst du diese Formate verwenden, ansonsten eben nicht. Arbeitet nun PGM A in DS4 und ruft nun PGM B auf, kannst du den aktuellen Modus leider nicht so einfach feststellen. Man kann zwar per API prüfen, welche DSPF's offen sind, aber leidern nicht feststellen, welches der übergeordneten Programme denn welche DSPF geöffnet hat und welches Format gerade angezeigt wird. Es gibt zwar noch das SaveScreen-API, https://www.ibm.com/docs/en/i/7.4?to.../QsnSavScr.htm, allerdings kann man leider nicht auf den Puffer zugreifen.
    Moin, persönlich finde ich aber angenehmer abzufragen ob das Feld 27 oder 24 enthält, bzw das andere Feld 80 bzw 132. mfg DKSPROFI

  5. #5
    Registriert seit
    May 2004
    Beiträge
    444
    Ich benutze schon QsnQryyModSup um zu ermitteln ob ich 27x132 kann. Jetzt wollte ich es zentral in unser Menüprogramm machen ob die Bildschirmdatei des aufzurufenden Menüprogramms 27x132 anzeigen möchte. Damit ich dann eine Fehlermeldung ausgeben kann. D.h. ich bin vor dem Programm das eine Bildschirmdatei verwendet. Ich kenne das Programm und die Bildschirmdatei die verwendet wird zu diesem Zeitpunkt, ich muss nur noch an dieser Stelle prüfen ob die Bildschirmdatei *DS4 hat. Sozusagen brauche ich den DSPFD. Den dort steht das. Außer jemand weiß was anderes.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Warum soll nicht jedes Programm selber versuchen, DS4 auszugeben und wenn es nicht klappt DS3 zu nehmen?
    Das Problem ist ja sogar, wenn ich an einem DS3-Terminal bin, kann ich eine DSPF, die DS4 enthält gar nicht erst öffnen!
    Ein Programm muss im Zweifel also sogar 2 DSPF's alternativ bedienen können, da das mit OVRDSPF nicht klappen kann.

    Ich habe das dann einsprechend in RPGIII mit

    40 EXFMTDS3FMT
    N40 EXFMTDS4FMT

    durchgeführt um den Rest der Logik beizubehalten.
    Das funktioniert allerdings nur, wenn von der Logik die Anzahl E/A-Felder passen.

    Wobei ich mich frage: Gibts denn noch Twinax-Terminals, die noch verwendet werden?
    Seit den Emulatoren (PCSupport ca. 1992) können alle DSP's inzwischen 27*132, wenn nicht ist das nur ein Konfigurationsfehler.
    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

  7. #7
    Registriert seit
    May 2004
    Beiträge
    444
    Ich habe viele 27x132 Programme. Ich werde nicht jedes Programm ändern. Aber ich kann im Menü prüfen ob der Benutzer 27x132 eingestellt hat und wenn nicht und er will ein Programm aufrufen das 27x132 anzeigen will kommt eine Fehlermeldung

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Beim Aufruf bekommt das Programm ja einen Fehler und wird i.d.R. abgebrochen, da der Open scheitert.
    Diese Nachricht per SYSRPYLE auf Abbruch stellen und den Job automatisch antworten lassen.
    Im Menüprogramm mit Monitor den Aufruf überwachen und bei Abbruch die Meldung überprüfen und entsprechend hinweisen.

    Alternativ würde ich eher folgendes machen.
    Jeder Dialogjob hat ja ein Startprogramm über das die Umgebung eingerichtet wird.
    Dieses ruft ein Mini-Progrämmchen auf, das eine DS4-Datei öffnet.
    Dann kannst du dir in der *LDA oder sonstwo (SQL-Sessionvariable) eben merken, ob der Bildschirm das kann und vor dem Aufruf dem Benutzer den Hinweis geben oder den Menüpunkt gar nicht erst anbieten.
    Denn ob du den Programmaufruf vorher prüfst, da du Programm und DSPF kennst, oder die Menüauswahl verbirgst/deaktivierst ist vom Aufwand ja vergleichbar.
    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. #9
    Registriert seit
    May 2007
    Beiträge
    295
    Guten Morgen.
    Diese Information habe ich auch mla gebraucht.
    Ich habe dies folgendermaßen gelöst:
    Code:
    D WSDS            DS                   QUALIFIED 
    D  DspSize          *SIZE                        
    D  Device               197    206
    Und vor dem Write/ExFmt:
    Code:
    Post(E) WSDS.Device RECFORMAT; 
    SetDS4 = (WSDS.DspSize > 1920);
    Wenn wenn das Format größer 1920 (80x24) ist muss es 132x27 sein.
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dafür musst du die Datei aber erst mal geöffnet haben.
    Unterstützt das Terminak das nicht, scheiterst du bereits beim Open und die INFDS wird nicht gefüllt.
    Machst du auch noch einen Autoopen kannst du das nur beim rufenden Programm überwachen.
    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. #11
    Registriert seit
    May 2007
    Beiträge
    295
    Stimmt. Dieses DSPF hat beide Einträge im DSPSIZ eingetragen und switcht mittels Bezugszahl auf DSPMOD(*DS4) im Falle der Fälle das eine WS kein DS4 kann.
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das habe ich auch schon mal so versucht. Allerdings stelle mal ein Terminal auf 24x80 um und starte dann das Programm.
    Bis V6R1, da war mein letzter Versuch, bekam ich einen Open nicht durch, da die DSPF einen *DS4-Eintrag enthielt, auch wenn ich nicht vorhatte, diesen zu verwenden.
    D.h., nur bei einem 27x132-Terminal kann man in einer DSPF zwischen DS3 und DS4 wechseln, ansonsten benötigt man 2 DSPF's mit USROPN.
    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. 65k Dateifeld oder wie lese ich eine Datei direkt aus dem IFS ein.
    By harkne in forum NEWSboard Programmierung
    Antworten: 57
    Letzter Beitrag: 23-07-21, 14:24
  2. Mit dem Bagger durch die Eifel oder wie debugge ich eine SQL Prozedur
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 04-11-19, 08:59
  3. gelöschte sätze feststellen
    By ILEMax in forum IBM i Hauptforum
    Antworten: 16
    Letzter Beitrag: 15-11-16, 07:56
  4. Eine Marke, eine Halle, eine Messe: IT & Business - Ende September in Stuttgart
    By Isabella Pridat-Zapp in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 10-09-15, 13:50
  5. Antworten: 3
    Letzter Beitrag: 20-12-13, 10:27

Berechtigungen

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