COMMUNICATION


Variants



1. COMMUNICATION INIT DESTINATION dest ID id.
2. COMMUNICATION ALLOCATE ID id.
3. COMMUNICATION ACCEPT ID id.
4. COMMUNICATION SEND ID id BUFFER f.
5. COMMUNICATION RECEIVE ID id
...BUFFER f
...DATAINFO d
...STATUSINFO s.
6. COMMUNICATION DEALLOCATE ID id.


The COMMUNICATION statement allows you to develop applications which perform direct program-to-program communication. The basis for this is CPI-C (Common Programming Interface - Coummunication), defined by IBM within the context of SAA standards as a standardized communications interface. The COMMUNICATION statement provides the essential parameters for implementing simple communication. Its starter set covers the following functionality:
Establishing a connection Accepting a communication Sending data Receiving data Closing a connection
The other essential part of such a communication is an ABAP/4 program containing a FORM routine which is executed when the connection has been established. This program may be in an R/3 System or an R/2> System. Here, you should be aware that the application programs themselves declare a protocol. In particular, logon to the partner SAP System must be performed in the calling program. The partner programs must also manage different character sets, e.g. ASCII - EBCDIC themselves. A facility known as the Remote Function Call ( RFC ) has now been developed to save users from having to deal with these problems. External programs (e.g. a program written in C on a UNIX workstation) can also be used as partner programs. For this purpose, SAP provides a platform-specific development library. For more detailed information about communication in the SAP System, you can refer to the manual
SAP Communication: Programming
Further information about communication can be found in any of the following literature:

IBM SAA
Common Programming Interface
Communication Reference
SC 26-4399

X/Open Developers' Specification CPI-C
X/Open Company Ltd.
ISBN 1 872630 02 2

Variant 1

COMMUNICATION INIT DESTINATION dest ID id.

Addition

... RETURNCODE rc

Effect

Initializes a program-to-program connection.

The partner system is specified in the dest field. You can use any name you like, but it must be entered in the connection table TXCOM and can be no more than 8 characters long. This entry in TXCOM determines to which physical system a connection is established using the symbolic name of the target system.

In the field id , the system assigns an eight-character ID number of type C to the connection. The system field SY-SUBRC contains an appropriate return code value.
All return codes can be read using their symbolic names. For this purpose, you can use the program RSCPICDF which contains these names and can be included, if required.

Addition

... RETURNCODE rc

Effect

Stores the return code in the field rc .

Example

TYPES: CONVERSATION_ID(8) TYPE C, DESTINATION(8) TYPE C, RETURN_CODE LIKE SY-SUBRC. DATA: CONVID TYPE CONVERSATION_ID, DEST TYPE DESTINATION VALUE 'C00', CPIC_RC TYPE RETURN_CODE. INCLUDE RSCPICDF. COMMUNICATION INIT DESTINATION DEST ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC. EXIT. ENDIF.

Variant 2

COMMUNICATION ALLOCATE ID id.

Addition

As for variant 1.

Effect

Sets up a program-to-program connection. The call must immediately follow COMMUNICATION INIT .

Example

TYPES: CONVERSATION_ID(8) TYPE C, DESTINATION(8) TYPE C, RETURN_CODE LIKE SY-SUBRC. DATA: CONVID TYPE CONVERSATION_ID, DEST TYPE DESTINATION VALUE 'C00', CPIC_RC TYPE RETURN_CODE. INCLUDE RSCPICDF. COMMUNICATION INIT DESTINATION DEST ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC. EXIT. ENDIF. COMMUNICATION ALLOCATE ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: /'COMMUNICATION ALLOCATE, RC = ', CPIC_RC. EXIT. ENDIF.

Variant 3

COMMUNICATION ACCEPT ID id.

Addition

As for variant 1.

Effect

Accepts a connection requested by the partner program. id is a field of type C which is 8 characters long and contains the ID of the accepted connection after a successful call.

Example

FORM CPIC_EXAMPLE. TYPES: CONVERSATION_ID(8) TYPE C, RETURN_CODE LIKE SY-SUBRC. DATA: CONVID TYPE CONVERSATION_ID, CPIC_RC TYPE RETURN_CODE. INCLUDE RSCPICDF. COMMUNICATION ACCEPT ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. EXIT. ENDIF. ENDFORM.

Variant 4

