You are on page 1of 26

Reusable Component

Initial and Delta load for R/3 table EINA


Prepared by: L&T Infotech
Initial and Delta load for R/3 table EINA
Feb 2010

Table of contents
1.0 Technology Environment....................................................................4
2.0 Business Requirement Analysis.............................................................4
2.1 Problem definition.........................................................................4
2.2 Business Requirements....................................................................4
3.0 Solution Walkthrough.........................................................................5
4.0 Solution Details................................................................................6
4.1 Solution Overview..........................................................................6
4.2 Process Enhancements....................................................................7

Reusable Component Page 2 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

Record of Release

Author Sharifuddin Inamdar


Reviewer
Date of Release
Date of Publishing on Portal
Date of Emailing to
Community

Reusable Component Page 3 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

1.0 Technology Environment


SAP CRM 7.0.

2.0 Business Requirement Analysis


Table content of ECC Standard table EINA (Purchasing Info Record: General Data)
is required in CRM. Since there is no mapping table existing in CRM nor there is any
standard Adaptor to transfer this data, we’ll have to create the table and devise a
replication process in CRM.

2.1 Problem definition


ECC standard Purchasing table EINA (Purchasing Info Record: General Data) is to be
downloaded from ECC to CRM using the CRM Middleware. This is not available as
part of the standard functionality.
 Table ZEINA has to be created in CRM which will be mapping table for EINA
 Data records of EINA should be downloaded to CRM table through Initial and
Delta downloads

2.2 Business Requirements


A replication procedure is to be devised so as to replicate table contents of EINA
into a table in CRM. This CRM table needs to be updated with all the data updates
in ECC.

As a solution, a table ZEINA has been created in CRM which is an exact replica of
table EINA in ECC. Also a BDoc type is created that will be replicating ECC data
into CRM table. A complete replication procedure is devised which takes care of
Initial and Delta load of EINA data.

Reusable Component Page 4 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

3.0 Solution Walkthrough


The solution developed is given below as process steps:

1. Run Initial load of Adaptor Object: R3AS

2. Monitor Initial load: R3AM1

Reusable Component Page 5 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

3. Check BDocs for any error: SMW01

4. Check count in CRM Table ZEINA: SE16

4.0 Solution Details


4.1 Solution Overview
The solution consists of enhancements in ECC and CRM for initial download.
Initial Download
1. Creation of Z tables in CRM
2. ECC Developments - Develop extraction and mapping function modules
3. CRM Development –
a. Create BDOC type
b. Create BDOC
c. Develop validation function module
d. Develop mapping function module
e. Create adaptar Objects
Reusable Component Page 6 of 26
Initial and Delta load for R/3 table EINA
Feb 2010

The system is now ready for initial download of the tables using transaction code
R3AS.
Delta Download
Since these are standard ECC table, delta download should be activated by
enhancing the standard function module which updates the ECC database.

4.2 Process Enhancements


The process developments consist of the following steps:
 CRM - Create table ZEINA
 CRM - Create BDoc Type ZMBDOC_EINA
 ECC – Create Extraction Function Module
 ECC – Create Mapping Function Module
 ECC – Register Extraction Function Module
 ECC – Activate Delta Load
 CRM – Create Mapping Function Module
 CRM – Create Validation Function Module
 CRM – Create Adaptor Object
 CRM – Assign Validation Function Module to BDoc type

4.2.1 CRM - Create Table ZEINA

Reusable Component Page 7 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

4.2.2 CRM - Create BDoc Type ZMBDOC_EINA


Transaction: SE11
Structure
1. ZCRM_MW_EINA_CONTROL (EINA Control Segment for Root mBDOC)

2. ZCRM_MW_EINA_DATA (EINA Data within root segment)

3. ZCRM_MW_EINA_DATAX (Check list for EINA table)

4. ZCRM_MW_EINA_ROOT (Root Structure for EINA)

Reusable Component Page 8 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

5. ZCRM_MW_EINA_EXTENSION (Extension for mBDOC EINA)

Table Type
1. ZCRM_MW_EINA_ROOT_TAB (Table type for EINA root data)

