These docs are for v1. Click to read the latest docs for v3.

Handle extended data

If you have to transfer extended data for your service item. You have to understand the data strcuture generic data record.

Here is a code example how you have to fill the extended data.

DATA:
  billing_bf             TYPE REF TO zco_ibilling_bf,
  output_data            TYPE zcreate_service_items_respons1,
  input_data             TYPE zcreate_service_items1,
  system_fault_exception TYPE REF TO cx_ai_system_fault,
  curr_message           LIKE LINE OF output_data-parameters-result-base-messages,
  curr_message_text      LIKE LINE OF curr_message-message_texts,
  item                   LIKE LINE OF input_data-parameters-request-items,
  item_result            TYPE zbservice_item_result_dto,
  field                  LIKE LINE OF item-extended_data-fields,
  subrecord              TYPE znamed_generic_data_record_dto,
  pkg_subrecord          TYPE znamed_generic_data_record_dto,
  pkg_record                 LIKE item-extended_data,
  record                 LIKE item-extended_data,
  xml_factory            TYPE REF TO if_proxy_sxml_stream,
  xml                    TYPE xsdany.
TRY.
    CREATE OBJECT billing_bf EXPORTING logical_port_name = 'ZBILLING_BF_TEST2'.
  CATCH cx_ai_system_fault INTO system_fault_exception.
    WRITE 'Could not instantiate the billingBF '.
    WRITE system_fault_exception->get_text( ).
    RETURN.
ENDTRY.


input_data-parameters-request-base-client_ident_code = 'COMPANY_NAME'.
input_data-parameters-request-base-client_system_id = '123'.
input_data-parameters-request-base-user_name = sy-uname.
APPEND 'EN' TO input_data-parameters-request-base-result_language_iso_codes.

input_data-parameters-request-parms-create_settlements_immediately = ' '.
input_data-parameters-request-parms-return_trace_info = 'X'.

item-beneficiary-base-name = 'AEB'.
item-beneficiary-base-city = 'Stuttgart'.
item-beneficiary-base-country_isocode = 'DE'.
item-beneficiary-base-company_number  = 'TNT_BE'.

item-charge_date-base-timezone = 'GMT+01:00'.
item-charge_date-base-date_in_timezone = '2019-05-20 13:11:35'.
item-client_orga_id = 'AEB_NORTH'.
item-client_system_cost_center = '1000'.
item-client_system_user-base-name = sy-uname.
item-description = 'API Test service item'.
item-item_id = 'API_TEST_ITEM_ID_01'.
item-order_date-base-timezone = 'GMT+01:00'.
item-order_date-base-date_in_timezone = '2019-05-20 13:11:35'.

item-orderer-base-name = 'AEB'.
item-orderer-base-city = 'Stuttgart'.
item-orderer-base-company_number  = 'TNT_BE'.
item-orderer-base-country_isocode = 'DE'.
item-orderer-base-street = 'Sigmaringerstraße 109'.
item-orderer-base-postcode = '70567'.

item-order_number = '4711'.

item-payer-base-name = 'AEB'.
item-payer-base-city = 'Stuttgart'.
item-payer-base-country_isocode = 'DE'.
item-payer-base-company_number  = 'TNT_BE'.
item-payer-base-street = 'Sigmaringerstraße 109'.
item-payer-base-postcode = '70567'.

item-quantity-base-unit = 'St'.
item-quantity-base-value = '1'.

item-reference_date-base-timezone = 'GMT+01:00'.
item-reference_date-base-date_in_timezone = '2019-05-20 13:11:35'.
item-reference_number = '4711'.

item-scenario_ident_code = '001'.
item-service_ident_code =  'TNTBE_EX09'.
item-service_provider-base-name = 'AEB'.
item-service_provider-base-city = 'Stuttgart'.
item-service_provider-base-company_number  = 'TNT_BE'.
item-service_provider-base-country_isocode = 'DE'.
item-service_provider-base-street = 'Sigmaringerstraße 109'.
item-service_provider-base-postcode = '70567'.

item-precalculated_net_price-base-currency_iso = 'EUR'.
item-precalculated_net_price-base-value = '100'.
item-pricing_date-base-timezone = 'GMT+01:00'.
item-pricing_date-base-date_in_timezone = '2019-05-20 13:11:35'.

* add just a field to extended data...
field-name = 'numberOfPackages'.
field-value = '5'.
APPEND field TO item-extended_data-fields.

* add a complex type to extended data...
field-name = 'unit'.
field-value = 'kg'.
APPEND field TO record-fields.
field-name = 'value'.
field-value = '10'.
APPEND field TO record-fields.
xml_factory = cl_proxy_sxml_factory=>create_sxml_stream( ).
xml_factory->abap_to_xml( name = 'record' abap_data = record ).
xml = xml_factory->get_output( ).
subrecord-name = 'grossWeight'.
subrecord-record = xml.
APPEND subrecord TO item-extended_data-subrecords.

* add a complex type with a complex type in it.
APPEND subrecord TO pkg_record-subrecords.
xml_factory = cl_proxy_sxml_factory=>create_sxml_stream( ).
xml_factory->abap_to_xml( name = 'record' abap_data = pkg_record ).
xml = xml_factory->get_output( ).
pkg_subrecord-record = xml.
pkg_subrecord-name = 'packages'.
append pkg_subrecord to item-extended_data-subrecords.

append item TO input_data-parameters-request-items.

TRY.
    billing_bf->create_service_items( EXPORTING input = input_data
                                      IMPORTING output = output_data ).

    LOOP AT output_data-parameters-result-base-messages INTO curr_message.
      READ TABLE curr_message-message_texts INTO curr_message_text INDEX 1.
      WRITE curr_message_text-text.
      WRITE /.
    ENDLOOP.

    LOOP AT output_data-parameters-result-base-messages INTO curr_message.
      READ TABLE curr_message-message_texts INTO curr_message_text INDEX 1.
      WRITE curr_message_text-text.
      WRITE /.
    ENDLOOP.

    LOOP AT output_data-parameters-result-item_results INTO item_result.
      IF item_result-base-has_errors <> 'X'.
        WRITE: item_result-item_id , ' is in status ' , item_result-status_ident_code, /.
      ENDIF.
      LOOP AT item_result-base-messages INTO curr_message.
        READ TABLE curr_message-message_texts INTO curr_message_text INDEX 1.
        WRITE curr_message_text-text.
        WRITE /.
      ENDLOOP.

    ENDLOOP.
  CATCH cx_ai_system_fault INTO system_fault_exception.
    WRITE 'Error when calling create service item '.
    WRITE system_fault_exception->get_text( ).
ENDTRY.