[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2007
    Beiträge
    295

    Question DSPF INVITE samt OVRDSPF eines Batchjob

    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
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    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.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    May 2007
    Beiträge
    295
    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
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

Similar Threads

  1. DSPF-DDS Window
    By E305GL in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 28-01-19, 10:37
  2. Von Batchjob den ursprünglichen User rausbekommen
    By Dominic K. in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 15-08-18, 16:06
  3. Batchjob läuft die ganze Nacht
    By Zuther in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 08-03-17, 10:12
  4. was ist *wrkstn bei einem Batchjob / Jobscde
    By dibe in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 16-01-14, 14:05
  5. Datumsfelder in DSPF / Editiercode ?
    By JoergZ in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 30-07-01, 16:44

Tags for this Thread

Berechtigungen

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