DPL_Request

Issue a distributed program link request across an open pipe connected to the CICS® system on which the server (or target) application program resides.

The command is synchronous, and the TCB waits for a response from CICS. After a pipe is opened, any number of DPL requests can be issued before the pipe is closed. To the server program, the link request appears just like a standard EXEC CICS LINK request from another CICS region, and it is not aware that it is sent from a non-CICS client program using EXCI.

The syntax of the call is shown in two forms: the parameters that can be used when version_number is set to VERSION_1, and the parameters that can be used when version_number is set to VERSION_2.

Syntax

VERSION_1

CALL DFHXCIS,(version_number,return_area,user_token,call_type,
              pipe_token,pgmname,COMMAREA,COMMAREA_len,data_len,
              transid,uowid,userid,dpl_retarea,DPL_opts),
              VL,MF=(E,(1))

VERSION_2

CALL DFHXCIS,(version_number,return_area,user_token,call_type,
              pipe_token,pgmname,COMMAREA,COMMAREA_len,data_len,
              transid,uowid,userid,dpl_retarea,DPL_opts,
              transid2,ccsid,endian),
              VL,MF=(E,(1))

Parameters

version_number
A fullword binary input area that indicates the version of the external CICS interface parameter list being used. This can be set to 1 or 2 in the client program.

The equated value for this parameter in the CICS-supplied copybook DFHXCPLx (where x indicates the language) is either VERSION_1 or VERSION_2. See Return area and function call EQUATE copybooks for copybook details.

return_area
A 5-word output area to receive response and reason codes, and a message pointer field. For more details, see Return area for the EXCI CALL interface.
user_token
A 1-word input area that specifies the user token returned to the client program on the Initialize_User command.
call_type
A 1-word input area that indicates the function of the command. This must be set to 6 in the client program to indicate that the pipe is now being used for the DPL_Request call.

The equated value for this call in the CICS-supplied copybook DFHXCPLx (where x indicates the language) is DPL_REQUEST. See Return area and function call EQUATE copybooks for copybook details.

pipe_token
A 1-word input area that specifies the token returned by EXCI on the Allocate_Pipe command. It represents the pipe being used for the DPL_Request call.
pgmname
The 8-character name of the CICS application program being called as the server program.

This is either the name as specified on a predefined PROGRAM resource definition installed in the CICS server region, or as it is known to a user-written autoinstall program if the program is to be autoinstalled. The program can be defined in the CICS server region as a local program, or it can be defined as remote. Programs defined as remote enable daisy-chaining, where EXCI-CICS DPL calls become EXCI-CICS-CICS DPL calls.

COMMAREA (or null_ptr)
A variable length input area for the communications area (COMMAREA) between the client and server programs. The length is defined by COMMAREA_len.

This is the storage area that contains the data to be sent to the CICS application program. This area is also used to receive the updated COMMAREA from the CICS application program (the server program).

This parameter is optional. If it is not required, you must ensure that the CALL parameter list contains a null address for this parameter. How you do this depends on the language you are using for the non-CICS client program. For an example of a call that omits an optional parameter, see Example of EXCI CALLs with null parameters.

COMMAREA_len
A fullword binary input area. This parameter specifies the length of the COMMAREA. It is also the length of the server program's COMMAREA (EIBCALEN).

If you specify a COMMAREA, you must also specify this parameter to define the length.

This value should not exceed 24 KB if the COMMAREA is to be passed between any two CICS servers (for any combination of product/version/release). Otherwise, if you are confident that the COMMAREA will not be passed on a further LINK request, you can use a COMMAREA up to 32 KB in length.

If you do not specify a COMMAREA, this parameter is ignored.

data_len
A fullword binary input area. This parameter specifies the length of contiguous storage, from the start of the COMMAREA, to be sent to the server program.

This parameter restricts the amount of data sent to the server program, and should be used to optimize performance if, for example, the COMMAREA is large but the amount of data being passed is small.

On return from the server program, the EXCI data transformer program ensures that the COMMAREA in the non-CICS client program is the same as that of the server program. This caters for the following conditions:
  • The data returned is more than the data passed in the original COMMAREA.
  • The data returned is less than the data passed in the original COMMAREA.
  • There is no data returned because it is unchanged.
  • The server is returning null data.

The value of data_len must not be greater than the value of COMMAREA_len. A value of zero is valid and results in no data being sent to the server program.

If you do not specify a COMMAREA, this parameter is ignored.

transid (or null_ptr)
A 4-character input area that contains the id of the CICS mirror transaction under which the server program is to run. This transaction must be defined to the CICS server region, and its definition must specify:
PROGRAM(DFHMIRS)
The initial program must be the CICS supplied mirror program DFHMIRS.

