SAP CRM: Modificar valor atributos en CRMD_PARTNER

Es muy normal en el módulo de CRM de SAP que nos pidan modificar valores de atributos en una tabla estándar de SAP. Para modificar dichos valores, en la mayoría de los casos, deberemos hacerlo de forma estándar con el uso de la función CRM_ORDER_MAINTAIN y, posteriormente, guardar los datos mediante la función CRM_ORDER_SAVE. Hoy modificaremos atributos en CRMD_PARTNER.

Hoy os vamos a mostrar un ejemplo de actualización atributos en CRMD_PARTNER. Vamos actualizar el valor del atributo ZZFECHA_NACIMIENTO:

DATA: lt_partner_com TYPE crmt_partner_comt,
ls_partner_com TYPE crmt_partner_com,
lt_input_fields TYPE crmt_input_field_tab,
ls_input_fields TYPE crmt_input_field,
ls_field_names TYPE crmt_input_field_names,
lt_objects_to_save TYPE crmt_object_guid_tab,
ls_logical_key TYPE crmt_partner_logic_partner_key,
lt_exception TYPE crmt_exception_t.

CLEAR: lt_input_fields,
lt_objects_to_save,
lt_saved_objects,
lt_objects_not_saved,
lt_partner_com,
lt_exception.

CLEAR: ls_input_fields,
ls_field_names,
ls_partner_com.

  • Se informa el logical_key
    CLEAR ls_logical_key.
    ls_logical_key-ref_partner_fct = is_partner-ref_partner_fct.
    ls_logical_key-ref_partner_no = is_partner-ref_partner_no.
    ls_logical_key-ref_no_type = ‘BP’.
    ls_logical_key-ref_display_type = ‘BP’.
  • Se informan los campos comunes de la tabla interna con los campos a actualizar.
    CLEAR: ls_input_fields.
    ls_input_fields-ref_kind = ‘A’.
    ls_input_fields-objectname = ‘PARTNER’.
    ls_field_names-fieldname = ‘ZZFECHA_NACIMIENTO’.
    ls_input_fields-ref_guid = iv_guid.
    ls_input_fields-logical_key = ls_logical_key.
    INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
  • Preparamos campos a actualizar.
    ls_partner_com-ref_guid = iv_guid.
    ls_partner_com-zzfechana_nacimiento = sy-datum.
    ls_partner_com-ref_partner_fct = is_partner-ref_partner_fct.
    ls_partner_com-ref_partner_no = is_partner-ref_partner_no.
    ls_partner_com-ref_kind = is_partner-ref_kind.
    ls_partner_com-ref_no_type = ‘BP’.
    ls_partner_com-ref_display_type = ‘BP’.
    INSERT ls_partner_com INTO TABLE lt_partner_com. INSERT ls_input_fields INTO TABLE lt_input_fields. CLEAR: lt_exception.
  • Se actualiza los campos
    CALL FUNCTION ‘CRM_ORDER_MAINTAIN’
    EXPORTING
    it_partner = lt_partner_com
    IMPORTING
    et_exception = lt_exception
    CHANGING
    ct_input_fields = lt_input_fields
    EXCEPTIONS
    error_occurred = 1
    document_locked = 2
    no_change_allowed = 3
    no_authority = 4
    OTHERS = 5.
  • IF sy-subrc EQ 0.
    INSERT iv_guid INTO TABLE lt_objects_to_save. CALL FUNCTION ‘CRM_ORDER_SAVE’
    EXPORTING
    it_objects_to_save = lt_objects_to_save
    IMPORTING
    et_exception = lt_exception
    EXCEPTIONS
    document_not_saved = 1
    OTHERS = 2. IF sy-subrc = 0.
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = abap_true.
    ENDIF.
    ENDIF.

Puedes consultar más post del módulo CRM aquí.