*-------------------------------------------------------------------*
* Report Name: ZORAPLNT
* Generated At: Monday, May 02, 2005 11:37:55
* CPI-C Special Notes:
* 1) To execute this job, user type must be CPI-c.
* 2) Add communication partner in TXCOM using SM54.
*-------------------------------------------------------------------*


REPORT ZORAPLNT.


* Step 1. Declare Table
TABLES:
     T001W,
     T001K.


* Step 2. Declare Structure
DATA:  BEGIN OF ST_1 OCCURS 1,
         F_1(4) TYPE C, " For T001W~WERKS,
         F_2(30) TYPE C, " For T001W~NAME1,
         F_3(30) TYPE C, " For T001W~NAME2,
         F_4(30) TYPE C, " For T001W~STRAS,
         F_5(10) TYPE C, " For T001W~PFACH,
         F_6(25) TYPE C, " For T001W~ORT01,
         F_7(10) TYPE C, " For T001W~PSTLZ,
         F_8(4) TYPE C, " For T001K~BUKRS,
         F_9(4) TYPE C, " For T001K~BWKEY,
         F_10(3) TYPE C, " For T001W~LAND1,
         F_11(3) TYPE C, " For T001W~REGIO,
         F_12(4) TYPE C, " For T001W~EKORG,
END OF ST_1.
DATA:  IT_1 LIKE ST_1 OCCURS 0 WITH HEADER LINE.


* Declare Structure for INTO clause
DATA:  BEGIN OF ST_2 OCCURS 1,
         F_1 LIKE T001W-WERKS, " For T001W~WERKS,
         F_2 LIKE T001W-NAME1, " For T001W~NAME1,
         F_3 LIKE T001W-NAME2, " For T001W~NAME2,
         F_4 LIKE T001W-STRAS, " For T001W~STRAS,
         F_5 LIKE T001W-PFACH, " For T001W~PFACH,
         F_6 LIKE T001W-ORT01, " For T001W~ORT01,
         F_7 LIKE T001W-PSTLZ, " For T001W~PSTLZ,
         F_8 LIKE T001K-BUKRS, " For T001K~BUKRS,
         F_9 LIKE T001K-BWKEY, " For T001K~BWKEY,
         F_10 LIKE T001W-LAND1, " For T001W~LAND1,
         F_11 LIKE T001W-REGIO, " For T001W~REGIO,
         F_12 LIKE T001W-EKORG, " For T001W~EKORG,
END OF ST_2.


* Step 3. Table and structure for CPI-C
TABLES:  TCPIC.
INCLUDE: RSCPICDF.


* Step 4. Declare CPI-C communication variables
DATA:  COM_ID(8)     TYPE C,    " Communication ID
       COM_IN(100)   TYPE C,    " Init signal buffer
       COM_D(4)      TYPE X,    " Dataset Info
       COM_S(4)      TYPE X,    " Status Info
       COM_L(4)      TYPE X,    " Buffer Length
       D_PACK(32000) TYPE C,    " CPI-C Data Pack
       D_OFFSET      TYPE I,    " Offset
       D_LEN         TYPE I.    " Next Pack Length


DATA: PARAM_1 LIKE T001W-SPRAS. " For DS_JOB_PARAM@SAPExtractLangCode


EXIT.


*-------------------------------------------------------------------*
* Form CPIC is a dynamic call and will be used by                    
* communication partner like DataStage.                              
*-------------------------------------------------------------------*


FORM CPIC.
* Step 5. CPI-C Initialization
*-------------------------------------------------------------------*
* Establish communication, get communication ID                      
*-------------------------------------------------------------------*
COMMUNICATION ACCEPT ID COM_ID.
IF SY-SUBRC <> 0.
    EXIT.
ENDIF.




PERFORM RECEIVE_PARAMETER.


