Wednesday, January 11, 2017

Using auditing columns to audit data

generated audit columns

The germ for this post came from a comment made by a work colleague. I always insist that all master files have a "Last update user” and "Last update timestamp" field, making it possible to know when a particular record was last changed and who did it. "Wouldn't it be nice if the system updated the audit user and time for us," my colleague said looking at an old master file without these fields. This sent me to IBM's KnowledgeCenter to see if this was possible, and after a while of poking around I found the way to do it, auditing columns.

If a file or table has auditing columns, every time data is added to or changed the auditing columns will be automatically updated by the IBM i database manager, no extra coding needed in my RPG or SQL. I cannot move values to these columns, thereby, ensuring that the information contained within is sacrosanct. I cannot define auditing columns in DDS, if I need to add them to DDS file I would use the SQL ALTER TABLE statement. There are 21 types auditing columns covering all kinds of information, but in my scenario I just want to add auditing columns that will allow me to see:

Monday, January 9, 2017

IBM document: DB2 for i FAQ

I have to thank an IBM-er for bringing this document to my attention. It is seven page document titled: DB2 for i Frequently Asked Questions, and was released November 1, 2016.

The questions it answers are:

  1. What is DB2 for i?
  2. Do I need to buy DB2 for i?
  3. What level of IBM i supports DB2 for i?
  4. How does DB2 for I compare to DB2 for Linux/Unix/Windows?
  5. Is DB2 for i "optimized" for SAP?
  6. Do I need DB2 to connect my Linux, Unix, or Windows clients to DB2 for i?
  7. Does DB2 for i support data warehousing?

Wednesday, January 4, 2017

Using SEU with totally free RPG

use seu with modern totally free rpg

I have been asked the same question many times recently: "Why can't I use SEU with the new RPG?" Before I directed people to various posts in this blog, which I think has confused some. Therefore, I have decided to put it all in one place, this post.

Let me start by saying that it is possible to use SEU to edit totally free RPG. The issue is that IBM has not considered SEU the editor of choice for IBM i since release 6.1, not making any changes to it since that release. Rational Developer for i, RDi, is now IBM's preferred editor. Unlike SEU, RDi is not included with the standard package of IBM i based development tools. RDi is not free, its licenses are purchased separately. I would recommend that if you can get a license of RDi you should start learning how to use it, rather than using the out of date SEU. For the sake of this post I am going to assume that you do not have an RDi license, and you have to continue to use SEU.

Sunday, January 1, 2017

Happy 2017

Another new year is upon us and I am filled with excitement with what it will bring us all, and gratitude for what 2016 brought us too.

It is a truly exciting time to be involved with IBM's PowerSystems servers and the IBM i operation system. In my opinion the highlights of 2016 were:

Friday, December 30, 2016

Leap second coming January 1 2017

I have just learned that there will be a leap second before January 1, 2017. A leap second is an extra second added to a day to keep UTC (Coordinated Universal Time) synchronized with "mean solar time". The leap second is added to December 31, 2016, after 23:59:59 UTC, and before 00:00:00 UTC on January 1 2017.

December 31, 2016 23:59:59 UTC
23:59:60 UTC
January 1, 2017 00:00:00 UTC

The question is how does this effect IBM i?

Wednesday, December 28, 2016

Calling a program in totally free RPG

call program in free format rog

Someone said to me that the reason that they will not use totally free RPG is they cannot call programs using it. In the earlier flavors of free format RPG they could just switch from free format to fixed to do the call, and return to free format afterwards.

  Var1 = 'Hello' ;
  Var2 = 1 ;
  Var3 = '' ;
C                   call      'OTHERPGM1'
C                   parm                    Var1
C                   parm                    Var2
C                   parm                    Var3
  if (Var3 = 'Y') ;

With totally free RPG once the **FREE compiler directive is placed in the code it is not possible to go back to fixed format after that. Therefore, the approach used above is not possible.

Wednesday, December 21, 2016