COMMUNICATION SEND ID id BUFFER f.

Additions

1. ... RETURNCODE rc
2. ... LENGTH len

Effect

Sends data to the partner program. The data is stored in the field f which follows the key word parameter BUFFER . It is sent in the full length of the field f . If the partner program is part of a system which has a different character set, you must perform an appropriate conversion yourself. To do this, use the TRANSLATE statement.

Addition 1

... RETURNCODE rc

Effect

Stores the return code in the field rc .

Addition 2

... LENGTH leng

Effect

Sends the contents of the field f to the partner program in the specified length.

Example

TYPES: CONVERSATION_ID(8) TYPE C, DESTINATION(8) TYPE C, RETURN_CODE LIKE SY-SUBRC. DATA: CONVID TYPE CONVERSATION_ID, DEST TYPE DESTINATION VALUE 'C00', CPIC_RC TYPE RETURN_CODE. INCLUDE RSCPICDF. COMMUNICATION INIT DESTINATION DEST ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: /'COMMUNICATION INIT, RC = ', CPIC_RC. EXIT. ENDIF. COMMUNICATION ALLOCATE ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: /'COMMUNICATION ALLOCATE, RC = ', CPIC_RC. EXIT. ENDIF. RECORD = 'The quick brown fox jumps over the lazy dog'. COMMUNICATION SEND ID CONVID BUFFER RECORD LENGTH LENG RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC. EXIT. ENDIF.

Since the length is specified explicitly in this example, only the part ' The quick brown fox ' is transferred from the contents of the field RECORD .

Variant 5

COMMUNICATION RECEIVE ID id ...BUFFER f ...DATAINFO d ...STATUSINFO s.

Additions

1. ... RETURNCODE rc
2. ... LENGTH leng
3. ... RECEIVED m
4. ... HOLD

Effect

Receives data in the field f . If no length is explicitly defined, the amount of data accepted depends on the length of the field. The fields d and s contain information about the receive process. You can address the contents of these using symbolic names in the include program RSCPICDF . The field d indicates whether the data was received in its entirety. The status field s informs the RECEIVE user of the status of the program. Here, it is important to know whether the program is in receive status or send status. It is, for example, not possible to send data if the program is in receive status.
For more detailed information about these protocol questions, refer to the manuals listed above.

Addition 1

... RETURNCODE rc

Effect

Stores the return code in the field rc .

Addition 2

... LENGTH leng

Effect

Receives data only in the specified length leng .

Addition 3

... RECEIVED m

Effect

After the call, m contains the number of bytes received by the partner program.

Addition 4

... HOLD

Effect

Normally, data is received asynchronously, i.e. the system performs a rollout. However, this may not be desirable if, for example, the data is received in a SELECT loop, the database cursor is lost due to the rollout and the loop is terminated. To prevent a rollout, you can use the addition HOLD . Then, the SAP process waits until the data has been received and is thus available for use by other users.

Note

The fields d , s and m which contain information about the outcome of the call must be of type X with length 4.

Example

FORM CPIC_EXAMPLE. TYPES: CONVERSATION_ID(8) TYPE C, RETURN_CODE LIKE SY-SUBRC, C_INFO(4) TYPE X. DATA: CONVID TYPE CONVERSATION_ID, CPIC_RC TYPE RETURN_CODE, RECORD(80) TYPE C, DINFO TYPE C_INFO, SINFO TYPE C_INFO. INCLUDE RSCPICDF. COMMUNICATION ACCEPT ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. EXIT. ENDIF. COMMUNICATION RECEIVE ID CONVID BUFFER RECORD STATUSINFO SINFO DATAINFO DINFO RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. EXIT. ENDIF. ENDFORM.

Variant 6

COMMUNICATION DEALLOCATE ID id.

Addition




As for variant 1

Effect

Severs connection and releases all resources.

Example

TYPES: CONVERSATION_ID(8) TYPE C, DESTINATION(8) TYPE C, RETURN_CODE LIKE SY-SUBRC, C_INFO(4) TYPE X. DATA: CONVID TYPE CONVERSATION_ID, CPIC_RC TYPE RETURN_CODE, DEST TYPE DESTINATION VALUE 'C00'. DATA: RECORD(80) TYPE C, LENG TYPE I VALUE 20. INCLUDE RSCPICDF. COMMUNICATION INIT DESTINATION DEST ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION INIT, RC = ', CPIC_RC. EXIT. ENDIF. COMMUNICATION ALLOCATE ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC. EXIT. ENDIF. RECORD = 'The quick brown fox jumps over the lazy dog'. COMMUNICATION SEND ID CONVID BUFFER RECORD LENGTH LENG RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC. EXIT. ENDIF. COMMUNICATION DEALLOCATE ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION DEALLOCATE, RC = ', CPIC_RC. EXIT. ENDIF.