Transaction: SBDM
BDoc Type
 BDOC Name: ZMBDOC_EINA (mBDOC for Purchasing Information)
 Related Data type: ZCRM_MW_EINA_EXTENSION

Reusable Component Page 9 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

Reusable Component Page 10 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

4.2.3 ECC - Create Extraction Function Module ZCRM_MW_EXTRACT_EINA


FUNCTION ZCRM_MW_EXTRACT_EINA.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(I_OBJ_NAME) LIKE BAPICRMOBJ-OBJ_NAME
*" VALUE(I_BAPICRMDH1) LIKE BAPICRMDH1 STRUCTURE BAPICRMDH1
*" EXPORTING
*" VALUE(E_STATUS) LIKE BAPICRMEXP-STATUS_EXT
*" TABLES
*" TI_TABLES STRUCTURE CRMTABLES
*" TI_RELATION STRUCTURE CRMRELA
*" TI_RANGE STRUCTURE CRMSELSTR
*"----------------------------------------------------------------------
*-----------------------------------------------------------------------------*
* Program Name : ZCRM_MW_EXTRACT_EINA *
* Object No : *
* Created by : Gaurav Gera *
* Created on : 10/05/2009 *
* Transport Request No: DE1K910268 *
*-----------------------------------------------------------------------------*
* Purpose : Extract Module for EINA *
*-----------------------------------------------------------------------------*
* Modification Logs: *
* *
* Date Programmer Change Request# Description *
* ========== =============== =============== =============== *
*-----------------------------------------------------------------------------*

* Declaration of required internal tables


* Internal table LT_CONDITION for storing the
* Where clause for a dynamic select statement:
DATA: LT_CONDITION LIKE MCONDITION OCCURS 0 WITH HEADER LINE.

Reusable Component Page 11 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

* Internal table LT_EINA for temporary storage of


* the result of the dynamic select statement:

DATA: LT_EINA LIKE EINA OCCURS 0 WITH HEADER LINE.

* Internal table LT_BAPIMTCS for converting the result set


DATA: LT_BAPIMTCS LIKE BAPIMTCS OCCURS 0 WITH HEADER LINE.
DATA: LT_MESSAGES LIKE BAPICRMMSG OCCURS 0 WITH HEADER LINE.

* Variables
DATA: LV_LOAD_HEADER LIKE BAPICRMDH2 VALUE IS INITIAL.
DATA: LV_BLOCKNO LIKE BAPICRMDH2-BLOCKNO VALUE IS INITIAL.
DATA: LV_RECORDNO LIKE BAPICRMDH2-RECORDNO VALUE IS INITIAL.
DATA: LAST_INFNR LIKE EINA-INFNR VALUE IS INITIAL.
DATA: LV_RECS_FOUND LIKE SY-DBCNT VALUE IS INITIAL.
DATA: LV_LASTBLOCK TYPE C VALUE IS INITIAL.
DATA: LV_FORCE_ERROR TYPE C VALUE IS INITIAL.
DATA: LV_USE_CRMMWTST LIKE CRM_PARA-XFELD VALUE IS INITIAL.

* Check filter conditions contained in TI_RANGE for logical


* correctness
REFRESH LT_CONDITION.
LOOP AT TI_RANGE.
IF TI_RANGE-TABLE <> GC_EINA_TAB.
MESSAGE E048(C_) WITH TI_RANGE-TABLE.
ENDIF.
ENDLOOP.

* Structure of where clause for dynamic select


CALL FUNCTION 'CRS_CREATE_WHERE_CONDITION'
* EXPORTING
* I_TABNAME =
* I_WHERE_FOR_LOOP =
TABLES
TI_RANGE = TI_RANGE
TO_COND = LT_CONDITION
* EXCEPTIONS
* INVALID_INPUT = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* Populate header structure


CALL FUNCTION 'CRS_FILL_CRMDH2_FROM_DH1'
EXPORTING
I_BAPICRMDH1 = I_BAPICRMDH1
I_LASTBLOCK = SPACE
I_BLOCKNO = LV_BLOCKNO
I_RECORDNO = LV_RECORDNO
I_UPLOADSTAT = 'S'
IMPORTING
E_BAPICRMDH2 = LV_LOAD_HEADER.

