cancel
Showing results for 
Search instead for 
Did you mean: 

Status is not changing instantly after clicking on 'Change Status' button

Former Member
0 Kudos

Hello CRM Gurus,

I have a z-component which is activity search component. In the Result List tool bar, one button 'Change Status' is there. When i click on this button, Status is not updated instantly. Second time when i click on that button, then it is updated. my questio is why it is not updating the status instantly. I have added the following code for refreshing the result lkist:

Data : lr_col_all TYPE REF TO if_bol_bo_col

lr_col_all = me->typed_context->btqract->collection_wrapper->get_copy( ).

me->typed_context->btqract->collection_wrapper->set_collection( lr_col_all ).

Can u plz solve this issue.

thanks & regards

Madhusudan

Accepted Solutions (0)

Answers (2)

Answers (2)

former_member202474
Contributor
0 Kudos

Hi Madhu,

In crm 5.2 system in activities there is a button 'Change Status', it works fine.

I will give u the code

method EH_ONCHANGESTATUS

DATA: lt_col_def TYPE tableviewcontroltab,

ls_col_def TYPE LINE OF tableviewcontroltab,

lt_ddlb TYPE bsp_wd_dropdown_table,

ls_ddlb TYPE bsp_wd_dropdown_line,

ls_tj30 TYPE tj30,

ls_status_wrk TYPE crmt_status_wrk.

DATA: lr_entity TYPE REF TO cl_crm_bol_entity,

lr_collection TYPE REF TO if_bol_bo_col.

  • load status...

FIELD-SYMBOLS:

<ls_status> TYPE crms_status_activity_ui.

DATA:

lv_window TYPE string,

lv_title TYPE string,

lv_lines_selected TYPE integer,

lv_popup_allowed TYPE crmt_boolean,

ls_proc_type TYPE crmc_proc_type,

lv_status_profile_new TYPE j_stsma,

lv_status_profile_old TYPE j_stsma,

lv_process_type TYPE crmt_process_type,

lv_process_type_new TYPE crmt_process_type,

lv_process_type_old TYPE crmt_process_type,

ls_ddlb_options TYPE crms_thtmlb_search_ddlb_nvp,

lt_status TYPE TABLE OF crms_status_activity_ui,

ls_status TYPE crms_status_activity_ui,

lv_description TYPE crmt_description.

" check that all process tapes are equal

lr_collection ?= me->typed_context->btqract->collection_wrapper->if_bol_bo_col_multi_sel~get_marked( ).

lr_entity ?= lr_collection->get_first( ).

lv_popup_allowed = abap_true.

  • if no line was selected...

IF lr_entity IS NOT BOUND.

lv_popup_allowed = abap_false.

ENDIF.

WHILE lr_entity IS BOUND.

lr_entity->get_property_as_value( EXPORTING iv_attr_name = 'PROCESS_TYPE'

IMPORTING ev_result = lv_process_type_new ).

IF lv_process_type_old <> lv_process_type_new.

lv_process_type_old = lv_process_type_new.

CALL FUNCTION 'CRM_ORDER_PROC_TYPE_SELECT_CB'

EXPORTING

iv_process_type = lv_process_type_new

IMPORTING

es_proc_type = ls_proc_type

EXCEPTIONS

entry_not_found = 1

text_entry_not_found = 2

OTHERS = 3.

IF sy-subrc = 0 AND ls_proc_type-user_stat_proc IS NOT INITIAL.

lv_status_profile_new = ls_proc_type-user_stat_proc.

ENDIF.

IF lv_status_profile_old IS INITIAL.

lv_status_profile_old = lv_status_profile_new.

ENDIF.

IF lv_status_profile_old <> lv_status_profile_new OR

lv_status_profile_new IS INITIAL.

lv_popup_allowed = abap_false.

EXIT.

ENDIF.

ENDIF.

lv_lines_selected = lv_lines_selected + 1.

lr_entity ?= lr_collection->get_next( ).

ENDWHILE.

