CICS and IMS SDK

The CICS and IMS SDK supports customer-specific tagging that uses either standard Dynatrace tags or customer-supplied custom tags. OneAgent includes additional APIs that let you add nodes to an existing PurePath and associate arguments and return values with them. This SDK is part of the CICS and IMS code modules. It requires no additional license.

The API supports all common z/OS languages.

Each API call returns an integer value to indicate failure, or zero to indicate success. See the list of return codes below.

See OneAgent SDK for general tagging information.

Include API function declarations

zos/sdk/0-include-cobol.cbl
Download
//SZDTLOAD  DD  DISP=SHR,DSN=_hlq_.SZDTLOAD
...
  INCLUDE SZDTLOAD(DTSTUB)

You can download and use these include and sample files:

API naming conventions

Each function name starts with DT, followed by characters that define the purpose of the function and an optional suffix that indicates the argument type.

 DTaaaabb
 ^ ^   ^
 | |   `- Parameter type:
 | |       - 'TN'  text - null terminated string
 | |       - 'TP'  text - PL/I string
 | |       - 'TF'  text - fixed length string
 | |       - 'A'   byte array
 | |       - 'S'   16-bit signed integer
 | |       - 'I'   32-bit signed integer
 | |       - 'L'   64-bit signed integer
 | |
 | `-- Method type:
 |      - 'SP'   Start PurePath
 |      - 'SLP'  Start linked PurePath
 |      - 'SCLP' Start linked PurePath with custom tag
 |      - 'IL'   Insert link
 |      - 'ICL'  Insert link with custom tag
 |      - 'IAL'  Insert asynchronous link
 |      - 'IACL' Insert asynchronous link with custom tag
 |      - 'EP'   End PurePath
 |      - 'EN'   Enter
 |      - 'EX'   Exit
 |      - 'EXEX' Exit with Exception
 |      - 'DC'   Data Capture
 |
   `---- 'DT' prefix

Start PurePath

Start a new CICS or IMS PurePath that is unrelated to any existing PurePath.

Note that CICS LINKs, CICS STARTs, and IMS program to program message switches initiated by the transaction being traced automatically create their own linked subpaths.

zos/sdk/1-start-purepath-cobol.cbl
Download
CALL "DTSP" RETURNING RC.
CALL "DTSPTF" USING FIXED_LEN_STRING, LENGTH, CCSID RETURNING RC.

Parameters

c_string PurePath name specified as a null-terminated string.
pli_string PurePath name specified as a PLI varying string.
fixed_len_string PurePath name specified as a fixed-length string with an explicit length.
length Length of the specified fixed-length string.
ccsid Coded character set identifier for the string. Specify a value of zero (0) to use the CICS or IMS region's default code page.

Start linked PurePath

Start a CICS or IMS PurePath that is a continuation of another PurePath, typically in response to an inbound service request from another platform.

Note that CICS LINKs, CICS STARTs, and IMS program to program message switches initiated by the transaction being traced automatically create their own linked subpaths.

zos/sdk/2-start-linked-purepath-cobol.cbl
Download
CALL "DTSLPA" USING BINARYTAG, LENGTH RETURNING RC.
CALL "DTSCLPA" USING CUSTOMTAG, LENGTH RETURNING RC.
CALL "DTSLPTF" USING FIXED_LEN_STRING, LENGTH RETURNING RC.

Parameters

binarytag Standard binary tag specified as a byte array.
customtag Custom tag specified as a byte array.
c_string Standard string tag specified as a null-terminated string.
pli_string Standard string tag specified as a PLI varying string.
fixed_len_string Standard string tag specified as a fixed-length string with an explicit length.
length Length of the specified fixed-length string or byte array. Note that this is the length of the tag, not the buffer.

End PurePath

Terminate the current PurePath created by a Start PurePath or Start Linked PurePath API call.

The End PurePath API may not be required because the PurePath ends automatically at the end of the transaction, or when another Start PurePath or Start Linked PurePath API is used in the same transaction to trace another input message. End PurePath should be used before a long running transaction waits for another input message to arrive.

When used, End PurePath must be issued by the same transaction that issued the Start PurePath or Start Linked PurePath, regardless of CICS LINKs, CICS STARTs, or IMS program to program message switches which create their own linked subpaths automatically, which are independent of the SDK.

zos/sdk/3-end-purepath-cobol.cbl
Download
CALL "DTEP" RETURNING RC.

Parameters

None

Link the current PurePath to another PurePath, typically in response to an outbound request from the CICS or IMS application to a server on another platform.

The string or array used with these APIs returns a new tag that is sent with the outbound request, but DTICLA requires the caller to supply a custom tag.

Parameters

binarytag Standard binary tag returned as a byte array (output).
customtag Custom tag specified as a byte array (input).
c_string Standard string tag returned as a null-terminated string (output).
pli_string Standard string tag returned as a PLI varying string (output).
fixed_len_string Standard string tag returned as a fixed-length string with an explicit length (output).
length Length of the supplied byte array (input).
tag_buffer_len Length of the supplied buffer that is used to return the new tag (input).

Also used as an output parameter by DTILA and DTILTF to return the actual length of the returned array or string.

Link the current PurePath to another PurePath, typically in response to an outbound request from the CICS or IMS application to a server on another platform.

This feature is very similar to the Insert link with important difference that it inserts links for outbound requests that do not necessarily operate in a synchronous manner.

The string or array used with these APIs returns a new tag that is sent with the outbound request, but DTIACLA requires the caller to supply a custom tag.

Parameters

binarytag Standard binary tag returned as a byte array (output).
customtag Custom tag specified as a byte array (input).
c_string Standard string tag returned as a null-terminated string (output).
pli_string Standard string tag returned as a PLI varying string (output).
fixed_len_string Standard string tag returned as a fixed-length string with an explicit length (output).
length Length of the supplied byte array (input).
tag_buffer_len Length of the supplied buffer that returns the new tag (input). Also used as an output parameter by DTIALA and DTIALTF to return the actual length of the returned array or string.

Enter node

Add a node to the currently active CICS or IMS subpath to indicate the execution start of a new program or activity.

The number of Exit node and Exit node with exception API calls must equal the number of Enter node API calls. Subpaths with unbalanced numbers of Enter and Exit API calls are marked as corrupted.

Typically, this API is used by the program calling the named program but it could also be issued at the beginning of the called program. The Enter node API returns a 32-but integer token that must be saved so it can be specified on the associated Exit node or Exit node with exception API call.

zos/sdk/6-enter-node-cobol.cbl
Download
CALL "DTENTF" USING FIXED_LEN_STRING, LENGTH, TOKEN RETURNING RC.

Parameters

c_string Program name specified as a null-terminated string.
pli_string Program name specified as a PLI varying string.
fixed_len_string Program name specified as a fixed-length string with an explicit length.
length Length of the specified fixed-length string.
token A 32-bit binary integer token used to associate this node with the corresponding Exit (output).

Exit node

Indicate that the program or activity associated with the most recent Enter Node API call has ended.

Each Exit Node or Exit Node with Exception request pairs with the most recent Enter node request. Subpaths with unbalanced numbers of Enter and Exit API calls are marked as corrupted.

Related Enter node and Exit node calls should be issued by the same program in most cases. This is so an Exit does not attempt to end a node associated with a program with its own node due to a LE call, CICS LINK, or IMS program to program message switch invoked since the most recent Enter node API call.

zos/sdk/7-exit-node-cobol.cbl
Download
''CALL "DTEX" USING TOKEN RETURNING RC.

Parameters

token The 32-bit integer token that was returned by the most recent DTEN API call.

Exit node with exception

Indicate that the program or activity associated with the most recent Enter node API call ended with an error.

Each Exit node or Exit node with exception request pairs with the most recent Enter node request. Subpaths with unbalanced numbers of Enter and Exit API calls are marked as corrupted.

Related Enter node and Exit node calls should be issued by the same program in most cases. This is so an Exit does not attempt to end a node associated with a program with its own node due to a LE call, CICS LINK, or IMS program to program message switch invoked since the most recent Enter node call.

zos/sdk/8-exit-node-exception-cobol.cbl
Download
CALL "DTEXEX" USING TOKEN RETURNING RC.

Parameters

token The 32-bit integer token that was returned by the most recent DTEN API call.

Data capture

Provide an argument capture value for a subsequent Enter node call, or the return value for a subsequent Exit node or Exit node with exception call.

Multiple Data capture calls may be issued before an Enter node call, but only one return value may be associated with an Exit call.

An Enter or Exit call should always immediately follow one or more Data capture calls to prevent the captured value being unintentionally associated with another node.

zos/sdk/9-data-capture-cobol.cbl
Download
CALL "DTDCS" USING INT16_VALUE RETURNING RC.
CALL "DTDCI" USING INT32_VALUE RETURNING RC.
CALL "DTDCL" USING INT64_VALUE RETURNING RC.
CALL "DTDCTF" USING FIXED_LEN_STRING, LENGTH, CCSID RETURNING RC.

Parameters

c_string Capture value specified as a null-terminated string.
pli_string Capture value specified as a PLI varying string.
fixed_len_string Capture value specified as a fixed-length string with an explicit length.
length Length of the specified fixed-length string.
ccsid Coded character set identifier for the string. Specify a value of zero (0) to use the CICS or IMS region's default code page.
int16_value A 16-bit signed binary value such as a COBOL PIC S9(5) COMP, PLI FIXED BIN 15. C short int, or assembler fullword.
int32_value A 32-bit signed binary value such as a COBOL PIC S9(9) COMP, PLI FIXED BIN 31. C int, or assembler fullword (F).
int64_value A 64-bit signed binary value such as a COBOL PIC S9(18) COMP, PLI FIXED BIN 63. C long long int, or assembler doubleword (FD).

API return codes

All API calls return an integer value.

Return Code API Types Action Description
0 All As documented Success
4 Start PurePath

Start liked PurePath

Start linked PurePath with custom tag
None A PurePath is already in progress for this transaction.
4 Data capture

Enter node

Exit node

Exit node with exception

End PurePath

Insert link

Insert link with custom tag

Insert asynchronous link

Insert asynchronous link with custom tag
None No PurePath is in progress for this transaction at this time.
8 End PurePath None A different code module started the PurePath that is in progress for this transaction.
8 Start liked PurePath None The specified tag's format is invalid or the specified string length doesn't match the actual string tag length.
8 Insert link

Insert asynchronous link
None The supplied buffer is too small to hold the tag.
8 Exit node

Exit node with exception
None The supplied token is not valid.
12 Start PurePath None The specified PurePath name is too long.
12 Start liked PurePath

Start linked PurePath with custom tag

Insert link with custom tag

Insert asynchronous link with custom tag
None The specified tag length is negative or too long.
12 Data capture None The specified capture string is too long (currently limited to 200 bytes).
12 Enter node None The specified node name is too long (currently limited to 8 bytes).
16 Start liked PurePath None A dummy tag was specified.
2000 All Correct calling program A program check occurred in the CICS or IMS agent while handling an SDK call. This is presumably caused by an incorrect argument.

Negative return codes

A negative return code generally indicates that the Agent is not available, so the application program should continue on the assumption that tracing isn't being performed.

In a CICS environment, the CICS DFHRMCAL interface passes SDK requests to the CICS agent's task related user exit (TRUE). DFHRMCAL returns undocumented negative values such as -2 if the agent is not active. If negative return codes are encountered, you can use the DTAX transaction to see whether the Agent is enabled.

In an IMS environment, a negative return code also indicates that the IMS agent is not available. Return code -1 means the IMS agent is not installed in this IMS subsystem. Return code -4 means the IMS agent is installed but has been disabled. Return code -5 indicates that the installation process is not completed in this dependent region. Return code -5 is expected if the SDK starts a Purepath in the first transaction to execute after the message region starts or the IMS agent is enabled. Initialization may take a second or two, so this condition may occur for more than one transaction at startup.

Contact support if the SDK returns negative return codes while other transactions in the affected dependent region are traced successfully.

API notes

The CICS and IMS SDK supports COBOL, PL/I, Assembler, and C/C++. PL/I and C provide include members that declare the API functions.

COBOL programs must specify a type such as PIC S9(9) that corresponds to a binary fullword for integer variables such as RC, LENGTH (not a valid COBOL variable name), CCSID, and TAG_BUFER_LEN. Array or string variables can be declared as PIC X(##).

All character string values assume the default EBCDIC code page of the CICS or IMS region unless the API accepts an explicit CCSID override.

The binary tag length is 30 bytes and a string tag may be up to 77 bytes. The tag_buffer_len specifying the area length to hold an output tag argument must be set as follows:

  • DTILA and DTIALA API—30 or more.
  • DTILTF and DTIALTF API—77 or more.
  • DTILTN and DTIALTN API—78 or more to allow for a null terminator byte.
  • DTILTP and DTIALTP API—79 or more to allow for the halfword string length.

Use a buffer size somewhat larger than these minimum sizes to minimize compatibility issues with future releases.

Input string arguments are limited to a maximum length of 200 bytes. This limit does not include the two byte length of a PLI varying string or the null terminator byte of a null terminated string, just the text contents of the string.