Reusable Component Page 12 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

* Read from database


* The data is read in blocks based on the block size set in the
* adapter. The last value must be stored internally.

CLEAR LAST_INFNR.
DO. " for all blocks.
LV_LOAD_HEADER-BLOCKNO = LV_LOAD_HEADER-BLOCKNO + 1.
SELECT * FROM EINA
UP TO I_BAPICRMDH1-BLOCKSIZE ROWS
INTO CORRESPONDING FIELDS OF TABLE LT_EINA
WHERE ( INFNR > LAST_INFNR )
AND (LT_CONDITION) ORDER BY PRIMARY KEY.

IF SY-DBCNT LT I_BAPICRMDH1-BLOCKSIZE.
LV_LOAD_HEADER-LASTBLOCK = GC_X.
LV_RECS_FOUND = SY-DBCNT.
else.
lv_recs_found = I_BAPICRMDH1-BLOCKSIZE.
ENDIF.

READ TABLE LT_EINA INDEX LV_RECS_FOUND.


MOVE LT_EINA-INFNR TO LAST_INFNR.

* Call the mapping module between data and BAPIMTCS container


CALL FUNCTION 'ZCRM_MW_MAP_EINA'
EXPORTING
I_OBJ_NAME = GV_OBJECT_NAME
I_BAPICRMDH1 = I_BAPICRMDH1
* IMPORTING
* E_STATUS =
TABLES
TI_EINA = LT_EINA
TE_BAPIMTCS = LT_BAPIMTCS
.

* Call CRS_SEND_TO_SERVER for the actual download into the


* CRM system
CALL FUNCTION 'CRS_SEND_TO_SERVER'
EXPORTING
I_OBJ_NAME = GV_OBJECT_NAME
I_BAPICRMDH2 = LV_LOAD_HEADER
I_OBJ_CLASS = GV_OBJECT_CLASS
TABLES
T_BAPISTRUCTURES = LT_BAPIMTCS
T_MESSAGES = LT_MESSAGES
EXCEPTIONS
DATA_NOT_SENT = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Reusable Component Page 13 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

* After each block a COMMIT WORK must be triggered. This


* triggers the actual qRFC step.
COMMIT WORK.

IF LV_LOAD_HEADER-LASTBLOCK = gc_x.
EXIT.
ENDIF.
ENDDO.

ENDFUNCTION.

Reusable Component Page 14 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

4.2.4 ECC - Create Mapping Function Module ZCRM_MW_MAP_EINA

Reusable Component Page 15 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

FUNCTION ZCRM_MW_MAP_EINA.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_OBJ_NAME) LIKE BAPICRMOBJ-OBJ_NAME
*" REFERENCE(I_BAPICRMDH1) LIKE BAPICRMDH1 STRUCTURE BAPICRMDH1
*" EXPORTING
*" REFERENCE(E_STATUS) LIKE BAPICRMEXP-STATUS_EXT
*" TABLES
*" TI_EINA STRUCTURE EINA
*" TE_BAPIMTCS STRUCTURE BAPIMTCS
*"----------------------------------------------------------------------

* Move to unicode environments


* Field Symbols

FIELD-SYMBOLS: <SOURCE> TYPE X,


<TARGET> TYPE X.

* Declaration of the variable


TYPES: BEGIN OF T_EINA,
MANDT TYPE MANDT,
INFNR TYPE INFNR,
MATNR TYPE MATNR,
LIFNR TYPE ELIFN,
LOEKZ TYPE ILOEA,
ERDAT TYPE ERDAT,
END OF T_EINA.

DATA: LT_EINA TYPE T_EINA.


DATA: LV_EINA LIKE EINA.

* Loop at table EINA to populate the fields of the BAPIMTCS container


LOOP AT TI_EINA INTO LV_EINA.
TE_BAPIMTCS-TABNAME = GC_EINA_TAB.
TE_BAPIMTCS-SEGTYPE = 'DA'.
TE_BAPIMTCS-OBJKEY = LV_EINA-INFNR.
TE_BAPIMTCS-RELKEY = LV_EINA-INFNR.

