Hot-Tips Drucken

10. November 2007 | Von | Kategorie: DMS, Archivierung, Druck, Tools, Hot-Tips

NEWSolutions Hot Tips: AFP-Druckausgabe, ILE RPG-Programme, Spool Datei

ip4_IMG_3698_Negativ_kleinAnzeige zulässiger Werte in einem eigenen Befehl durch ein Auswahlprogramm

Frage

Ich möchte für einen Parameter eines eigenen CL-Befehls alle zulässigen Werte anzeigen. Entsprechend den Vorgaben im IBM Handbuch CL-Programmierung (SC41-3721) habe ich in der Befehlsquelle bei der PARMS-Anweisung die Parameter CHOICE(*PGM) und CHOICEPGM(programm name) für eine eigenes Auswahlprogramm eingesetzt.
Mein Auswahlprogramm hat zwei Parameter: INPUT (A21) und OUTPUT (A2000). Laut IBM-Handbuch enthält Byte 21 des Parameters INPUT entweder ein C, falls der Text für die möglichen Auswahlen als A30 Feld, oder ein P, falls eine Liste der gültigen Werte von maximal 2000 Zeichen zurückgegeben werden soll. Bei Aufruf meines Auswahlprogramms wird jedoch immer ein C übergeben. Wie kann ich den Befehls-Prompter dazu bringen, ein P zu übergeben?

Antwort

Wenn ein Befehl per F4 „geprompted“ wird, steht rechts vom Eingabebereich eines jeden Parameters ein bis zu 30 Zeichen langer Text, der zulässige Werte oder Hinweise zur Eingabe des Parameterwertes enthält. Dieser Text wird aus dem Auswahlprogramm übernommen, das zunächst automatisch mit C aufgerufen wird. Erst wenn der Anwender in dem Parametereingabebereich ein ? eingibt oder F4 drückt, wird das Auswahlprogramm mit P aufgerufen und die Information des A2000-Feldes auf einer separaten Bildschirmmaske angezeigt.
Übrigens, abweichend von der Handbuchdokumentation, die eine maximale Länge des Parameters OUTPUT mit 2.000 angibt, sind tatsächlich 10.240 Bytes als Rückgabewert verfügbar. Abbildung 2 enthält ein Beispiel-Auswahlprogramm, das die User Profile eines Systems auflistet.

AFP-Druckausgabe auf eine HP LaserJet

Frage

Mein CL-Programm erstellt ein Formular unter Verwendung der AFP (Advanced Function Printing) -Utilities. Per OVRPRTF parameter FRONTOVL werden die APF-Formulare mit den Ausgabedaten gemischt. Die Einheitenbeschreibung des ausgebenden Druckers ist mit AFP(*YES) spezifiziert. Was muß ich tun, um die Druckausgabe über einen an einer Datenstation angeschlossenen HP LaserJet Drucker auszugeben?

Antwort

Um einen AFP/IPDS-Drucker-Datenstrom erfolgreich auf einem HP LaserJet auszugeben, muß der Datenstrom in das PCL-Format des LaserJets umgewandelt werden. Dies kann per spezieller Software oder einer zwischengeschalteten Hardware-Box erfolgen. Für beides gibt es Fremdanbieter.

Aufbau des Parameters 2 bei einem Auswahlprogramm

Frage

Ich habe einen eigenen CL-Befehl erstellt, bei dem die zulässigen Werte eines Parameters über ein selbstgeschriebenes Auswahlprogramm (CHOICEPGM) angezeigt werden sollen. Mir gelingt es aber nicht, die Datenstruktur des zweiten Parameters (Länge A2000) des Auswahlprogramms korrekt aufzubauen.

Antwort

Wie bereits oben (siehe Anzeige zulässiger Werte in einem eigenen Befehl durch ein Auswahlprogramm) erwähnt, hat der zweite Parameter eines Auswahlprogramms eine Länge von 10.240 Byte. Dieser Parameter muß wie folgt aufgebaut sein: Bytes 1 – 2 sind ein 2-Byte-Binärfeld (ohne Dezimalstellen), das die Anzahl der Werte in der Werteliste enthält. Ab Byte 3 werden die Listenwerte mit vorangestellte Längeangabe hinterlegt. Also pro aufzulistendem Wert wird in einem numerischen 2-Byte-Binärfeld die Länge des folgenden Eintrags angegeben, danach folgt der Wert des Eintrags. Dies wiederholt sich für jeden Listeneintrag.
Ende LNG))

Maximale Anzahl von Spooldateien pro Job erreicht

Frage

Auf meinem System AS/400 läuft Stapeljob, der mehr als 9.999 SPOOL-Dateien erzeugt. Damit wird die maximale Anzahl von Druckausgabedateien pro Job überschritten, und der Job bricht mit einer CPF-Fehlernachricht ab. Ich möchte die Nummer der letzten geschriebenen SPOOL-Datei herausfinden, um den Job an der entsprechenden Stelle neu aufsetzen zu können.
Es gibt noch zwei weitere Einschränkungen:
1. die angestrebte Lösung muß Release-unabhängig sein.
2. der Lösungsansatz sollte keine QUSRTOOL-Programme verwenden
Antwort

