Warning: Declaration of TCB_Menu_Walker::walk($elements, $max_depth) should be compatible with Walker::walk($elements, $max_depth, ...$args) in /home/nicklit/www/www/wp-content/plugins/thrive-visual-editor/inc/classes/class-tcb-menu-walker.php on line 620

Warning: session_start(): Cannot start session when headers already sent in /home/nicklit/www/www/wp-content/plugins/userpro/includes/class-userpro.php on line 222
How to find if an IBM i (as400) program is interactive or batch - RPG API example - Nick Litten is IBM-i, AS400 iSeries RPG Programmer and Nerd

How to find if an IBM i (as400) program is interactive or batch – RPG API example

Programming

Jan 28
59

Any program can easily find out the mode it is running in by calling an IBM supplied *API – which will return the status of the job we are running. Basically, we just have to teach our program to shout “Hey Dude – am I running in batch or what?” and then the dark lord IBMi will answer “My son, you are running interactive! Dont be resource greedy… and don’t call me Dude

So, lets go through an example of a simple Service program to do this. The module below, INTERACT, determines whether your program is running in interactive or batch mode:

RPG Code Snippet interactive or batch
H NoMain D #Interactive PR N D DummyPrm 1 Options( *Omit ) P #Interactive B Export D #Interactive PI N D DummyPrm 1 Options( *Omit ) * Local variables D RetdInfDs DS D 4 D 10I 0 Inz( %Size( RetdInfDs ) ) D RiJobType 61 61 D RiTypeInteractive... D C 'I' D LenRetdInf S 10I 0 Inz( %Size( RetdInfDs ) ) D FmtName S 8 Inz( 'JOBI0100' ) D QlJobName S 26 Inz( '*' ) D IntJobId S 16 Inz( *Blank ) * MAINLINE C Call 'QUSRJOBI' C Parm RetdInfDs C Parm LenRetdInf C Parm FmtName C Parm QlJobName C Parm IntJobId C If RiJobType = RiTypeInteractive C Return *On C Else C Return *Off C EndIf P #Interactive E

Here are the steps for installing and using #Interact:

  • Upload #INTERACT to a source physical file with a record length of 112 bytes. Give the uploaded member a name of #INTERACT and a PDM type of RPGLE.
  • Use option 15 in PDM to compile #INTERACT.
  • Issue the command: CrtSrvPgm SrvPgm( #INTERACT ) Export( *All ) ActGrp( WhateverYouWant )

To use this service program from an RPG IV program, follow these steps:

Include the following prototype in your source with the D-specs:

D #Interactive PR N
D DummyPrm 1 Options( *Omit )

If you expect to use this procedure in more than one program, you might consider using a /Copy member for this prototype.

Here are a couple of sample calls to #INTERACT in the C-specs:

C If #Interactive( *Omit )
C 'Interactive' Dsply DummyVar
C EndIf
C If Not #Interactive( *Omit )
C 'Batch' Dsply
C Endif

Compile it and Use it 🙂

Use PDM option 15 to compile your program.

Issue the following command to create your program (Note that the following assumes your program is a standalone program, i.e., a single module, named MYPGM):

CrtPgm MyPgm Module( MYPGM ) BndSrvPgm( INTERACT ) ActGrp( Whatever )

Adapted from a utility by Mike Cravitz

Follow

About the Author

IBM i Software Developer, Digital Dad, AS400 Anarchist, RPG Modernizer, Alpha Nerd and Passionate Eater of Cheese and Biscuits. Nick Litten Dot Com is a mixture of blog posts that can be sometimes serious, frequently playful and probably down-right pointless all in the space of a day. Enjoy your stay, feel free to comment and in the words of the most interesting man in the world: Stay thirsty my friend.