<?xml version="1.0" encoding="utf-16"?>
<nugget name="ZCL_CUSTOM_RETRACTOR">
 <CLAS CLSNAME="ZCL_CUSTOM_RETRACTOR" VERSION="1" LANGU="E" DESCRIPT="Custom R/3 Retractor" UUID="DD25B844AC6C89F1821C001E0B909728" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" CHGDANYON="00000000" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="700" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 ">
  <types CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAPPING" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="1 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" TYPTYPE="4" SRCROW1="6 " SRCCOLUMN1="4 " SRCROW2="10 " SRCCOLUMN2="22 " R3RELEASE="700" TYPESRC_LENG="162 " TYPESRC="BEGIN OF _mapping,
         /bic/zret_map   TYPE char30,
         /bic/zret_iobj  TYPE char30,
         /bic/zret_defv  TYPE char30,
       END OF  _mapping
"/>
  <implementing CLSNAME="ZCL_CUSTOM_RETRACTOR" REFCLSNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK" VERSION="1" EXPOSURE="2" STATE="1" AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" RELTYPE="1"/>
  <implementing CLSNAME="ZCL_CUSTOM_RETRACTOR" REFCLSNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF" VERSION="1" EXPOSURE="2" STATE="1" AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" RELTYPE="1"/>
  <publicSection>CLASS zcl_custom_retractor DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

*&quot;* public components of class ZCL_CUSTOM_RETRACTOR
*&quot;* do not include other source files here!!!
  PUBLIC SECTION.

    INTERFACES if_rsplfa_srvtype_imp_check .
    INTERFACES if_rsplfa_srvtype_imp_exec_ref .</publicSection>
  <protectedSection>*&quot;* protected components of class ZCL_RSPLFC_COPY_KF_MAP
*&quot;* do not include other source files here!!!
protected section.</protectedSection>
  <privateSection>*&quot;* private components of class ZCL_CUSTOM_RETRACTOR
*&quot;* do not include other source files here!!!
PRIVATE SECTION.

  TYPES:
    BEGIN OF _mapping,
         /bic/zret_map   TYPE char30,
         /bic/zret_iobj  TYPE char30,
         /bic/zret_defv  TYPE char30,
       END OF  _mapping .

  DATA p_infoprov        TYPE rsinfoprov .
  DATA p_r_srv           TYPE REF TO if_rsplfa_srv .
  DATA p_source_system   TYPE logsys .
  DATA p_run_type        TYPE c .
  DATA p_ret_type        TYPE char10 .
  DATA p_structure       TYPE tabname .
  DATA p_dload_fm        TYPE funcname .
  DATA p_pload_fm        TYPE funcname .
  DATA:
    pt_map_fields        TYPE TABLE OF _mapping .

  METHODS _get_parameter_values
    IMPORTING
      !i_r_param_set     TYPE REF TO if_rsplfa_param_set
      !i_param TYPE rsplf_parnm
    RETURNING
      value(r_parameter) TYPE string .

  METHODS _get_parameters
    IMPORTING
      !i_r_param_set     TYPE REF TO if_rsplfa_param_set .

  METHODS _map_fields
    IMPORTING
      !i_ref_data        TYPE any
      !i_r_msg           TYPE REF TO if_rsplfa_msg
    CHANGING
      value(c_map_data) TYPE any
    EXCEPTIONS
      no_map .</privateSection>
  <localImplementation>*&quot;* local class implementation for public class
*&quot;* use this source file for the implementation part of
*&quot;* local helper classes</localImplementation>
  <localTypes>*&quot;* use this source file for any type declarations (class
*&quot;* definitions, interfaces or data types) you need for method
*&quot;* implementation or private method&apos;s signature</localTypes>
  <localMacros>*&quot;* use this source file for any macro definitions you need
*&quot;* in the implementation part of the class</localMacros>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="PT_MAP_FIELDS" VERSION="1" LANGU="E" DESCRIPT="Field Mapping Definition" EXPOSURE="0" STATE="1" EDITORDER="9 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="4" SRCROW1="21 " SRCCOLUMN1="4 " SRCROW2="21 " SRCCOLUMN2="46 " R3RELEASE="700" TYPESRC_LENG="45 " TYPESRC="pt_map_fields        TYPE TABLE OF _mapping
"/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_DLOAD_FM" VERSION="1" LANGU="E" DESCRIPT="R/3 Data Load Function Module" EXPOSURE="0" STATE="1" EDITORDER="7 " AUTHOR="SIMMONITEA" CREATEDON="20080602" CHANGEDON="00000000" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="FUNCNAME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_INFOPROV" VERSION="1" LANGU="E" DESCRIPT="InfoProvider" EXPOSURE="0" STATE="1" EDITORDER="1 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="RSINFOPROV" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_PLOAD_FM" VERSION="1" LANGU="E" DESCRIPT="R/3 Post Load Function Module" EXPOSURE="0" STATE="1" EDITORDER="8 " AUTHOR="SIMMONITEA" CREATEDON="20080602" CHANGEDON="00000000" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="FUNCNAME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_RET_TYPE" VERSION="1" LANGU="E" DESCRIPT="Retractor Type" EXPOSURE="0" STATE="1" EDITORDER="5 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="CHAR10" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_RUN_TYPE" VERSION="1" LANGU="E" DESCRIPT="Test Run" EXPOSURE="0" STATE="1" EDITORDER="4 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="C" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_R_SRV" VERSION="1" LANGU="E" DESCRIPT="Planning Function Service" EXPOSURE="0" STATE="1" EDITORDER="2 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="IF_RSPLFA_SRV" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_SOURCE_SYSTEM" VERSION="1" LANGU="E" DESCRIPT="Logical system" EXPOSURE="0" STATE="1" EDITORDER="3 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="LOGSYS" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_STRUCTURE" VERSION="1" LANGU="E" DESCRIPT="Mapping Structure" EXPOSURE="0" STATE="1" EDITORDER="6 " AUTHOR="SIMMONITEA" CREATEDON="20080602" CHANGEDON="00000000" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="TABNAME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_CHAR_USAGE">
   <source>method IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_CHAR_USAGE.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* There are no characteristics that are changing in a retractor         *
