ABAP: вернуть общий результат через SAP RFC (json)
В прошлом я использовал это для возврата любой структуры данных через SAP RFC:
json = /ui2/cl_json=>serialize( data = <lt_result>
pretty_name = /ui2/cl_json=>pretty_mode-low_case ).
Это работает очень хорошо, если <lt_result>
маленький.
Но для больших наборов данных это медленно.
Как я могу вернуть любую структуру данных через общий функциональный модуль ABAP RFC?
Я использую PyRFC, но AFAIK это не должно иметь большого значения для этого вопроса.
(Пожалуйста, оставьте комментарий, если что-то в этом вопросе не ясно)
1 ответ
Это может работать лучше:
DATA(lo_json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
CALL TRANSFORMATION id
SOURCE result = <lt_result>
RESULT XML lo_json_writer.
ev_json_data = json_writer->get_output( ). " yours export parameter
Взято из официальной документации.
Если для вас важнее всего производительность, то /ui2/cl_json - неправильный выбор. Пока это ABAP-код и SAP_BASIS 700, совместимый синтаксис. CALL TRANSFORMATION id лучше по производительности. Об этом тоже написано в моем блоге. Кстати: я автор /ui2/cl_json.
Но если речь идет о гибкости, удобстве, поддерживаемых типах данных и желаемом формате, то лучшего решения пока нет, по сравнению с /ui2/cl_json.
Потенциально, можно получить лучшую специализированную реализацию, используя CALL TRANSFORMATION и собственное XSLT-преобразование, но это было бы уже медленнее, чем id-1, и стоило бы больше усилий по кодированию.
Есть еще потенциал сделать /ui2/cl_json более быстрым, отказавшись от поддержки более ранних выпусков (ниже 7.40) и используя сборку в SXML-парсере для обработки JSON, но это было бы работой. И у меня нет времени / фактического запроса на это.
@Sandra Rossi: Я был бы рад применить любые предложения по производительности для /ui2/cl_json, поэтому, если у вас есть конкретные примеры, пришлите их мне. Здесь или в блоге. Но, пожалуйста, примите во внимание, что на данный момент мне необходимо соответствовать ограничениям SAP_BASIS 7.00.