All About COBOL
Nov 10, 2015Dan Iverson
Time for everyone’s favorite language: COBOL! Well, it’s not my favorite, and probably not your favorite, but it is important to PeopleSoft. Many core programs in HR use COBOL and will most likely stay COBOL for a while. Those COBOL programs are stable, fast, and once you compile you rarely have to touch them. Because COBOL is important to PeopleSoft, let’s talk about setting up the compiler, runtime, and learn how to compile COBOL programs.
Installation and Configuration
Compiler
PeopleSoft delivers COBOL source files with some of the applications, but you need to install the COBOL compiler separately. Oracle will give you a license to MicroFocus, so you don’t need to buy your own. Oracle Support has a nice article on downloading MicroFocus and acquiring a license. As a PeopleSoft customer, a MicroFocus license is included with the product to compile COBOL programs. Keep in mind, you can only use the compiler for PeopleSoft programs!
Runtime
After you install the compiler, you will need to install the Runtime License on any server were your compiled COBOL will run: process schedulers and application servers. To install the runtime, open a command prompt and navigate to the folder that contains
setupMF.exe
. Run these commands:
setupMF.exe e:\psoft\psft-mf—nx-as-license
to install the license foldere:\psoft\pt-85x.xx
(your path to PS_HOME)MFLMWin.exe -i
to install the License Manager service.- For Windows, you may need to change the security for
MFLMWin.exe
. Right-click on that file, select the Compatibility tab, and check the box for “Run this program as an administrator” - In the Services panel, verify the “MicroFocus License Manager” service has started and set to start Automatically
Database
Clients Are you on PeopleTools 8.53 or lower? You’ll still need a 32-bit client for COBOL. That means installing the 32-bit client on your process scheduler and app server (for the remote call COBOL programs).
Domain Configuration
If you need the 32-bit client on your process schedulers and app server, you’ll need to make sure the domains know where to find them. The simplest solution is to add the 32- bit client to the PATH in the
psappsrv.cfg
and psprcs.cfg
files. I added the client path the beginning of the PATH variable. For the psappsrv.cfg
and psprcs.cfg
files, change this setting to your 32-bit client path:
Add to PATH=e:\oracle\product\12.1.0\client_32;[existing entries]
Compiling
COBOL PeopleSoft delivers scripts to simplify the compilation process. The scripts know about the decoupled homes and can compile all homes, or just your customizations. Under the PS_HOME\setup
folder you’ll find the main script, cblbld.bat
. Here is the basic usage for cblbld.bat
:
- Set up your environment variables for MicroFocus and homes
- Tell the script where to compile
- Tell the script which homes to compile
The script will handle copying source files, compiling, and deploying to the CBLBINx
folder. For example, let’s compile all the source COBOL in our demo environment:
set PS_HOME=e:\psoft\pt-file-8.5x.xx
set PS_APP_HOME=e:\psoft\hr-file-9.2.xxx
set PS_CUST_HOME=e:\psoft\HR92DMO
set COBROOT="e\:Program Files\MicroFocus\bin"
cd %PS_HOME%setup
cblbld.bat e: temp\compile
The last command will compile PS_HOME
first and deploy and PeopleTools COBOL programs to PS_HOME\CBLBINx
. Then, it will compile PS_APP_HOME
source files and deploy to PS_APP_HOME\CBLBINx
. Last, it will compile any source files in PS_CUST_HOME\src\cbl\base
and deploy to PS_CUST_HOME\CBLBINx
Let’s dig into this script to understand what is happening behind the scenes. The CBLBLD.bat
script is powerful and can really help out when compiling programs.
CBLBLD
The CBLBLD.bat
script takes four parameters:
- Drive Letter
- Compile Directory
- Encoding (Optional)
- Directories to compile (Optional)
CBLBLD.bat
assumes you have set the environment variables mentioned above so it knows where to grab the sources files for compilation. To compile only your custom COBOL source files, pass PS_CUST_HOME
to CBLBLD.bat
. For example:
cblbld.bat e: temp\compile PS_CUST_HOME
You can also pass in PS_HOME
, PS_APP_HOME
or PS_CUST_APP_HOME
to compile only those directories. The script uses the directory name to copy the COBOL sources files to the compile directory. Then, the script CBLBLD_MF.bat
is called to start up MicroFocus and compile everything in the compile directory. The CBLBLD.bat
script will call the CBLBLD_MF.bat
script that will set up the directory and flags for the compiler. Then CBLBLD_MF.bat
will call CBLMAKE.bat
to compile everything in the and CBLBIN.bat
to copy the .gnt
, .int
, and .exe
files to the appropriate CBLBINx
directory.
searchCOBOLPgms
“But what if I modify a copy book that is used in lots of delivered programs? Do they compile if I only pass in PS_CUST_HOME
?” The CBLBLD.bat
script also calls the Perl script searchCOBOLPgms.ps
. This Perl script will look at the files in your PS_CUST_HOME
and look at PS_APP_HOME
and PS_HOME
to see if the copy books or programs you have modified to see if they are referenced by any delivered code. So, if you have modified a copy book (e.g, change an array size), this script will copy any program that uses the copy book to the Compile Directory. This makes the copy book change apply to all programs that use the copy book. The source files will still live in PS_APP_HOME
or PS_HOME
, but the compiled programs will be located in PS_CUST_HOME\CBLBINx
.
There is a bug with the searchCOBOLPgms.ps script. If you make a copy book change in a sub program, the searchCOBOLPgms.ps script will only copy the sub program to the Compile Directory; it doesn’t look for the sub programs’ parent program. So, it can miss programs that use a copy book during the compile. Another part of the bug (or design) is that programs that run out of
PS_APP_HOME
orPS_HOME
do not use theCBLBIN
search path inpsprcs.cfg
to find .gnt files. This is how we found the bug insearchCOBOLPgms.ps
. We had a program that needed an array increase. We modified a copy book, compiled, and re-ran the program. But, the program would still run inPS_APP_HOME\CBLBINx
and ignore the new copy book inPS_CUST_HOME\CBLBINx
. I filed an SR on that a few weeks ago; I’ll update the post when fix is posted.
UPDATE: December 1, 2015 The Oracle analyst I worked with agrees that the searchCOBOLPgms.ps
script does not account for the subprograms. When a fix is scheduled, I’ll post another update.
UPDATE: April 18, 2016 To address some of the issues with the searchCOBOLPgms.ps
script, but to also make COBOL source programs work better with selective adoption, I am starting to use a PS_APP_PATCH_HOME
in our decoupled-home setup.
Note: This was originally posted by Dan Iverson and has been transferred from a previous platform. There may be missing comments, style issues, and possibly broken links. If you have questions or comments, please contact [email protected].