IF lv_popup_allowed = abap_false.

  • Different Status Schemes: Through an Error Message

DATA: lr_msg_service TYPE REF TO cl_bsp_wd_message_service.

lr_msg_service = cl_bsp_wd_message_service=>get_instance( ).

CALL METHOD lr_msg_service->add_message

EXPORTING

iv_msg_type = if_genil_message_container=>mt_error

iv_msg_id = 'CRM_OPPORT_H'

iv_msg_number = 025

  • iv_msg_v1 = sy-msgv1

  • iv_msg_v2 = sy-msgv2

  • iv_msg_v3 = sy-msgv3

  • iv_msg_v4 = sy-msgv4

iv_msg_level = '1'

iv_important_info = abap_true.

ELSE.

  • Mass Change Possible: Go ahead

IF gv_status_profile = lv_status_profile_new.

  • Popup can be reused ! GT_STATUS is filled already !

ELSE.

  • GT_STATUS has to be updated

REFRESH gt_status.

gv_status_profile = lv_status_profile_new.

SELECT * INTO ls_tj30 FROM tj30

WHERE stsma = lv_status_profile_new ORDER BY stonr."#EC CI_BYPASS

CLEAR ls_status_wrk.

ls_status_wrk-status = ls_tj30-estat.

ls_status_wrk-user_stat_proc = lv_status_profile_new.

CALL FUNCTION 'CRM_STATUS_GET_TEXTS_OW'

CHANGING

cs_status_wrk = ls_status_wrk

EXCEPTIONS

text_not_found = 1

OTHERS = 2.

ls_status-status = ls_tj30-estat.

ls_status-txt30 = ls_status_wrk-txt30.

APPEND ls_status TO gt_status.

ENDSELECT.

REFRESH lt_col_def.

ls_col_def-columnname = 'TXT30'. "#EC NOTEXT

ls_col_def-title = 'STATUS'. "#EC NOTEXT

APPEND ls_col_def TO lt_col_def.

CLEAR ls_col_def.

lv_title = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_BT_ACTIVITY/MASSCHANGE_ACT_TITLE' ).

lv_window = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_BT/CHANGE_STATUS' ).

gt_status_popup = comp_controller->window_manager->create_decision_popup(

iv_title = lv_title

iv_description = lv_window

iv_visible_row_count = 7

iv_display_table = gt_status

iv_visible_columns = lt_col_def

).

gt_status_popup->set_on_close_event( iv_event_name = 'STATUS_CLOSE' iv_view = me )."#EC NOTEXT

ENDIF.

gt_status_popup->open( ).

ENDIF.

EH_ONSTATUS_CLOSE

DATA: lv_outputnode TYPE REF TO cl_bspwdcmp_bspwdcomponen_cn01,

lv_rowindex TYPE string,

lv_event_name TYPE string,

lv_op TYPE seocmpname,

ls_status TYPE crms_status_activity_ui,

lv_value TYPE string,

lr_cuco_bt126 TYPE REF TO cl_bt126s_a_apptsearchcuc_impl.

  • Get popup results

lv_outputnode ?= gt_status_popup->get_context_node( 'OUTPUTNODE' ).

lv_rowindex = lv_outputnode->get_selectedrowindex( ).

lv_event_name = lv_outputnode->get_event_name( ).

IF lv_event_name = 'OK'.

lv_outputnode->init_attributes( ).

READ TABLE gt_status INDEX lv_rowindex INTO ls_status.

lv_value = ls_status-status.

lr_cuco_bt126 ?= me->get_custom_controller(

controller_id = cl_bt126s_a_apptsearchcuc_impl=>global_cuco_name ).

CALL METHOD me->process_update

EXPORTING

iv_status = 'X'

iv_value = lv_value

ir_cuco_bt126 = lr_cuco_bt126.

METHOD process_update.

DATA: lo_sel_act TYPE REF TO cl_bsp_wd_collection_wrapper,

lo_marked TYPE REF TO if_bol_bo_col,

