cancel
Showing results for 
Search instead for 
Did you mean: 

Want to copy Delivery address of one line item in shopping cart to all item

Former Member
0 Kudos

Hi Experts,

We are upgrading from SRM 5.0 to SRM 7.0,In SC Creation We want to copy Delivery address of one line item in shopping cart to all line items in Shopping cart by clicking Change All Items button.This is custom button we added this button and we had written code to achieve the functionality but it is not working.This is same like Change All Items button in Account Assigment for copy accont details of one line item to all other line items in SC.

Web Dynpro Component:/SAPSRM/WDC_UI_DO_SHIPTO

Web Dynpro View:V_DODC_SHIPTO

Thanks,

Aarthi.

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi Nataraj,

I also have to implement this button. Have you fixed your Problem? Can you give me some examples how to implement this?

thanks.

Former Member
0 Kudos

HI,

Please send your code ..

The below is alternate solution.

If you change the Delivery address on one item then that time BBP_DOC_CHANGE_BADI wiill trigger then you can copy the same delivery address to all items in BBP_DOC_CHANGE_BADI badi. With this custom button is not required.

regards,

Devi prasad

Former Member
0 Kudos

Hi Prasad,

Our customer needs that button,they want whenever they are clicking the button delivery address should copy to all line items.

In my action ONCHANGE_ALL_ITEMS i called this method

wd_this->mo_dodm_shipto->zchange_all_items( ).

zchange_all_items( ) is implemented in class /SAPSRM/CL_CH_WD_DODM_SHIPTO.

the code i wrote inside zchange_all_items( )

*Error

DATA: LX_PDO_ABORT TYPE REF TO /SAPSRM/CX_PDO_ABORT, " Class for Fatal error caught by PDO Layer

LX_PDO_ERROR TYPE REF TO /SAPSRM/CX_PDO_ERROR. " Class for PDO General Exception

  • Object Instances

DATA: LO_MSG_CONSUMER TYPE REF TO /SAPSRM/IF_PDO_MSG_CONSUMER,

LO_PDO_SHIPTO TYPE REF TO /SAPSRM/IF_PDO_DO_PARTNER.

  • Context-Data

DATA: lte_cll_shipto TYPE /sapsrm/if_ch_wd_set_facade=>gt_guid_element,

loe_cll_shipto TYPE REF TO /sapsrm/if_ch_wd_set_element.

  • Field Symbols

FIELD-SYMBOLS <lse_cll_shipto> LIKE LINE OF lte_cll_shipto.

  • DATA : lo_pdo_acc TYPE REF TO /sapsrm/if_pdo_do_acct_assgmnt.

DATA : ls_shipto_cll type /SAPSRM/S_CLL_SHIPTO,

lt_pdo_partnerdetails TYPE bbp_pdt_partner,

ls_pdo_partnerdetails TYPE bbp_pds_partner,

LV_GUID TYPE BBP_GUID,

lv_item_guid type bbp_guid,

lv_filled TYPE wdy_boolean.

*

*exceptions

DATA : LX_ABORT TYPE REF TO /SAPSRM/CX_PDO_ABORT.

*Constants

CONSTANTS : LC_OBJECT_ID TYPE CRMT_SUBOBJECT_CATEGORY_DB VALUE 'BUS2121001',

LC_ADDR_ORIGIN TYPE /SAPSRM/S_CLL_SHIPTO-ADDR_ORIGIN VALUE 'B'.

IF LV_FILLED = ABAP_TRUE.

  • Downcasting to shipto

LO_PDO_SHIPTO ?= MO_PDO.

  • insert the clipboard into facade and update and submit update

me->/sapsrm/if_cll_do_mapper~insert_from_clipboard( io_set_facade = mon_cll_set_facade ).

  • Add new Accounting entries.

lte_cll_shipto = mon_cll_set_facade->get_data_elements( ). "get all elements from the context

LOOP AT lte_cll_shipto ASSIGNING <lse_cll_shipto>.

loe_cll_shipto = <lse_cll_shipto>-set_element.

loe_cll_shipto->get_static_attributes( IMPORTING rv_attributes = ls_shipto_cll ).

  • Map ui-structure to pdo-structure

MOVE-CORRESPONDING ls_shipto_cll TO ls_pdo_partnerdetails.

IF LS_SHIPTO_CLL-PARTNER_FCT = mv_part_func.

LS_PDO_PARTNERDETAILS-PARTNER_FCT = ''.

ELSE.

LS_PDO_PARTNERDETAILS-PARTNER_FCT = LS_SHIPTO_CLL-PARTNER_FCT.

ENDIF.

IF ls_pdo_partnerdetails-del_ind NE 'X'.

CALL FUNCTION 'GUID_CREATE'

IMPORTING

ev_guid_16 = ls_pdo_partnerdetails-p_guid.

  • mv_acc_guid_split = ls_pdo_shipto-guid .

IF mo_scope = 1.

ls_pdo_partnerdetails-p_guid = mon_cll_set_facade->get_bo_guid( ).

ELSE.

ls_pdo_partnerdetails-p_guid = mo_parent_bo_mapper->items_get_lead_selection( ).

ENDIF.

APPEND ls_pdo_partnerdetails TO lt_pdo_partnerdetails.

ENDIF.

CLEAR : ls_pdo_partnerdetails, ls_shipto_cll.

ENDLOOP.

  • Add New items to PDO

