Topic
12 replies Latest Post - ‏2013-02-28T20:29:20Z by SystemAdmin
SystemAdmin
SystemAdmin
6195 Posts
ACCEPTED ANSWER

Pinned topic How to get Temporary Storage Queue to work in EGL

‏2009-01-28T19:59:04Z |
Hello,

I need help getting a TDQ (transient data queue) to work in EGL debug and runtime. When my program tries to add a TDQ record, this error appears in EGL debug:
com.ibm.javart.FatalException: EGL0751E The runtime property vgj.ra.fileName.fileType
cannot be found for the TEMPFILE file.
EGL0002I The error occurred in the NW20A program processing the NW20P01_ADD function.


In CICS, the program abends on the NW20P01_ADD function.
When I run the program in EGL Debug, the variable NW00R01_TS.resourceAssociation is "DOCNCULM", which is correct and matches QUEUE_NAME_BUILD. (The name varies at runtime according to user id and term id.)

Here is some of the program code:
Record NW00R01_TS type relativeRecord {
fileName
= "TEMPFILE", recordNumItem = "TS_SEQNO"
}
10
TS_SEQNO smallint ;
10
DOC_NO int ;
10
DRAWER *char**(25)* ;
10
FOLDER *char**(25)* ;
end // end NW00R01_TS
*From
front of program NW20A:*
Function NW20P01_INITIALIZE()
NW00W01.QUEUE_NAME_TEXT
= "DOCN";
NW00W01.QUEUE_NAME_TERMID
= sysVar.sessionID;
NW00R01_TS.resourceAssociation
= NW00W01.QUEUE_NAME_BUILD;
From nw00.commonoparts, record nw00w01:
10 QUEUE_NAME_BUILD *char**(8)* ;
20
QUEUE_NAME_TEXT *char**(4)* ;
20
QUEUE_NAME_TERMID *char**(4)* ;
*In EGL Debug, NW20A
fails on this function with the message shown above:*

Function NW20P01_ADD()
try
add NW00R01_TS ;
end
if (NW00R01_TS is ioError)
NW00W01.FROM_APPL
= "NW20A";
NW00W01.VAGen_RECORD
= "NW00R01_TS";
NW00W01.PROCESS
= "NW20P01_ADD";
NW00W01.RTN8_CODE
= sysVar.errorCode;
transfer to program "NW99A" passing NW00W01;
end
end // end NW20P01_ADD
Here are the values in NW00R01_TS when the program abends:
NW00R01_TS:
resourceAssociation "DOCNCULM"
TS_SEQNO 1
DOC_NO 2255299
DRAWER "ANIMALS "
FOLDER "MAD COW DISEASE "
Thanks for any help,
MariV

Message was edited by: MariV

