What is a Service Program on the IBM i System?

An IBM-i Service Program is a collection of reusable procedures and data items that can be accessed by other Integrated Language Environment (ILE) programs or service programs on the IBM i (AS400/iSERIES) system.

Here are some key points about service programs:

  • Modularity: Service programs allow you to encapsulate commonly used procedures and data, promoting code reuse and modularity
  • Binding: Unlike standalone programs, service programs are bound to the calling program at runtime. This means they are not physically copied into the calling program but are linked dynamically
  • Exporting Procedures: Only the procedures and data items explicitly exported from the service program are accessible to other programs. This allows for a controlled interface
  • Binder Language: The binder language is used to define the list of procedures and data items that can be exported. This helps manage changes and maintain compatibility with existing programs
  • Updating: Service programs can be updated without needing to recompile the programs that use them, as long as the interface remains compatible

We reference the Service Program Procedures in the calling program. The service program is created and is loaded into memory when the calling program uses one of the service program procedures.

For example, imagine a service program had these procedures in it:

// Module with procedures
DCL-PROC AddNumbers;
 DCL-PI *N INT(10);
  NUM1 INT(10);
  NUM2 INT(10);
 END-PI;
 RETURN NUM1 + NUM2;
END-PROC;

DCL-PROC SubtractNumbers;
 DCL-PI *N INT(10);
  NUM1 INT(10);
  NUM2 INT(10);
 END-PI;
 RETURN NUM1 - NUM2;
END-PROC;

In this example, 'AddNumbers' and 'SubtractNumbers' are procedures within a module that are included in a service program. 

A regular program would need to be told that it is using a service program - by adding a BNDDIR or the SRVPGM name to its control specification

// regular program might use the subtract number procedure like this

eval fatnumber = 256;
eval tinynumber = 7;

eval result = SubtractNumber (fatnumber:tinynumber);

We would create this using the CRTSRVPGM command:

// Create the service program
CRTSRVPGM SRVPGM(MYLIB/MYSRVPGM) MODULE(MYLIB/MYMODULE) EXPORT(*ALL)

The 'CRTSRVPGM' command creates the service program and specifies that all procedures in the module should be exported.

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
>