METHOD zif_action_util~get_action_by_order_guid.
DATA(lr_context) = me->mr_action_dao->create_context( iv_guid ).
rr_action = me->mr_action_dao->get_action( ir_action_context = lr_context
iv_action_name = iv_action_name ).
ENDMETHOD.
Diagram 4
method ZIF_ACTION_UTIL~POPULATE_CONTAINER_ELEMENTS.
DATA lr_abapstructure TYPE REF TO cl_abap_structdescr. "CL_ABAP_TYPEDESCR.
DATA lt_components TYPE abap_component_tab.
"retrieve the components from the structure
CHECK cr_container IS BOUND.
lr_abapstructure ?= cl_abap_structdescr=>describe_by_data( is_structure ). .
lt_components = lr_abapstructure->get_components( ).
IF lines( lt_components ) EQ 0.
RETURN.
ENDIF.
FIELD-SYMBOLS TYPE any .
LOOP AT lt_components ASSIGNING FIELD-SYMBOL(<fs_component>).
DATA(lv_name) = <fs_component>-name.
ASSIGN COMPONENT lv_name OF STRUCTURE is_structure TO <data>.
IF <data> IS NOT INITIAL.
cr_container->set_value( EXPORTING
element_name = CONV #( lv_name )
data = <data> ).
ENDIF.
ENDLOOP.
endmethod.
Diagram 5
METHOD zif_action_util~get_action_container_rule.
CHECK ir_action IS BOUND.
DATA(lr_rule_man_if) = ir_action->getm_cond_man( ).
DATA(lv_startcond) = ir_action->get_startcond( ).
mr_rule_man ?= lr_rule_man_if.
mr_rule_man->set_guid1( lv_startcond ).
mr_rule_man->if_condition_container_ppf~get_container( IMPORTING ri_container = rr_container ).
ENDMETHOD.
Diagram 6
METHOD zif_action_util~get_action_container_medium.
DATA(lr_medium_if) = ir_action->get_medium( ).
mr_medium ?= lr_medium_if.
mr_medium->if_medium_container_ppf~get_container( IMPORTING ei_container = rr_container ).
ENDMETHOD.
Diagram 7
METHOD zif_action_util~set_action_container_rule.
mr_rule_man->if_condition_container_ppf~set_container( EXPORTING ii_container = ir_container
ip_condtype = '02'
ip_custcont = '' ).
ENDMETHOD.
Diagram 8
METHOD zif_action_util~set_action_container_medium.
CHECK mr_medium IS BOUND.
mr_medium->if_medium_container_ppf~set_container( ii_container = ir_container ).
ENDMETHOD.
Diagram 9
METHOD zif_action_util~save_action_rule.
DATA(lr_rule_ref) = mr_rule_man->get_container_ref( ).
lr_rule_ref->save( ).
ENDMETHOD.
Diagram 10
METHOD zif_action_util~set_action_container_medium.
CHECK mr_medium IS BOUND.
mr_medium->if_medium_container_ppf~set_container( ii_container = ir_container ).
ENDMETHOD.
Diagram 11
interface ZIF_ACTION_UTIL
public .
methods GET_ACTION_BY_ORDER_GUID
importing
!IV_GUID type CRMT_OBJECT_GUID
!IV_ACTION_NAME type PPFDTT
returning
value(RR_ACTION) type ref to CL_TRIGGER_PPF .
methods POPULATE_CONTAINER_ELEMENTS
importing
!IS_STRUCTURE type ANY
changing
!CR_CONTAINER type ref to IF_SWJ_PPF_CONTAINER .
methods GET_ACTION_CONTAINER_RULE
importing
!IR_ACTION type ref to CL_TRIGGER_PPF
returning
value(RR_CONTAINER) type ref to IF_SWJ_PPF_CONTAINER .
methods SET_ACTION_CONTAINER_RULE
importing
value(IR_CONTAINER) type ref to IF_SWJ_PPF_CONTAINER .
methods GET_ACTION_CONTAINER_MEDIUM
importing
!IR_ACTION type ref to CL_TRIGGER_PPF
returning
value(RR_CONTAINER) type ref to IF_SWJ_PPF_CONTAINER .
methods SET_ACTION_CONTAINER_MEDIUM
importing
value(IR_CONTAINER) type ref to IF_SWJ_PPF_CONTAINER .
methods SAVE_ACTION_MEDIUM .
methods SAVE_ACTION_RULE .
endinterface.
Diagram 12
method ZIF_ACTION_DAO~CREATE_CONTEXT.
CALL FUNCTION 'CRM_ACTION_CONTEXT_CREATE'
EXPORTING
iv_header_guid = iv_guid
iv_object_guid = iv_guid
IMPORTING
ev_context = rr_action_context
EXCEPTIONS
no_actionprofile_for_proc_type = 1
no_actionprofile_for_item_type = 2
order_read_failed = 3
OTHERS = 4.
endmethod.
method ZIF_ACTION_DAO~GET_ACTIONS.
data(lr_action) = cl_service_factory_ppf=>get_actions_if( ).
lr_action->get_actions( exporting
io_context = ir_action_context
ip_active = abap_true
ip_inactive = abap_true
ip_other_processing = abap_true
importing
et_actions = lt_action
).
endmethod.
METHOD zif_action_dao~get_action.
DATA lr_action TYPE REF TO cl_trigger_ppf.
DATA lr_action_done TYPE REF TO cl_trigger_ppf.
DATA(lt_actions) = me->zif_action_dao~get_actions( ir_action_context ).
LOOP AT lt_actions ASSIGNING FIELD-SYMBOL(<fs_action>).
lr_action ?= <fs_action>.
DATA(lv_action_type) = lr_action->get_ttype( ).
IF lv_action_type = iv_action_name.
IF lr_action->get_status( ) EQ 0.
rr_action = lr_action.
EXIT.
ELSEIF lr_action_done IS INITIAL.
lr_action_done = lr_action.
ENDIF.
ENDIF.
ENDLOOP.
IF rr_action IS NOT BOUND AND lr_action_done IS BOUND.
DATA(lr_new_action) = lr_action_done->repeat( ).
rr_action = lr_new_action.
ENDIF.
ENDMETHOD.
Diagram 13
Diagram 14
METHOD CONSTRUCTOR.
me->mv_guid = iv_order_guid.
me->mr_object_pool = cl_object_pool=>get_instance( ).
mr_action_util = NEW zcl_action_util( ).
mr_container_medium = NEW cl_swj_ppf_container( ).
mr_container_rule = NEW cl_swj_ppf_container( ).
me->mr_object_pool->save_guids( EXPORTING ip_guid = me->mv_guid ).
ENDMETHOD.
Diagram 15
method ZIF_ACTION_EXECUTE~CREATE.
DATA lt_message TYPE bapiret2_tab.
me->mr_action = me->mr_action_util->get_action_by_order_guid( iv_guid = me->mv_guid
iv_action_name = iv_action ).
CHECK mr_action IS BOUND.
lt_message = me->create_container_rule( is_container_rule ).
READ TABLE lt_message WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
APPEND LINES OF lt_message TO rt_message.
RETURN.
ENDIF.
lt_message = me->create_container_medium( is_container_medium ).
READ TABLE lt_message WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
APPEND LINES OF lt_message TO rt_message.
RETURN.
ENDIF.
endmethod.
Diagram 16
METHOD create_container_rule.
CHECK mr_action IS BOUND.
me->mr_container_rule = me->mr_action_util->get_action_container_rule( me->mr_action ).
me->mr_action_util->populate_container_elements( EXPORTING is_structure = is_container
CHANGING cr_container = mr_container_rule ).
me->mr_action_util->set_action_container_rule( me->mr_container_rule ).
ENDMETHOD.
Diagram 17
METHOD CREATE_CONTAINER_MEDIUM.
CHECK mr_action IS BOUND.
me->mr_action->set_status( '1' ).
me->mr_action->set_commit_required( abap_true ).
me->mr_container_medium = me->mr_action_util->get_action_container_medium( mr_action ).
me->mr_action_util->populate_container_elements( EXPORTING is_structure = is_container
CHANGING cr_container = mr_container_medium ).
ENDMETHOD.
Diagram 18
method ZIF_ACTION_EXECUTE~SAVE.
CHECK mr_action IS BOUND.
mr_action->set_processed_manually( abap_true ).
mr_container_rule->set_tansport( tr_disabled = abap_true ).
mr_container_rule->save( ).
me->mr_action_util->save_action_rule( ).
mr_container_medium->set_tansport( tr_disabled = abap_true ).
mr_container_medium->save( ).
me->mr_action_util->save_action_medium( ).
mr_action->execute( ).
endmethod.
Diagram 19
METHOD test.
DATA ls_container_rule TYPE zs_chgaction_cond.
DATA ls_container_medium TYPE zs_chgaction_medium.
DATA lr_action_execute TYPE REF TO zif_action_execute.
DATA lt_message TYPE bapiret2_tab.
ls_container_rule = VALUE #(
startcond = 'ABC'
).
ls_container_medium = VALUE #(
chargetype = 'CHG'
chargesubtype = '123'
chargeamount = '100'
).
lr_action_execute = NEW zcl_action_execute( iv_order_guid ).
lt_message = lr_action_execute->create( iv_action = 'Z_CHGACTION'
is_container_rule = ls_container_rule
is_container_medium = ls_container_medium ).
lr_action_execute->save( ).
ENDMETHOD.
Diagram 20
CLASS ZCL_IM_CHGACTION IMPLEMENTATION.
METHOD if_ex_exec_methodcall_ppf~execute.
DATA lv_charge_type TYPE ze_charge_type.
DATA lv_charge_sub_type TYPE ze_charge_sub_type.
data lv_charge_amount type betrw_kk.
ii_container->get_value( EXPORTING element_name = 'CHARGETYPE'
IMPORTING data = lv_charge_type ).
ii_container->get_value( EXPORTING element_name = 'CHARGESUBTYPE'
IMPORTING data = lv_charge_sub_type ).
ii_container->get_value( EXPORTING element_name = 'CHARGEAMOUNT'
IMPORTING data = lv_charge_amount ).
rp_status = 1.
"lets do a sub-process now
ENDMETHOD.
ENDCLASS.
Diagram 21
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
12 | |
8 | |
7 | |
6 | |
5 | |
5 | |
4 | |
4 | |
3 | |
3 |