• 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:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) Email

    Tags:

    Sponsored by
    Maxava

    Migrate IBM i with Confidence

    Maxava Migrate LiveTM minimizes disruption with seamless transitions. Upgrading to Power11, or cloud hosted system, Maxava has you covered!

    MIGRATE NOW

    Share this:

    • Share on Reddit (Opens in new window) Reddit
    • Share on Facebook (Opens in new window) Facebook
    • Share on LinkedIn (Opens in new window) LinkedIn
    • Share on X (Opens in new window) X
    • Email a link to a friend (Opens in new window) 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 ReplyCancel 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

  • Bob Code Assistant Gets Better Understanding Of IBM i Applications
  • IBM i In The Cloud And The Case For Reversing Replication
  • Guru: From Hiking Boots To Long-Term Memory
  • Inside IBM’s New PowerHA Cloud Offering, Full System Manager
  • IBM i PTF Guide, Volume 28, Number 39
  • Power Systems Turns In Another Great Quarter
  • Big Blue Is Right On Schedule With Fall 2026 IBM i Tech Refreshes
  • Guru: Environment Variables – Global Variables Wearing Hiking Boots
  • A New IBM i Entity Takes Shape: Power By Fortra
  • IBM i PTF Guide, Volume 28, Number 38

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