[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2014
    Beiträge
    10

    Question Message von Serverjob auslesen und beantworten

    Hallo,

    ich habe eine Client/Server Anwendung, bei der der Client unter VB.NET geschrieben ist und via DataQueue mit diversen Server-Programmen auf der iSeries kommuniziert. Über diese Schiene kann der Client auch den Status des Server-Jobs abfragen. Allerdings kann sich der Client momentan nur selber beenden, falls der Server-Job nicht mehr läuft oder auf MSGW steht.
    Ich würde nun gerne in dem Fall, dass der Server-Job auf MSGW steht, die Fehler-Message von einem iSeries-Programm (in einem separaten Job) auslesen und an den Client schicken lassen. Dort soll die Message dem User angezeigt werden und der User soll dann die Möglichkeit habe, die jeweilige Antwort einzugeben, welche der Client dann wieder an ein Server-Programm senden soll um die Nachricht zu beantworten.

    Ich habe mich schon durch zig Foren gekämpft und im Internet gesucht, aber ich finde keine Möglichkeit um
    a) die Fehlernachrichten eines anderen Jobs auszulesen
    b) eine Antwort an einen anderen Job zu schicken

    Geht so etwas überhaupt. Auch auf dem Umweg über die MSGQ QSYSOPR bin ich nicht fündig geworden. Dort würden die Nachrichten ja auch stehen.

    Danke und Grüße
    Thomas

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... das ist m.E. schräges Design. Ein Server Job muss Multithreaded sein, der darf nicht auf einer Message klemmen.

    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/

  3. #3
    Registriert seit
    Apr 2014
    Beiträge
    10
    OK - über den Begriff "Client/Server" lässt sich diskutieren. Was ich versucht habe zu erklären ist Folgendes: Ich habe ein VB.NET-Programm, welches eine Benutzeroberfläche emuliert. Dieses Programm kommuniziert via DataQueue mit einem Batch-Job auf der iSeries, in welchem die Business-Logik abläuft. Auch wenn das ein "schräges Konzept" sein sollte - es funktioniert und wird bei uns fast schon weltweit eingesetzt.

    Um das Design ging es mir aber gar nicht.

    Da auch unsere Business-Logik nicht fehlerfrei ist, kann es vorkommen, dass der Batch-Job auf der iSeries mit MSGW hängen bleibt. In dem Fall wartet das VB.NET Programm vergeblich auf eine Rückmeldung. Nach einem Timeout wird bisher dann der Status des Batch-Jobs geprüft. Wenn dieser auf MSGW steht, erhält der User eine Mitteilung, dass "etwas" nicht stimmt und kann dann entscheiden, ob er weiter warten möchte (bis eventuell jemand die Message auf der iSeries beantwortet hat) oder ob er das VB.NET Programm abbrechen will.
    Hier wäre es jetzt schön, wenn der User die tatsächliche Message angezeigt bekommen würde und ggf. auch beantworten könnte.

    Deshalb nochmal konkret die Fragen:

    - Ist es möglich, die Fehlermessage eines Job, der auf MSGW steht, von einem anderen Job aus auszulesen?
    - Ist es möglich, die Fehlernachricht von einem anderen Job aus zu beantworten?

    Grüße
    Thomas

  4. #4
    Registriert seit
    May 2011
    Beiträge
    7
    Hallo,
    alternative, schreib ein kleines RPGLE Programm mit einer Schleife
    Loop
    DLYJOB
    QUSLJOB und dann QUSRJOBI mit Format 0200 (alle Deine Jobs auslesen und dann auf *MSGW prüfen)
    Wenn gefunden -> Nachricht an den JOB senden mit SNDMSG
    Endloop

    Im ClientJob -> Im Startpgm ein ATTN Pgm hinterlegen, dieses empfängt dann die Nachricht vom ServerJob

    JS

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von TSchuler Beitrag anzeigen
    Deshalb nochmal konkret die Fragen:

    - Ist es möglich, die Fehlermessage eines Job, der auf MSGW steht, von einem anderen Job aus auszulesen?
    - Ist es möglich, die Fehlernachricht von einem anderen Job aus zu beantworten?
    Klar geht das. Wenn du in einer 5250 Sitzung ein DSPMSG MSGQ(*SYSOPR) absetzt und die Nachricht beantwortest machst du ja auch nichts anderes.

    lg Andreas

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Nun, das ist nicht ganz so trivial.
    Allerdings gibt es eine bessere Alternative.
    Mach einen CHGJOB INQMSGRPY(*DFT) im Start-CLP.
    Dann werden keine Antworten erwartet sondern die Standardantwort (meist Abbruch) gesendet.
    Nun noch per MONMSG den CALL des Serverjobs überwachen und entsprechend reagieren.
    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
    Jun 2001
    Beiträge
    1.975
    beschäftige dich mit STRWCH
    Damit kannst du dein problem lösen
    Warscheinlich mußt du noch das (ehemalige) wrkfrgnjob (heist heute anders, aber google oder das forum
    hilft) verwenden um die Nachricht an den anderen Job zu bekommen

    Robi

    Nee, das mit dem wrkfrgnjob brauchst du warscheinlich doch nicht!
    Last edited by Robi; 07-04-14 at 09:18. Grund: Irrtum vom Amt
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  8. #8
    Registriert seit
    Apr 2014
    Beiträge
    10
    Hallo zusammen,

    danke für alle Antworten. Ich habe es jetzt doch anders gelöst.

    Der Serverjob bekommt jetzt eine eigene MSGQ zugewiesen (im SBMJOB => MSGQ). Dort drin wird zwar nicht die eigentliche Fehlernachricht abgelegt, aber wenigstens die Message CPI2404 - Antwort auf Nachricht in Nachrichtenwarteschlange QSYSOPR erwartet. Im Second-Level Text steht da dann auch die Fehlernachricht mit drin. Diese MSGQ kann ich problemlos überwachen und auslesen (weil sie im Gegensatz zur MSGQ QSYSOPR nicht gelockt ist).

    Ich gebe jetzt einfach die komplette CPI2404 Meldung auf dem Client aus (mit Second-Level Text). Dann kann der User zwar nicht direkt auf die Nachricht antworten, aber er sieht zumindest detaillierter, welches Problem aufgetreten ist und dass eine Nachricht in QSYSOPR zu beantworten ist.

    Grüße
    Thomas

  9. #9
    Registriert seit
    Apr 2014
    Beiträge
    10
    Danke für den Tipp. Über den Parameter INQMSGRPY bin ich zwar auch schon gestolpert, habe ihn aber nie konkret benutzt. Das werde ich mir auf jeden Fall merken.

    Für mein aktuelles Problem ist das aber nicht ausreichend. Ich möchte ja eigentlich nicht unbedingt, dass der Serverjob abgebrochen wird. Manchmal ist es ja möglich, mit Retry oder Go zu antworten, nachdem ein Problem behoben ist.

    Ich habe es jetzt ganz anders gelöst (siehe meine Antwort unten).

    Grüße
    Thomas

  10. #10
    Registriert seit
    Apr 2014
    Beiträge
    10
    Hallo Robi,

    danke für die Antwort. STRWCH kannte ich bisher noch nicht. Das werde ich mir mit Sicherheit noch genauer anschauen.

    Mein aktuelles Problem habe ich jetzt aber doch simpler gelöst. Siehe meine Antwort unten.

    Grüße
    Thomas

Similar Threads

  1. SQLRPGLE Infos zu verwendeten Feldern auslesen
    By Peet in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 25-03-14, 13:41
  2. JOBLOG auslesen
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 11-02-14, 13:25
  3. Message über 2 Systeme senden
    By DE in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 18-03-03, 13:59
  4. Prozessor Gruppe Pnn Auslesen?
    By AndreasH in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 18-09-02, 10:36

Tags for this Thread

Berechtigungen

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