LT_EINA-MANDT = LV_EINA-MANDT.
LT_EINA-INFNR = LV_EINA-INFNR.
LT_EINA-MATNR = LV_EINA-MATNR.
LT_EINA-LIFNR = LV_EINA-LIFNR.
LT_EINA-LOEKZ = LV_EINA-LOEKZ.
LT_EINA-ERDAT = LV_EINA-ERDAT.

ASSIGN LT_EINA TO <SOURCE> TYPE 'X'.


ASSIGN TE_BAPIMTCS-DATA TO <TARGET> TYPE 'X'.
MOVE <SOURCE> TO <TARGET>.

APPEND TE_BAPIMTCS.
ENDLOOP.

ENDFUNCTION.

Reusable Component Page 16 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

4.2.5 ECC - Register Extraction Function Module CRMSUBTAB

4.2.6 ECC - Activate Delta Load


Delta download should be activated by enhancing the standard function module
ME_UPDATE_INFORECORD. This function module updates the database with purchasing
master data.

*$*$-Start: (1 )--------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZEINA_CRM_SEND. "active version
DATA lt_bapimtcs LIKE bapimtcs OCCURS 0 WITH HEADER LINE.
DATA lv_bapicrmdh2 LIKE bapicrmdh2 VALUE IS INITIAL.
DATA lv_objname LIKE crmobject-objname VALUE 'ZKONP'.
DATA: lt_eina TYPE TABLE OF eina WITH HEADER LINE.
DATA: lt_eine TYPE TABLE OF eine WITH HEADER LINE.
DATA lt_bapicrmmsg LIKE bapicrmmsg OCCURS 0 WITH HEADER LINE.
DATA: lv_bapicrmdh1 LIKE bapicrmdh1.

lv_bapicrmdh2-dwnloadtyp = 'D'.
lv_bapicrmdh2-uploadstat = 'S'.
lv_bapicrmdh2-lastblock = 'X'.
lv_bapicrmdh2-blockno = 1.
lv_bapicrmdh2-recordno = 1.

lv_bapicrmdh2-delta_op = 'I'.

* LOOP AT xeina.
MOVE-CORRESPONDING xeina TO lt_eina.
APPEND lt_eina.
* ENDLOOP.

* Call the mapping module between data and BAPIMTCS container


CALL FUNCTION 'ZCRM_MW_MAP_EINA'
EXPORTING
i_obj_name = 'ZMADP_EINA'
i_bapicrmdh1 = lv_bapicrmdh1
* IMPORTING
* E_STATUS =
TABLES
TI_EINA = lt_eina
te_bapimtcs = lt_bapimtcs
.

Reusable Component Page 17 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

CALL FUNCTION 'CRS_SEND_TO_SERVER'


EXPORTING
i_obj_name = 'ZMADP_EINA'
i_bapicrmdh2 = lv_bapicrmdh2
i_obj_class = 'EINA_CLASS'
* IMPORTING
* E_DATA_NOT_SEND =
TABLES
* T_INTERNAL_TABLES =
t_bapistructures = lt_bapimtcs
t_messages = lt_bapicrmmsg
* T_KEY_INFO =
* T_OTHER_INFO =
* T_BAPISTRUCTURES_OLD =
* TI_INIT_FILTER =
* TI_IDLIST =
EXCEPTIONS
data_not_sent =1
OTHERS =2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

* LOOP AT xeine.
MOVE-CORRESPONDING xeine TO lt_eine.
APPEND lt_eine.
* ENDLOOP.

* Call the mapping module between data and BAPIMTCS container


CALL FUNCTION 'ZCRM_MW_MAP_EINE'
EXPORTING
i_obj_name = 'ZMADP_EINE'
i_bapicrmdh1 = lv_bapicrmdh1
* IMPORTING
* E_STATUS =
TABLES
ti_eine = lt_eine
te_bapimtcs = lt_bapimtcs
.

CALL FUNCTION 'CRS_SEND_TO_SERVER'


