ABAP: вернуть общий результат через SAP RFC (json) - PullRequest
0 голосов
/ 04 января 2019

В прошлом я использовал это для возврата любой структуры данных через 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 это не должно иметь большого значения для этого вопроса.

(Пожалуйста, оставьте комментарий, если что-то в этом вопросе не ясно)

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Если производительность наиболее важна для вас, то / 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, но это будет некоторая работа. И у меня нет времени / фактического запроса на это.

@ Сандра Росси: Я был бы рад применить любые предложения по производительности для / ui2 / cl_json, поэтому, если у вас есть конкретные примеры, пришлите их мне. Здесь или в блоге. Но, пожалуйста, примите во внимание, что на данный момент мне нужно соответствовать ограничениям SAP_BASIS 7.00.

0 голосов
/ 04 января 2019

Это может работать лучше:

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 = lo_json_writer->get_output( ). " yours export parameter

Взято из официальной документации .

...