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

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
    2887 Posts

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

    ‏2009-01-28T23:18:39Z  

    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

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

    ‏2009-01-29T16:40:59Z  
    • markevans
    • ‏2009-01-28T23:18:39Z

    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.

    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

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

    ‏2012-04-18T17:30:54Z  
    • markevans
    • ‏2009-01-28T23:18:39Z

    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.
    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
  • markevans
    markevans
    2887 Posts

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

    ‏2012-04-18T17:37:04Z  
    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
    Jim,

    There is no additional support for TSQ's in V8.0.1.3. You can still simulate with a remote VSAM file (if relative record) or with a local file (if a serial file).

    If the remote VSAM is required, then we have updated the support to allow remote access to VSAM files both inside and outside of CICS and this support is via TCPIP. Look in the EGL helps for info on the remote VSAM support using TCPIP.

    http://publib.boulder.ibm.com/infocenter/rbdhelp/v8r0m0/topic/com.ibm.egl.pg.doc/topics/pegl_core_debug_vsam_tcpip.html
  • SystemAdmin
    SystemAdmin
    6195 Posts

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

    ‏2012-04-18T19:34:16Z  
    • markevans
    • ‏2012-04-18T17:37:04Z
    Jim,

    There is no additional support for TSQ's in V8.0.1.3. You can still simulate with a remote VSAM file (if relative record) or with a local file (if a serial file).

    If the remote VSAM is required, then we have updated the support to allow remote access to VSAM files both inside and outside of CICS and this support is via TCPIP. Look in the EGL helps for info on the remote VSAM support using TCPIP.

    http://publib.boulder.ibm.com/infocenter/rbdhelp/v8r0m0/topic/com.ibm.egl.pg.doc/topics/pegl_core_debug_vsam_tcpip.html
    Thanks for the reply, I'll take a look.

    Jim
  • SystemAdmin
    SystemAdmin
    6195 Posts

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

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

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

    ‏2013-02-22T17:55:39Z  
    Please can someone post an example of EGL code to write a content in a TS?
    Leonardo,

    I would suggest you pull down the EGL for the CICS Developer course materials on the EGL Learning Center (see link below). It was written for RBD V7.5, but it is still applicable.

    Starting in the section "CICS Coding techniques", there are examples, etc on how to do file i/o. Essentially it is a either a serial or relative type record...and then in the resource association used at generation time, you say want the file to be TEMPMAIN or TEMPAUX.

    https://www.ibm.com/developerworks/mydeveloperworks/wikis/home?lang=en#/wiki/EGL%20Learning%20Center/page/EGL%20for%20the%20CICS%20Developer%20-%20Course%20Materials

    There is also a section in the EGL Helps (Programmer's Guide) called "using Temporary Storage" which is under "File Techniques in CICS programs". You may want to take a look at this if you have not already.

    http://publib.boulder.ibm.com/infocenter/rbdhelp/v8r0m0/topic/com.ibm.egl.pg.doc/topics/pegl_cics_file_temporary.html

    Finally, sometimes it is easier to work on specific issues if you have tried...and it is not working. If you have tried...can you post what is not working or what you have attempted.
  • SystemAdmin
    SystemAdmin
    6195 Posts

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

    ‏2013-02-28T17:37:31Z  
    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
    2887 Posts

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

    ‏2013-02-28T18:49:12Z  
    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
    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

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

    ‏2013-02-28T19:20:29Z  
    • markevans
    • ‏2013-02-28T18:49:12Z
    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:

    <pre class="java dw" data-editor-lang="java" data-pbcklang="java" dir="ltr">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 </pre>
    I believe that is in my probema "resourceAssociation" attachment with the following screen:
  • markevans
    markevans
    2887 Posts

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

    ‏2013-02-28T19:39:16Z  
    I believe that is in my probema "resourceAssociation" attachment with the following screen:
    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

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

    ‏2013-02-28T20:29:20Z  
    • markevans
    • ‏2013-02-28T19:39:16Z
    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.
    Thank you very much!!! Generation could do!