D_PACK = ''.
D_OFFSET = 0.
D_LEN = D_OFFSET + 157.
CLEAR IT_1.
REFRESH IT_1.
SELECT

      T001W~WERKS 

      T001W~NAME1 

      T001W~NAME2 

      T001W~STRAS 

      T001W~PFACH 

      T001W~ORT01 

      T001W~PSTLZ 

      T001K~BUKRS 

      T001K~BWKEY 

      T001W~LAND1 

      T001W~REGIO 

      T001W~EKORG

INTO (ST_2-F_1,
      ST_2-F_2,
      ST_2-F_3,
      ST_2-F_4,
      ST_2-F_5,
      ST_2-F_6,
      ST_2-F_7,
      ST_2-F_8,
      ST_2-F_9,
      ST_2-F_10,
      ST_2-F_11,
      ST_2-F_12)
FROM

T001W AS T001W 

INNER JOIN 

T001K AS T001K 

ON T001W~MANDT = T001K~MANDT AND 

T001W~BWKEY = T001K~BWKEY

WHERE

T001W~SPRAS = PARAM_1.
 IT_1-F_1 = ST_2-F_1. 
 IT_1-F_2 = ST_2-F_2. 
 IT_1-F_3 = ST_2-F_3. 
 IT_1-F_4 = ST_2-F_4. 
 IT_1-F_5 = ST_2-F_5. 
 IT_1-F_6 = ST_2-F_6. 
 IT_1-F_7 = ST_2-F_7. 
 IT_1-F_8 = ST_2-F_8. 
 IT_1-F_9 = ST_2-F_9. 
 IT_1-F_10 = ST_2-F_10. 
 IT_1-F_11 = ST_2-F_11. 
 IT_1-F_12 = ST_2-F_12. 
      IF D_LEN < 32000.
         D_PACK+D_OFFSET(157) = IT_1.
         D_OFFSET = D_OFFSET + 157.
         D_LEN = D_OFFSET + 157.
         CLEAR IT_1.
         REFRESH IT_1.
      ELSE.
         PERFORM SEND_RECORD USING D_PACK.
         D_PACK = IT_1.
         D_OFFSET = 157.
         D_LEN = D_OFFSET + 157.
      ENDIF.
ENDSELECT.
PERFORM SEND_RECORD USING D_PACK.


ENDFORM.


*-------------------------------------------------------------------*
* Send one record to communication partner                          
*-------------------------------------------------------------------*
FORM SEND_RECORD USING P_REC_BUF.
    COMMUNICATION SEND ID COM_ID BUFFER P_REC_BUF LENGTH D_OFFSET.
    IF SY-SUBRC <> 0.
        COMMUNICATION DEALLOCATE ID COM_ID.
        EXIT.
    ENDIF.
ENDFORM.


*-------------------------------------------------------------------*
* Receive parameter sent from DataStage side                         
*-------------------------------------------------------------------*
FORM RECEIVE_PARAMETER.
DATA: PARAM(10)  TYPE C.
DATA: VALUE(100) TYPE C.
DATA: POS        TYPE I.
    COM_S = 0.
    WHILE COM_S = 0.
      COM_IN = ''.
      COMMUNICATION RECEIVE ID COM_ID BUFFER COM_IN DATAINFO COM_D
                    STATUSINFO COM_S
                    RECEIVED   COM_L.
      IF SY-SUBRC <> CM_OK AND SY-SUBRC <> CM_DEALLOCATED_NORMAL.
         EXIT.
      ENDIF.
      SEARCH COM_IN FOR '='.
      IF SY-SUBRC = 0.
         POS = SY-FDPOS.
         PARAM = COM_IN+0(POS).
         POS = POS + 1.
         VALUE = COM_IN+POS.
         IF PARAM = 'PARAM_1' OR PARAM = 'PARAM_1 '.
            PARAM_1 = VALUE.
         ENDIF.
     ENDIF.
     ENDWHILE.
ENDFORM.
