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
PROTO2RG liest die DTAQ und soll die Informationen anzeigen: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;
Mit der Sitzung AZ_0815 bin ich am Anmeldeschirm somit ist dieser vorhanden...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;
PROTO2DF
PS: Und bitte in "Programmierung" verschieben. Hab mich da leider vertan beim erstellen, sorryCode: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)
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten

Bookmarks