IF NOT lt_pdo_partnerdetails[] IS INITIAL.

TRY.

LO_PDO_SHIPTO->update_item_partners( EXPORTING it_partner = lt_pdo_partnerdetails

iv_item_guid = lv_item_guid

CHANGING co_message_handler = mo_pdo_message_consumer ).

CATCH /sapsrm/cx_pdo_abort INTO lx_pdo_abort.

mo_cll_message_handler->set_abort( io_pdo_abort_exception = lx_pdo_abort ).

CATCH /sapsrm/cx_pdo_error INTO lx_pdo_error.

mo_cll_message_handler->add_exception( io_pdo_error_exception = lx_pdo_error ).

ENDTRY.

  • Update PDO with the changed data.

TRY.

mo_pdo->submit_update( ).

CATCH /sapsrm/cx_pdo_abort INTO lx_pdo_abort.

mo_cll_message_handler->set_abort( io_pdo_abort_exception = lx_pdo_abort ).

CATCH /sapsrm/cx_pdo_error INTO lx_pdo_error.

mo_cll_message_handler->add_exception( io_pdo_error_exception = lx_pdo_error ).

ENDTRY.

  • Fire refresh of DO Mappers registered for refresh since the item table has acc related data.

mo_parent_bo_mapper->fire_event_refresh( iv_perform_updates = abap_false ).

ENDIF.

ENDIF.

Thanks,

Aarthi.

Former Member
0 Kudos

Hi,

try the below code.I just copied the delivery address number to all the remaining items.Let me know if it not works..

in the below code i took the ship to address partner function as '0017'.

regards

Devi prasad

Method zchange_all_items.

  • Object Instances

DATA: lo_msg_consumer TYPE REF TO /sapsrm/if_pdo_msg_consumer,

lo_pdo_shipto TYPE REF TO /sapsrm/if_pdo_do_partner.

  • Context-Data

DATA: lte_cll_shipto TYPE /sapsrm/if_ch_wd_set_facade=>gt_guid_element,

loe_cll_shipto TYPE REF TO /sapsrm/if_ch_wd_set_element.

  • Structures

data : ls_pdo_partnerdetails TYPE bbp_pds_partner, "#EC NEEDED

ls_cll_shipto TYPE /sapsrm/s_cll_shipto.

  • Variables

DATA: lv_item_guid TYPE bbp_guid,

lv_partner_guid TYPE bbp_guid.

  • Exceptions

DATA: lx_pdo_error TYPE REF TO /sapsrm/cx_pdo_error,

lx_pdo_abort TYPE REF TO /sapsrm/cx_pdo_abort,

lx_wrong_mode TYPE REF TO /sapsrm/cx_pdo_wrong_mode.

  • Field Symbols

FIELD-SYMBOLS : <lse_cll_shipto> LIKE LINE OF lte_cll_shipto,

<fs_pdo_partnerdetails> type BBP_PDS_PARTNER..

Data lt_pdo_partnerdetails TYPE bbp_pdt_partner.

  • Get the item guid

lv_item_guid = mo_parent_bo_mapper->items_get_lead_selection( ).

  • downcasting to shipto

lo_pdo_shipto ?= mo_pdo.

u201C Ship to address partner function(check this one according to your syst

Read table mt_pdo_partnerdetails into ls_pdo_partnerdetails with key p_guid = lv_item_guid

partner_fct = MC_PART_PFT "ship to addr partner fct

del_ind = abap_false.

u201C Update the current changed item address number to remaning partners

u201C Ship to address partner function(check this one according to your system)

Loop at mt_pdo_partnerdetails assigning <fs_pdo_partnerdetails> where p_guid ne lv_item_guid

And partner_fct = MC_PART_PFT "ship to addr partner fct

and del_ind = abap_false.

<fs_pdo_partnerdetails >-addr_no = ls_pdo_partnerdetails-addr_no.

Append <fs_pdo_partnerdetails> to lt_pdo_partnerdetails .

IF NOT lt_pdo_partnerdetails[] IS INITIAL.

TRY.

LO_PDO_SHIPTO->update_item_partners( EXPORTING it_partner = lt_pdo_partnerdetails

iv_item_guid = <fs_pdo_partnerdetails>-p_guid

CHANGING co_message_handler = mo_pdo_message_consumer ).

CATCH /sapsrm/cx_pdo_abort INTO lx_pdo_abort.

mo_cll_message_handler->set_abort( io_pdo_abort_exception = lx_pdo_abort ).

CATCH /sapsrm/cx_pdo_error INTO lx_pdo_error.

mo_cll_message_handler->add_exception( io_pdo_error_exception = lx_pdo_error ).

ENDTRY.

Refresh lt_pdo_partnerdetails.

Endloop.

  • Update PDO with the changed data.

TRY.

mo_pdo->submit_update( ).

CATCH /sapsrm/cx_pdo_abort INTO lx_pdo_abort.

mo_cll_message_handler->set_abort( io_pdo_abort_exception = lx_pdo_abort ).

CATCH /sapsrm/cx_pdo_error INTO lx_pdo_error.

mo_cll_message_handler->add_exception( io_pdo_error_exception = lx_pdo_error ).

ENDTRY.

  • Fire refresh of DO Mappers registered for refresh since the item table has acc related data.

mo_parent_bo_mapper->fire_event_refresh( iv_perform_updates = abap_false ).

Endmethod.