Page 1 of 2

How to resolve ISPP330

PostPosted: Fri Aug 08, 2014 10:25 am
by Sathish_Kumar
Hi All,

I am doing a code in REXX, the Process of which is to find the count of all the "DSN" string in the given dataset and have to do some manipulations based on it.

In my rexx code, I initialised all the things and when i called a subroutine which has the code like the below

CALL cntstrgs

INSIDE THE SUBROUTINE
cntstrgs:

ADDRESS ISPEXEC view DATSET ('USER.XYZ')
addRESS ISREDIT
" F ALL "dsn" 1 12"
(cnt1) = FIND_COUNTS

BUT WHEN I try to view the dataset like above, it throws an error BDISPMAX and ISPP330.

I searched in the forum to resolve this issue,where few recommended to add some libraries.
And based on that suggestions in the old post, I have added all the ISPPLIB, ISPFLIB etc: but yet it throws the same error.
It would be of great help,if you guys provide your suggestion on the above.

Re: How to resolve ISPP330

PostPosted: Fri Aug 08, 2014 1:45 pm
by Pedro
ADDRESS ISPEXEC view DATSET ('USER.XYZ')
addRESS ISREDIT
" F ALL "dsn" 1 12"

Your code will not work. The 'VIEW' service passes control to ISPF modules. And your ISREDIT statements will never get executed until VIEW ends. And ISREDIT statements are only valid within a VIEW or EDIT session.

You did not say, but BDISPMAX indicates that you are running the rexx in batch and the problem is that ISPF cannot display a panel in a batch job. It tries repeatedly until it reaches the display max.

What you need to do is invoke VIEW with an initial macro. Move your FIND_COUNTS to your initial macro. Add an END service to your macro so that ISPF does not actually display a panel in batch.

Re: How to resolve ISPP330

PostPosted: Fri Aug 08, 2014 2:01 pm
by NicC
Hey Pedro

Thanks for that info! It is very timely as I was going to have to search the forum soon to get that exact info re VIEW in batch as I will be converting a foreground tool to run in background. Saved me a fight with the search facility!

Re: How to resolve ISPP330

PostPosted: Fri Aug 08, 2014 4:15 pm
by Sathish_Kumar
Thanks for your inputs Pedro.I tried with a macro now and it worked.

But I have a doubt, does a MACRO has to be always in seperate member or it can be included in the same set of codes from where it is been called.

For example:
1) I have a REXX PGM called CHECKONE where I have the following line

ADDRESS ISPEXEC "view dataset ('USER.XYZ') macro(cntstrgs)" - In this CNTSTRGS is a seperate member containing the macros in the PDS which will be available in SYSPROC.
But is it possible to have this macro inside the same program - CHECKONE inside a subroutine
like below

Inside CHECKONE

address ispexec "view dataset ('USER.XYZ')"
CALL cntstrgs
..
CNTSTRGS:

isredit macro
address isredit
" f all "DSN" 1 12"
.
"END"

I checked like this, and it again ran into the same error ISPP330.
Please let me know your comments on it.

Re: How to resolve ISPP330

PostPosted: Fri Aug 08, 2014 9:25 pm
by Pedro
But is it possible to have this macro inside the same program?

Maybe you can do it through the use of SUBCOM:
 "SUBCOM isredit"
 IF RC = 1 THEN   
    Call non_editor_code
 ELSE
    Call editor_macro_code   
 Exit

If it is not called as a macro, it runs one piece of code. If it is called as a macro, it runs a different set of code. But I do not see a benefit of keeping them together in one member.

Re: How to resolve ISPP330

PostPosted: Sat Aug 16, 2014 5:26 pm
by Sathish_Kumar
Thanks a lot for your suggestions Pedro and sorry for the late response as I was held up in different things.

We are advised to have less members during our deployment, since Macro takes up one member. we are trying to have a single piece of code to fullfill our requirement rather than going for a Macro.

I have tried your suggestion like below.

ADDRESS TSO
"subcom ISREDIT"
if rc = 1 then
call non-editor-code
else
call editor-macro-code
EXIT

Since my requirement is to find the keyword "DSN" inside the dataset and do some manipulations. I have written the code like this
Inside the function editor-macro-code

editor-macro-code:

address isredit
"view dataset ('user.xyz')"
"f all "DSN" 1 12"
(a1) = find_counts

When i run the above code, the program abends in the line "view dataset' with the return code of RC(20).

So i have changed that line alone as ADDRESS ISPEXEC "view dataset ('user.xyz')" in the function editor-macro-code, but this time
time it abends again with ISPP330 and BDISPMAX.

Could you please let me know how should i proceed from here for my requirement.

Re: How to resolve ISPP330

PostPosted: Sat Aug 16, 2014 7:35 pm
by Pedro
Of these three statements:
"view dataset ('user.xyz')"
"f all "DSN" 1 12"
(a1) = find_counts

Two of those are editor macro statements and the other is not. My earlier advice was to separate them into two different subroutines, but in your latest snippet of code, you still are combining them in one routine.

We are advised to have less members during our deployment, since Macro takes up one member. we are trying to have a single piece of code to fullfill our requirement rather than going for a Macro.

If you do not have the skill to separate three statements into two subroutines, you will have create two different members regardless of the advice you were given.

Re: How to resolve ISPP330

PostPosted: Sat Aug 16, 2014 11:17 pm
by prino
Sathish_Kumar wrote:We are advised to have less members during our deployment, since Macro takes up one member. we are trying to have a single piece of code to fullfill our requirement rather than going for a Macro.

Using edit macros in production is bad, bad, bad, been there done that.

And which PHB has come up with the imbecile requirement that you should have less members?

Re: How to resolve ISPP330

PostPosted: Mon Aug 18, 2014 6:02 pm
by Sathish_Kumar
Pedro,

Based on your suggestion I have tried with two subroutines for the non-editor and editor code, but i ended up with the same error. please see below the code and the error I have encountered.

ADDRESS TSO
"SUBCOM ISREDIT"
IF RC = 1 THEN
CALL NON-EDITOR-CODE
ELSE
CALL EDITOR-MACRO-CODE
EXIT

NON-EDITOR-CODE:
ADDRESS ISPEXEC
"VIEW DATASET ('USER.XYZ')"
RETURN

EDITOR-MACRO-CODE:
ADDRESS ISREDIT
"F ALL "MY STRING" 1 30"
(B1) = FIND_COUNTS
RETURN

1) In the non-edior subroutine, the job abends with the same ISPP330 when it executes the line "view dataset", so I am not able to proceed further.

2) In the above code, after executing the line "SUBCOM ISREDIT" the return code is zero and it normally triggers Editor-MACRO-CODE only and it is of no use without opening a dataset in view or edit mode.

Am I moving ahead as per your suggestion??

If you have any samples, please post the same.

And also, if you have any materials on this where I can refer things regarding SUBCOM and the things related to it: Kindly post the same.

Re: How to resolve ISPP330

PostPosted: Mon Aug 18, 2014 9:27 pm
by Pedro
Repeating:
You did not say, but BDISPMAX indicates that you are running the rexx in batch and the problem is that ISPF cannot display a panel in a batch job. It tries repeatedly until it reaches the display max.

1. What you need to do is invoke VIEW with an initial macro.
2. Move your FIND_COUNTS to your initial macro.
3. Add an END service to your macro so that ISPF does not actually display a panel in batch.

I see #2 in your code. I do not see #1 and #3. #3 is so that you do not actually try to display a panel in batch mode. And #1 is so that you can invoke #2 and #3.