lo_iterator TYPE REF TO if_bol_bo_col_iterator,

lv_size TYPE i,

lv_index TYPE i,

lo_object TYPE REF TO if_bol_bo_property_access,

lo_activity_list TYPE REF TO cl_crm_bol_entity,

lo_activity TYPE REF TO cl_crm_bol_entity,

lo_header TYPE REF TO cl_crm_bol_entity,

lo_act_ext TYPE REF TO cl_crm_bol_entity,

lv_core TYPE REF TO cl_crm_bol_core,

lv_transaction TYPE REF TO if_bol_transaction_context,

lv_success TYPE crmt_boolean,

lo_related TYPE REF TO cl_bsp_wd_collection_wrapper,

lv_guid TYPE crmt_genil_object_guid,

lo_tx_ctxt TYPE REF TO cl_crm_bol_custom_tx_ctxt,

lo_transaction TYPE REF TO if_bol_transaction_context,

lo_status_set TYPE REF TO cl_crm_bol_entity,

lo_status TYPE REF TO cl_crm_bol_entity,

lv_attr_name TYPE name_komp,

lt_guid_name_val TYPE crmt_guid_name_val_comb_t,

ls_guid_name_val TYPE crmt_guid_name_val_comb,

lv_value TYPE string,

ls_status TYPE crms_status_activity_ui.

IF iv_value IS INITIAL.

RETURN.

ENDIF.

CREATE OBJECT lo_tx_ctxt.

lo_sel_act = me->typed_context->btqract->get_collection_wrapper( ).

lo_marked = lo_sel_act->get_marked( ).

lo_iterator = lo_marked->get_iterator( ).

lv_size = lo_iterator->size( ).

lv_core = cl_crm_bol_core=>get_instance( ).

IF lv_size = 0.

RETURN.

ENDIF.

lv_index = 1.

DO lv_size TIMES.

lo_object = lo_iterator->get_by_index( lv_index ).

lo_activity_list ?= lo_object.

CALL METHOD lo_activity_list->get_property_as_value

EXPORTING

iv_attr_name = 'GUID'

IMPORTING

ev_result = lv_guid.

lo_activity = lv_core->get_root_entity( iv_object_name = 'BTOrder' iv_object_guid = lv_guid )."#EC NOTEXT

lo_activity->switch_to_change_mode( ).

TRY.

lo_header = lo_activity->get_related_entity( 'BTOrderHeader' )."#EC NOTEXT

CATCH cx_crm_genil_model_error.

ENDTRY.

TRY.

lo_act_ext = lo_header->get_related_entity( 'BTHeaderActivityExt' )."#EC NOTEXT

CATCH cx_crm_genil_model_error.

ENDTRY.

  • set value..

IF NOT iv_category IS INITIAL.

lv_attr_name = 'CATEGORY'. "#EC NOTEXT

lo_act_ext->switch_to_change_mode( ).

CALL METHOD lo_act_ext->if_bol_bo_property_access~set_property

EXPORTING

iv_attr_name = lv_attr_name

iv_value = iv_value.

lv_value = iv_value.

ELSEIF NOT iv_priority IS INITIAL.

lv_attr_name = 'PRIORITY'. "#EC NOTEXT

lo_act_ext->switch_to_change_mode( ).

CALL METHOD lo_act_ext->if_bol_bo_property_access~set_property

EXPORTING

iv_attr_name = lv_attr_name

iv_value = iv_value.

lv_value = iv_value.

ELSEIF NOT iv_status IS INITIAL.

lv_attr_name = 'STATUS'. "#EC NOTEXT

TRY.

lo_status_set = lo_header->get_related_entity( 'BTHeaderStatusSet' ).

CATCH cx_crm_genil_model_error.

ENDTRY.

IF lo_status_set IS BOUND.

TRY.

lo_status = lo_status_set->get_related_entity( 'BTStatusHCurrent' ).

CATCH cx_crm_genil_model_error.

ENDTRY.

ENDIF.