Message was edited by: MariV
Updated on 2013-02-28T20:29:20Z at 2013-02-28T20:29:20Z by SystemAdmin
  • markevans
    markevans
    2756 Posts
    ACCEPTED ANSWER

    Re: How to get Transient Data Queue to work in EGL

    ‏2009-01-28T23:18:39Z  in response to SystemAdmin

    Mari,
    there are a couple of things going on here.
    First of all, did you mean a Temporary Storage Queue. . I noticed you were writing a relative record and according to the VAGen generation guide (and from what I remember)... TDQ's could only be used for serial files/records. TSQ's would support relative record.
    Next... for CICS execution, you don't say what the error is, but you have to have a resource association part created that is used at generation to define that the relative records should be written to Temp Storage Queue. This is done like below. (screen shot is the completed one)..you:
    • Create a resource association part in an eglbld file
    • you add a filename that you want to match to (from the record definition)
    • you add the systems that you are generating for or doing debug for (so in this case Win for Debug, and zoscics for generation) (see below screen shot for more info on your particular caes).

    + in this case, I am saying the file associated tempfile (from the record definition) should be a TDQ read/write when generating for ZOSCICS. I left the name blank since you are dynamically creating the name. If you really meant to use a Temporary storage queue, then choose tempaux or tempmain.

    - Then in your build descriptor used for debug or generation, you name the resource association part you created.
    NOTE this is basically the same way VAGen did it (except it did not have the multiple system in one resource association)... so you may have these around somewhere.
    resourceassociation.gif
    In the case of debug, the message you are getting indicates you did not have the resource association specified in the debug build descriptor.
    Now for the "native CICS file types", you cannot access TSQ's or TDQ's remotely on CICS from the EGL debugger. You could not in VAGen either from the ITF. So, what could/can be done is use VSAM to provide a relative record file to simulate a TSQ during debug. In VAGen this could be a local (on your workstation version) file (defined in the workbench) or remote to access VSAM files on z/OS. EGL only provides the remote option for VSAM access. This requires a SNA type communication (or TCP62) and possibly additional products to provide the SNA connections... so this remote access may or may not be an option at your site.
    For serial files, you could simulate locally (using something like a .txt file) by creating the right entries on the "win" system and when the debugger runs on windows it will use the appropriate definition for the debugger.
    let me know if you have questions.
    • SystemAdmin
      SystemAdmin
      6195 Posts
      ACCEPTED ANSWER

      Re: How to get Temporary Storage Queue to work in EGL

      ‏2009-01-29T16:40:59Z  in response to markevans

      Mark,
      My colleague Steve C. followed your instructions and got the temporary storage queue to work in EGL CICS runtime. And you are correct, we are using Temporary storage queues, not Transient data queues. The resource association was set up in VaGen for us by a consultant back in 2003 - so we had no experience with it.
      Thanks for your help,
      Mari
    • SystemAdmin
      SystemAdmin
      6195 Posts
      ACCEPTED ANSWER

      Re: How to get Transient Data Queue to work in EGL

      ‏2012-04-18T17:30:54Z  in response to markevans
      Hi,

      Was wondering if the information about using a remote vsam file to simulate access of a TSQ while in EGL debugger still holds true for RBD 8.0.1.3? We need to access TSQ's from our debug session and are unable to do so.

      Thanks!
      Jim
  • SystemAdmin
    SystemAdmin
    6195 Posts
    ACCEPTED ANSWER

    Re: How to get Temporary Storage Queue to work in EGL

    ‏2013-02-22T17:42:13Z  in response to SystemAdmin
    Please can someone post an example of EGL code to write a content in a TS?
  • SystemAdmin
    SystemAdmin
    6195 Posts
    ACCEPTED ANSWER

    Re: How to get Temporary Storage Queue to work in EGL

    ‏2013-02-28T17:37:31Z  in response to SystemAdmin
    Help, I can not create a TS in cics, check the code generated in the EGL and has no EXEC CICS commands WRITEQ TS QUEUE ('TSTEMP'), run the application and does not create the file. I wanted to reproduce what I do with the top command in cobol for EGL.

    NW00R01-TS NW00R01-TS; // leo

    function ftpLote()
    NW00R01-TS.myContent = " Teste arquivo ftp via ts egl" ;
    NW00R01-TS.resourceAssociation = "TEMPFILE";
    NW20P01_ADD();
    end
    Record NW00R01-TS type SerialRecord {
    fileName = "TEMPFILE"
    }
    10 myContent CHAR(120);
    end // end NW00R01_TS

    Function NW20P01_ADD()
    add NW00R01-TS ;
    end
    • markevans
      markevans
      2756 Posts
      ACCEPTED ANSWER

      Re: How to get Temporary Storage Queue to work in EGL

      ‏2013-02-28T18:49:12Z  in response to SystemAdmin
      Hey,

      Looking at this, it looks like you have things defined correctly.

      Your Resource Association part looks correct, but I am guessing you might not have changed the build descriptor to specify the new Resource Association Part. This would be the build descriptor part you use to generate the COBOL. The option is called "resourceAssociation". Without this, it takes the default which would be a CICS WRITE (VSAM).

      Also, as a note, you may not want to use the statement

      NW00R01-TS.resourceAssociation = "TEMPFILE";

      This allows you to set the destination (TSQ name) at runtime. By using this statement here, you are changing the TSQ name from "TSTEMP" (which was specified in the resource association used at generation time) to "TEMPFILE". Given you seem to want to use TSTEMP, just remove this statement.

      Finally, when I specified the resource association part like yours AND specified resourceAssociation=myrscpart in the build descriptor, this was the resulting COBOL in the Add function:

      EXEC CICS WRITEQ TS QUEUE(EZEFILEX-TEMPFILE-EZEDEST) 
                 FROM(EZETSQ-BUFFER)
                 MAIN LENGTH(EZEFILEX-TEMPFILE-LL) NOSUSPEND
                 RESP(EZEFILEX-TEMPFILE-CICS-RC1) 
                 RESP2(EZEFILEX-TEMPFILE-CICS-RC2)
                 END-EXEC
      
      Updated on 2014-03-25T04:35:59Z at 2014-03-25T04:35:59Z by iron-man
      • SystemAdmin
        SystemAdmin
        6195 Posts
        ACCEPTED ANSWER

        Re: How to get Temporary Storage Queue to work in EGL

        ‏2013-02-28T19:20:29Z  in response to markevans
        I believe that is in my probema "resourceAssociation" attachment with the following screen:
        • markevans
          markevans
          2756 Posts
          ACCEPTED ANSWER

          Re: How to get Temporary Storage Queue to work in EGL

          ‏2013-02-28T19:39:16Z  in response to SystemAdmin
          Hi,

          From your screen shot, it looks like you generated the program GCRMSE using a build descriptor named "SC".

          The resourceAssociation build descriptor option in SC needs to specify the "TEMPFILE" resource association part.

          So you either need that part into the same .eglbld file that contains "SC" or import the "TEMPFILE.eglbld" from the one that contains "SC".

          I would recommend creating a resource association part within the .eglbld file that contains "SC" and then changing "SC" to use that one.
          • SystemAdmin
            SystemAdmin
            6195 Posts
            ACCEPTED ANSWER

            Re: How to get Temporary Storage Queue to work in EGL

            ‏2013-02-28T20:29:20Z  in response to markevans
            Thank you very much!!! Generation could do!