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