When designing an application program, you must define service routines (also known as program units) in which you define the services to be provided by your application. These service routines can be programmed in one of the common programming languages (C/C++/COBOL).
Through the integration of UTM calls, the service routines access the UTM system functions, e.g. for transaction management, sending and receiving messages etc. (see also chapter "Program interfaces").
The service routines are assigned transaction codes (TACs) either during generation using the KDCDEF statement TAC, or during operation using the KC_CREATE_OBJECT call for the object type KC_TAC. The transaction codes are freely selectable names used by terminal users, clients, or other programs to start the service routines.
To ensure that the service routines can run under the management of openUTM, the compiled service routines are linked to the UTM application program (see "Generating the application program") together with other modules (allocation tables, messages, libraries used, etc.). As an alternative to the static linking of the service routines, these can be dynamically linked when an application process is started or the first time a service is called.
One part of the application program is the main routine KDCROOT, which acts as the main control program and is responsible for coordinating job sequences.
Figure 30: Structure of a UTM application program