IF lo_status IS BOUND.

lo_status->switch_to_change_mode( ).

CALL METHOD lo_status->if_bol_bo_property_access~set_property

EXPORTING

iv_attr_name = 'ACT_STATUS' "#EC NOTEXT

iv_value = iv_value.

READ TABLE gt_status INTO ls_status

WITH KEY status = iv_value.

lv_value = ls_status-txt30.

ENDIF.

ENDIF.

lv_core->modify( ).

lo_transaction = lo_activity->get_transaction( ).

IF lo_transaction IS BOUND.

lo_tx_ctxt->add_tx_context( lo_transaction ).

ENDIF.

lv_index = lv_index + 1.

ls_guid_name_val-guid = lv_guid.

ls_guid_name_val-name = lv_attr_name.

ls_guid_name_val-value = lv_value.

INSERT ls_guid_name_val INTO TABLE lt_guid_name_val.

ENDDO.

TRY.

lv_success = lo_tx_ctxt->if_bol_transaction_context~save( ).

IF NOT lv_success IS INITIAL.

lo_tx_ctxt->if_bol_transaction_context~commit( ).

LOOP AT lt_guid_name_val INTO ls_guid_name_val.

READ TABLE ir_cuco_bt126->gt_guid_name_val

TRANSPORTING NO FIELDS

WITH KEY guid = ls_guid_name_val-guid

name = ls_guid_name_val-name.

IF sy-subrc = 0.

MODIFY ir_cuco_bt126->gt_guid_name_val

INDEX sy-tabix FROM ls_guid_name_val

TRANSPORTING value.

ELSE.

INSERT ls_guid_name_val INTO TABLE ir_cuco_bt126->gt_guid_name_val.

ENDIF.

ENDLOOP.

ENDIF.

CATCH cx_root.

IF lv_success IS INITIAL.

  • debugging code.

ENDIF.

ENDTRY.

ENDMETHOD.

Apart from this u will find some more code in the view 'ApptSR',contetx node--BTQRACT, method GET_STATUS

method GET_STATUS.

DATA: current TYPE REF TO if_bol_bo_property_access.

DATA: dref TYPE REF TO data.

value =

'BTQRAct not bound'."#EC NOTEXT

if iterator is bound.

current = iterator->get_current( ).

else.

current = collection_wrapper->get_current( ).

endif.

TRY.

TRY.

dref = current->get_property( 'STATUS' ). "#EC NOTEXT

CATCH cx_crm_cic_parameter_error.

ENDTRY.

CATCH cx_sy_ref_is_initial cx_sy_move_cast_error

cx_crm_genil_model_error.

RETURN.

ENDTRY.

IF dref IS NOT BOUND.

value = 'BTQRAct/STATUS not bound'."#EC NOTEXT

RETURN.

ENDIF.

TRY.

value = if_bsp_model_util~convert_to_string( data_ref = dref

attribute_path = attribute_path ).

CATCH cx_bsp_conv_illegal_ref.

FIELD-SYMBOLS: <l_data> type DATA.

assign dref->* to <l_data>.

  • please implement here some BO specific handler coding

  • conversion of currency/quantity field failed caused by missing

  • unit relation

  • Coding sample:

  • provide currency, decimals, and reference type

  • value = cl_bsp_utility=>make_string(

  • value = <l_data>

  • reference_value = c_currency

  • num_decimals = decimals

  • reference_type = reference_type

  • ).

CONCATENATE <l_data> '-CURR/QUANT CONV FAILED-' INTO value

SEPARATED BY space. "#EC NOTEXT

CATCH cx_root.

value = '-CONVERSION FAILED-'. "#EC NOTEXT

ENDTRY.

    • Modify in case of mass changes happened*

IF gr_appt_cuco->gt_guid_name_val IS NOT INITIAL.

DATA: lv_desc TYPE crmt_description,

lv_guid_name_val TYPE crmt_guid_name_val_comb,

lv_guid TYPE crmt_object_guid.

