Created by Jerry Wang on May 08, 2015
- 以下列appointment为例,希望用代码清空其All day flag并保存到数据库里:

- 找到该appointment的id和transaction type:

- 执行AG3/001 report ZAPPOINTMENT_CLEAR_ALLDAY_FLAG, 输入step2找到的两个参数:

成功执行:

- 执行完report后到DB table或者webUI上检查,确认该checkbox确实被清掉:


REPORT zappointment_clear_allday_flag.
PARAMETERS: id TYPE crmd_orderadm_h-object_id OBLIGATORY DEFAULT '26641',
type TYPE crmd_orderadm_h-process_type OBLIGATORY DEFAULT 'ZAP0'.
DATA: lt_appointment TYPE crmt_appointment_comt,
ls_appointment LIKE LINE OF lt_appointment,
lt_changed_fields TYPE crmt_input_field_tab,
ls_changed_field LIKE LINE OF lt_changed_fields,
lt_exception TYPE crmt_exception_t,
ls_field_name LIKE LINE OF ls_changed_field-field_names,
lt_save TYPE crmt_object_guid_tab,
lt_not_saved LIKE lt_save,
lv_guid TYPE crmd_orderadm_h-guid,
lt_saved TYPE crmt_return_objects.
START-OF-SELECTION.
SELECT SINGLE guid INTO lv_guid FROM crmd_orderadm_h WHERE object_id = id AND process_type = type.
IF sy-subrc <> 0.
WRITE:/ 'invalid appointment id or type'.
RETURN.
ENDIF.
ls_appointment-ref_guid = lv_guid.
ls_appointment-ref_kind = 'A'.
ls_appointment-appt_type = 'ORDERPLANNED'.
ls_appointment-mode = 'B'.
APPEND ls_appointment TO lt_appointment.
ls_changed_field-ref_handle = '0000000000'.
ls_changed_field-ref_guid = ls_appointment-ref_guid.
ls_changed_field-ref_kind = ls_appointment-ref_kind.
ls_changed_field-objectname = 'APPOINTMENT'.
ls_changed_field-logical_key = ls_appointment-appt_type.
ls_field_name-fieldname = 'DOMINANT'.
APPEND ls_field_name TO ls_changed_field-field_names.
APPEND ls_changed_field TO lt_changed_fields.
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_appointment = lt_appointment
IMPORTING
et_exception = lt_exception
CHANGING
ct_input_fields = lt_changed_fields
EXCEPTIONS
error_occurred = 1
document_locked = 2
no_change_allowed = 3
no_authority = 4.
WRITE: / 'result: ' , sy-subrc.
IF sy-subrc <> 0 OR lt_exception IS NOT INITIAL.
WRITE: 'all day checkbox changed failed.'.
RETURN.
ENDIF.
CLEAR: lt_exception.
APPEND ls_appointment-ref_guid TO lt_save.
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = lt_save
iv_update_task_local = abap_true
iv_no_bdoc_send = abap_true
IMPORTING
et_saved_objects = lt_saved
et_objects_not_saved = lt_not_saved
et_exception = lt_exception
EXCEPTIONS
document_not_saved = 1.
IF sy-subrc = 0 AND lt_exception IS INITIAL.
WRITE:/ 'change saved successfully'.
ELSE.
WRITE:/ 'change not saved'.
ENDIF.
COMMIT WORK AND WAIT.
BREAK-POINT.