*                                                                       *
*=======================================================================*

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_PARAM_SET">
   <source>method IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_PARAM_SET.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method checks the parameters of the planning function.            *
*                                                                       *
*=======================================================================*

  DATA: lr_ref_param_elem  TYPE REF TO if_rsplfa_param_elem,
        lr_param_elem      TYPE REF TO if_rsplfa_param_elem,

        l_parameter        TYPE string,
        l_dummy            TYPE c.
*
* Get R/3 Source System Parameter.
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;SOURCE_SYSTEM&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter NP &apos;SOURCE_SYSTEM*&apos;.
    MESSAGE e099(rsplf) WITH &apos;Source System Parameter must be of type&apos; &apos;SOURCE_SYSTEM*&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Retractor Type.
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RETRACTOR_TYPE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter IS INITIAL.
    MESSAGE e099(rsplf) WITH &apos;Retractor Type must be selected&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Retractor Mapping Structure
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RETRACTOR_STRUCTURE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter NP &apos;STRUCTURE*&apos;.
    MESSAGE e099(rsplf) WITH &apos;Mapping Structure must be of type&apos; &apos;STRUCTURE*&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Data Load Function Module
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;DATA_LOAD_FM&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter NP &apos;DATA_LOAD_FM*&apos;.
    MESSAGE e099(rsplf) WITH &apos;Data Load FM must be of type&apos; &apos;DATA_LOAD_FM*&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Post Load Function Module
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;POST_LOAD_FM&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter IS NOT INITIAL.
    IF l_parameter NP &apos;POST_LOAD_FM*&apos;.
      MESSAGE e099(rsplf) WITH &apos;Post Load FM must be of type&apos; &apos;POST_LOAD_FM*&apos; INTO l_dummy.
      i_r_msg-&gt;add_msg_with_param_context( ).
      EXIT.
    ENDIF.
  ENDIF.
*
* Check Test Run Parameter
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RUN_TYPE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter &lt;&gt; &apos;TEST_RUN&apos; AND l_parameter &lt;&gt; &apos;ACTUAL_RUN&apos;.
    MESSAGE e099(rsplf) WITH &apos;Parameter must be set to either &apos; &apos;TEST_RUN or ACTUAL_RUN.&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK~INIT_CHECK">
   <source>method IF_RSPLFA_SRVTYPE_IMP_CHECK~INIT_CHECK.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method is to check the planning service implementation detail     *
*                                                                       *
*=======================================================================*

  p_r_srv = i_r_srv.

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~ADD_NEW_BLOCKS">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~ADD_NEW_BLOCKS.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* There is no Blocking in a retractor so, all selected data is used in  *
* in the EXECUTE method.                                                *
*                                                                       *
*=======================================================================*

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~EXECUTE">
   <source>METHOD if_rsplfa_srvtype_imp_exec_ref~execute.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method executed for each data block and implements the specific   *
* coding.                                                               *
*                                                                       *
* Table I_TH_REF_DATA contains the reference data.                      *
* Table C_TH_DATA contains the changed / new records                    *
*                                                                       *
*=======================================================================*

  DATA: lth_data       TYPE REF TO data,
        lth_map        TYPE REF TO data,
        lt_msg         TYPE TABLE OF bapiret2,

        l_ref          TYPE REF TO data,
        l_map          TYPE REF TO data,

        l_subrc        TYPE sy-subrc,
        l_count        TYPE i,
        l_dummy        TYPE c.

  FIELD-SYMBOLS:
        &lt;lth_data&gt;     TYPE ANY TABLE,
        &lt;lth_map&gt;      TYPE ANY TABLE,
        &lt;l_map&gt;        TYPE ANY,
        &lt;ls_msg&gt;       TYPE bapiret2,
        &lt;ls_ref_data&gt;  TYPE ANY.
*
* Create work area for reference data
*
  CREATE DATA l_ref   LIKE LINE OF i_th_ref_data.
  ASSIGN l_ref-&gt;*     TO &lt;ls_ref_data&gt;.
  CHECK &lt;ls_ref_data&gt; IS ASSIGNED.
*
* Create work area for buffer data
*
  CREATE DATA lth_data LIKE c_th_data.
  ASSIGN lth_data-&gt;*     TO &lt;lth_data&gt;.
  CHECK &lt;lth_data&gt; IS ASSIGNED.
*
* Get Retractor Parameter Values.
*
  me-&gt;_get_parameters( i_r_param_set = i_r_param_set ).
*
* Define Mapping structure.
*
  SELECT COUNT(*)
  INTO   l_count
  FROM   dd02l
  WHERE  tabname = p_structure.

  IF l_count = 0.

    MESSAGE e099(rsplf)
    WITH    &apos;Mapping Structure does not exist.&apos;
    INTO l_dummy.

    i_r_msg-&gt;add_msg( ).
    EXIT.

  ENDIF.

  CREATE DATA lth_map TYPE TABLE OF (p_structure).
  ASSIGN lth_map-&gt;*     TO &lt;lth_map&gt;.
  CHECK &lt;lth_map&gt; IS ASSIGNED.

  CREATE DATA l_map LIKE LINE OF &lt;lth_map&gt;.
  ASSIGN l_map-&gt;*     TO &lt;l_map&gt;.
  CHECK &lt;l_map&gt; IS ASSIGNED.
*
* Loop at the reference data to do the copy
*
  LOOP AT i_th_ref_data INTO &lt;ls_ref_data&gt;.
*
* Map Data Fields to Structure.
*
    me-&gt;_map_fields( EXPORTING  i_ref_data = &lt;ls_ref_data&gt;
                                i_r_msg    = i_r_msg
                     CHANGING   c_map_data = &lt;l_map&gt;
                     EXCEPTIONS no_map = 1
                                OTHERS = 2 ).

    IF sy-subrc &lt;&gt; 0.
      l_subrc = 4.
      EXIT.
    ENDIF.

    COLLECT &lt;l_map&gt; INTO &lt;lth_map&gt;.

  ENDLOOP.
*
* Execute Data Load Function Module, if mapping succeeds.
*
  IF l_subrc = 0.
