Change determined data

These examples are not intended for a 1:1 copy, but to demonstrate the concepts and how to use certain patterns. Sometimes they use parameters which are only available in the context of the SAP business object like im_likp , im_vttk, etc. Please adapt the examples to the context of the certain BAdI you are just implementing.

Change the remark on consignment level

    remark TYPE /aeb/if_aes_pb_consignment_do=>t_remark.

  CONCATENATE 'Invoice number: ' im_vbrk-vbeln ', invoice date: ' im_vbrk-fkdat
         INTO remark
         SEPARATED BY space.
  im_value->set_remark( remark ).

Change the profile

IF im_vttk-vsbed = '01'.
*   the profile code which is set here only has to be existend in the international customs engine but not in the sap plugin 
    im_value->set_profile_code( 'SPECIAL_PROFILE' ).

Change the net mass on delivery level

    total_net_mass_nv TYPE REF TO /aeb/cl_01_dec_17_3_nv,
    total_net_mass    TYPE REF TO /aeb/if_aes_pb_quantity_do,
    deliveries        TYPE /aeb/if_aes_pb_delivery_do=>tt_delivery_do,
    first_delivery    TYPE REF TO /aeb/if_aes_pb_delivery_do.

  total_net_mass_nv = im_nullable_value_factory->dec_17_3( '500.00' ).
  total_net_mass = im_cons_data_object_factory->new_aes_pb_quantity_do_v1(
                        im_unit  = 'KG'
                        im_value = total_net_mass_nv ).

  deliveries = im_value->get_deliveries( ).
  READ TABLE deliveries INTO first_delivery INDEX 1.
  first_delivery->set_total_net_mass( total_net_mass ).

Change the item quantity

    quantity_nv      TYPE REF TO /aeb/cl_01_dec_17_3_nv,
    new_quantity     TYPE REF TO /aeb/if_aes_pb_quantity_do,
    deliveries       TYPE /aeb/if_aes_pb_delivery_do=>tt_delivery_do,
    first_delivery   TYPE REF TO /aeb/if_aes_pb_delivery_do,
    items            TYPE /aeb/if_aes_pb_delivery_itm_do=>tt_delivery_item_do,
    first_item       TYPE REF TO /aeb/if_aes_pb_delivery_itm_do,
    quantities       TYPE /aeb/if_aes_pb_ic_quantity_do=>tt_ic_quantity_do,
    current_quantity TYPE REF TO /aeb/if_aes_pb_ic_quantity_do.

  quantity_nv = im_nullable_value_factory->dec_17_3( 1 ).
  new_quantity = im_cons_data_object_factory->new_aes_pb_quantity_do_v1( im_unit  = 'ST'
                                                                         im_value = quantity_nv ).

  deliveries = im_value->get_deliveries( ).
  READ TABLE deliveries INTO first_delivery INDEX 1.
  items = first_delivery->get_items( ).
  READ TABLE items INTO first_item INDEX 1.
  quantities = first_item->get_quantities( ).
  LOOP AT quantities INTO current_quantity.
    IF current_quantity->get_quantity_type( ) = 'ITEM'.
      current_quantity->set_quantity( new_quantity ).

