Во время десериализации данных, в proxy устанавливается значение по умолчанию для элемента, если он пуст или отсутствует.
Для оптимизации, по умолчанию для всех элементов задается атрибут sxi:nil=”true”. Это означает, что при отсутствии значения элемента, после десериализации его значение будет NULL.
Если есть необходимость переопределить стандартную настройку, можно использовать соответствующий протокол – WSPROTOCOL_PAYLOAD (протокол полезной нагрузки). В этом нам поможет метод SET_EXTENDED_XML_HANDLING интерфейса IF_WSPROTOCOL_PAYLOAD.
SAP предупреждает, что данное действие скажется на производительности.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
DATA: lo_proxy TYPE REF TO zproxy_class, lif_proxy_basis TYPE REF TO if_proxy_basis, lif_payload_protocol TYPE REF TO if_wsprotocol_payload. TRY. lo_proxy = NEW #( ). lif_proxy_basis ?= lo_exp. "Получаем instance протокола lif_payload_protocol ?= lif_proxy_basis->get_protocol( protocol_name = if_wsprotocol=>payload ). "Активируем расширенную обработку XML lif_payload_protocol->announce_payload_consumption( ). IF lif_payload_protocol IS BOUND. lif_payload_protocol->set_extended_xml_handling( EXPORTING extended_xml_handling = abap_true ). ENDIF. "Устанавливаем, чтобы поле появлялось со INITIAL значением "Это важный момент, иначе работать не будет "Вместо FIELDNAME нужно заполнить настоящее поле из структуры ls_export-controller = VALUE #( ( field = 'FIELDNAME' value = sai_ctrl_initial ) ). lo_proxy->request( EXPORTING output = ls_export IMPORTING input = ls_import ). COMMIT WORK AND WAIT. CATCH cx_ai_system_fault INTO DATA(lo_err). "handle exception ENDTRY. |