Failure to specify DFHMIRS as the initial program means that a COMMAREA passed from the client application program is not passed to the CICS server program. Also, the DPL request fails and the client application program receives a response of SYSTEM_ERROR and reason SERVER_PROTOCOL_ERROR.

PROFILE(DFHCICSA)
The DFHCICSA profile specifies the correct value for the INBFMH parameter, which must be specified as INBFMH(ALL) for a mirror transaction.

When the CICS server region receives a DPL request, it attaches the mirror transaction and invokes DFHMIRS. The mirror program then passes control to the requested server program, passing the COMMAREA supplied by the client program. The COMMAREA passed to the server program is primed with the data only, the remainder of the COMMAREA being set to nulls.

The purpose of the transid parameter is to distinguish between different invocations of the server program. This enables you to run different invocations of the server program under transactions that specify different attributes. For example, you can vary the transaction priorities, or the security requirements.

A transid is optional. By default, the CICS server region uses the CICS-supplied mirror transaction, CSMI. If you do not want to specify transid, you must ensure that the CALL parameter list contains a null address for this parameter. How you do this depends on the language you are using for the non-CICS client program. For an example of a call that omits an optional parameter, see Example of EXCI CALLs with null parameters.

If you issue multiple requests in the same MVS™ unit-of-recovery, the same transid must be used in all of them.

uowid (or null_ptr)
An input area that contains a unit-of-work identifier, using the APPC architected format, that is passed on the DPL_Request for correlation purposes.

For DPL requests that are committed when the CICS program returns control to the MVS application, this parameter is optional.

For DPL requests that are part of an RRMS unit-of-recovery, null_ptr must be specified. The unit-of-work identifier that is already associated with the RRMS unit-of-recovery is used, if there is one; if not, CICS (or another RRMS resource manager) generates a unique unit-of-work identifier and associates it with the RRMS unit-of-recovery.

If you do not want to specify a uowid parameter , you must ensure that the CALL parameter list contains a null address for this parameter. How you do this depends on the language you are using for the non-CICS client program. For an example of a call that omits an optional parameter, see Example of EXCI CALLs with null parameters.

The uowid parameter is passed to the CICS server region, which uses it as the UOWID for the first unit of work executed by the CICS server program. If the server program issues intermediate sync points before returning to the client program, CICS uses the supplied uowid for the subsequent units of work, but with the two-byte sequence number incremented for each new logical unit of work. If the CICS server program updates remote resources, the client-supplied UOWID is distributed to the remote systems that own the resources.

The uowid parameter is supplied on the EXCI CALL interface for correlation purposes only, to allow units of work that originated from a particular client program to be identified in CICS. The uowid is not provided for recovery purposes between CICS and the client program.

The uowid can be a maximum of 27 bytes long and has the following format:
  • A 1-byte length field that contains the overall length of the UOWID (excluding this field).
  • A 1-byte length field that contains the length of the logical unit name (excluding this field).
  • A logical unit name field of variable length up to a maximum of 17 bytes.
    To conform to APPC architecture rules, the LUNAME must be of the form AAAAAAAA.BBBBBBBB, where AAAAAAAA is optional and:
    • AAAAAAAA and BBBBBBBB are 8-byte names separated by a period
    • If AAAAAAAA is omitted, the period must also be omitted
    • AAAAAAAA and BBBBBBBB must be type-1134 symbol strings (that is, character strings consisting of one or more EBCDIC uppercase letters A - Z and 0 - 9, the first character of which must be an uppercase letter).
  • The clock value; the middle 6 bytes of an 8-byte store clock (STCK) value.
  • A 2-byte sequence number.
If you omit a unit-of-work identifier (by specifying a null pointer), and the DPL request is not part of an RRMS unit-of-recovery, the external CICS interface generates one for you, consisting of the following:
  • A 1-byte length field set to X'1A'.
  • A 1-byte LU length field set to X'11'.
  • A 17-byte LU name consisting of:
    • An 8-byte eyecatcher set to DFHEXCIU.
    • A 1-byte field that contains a period (.)
    • A 4-byte field that contains the MVS system identifier (SYSID), in characters, under which the client is running.
    • A 4-byte field that contains the address space id (ASID) in which the MVS client program is running. The field contains the four character EBCDIC representation of the 2-byte hex address space id.
  • The clock value; the middle 6 bytes of an 8-byte store clock (STCK) value
  • A 2-byte sequence number set to X'0001'.
userid (or null_ptr)
An 8-character input area that contains the RACF® userid for user security checking in the CICS region. The external CICS interface passes this userid to the CICS server region for user resource and command security checking in the server application program.

