• 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
    DRV Tech

    Get More Out of Your IBM i

    With soaring costs, operational data is more critical than ever. IBM shops need faster, easier ways to distribute IBM applications-based data to users more efficiently, no matter where they are.

    The Problem:

    For Users, IBM Data Can Be Difficult to Get To

    IBM Applications generate reports as spooled files, originally designed to be printed. Often those reports are packed together with so much data it makes them difficult to read. Add to that hardcopy is a pain to distribute. User-friendly formats like Excel and PDF are better, offering sorting, searching, and easy portability but getting IBM reports into these formats can be tricky without the right tools.

    The Solution:

    IBM i Reports can easily be converted to easy to read and share formats like Excel and PDF and Delivered by Email

    Converting IBM i, iSeries, and AS400 reports into Excel and PDF is now a lot easier with SpoolFlex software by DRV Tech.  If you or your users are still doing this manually, think how much time is wasted dragging and reformatting to make a report readable. How much time would be saved if they were automatically formatted correctly and delivered to one or multiple recipients.

    SpoolFlex converts spooled files to Excel and PDF, automatically emailing them, and saving copies to network shared folders. SpoolFlex converts complex reports to Excel, removing unwanted headers, splitting large reports out for individual recipients, and delivering to users whether they are at the office or working from home.

    Watch our 2-minute video and see DRV’s powerful SpoolFlex software can solve your file conversion challenges.

    Watch Video

    DRV Tech

    www.drvtech.com

    866.378.3366

    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

  • The Power11 Transistor Count Discrepancies Explained – Sort Of
  • Is Your IBM i HA/DR Actually Tested – Or Just Installed?
  • Big Blue Delivers IBM i Customer Requests In ACS Update
  • New DbToo SDK Hooks RPG And Db2 For i To External Services
  • IBM i PTF Guide, Volume 27, Number 33
  • Tool Aims To Streamline Git Integration For Old School IBM i Devs
  • IBM To Add Full System Replication And FlashCopy To PowerHA
  • Guru: Decoding Base64 ASCII
  • The Price Tweaking Continues For Power Systems
  • IBM i PTF Guide, Volume 27, Numbers 31 And 32

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 © 2025 IT Jungle