EXPORTING
i_obj_name = 'ZMADP_EINE'
i_bapicrmdh2 = lv_bapicrmdh2
i_obj_class = 'EINE_CLASS'
* IMPORTING
* E_DATA_NOT_SEND =
TABLES
* T_INTERNAL_TABLES =
t_bapistructures = lt_bapimtcs
t_messages = lt_bapicrmmsg

Reusable Component Page 18 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

* T_KEY_INFO =
* T_OTHER_INFO =
* T_BAPISTRUCTURES_OLD =
* TI_INIT_FILTER =
* TI_IDLIST =
EXCEPTIONS
data_not_sent =1
OTHERS =2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDENHANCEMENT.
*$*$-End: (1 )--------------------------------------------------------------------------------$*$*

4.2.7 CRM – Create Mapping Function Module


ZCRM_MW_MAP_BAPIMTCS_BDOC_EINA
FUNCTION ZCRM_MW_MAP_BAPIMTCS_BDOC_EINA.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(I_OBJNAME) TYPE SMO_OBJNAM
*" VALUE(I_OBJCLASS) TYPE SMO_OBJCLA
*" VALUE(I_SENDER_SITE_TYPE) TYPE SMW1STID
*" VALUE(I_SENDER_SITE_ID) TYPE SMO_SITEID
*" VALUE(I_NO_PROCESS) TYPE SMODLTPROC
*" EXPORTING
*" VALUE(HEADER) TYPE SMW3_FHD
*" VALUE(REF_MESSAGE) TYPE REF TO DATA
*" VALUE(REF_MESSAGE_EXT) TYPE REF TO DATA
*" VALUE(OBJECT_LINKS) TYPE TRL_BORID
*" VALUE(E_DO_NOT_CALL_GDH) TYPE CRM_PARA-XFELD
*" REFERENCE(E_FLOW_LUW_HANDLING) TYPE XFELD
*" TABLES
*" TI_BAPIMTCS STRUCTURE BAPIMTCS
*" T_MESSAGES STRUCTURE BAPICRMMSG
*" TI_KEY_INFO STRUCTURE BAPICRMKEY
*" TI_OTHER_INFO STRUCTURE BAPIEXTC
*" TI_BAPIIDLIST STRUCTURE BAPIIDLIST
*" CHANGING
*" VALUE(E_BAPICRMDH2) TYPE BAPICRMDH2
*" VALUE(ERROR_SEGMENTS) TYPE SMW_ERRTAB
*"----------------------------------------------------------------------
*-----------------------------------------------------------------------------*
* Program Name : ZCRM_MW_MAP_BAPIMTCS_BDOC_EINA *
* Object No : *
* Created by : Gaurav Gera *
* Created on : 10/05/2009 *
* Transport Request No: CS1K900198 *

Reusable Component Page 19 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

*-----------------------------------------------------------------------------*
* Purpose : BDOC to BAPIMTCS Function module for EINA *
*-----------------------------------------------------------------------------*
* Modification Logs: *
* *
* Date Programmer Change Request# Description *
* ========== =============== =============== =============== *
*-----------------------------------------------------------------------------*
** Data declaration for BDOC and DDIC component of mBDOC and
* Classic BDOC part
DATA: MESSAGE TYPE ZMBDOC_EINA000 VALUE IS INITIAL.
FIELD-SYMBOLS: <BDOC> TYPE ZMBDOC_EINA000.

* Declaration for the classic DDIC part


DATA: MESSAGE_EXT TYPE ZCRM_MW_EINA_EXTENSION VALUE IS INITIAL.
FIELD-SYMBOLS: <DDIC> TYPE ZCRM_MW_EINA_EXTENSION.

* Declaration of individual segments


DATA: SEGMENT_LINE TYPE LINE OF ZMBDOC_EINA000-ZEINA_ROOT.
DATA: EXT_LINE TYPE LINE OF ZCRM_MW_EINA_EXTENSION-ZEINA_ROOT.
DATA: TRANSFER_STRUCTURE LIKE ZEINA.
DATA: LV_TASK TYPE C.

TYPES: BEGIN OF T_EINA,


