Application Development and Automation Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
16,963

Introduction:



  • This document shows the usage of the class & method cmd_ei_api=>maintain.

  • It mainly focusses on creation of contact person and deletion of customer/contact person.




  • Customer/Contact person can be created, updated, deleted using the above method and class.


Contact person create for existing customer:



  • This topic mainly shows how to update both telephone and mobile number of a contact person using the method maintain. Both fields can be updated by setting the flag value.

  • Contact person has last name as a mandatory field.

  • Declare the necessary class and its types.


DATA:     ls_cmds_ei_main   TYPE cmds_ei_main, " Total Customer Data
ls_cmds_ei_extern TYPE cmds_ei_extern, " Complex External Interface for Customers
es_error TYPE cvis_message,
lv_phone1 TYPE LINE OF cvis_ei_phone_t,
lv_contact TYPE LINE OF cmds_ei_contacts_t.


  • Pass the object_task field as ‘I’ for customer creation or ‘U’ for customer update. In the below case, we are going to create a contact person for the existing customer.


*existing customer is getting updated, hence object_task – ‘U’
ls_cmds_ei_extern-header-object_instance-kunnr = 'DAKK103'.” pass the existing customer number
ls_cmds_ei_extern-header-object_task = 'U'."I for insert U for update


  • Title can be Mr. Mrs. Etc. But this title_p accepts the address key. So pass the key related to Mr. Mrs. Miss.




  • So the relevant values should be passed to the title_p field,




  • In the below code, we are going to pass Mr. (0002) so the address key 0002 is passed in the field title_p.


*fil lastname, title,
lv_contact-task = 'I'.
lv_contact-address_type_3-task = 'I'.
lv_contact-address_type_3-postal-data-title_p = '0002'.
lv_contact-address_type_3-postal-datax-title_p = 'X'.

lv_contact-address_type_3-postal-data-lastname = 'lastname'.
lv_contact-address_type_3-postal-datax-lastname = 'X'.


  • To pass the telephone number & mobile number together we need to set the flag for the field R_3_USER.




  • R_3_USER has the data element AD_FLGMOB (mobile indicator). View the value of the data element to see the possible entries.




  • We need to update both telephone number and mobile number, hence we are passing R_3_USER = ‘1’ (telephone) R_3_USER = ‘2’(mobile) and appending the value to phone structure separately.

  • So the phone internal table of phone has 2 entries, one for telephone number and other one for mobile number.


*fill telephone, tel_extens, mob number, fax number
lv_phone1-contact-task = 'I'.
lv_phone1-contact-data-telephone = '004823283'.
lv_phone1-contact-datax-telephone = 'X'.
lv_phone1-contact-data-R_3_USER = '1'.
lv_phone1-contact-datax-R_3_USER = 'X'.
INSERT lv_phone1 INTO TABLE lv_contact-address_type_3-communication-phone-phone.

lv_phone1-contact-task = 'I'.
lv_phone1-contact-data-telephone = '9710893900'.
lv_phone1-contact-datax-telephone = 'X'.
lv_phone1-contact-data-R_3_USER = '2'.
lv_phone1-contact-datax-R_3_USER = 'X'.
INSERT lv_phone1 INTO TABLE lv_contact-address_type_3-communication-phone-phone.

Delete customer/contact person:



  • This topic mainly focuses on the deletion of customer/contact person.

  • There is no way to delete a customer, instead we can set some values to the fields and set the flag for deletion.

  • When you try to delete a customer using XD05(customer block & unblock) or XD06(customer flag for deletion) it certainly sets some field values as ‘X’. we can see it while recording in SHDB.

  • The necessary fields for setting the customer flag for delete are,



  • AUFSD – central order block for customer

  • SPERR – central posting block

  • CASSD – central sales block for customer

  • LOEVM – central deletion flag for master record



  • We achieve the same functionality of XD05 and XD06 through our code by modifying the customer (task as ‘M’) using the method “maintain” and set the above flag values.

  • Customer number still can be viewed using the transaction XD03 with a warning as “Customer marked for deletion”.

  • Contact person can be deleted completely and it cannot be viewed in XD03->contact person tab or in VAP3.


Customer deletion (setting the deletion flag):



  • Set the necessary flags for blocking the customer on different parameters.


*set the central posting block
ls_cmds_ei_extern-central_data-central-data-sperr = ' '.
ls_cmds_ei_extern-central_data-central-datax-sperr = 'X'.
*set the central order block
ls_cmds_ei_extern-central_data-central-data-aufsd = '01'.
ls_cmds_ei_extern-central_data-central-datax-aufsd = 'X'.
*set the central sales block
ls_cmds_ei_extern-central_data-central-data-cassd = 'X'.
ls_cmds_ei_extern-central_data-central-datax-cassd = 'X'.
*set the central deletion flag
ls_cmds_ei_extern-central_data-central-data-loevm = 'X'.
ls_cmds_ei_extern-central_data-central-datax-loevm = 'X'.


  • AUFSD value as ‘01’ is for overall block.



Contact Person Deletion:



  • Pass the contact-task as ‘D’ (delete) and pass the contact person number (PARNR) value to be deleted.


lv_contact-task = 'D'.
lv_contact-data_key-parnr = '1101'.


  • Append the contact structure to the contacts internal table as mentioned below.


INSERT lv_contact INTO TABLE ls_cmds_ei_extern-central_data-contact-contacts.

common steps to be followed:

  • Append the structure to customer internal table and call the method cmd_ei_api=>maintain to reflect the changes.


APPEND ls_cmds_ei_extern TO ls_cmds_ei_main-customers.
CLEAR ls_cmds_ei_extern.

IF ls_cmds_ei_main IS NOT INITIAL.

CALL METHOD cmd_ei_api=>initialize.
CALL METHOD cmd_ei_api=>lock( iv_kunnr = ls_cmds_ei_extern-header-object_instance-kunnr ).
CALL METHOD cmd_ei_api=>maintain
EXPORTING
is_master_data = ls_cmds_ei_main " Total Customer Data
IMPORTING
es_error = es_error. " Error Indicator and System Messages
CALL METHOD cmd_ei_api=>unlock( iv_kunnr = ls_cmds_ei_extern-header-object_instance-kunnr ).
ENDIF.


  • Then call the “commit work” statement or
    'BAPI_TRANSACTION_COMMIT'

    to reflect the changes.


 
2 Comments
Labels in this area