使用report clear appointment的all day flag

145 阅读1分钟

Created by Jerry Wang on May 08, 2015

  1. 以下列appointment为例,希望用代码清空其All day flag并保存到数据库里:
    clipboard1
  2. 找到该appointment的id和transaction type:
    clipboard2
  3. 执行AG3/001 report ZAPPOINTMENT_CLEAR_ALLDAY_FLAG, 输入step2找到的两个参数:
    clipboard3
    成功执行:
    clipboard4
  4. 执行完report后到DB table或者webUI上检查,确认该checkbox确实被清掉:
    clipboard5
    clipboard6
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.