on 10-27-2011 5:01 AM
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.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.