*
* Execute Data Load Function Module
*
    CALL FUNCTION p_dload_fm
      DESTINATION p_source_system
      EXPORTING
        i_test_run = p_run_type
      IMPORTING
        e_t_msg    = lt_msg
      CHANGING
        i_t_data   = &lt;lth_map&gt;.
*
* Output Message From Remote Function Module.
*
    l_subrc = 0.

    LOOP AT lt_msg ASSIGNING &lt;ls_msg&gt;.

      sy-msgty = &lt;ls_msg&gt;-type.
      sy-msgid = &lt;ls_msg&gt;-id.
      sy-msgno = &lt;ls_msg&gt;-number.
      sy-msgv1 = &lt;ls_msg&gt;-message_v1.
      sy-msgv2 = &lt;ls_msg&gt;-message_v2.
      sy-msgv3 = &lt;ls_msg&gt;-message_v3.
      sy-msgv4 = &lt;ls_msg&gt;-message_v4.

      IF &lt;ls_msg&gt;-type = &apos;E&apos;  &quot; Error
      OR &lt;ls_msg&gt;-type = &apos;A&apos;. &quot; Abort
        l_subrc = 4.
      ENDIF.

      i_r_msg-&gt;add_msg( ).

    ENDLOOP.
*
* Return if the previous Step Failed.
*
    IF l_subrc &lt;&gt; 0.
      RETURN.
    ENDIF.
*
* Execute Post Load Function Module, if defined,
*
    IF p_pload_fm IS NOT INITIAL.
*
* Execute Remote Function Module.
*
      CALL FUNCTION p_pload_fm
        DESTINATION p_source_system
        EXPORTING
          i_test_run = p_run_type
        IMPORTING
          e_t_msg    = lt_msg.
*
* Output Message From Remote Function Module.
*
      LOOP AT lt_msg ASSIGNING &lt;ls_msg&gt;.

        sy-msgty = &lt;ls_msg&gt;-type.
        sy-msgid = &lt;ls_msg&gt;-id.
        sy-msgno = &lt;ls_msg&gt;-number.
        sy-msgv1 = &lt;ls_msg&gt;-message_v1.
        sy-msgv2 = &lt;ls_msg&gt;-message_v2.
        sy-msgv3 = &lt;ls_msg&gt;-message_v3.
        sy-msgv4 = &lt;ls_msg&gt;-message_v4.

        i_r_msg-&gt;add_msg( ).
      ENDLOOP.

    ENDIF.

  ENDIF.

ENDMETHOD.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~FINISH_EXECUTION">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~FINISH_EXECUTION.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method is called at the end of processing, after the last call    *
* of EXECUTE.                                                           *
*                                                                       *
* It performs closing operations such as releasing resources.           *
*                                                                       *
*=======================================================================*


endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~GET_REF_DATA_SEL">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~GET_REF_DATA_SEL.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* This method determines the selection table for reference data.        *
*                                                                       *
* I_T_DATA_CHARSEL is a table of the planning function Filter           *
* E_T_REF_CHARSEL  is a table of the reference data                     *
*                                                                       *
* This method is called by method INIT_EXECUTION after initialization.  *
*                                                                       *
* For the EXECUTE method, the reference data is passed in parameter     *
* I_TH_REF_DATA for each data block.                                    *
*                                                                       *
*=======================================================================*

*
* Data Selection from Global Filter.
*
  e_t_ref_charsel = i_t_data_charsel.

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~INIT_EXECUTION">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~INIT_EXECUTION.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method is called once at the start of a planning function and     *
* is used for evaluating the class attributes prior to processing.      *
*                                                                       *
*=======================================================================*

  DATA: lx_error      TYPE REF TO cx_rs_error,
        ls_msg        TYPE bal_s_msg,
        l_dummy       TYPE c.
*
* Get Planning Function Attributes.
*
  TRY.
      p_r_srv           = i_r_srv.                        &quot; Planning Function Service
      p_infoprov        = i_r_srv-&gt;get_infoprov( ).       &quot; InfoProvider

*=======================================================================*
    CATCH cx_rs_error INTO lx_error.
      &quot; Catch Error on Planning Function Initialization.
*=======================================================================*

      ls_msg = lx_error-&gt;get_message( ).
      MESSAGE ID ls_msg-msgid
      TYPE       &apos;E&apos;
      NUMBER     ls_msg-msgno
      WITH       ls_msg-msgv1
                 ls_msg-msgv2
                 ls_msg-msgv3
                 ls_msg-msgv4
      INTO l_dummy.
      i_r_msg-&gt;add_msg( ).

  ENDTRY.

endmethod.</source>
  </interfaceMethod>
  <method CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETERS" VERSION="1" LANGU="E" DESCRIPT="Get Function Parameter values" EXPOSURE="0" STATE="1" EDITORDER="2 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="700" BCMTDCAT="00" BCMTDSYN="0">
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETERS" SCONAME="I_R_PARAM_SET" VERSION="1" LANGU="E" DESCRIPT="Parameter Record (Values)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_RSPLFA_PARAM_SET"/>
   <source>method _GET_PARAMETERS.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method gets the retractor parameter values for processing         *
*                                                                       *
*=======================================================================*

  DATA: lr_ref_param_elem  TYPE REF TO if_rsplfa_param_elem,
        lr_param_elem      TYPE REF TO if_rsplfa_param_elem,

        l_parameter        TYPE string.
*
* Get Retractor Parameters
*
  p_source_system = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;SOURCE_SYSTEM&apos;).

  p_structure     = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;RETRACTOR_STRUCTURE&apos;).

  p_dload_fm      = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;DATA_LOAD_FM&apos;).

  p_pload_fm      = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;POST_LOAD_FM&apos;).

  p_run_type      = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;RUN_TYPE&apos;).
*
* Get Retractor Type.
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RETRACTOR_TYPE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).
  p_ret_type = l_parameter.
*
* Get Mapping Table.
*
  SELECT *
  INTO  CORRESPONDING FIELDS OF TABLE pt_map_fields
  FROM  /bic/pzret_map
  WHERE /bic/zret_type = p_ret_type.