A userid is required only if the MRO connection specifies the ATTACHSEC(IDENTIFY) attribute. If the connection specifies ATTACHSEC(LOCAL), the CICS server region applies link security checking. See Intercommunication security for information about link security on MRO connections.

See also Security for EXCI for information about external CICS interface security considerations.

This parameter is optional. However, if you do not specify a userid, the external CICS interface passes the security userid under which the client program is running. For example, if the client program is running as an MVS batch job, the external CICS interface obtains and passes the userid specified on the USER parameter of the JOB statement.

If you specify a userid, the userid under which the EXCI job is running is subject to a surrogate user check. This check is performed by the external CICS interface to ensure that the client job userid is authorized to use the userid specified on the DPL call. For more information about surrogate user security checking, see Security for EXCI.

If you want to let userid default, you must ensure that the CALL parameter list contains a null address for this parameter. How you do this depends on the language you are using for the non-CICS client program. For an example of a call that omits an optional parameter, see Example of EXCI CALLs with null parameters.

If you issue multiple requests in the same MVS unit-of-recovery, the same userid must be used in all of them. If the unit-of-recovery also includes EXEC CICS calls, you should allow the userid on all DPL_requests to default to the security userid under which the client program is running.

dpl_retarea
A 12-byte output area into which the DPL_Request processor places responses to the DPL request. Generally, these responses are from CICS, but in some cases the error detection occurs in the external CICS interface, which returns exception conditions that are the equivalent of those returned by an EXEC CICS LINK command.
This field is only meaningful in the following circumstances:
  • The response field of the EXCI return-area has a zero value
  • The EXCI return-area indicates that the server program has abended (response=USER_ERROR and reason=SERVER_ABENDED).
The 12 bytes form three fields, providing the following information:
Field 1 (fullword value)
This field is a fullword that contains a RESP value from the DPL_Request call. See Error codes for the RESP values that can be returned on a DPL_Request call.

If the DPL_Request call reaches CICS, this field contains the EIBRESP value, otherwise it contains an equivalent response set by the external CICS interface. If this field is set by the external CICS interface, RESP is further qualified by a RESP2 value in the second field.

A zero value is the normal response, which equates to EXEC_NORMAL in the return codes copybooks.

Field 2 (fullword value)
This field is a fullword that can contain a RESP2 value from the link request, further qualifying the RESP value in field 1.

If the DPL_Request call reaches CICS, the RESP2 field generally is null (CICS does not return RESP2 values across MRO links). However, if the RESP field indicates SYSIDERR (value 53), this field provides a reason code. SeeDpl_retarea return codes for more information.

If the RESP field is set by the external CICS interface, it is further qualified by a RESP2 value in this second field. For example, if the data_len parameter specifies a value greater than the COMMAREA_len parameter, the external CICS interface returns the RESP value 22 (which equates to EXEC_LENGERR in the return codes copybooks), and a RESP2 value of 13.

See the LINK conditions in LINK for full details of the possible RESP and RESP2 values.

Note: The data transformer program makes special use of the RESP2 field. If any error occurs in the transformer, the error is returned in RESP2.
Field 3 (fullword value)
The third field, a 4-character field, contains the following information:
  • The abend code if the server program abended
  • Four blanks if the server program did not abend.

If a server program abends, it is backed out to its last syncpoint, which can be the start of the task, or an intermediate syncpoint. The server program can issue intermediate syncpoints because SYNCONRETURN is forced.

DPL_opts (or null_ptr)
A 1-byte input area that indicates options to be used on the DPL_Request call.

If you omit this parameter, it defaults to the value X'00'. If you want to omit DPL_opts and let it default, ensure that the CALL parameter list contains a null address for this parameter. How you do this depends on the language you are using for the non-CICS program. For an example of a call that omits an optional parameter, see Example of EXCI CALLs with null parameters.

Currently, the DPL_opts parameter applies only to resource recovery, using the following values:

X'00'
Indicates that you specified NOSYNCONRETURN, because you want the client batch program to control resource recovery, using 2-phase commit protocols supported by MVS RRS. With this option, the CICS server region does not perform a syncpoint when the server program returns control to CICS. Furthermore, the CICS server application program must not take any explicit syncpoints, otherwise it is abended by CICS. For more information, see Resource recovery.
X'80'
indicates that SYNCONRETURN is required in the CICS server region.

SYNCONRETURN specifies that the server region is to take a syncpoint on successful completion of the server program, independently of the client program. This option does not prevent a server program from taking its own explicit syncpoints.

The equated value for this parameter in the CICS-supplied copybook DFHXCPLx (where x indicates the language) is SYNCONRETURN. See Return area and function call EQUATE copybooks for copybook details.

