Mit GRPJOBs hab ich mich ehrlich gesagt noch nie beschäftigt. :-)

Also wir hätten das gerne asynchron abgebildet da nicht ausgeschlossen werden kann das einige Berechnungen (zB Lagerstandes etc) etwas länger dauern können und somit würde dies ja die Erfassung bremsen wenn es im Erfassungsprogramm erledigt werden soll.

Daher wollten wir das so einfach wie möglich für den Benutzer gestalten indem dieser einfach eine spezifische Sitzung öffnet, diese wartet dann darauf das sich der übergebene Batchjob diese dann schnappt (mittels OVRDSPF) und die Informationen auf Basis einer DTAQ automatisch aktualisierend wiedergibt. Dieses Prinzip funktioniert hervorragend solang man brav das automatische aktualsieren mittels DTAQ und INVITE weg lässt :-( .

Vielleicht zeigt der Source für meinen Test besser worauf ich hinaus will

PROTO1RG schreibt in die DTAQ
Code:
**FREE
CTL-OPT DFTACTGRP(*NO) ACTGRP(*NEW) MAIN(Main);

DCL-F PROTO1DF WORKSTN EXTFILE('BRUNNER/PROTO1DF') USROPN;

DCL-PR Main EXTPGM('PROTO1RG') END-PR;

DCL-PROC Main;
  DcL-PI *N END-PI;

  /INCLUDE QRPGLECPY,SYSTEM
  /INCLUDE QRPGLECPY,QRCVDTAQ
  /INCLUDE QRPGLECPY,QCLRDTAQ
  /INCLUDE QRPGLECPY,QSNDDTAQ

  *INLR = *ON;

  If Not %Open(PROTO1DF);
    Open PROTO1DF;
  EndIf;

  System('CRTDTAQ DTAQ(BRUNNER/BRUNNER) MAXLEN(80)');

  DoW ( 1 = 1 );

    Write PROTO1A0;
    ExFmt PROTO1A0;

    If ( *INKC = *ON );
      Leave;
    EndIf;

    SendToDataQueue('BRUNNER' :'BRUNNER' :%Len(%TrimR(A01KNR)) :A01KNR);

  EndDo;

  System('DLTDTAQ DTAQ(BRUNNER/BRUNNER)');

  If %Open(PROTO1DF);
    Close PROTO1DF;
  EndIf;

  Return;

End-Proc;
PROTO2RG liest die DTAQ und soll die Informationen anzeigen:
Code:
**FREE
CTL-OPT DFTACTGRP(*NO) ACTGRP(*CALLER) MAIN(Main);

DCL-F PROTO2DF WORKSTN MAXDEV(*FILE) EXTFILE('BRUNNER/PROTO2DF') USROPN;

DCL-PR Main EXTPGM('PROTO2RG') END-PR;

DCL-PROC Main;
  DcL-PI *N END-PI;

  /INCLUDE QRPGLECPY,SYSTEM
  /INCLUDE QRPGLECPY,QRCVDTAQ
  /INCLUDE QRPGLECPY,QCLRDTAQ
  /INCLUDE QRPGLECPY,QSNDDTAQ

  DCL-S Incoming_Data CHAR(80) INZ;


  *INLR = *ON;

  System('CRTDTAQ DTAQ(BRUNNER/BRUNNER) MAXLEN(80)');
  System('OVRDSPF FILE(PROTO2DF) DEV(AZ_0815) OVRSCOPE(*JOB) DTAQ(BRUNNER/BRUNNER)');

  If Not %Open(PROTO2DF);
    Open PROTO2DF;
  EndIf;

  DoW ( 1 = 1 );

    RecieveDataQueue('BRUNNER' :'BRUNNER' :%Size(Incoming_Data) :Incoming_Data :10);

    If ( Incoming_Data <> '' );
      Exec SQL SELECT K00FAK CONCAT '-' CONCAT K00KNR, K00NA1, K00NA2, K00ORT
                 INTO :A02Text1, :A02Text2, :A02Text3, :A02Text4
                 FROM K00 WHERE K00KNR = :Incoming_Data LIMIT 1;

      Write PROTO2A0;
      Read(E) PROTO2A0;

      If ( *INKC = *ON );
        Leave;
      EndIf;

    EndIf;

  EndDo;

  If %Open(PROTO2DF);
    Close PROTO2DF;
  EndIf;

  System('DLTOVR FILE(PROTO2DF) LVL(*JOB)');

  Return;

End-Proc;
Mit der Sitzung AZ_0815 bin ich am Anmeldeschirm somit ist dieser vorhanden...

PROTO2DF
Code:
                                            DSPSIZ(27 132 *DS4) PRINT

                R PROTO2A0
                                            CSRLOC(A02CLIN A02CPOS)
                                            RTNCSRLOC(*MOUSE &A02CLIN &A02CPOS)
                                            OVERLAY INVITE
                                            CF03 CA12
                  A02CLIN        3  0H
                  A02CPOS        3  0H
                  A02TEXT1      40A  O  2  2COLOR(WHT)
                  A02TEXT2      40A  O  3  2COLOR(WHT)
                  A02TEXT3      40A  O  4  2COLOR(WHT)
                  A02TEXT4      40A  O  5  2COLOR(WHT)
PS: Und bitte in "Programmierung" verschieben. Hab mich da leider vertan beim erstellen, sorry