current->get_property_as_value( EXPORTING iv_attr_name = 'GUID'"#EC NOTEXT

IMPORTING ev_result = lv_guid ).

READ TABLE gr_appt_cuco->gt_guid_name_val

WITH KEY guid = lv_guid

name = 'STATUS' "#EC NOTEXT

INTO lv_guid_name_val.

IF lv_guid_name_val IS NOT INITIAL.

value = lv_guid_name_val-value.

CALL METHOD cl_crm_uiu_cust_get=>get_text_for_field_value

EXPORTING

iv_fieldname = 'STATUS' "#EC NOTEXT

iv_value = value

RECEIVING

rv_text = lv_desc

EXCEPTIONS

error_occurred = 1

OTHERS = 2.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

value = lv_desc.

ENDIF.

ENDIF.

endmethod.

Hope this helps u.

Actually when u select a status and click ok button the database value gets chnage which doesnt reflect on ui, so some additional code is written at the result area. U need not click the button twice.

        • Reward if useful

Regards,

Ruby.

yevgen_trukhin
Advisor
Advisor
0 Kudos

Hello Madhu,

Can you paste full code of the event handler 'Change Status'?

There can be multiple explanations for this problem, one of them BOL error. The code would help to see what is going on. The code you added for refreshing is just resetting the collection to its copy which is probably not helping to resolve the problem.

Best Regards,

Yevgen

Former Member
0 Kudos

Hello Yevgen,

plz find full code for the following events:

Method : EH_ONCHANGESTATUS " Change Status";

*method EH_ONCHANGESTATUS.*

data: lt_col_def type tableviewcontroltab,

ls_col_def type line of tableviewcontroltab,

lt_ddlb type bsp_wd_dropdown_table,

ls_ddlb type bsp_wd_dropdown_line,

ls_tj30 type tj30,

ls_status_wrk type crmt_status_wrk.

data: lr_entity type ref to cl_crm_bol_entity,

lr_msgsrv type ref to cl_bsp_wd_message_service,

lr_collection type ref to if_bol_bo_col.

  • load status...

field-symbols:

<ls_status> type crms_status_activity_ui.

data:

lv_window type string,

lv_title type string,

lv_lines_selected type integer,

lv_popup_allowed type crmt_boolean,

ls_proc_type type crmc_proc_type,

lv_status_profile_new type j_stsma,

lv_status_profile_old type j_stsma,

lv_process_type type crmt_process_type,

lv_process_type_new type crmt_process_type,

lv_process_type_old type crmt_process_type,

ls_ddlb_options type crms_thtmlb_search_ddlb_nvp,

lt_status type table of crms_status_activity_ui,

ls_status type crms_status_activity_ui,

lv_description type crmt_description.

    • Code Changes for Mass Status Change by Sunita

data: lr_current type ref to cl_crm_bol_entity,

lv_status_set type ref to if_bol_bo_col,

lr_status type ref to cl_crm_bol_entity,

lv_status type string,

gv_status type string,

lv_processtype type string,

gv_processtype type string,

lv_size type i.

data: begin of wa_tab,

proc_type type string,

status type string,

end of wa_tab,

itab like standard table of wa_tab.

CLEAR gt_status.

lv_popup_allowed = abap_true.

lr_collection ?= me->typed_context->btqract->collection_wrapper->if_bol_bo_col_multi_sel~get_marked( ).

lv_size = lr_collection->size( ).

do lv_size times.

if sy-index = 1.

lr_entity ?= lr_collection->get_first( ).

check lr_entity is bound.

lv_processtype = lr_entity->get_property_as_string( iv_attr_name = 'PROCESS_TYPE' ).

me->typed_context->btorder->on_new_focus( focus_bo = lr_entity ).

lr_current ?= me->typed_context->btorder->collection_wrapper->get_current( ).

check lr_current is bound.

lr_current ?= lr_current->get_related_entity( iv_relation_name = 'BTOrderHeader' ).

check lr_current is bound.

