[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2014
    Beiträge
    5

    starten Group Job in einer Interaktiven Session "vom aussen"

    Hi *all,

    ich suche nach Ideen, wie man einen interaktiven Job vom aussen steuern könnte. Also:

    an einem Arbeitsplatz wird nur eine CA 5250 Session gestartet. Grund dafür ist, dass es eine Fremdsoftware unter Windoof läuft, welche über ClientAccess API eine Verbindung mit 5250 Session aufbaut und ein Gruppen Job darin startet. Diese Software kann nur mit single Session umgehen.

    Nun suche ich eine Möglichkeit, eine weitere Software - Dokumentnenmanagement - einzubinden. Aus DMS muss eine bestehende Anwendung in 5250 gestartet werden, um z.B. Vertragsdaten zu erfassen. Dafür sollte ein Group Job gestartet werden.

    Frage ist, wie kann ich das Starten von Group Job in einer interaktiven Session "remote" (z.B. aus einem Batchjob, welcher Requests per WebServices empfängt) bewirken und ob es überhaupt geht?

    Danke für Ideen und Grüße
    Oleg Mints

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Mit etwas Mühe geht alles.
    Beim Start des Dialogjobs wird ja nun sicherlich ein CLP aufgerufen, dass zu verändern ist.
    Das Stichwort ist hier MSGBREAK-Handler.
    Per "CHGMSGQ MSGQ(MYMSGQ) DLVRY(*BREAK) PGM(MYPGM)" kannst du ein Programm aufrufen lassen, dass bei einem SNDBRKMSG an diese MSGQ dann aufgerufen wird.
    In der Nachricht gibts du dann die Aktionen an.
    Hier kannst du dann Gruppenjobs initiieren oder eben sonstwas tun.
    Ein CHGMSGQ DLVRY(*BREAK) ist jedoch nur einmal je MSGQ möglich (exclusive Sperre), bekannte Nachricht bei der 2. Dialoganmeldung.

    Der Dialogjob muss aber auch in einem unterbrechbaren Status stehen.

    Bei Gruppenjobs wirds schwierig, da du je Job eine MSGQ benötigst da nur der gerade aktive Gruppenjob unterbrechbar ist und eben nur ein *BREAK je MSGQ möglich ist.
    Wird ein Gruppenjob dann gewechselt schlägt der BreakHandler mit noch ggf. ausstehenden Nachrichten zu.

    Viel Spaß beim Entwickeln.
    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 2014
    Beiträge
    5
    Besten Dank!

    Auf Break-Message habe ich auch schon gedacht, allerdings längst nicht so tief - vor allem, dass es mehrere Queues benötigt werden etc. ;-)

    Ich checke mal, ob diese Lösung überhaupt möglich ist: ich weiss momentan nicht, was bestehende Programmen mit MSGQueues einstellen (es laufen u.a. SYNON & Co). Doppelschläge von Handler kann ich z.B. dadurch vermeiden, dass die eigentliche Nachricht nicht über MSGQ, sondern z.B. über DTAQ zugestellt wird.

    Mal sehen - eine dedizierte Anwendung in einer eigener Session wäre mir viel lieber.

    Noch mal vielen Dank für deine Hilfe und schöne Grüße
    Oleg

    P.S. Alles ist möglich, es ist nur eine Frage des Aufwandes...

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Da du für deine Anwendung sowieso spezialisierte MSGQ's benötigst, die in einer eigenen Lib stehen sollten, kommst du nicht in Verdrückung mit Anwendungskonflikten.
    Für deinen Service muss sich ein Job "registrieren", MSGQ anlegen und einem "Servicejob" seinen Namen mitteilen.
    Dies wird am Besten über eine eigene ACTGRP erledigt, so dass dies von der laufenden Anwendung getrennt ist.
    Per Commitsteuerung lässt sich dann eine Commitressource registrieren, die beim Abmelden des Jobs, Abbruch oder ähnlichem Beenden für eine saubere "Deregistrierung" sowie löschen der MSGQ sorgt, da das System diese beim Rollback immer aufruft.
    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

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Wie läuft das mit dem ClientAccess API? Wird da eine 5250-Sitzung per Programm "bedient"? Falls ja, wäre vielleicht ein Abrufprogramm (setzen mittels SETATNPGM), das selber einen (eigenen) Befehl zum Auswählen des jeweiligen Gruppenjobs aufruft, eine Möglichkeit. Per 5250-Datenstrom müßte dann die "Abruftaste", der "Parameter für den gewünschten Gruppenjob" sowie "Datenfreigabe" an die 5250-Sitzung gesendet werden.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dies würde ein Anpassung der "Fremdsoftware" voraussetzen, was wohl nicht so einfach sein wird.
    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
    Mar 2002
    Beiträge
    5.286
    ... wenn ich das mit den Break Message Handlern noch richtig im Kopf habe, dann wird das Break Handling Programm in dem Job ausgeführt, der den Fokus für die MessageQ hat und auch nur dann, wenn dieser Job das Break Handling Programm nicht im Call Stack hat (<=> bereits ausführt). D.h. wenn ich das ganze Spiel in einem Gruppenjob Kontext spiele, dann muss ich den Fokus jeweils irgendiwe vererben auf den gerade aktiven Gruppenjob... ob das wohl geht???
    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
    Feb 2001
    Beiträge
    20.207
    Da der Gruppenjob-Wechsel programmtechnisch nicht bemerkt werden kann, kann man eine blockierte MSGQ DLVRY(*BREAK) nicht freigeben. Ein 2. CHGMSGQ geht daher nicht.
    Jeder Gruppenjob ist ein eigener Job.
    Man kann nur per Job-API feststellen, welcher Gruppenjob aktiv ist.
    Der Status kann sich aber bereits nach Aufruf des API's geändert haben.

    Solche Szenarien sind zwar irgendwo technisch machbar und interressant, aber man sollte sich überlegen ob es nicht was besseres gibt.

    Warum kann man sich für die neue Anwendung nicht einfach eine neue Terminalsitzung außerhalb der anderen Anwendung aufmachen?
    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
    Nov 2003
    Beiträge
    2.304
    Wenn man die betreffende Nachrichtenwarteschlange beim CHGGRPA im Parameter MSGQ() angibt, müßte sie immer dem aktiven Job dieser Gruppe zugeordnet sein.

  10. #10
    Registriert seit
    Feb 2014
    Beiträge
    5
    @Fuerchau: "Warum kann man sich für die neue Anwendung nicht einfach eine neue Terminalsitzung außerhalb der anderen Anwendung aufmachen?"

    Liegt an "Fremdsoftware" & CA API. In CA API muss gesagt werden, mit welchen Session die Verbindung aufgebaut werden soll. Bei mehreren aktiven Sessions muss wie auch immer ausgewählt werden. Im aktuellen Fall bindet sich "Fremdsoftware" an Session 'A'. Dies heisst, dass die Reihenfolge des Startens von Sessions muss beachtet werden. Abgesehen davon möchte ich nicht wirklich ein Windoof's Programm schreiben welche dann CA voraussetzt.

    @BenderD: "D.h. wenn ich das ganze Spiel in einem Gruppenjob Kontext spiele, dann muss ich den Fokus jeweils irgendiwe vererben auf den gerade aktiven Gruppenjob... ob das wohl geht???"

    Ich bin grad am ausprobieren was geht, was nicht und warum. Mit dem Fokus sehe ich kein Problem, solange ich Vollmach bekomme bei jedem Jobstart ein Registrierrogramm ausführen, welches dann per je (Group)Job "Rollback"-Händler registrert, dedizierte MSGQ erstellt und CHGMSGQ mit DLVRY(*BREAK) für entsprechenden Händler ausführt. Fokusproblem bekomme ich erst dann, wenn dieses Registrierprogramm nicht ausgeführt wird. So 'ne Machbarkeitsstudie...

    Ev. wird es doch ganz einfach gemacht: eine Alternative zu IBM i Access for Windows installieren (Mocha, IBM i Access Javabasierend etc.) - dann kann ich es doch in einer separaten Session laufen lassen ohne Fremdsoftware zu beeinträchtigen.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Da ja wohl CA installiert ist, kannst du doch jederzeit individuelle Sitzungen außerhalb der Anwendung starten. Wo also liegt da das Problem?
    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

  12. #12
    Registriert seit
    Feb 2014
    Beiträge
    5
    Das Problem liegt an Fremdsoftware. Diese stellt MS Word Macros zur Verfügung, welche dann per ClientAccess emulation APIs bestimmte Bisdschirmbereiche aus einer Sitzung auslesen und in ein Word Dokument einfügen.

    In Grunde passiert also das, was Pikachu beschieben hat: es wird eine Verbindug mit Sitzung A aufgebaut und dort u.a. ESC emuliert. Bei vorhandensein von mehreren Sitzungen geht allerdings das ganzes durcheinander.

    Und ich muss mich irgendwie dort einklinken...

Similar Threads

  1. "zu wenig Speicher" Rational Developer for Power-Systems
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 13-02-14, 21:58
  2. XML-Daten mit "&" in RPG-Datenbank übertragen
    By Banruf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 10-01-14, 10:04
  3. Daten exportieren "AS/400 NOOB"
    By RobinHood2001 in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 12-12-13, 13:30
  4. "must-have" Infoseite?
    By CaddyMajor in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 19-11-13, 12:04
  5. Leistung bei Interaktiven Jobs
    By ppilz in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 09-10-01, 23:05

Berechtigungen

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