MEREP_CONTACT_MODIFY.abap
FUNCTION merep_contact_modify .
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(PERSON) LIKE MEREP_PERSON STRUCTURE MEREP_PERSON
*" EXPORTING
*" VALUE(RETURN) LIKE BAPIRET2 STRUCTURE BAPIRET2
*" TABLES
*" ADDRESS STRUCTURE MEREP_ADDRESS
*" E_MAIL STRUCTURE MEREP_E_MAIL
*"----------------------------------------------------------------------
DATA:
ldf_persnumber LIKE merep_person-persnumber,
lds_address LIKE merep_address,
lds_e_mail LIKE merep_e_mail,
lds_return LIKE bapireturn1,
lds_person LIKE merep_person.
CLEAR return.
IF person-last_name IS INITIAL.
* - Last name is mandatory
lds_return-type = 'E'.
lds_return-id = 'MEREP_SAMPLE_APPL1'.
lds_return-number = '004'.
CALL FUNCTION 'MEREP_RETURN_GET'
EXPORTING
type = lds_return-type
id = lds_return-id
number = lds_return-number
IMPORTING
return = lds_return.
MOVE-CORRESPONDING lds_return TO return.
EXIT.
ENDIF.
SELECT SINGLE * FROM merep_person INTO lds_person
WHERE persnumber = person-persnumber.
IF sy-subrc = 0.
person-credat = lds_person-credat.
person-crenam = lds_person-crenam.
person-cretim = lds_person-cretim.
person-chgdat = sy-datum.
person-chgnam = sy-uname.
person-chgtim = sy-uzeit.
UPDATE merep_person FROM person.
ELSE.
* - DB update failed (Table name = &, Key = &)
lds_return-type = 'E'.
lds_return-id = 'MEREP_SAMPLE_APPL1'.
lds_return-number = '002'.
lds_return-message_v1 = 'MEREP_PERSON'.
lds_return-message_v2 = person-persnumber.
CALL FUNCTION 'MEREP_RETURN_GET'
EXPORTING
type = lds_return-type
id = lds_return-id
number = lds_return-number
par1 = lds_return-message_v1
par2 = lds_return-message_v2
IMPORTING
return = lds_return.
MOVE-CORRESPONDING lds_return TO return.
EXIT.
ENDIF.
DELETE FROM merep_address
WHERE persnumber = person-persnumber.
DELETE FROM merep_e_mail
WHERE persnumber = person-persnumber.
LOOP AT address INTO lds_address.
lds_address-persnumber = person-persnumber.
MODIFY address FROM lds_address.
ENDLOOP.
LOOP AT e_mail INTO lds_e_mail.
lds_e_mail-persnumber = person-persnumber.
MODIFY e_mail FROM lds_e_mail.
ENDLOOP.
IF NOT address[] IS INITIAL.
INSERT merep_address FROM TABLE address.
IF sy-subrc <> 0.
* - DB update failed (Table name = &)
lds_return-type = 'E'.
lds_return-id = 'MEREP_SAMPLE_APPL1'.
lds_return-number = '002'.
lds_return-message_v1 = 'MEREP_ADDRESS'.
CALL FUNCTION 'MEREP_RETURN_GET'
EXPORTING
type = lds_return-type
id = lds_return-id
number = lds_return-number
par1 = lds_return-message_v1
IMPORTING
return = lds_return.
MOVE-CORRESPONDING lds_return TO return.
ROLLBACK WORK.
EXIT.
ENDIF.
ENDIF.
IF NOT e_mail[] IS INITIAL.
INSERT merep_e_mail FROM TABLE e_mail.
IF sy-subrc <> 0.
* - DB update failed (Table name = &, Key = &)
lds_return-type = 'E'.
lds_return-id = 'MEREP_SAMPLE_APPL1'.
lds_return-number = '002'.
lds_return-message_v1 = 'MEREP_E_MAIL'.
lds_return-message_v2 = person-persnumber.
CALL FUNCTION 'MEREP_RETURN_GET'
EXPORTING
type = lds_return-type
id = lds_return-id
number = lds_return-number
par1 = lds_return-message_v1
par2 = lds_return-message_v2
IMPORTING
return = lds_return.
MOVE-CORRESPONDING lds_return TO return.
ROLLBACK WORK.
EXIT.
ENDIF.
ENDIF.
COMMIT WORK.
* - Person changed successfully (Persnumber=&)
lds_return-type = 'S'.
lds_return-id = 'MEREP_SAMPLE_APPL1'.
lds_return-number = '006'.
lds_return-message_v1 = person-persnumber.
CALL FUNCTION 'MEREP_RETURN_GET'
EXPORTING
type = lds_return-type
id = lds_return-id
number = lds_return-number
par1 = lds_return-message_v1
IMPORTING
return = lds_return.
MOVE-CORRESPONDING lds_return TO return.
ENDFUNCTION.