• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • QTEMP Is A Different Animal

    November 15, 2016 Hey, Ted

    I have a problem with an FTP script. I wish to send a file in QTEMP to a remote system, but the script tries to send the file from QGPL instead. The PUT command does not tell which library to send the file from because our standards prohibit the use of hard-coded library names. Any thoughts will be appreciated.

    –Al

    I commend you and other wise people in your shop for outlawing the hard-coding of library names, Al. The library list is a wonderful feature of IBM i, a feature that is sorely missing from other database systems. I have mentioned this before.

    However, QTEMP is a different animal. Since each job has its own QTEMP library, there is no way two users can step on one another’s feet. I suggest that you push to change the standards to make an exception of QTEMP. That would solve your FTP problem.

    If you are successful in having the policy changed, then I recommend the next step be to consider how best to hard code QTEMP. I’ll show you what I mean.

    Here’s a program that uses QTEMP.

    pgm
    
       dcl   &Abending      *lgl
       dcl   &MsgKey        *char      4
       dcl   &PgmName       *char     10
       dcl   &Sender        *char     80
    
       monmsg cpf0000 exec(goto Abend)
    
       /* Retrieve the program name. */
       sndpgmmsg msg(' ') topgmq(*same) msgtype(*info) keyvar(&msgkey)
       rcvmsg    pgmq(*same) msgtype(*info) sender(&sender) rmv(*yes)
       chgvar    &PgmName   %sst(&Sender 56 10)
    
       /* Create temporary objects */
       crtdtaara    qtemp/Sequence    *dec    (3 0)
    
       crtpf  qtemp/billwork1
       crtpf  qtemp/billwork2
       crtpf  qtemp/billwork3
    
       ovrdbf billwork1  tofile(qtemp/billwork1)
       ovrdbf billwork2  tofile(qtemp/billwork2)
       ovrdbf billwork3  tofile(qtemp/billwork3)
    
       call Bill500r
    
       dltovr billwork1
       dltovr billwork2
       dltovr billwork3
    
       return
    
    Abend:
       if (&Abending) do
          sndpgmmsg  msgid(cpf9898) msgf(qcpfmsg) +
                       msgdta('Unexpected error in' *bcat &PgmName) +
                       msgtype(*escape) keyvar(&MsgKey)
       enddo
       chgvar  &Abending   '1'
    
       movpgmmsg  msgtype(*diag)
       rsnescmsg
    
    endpgm
    

    The program creates a data area and three physical files in QTEMP, the RPG program runs, and all’s right with the world. There’s nothing wrong with this. But I would do this instead:

    pgm
    
       dcl   &WorkLib       *char     10     value(QTEMP)
    
       dcl   &Abending      *lgl
       dcl   &MsgKey        *char      4
       dcl   &PgmName       *char     10
       dcl   &Sender        *char     80
    
       monmsg cpf0000 exec(goto Abend)
    
       /* Retrieve the program name. */
       sndpgmmsg msg(' ') topgmq(*same) msgtype(*info) keyvar(&msgkey)
       rcvmsg    pgmq(*same) msgtype(*info) sender(&sender) rmv(*yes)
       chgvar    &PgmName   %sst(&Sender 56 10)
    
       /* Create temporary objects */
       crtdtaara    &WorkLib/Sequence    *dec    (3 0)
    
       crtpf  &WorkLib/billwork1
       crtpf  &WorkLib/billwork2
       crtpf  &WorkLib/billwork3
    
       ovrdbf billwork1  tofile(&WorkLib/billwork1)
       ovrdbf billwork2  tofile(&WorkLib/billwork2)
       ovrdbf billwork3  tofile(&WorkLib/billwork3)
    
       call qad06631r
    
       dltovr billwork1
       dltovr billwork2
       dltovr billwork3
    
       return
    
    Abend:
       if (&Abending) do
          sndpgmmsg  msgid(cpf9898) msgf(qcpfmsg) +
                       msgdta('Unexpected error in' *bcat &PgmName) +
                       msgtype(*escape) keyvar(&MsgKey)
       enddo
       chgvar  &Abending   '1'
    
       movpgmmsg  msgtype(*diag)
       rsnescmsg
    
    endpgm
    

    QTEMP is still hard coded in the program, but only in one spot–the initial value of the &WORKLIB variable. On many occasions, I have found and exterminated bugs in batch jobs by changing the value of the work library variable. The sequence is:

    • Start a service job on the batch job
    • Put the program into debug
    • Set a breakpoint before the first executable statement
    • Change the value of the work library variable to the name of a temporary library I had created for the occasion
    • Let the program run to completion
    • Query the temporary database tables

    By the way, if you’re not familiar with Brian Rusch’s fabulous Move Program Messages (MOVPGMMSG) and Resend Escape Message (RSNESCMSG) commands, I enthusiastically recommend you remedy that situation. You can learn about them here.

    QTEMP is another feature of IBM i that doesn’t exist on other systems. It pains me each time I see such well-designed software replaced by a cobbled-together assortment of utilities.

    Ted Holt welcomes your comments and questions. Email him through the IT Jungle Contacts page.

    RELATED STORIES

    Where Do Library Lists Reside?

    CL Error-Handling With APIs

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    Maxava

    Migrating to a new IBM Power System?

    Whether it be Power8, Power9 or Power10 – Maxava has you covered

    Our migration service moves data from the old to the new server without disruption while the business continues to operate without impacting performance. Our service avoids long periods of downtime and means businesses can reduce the risk of moving to new hardware.

    To learn more about Maxava’s migration service, call us on 888 400 1541 or VISIT maxava.com

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Sponsored Links

    Profound Logic Software:  NOW ON DEMAND! Webinar: Agile Modernization with Node.js.
    Fresche:  IBM i staffing for all of your IT needs. Request a FREE estimate. 1-800-361-6782
    Chrono-Logic:  Simplify deployment with LANSA-based Change Management and Deployment solutions.

    You’re Hired! Finding Your Next IBM i Pro What Koch’s $2.5 Billion Infor Investment Means For IBM i

    Leave a Reply Cancel reply

Volume 16, Number 25 -- November 15, 2016
THIS ISSUE SPONSORED BY:

ProData Computer Services
T.L. Ashford
WorksRight Software

Table of Contents

  • Calling SQL Functions From RPG, A Service Program
  • SQL PL–The LOOP Loop
  • QTEMP Is A Different Animal

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • COMMON Set for First Annual Conference in Three Years
  • API Operations Management for Safe, Powerful, and High Performance APIs
  • What’s New in IBM i Services and Networking
  • Four Hundred Monitor, May 18
  • IBM i PTF Guide, Volume 24, Number 20
  • IBM i 7.3 TR12: The Non-TR Tech Refresh
  • IBM i Integration Elevates Operational Query and Analytics
  • Simplified IBM i Stack Bundling Ahead Of Subscription Pricing
  • More Price Hikes From IBM, Now For High End Storage
  • Big Blue Readies Power10 And IBM i 7.5 Training for Partners

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2022 IT Jungle

loading Cancel
Post was not sent - check your email addresses!
Email check failed, please try again
Sorry, your blog cannot share posts by email.