*-------------------------------------------------------------------*
* Report Name: ZPART01
* Generated At: Wednesday, April 27, 2005 10:45:01
* CPI-C Special Notes:
* 1) To execute this job, user type must be CPI-c.
* 2) Add communication partner in TXCOM using SM54.
*-------------------------------------------------------------------*


REPORT ZPART01.


* Step 1. Declare Table
TABLES:
     MARA,
     MAKT.


* Step 2. Declare Structure
DATA:  BEGIN OF ST_1 OCCURS 1,
         F_1(18) TYPE C, " For MARA~MATNR,
         F_2(40) TYPE C, " For MARA~MFRPN,
         F_3(10) TYPE C, " For MARA~MFRNR,
         F_4(3) TYPE C, " For MARA~MEINS,
         F_5(40) TYPE C, " For MAKT~MAKTX,
         F_6(1) TYPE C, " For MAKT~SPRAS,
         F_7(40) TYPE C, " For MAKT~MAKTG,
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 MARA-MATNR, " For MARA~MATNR,
         F_2 LIKE MARA-MFRPN, " For MARA~MFRPN,
         F_3 LIKE MARA-MFRNR, " For MARA~MFRNR,
         F_4 LIKE MARA-MEINS, " For MARA~MEINS,
         F_5 LIKE MAKT-MAKTX, " For MAKT~MAKTX,
         F_6 LIKE MAKT-SPRAS, " For MAKT~SPRAS,
         F_7 LIKE MAKT-MAKTG, " For MAKT~MAKTG,
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 MAKT-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 + 152.
CLEAR IT_1.
REFRESH IT_1.
SELECT

      MARA~MATNR 

      MARA~MFRPN 

      MARA~MFRNR 

      MARA~MEINS 

      MAKT~MAKTX 

      MAKT~SPRAS 

      MAKT~MAKTG

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)
FROM

MARA AS MARA 

INNER JOIN 

MAKT AS MAKT 

ON MARA~MANDT = MAKT~MANDT AND 

MARA~MATNR = MAKT~MATNR

WHERE

MAKT~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. 
      IF D_LEN < 32000.
         D_PACK+D_OFFSET(152) = IT_1.
         D_OFFSET = D_OFFSET + 152.
         D_LEN = D_OFFSET + 152.
         CLEAR IT_1.
         REFRESH IT_1.
      ELSE.
         PERFORM SEND_RECORD USING D_PACK.
         D_PACK = IT_1.
         D_OFFSET = 152.
         D_LEN = D_OFFSET + 152.
      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.