MANDT TYPE MANDT,
INFNR TYPE INFNR,
MATNR TYPE MATNR,
* MATKL TYPE CHAR9,
LIFNR TYPE ELIFN,
LOEKZ TYPE ILOEA,
ERDAT TYPE ERDAT,
END OF T_EINA.
DATA: IT_EINA TYPE T_EINA.

FIELD-SYMBOLS: <SOURCE> TYPE X,


<TARGET> TYPE X.

* Create ABAP-OO references.


CREATE DATA REF_MESSAGE LIKE MESSAGE.
ASSIGN REF_MESSAGE->* TO <BDOC>.
CREATE DATA REF_MESSAGE_EXT LIKE MESSAGE_EXT.
ASSIGN REF_MESSAGE_EXT->* TO <DDIC>.

* Move BAPIMTCS container to destination mBDOC ZMBDOC_EINA.


LOOP AT TI_BAPIMTCS WHERE TABNAME = GC_TABLE AND SEGTYPE = 'DA'.
* Populate classic BDOC part

MOVE TI_BAPIMTCS-DATA TO IT_EINA.


MOVE-CORRESPONDING IT_EINA TO TRANSFER_STRUCTURE.

* Evaluate key information


IF E_BAPICRMDH2-DWNLOADTYP = 'D'.
READ TABLE TI_KEY_INFO
WITH KEY TABNAME = GC_TABLE
R3K_NAMES = GC_INFNR_KEY

Reusable Component Page 20 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

R3K_VALUES = TRANSFER_STRUCTURE-INFNR.

MOVE TRANSFER_STRUCTURE-INFNR TO SEGMENT_LINE-INFNR.


ENDIF.

*Consider the TASK field.


CASE E_BAPICRMDH2-DWNLOADTYP.
WHEN 'I'.
LV_TASK = 'I'.
WHEN 'D'.
LV_TASK = E_BAPICRMDH2-DELTA_OP.
ENDCASE.

MOVE TRANSFER_STRUCTURE-INFNR TO SEGMENT_LINE-INFNR.


MOVE TRANSFER_STRUCTURE-MATNR TO SEGMENT_LINE-MATNR.
MOVE TRANSFER_STRUCTURE-LIFNR TO SEGMENT_LINE-LIFNR.
MOVE TRANSFER_STRUCTURE-LOEKZ TO SEGMENT_LINE-LOEKZ.
MOVE TRANSFER_STRUCTURE-ERDAT TO SEGMENT_LINE-ERDAT.

APPEND SEGMENT_LINE TO <BDOC>-ZEINA_ROOT.

* Populate the extension part

MOVE-CORRESPONDING TRANSFER_STRUCTURE TO EXT_LINE-DATA.

EXT_LINE-DATAX-INFNR = GC_X.
EXT_LINE-DATAX-MATNR = GC_X.
EXT_LINE-DATAX-LIFNR = GC_X.
EXT_LINE-DATAX-LOEKZ = GC_X.
EXT_LINE-DATAX-ERDAT = GC_X.

EXT_LINE-CONTROL-TASK = E_BAPICRMDH2-DELTA_OP.
APPEND EXT_LINE TO <DDIC>-ZEINA_ROOT.
ENDLOOP.

CALL METHOD CL_SMW_MFLOW=>SET_HEADER_FIELDS


EXPORTING
IN_BDOC_TYPE = GC_BDOC
IMPORTING
OUT_HEADER = HEADER.

ENDFUNCTION.

Reusable Component Page 21 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

4.2.8 CRM – Create Validation Function Module ZCRM_MW_VALIDATION_EINA

Reusable Component Page 22 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