endmethod.</source>
  </method>
  <method CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" VERSION="1" LANGU="E" DESCRIPT="Get a Specific Parameter Values" EXPOSURE="0" STATE="1" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="700" BCMTDCAT="00" BCMTDSYN="0">
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" SCONAME="I_R_PARAM_SET" VERSION="1" LANGU="E" DESCRIPT="Parameter Record (Values)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_RSPLFA_PARAM_SET"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" SCONAME="I_PARAM" VERSION="1" LANGU="E" DESCRIPT="Parameter" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="RSPLF_PARNM"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" SCONAME="R_PARAMETER" VERSION="1" LANGU="E" DESCRIPT="Parameter Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="STRING"/>
   <source>method _GET_PARAMETER_VALUES.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method gets a parameter value from ZRET_PAR                       *
*                                                                       *
*=======================================================================*

  DATA: lr_ref_param_elem  TYPE REF TO if_rsplfa_param_elem,
        lr_param_elem      TYPE REF TO if_rsplfa_param_elem,

        l_parameter        TYPE string.
*
* Get Parameter
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = i_param ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).
*
* Get Parameter Value.
*
  SELECT SINGLE txtmd
  INTO   r_parameter
  FROM   /bic/tzret_par
  WHERE  /bic/zret_par = l_parameter.

endmethod.</source>
  </method>
  <method CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" VERSION="1" LANGU="E" DESCRIPT="Map data fields to data structure" EXPOSURE="0" STATE="1" EDITORDER="3 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="700" BCMTDCAT="00" BCMTDSYN="0">
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="I_REF_DATA" VERSION="1" LANGU="E" DESCRIPT="Input Data" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ANY"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="I_R_MSG" VERSION="1" LANGU="E" DESCRIPT="Messages" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_RSPLFA_MSG"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="C_MAP_DATA" VERSION="1" LANGU="E" DESCRIPT="Mapped fields" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602" PARDECLTYP="2" PARPASSTYP="0" TYPTYPE="1" TYPE="ANY"/>
   <exception CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="NO_MAP" VERSION="1" LANGU="E" DESCRIPT="No Mapping" MTDTYPE="0" EDITORDER="1 " AUTHOR="SIMMONITEA" CREATEDON="20080518" CHANGEDBY="SIMMONITEA" CHANGEDON="20080602"/>
   <source>method _MAP_FIELDS.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method maps the InfoObject or constant to the retractor structure *
*                                                                       *
*=======================================================================*

  DATA: l_dummy        TYPE c,
        l_constant     TYPE char30.

  FIELD-SYMBOLS:
        &lt;l_map_fields&gt; TYPE _mapping,
        &lt;l_ref_field&gt;  TYPE ANY,
        &lt;l_map_field&gt;  TYPE ANY.

  CLEAR c_map_data.
*
* For each element in the mapping table.
*
  LOOP AT pt_map_fields ASSIGNING &lt;l_map_fields&gt;.

    UNASSIGN: &lt;l_map_field&gt;, &lt;l_ref_field&gt;.
*
* Assign the Retractor Structure element.
*
    ASSIGN COMPONENT &lt;l_map_fields&gt;-/bic/zret_map OF STRUCTURE c_map_data TO &lt;l_map_field&gt;.

    IF &lt;l_map_field&gt; IS NOT ASSIGNED.

      MESSAGE e099(rsplf)
      WITH    &apos;Mapping field&apos; &lt;l_map_fields&gt;-/bic/zret_map &apos;does not exist in structure in&apos; p_structure
      INTO l_dummy.

      i_r_msg-&gt;add_msg( ).
      RAISE no_map.

    ENDIF.
*
* Assign the InfoObject
*
    IF &lt;l_map_fields&gt;-/bic/zret_iobj IS NOT INITIAL.

      ASSIGN COMPONENT &lt;l_map_fields&gt;-/bic/zret_iobj OF STRUCTURE i_ref_data TO &lt;l_ref_field&gt;.

      IF &lt;l_ref_field&gt; IS NOT ASSIGNED.

        MESSAGE e099(rsplf)
        WITH    &apos;Mapping field&apos; &lt;l_map_fields&gt;-/bic/zret_iobj &apos;does not exist in infoprovider &apos; p_infoprov
        INTO l_dummy.

        i_r_msg-&gt;add_msg( ).
        RAISE no_map.

      ENDIF.

    ELSE.
*
* Assign the Constant
*
      l_constant = &lt;l_map_fields&gt;-/bic/zret_defv.

      ASSIGN l_constant TO &lt;l_ref_field&gt;.

      IF &lt;l_ref_field&gt; IS NOT ASSIGNED.

        MESSAGE e099(rsplf)
        WITH    &apos;There is no Mapping definition for &apos; &lt;l_map_fields&gt;-/bic/zret_map
        INTO l_dummy.

        i_r_msg-&gt;add_msg( ).
        RAISE no_map.

      ENDIF.

    ENDIF.

    &lt;l_map_field&gt; = &lt;l_ref_field&gt;.

  ENDLOOP.

endmethod.</source>
  </method>
 </CLAS>
 <CLAS CLSNAME="ZCL_CUSTOM_RETRACTOR" VERSION="1" LANGU="E" DESCRIPT="Custom R/3 Retractor" UUID="DD25B844AC6C89F1821C001E0B909728" CATEGORY="00" EXPOSURE="2" STATE="1" RELEASE="0" AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" CHGDANYON="00000000" CLSFINAL="X" CLSCCINCL="X" FIXPT="X" UNICODE="X" R3RELEASE="700" CLSBCCAT="00" DURATION_TYPE="0 " RISK_LEVEL="0 ">
  <types CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAPPING" VERSION="1" LANGU="E" EXPOSURE="0" STATE="1" EDITORDER="1 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" TYPTYPE="4" SRCROW1="6 " SRCCOLUMN1="4 " SRCROW2="10 " SRCCOLUMN2="22 " R3RELEASE="700" TYPESRC_LENG="162 " TYPESRC="BEGIN OF _mapping,
         /bic/zret_map   TYPE char30,
         /bic/zret_iobj  TYPE char30,
         /bic/zret_defv  TYPE char30,
       END OF  _mapping