Note

The above examples illustrate the basic functionality of the key words. However, the example program can only have an external system as partner. If the partner is an SAP System, the calling program must first logon to the SAP System and receive an acknowledgement. Only then can you begin to transmit the actual data. When logging on to an R2 System and an R3 System, the logon data must be converted to EBCDIC . All user data should be converted according to the partner system. This is in the concluding example of an R/3 - R/2 connection.

Example

PROGRAM ZCPICTST. TYPES: CONVERSATION_ID(8) TYPE C, DESTINATION(8) TYPE C, RETURN_CODE LIKE SY-SUBRC, C_INFO(4) TYPE X. DATA: BEGIN OF CONNECT_STRING, REQID(4) VALUE 'CONN', TYPE(4) VALUE 'CPIC', MODE(4) VALUE '1 ', MANDT(3) VALUE '000', NAME(12) VALUE 'CPICUSER', PASSW(8) VALUE 'CPIC', LANGU(1) VALUE 'D', KORRV(1), REPORT(8) VALUE 'ZCPICTST', FORM(30) VALUE 'CPIC_EXAMPLE', END OF CONNECT_STRING. DATA: CONVID TYPE CONVERSATION_ID, DEST TYPE DESTINATION VALUE 'R2-SYST', CPIC_RC TYPE RETURN_CODE, DINFO TYPE C_INFO, SINFO TYPE C_INFO. DATA: RECORD(80) TYPE C, LENG TYPE I VALUE 20. INCLUDE RSCPICDF. COMMUNICATION INIT DESTINATION DEST ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION INIT, RC = ', CPIC_RC. EXIT. ENDIF. COMMUNICATION ALLOCATE ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC. EXIT. ENDIF. * Convert logon data to EBCDIC TRANSLATE CONNECT_STRING TO CODE PAGE '0100'. COMMUNICATION SEND ID CONVID BUFFER CONNECT_STRING. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION ALLOCATE, RC = ', CPIC_RC. EXIT. ENDIF. * Receive acknowledgement of logon COMMUNICATION RECEIVE ID CONVID BUFFER RECORD DATAINFO DINFO STATUSINFO SINFO RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION RECEIVE, RC = ', CPIC_RC. EXIT. ENDIF. * Convert acknowledgement to ASCII TRANSLATE RECORD FROM CODE PAGE '0100'. * Now begin user-specific data exchange RECORD = 'The quick brown fox jumps over the lazy dog'. * Depending on the partner system, convert to another * character set TRANSLATE RECORD TO CODE PAGE '0100'. COMMUNICATION SEND ID CONVID BUFFER RECORD LENGTH LENG RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION SEND, RC = ', CPIC_RC. EXIT. ENDIF. COMMUNICATION DEALLOCATE ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. WRITE: / 'COMMUNICATION DEALLOCATE, RC = ', CPIC_RC. EXIT. ENDIF. PROGRAM ZCPICTST. INCLUDE RSCPICDF. * The receiving procedure in the relevant partner program follows FORM CPIC_EXAMPLE. TYPES: CONVERSATION_ID(8) TYPE C, RETURN_CODE LIKE SY-SUBRC, C_INFO(4) TYPE X. DATA: CONVID TYPE CONVERSATION_ID, CPIC_RC TYPE RETURN_CODE, RECORD(80) TYPE C, DINFO TYPE C_INFO, SINFO TYPE C_INFO. COMMUNICATION ACCEPT ID CONVID RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK. EXIT. ENDIF. COMMUNICATION RECEIVE ID CONVID BUFFER RECORD STATUSINFO SINFO DATAINFO DINFO RETURNCODE CPIC_RC. IF CPIC_RC NE CM_OK AND CPIC_RC NE CM_DEALLOCATED_NORMAL. EXIT. ENDIF. ENDFORM.


Index
SAP AG 1996