Set the EORI number of a party

    DATA: lv_partner     TYPE bu_partner,
          lt_customs_ids TYPE /aeb/if_aes_pb_cust_ident_do=>tt_cust_ident_do,
          lv_idnumber    TYPE /aeb/if_aes_pb_cust_ident_do=>t_identification

    DATA(lt_deliveries) = im_value->get_deliveries( ).
    LOOP AT lt_deliveries INTO DATA(lo_delivery).
      DATA(lt_parties) = lo_delivery->get_parties( ).
      LOOP AT lt_parties INTO DATA(lo_party).
        IF lo_party->get_party_type( ) = 'CARRIER'.
          DATA(lv_company_number) = lo_party->get_company_number( ).
              input  = lv_company_number
              output = lv_partner.
          SELECT SINGLE idnumber FROM but0id WHERE partner = @lv_partner AND type = 'SLLEOR' INTO @lv_idnumber.
          IF sy-subrc = 0.
            DATA(lo_customs_id) = im_cons_data_object_factory->new_aes_pb_cust_ident_do(
                                    im_identification      = lv_idnumber
                                    im_identification_type = 'EORI'
            APPEND lo_customs_id TO lt_customs_ids.
            lo_party->set_customs_ids( im_value = lt_customs_ids ).

Set the aggregation or splitting criteria for an item

For more information about the meaning of the aggregation and split criteria , see:

This example shows how to set the aggregation criteria, but one can also use it the same way for setting the split criteria by calling "set_additional_split_criteria( 'this is the value of the split criteria' )".

  deliveries          TYPE /aeb/if_aes_pb_delivery_do=>tt_delivery_do,
  curr_delivery       TYPE REF TO /aeb/if_aes_pb_delivery_do,
  items               TYPE /aeb/if_aes_pb_delivery_itm_do=>tt_delivery_item_do,
  curr_item           TYPE REF TO /aeb/if_aes_pb_delivery_itm_do,
  add_aggregation_key TYPE REF TO /aeb/cl_01_char_100_nv.

deliveries = im_value->get_deliveries( ).

LOOP AT deliveries INTO curr_delivery.
  items = curr_delivery->get_items( ).
  LOOP AT items INTO curr_item.
    add_aggregation_key = im_nullable_value_factory->char_100( '3LLA' ).
    curr_item->set_additional_aggregation_key( add_aggregation_key ).

Set the security consignee in the delivery

deliveries         TYPE /aeb/if_aes_pb_delivery_do=>tt_delivery_do,
curr_delivery      TYPE REF TO /aeb/if_aes_pb_delivery_do,
secu_consignee     TYPE REF TO /aeb/if_aes_pb_party_do.   

deliveries = im_value->get_deliveries( ).

 LOOP AT deliveries INTO curr_delivery.
 secu_consignee = im_cons_data_object_factory->new_aes_pb_party_do( ).
        parties = curr_delivery->get_parties( ).
        LOOP AT parties INTO party.
          IF party->get_party_type( ) = 'CONSIGNEE'.
            fld_city          = party->get_city( ).
            fld_c_number      = party->get_company_number( ).
            fld_country       = party->get_country( ).
            fld_district      = party->get_district( ).
            fld_name          = party->get_name( ).
            fld_post_code     = party->get_post_code( ).
            fld_street        = party->get_street( ).
            secu_consignee->set_city( fld_city ).
            secu_consignee->set_company_number( fld_c_number ).
            secu_consignee->set_country( fld_country ).
            secu_consignee->set_district( fld_district ).
            secu_consignee->set_name( fld_name ).
            secu_consignee->set_post_code( fld_post_code ).
            secu_consignee->set_street( fld_street ).
            secu_consignee->set_party_type( 'CONSIGNEE_SECURITY' ).
            APPEND secu_consignee TO parties.
        curr_delivery->set_parties( parties ).

Change goods description of a delivery

  deliveries            TYPE /aeb/if_aes_pb_delivery_do=>tt_delivery_do,
  first_delivery        TYPE REF TO /aeb/if_aes_pb_delivery_do,
  tmp_goods_description TYPE REF TO /aeb/if_aes_pb_text_in_lan_do,
  goods_description     TYPE /aeb/if_aes_pb_text_in_lan_do=>tt_text_in_lan_do.

deliveries = im_value->get_deliveries( ).
READ TABLE deliveries INTO first_delivery INDEX 1.
IF sy-subrc <> 0.
* There are no deliveries in this consignment

tmp_goods_description = im_cons_data_object_factory->new_aes_pb_text_in_lan_do(
  im_language_iso_code = 'EN'
  im_text = 'Sample goods description' ).
APPEND tmp_goods_description TO goods_description.

tmp_goods_description = im_cons_data_object_factory->new_aes_pb_text_in_lan_do(
  im_language_iso_code = 'DE'
  im_text = 'Beispielwarenbeschreibung' ).
APPEND tmp_goods_description TO goods_description.

first_delivery->set_goods_description( goods_description ).