"/>
  <implementing CLSNAME="ZCL_CUSTOM_RETRACTOR" REFCLSNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK" VERSION="1" EXPOSURE="2" STATE="1" AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" RELTYPE="1"/>
  <implementing CLSNAME="ZCL_CUSTOM_RETRACTOR" REFCLSNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF" VERSION="1" EXPOSURE="2" STATE="1" AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" RELTYPE="1"/>
  <publicSection>CLASS zcl_custom_retractor DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

*&quot;* public components of class ZCL_CUSTOM_RETRACTOR
*&quot;* do not include other source files here!!!
  PUBLIC SECTION.

    INTERFACES if_rsplfa_srvtype_imp_check .
    INTERFACES if_rsplfa_srvtype_imp_exec_ref .</publicSection>
  <protectedSection>*&quot;* protected components of class ZCL_RSPLFC_COPY_KF_MAP
*&quot;* do not include other source files here!!!
protected section.</protectedSection>
  <privateSection>*&quot;* private components of class ZCL_CUSTOM_RETRACTOR
*&quot;* do not include other source files here!!!
PRIVATE SECTION.

  TYPES:
    BEGIN OF _mapping,
         /bic/zret_map   TYPE char30,
         /bic/zret_iobj  TYPE char30,
         /bic/zret_defv  TYPE char30,
       END OF  _mapping .

  DATA p_infoprov        TYPE rsinfoprov .
  DATA p_r_srv           TYPE REF TO if_rsplfa_srv .
  DATA p_source_system   TYPE logsys .
  DATA p_run_type        TYPE c .
  DATA p_ret_type        TYPE char10 .
  DATA p_structure       TYPE tabname .
  DATA p_dload_fm        TYPE funcname .
  DATA p_pload_fm        TYPE funcname .
  DATA:
    pt_map_fields        TYPE TABLE OF _mapping .

  METHODS _get_parameter_values
    IMPORTING
      !i_r_param_set     TYPE REF TO if_rsplfa_param_set
      !i_param TYPE rsplf_parnm
    RETURNING
      value(r_parameter) TYPE string .

  METHODS _get_parameters
    IMPORTING
      !i_r_param_set     TYPE REF TO if_rsplfa_param_set .

  METHODS _map_fields
    IMPORTING
      !i_ref_data        TYPE any
      !i_r_msg           TYPE REF TO if_rsplfa_msg
    CHANGING
      value(c_map_data) TYPE any
    EXCEPTIONS
      no_map .</privateSection>
  <localImplementation>*&quot;* local class implementation for public class
*&quot;* use this source file for the implementation part of
*&quot;* local helper classes</localImplementation>
  <localTypes>*&quot;* use this source file for any type declarations (class
*&quot;* definitions, interfaces or data types) you need for method
*&quot;* implementation or private method&apos;s signature</localTypes>
  <localMacros>*&quot;* use this source file for any macro definitions you need
*&quot;* in the implementation part of the class</localMacros>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="PT_MAP_FIELDS" VERSION="1" LANGU="E" DESCRIPT="Field Mapping Definition" EXPOSURE="0" STATE="1" EDITORDER="9 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="4" SRCROW1="21 " SRCCOLUMN1="4 " SRCROW2="21 " SRCCOLUMN2="46 " R3RELEASE="700" TYPESRC_LENG="45 " TYPESRC="pt_map_fields        TYPE TABLE OF _mapping
"/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_DLOAD_FM" VERSION="1" LANGU="E" DESCRIPT="R/3 Data Load Function Module" EXPOSURE="0" STATE="1" EDITORDER="7 " AUTHOR="SIMMONITEA" CREATEDON="20080602" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="FUNCNAME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_INFOPROV" VERSION="1" LANGU="E" DESCRIPT="InfoProvider" EXPOSURE="0" STATE="1" EDITORDER="1 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="RSINFOPROV" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_PLOAD_FM" VERSION="1" LANGU="E" DESCRIPT="R/3 Post Load Function Module" EXPOSURE="0" STATE="1" EDITORDER="8 " AUTHOR="SIMMONITEA" CREATEDON="20080602" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="FUNCNAME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_RET_TYPE" VERSION="1" LANGU="E" DESCRIPT="Retractor Type" EXPOSURE="0" STATE="1" EDITORDER="5 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="CHAR10" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_RUN_TYPE" VERSION="1" LANGU="E" DESCRIPT="Test Run" EXPOSURE="0" STATE="1" EDITORDER="4 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="C" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_R_SRV" VERSION="1" LANGU="E" DESCRIPT="Planning Function Service" EXPOSURE="0" STATE="1" EDITORDER="2 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="3" TYPE="IF_RSPLFA_SRV" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_SOURCE_SYSTEM" VERSION="1" LANGU="E" DESCRIPT="Logical system" EXPOSURE="0" STATE="1" EDITORDER="3 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="LOGSYS" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <attribute CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="P_STRUCTURE" VERSION="1" LANGU="E" DESCRIPT="Mapping Structure" EXPOSURE="0" STATE="1" EDITORDER="6 " AUTHOR="SIMMONITEA" CREATEDON="20080602" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" ATTDECLTYP="0" ATTEXPVIRT="0" TYPTYPE="1" TYPE="TABNAME" SRCROW1="0 " SRCCOLUMN1="0 " SRCROW2="0 " SRCCOLUMN2="0 " R3RELEASE="700" TYPESRC_LENG="0 "/>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_CHAR_USAGE">
   <source>method IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_CHAR_USAGE.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* There are no characteristics that are changing in a retractor         *
*                                                                       *
*=======================================================================*

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_PARAM_SET">
   <source>method IF_RSPLFA_SRVTYPE_IMP_CHECK~CHECK_PARAM_SET.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method checks the parameters of the planning function.            *
*                                                                       *
*=======================================================================*

  DATA: lr_ref_param_elem  TYPE REF TO if_rsplfa_param_elem,
        lr_param_elem      TYPE REF TO if_rsplfa_param_elem,

        l_parameter        TYPE string,
        l_dummy            TYPE c.