lr_current ?= lr_current->get_related_entity( iv_relation_name = 'BTHeaderStatusSet' ).

check lr_current is bound.

lr_current ?= lr_current->get_related_entity( iv_relation_name = 'BTStatusHCurrent' ).

lv_status = lr_current->get_property_as_string( iv_attr_name = 'STATUS' ).

wa_tab-proc_type = lv_processtype.

wa_tab-status = lv_status.

append wa_tab to itab.

else.

lr_entity ?= lr_collection->get_next( ).

check lr_entity is bound.

lv_processtype = lr_entity->get_property_as_string( iv_attr_name = 'PROCESS_TYPE' ).

me->typed_context->btorder->on_new_focus( focus_bo = lr_entity ).

lr_current ?= me->typed_context->btorder->collection_wrapper->get_current( ).

check lr_current is bound.

lr_current ?= lr_current->get_related_entity( iv_relation_name = 'BTOrderHeader' ).

check lr_current is bound.

lr_current ?= lr_current->get_related_entity( iv_relation_name = 'BTHeaderStatusSet' ).

check lr_current is bound.

lr_current ?= lr_current->get_related_entity( iv_relation_name = 'BTStatusHCurrent' ).

lv_status = lr_current->get_property_as_string( iv_attr_name = 'STATUS' ).

read table itab with key proc_type = lv_processtype

status = lv_status transporting no fields.

if sy-subrc = 0.

continue.

else.

lv_popup_allowed = abap_false.

lr_msgsrv = cl_bsp_wd_message_service=>get_instance( ).

lr_msgsrv->add_message(

iv_msg_type = 'I'

iv_msg_id = 'CRM_ACTIVITY_H'

iv_msg_number = '809'

iv_important_info = abap_true

).

return.

  • exit.

endif.

endif.

enddo.

  • if no line was selected...

if lr_entity is not bound.

lv_popup_allowed = abap_false.

endif.

data: lv_object_guid TYPE crmt_object_guid,

lv_object_kind TYPE crmt_object_kind,

lt_status_ui TYPE crmt_status_ui_tab.

FIELD-SYMBOLS:

<status_ui> TYPE crmt_status_ui.

*if lv_popup_allowed = abap_true.

lr_current->get_property_as_value( EXPORTING iv_attr_name = 'GUID'

IMPORTING ev_result = lv_object_guid ).

lr_current->get_property_as_value( EXPORTING iv_attr_name = 'KIND'

IMPORTING ev_result = lv_object_kind ).

CALL METHOD cl_crm_uiu_status_info=>get_status_info

EXPORTING

iv_object_guid = lv_object_guid

iv_object_kind = lv_object_kind

RECEIVING

rt_status_ui = lt_status_ui

EXCEPTIONS

error_occurred = 1

OTHERS = 2.

LOOP AT lt_status_ui ASSIGNING <status_ui>.

ls_status-status = <status_ui>-status.

ls_status-txt30 = <status_ui>-txt30.

append ls_status to gt_status.

ENDLOOP.

refresh lt_col_def.

ls_col_def-columnname = 'TXT30'. "#EC NOTEXT

ls_col_def-title = 'STATUS'. "#EC NOTEXT

append ls_col_def to lt_col_def.

clear ls_col_def.

lv_title = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_BT_ACTIVITY/MASSCHANGE_ACT_TITLE' ).

lv_window = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_BT/CHANGE_STATUS' ).

gt_status_popup = comp_controller->window_manager->create_decision_popup(

iv_title = lv_title

iv_description = lv_window

iv_visible_row_count = 7

iv_display_table = gt_status

iv_visible_columns = lt_col_def

).

gt_status_popup->set_on_close_event( iv_event_name = 'STATUS_CLOSE' iv_view = me )."#EC NOTEXT

gt_status_popup->open( ).

*endif.

endmethod.

*Method : "Status Close"*

method EH_ONSTATUS_CLOSE.