transid2 (or null_ptr) VERSION_2 only
A 4-character input area that contains a CICS transaction id.
The server program runs under a CICS supplied mirror transaction, CSMI or CPMI. However the transaction id made available to the server program through the EIBTRNID field in the Exec Interface Block is the one specified by the transid2 parameter. The transid2 parameter is ignored if the transid parameter is specified. The following table gives an example of different combinations of transid and transid2:
Table 1. Use of transid2
transid transid2 program executes under EIBTRNID seen by program
UTRN omitted UTRN UTRN
UTRN UEIB UTRN UTRN
omitted omitted CSMI CSMI
omitted UEIB CSMI UEIB

The transid2 parameter is useful for server programs that access DB2®, because EIBTRNID is used to determine which DB2ENTRY definition to use. Previously, EIBTRNID could only be set by using transid, which then required you to define a mirror transaction to CICS. Using transid2, EIBTRNID is set, but the mirror program executes under the CICS provided definition CSMI.

ccsid (or null_ptr)VERSION_2 only
A fullword binary input area that indicates the Coded Character Set Identifier (CCSID) of the character data contained in the COMMAREA. The ccsid parameter must be specified if character data has to be converted when the COMMAREA is passed to, or returned from, the server program. The parameter can take the following values:
-1 (X'FFFFFFFF')
Indicates that conversion of character data is required and that the source CCSID is defined in the conversion template installed in the server.
1 <= ccsid <= 65535
Indicates that conversion of character data is required and that the value specified overrides the source CCSID defined in the conversion template installed in the server.
endian (or null_ptr) VERSION_2 only
A fullword binary input area that indicates the format, big endian or little endian, for binary data contained in the COMMAREA. Big endian indicates that the leftmost byte contains the most significant digits, as used, for example, in System 390 architecture. Little endian indicates that the rightmost byte contains the most significant digits, as used, for example, in Intel architecture. The endian parameter should be specified if binary data has to be converted when the COMMAREA is passed to, or returned from, the server program. If the ccsid parameter indicates that conversion is required, but endian is not specified (defaults to null), conversion of binary data depends on what is specified in the DFHCNV conversion template installed in the server. The parameter can take the following values:
16909060 ( X'01020304')
Binary data is held in big endian format.
67305985 (X'04030201')
Binary data is held in little endian format.

Responses and reason codes

For all non-zero response codes, a unique reason code value identifies the reason for the response.

Note: All numeric response and reason code values are in decimal.
The following is a summary of the response and reason codes that the external CICS interface can return on the DPL call:
Response OK
Command executed successfully (RC 0). Reason code:
0
NORMAL
Response WARNING
The command executed successfully, but with an error (RC 4). Reason codes:
6
IRP_IOAREA_FM_FAILURE
7
SERVER_TERMINATED
Response RETRYABLE
The command failed because of setup errors but can be reissued (RC 8). Reason codes:
203
NO_CICS
204
WRONG_MVS_FOR_RRMS
205
RRMS_NOT_AVAILABLE
Response USER_ERROR
The command failed because of an error in either the client or the server (RC 12). Reason codes:
401
INVALID_CALL_TYPE
402
INVALID_VERSION_NUMBER
404
INVALID_USER_TOKEN
406
PIPE_NOT_OPEN
407
INVALID_USERID
408
INVALID_UOWID
409
INVALID_TRANSID
414
IRP_ABORT_RECEIVED
415
INVALID_CONNECTION_DEFN
416
INVALID_CICS_RELEASE
417
PIPE_MUST_CLOSE
418
INVALID_PIPE_TOKEN
421
RUNNING_UNDER_AN_IRB
422
SERVER_ABENDED
423
SURROGATE_CHECK_FAILED
425
UOWID_NOT_ALLOWED
426
INVALID_TRANSID2
427
INVALID_CCSID
428
INVALID_ENDIAN
Response SYSTEM_ERROR
The command failed (RC 16). Reason codes:
612
TRANSFORM_1_ERROR
613
TRANSFORM_4_ERROR
614
IRP_NULL_DATA_RECEIVED
615
IRP_NEGATIVE_RESPONSE
616
IRP_SWITCH_PULL_FAILURE
617
IRP_IOAREA_GM_FAILURE
619
IRP_BAD_IOAREA
620
IRP_PROTOCOL_ERROR
622
ESTAE_SETUP_FAILURE
623
ESTAE_INVOKED
624
SERVER_TIMEDOUT
625
STIMER_SETUP_FAILURE
626
STIMER_CANCEL_FAILURE
629
SERVER_PROTOCOL_ERROR
630
RRMS_ERROR
631
RRMS_SEVERE_ERROR
632
XCGUR_GETMAIN_ERROR

For information about response codes, see EXCI call response code values.

For information about the reason codes, see Response and reason codes returned on EXCI calls.