*
* Get R/3 Source System Parameter.
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;SOURCE_SYSTEM&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter NP &apos;SOURCE_SYSTEM*&apos;.
    MESSAGE e099(rsplf) WITH &apos;Source System Parameter must be of type&apos; &apos;SOURCE_SYSTEM*&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Retractor Type.
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RETRACTOR_TYPE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter IS INITIAL.
    MESSAGE e099(rsplf) WITH &apos;Retractor Type must be selected&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Retractor Mapping Structure
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RETRACTOR_STRUCTURE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter NP &apos;STRUCTURE*&apos;.
    MESSAGE e099(rsplf) WITH &apos;Mapping Structure must be of type&apos; &apos;STRUCTURE*&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Data Load Function Module
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;DATA_LOAD_FM&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter NP &apos;DATA_LOAD_FM*&apos;.
    MESSAGE e099(rsplf) WITH &apos;Data Load FM must be of type&apos; &apos;DATA_LOAD_FM*&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.
*
* Check Post Load Function Module
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;POST_LOAD_FM&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter IS NOT INITIAL.
    IF l_parameter NP &apos;POST_LOAD_FM*&apos;.
      MESSAGE e099(rsplf) WITH &apos;Post Load FM must be of type&apos; &apos;POST_LOAD_FM*&apos; INTO l_dummy.
      i_r_msg-&gt;add_msg_with_param_context( ).
      EXIT.
    ENDIF.
  ENDIF.
*
* Check Test Run Parameter
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RUN_TYPE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).

  IF l_parameter &lt;&gt; &apos;TEST_RUN&apos; AND l_parameter &lt;&gt; &apos;ACTUAL_RUN&apos;.
    MESSAGE e099(rsplf) WITH &apos;Parameter must be set to either &apos; &apos;TEST_RUN or ACTUAL_RUN.&apos; INTO l_dummy.
    i_r_msg-&gt;add_msg_with_param_context( ).
    EXIT.
  ENDIF.

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_CHECK~INIT_CHECK">
   <source>method IF_RSPLFA_SRVTYPE_IMP_CHECK~INIT_CHECK.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method is to check the planning service implementation detail     *
*                                                                       *
*=======================================================================*

  p_r_srv = i_r_srv.

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~ADD_NEW_BLOCKS">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~ADD_NEW_BLOCKS.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* There is no Blocking in a retractor so, all selected data is used in  *
* in the EXECUTE method.                                                *
*                                                                       *
*=======================================================================*

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~EXECUTE">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~EXECUTE.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method executed for each data block and implements the specific   *
* coding.                                                               *
*                                                                       *
* Table I_TH_REF_DATA contains the reference data.                      *
* Table C_TH_DATA contains the changed / new records                    *
*                                                                       *
*=======================================================================*

  DATA: lth_data       TYPE REF TO data,
        lth_map        TYPE REF TO data,
        lt_msg         TYPE TABLE OF bapiret2,

        l_ref          TYPE REF TO data,
        l_map          TYPE REF TO data,

        l_subrc        TYPE sy-subrc,
        l_count        TYPE i,
        l_dummy        TYPE c.

  FIELD-SYMBOLS:
        &lt;lth_data&gt;     TYPE ANY TABLE,
        &lt;lth_map&gt;      TYPE ANY TABLE,
        &lt;l_map&gt;        TYPE ANY,
        &lt;ls_msg&gt;       TYPE bapiret2,
        &lt;ls_ref_data&gt;  TYPE ANY.
*
* Create work area for reference data
*
  CREATE DATA l_ref   LIKE LINE OF i_th_ref_data.
  ASSIGN l_ref-&gt;*     TO &lt;ls_ref_data&gt;.
  CHECK &lt;ls_ref_data&gt; IS ASSIGNED.
*
* Create work area for buffer data
*
  CREATE DATA lth_data LIKE c_th_data.
  ASSIGN lth_data-&gt;*     TO &lt;lth_data&gt;.
  CHECK &lt;lth_data&gt; IS ASSIGNED.
*
* Get Retractor Parameter Values.
*
  me-&gt;_get_parameters( i_r_param_set = i_r_param_set ).
*
* Define Mapping structure.
*
  SELECT COUNT(*)
  INTO   l_count
  FROM   dd02l
  WHERE  tabname = p_structure.

  IF l_count = 0.

    MESSAGE e099(rsplf)
    WITH    &apos;Mapping Structure does not exist.&apos;
    INTO l_dummy.

    i_r_msg-&gt;add_msg( ).
    EXIT.

  ENDIF.

  CREATE DATA lth_map TYPE TABLE OF (p_structure).
  ASSIGN lth_map-&gt;*     TO &lt;lth_map&gt;.
  CHECK &lt;lth_map&gt; IS ASSIGNED.

  CREATE DATA l_map LIKE LINE OF &lt;lth_map&gt;.
  ASSIGN l_map-&gt;*     TO &lt;l_map&gt;.
  CHECK &lt;l_map&gt; IS ASSIGNED.
*
* Loop at the reference data to do the copy
*
  LOOP AT i_th_ref_data INTO &lt;ls_ref_data&gt;.
*
* Map Data Fields to Structure.
*
    me-&gt;_map_fields( EXPORTING  i_ref_data = &lt;ls_ref_data&gt;
                                i_r_msg    = i_r_msg
                     CHANGING   c_map_data = &lt;l_map&gt;
                     EXCEPTIONS no_map = 1
                                OTHERS = 2 ).

    IF sy-subrc &lt;&gt; 0.
      l_subrc = 4.
      EXIT.
    ENDIF.

    COLLECT &lt;l_map&gt; INTO &lt;lth_map&gt;.

  ENDLOOP.
*
* Execute Data Load Function Module, if mapping succeeds.
*
  IF l_subrc = 0.
*
* Execute Data Load Function Module
*
    CALL FUNCTION p_dload_fm
      DESTINATION p_source_system
      EXPORTING
        i_test_run = p_run_type
      IMPORTING
        e_t_msg    = lt_msg
      CHANGING
        i_t_data   = &lt;lth_map&gt;.
