Sunday, December 10, 2017

EWM PPF Trigger the existing PPF Action through Custom Program

Aim:
Same as title

Description:
An Action has been scheduled for the Handling Unit in the EWM Monitor and we need to execute it in a Custom Program without executing it from the Monitor.

What to do?
Use the below code accordingly.

Code:
*&---------------------------------------------------------------------*
*& Report ZAG_TEST_HU_PRINTING
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zag_test_hu_printing.

PARAMETERS: p_hu TYPE /scwm/huident DEFAULT '154118660000024802'.

DATA: lt_huhdr     TYPE /scwm/tt_huhdr_int,
      lt_protocol  TYPE bal_t_logh,
      lt_contexts  TYPE ppftcntxts,
      lo_hu_ppf    TYPE REF TO /scwm/cl_hu_ppf,
      lo_manager   TYPE REF TO cl_manager_ppf,
      lt_trigger   TYPE ppfttrgor,

      lv_lines     TYPE i,
      lv_read_lint TYPE i,
      lv_oid       TYPE os_guid,
      lv_object    TYPE REF TO object,
      lv_action    TYPE REF TO cl_trigger_ppf.


*--> Get HU Header
CALL FUNCTION '/SCWM/HUHEADER_READ'
  EXPORTING
    iv_appl      = wmegc_huappl_wme
    iv_huident   = p_hu
    iv_db_select = 'X'
  IMPORTING
    et_huheader  = lt_huhdr
  EXCEPTIONS
    not_found    = 1
    input        = 2
    error        = 3
    deleted      = 4
    OTHERS       = 5.
IF sy-subrc = 0.

*--> Set Global Data
  CALL FUNCTION '/SCWM/PRINT_GLOBAL_DATA'
    EXPORTING
      iv_caller = wmegc_hu_processing.

*--> Print HU
  CALL FUNCTION '/SCWM/PRINT_HU'
    EXPORTING
      it_huhdr          = lt_huhdr
      iv_caller         = wmegc_hu_processing
*     IV_CXT_PARTNER    =
*     IV_HUSTEP         =
*     IV_WORKCENTER     =
      iv_noexe          = ' '
*     IV_NODIALOG       = 'X'
*     IV_HUIDENT_O      =
*     IV_PMAT_O         =
*     IV_G_WEIGHT_O     =
*     IV_G_VOLUME_O     =
*     IV_G_CAPA_O       =
*     IV_LDEST          =
*     IV_FORM_GROUP     =
*     IV_LOG_PROCESS    =
*     IV_DOCNO          =
    IMPORTING
      et_protocol       = lt_protocol
      et_contexts       = lt_contexts
    EXCEPTIONS
      no_previous_print = 1
      error_on_log_save = 2
      previous_print    = 3
      OTHERS            = 4.
  IF sy-subrc = 0.
    READ TABLE lt_contexts ASSIGNING FIELD-SYMBOL(<lfs_contexts>) INDEX 1.
    IF sy-subrc = 0.

      lo_manager = cl_manager_ppf=>get_instance( ).
      CALL METHOD lo_manager->get_active_triggers
        EXPORTING
          it_contexts = lt_contexts
        IMPORTING
          et_triggers = lt_trigger.
      IF lt_trigger IS NOT INITIAL.
        DESCRIBE TABLE lt_trigger LINES lv_lines.
        lv_read_lint = lv_lines - 1.
        READ TABLE lt_trigger ASSIGNING FIELD-SYMBOL(<lfs_trigger>) INDEX lv_read_lint.
        IF sy-subrc = 0.
          lv_oid = <lfs_trigger>->read_guid( ).

          CALL METHOD ca_trigger_ppf=>agent->if_os_ca_persistency~get_persistent_by_oid
            EXPORTING
              i_oid  = lv_oid
            RECEIVING
              result = lv_object.

          lv_action ?= lv_object.

          TRY.
              CALL METHOD lv_action->set_is_changed
                EXPORTING
                  i_is_changed = 'X'.
            CATCH cx_os_object_not_found .
          ENDTRY.

          CALL METHOD lv_action->execute
            RECEIVING
              rp_rc                   = DATA(lv_status)
            EXCEPTIONS
              empty_medium_reference  = 1
              empty_appl_reference    = 2
              locked                  = 3
              document_is_locked      = 4
              inactive                = 5
              startcondition_not_true = 6
              OTHERS                  = 7.

          COMMIT WORK AND WAIT.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDIF." HU Header Read FM