DATA: lv_outputnode TYPE REF TO cl_bspwdcmp_bspwdcomponen_cn01,

lv_rowindex TYPE string,

lv_event_name TYPE string,

lv_op TYPE seocmpname,

ls_status TYPE crms_status_activity_ui,

lv_value TYPE string,

lr_cuco_bt126 TYPE REF TO ZL_Z_DFLT_A_QUERYCUCO_IMPL.

  • Get popup results

lv_outputnode ?= gt_status_popup->get_context_node( 'OUTPUTNODE' ).

lv_rowindex = lv_outputnode->get_selectedrowindex( ).

lv_event_name = lv_outputnode->get_event_name( ).

IF lv_event_name = 'OK'.

lv_outputnode->init_attributes( ).

READ TABLE gt_status INDEX lv_rowindex INTO ls_status.

lv_value = ls_status-status.

  • lr_cuco_bt126 ?= me->get_custom_controller(

  • controller_id = ZL_Z_DFLT_A_QUERYCUCO_IMPL=>global_cuco_name ).

lr_cuco_bt126 ?= me->get_custom_controller(

controller_id = ZL_Z_DFLT_A_QUERYCUCO_IMPL=>global_cuco_name ).

CALL METHOD me->process_update

EXPORTING

iv_status = 'X'

iv_value = lv_value

ir_cuco_bt126 = lr_cuco_bt126.

ENDIF.

endmethod.

Method : process_update

method PROCESS_UPDATE.

DATA: lo_sel_act TYPE REF TO cl_bsp_wd_collection_wrapper,

lo_marked TYPE REF TO if_bol_bo_col,

lo_iterator TYPE REF TO if_bol_bo_col_iterator,

lv_size TYPE i,

lv_index TYPE i,

lo_object TYPE REF TO if_bol_bo_property_access,

lo_activity_list TYPE REF TO cl_crm_bol_entity,

lo_activity TYPE REF TO cl_crm_bol_entity,

lo_header TYPE REF TO cl_crm_bol_entity,

lo_act_ext TYPE REF TO cl_crm_bol_entity,

lv_core TYPE REF TO cl_crm_bol_core,

lv_transaction TYPE REF TO if_bol_transaction_context,

lv_success TYPE crmt_boolean,

lo_related TYPE REF TO cl_bsp_wd_collection_wrapper,

lv_guid TYPE crmt_genil_object_guid,

lo_tx_ctxt TYPE REF TO cl_crm_bol_custom_tx_ctxt,

lo_transaction TYPE REF TO if_bol_transaction_context,

lo_status_set TYPE REF TO cl_crm_bol_entity,

lo_status TYPE REF TO cl_crm_bol_entity,

lv_attr_name TYPE name_komp,

lt_guid_name_val TYPE crmt_guid_name_val_comb_t,

ls_guid_name_val TYPE crmt_guid_name_val_comb,

lv_value TYPE string,

ls_status TYPE crms_status_activity_ui,

lr_col_all TYPE REF TO if_bol_bo_col.

IF iv_value IS INITIAL.

RETURN.

ENDIF.

CREATE OBJECT lo_tx_ctxt.

lo_sel_act = me->typed_context->btqract->get_collection_wrapper( ).

lo_marked = lo_sel_act->get_marked( ).

lo_iterator = lo_marked->get_iterator( ).

lv_size = lo_iterator->size( ).

lv_core = cl_crm_bol_core=>get_instance( ).

IF lv_size = 0.

RETURN.

ENDIF.

lv_index = 1.

DO lv_size TIMES.

lo_object = lo_iterator->get_by_index( lv_index ).

lo_activity_list ?= lo_object.

CALL METHOD lo_activity_list->get_property_as_value

EXPORTING

iv_attr_name = 'GUID'

IMPORTING

ev_result = lv_guid.

lo_activity = lv_core->get_root_entity( iv_object_name = 'BTOrder' iv_object_guid = lv_guid )."#EC NOTEXT

lo_activity->switch_to_change_mode( ).

TRY.