*
* Output Message From Remote Function Module.
*
    l_subrc = 0.

    LOOP AT lt_msg ASSIGNING &lt;ls_msg&gt;.

      sy-msgty = &lt;ls_msg&gt;-type.
      sy-msgid = &lt;ls_msg&gt;-id.
      sy-msgno = &lt;ls_msg&gt;-number.
      sy-msgv1 = &lt;ls_msg&gt;-message_v1.
      sy-msgv2 = &lt;ls_msg&gt;-message_v2.
      sy-msgv3 = &lt;ls_msg&gt;-message_v3.
      sy-msgv4 = &lt;ls_msg&gt;-message_v4.

      IF &lt;ls_msg&gt;-type = &apos;E&apos;  &quot; Error
      OR &lt;ls_msg&gt;-type = &apos;A&apos;. &quot; Abort
        l_subrc = 4.
      ENDIF.

      i_r_msg-&gt;add_msg( ).

    ENDLOOP.
*
* Return if the previous Step Failed.
*
    IF l_subrc &lt;&gt; 0.
      RETURN.
    ENDIF.
*
* Execute Post Load Function Module, if defined,
*
    IF p_pload_fm IS NOT INITIAL.
*
* Execute Remote Function Module.
*
      CALL FUNCTION p_pload_fm
        DESTINATION p_source_system
        EXPORTING
          i_test_run = p_run_type
        IMPORTING
          e_t_msg    = lt_msg.
*
* Output Message From Remote Function Module.
*
      LOOP AT lt_msg ASSIGNING &lt;ls_msg&gt;.

        sy-msgty = &lt;ls_msg&gt;-type.
        sy-msgid = &lt;ls_msg&gt;-id.
        sy-msgno = &lt;ls_msg&gt;-number.
        sy-msgv1 = &lt;ls_msg&gt;-message_v1.
        sy-msgv2 = &lt;ls_msg&gt;-message_v2.
        sy-msgv3 = &lt;ls_msg&gt;-message_v3.
        sy-msgv4 = &lt;ls_msg&gt;-message_v4.

        i_r_msg-&gt;add_msg( ).
      ENDLOOP.

    ENDIF.

  ENDIF.

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~FINISH_EXECUTION">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~FINISH_EXECUTION.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method is called at the end of processing, after the last call    *
* of EXECUTE.                                                           *
*                                                                       *
* It performs closing operations such as releasing resources.           *
*                                                                       *
*=======================================================================*


endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~GET_REF_DATA_SEL">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~GET_REF_DATA_SEL.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* This method determines the selection table for reference data.        *
*                                                                       *
* I_T_DATA_CHARSEL is a table of the planning function Filter           *
* E_T_REF_CHARSEL  is a table of the reference data                     *
*                                                                       *
* This method is called by method INIT_EXECUTION after initialization.  *
*                                                                       *
* For the EXECUTE method, the reference data is passed in parameter     *
* I_TH_REF_DATA for each data block.                                    *
*                                                                       *
*=======================================================================*

*
* Data Selection from Global Filter.
*
  e_t_ref_charsel = i_t_data_charsel.

endmethod.</source>
  </interfaceMethod>
  <interfaceMethod CLSNAME="ZCL_CUSTOM_RETRACTOR" CPDNAME="IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~INIT_EXECUTION">
   <source>method IF_RSPLFA_SRVTYPE_IMP_EXEC_REF~INIT_EXECUTION.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method is called once at the start of a planning function and     *
* is used for evaluating the class attributes prior to processing.      *
*                                                                       *
*=======================================================================*

  DATA: lx_error      TYPE REF TO cx_rs_error,
        ls_msg        TYPE bal_s_msg,
        l_dummy       TYPE c.
*
* Get Planning Function Attributes.
*
  TRY.
      p_r_srv           = i_r_srv.                        &quot; Planning Function Service
      p_infoprov        = i_r_srv-&gt;get_infoprov( ).       &quot; InfoProvider

*=======================================================================*
    CATCH cx_rs_error INTO lx_error.
      &quot; Catch Error on Planning Function Initialization.
*=======================================================================*

      ls_msg = lx_error-&gt;get_message( ).
      MESSAGE ID ls_msg-msgid
      TYPE       &apos;E&apos;
      NUMBER     ls_msg-msgno
      WITH       ls_msg-msgv1
                 ls_msg-msgv2
                 ls_msg-msgv3
                 ls_msg-msgv4
      INTO l_dummy.
      i_r_msg-&gt;add_msg( ).

  ENDTRY.

endmethod.</source>
  </interfaceMethod>
  <method CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETERS" VERSION="1" LANGU="E" DESCRIPT="Get Function Parameter values" EXPOSURE="0" STATE="1" EDITORDER="2 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="700" BCMTDCAT="00" BCMTDSYN="0">
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETERS" SCONAME="I_R_PARAM_SET" VERSION="1" LANGU="E" DESCRIPT="Parameter Record (Values)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_RSPLFA_PARAM_SET"/>
   <source>method _GET_PARAMETERS.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method gets the retractor parameter values for processing         *
*                                                                       *
*=======================================================================*

  DATA: lr_ref_param_elem  TYPE REF TO if_rsplfa_param_elem,
        lr_param_elem      TYPE REF TO if_rsplfa_param_elem,

        l_parameter        TYPE string.
*
* Get Retractor Parameters
*
  p_source_system = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;SOURCE_SYSTEM&apos;).

  p_structure     = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;RETRACTOR_STRUCTURE&apos;).

  p_dload_fm      = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;DATA_LOAD_FM&apos;).

  p_pload_fm      = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;POST_LOAD_FM&apos;).

  p_run_type      = me-&gt;_get_parameter_values( i_r_param_set = i_r_param_set
                                               i_param       = &apos;RUN_TYPE&apos;).
*
* Get Retractor Type.
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = &apos;RETRACTOR_TYPE&apos; ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).
  p_ret_type = l_parameter.
*
* Get Mapping Table.
*
  SELECT *
  INTO  CORRESPONDING FIELDS OF TABLE pt_map_fields
  FROM  /bic/pzret_map
  WHERE /bic/zret_type = p_ret_type.

