Вывод текста в окне ABAP

В этой статье разберём задачу в вывода длинного текста пользователю в виде всплывающего окна с использование ФМ COPO_POPUP_TO_DISPLAY_TEXTLIST. Он даёт возможность вывести текст произвольной длины пользователю, а так же имеет несколько режимов, от которых зависит набор кнопок в окне.

Применение окна с текстовым блоком на практике.

Предпосылки для возникновения этой статьи были следующие. В таблице ALV, во первых, нет возможности вывести текст в столбце длиннее чем 255 символов, а наше поле может составлять например 300 или 500. Во вторых, даже если вывести с таблице поле 200-250 символов, то оно займёт на экране большую часть места, что будет снижать удобство для пользователя. И даже при длине поля 100 символов, попрой нет смысла в его отображении, а можно например заменить его индикатором, а по щелчку на эту иконку открывать подробный текст.

Стандартный журнал сообщений как альтернатива.

Если задача состоит именно в выводе текстов сообщений об ошибках, то можно воспрользоваться выводом стандартного журнала сообщений, который был описан нами ранее, но у него есть ограничение на длину одной строки сообщения в 200 символов. И при этом к каждой строке в столбце будет выводиться индикатор типа сообщения, поэтому этот вариант не очень красив для длинных сообщений. В случае списка сообщений с длинной до 200 символов, это хороший вариант.

Подготовка данных для передаыи в ФМ.

У функционального модуля COPO_POPUP_TO_DISPLAY_TEXTLIST также имеются ограничения на длину одной строки, оно составляет 132 символа, это максимальная длина одной строки при выводе. При этом не обязательно разбивать строку именно на подстроки по 132 символа, а можно разбить на любую удобную для имеющейся задачи длину. В связи с этим возникает задача разбиения произвольной строки на подстроки одинаковой длины, которая так же была уже описана в отдельной статье. То есть задача разбилась на преобразование длинной строки в таблицу строк и передачу её в ФМ. Теперь рассмотрим подробнее возможности функционального модуля.

На нашем канале в смотрите подробный разбор этой и других задач. Подписывайтесь и оставляйте свои комментарии:

Параметры ФМ COPO_POPUP_TO_DISPLAY_TEXTLIST.

  • task - режим работы функционального модуля. Возможные режимы:
    • 'DISPLAY' - это режим для удобства просмотра, в котором есть возможность быстрого перехода между страницами текста на экране. Перейти на следующую страницу, перейти в конец текста, на первую страницу и в начало текста. При любом варианте закрытия окна FUNCTION = BACK.
    • 'DECIDE' - это режим с кнопками "Скопировать" и "Изменить". Но на самом деле кнопки влияют только на заполнение параметра FUNCTION. При нажатии кнопки "Скопировать" пользователем FUNCTION = ACCE, а при нажатии "Изменить" FUNCTION = MODI.
  • titel - заголовок окна
  • function - код, возвращаемый ФМ по результату диалога с пользователем. Зависит от режима и действий пользователя. Варианты возврата: BACK, ACCE, MODI.
  • text_table - таблица со строками для вывода
    • tdformat - это формат строки. Имеет два формата значения "" и "U1". Где "U1" - выделяет текст цветом.
    • tdline - строка для вывода
Помощь проекту на домен и хостинг. Спасибо!

Шаблон для вывода текста пользователю в выпадающем окне(подробные статьи по гиперссылкам):

DATA:
  lt_text_table TYPE STANDARD TABLE OF tline,
  lv_function TYPE sy-ucomm.
  
DATA(lv_strlen) = strlen( lv_text ). "lv_text-текст для вывода
"Выбираем на подстроки какой длины мы разбиваем наш текст
DATA(lv_sep) = 65.
  
DATA(lv_count) = 0.
WHILE lv_strlen - lv_count > lv_sep.
  DATA(lv_substr) = CONV text132( substring( val = lv_text off = lv_count len = lv_sep ) ).
  APPEND VALUE #( tdline = lv_substr ) TO lt_text_table.
  lv_count = lv_count + lv_sep.
ENDWHILE.

lv_substr = substring( val = lv_text off = lv_count ).
APPEND VALUE #( tdline = lv_substr tdformat = 'U1' ) TO lt_text_table.

CALL FUNCTION 'COPO_POPUP_TO_DISPLAY_TEXTLIST'
  EXPORTING
    task       = 'DISPLAY' "Варианты: 'DECIDE' или 'DISPLAY'
    titel      = 'Заголовок окна вывода'
  IMPORTING
    function   = lv_function
  TABLES
    text_table = lt_text_table.