FUNCTION ZCRM_MW_VALIDATION_EINA.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(OPTIONS) TYPE SMW3FOPT
*" EXPORTING
*" REFERENCE(STATUS) TYPE SMWVALSTAT
*" CHANGING
*" REFERENCE(TRANSACTION_MESSAGE) TYPE ZMBDOC_EINA000
*" REFERENCE(MESSAGE_EXT) TYPE ZCRM_MW_EINA_EXTENSION
*" REFERENCE(ERROR_SEGMENTS) TYPE SMW_ERRTAB OPTIONAL
*" REFERENCE(OBJECT_LINES) TYPE TRL_BORID OPTIONAL
*" REFERENCE(HEADER) TYPE SMW3_FHD
*" EXCEPTIONS
*" TECHNICAL_ERROR
*"----------------------------------------------------------------------
*-----------------------------------------------------------------------------*
* Program Name : ZCRM_MW_VALIDATION_EINA *
* Object No : *
* Created by : Gaurav Gera *
* Created on : 10/05/2009 *
* Transport Request No: CS1K900198 *
*-----------------------------------------------------------------------------*
* Purpose : Validation Module for EINA *
*-----------------------------------------------------------------------------*
* Modification Logs: *
* *
* Date Programmer Change Request# Description *
* ========== =============== =============== =============== *
*-----------------------------------------------------------------------------*
DATA: LT_MESSAGES TYPE TABLE OF BAPICRMMSG.
DATA: LT_ZEINA_INSERT TYPE ZEINA OCCURS 0.
DATA: LT_ZEINA_UPDATE TYPE ZEINA OCCURS 0.
DATA: LT_ZEINA_DELETE TYPE ZEINA OCCURS 0.
DATA: LV_ZEINA TYPE ZEINA VALUE IS INITIAL.
DATA: LV_ZEINA_SEG TYPE ZCRM_MW_EINA_ROOT.

* Transfer the data of the extension part into internal


* table depending on the task.

LOOP AT MESSAGE_EXT-ZEINA_ROOT INTO LV_ZEINA_SEG.


CLEAR LV_ZEINA.
MOVE-CORRESPONDING LV_ZEINA_SEG-DATA TO LV_ZEINA.
CASE LV_ZEINA_SEG-CONTROL-TASK.
WHEN 'U'. " Update existing entries
APPEND LV_ZEINA TO LT_ZEINA_UPDATE.
WHEN 'I'. " Insert new entries
APPEND LV_ZEINA TO LT_ZEINA_INSERT.
WHEN 'D'. " delete entries
APPEND LV_ZEINA TO LT_ZEINA_DELETE.
ENDCASE.

ENDLOOP.

* Update database table from internal ABAP tables

Reusable Component Page 23 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

IF NOT LT_ZEINA_UPDATE[] IS INITIAL.


UPDATE ZEINA FROM TABLE LT_ZEINA_UPDATE.
* Return the status to the flow
IF SY-SUBRC NE 0.
STATUS = CL_SMW_MFLOW=>C_VALSTAT_ERROR.
ELSE.
STATUS = CL_SMW_MFLOW=>C_VALSTAT_SUCCESS.
ENDIF.
ENDIF.

IF NOT LT_ZEINA_INSERT[] IS INITIAL.


MODIFY ZEINA FROM TABLE LT_ZEINA_INSERT.
* Return the status to the flow
IF SY-SUBRC NE 0.
STATUS = CL_SMW_MFLOW=>C_VALSTAT_ERROR.
ELSE.
STATUS = CL_SMW_MFLOW=>C_VALSTAT_SUCCESS.
ENDIF.
ENDIF.

IF NOT LT_ZEINA_DELETE[] IS INITIAL.


DELETE ZEINA FROM TABLE LT_ZEINA_DELETE.
* Return the status to the flow
IF SY-SUBRC NE 0.
STATUS = CL_SMW_MFLOW=>C_VALSTAT_ERROR.
ELSE.
STATUS = CL_SMW_MFLOW=>C_VALSTAT_SUCCESS.
ENDIF.
ENDIF.

ENDFUNCTION.

4.2.9 CRM – Create Adaptor Object ZMADP_EINA


First create this Object in R3AC3 and change the Object Class from CUSTOMISING to a
new class EINA_CLASS. After changing the class, the object will be visible in R3AC1

Reusable Component Page 24 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

Reusable Component Page 25 of 26


Initial and Delta load for R/3 table EINA
Feb 2010

4.2.10 CRM – Assign Validation Function Module to BDoc type SMW3BDOCIF

Reusable Component Page 26 of 26

You might also like