Easy way to convert date to words using SQL

convert date to an alphanumeric string

The idea for this post came from a meeting of the programming managers at work. My programming nemesis, the "I can do everything you do in RPGIV just as well using RPGIII" guy, was bragging that no-one could write a better way of changing a date into words than his old RPG38 program.

"I can do what your program does in just a few lines of code," I explained. He disputed that I could, and the challenge was on.

His old program is passed a date, as a number, and returns:

  1. Day number of the week, where 1 = Sunday, 2 = Monday, etc.
  2. Day of the week
  3. Name of the month
  4. The date in words, for example "THURSDAY JANUARY 1, 2017"

Thursday, December 15, 2016

Redpaper: Tools and Solutions for Modernizing, updated

Yesterday an updated version of the Tools and Solutions for Modernizing Your IBM i Applications Redpaper was released. This Redpaper, which was first published in 2014, describes the tools that are available from Independent Software Vendors, ISV, and Business Partners, BP, to modernize IBM i applications and databases.

It has sections about:

  1. Mobile, web, and client solutions
  2. Database modernization tools
  3. Security
  4. Tools for understanding and modernizing RPG and COBOL

While I usually avoid mentioning ISV and BP software in this blog, sometimes it is interesting to see what is "out there".

You can download the latest version of this Redpaper, as a PDF, here.

Wednesday, December 14, 2016

Searching the History log using SQL

history_log_info better way to get entries from the history log

I am sure I am not the only person who has received a message, email, or telephone call informing me that there was an error message that happened earlier. When I reply asking for more details it is not uncommon to be told: "I don't know what the error was, I just replied with a C". This, of course, tells me nothing useful to be able to make a diagnosis what and where the error happened. Often it drives me to the History log which I have to search through looking for an error message. Narrowing the possible time frame makes the searching easier, but if the best the message sender can tell me is "earlier this afternoon" or "during the day end run" I am left with a large amount of log data to search through.

IBM has come to my rescue with a DB2 of i (SQL) table function that allows me to search the History log and select the data I want to see. I am not sure if this is part of the IBM i 7.3 TR1 and 7.2 TR5 updates. You can search to see if it is present on your IBM i using the PTF information View, PTF_INFO, to look for relevant PTF:

Tuesday, December 13, 2016

MAGIC starts in the eastern USA

Yesterday I came across a new IBM i user group with the wonderful name of MAGIC. I reached out to them for more information and received a wonderful reply from Laura Hamway. Her explanation of what the group is and what they want to achieve, was so good I am just going to include it here.

Mid-Atlantic Group of IBM i Collaborators (MAGIC) was formed to help IBM i Users in this region (VA, NC, DE, MD and PA) to network and to facilitate ongoing education. The group was formed to support this region but anyone can join. We have all the frame work done, now we are ready to get started in 2017!

Wednesday, December 7, 2016

ON-EXIT provides code executed at end of procedures

on-exit section procedure and subprocedure

As part of the IBM i 7.3 TR1 and 7.2 TR5 enhancements a new RPG operation code, ON-EXIT, was added. The purpose of this operation code is to give a section of code that is executed whenever a procedure ends, with or without an error. Alas, when an error occurs in the procedure it is not possible to "correct" or prevent the error being returned to the calling program or procedure using the ON-EXIT section. But it does allow for the programmer to add code to, perhaps, flag the error or to perform various clean up tasks before the procedure ends.

The ON-EXIT section must occur at the end of the procedure. It is started by the ON-EXIT operation code, and is ended with the END-PROC operation code that flags the end of the procedure.

Monday, December 5, 2016

Who remembers these? RPG coding sheets

When I posted pictures of the IBM print charts I had found, Kevin Adler sent me pictures of some of the RPG history he has, RPG coding sheets.

Looking closely at them I think they may have been sheets used in the days of punch cards.

When I asked Kevin how he came to possess them he replied: "I got them from a former team leader before he retired."