Anmelden

View Full Version : DSPF INVITE samt OVRDSPF eines Batchjob



prsbrc
25-06-19, 09:51
Hallo Freunde der gepflegten Programmierung.

Wir sollen hier eine Art Kundeninformation programmieren welche automatisch über die Auftragserfassung die notwendigen Infos anzeigen soll.
Unsere Theorie:
Eine eigene Sitzung welche in ein eigenes Subsystem startet mit einem Signon-Schirm welcher leer ist. Im Hintergrund startet die Auftragserfassung EINMAL einen Batchjob welcher sich über OVRDSPF den interaktiven Job schnappen soll um ohne Anmeldung sofort das Kundeninfoprogramm anzuzeigen. Soweit so gut nur muss die Aktualisierung der Daten (Kundenwechsel etc) autoamtisch erfolgen. Dies sollte ja über INVITE sowie einer DTAQ zu lösen sein. Nur leider funktioniert diese Methode mit INVITE (MAXDEV(*FILE)) in Kombination mit einer DTAQ nicht. Beim WRITE auf den Record des DSPF schießt sofort ein CPF5068 (Programmeinheit *N in Datei PROTO2DF in Bibliothek BRUNNER nicht gefunden.)

Im Auschlussverfahren hab ich das INVITE sowie MAXDEV und die DTAQ entfernt sowie von einem WRITE sowie READ(E) auf WRITE und einen EXFMT umgestellt und schon läuft das ganze Werk (jedoch ohne refresh).

Interaktiv aufgerufen funktioniert das Programm über INVITE etc hervorragend.

Es schaut so aus als ob die Methode des automatischen refresh mittels INVITE über das angeln eines Batchjobs auf einen interaktiven nicht funktionieren würde. Hat hier jemand schon eine ähnliche Problemstellung gehabt bzw gelöst?

Danke und LG

Robi
25-06-19, 10:14
Bin nicht sicher, ob ich das verstanden habe.

Bei uns läuft das so, das sich die Anwender einmalig per F-Taste für die Teilname am Kunden Monitor anmelden.

Kommt ein Anruf vom Kunden öffnen wir einen GRPJOB der über die Telefonnr den Kunden, den aktuellen / letzten Auftrag ermittelt und die Daten anzeigt. Das was der Sachbearbeiter gerade gemacht hat, bleibt in der 1. Ebene aktiv, der Sachbearbeiter kommt nach beenden des GRP Jobs dahin zurück.
Da nicht sicher ist, das der Sachbearbeiter den Schirm zeitnah wieder verlässt, senden wir hier via dataq
VORHER ein verlassen des Schirms.
Das zwischen den 2 Telefonaten mind. 2,5 Minuten Bearbeitungszeit bleibt, regelt die Telefonanlage.

prsbrc
25-06-19, 10:54
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

**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:

**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

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