lo_header = lo_activity->get_related_entity( 'BTOrderHeader' )."#EC NOTEXT

CATCH cx_crm_genil_model_error.

ENDTRY.

TRY.

lo_act_ext = lo_header->get_related_entity( 'BTHeaderActivityExt' )."#EC NOTEXT

CATCH cx_crm_genil_model_error.

ENDTRY.

  • set value..

IF NOT iv_category IS INITIAL.

lv_attr_name = 'CATEGORY'. "#EC NOTEXT

lo_act_ext->switch_to_change_mode( ).

CALL METHOD lo_act_ext->if_bol_bo_property_access~set_property

EXPORTING

iv_attr_name = lv_attr_name

iv_value = iv_value.

lv_value = iv_value.

ELSEIF NOT iv_priority IS INITIAL.

lv_attr_name = 'PRIORITY'. "#EC NOTEXT

lo_act_ext->switch_to_change_mode( ).

CALL METHOD lo_act_ext->if_bol_bo_property_access~set_property

EXPORTING

iv_attr_name = lv_attr_name

iv_value = iv_value.

lv_value = iv_value.

ELSEIF NOT iv_status IS INITIAL.

lv_attr_name = 'STATUS'. "#EC NOTEXT

TRY.

lo_status_set = lo_header->get_related_entity( 'BTHeaderStatusSet' ).

CATCH cx_crm_genil_model_error.

ENDTRY.

IF lo_status_set IS BOUND.

TRY.

lo_status = lo_status_set->get_related_entity( 'BTStatusHCurrent' ).

CATCH cx_crm_genil_model_error.

ENDTRY.

ENDIF.

IF lo_status IS BOUND.

lo_status->switch_to_change_mode( ).

CALL METHOD lo_status->if_bol_bo_property_access~set_property

EXPORTING

iv_attr_name = 'ACT_STATUS' "#EC NOTEXT

iv_value = iv_value.

READ TABLE gt_status INTO ls_status

WITH KEY status = iv_value.

lv_value = ls_status-txt30.

ENDIF.

ENDIF.

lv_core->modify( ).

lo_transaction = lo_activity->get_transaction( ).

IF lo_transaction IS BOUND.

lo_tx_ctxt->add_tx_context( lo_transaction ).

ENDIF.

lv_index = lv_index + 1.

ls_guid_name_val-guid = lv_guid.

ls_guid_name_val-name = lv_attr_name.

ls_guid_name_val-value = lv_value.

INSERT ls_guid_name_val INTO TABLE lt_guid_name_val.

ENDDO.

TRY.

lv_success = lo_tx_ctxt->if_bol_transaction_context~save( ).

IF NOT lv_success IS INITIAL.

lo_tx_ctxt->if_bol_transaction_context~commit( ).

LOOP AT lt_guid_name_val INTO ls_guid_name_val.

READ TABLE ir_cuco_bt126->gt_guid_name_val

TRANSPORTING NO FIELDS

WITH KEY guid = ls_guid_name_val-guid

name = ls_guid_name_val-name.

IF sy-subrc = 0.

MODIFY ir_cuco_bt126->gt_guid_name_val

INDEX sy-tabix FROM ls_guid_name_val

TRANSPORTING value.

ELSE.

INSERT ls_guid_name_val INTO TABLE ir_cuco_bt126->gt_guid_name_val.

  • lo_sel_act = me->typed_context->btqract->get_collection_wrapper( ).

  • lo_marked = lo_sel_act->get_marked( ).

  • lo_iterator = lo_marked->get_iterator( ).

ENDIF.

ENDLOOP.

lr_col_all = me->typed_context->btqract->collection_wrapper->get_copy( ).

me->typed_context->btqract->collection_wrapper->set_collection( lr_col_all ).

ENDIF.

CATCH cx_root.

IF lv_success IS INITIAL.

  • debugging code.

ENDIF.

ENDTRY.

endmethod.

Let me know if you need any information.

thanks in advance.

Madhusudan