• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Asserting the Ostensibly Unassertable

    May 25, 2011 Hey, Ted

    Assertions are great for validating conditions that can be tested with IF, DOW, SELECT, etc., but what about other types of conditions? For instance, can I use an assertion to test that a variable contains valid decimal data?

    –A Nice Lady

    (I’m sorry. A nice lady asked me this question in person and I forgot her name.)

    Yes, it is possible to check for conditions that one cannot test with conditional OPCODES such as IF, but you must use a different method.

    When something goes amiss, the system loads a five-digit, zoned-decimal status code with a non-zero value. You can access this status through file and program status data structures, but that is so 20th century. The modern way is to use the %STATUS built-in function. The status for invalid decimal data is 907. You can find a complete list of status codes in the RPG reference manual.

    Here’s one possibility:

    H dftactgrp(*no) actgrp(*new)
    H bnddir('TOOLKITBD')
    
    D AGoodPgm        pr                  extpgm('AGOODPGM')
    D  inDecNbr                      5p 0
    D AGoodPgm        pi
    D  inDecNbr                      5p 0
    
    D DecNbr          s                   like(inDecNbr)
    D Status          s              5s 0
    
     /copy prototypes,assert
     /copy qrpglesrc,psds
    
     /free
         *inlr = *on;
         monitor;
            DecNbr = inDecNbr;
         on-error;
            Status = %status;
         endmon;
         assert (Status = *zero:
                 %trimr(psdsProcName) +
                    ' canceled with status ' +
                    %editc(Status: 'X'));
         return;
    

    Here’s another method with more specific error handling:

        monitor;
           DecNbr = inDecNbr;
        on-error 907;
           assert (*off: 'Parameter inDecNbr has invalid decimal data');
        on-error;
           Status = %status;
           assert (*off: %trimr(psdsProcName) +
                         ' canceled with status ' +
                         %editc(Status: 'X'));
        endmon;
    

    In each case, the assertion will fail, immediately halting the program, if the inDecNbr parameter does not contain valid decimal data.

    –Ted

    RELATED STORY

    Programming with Assertions



                         Post this story to del.icio.us
                   Post this story to Digg
        Post this story to Slashdot

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    ARCAD Software

    [Webinar] Git on IBM i: A True Look at What It Takes

    Ready to bring your IBM i development into the modern DevOps era? Join Jeff Tickner, CTO North America, and Alan Ashley, Sr. Solutions Architect, for a practical look at what it really takes to migrate to Git on IBM i and how to do it right.

    What you’ll discover:

    • Modern DevOps approaches to bring teams together and boost efficiency with flexible Git options
    • Bi-directional push/pull operations and pipeline automation
    • Best practices based on years of real-world experience
    • ARCAD’s seamless and highly optimized Git integration in action

    Whether you’re evaluating Git for the first time or planning your migration strategy, this session will provide a clear, actionable path forward.

    Register Now!

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Sponsored Links

    VAULT400:  Take a 14-question Disaster Recovery Survey, 4 will win $50 Visa gift card
    SEQUEL Software:  View the recorded Webinar: 10 Ways SEQUEL Makes Developers More Productive
    looksoftware:  FREE Webcast: RPG Open Access Demystified. June 7 (Europe) & June 8 (USA)

    IT Jungle Store Top Book Picks

    BACK IN STOCK: Easy Steps to Internet Programming for System i: List Price, $49.95

    The iSeries Express Web Implementer's Guide: List Price, $49.95
    The iSeries Pocket Database Guide: List Price, $59
    The iSeries Pocket SQL Guide: List Price, $59
    The iSeries Pocket WebFacing Primer: List Price, $39
    Migrating to WebSphere Express for iSeries: List Price, $49
    Getting Started with WebSphere Express for iSeries: List Price, $49
    The All-Everything Operating System: List Price, $35
    The Best Joomla! Tutorial Ever!: List Price, $19.95

    Finding Duplicate Rows in a Name and Address Table Admin Alert: Other Options for a Post-Upgrade Backup

    Leave a Reply Cancel reply

Volume 11, Number 17 -- May 25, 2011
THIS ISSUE SPONSORED BY:

WorksRight Software
SEQUEL Software
VAULT400

Table of Contents

  • Finding Duplicate Rows in a Name and Address Table
  • Asserting the Ostensibly Unassertable
  • Admin Alert: Other Options for a Post-Upgrade Backup

Content archive

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

Recent Posts

  • More Power Systems Price Hikes, This Time They Are “Directional”
  • AI Is Not Just For Developers, It Is For Everyone At Your Company
  • Guru: Finding Data In The Forest – Exploring Three-Part Naming In SQL
  • Former IBMer’s New Book Puts The Midrange In The Spotlight
  • Have You Tried To Buy A Server Lately?
  • GenAI Is The Death Of Deterministic Project Budgeting
  • PTC Adds Support For VS Code With Implementer 12.7
  • Guru: Single Threading A Program Execution
  • As I See It: Push Back
  • IBM i PTF Guide, Volume 28, Number 21

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