Folgender Lösungsansatz basiert auf SPOOL File APIs und Data Queue Support der AS/400: Verwenden sie eine an die Ausgabewarteschlange (OUTQ) angehängte Datenwarteschlange (DTAQ, Data Queue). In der Data Queue werden Informationen zu jeder SPOOL-Datei, unter anderem die Spool-Datei-Nummer, hinterlegt. Die Data Queue kann mit den entsprechenden Data Queue API ausgelesen werden ( Systemprogramm QRCVDTAQ). Weitere Hinweise finden Sie im Handbuch AS/400 System API Reference (SC41-3801, CD-ROM Buch QBKAVD00) und den Handbücher Guide to Programming for Printing (SC41-8194, CD-ROM Buch QBKA7702) für V2R3 bzw. Printer Device Programming (SC41-3713, CD-Rom Buch QBKAUJ00) für V3R1.

Quellenangaben von ILE RPG-Programmen

Frage

Ich habe ein Werkzeug geschrieben, dass nach einer Dateiänderung automatisch alle betroffenen Programme neu erstellt. Die Informationen über die Programmquelle werden dabei aus den Service Daten der Objektbeschreibung des Programms entnommen. Nun habe ich festgestellt, daß bei ILE RPG Programmen diese Informationsfelder leer sind. Wie kann ich an die entsprechenden Informationen kommen?
Antwort

Die bisherigen RPG-Programme des Original Program Models (OPM-Programme) wurden allesamt aus einer einzigen Quelle erstellt. ILE-Programme hingegen werden aus einem oder mehreren Modulen erstellt, von denen jedes seine eigene Quellendatei hat. Da die Service Daten in ihrer derzeitigen Datenstruktur nur eine Quellenangabe aufnehmen können, wird sie bei ILE-Programmen leergelassen. Trotzdem speichert das System die Quelleninformationen der einzelnen Module. Diese Informationen können über das API QBNLPGMI (List ILE Program Information) gewonnen werden. Die vollständige Dokumentation des APIs finden Sie in dem Handbuch AS/400 System API reference (SC41-3801).

SPOOL-Datei-Attribut USER ändern

Frage

Per Autostartjob wird ein Überwachungsprogramm für eine DTAQ gestartet, das auf Basis der DTAQ-Einträge Druckausgabedateien für verschiedene User erstellt. Momentan werden alle erzeugten SPOOL-Dateien dem USRPRF zugeordnet, unter dem das Autostart-Programm läuft. Wie kann ich erreichen, dass die Ausgabedateien für den einzelner Benutzer per WRKSPLF *CURRENT sichtbar werden?
Antwort

Bei bereits erstellten Druckausgabedateien kann das Attribut USER (leider) nicht nachträglich geändert werden. Um die SPOOL-Datei von vornherein dem richtigen Anwender zuzuordnen, sollte das DTAQ-Überwachungsprogramm die Erstellung der SPOOL-Dateien per Stapeljob veranlassen. Bei dem zugehörigen SBMJOB-Befehl wird der Parameter USER mit dem Anwender-USRPRF-Namen gefüllt. (Dieser muß aus dem verarbeiteten DTAQ-Eintrag entnommen werden!). Danach wird die erstellte Druckausgabedatei per WRKSPLF für den jeweiligen Anwender sichtbar.

Subdatei-Verarbeitung innerhalb eines Fensters

Frage

Ich will eine Subdatei in einem Fenster darstellen, das seinerseits über einer bereits aktiven Bildschirmdatei liegt. Wenn das Fenster auf den Bildschirm geschrieben wird, verschwindet aber die bereits vorhandene Hintergrundmaske. Was mache ich falsch?
Antwort

Wenn ein aufgerufenes Unterprogramm ein Fenster über eine bereits aktive Bildschirmmaske legen soll, ohne diese zu löschen, muß in der Bildschirmdatei des aufgerufenen Programms das DDS Schlüsselwort ASSUME verwendet werden. Das ASSUME-Schlüsselwort wird auf Satzformatebene eingesetzt, muß jedoch in dem anzuzeigenden Satzformat nicht enthalten sein. (Tatsächlich führt die Verwendung in WINDOW-Satzformaten zu einem DDS-Fehler!) Es genügt, ein Dummy-Satzformat (eventuell mit dem Namen ASSUME) in die Bildschirmdatei aufzunehmen, das auf Satzformatebene die ASSUME-Eintragung und zusätzlich mindestens ein Ausgabefeld enthält. Als Ausgabefeld genügt ein leeres einstelliges Konstantenfeld (z.B. in Zeile 1 Stelle 2). Da dieses Satzformat nie ausgegeben wird, tritt dieses Feld nie in Erscheinung.

Schlagworte: , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.