Older IBM i administration tools are gradually being superseded by Access Client Solutions (ACS), a Java application that runs on all major consumer operating systems, including the Apple Mac. ACS is rapidly gaining functionality, offering unique features such as Insert SQL by Example. To encourage Mac users to adopt this powerful application, I have written installation instructions that work well for me as of today (April 2018).

For background on ACS, see IBM Support’s Access Client Solutions page (current as of this writing, but if the link should ever break, search for “IBM ACS” to find an updated page.)

To begin your installation,  go to the Access Client Solutions “Download” page.

Log In with Your IBM ID and password.

Agree to the license.

Choose your download Method.

Using Download Director:

Or using http, select files individually:

Open the QuickStart guide and follow the instructions for installation on MAC

1 Unzip the application zip file.

2 Go into the unzipped folder.

3 Run the installer, install_acs.

If you get the “can’t be opened” message as shown above , instead of double clicking the icon, right click and you should get an “unidentified developer” message as shown below. Click “Open.”

4. A terminal window will open. Ignore this terminal window. Next, if this a new installation, you should see several yes/no boxes that will help you set up your initial environment. If this is an update rather than a new installation, your previous settings will be preserved.

5. When all of the questions are answered, you should see the “finished” message box.

6. You will find a new application in the Applications folder:

Incidentally, an IBM folder will now exist under your user profile. Your user preferences for ACS will automatically be stored in subfolders under this IBM folder.

7. You can close the terminal window now.

Starting instructions are on the QuickStartGuide as well.

Use Finder>Applications to locate the IBM Access Client Solutions app and double click it:

You may encounter this “unidentified developer” message:

Instead of double clicking it, Right click the icon and choose Open:

Now the ACS program should start. You can verify the version and the Java home path by clicking Help and About.

The installation is complete. You can add your system definitions and emulation environments now.

The Help menu also contains an option to check for updates. It only checks for updates but does not install them. If you want to update to a newer version that the check tells you about, you have go through most of the same steps as the install.

This install was performed on a Macbook Pro macOS High Sierra. I have used the same instructions to install on earlier macOS versions.  The messages may appear slightly different depending on the operating system and security settings you are using.

Good luck and let me know if you have any questions about installing ACS on your Mac.

I recently created an IBM i command for our company’s use that involved calling a PHP script from a CLLE program using QShell. In the event that the PHP script encountered an error I wanted a way for that script to report the error back to the calling CLLE. There are a few different ways to do that, but here is how I handled it.

In the PHP script, at the spots where I knew problems could happen, I used a try/catch to identify the problem and set a status value:

$exitStatus = 0;

try {
// code that might generate an error
} catch ( Exception $e ) {
$exitStatus = 1;

At the end of the PHP script I use the following:

exit( $exitStatus );

A successful execution of the script returns a status of 0, while a trapped error returns a positive value, in this case 1. If I have multiple places in the script that could generate errors, I can repeat that code with other positive integer values for $exitStatus, making it possible to identify the specific error.

When the script ends and QShell returns control to the calling CLLE, QShell returns a completion message: QSH0005 (from message file QZSHMSGF in library QSHELL). The message text is normally “Command ended normally with exit status 0.” When you use the “exit” statement as I did and return a value other than zero (0), that value is reflected in the message, as “Command ended normally with exit status 1.”

Since QSH0005 is not an escape message, I can’t use a MONMSG to check for the error. If I set environment variable QIBM_QSH_CMD_ESCAPE_MSG to a value of ‘Y’, any exit status greater than 0 will be reported as an escape message, which could then be monitored for. I chose not to go that route.

Instead I chose to receive the QSH005 message and compare the message text with the normal message to see if an error occurred. If there was an error I then sent CPF9897 as an escape message with the same message text. I can then monitor for CPF9897 in the CLLE’s calling program and process as needed. Here are the steps in the CLLE:



IF  COND(&MSGID *EQ ‘QSH0005’ *AND &RTNTYPE *EQ ‘01’ *AND %TRIM(&MSG) *NE ‘Command ended normally with exit status 0.’)  THEN(DO)

Thanks to several Club Seiden members for their input, especially Kevin Adler, who pointed me to the “exit” statement.