endmethod.</source>
  </method>
  <method CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" VERSION="1" LANGU="E" DESCRIPT="Get a Specific Parameter Values" EXPOSURE="0" STATE="1" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="700" BCMTDCAT="00" BCMTDSYN="0">
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" SCONAME="I_R_PARAM_SET" VERSION="1" LANGU="E" DESCRIPT="Parameter Record (Values)" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_RSPLFA_PARAM_SET"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" SCONAME="I_PARAM" VERSION="1" LANGU="E" DESCRIPT="Parameter" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="RSPLF_PARNM"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_GET_PARAMETER_VALUES" SCONAME="R_PARAMETER" VERSION="1" LANGU="E" DESCRIPT="Parameter Value" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" PARDECLTYP="3" PARPASSTYP="0" TYPTYPE="1" TYPE="STRING"/>
   <source>method _GET_PARAMETER_VALUES.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method gets a parameter value from ZRET_PAR                       *
*                                                                       *
*=======================================================================*

  DATA: lr_ref_param_elem  TYPE REF TO if_rsplfa_param_elem,
        lr_param_elem      TYPE REF TO if_rsplfa_param_elem,

        l_parameter        TYPE string.
*
* Get Parameter
*
  lr_ref_param_elem = i_r_param_set-&gt;get_param_elem( i_param_name = i_param ).
  lr_ref_param_elem-&gt;get_value( IMPORTING e_value = l_parameter ).
*
* Get Parameter Value.
*
  SELECT SINGLE txtmd
  INTO   r_parameter
  FROM   /bic/tzret_par
  WHERE  /bic/zret_par = l_parameter.

endmethod.</source>
  </method>
  <method CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" VERSION="1" LANGU="E" DESCRIPT="Map data fields to data structure" EXPOSURE="0" STATE="1" EDITORDER="3 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" MTDTYPE="0" MTDDECLTYP="0" R3RELEASE="700" BCMTDCAT="00" BCMTDSYN="0">
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="I_REF_DATA" VERSION="1" LANGU="E" DESCRIPT="Input Data" CMPTYPE="1" MTDTYPE="0" EDITORDER="1 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="1" TYPE="ANY"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="I_R_MSG" VERSION="1" LANGU="E" DESCRIPT="Messages" CMPTYPE="1" MTDTYPE="0" EDITORDER="2 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" PARDECLTYP="0" PARPASSTYP="1" TYPTYPE="3" TYPE="IF_RSPLFA_MSG"/>
   <parameter CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="C_MAP_DATA" VERSION="1" LANGU="E" DESCRIPT="Mapped fields" CMPTYPE="1" MTDTYPE="0" EDITORDER="3 " DISPID="0 " AUTHOR="SIMMONITEA" CREATEDON="20080517" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717" PARDECLTYP="2" PARPASSTYP="0" TYPTYPE="1" TYPE="ANY"/>
   <exception CLSNAME="ZCL_CUSTOM_RETRACTOR" CMPNAME="_MAP_FIELDS" SCONAME="NO_MAP" VERSION="1" LANGU="E" DESCRIPT="No Mapping" MTDTYPE="0" EDITORDER="1 " AUTHOR="SIMMONITEA" CREATEDON="20080518" CHANGEDBY="SIMMONITEA" CHANGEDON="20080717"/>
   <source>method _MAP_FIELDS.

*=======================================================================*
*                                                                       *
* Description                                                           *
* --------------------------------------------------------------------- *
*                                                                       *
* The method maps the InfoObject or constant to the retractor structure *
*                                                                       *
*=======================================================================*

  DATA: l_dummy        TYPE c,
        l_constant     TYPE char30.

  FIELD-SYMBOLS:
        &lt;l_map_fields&gt; TYPE _mapping,
        &lt;l_ref_field&gt;  TYPE ANY,
        &lt;l_map_field&gt;  TYPE ANY.

  CLEAR c_map_data.
*
* For each element in the mapping table.
*
  LOOP AT pt_map_fields ASSIGNING &lt;l_map_fields&gt;.

    UNASSIGN: &lt;l_map_field&gt;, &lt;l_ref_field&gt;.
*
* Assign the Retractor Structure element.
*
    ASSIGN COMPONENT &lt;l_map_fields&gt;-/bic/zret_map OF STRUCTURE c_map_data TO &lt;l_map_field&gt;.

    IF &lt;l_map_field&gt; IS NOT ASSIGNED.

      MESSAGE e099(rsplf)
      WITH    &apos;Mapping field&apos; &lt;l_map_fields&gt;-/bic/zret_map &apos;does not exist in structure in&apos; p_structure
      INTO l_dummy.

      i_r_msg-&gt;add_msg( ).
      RAISE no_map.

    ENDIF.
*
* Assign the InfoObject
*
    IF &lt;l_map_fields&gt;-/bic/zret_iobj IS NOT INITIAL.

      ASSIGN COMPONENT &lt;l_map_fields&gt;-/bic/zret_iobj OF STRUCTURE i_ref_data TO &lt;l_ref_field&gt;.

      IF &lt;l_ref_field&gt; IS NOT ASSIGNED.

        MESSAGE e099(rsplf)
        WITH    &apos;Mapping field&apos; &lt;l_map_fields&gt;-/bic/zret_iobj &apos;does not exist in infoprovider &apos; p_infoprov
        INTO l_dummy.

        i_r_msg-&gt;add_msg( ).
        RAISE no_map.

      ENDIF.

    ELSE.
*
* Assign the Constant
*
      l_constant = &lt;l_map_fields&gt;-/bic/zret_defv.

      ASSIGN l_constant TO &lt;l_ref_field&gt;.

      IF &lt;l_ref_field&gt; IS NOT ASSIGNED.

        MESSAGE e099(rsplf)
        WITH    &apos;There is no Mapping definition for &apos; &lt;l_map_fields&gt;-/bic/zret_map
        INTO l_dummy.

        i_r_msg-&gt;add_msg( ).
        RAISE no_map.

      ENDIF.

    ENDIF.

    &lt;l_map_field&gt; = &lt;l_ref_field&gt;.

  ENDLOOP.

endmethod.</source>
  </method>
 </CLAS>
</nugget>
