Professional Documents
Culture Documents
*=======================================================================
*=======================================================================
* Copyright 2016 Igor Borodin
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*=======================================================================
*=======================================================================
*
* XLSX-Workbench(XLWB) components [Version 4.10]
* Documentation is available at:
* https://sites.google.com/site/sapxlwb/home
*=======================================================================
* C o r e
*=======================================================================
DATA:
gv_guidcounter TYPE n LENGTH 10 .
*----------------------------------------------------------------------*
* CLASS lcl_root
*----------------------------------------------------------------------*
CLASS lcl_root DEFINITION .
TYPE-POOLS:
icon ,
abap ,
stree ,
soi ,
rs .
PUBLIC SECTION.
TYPES:
ty_r_tree TYPE REF TO cl_hrpayna_gui_alv_tree ,
ty_r_tree_s TYPE REF TO cl_salv_tree .
CONSTANTS:
c_typename_tree TYPE abap_abstypename VALUE 'CL_HRPAYNA_GUI_ALV_TREE' ,
c_typename_tree_s TYPE abap_abstypename VALUE 'CL_SALV_TREE' .
TYPES:
ty_numc3 TYPE n LENGTH 3 ,
ty_char1 TYPE c LENGTH 1 ,
ty_char8 TYPE c LENGTH 8 ,
ty_char10 TYPE c LENGTH 10 ,
ty_char15 TYPE c LENGTH 15 ,
ty_char30 TYPE c LENGTH 30 ,
ty_char31 TYPE c LENGTH 31 ,
ty_char50 TYPE c LENGTH 50 ,
ty_char100 TYPE c LENGTH 100 ,
ty_char255 TYPE c LENGTH 255 ,
ty_char1024 TYPE c LENGTH 1024 ,
ty_charmax TYPE c LENGTH 60000 .
TYPES:
ty_comp_type TYPE ty_char1 ,
ty_comp_name TYPE massd_component ,
ty_comp_path TYPE string .
TYPES:
BEGIN OF ty_s_comp_types ,
comp_type TYPE ty_comp_type ,
icon TYPE icon_d ,
description TYPE ty_char100 ,
END OF ty_s_comp_types ,
ty_t_comp_types TYPE SORTED TABLE OF ty_s_comp_types
WITH NON-UNIQUE KEY comp_type .
TYPES:
BEGIN OF ty_s_nodetab ,
id TYPE snodetext-id ,
END OF ty_s_nodetab ,
ty_t_nodetab TYPE STANDARD TABLE OF ty_s_nodetab
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_patternarea ,
sheetname TYPE ty_char31 ,
areaid TYPE snode-id ,
areaname TYPE ty_comp_name .
INCLUDE TYPE soi_area_item .
TYPES:
colprop TYPE flag ,
rowprop TYPE flag ,
END OF ty_s_patternarea ,
ty_t_patternarea TYPE STANDARD TABLE OF ty_s_patternarea .
TYPES:
BEGIN OF ty_s_ctxtmulti ,
comp_type TYPE ty_comp_type ,
comp_name TYPE ty_comp_name ,
comp_shortdescr TYPE ddtext ,
cb_relpath TYPE ty_comp_path ,
END OF ty_s_ctxtmulti ,
ty_t_ctxtmulti TYPE STANDARD TABLE OF ty_s_ctxtmulti .
TYPES:
BEGIN OF ty_s_tree_layout ,
rotate TYPE flag , " -->> rotate tree 90 degree CCW
stru TYPE flag , " -->> output structure
stru_exp_coll TYPE flag , " -->> initial state:
expanded/collapsed/...
head TYPE flag , " -->> output header
col_hier TYPE flag , " -->> output hierarchy column
col_hier_shift TYPE ty_numc3," -->> shift text of hierarchy column
col_hier_after TYPE flag , " -->> hierarchy column placed
before/after other columns
col_othr TYPE flag , " -->> output other columns (outtab)
col_othr_width TYPE ty_numc3," -->> width of other columns (outtab)
allow_formulas TYPE flag , " -->> interpret value as formula if it
starting with '='
END OF ty_s_tree_layout ,
ty_t_tree_layout TYPE STANDARD TABLE OF ty_s_tree_layout .
TYPES:
BEGIN OF ty_s_grid_layout ,
rotate TYPE flag , " -->> rotate tree 90 degree CCW
head TYPE flag , " -->> output header
head_titles TYPE ty_char1," -->> header titles: technical/
description/ both
allow_formulas TYPE flag , " -->> interpret value as formula if it
starting with '='
END OF ty_s_grid_layout ,
ty_t_grid_layout TYPE STANDARD TABLE OF ty_s_grid_layout .
TYPES:
ty_t_string_tab TYPE STANDARD TABLE OF string .
TYPES:
ty_t_int_tab TYPE HASHED TABLE OF i WITH UNIQUE KEY table_line .
TYPES:
BEGIN OF ty_s_fldval ,
field TYPE string ,
value TYPE string ,
END OF ty_s_fldval ,
ty_t_fldval TYPE STANDARD TABLE OF ty_s_fldval .
TYPES:
BEGIN OF ty_s_dataset_series_tab ,
seridx TYPE string ,
sercap TYPE string ,
dtsfld TYPE string ,
END OF ty_s_dataset_series_tab ,
ty_t_dataset_series_tab TYPE STANDARD TABLE OF ty_s_dataset_series_tab
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_mergecells_rel .
INCLUDE TYPE soi_area_item .
TYPES:
autofit_rows TYPE flag ,
autofit_cols TYPE flag ,
END OF ty_s_mergecells_rel ,
ty_t_mergecells_rel TYPE STANDARD TABLE OF ty_s_mergecells_rel
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_vbs_tables_tab ,
cb_relpath TYPE ty_comp_path , " -->> alias path (binding with
context)
cb_shortdescr TYPE ty_comp_path ,
table_name TYPE ty_char1024 ,
table_data TYPE REF TO data ,
END OF ty_s_vbs_tables_tab ,
ty_t_vbs_tables_tab TYPE STANDARD TABLE OF ty_s_vbs_tables_tab
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_sheetprotection_flags ,
selectlockedcells TYPE flag ,
selectunlockedcells TYPE flag ,
formatcells TYPE flag ,
formatcolumns TYPE flag ,
formatrows TYPE flag ,
insertcolumns TYPE flag ,
insertrows TYPE flag ,
inserthyperlinks TYPE flag ,
deletecolumns TYPE flag ,
deleterows TYPE flag ,
sort TYPE flag ,
autofilter TYPE flag ,
pivottables TYPE flag ,
objects TYPE flag ,
scenarios TYPE flag ,
END OF ty_s_sheetprotection_flags .
TYPES:
BEGIN OF ty_s_sheetprotection , " sheet protection options
mode TYPE ty_char1 ,
password TYPE string ,
cb_val_relpath TYPE ty_comp_path .
INCLUDE TYPE ty_s_sheetprotection_flags .
TYPES:
END OF ty_s_sheetprotection .
DATA:
v_retcode TYPE sysubrc ,
t_retmess TYPE bapiret2_t .
CONSTANTS:
BEGIN OF c_retcode ,
okey TYPE sysubrc VALUE '0' ,
warning TYPE sysubrc VALUE '1' ,
error TYPE sysubrc VALUE '2' ,
legacy TYPE sysubrc VALUE '3' , " -->> legacy error
END OF c_retcode ,
BEGIN OF c_sheetprotection_mode ,
off TYPE ty_char1 VALUE space ,
from_template TYPE ty_char1 VALUE '1' ,
from_context TYPE ty_char1 VALUE '2' ,
static TYPE ty_char1 VALUE '3' ,
END OF c_sheetprotection_mode ,
c_fldseq_separator TYPE ty_char1 VALUE ':' ,
c_chart_category_idx TYPE string VALUE '9999' ,
c_extension_xlsx TYPE ty_char10 VALUE '.xlsx' ,
c_extension_xlsm TYPE ty_char10 VALUE '.xlsm' .
METHODS:
msg_init ,
msg_syst_catch IMPORTING is_syst TYPE syst DEFAULT sy
iv_toplist TYPE flag DEFAULT space
iv_subj TYPE any OPTIONAL ,
msg_syst_catch2 IMPORTING is_syst TYPE syst DEFAULT sy
CHANGING ct_retmess TYPE bapiret2_t ,
msg_syst_convert IMPORTING is_syst TYPE syst DEFAULT sy
RETURNING value(rs_retmess) TYPE bapiret2 ,
msg_io_catch IMPORTING ir_error TYPE REF TO i_oi_error
iv_subj TYPE any OPTIONAL ,
msg_add IMPORTING iv_any TYPE REF TO lcl_root ,
IF lv_length_formatted GE lv_length_source .
cv_formatted = iv_source .
ELSE .
lv_offset = lv_length_source - lv_length_formatted + 3 .
cv_formatted(3) = '...' .
cv_formatted+3 = iv_source+lv_offset .
ENDIF .
ENDMETHOD . "format_path
METHOD path_file_split .
DATA:
lv_last_occurrence TYPE i ,
lv_offset TYPE i ,
ls_result_tab TYPE match_result ,
lt_result_tab TYPE match_result_tab .
ev_path = iv_fullpath(lv_offset) .
ENDMETHOD . "PATH_FILE_SPLIT
METHOD init_texts .
CASE sy-langu .
WHEN 'R' .
v_text-url0 = 'https://sites.google.com/site/sapxlwb/home' .
v_text-url1 =
'https://sites.google.com/site/sapxlwb/home/rus/use/tutorials' .
v_text-url2 =
'https://sites.google.com/site/sapxlwb/home/rus/use/tutorials/form/user_interface'
.
v_text-url3 =
'https://sites.google.com/site/sapxlwb/home/rus/use/tutorials/form/postprocessing'
.
WHEN OTHERS .
v_text-url0 = 'https://sites.google.com/site/sapxlwb/home' .
v_text-url1 =
'https://sites.google.com/site/sapxlwb/home/eng/use/tutorials' .
v_text-url2 =
'https://sites.google.com/site/sapxlwb/home/eng/use/tutorials/form/user_interface'
.
v_text-url3 =
'https://sites.google.com/site/sapxlwb/home/eng/use/tutorials/form/postprocessing'
.
ENDCASE .
DEFINE mk_settext .
if &1 ca 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
.
else .
&1 = &2 .
endif .
END-OF-DEFINITION .
CASE sy-langu .
WHEN 'R' .
* special case for Russian logon language:
* set values directly, if text elements (and translations) are not created
mk_settext:
v_text-t001 'Общие сообщения' ,
v_text-t002 'Сообщения' ,
v_text-t003 'Компоненты формуляра' ,
v_text-t004 'Укажите действительное имя контекста' ,
v_text-t005 'в структуре не найден запрашиваемый узел' ,
v_text-t006 'Подходящих узлов контекста не найдено' ,
v_text-t007 'Листы' ,
v_text-t008 'Лист' ,
v_text-t009 'Цикл' ,
v_text-t010 'Паттерн' ,
v_text-t011 'Значение' ,
v_text-t012 'Папка' ,
v_text-t013 'Укажите имя формуляра' ,
v_text-t014 'Уже существует формуляр с именем' ,
v_text-t015 'Данные формуляра повреждены' ,
v_text-t016 'форуляр не найден' ,
v_text-t017 'Формуляр' ,
v_text-t018 'блокирован пользователем' ,
v_text-t019 'Имя компонента не уникально:' ,
v_text-t020 'Некорректная связь с контекстом' ,
v_text-t021 'на пред.уровнях' ,
v_text-t022 'Отсутствует связь с контекстом' ,
v_text-t023 'Книга должна иметь не менее одного видимого листа' ,
v_text-t024 'Кол-во симв.' ,
v_text-t025 'превышает длину поля' ,
v_text-t026 'проблемы с компонентом' ,
v_text-t027 'Компонент' ,
v_text-t028 'уже присутствует' ,
v_text-t029 'Отсутствует связь с листом шаблона' ,
v_text-t030 'В шаблоне не найден Лист' ,
v_text-t031 'отсутствует' ,
v_text-t032 'Область в шаблоне не определена' ,
v_text-t033 'Проблема определения области шаблона' ,
v_text-t034 'Область в шаблоне выходит за рамки вышест.областей' ,
v_text-t035 'недопустим под компонентом' ,
v_text-t036 'Формуляр не активен (не активирован)' ,
v_text-t037 'Не указан класс разработки' ,
v_text-t038 'Сначала сохраните формуляр' ,
v_text-t039 'Имя компонента некорректно' ,
v_text-t040 'Компонент с таким именем уже существует' ,
v_text-t041 'Перемещение компонента невозможно' ,
v_text-t042 'Режим окна' ,
v_text-t043 'Актуализировать' ,
v_text-t044 'Сохранить' ,
v_text-t045 'Сохранить как...' ,
v_text-t046 'Активировать' ,
v_text-t047 'Отправить по почте' ,
v_text-t050 'Рабочая директория не определена' ,
v_text-t051 'Выделите область на актуальном листе' ,
v_text-t052 'Требуется выделение только одной области' ,
v_text-t053 'Невозможно позиционирование на листе' ,
v_text-t054 'Excel не отвечает. |Возможно, в данный момент редактируется
ячейка' ,
v_text-t055 'Структура формуляра' ,
v_text-t056 'Статус' ,
v_text-t057 'Направление' ,
v_text-t058 'Описание' ,
v_text-t061 'Удалить компонент' ,
v_text-t062 'Создать компонент' ,
v_text-t063 'Передв.компонент вверх' ,
v_text-t064 'Передв.компонент вниз' ,
v_text-t066 'Выделите узел структуры' ,
v_text-t067 'Свойства формуляра' ,
v_text-t068 'Компонент' ,
v_text-t069 'Свойства компонента' ,
v_text-t070 'Сообщения' ,
v_text-t072 'Ошибка создания контрола' ,
v_text-t073 'Наименование контекста' ,
v_text-t074 '<...не присвоено...>' ,
v_text-t075 'Описание формуляра' ,
v_text-t076 'Имя/ Описание' ,
v_text-t077 'Связь с контекстом' ,
v_text-t078 '(опционально)' ,
v_text-t079 'Появление при выводе:' ,
v_text-t080 'Всегда' ,
v_text-t081 'При наличии значения в поле' ,
v_text-t082 'Наименование при выводе:' ,
v_text-t083 'Авто' ,
v_text-t084 'Значение из поля' ,
v_text-t085 'преобр.во внешний формат' ,
v_text-t086 'Связь с листом шаблона' ,
v_text-t087 'Область в шаблоне' ,
v_text-t088 'Направление вывода' ,
v_text-t089 'Вправо' ,
v_text-t090 'Вниз' ,
v_text-t091 'Копировать свойства' ,
v_text-t092 'Строк' ,
v_text-t093 'Столбцов' ,
v_text-t094 'Группировка' ,
v_text-t095 'Значение полностью' ,
v_text-t096 'первые' ,
v_text-t097 'символов' ,
v_text-t098 'с позиции' ,
v_text-t099 'все последующие' ,
v_text-t100 'Операция отменена пользователем' ,
v_text-t101 'Удалить формуляр' ,
v_text-t102 'удален' ,
v_text-t103 'Включить функцию загрузки нач.XLSX-шаблона с frontend' ,
v_text-t104 'Команда не обрабатывается' ,
v_text-t105 'Внимание!' ,
v_text-t106 'Продолжить' ,
v_text-t107 'Отменить' ,
v_text-t108 'Укажите уникальное наименование компонента' ,
v_text-t109 'Подходящих узлов контекста не найдено' ,
v_text-t110 'Компонент недоступен для выбора' ,
v_text-t111 'Общая длина поля' ,
v_text-t112 'Ошибка поиска Листов в шаблоне' ,
v_text-t113 'Выберите лист шаблона' ,
v_text-t114 'Изменить' ,
v_text-t115 'Создать' ,
v_text-t116 'Шабл.' ,
v_text-t117 'Скопировать' ,
v_text-t118 'Удалить' ,
v_text-t119 'Перемещение компонента' ,
v_text-t120 'Нет подходящих типов компонентов' ,
v_text-t121 'Выберите компонент' ,
v_text-t122 'Удаление компонента формы' ,
v_text-t123 'контекст' ,
v_text-t124 'Укажите имя контекста (тип данных в словаре)' ,
v_text-t125 'Процесс протекает в OFF-line режиме' ,
v_text-t126 'Укажите новое значение' ,
v_text-t127 'Сначала устраните проблему связи с контекстом' ,
v_text-t128 'Удаление связи' ,
v_text-t129 'Удалить ссылку на поле ?' ,
v_text-t130 'Свойство не релевантно для данного типа узла' ,
v_text-t131 'Удалить связь с Листом ?' ,
v_text-t132 'Укажите область на листе:' ,
v_text-t133 'Будет создана связь с выделенной областью в шаблоне' ,
v_text-t134 'Достигнут конец списка' ,
v_text-t135 'Достигнуто начало списка' ,
v_text-t136 'Поиск XLSX-формуляра' ,
v_text-t137 'Данные не найдены' ,
v_text-t138 'Выйти из редактора?' ,
v_text-t139 'Рисунок' ,
v_text-t140 'Источник' ,
v_text-t141 'Данные из поля контекста' ,
v_text-t142 'Рисунок из шаблона' ,
v_text-t143 'Выберите рисунок на листе' ,
v_text-t144 'Не найдено рисунков на листе' ,
v_text-t145 'Наименование рисунка не задано' ,
v_text-t146 'не содержит рисунков' ,
v_text-t147 'Техническая информация' ,
v_text-t148 'Создано' ,
v_text-t149 'Изменено' ,
v_text-t150 'Пакет' ,
v_text-t151 'В формуляре должен быть минимум один лист' ,
v_text-t152 'Печать на каждой странице' ,
v_text-t153 'Предотвр.автоматич.разрыва страниц (внутри)' ,
v_text-t154 'Горизт.' ,
v_text-t155 'Вертик.' ,
v_text-t156 'Продлить неразрывную область' ,
v_text-t157 'Опция будет реализована на FrontEnd через OLE' ,
v_text-t158 'Перенос разрыва к левой границе' ,
v_text-t159 'Перенос разрыва на & стлб за пределы левой границы' ,
v_text-t160 'Перенос разрыва к верхней границе' ,
v_text-t161 'Перенос разрыва на & стрк выше, чем верхняя граница' ,
v_text-t162 'стлб.' ,
v_text-t163 'стрк.' ,
v_text-t164 'Паттерны не найдены' ,
v_text-t165 'Выберите паттерн' ,
v_text-t166 'Сохранить как...' ,
v_text-t167 'Новое имя формуляра' ,
v_text-t168 'Укажите другое имя формуляра' ,
v_text-t169 'Формуляр с таким именем уже существует. Заменить?' ,
v_text-t170 'Формуляр сохранен' ,
v_text-t171 'Формуляр активирован' ,
v_text-t172 'Дублировать компонент' ,
v_text-t173 'Актуальные данные не были получены из Excel !' ,
v_text-t174 'Дерево' ,
v_text-t175 'Паттерн (масштабир.)' ,
v_text-t176 'Объединение ячеек' ,
v_text-t177 'Охват строк' ,
v_text-t178 'Охват столбцов' ,
v_text-t179 'Укажите область высотой в одну строку' ,
v_text-t180 'Укажите область шириной в один столбец' ,
v_text-t181 'Выберите компоненты для добавления' ,
v_text-t182 'В меню Excel: Данные > Структура' ,
v_text-t183 'уберите галочку ИТОГОВЫЕ СТРОКИ ПОД ДАННЫМИ' ,
v_text-t184 'Подготовка данных формуляра. Шаг:' ,
v_text-t185 'Опции вывода' ,
v_text-t186 'развернуть на 90 градусов' ,
v_text-t187 'стандартная ориентация' ,
v_text-t188 'структура' ,
v_text-t189 'заголовок' ,
v_text-t190 'столбец иерархии' ,
v_text-t191 'отступ' ,
v_text-t192 'остальные столбцы' ,
v_text-t193 'Все развернуты' ,
v_text-t194 'Все свернуты' ,
v_text-t195 'Черновик' ,
v_text-t196 'Укажите область минимум |2x2 ячейки (см.документацию)' ,
v_text-t197 'Запись данных в XLSX-файл' ,
v_text-t198 'Построение дерева, узел:' ,
v_text-t199 'В начале' ,
v_text-t200 'В конце' ,
v_text-t201 'ширина поля из ф.кат.' ,
v_text-t202 'множитель' ,
v_text-t203 'Нечего выводить (Структура/ Столб.иерархии/ Др.столбцы)' ,
v_text-t204 'Актуаль.(из TreeControl)' ,
v_text-t205 '. Началь.состояние узлов:' ,
v_text-t206 'Настройки' ,
v_text-t207 'Руководство пользователя' ,
v_text-t208 'Запрос подтвержд.действия при изменении связи с шаблоном' ,
v_text-t209 'Загрузить XLSX-шаблон с локального компьютера' ,
v_text-t210 'Импорт' ,
v_text-t211 'Экспорт' ,
v_text-t212 'Справка' ,
v_text-t213 'Создать структуру формуляра автоматически ?' ,
v_text-t214 'Массовые операции' ,
v_text-t215 'Выделить все компоненты' ,
v_text-t216 'Матрица (каждая буква - в отдельной ячейке)' ,
v_text-t217 'Интервал:' ,
v_text-t218 'Не создавать' ,
v_text-t219 'Наименование формуляра' ,
v_text-t220 'Сдвиг координат связи с шаблоном' ,
v_text-t221 'Нет изменений' ,
v_text-t222 'Лист подготавливается' ,
v_text-t223 'Вставить разрыв страницы (в начале)' ,
v_text-t224 'Печать' ,
v_text-t225 'Грид' ,
v_text-t226 'выбор столбцов' ,
v_text-t227 'доступные столбцы' ,
v_text-t228 'Настройка столбцов в выходной таблице' ,
v_text-t229 'Тех.имена' ,
v_text-t230 'Описания' ,
v_text-t231 'Список выводимых столбцов не задан' ,
v_text-t232 'Диаграмма' ,
v_text-t233 'Макет' ,
v_text-t234 'Набор данных' ,
v_text-t235 'Ряды' ,
v_text-t236 'Строка таблицы' ,
v_text-t237 'Столбец' ,
v_text-t238 'На листе' ,
v_text-t239 'Выберите макет Диаграммы на листе' ,
v_text-t240 'Не найдено Диаграмм на листе' ,
v_text-t241 'Наименование макета Диаграммы не задано' ,
v_text-t242 'не содержит Диаграмму' ,
v_text-t243 'Набор данных не указан' ,
v_text-t244 'Указан некорректный Набор данных' ,
v_text-t245 'Связь между Рядами диаграммы и Столбцами ист.данных' ,
v_text-t246 'из' ,
v_text-t247 'присвоение' ,
v_text-t248 'имеет проблемы' ,
v_text-t249 'Набор данных: в Гриде скрыт столбец' ,
v_text-t250 'Подписи Оси Категорий' ,
v_text-t251 'Название диаграммы' ,
v_text-t252 'Имена рядов' ,
v_text-t253 'из Макета (статично)' ,
v_text-t254 'из Контекста' ,
v_text-t255 'из названий столбцов Грида набора данных' ,
v_text-t256 'Файл' ,
v_text-t257 'выгружен в директорию' ,
v_text-t258 'При выводе' ,
v_text-t259 'Видимый' ,
v_text-t260 'Скрыт' ,
v_text-t261 'Обработка строк' ,
v_text-t262 'Все строки' ,
v_text-t263 'Строка' ,
v_text-t264 'с' ,
v_text-t265 'по' ,
v_text-t266 '(0 = НеОгранич.)' ,
v_text-t267 'Интервал некорректен' ,
v_text-t268 'Формула' ,
v_text-t269 'разрешить формулы' ,
v_text-t270 'Активировать вкладку сообщений при наличии ошибок' ,
v_text-t271 'Потеря выделения ячеек для компонента, не имеющего связи с
шаблоном' ,
v_text-t272 'Метка в тексте' ,
v_text-t273 'Последоват-сть символов, которую следует заменить
Значением' ,
v_text-t274 'Лист Диаграмм может содержать только Диаграммы' ,
v_text-t275 'Автоподбор размеров объединенных ячеек' ,
v_text-t276 'Откл.' ,
v_text-t277 'Высоты строк' ,
v_text-t278 'Ширины стлбц' ,
v_text-t279 'Свойства столбцов грида' ,
v_text-t280 'Проблема при пост-обработке OLE/VBScript' ,
v_text-t281 'Автоподбор размеров объединеных ячеек' ,
v_text-t282 'Ошибка инициализации макроса' ,
v_text-t283 'Ошибка при выполнении макроса' ,
v_text-t284 'Настройки Design-time' ,
v_text-t285 'Настройки Run-time' ,
v_text-t286 'Способ пост-обработки' ,
v_text-t287 'Заключительная пост-обработка' ,
v_text-t288 'Передать таблицы' ,
v_text-t289 'Нет изменений' ,
v_text-t290 'Sub-процедура "Entry" не найдена или некорректна |в VBScript-
коде заключительной пост-обработки' ,
v_text-t291 'Таблицы для передачи данных в Заключит.пост-обработку
VBScript' ,
v_text-t292 'Укажите имя таблицы' ,
v_text-t293 'Имя таблицы не уникально' ,
v_text-t294 'Имя таблицы' ,
v_text-t295 'Ошибка доступа к приложению MS Excel' ,
v_text-t296 'как Дочерний' ,
v_text-t297 'на Этом же уровне' ,
v_text-t298 'Защита листа' ,
v_text-t299 'Из шаблона' ,
v_text-t300 'Из контекста' ,
v_text-t301 'Статически' ,
v_text-t302 'Выделение заблокированных ячеек' ,
v_text-t303 'Выделение Незаблокированных ячеек' ,
v_text-t304 'Форматирование Ячеек' ,
v_text-t305 'Форматирование Столбцов' ,
v_text-t306 'Форматирование Строк' ,
v_text-t307 'Вставку Столбцов' ,
v_text-t308 'Вставку Строк' ,
v_text-t309 'Вставку Гиперссылок' ,
v_text-t310 'Удаление Столбцов' ,
v_text-t311 'Удаление Строк' ,
v_text-t312 'Сортировку' ,
v_text-t313 'Использование Автофильта' ,
v_text-t314 'Использование отчетов сводной таблицы' ,
v_text-t315 'Изменение Объектов' ,
v_text-t316 'Изменение Сценариев' ,
v_text-t317 'Разрешить всем пользователям этого листа:' ,
v_text-t318 'Пароль для отключения защиты листа:' ,
v_text-t319 'Другой' ,
v_text-t320 'Компоненты должны быть одного типа' ,
v_text-t321 'Укажите целевой родительский компонент' ,
v_text-t322 'Опции переименования' ,
v_text-t323 'добавить Префикс' ,
v_text-t324 'добавить Постфикс' ,
v_text-t325 'Найти текст...' ,
v_text-t326 '...и заменить его текстом' ,
v_text-t327 'Формат файла' ,
v_text-t328 'Без VBA-макросов .XLSX' ,
v_text-t329 'С поддержкой VBA-макросов .XLSM' ,
v_text-t330 'Имя диапазона ячеек' ,
v_text-t331 'Некорректное имя диапазона ячеек' ,
v_text-t332 'Вероятная причина в том, что' ,
v_text-t333 'Ваша версия SAP GUI' ,
v_text-t334 'некорректно работает с MS Excel.' ,
v_text-t335 'Попробуйте обновить SAP GUI до последней версии.' ,
v_text-t336 'Ошибка чтения файла шаблона' ,
v_text-t337 'Размер' ,
v_text-t338 'Вписать в область' ,
v_text-t339 'Из поля контекста' ,
v_text-t340 'Высота' ,
v_text-t341 'Ширина' ,
v_text-t342 'Корневой узел не может быть удалён' ,
v_text-t343 'Заголовок Оси Значений' ,
v_text-t344 'Заголовок Оси Категорий' ,
v_text-t345 'Изменение этого параметра может привести к ошибке файла' ,
v_text-t346 'Прочие параметры' ,
v_text-t347 'Сохранять именованные диапазоны шаблона' ,
v_text-t348 'Проверка данных' ,
v_text-t349 'Атрибуты (из шаблона)' ,
v_text-t350 'Таблица для динамич.замены (атрибут/значение)' ,
v_text-t351 'Значение (Формула)' ,
v_text-t352 'Из Наб.данных (Грида)' ,
v_text-t353 'Поле Наб.данных не заполнено' ,
v_text-t354 'Поле Наб.данных некорректно' ,
v_text-t355 'Расположение относительно вложенной области' ,
v_text-t356 'До' ,
v_text-t357 'После' .
WHEN OTHERS .
* ...
ENDCASE .
ENDMETHOD . "init_texts
METHOD is_gui_available .
CLEAR rv_available .
STATICS:
lv_available TYPE flag ,
lv_firstcall TYPE flag VALUE abap_on .
IF lv_firstcall EQ abap_on .
lv_firstcall = abap_off .
* Background ?
DATA:
lv_task_state TYPE sm04dic-counter ,
lv_task_state_x TYPE x ,
lv_task_online_x TYPE x VALUE 1 .
lv_task_state_x = lv_task_state .
CHECK lv_task_state_x O lv_task_online_x .
* Update task ?
DATA lv_in_update_task TYPE sysubrc .
CALL FUNCTION 'TH_IN_UPDATE_TASK'
IMPORTING
in_update_task = lv_in_update_task.
CHECK lv_in_update_task IS INITIAL .
rv_available = lv_available .
ENDMETHOD . "is_gui_available
METHOD guid_create .
DATA lv_guid TYPE guid_32 .
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = lv_guid.
* it's amazing, but the same (not unique) GUID can be generated several times
successively!
IF v_retcode LT iv_any->v_retcode .
v_retcode = iv_any->v_retcode .
ENDIF .
APPEND LINES OF iv_any->t_retmess TO t_retmess .
ENDMETHOD . "msg_add
METHOD msg_syst_catch .
DATA ls_retmess TYPE bapiret2 .
ls_retmess = msg_syst_convert( is_syst ) .
ls_retmess-parameter = iv_subj .
CASE iv_toplist .
WHEN space . APPEND ls_retmess TO t_retmess .
WHEN OTHERS. INSERT ls_retmess INTO t_retmess INDEX 1 .
ENDCASE .
IF ls_retmess-type CA 'EAX' .
v_retcode = c_retcode-error .
ELSE .
v_retcode = c_retcode-warning .
ENDIF .
ENDMETHOD . "msg_syst_catch
METHOD msg_syst_catch2 .
DATA ls_retmess TYPE bapiret2 .
ls_retmess = msg_syst_convert( is_syst ) .
APPEND ls_retmess TO ct_retmess .
ENDMETHOD . "msg_syst_catch2
METHOD msg_syst_convert .
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = is_syst-msgty
cl = is_syst-msgid
number = is_syst-msgno
par1 = is_syst-msgv1
par2 = is_syst-msgv2
par3 = is_syst-msgv3
par4 = is_syst-msgv4
IMPORTING
return = rs_retmess.
ENDMETHOD . "msg_syst_convert
METHOD msg_io_catch .
DATA ls_retmess TYPE bapiret2 .
CHECK ir_error IS BOUND .
CHECK ir_error->error_code NE c_oi_errors=>ret_ok .
ls_retmess-type = 'E' .
ls_retmess-parameter = iv_subj .
ir_error->get_message(
IMPORTING message_id = ls_retmess-id
message_number = ls_retmess-number
param1 = ls_retmess-message_v1
param2 = ls_retmess-message_v2
param3 = ls_retmess-message_v3
param4 = ls_retmess-message_v4 ) .
APPEND ls_retmess TO t_retmess .
v_retcode = c_retcode-error .
ENDMETHOD . "msg_io_catch
METHOD msg_show .
IF it_retmess IS INITIAL .
it_retmess = t_retmess .
ENDIF .
CHECK NOT it_retmess[] IS INITIAL .
DATA:
lv_balloghndl TYPE balloghndl ,
ls_log TYPE bal_s_log ,
ls_bal TYPE bal_s_msg ,
ls_profile TYPE bal_s_prof .
FIELD-SYMBOLS:
<bapiret2> TYPE bapiret2 .
ls_log-aldate = sy-datum .
ls_log-altime = sy-uzeit .
ls_log-aluser = sy-uname .
ls_log-altcode = sy-tcode .
ls_log-alprog = sy-repid .
IF sy-batch IS INITIAL .
ls_profile-use_grid = abap_on .
ENDIF .
ls_profile-no_toolbar = abap_on .
ENDMETHOD . "msg_show
METHOD msg_show_hier .
IF it_retmess IS INITIAL .
it_retmess = t_retmess .
ENDIF .
CHECK NOT it_retmess[] IS INITIAL .
DATA:
ls_log TYPE bal_s_log ,
ls_bal TYPE bal_s_msg ,
ls_fcat TYPE bal_s_fcat ,
lv_balloghnd TYPE balloghndl ,
lt_balloghnd TYPE bal_t_logh ,
ls_display_profile TYPE bal_s_prof .
FIELD-SYMBOLS:
<balloghnd> TYPE balloghndl ,
<bapiret2> TYPE bapiret2 .
ls_log-aldate = sy-datum .
ls_log-altime = sy-uzeit .
ls_log-aluser = sy-uname .
ls_log-altcode = sy-tcode .
ls_log-alprog = sy-repid .
ls_log-object = 'BCT1' .
CLEAR ls_bal .
MOVE:
<bapiret2>-type TO ls_bal-msgty ,
<bapiret2>-id TO ls_bal-msgid ,
<bapiret2>-number TO ls_bal-msgno ,
<bapiret2>-message_v1 TO ls_bal-msgv1 ,
<bapiret2>-message_v2 TO ls_bal-msgv2 ,
<bapiret2>-message_v3 TO ls_bal-msgv3 ,
<bapiret2>-message_v4 TO ls_bal-msgv4 .
ls_fcat-ref_table = 'BAL_S_SHOW' .
ls_fcat-ref_field = 'EXTNUMBER' .
ls_fcat-outputlen = 60 .
APPEND ls_fcat TO ls_display_profile-lev1_fcat .
CLEAR ls_display_profile-mess_fcat .
ls_fcat-ref_table = 'BAL_S_SHOW' .
ls_fcat-ref_field = 'T_MSG' .
ls_fcat-outputlen = 60 .
APPEND ls_fcat TO ls_display_profile-mess_fcat .
ls_display_profile-use_grid = abap_on .
ls_display_profile-no_toolbar = abap_on .
ls_display_profile-end_col = 120 .
ls_display_profile-disvariant-report = sy-repid .
ls_display_profile-disvariant-handle = 'LOG' .
msg_add( iv_any ) .
msg_show( ) .
* record counter
ADD 1 TO s_progressbar_loop-row_current .
* steps control
ADD 1 TO s_progressbar_loop-step_tmp .
CHECK s_progressbar_loop-step_tmp GE s_progressbar_loop-step .
CLEAR s_progressbar_loop-step_tmp .
* ----
MOVE s_progressbar_loop-row_current TO lv_row_current .
CONDENSE lv_row_current .
IF s_progressbar_loop-row_count IS INITIAL .
* messages text formatting
CONCATENATE s_progressbar_loop-text lv_row_current
INTO lv_text SEPARATED BY space .
* actual percent
lv_percentage = 100 .
ELSE .
* messages text formatting
MOVE s_progressbar_loop-row_count TO lv_row_count .
CONDENSE lv_row_count .
CONCATENATE s_progressbar_loop-text lv_row_current '//' lv_row_count
INTO lv_text SEPARATED BY space .
* actual percent
IF s_progressbar_loop-row_count NE 0 .
lv_percentage_tmp = s_progressbar_loop-row_current * 100 /
s_progressbar_loop-row_count .
ELSE .
lv_percentage_tmp = 0 .
ENDIF .
IF lv_percentage GT 100 .
lv_percentage = 100 .
ENDIF .
ENDIF .
* percent
IF iv_percent_start BETWEEN 0 AND 100
AND iv_percent_end BETWEEN 0 AND 100
AND iv_percent_start LT iv_percent_end .
s_progressbar_loop-percent_start = iv_percent_start .
s_progressbar_loop-percent_end = iv_percent_end .
ELSE .
s_progressbar_loop-percent_start = 0 .
s_progressbar_loop-percent_end = 100 .
ENDIF .
ENDMETHOD . "progressbar_loop_init
METHOD get_fullpath .
DATA lv_fullpath TYPE string .
CLEAR rv_fullpath .
IF iv_parent_fullpath IS INITIAL .
lv_fullpath = iv_relpath .
ELSEIF iv_relpath IS INITIAL .
lv_fullpath = iv_parent_fullpath .
ELSE .
CONCATENATE iv_parent_fullpath
iv_relpath
INTO lv_fullpath SEPARATED BY '-' .
ENDIF .
rv_fullpath = lv_fullpath .
ENDMETHOD . "get_fullpath
METHOD tech_presets_dt_init .
CLEAR rs_disextract .
rs_disextract-report = 'SAPLZXLWB' . "sy-repid .
rs_disextract-handle = '0001' .
rs_disextract-username = sy-uname .
rs_disextract-text = 'XLSX Workbench presets' .
rs_disextract-exname = 'presets' .
ENDMETHOD . "tech_presets_dt_init
METHOD tech_presets_dt_load .
* initialize extract parameters
DATA ls_disextract TYPE disextract .
ls_disextract = tech_presets_dt_init( ) .
DATA:
ls_fldval TYPE ty_s_fldval ,
lt_fldval TYPE ty_t_fldval .
FIELD-SYMBOLS:
<components> TYPE abap_compdescr ,
<value> TYPE ANY .
IF s_presets_dt IS INITIAL .
s_presets_dt-popup_tb = abap_on .
s_presets_dt-mesgtab_when_error = abap_on .
s_presets_dt-deselect_cells_no_tb = abap_on .
ENDIF .
IF s_presets_dt-leftframe_width IS INITIAL .
s_presets_dt-leftframe_width = 30 .
ENDIF .
ENDMETHOD . "tech_presets_dt_load
METHOD tech_presets_rt_init .
CLEAR rs_disextract .
rs_disextract-report = 'SAPLZXLWB' . "sy-repid .
rs_disextract-handle = '0002' .
* rs_disextract-username = sy-uname .
rs_disextract-text = 'XLSX Workbench presets (Run-time)' .
rs_disextract-exname = 'Run-time' .
ENDMETHOD . "tech_presets_dt_init
METHOD tech_presets_rt_load .
* initialize extract parameters
DATA ls_disextract TYPE disextract .
ls_disextract = tech_presets_rt_init( ) .
DATA:
ls_fldval TYPE ty_s_fldval ,
lt_fldval TYPE ty_t_fldval .
FIELD-SYMBOLS:
<components> TYPE abap_compdescr ,
<value> TYPE ANY .
ENDMETHOD . "tech_presets_rt_load
ENDCLASS . " lcl_root IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_ole DEFINITION
*----------------------------------------------------------------------*
* MS-Office template document
*----------------------------------------------------------------------*
CLASS lcl_ole DEFINITION INHERITING FROM lcl_root .
PUBLIC SECTION .
CLASS-DATA:
v_temp_dir TYPE string ,
v_temp_directory TYPE string ,
v_file_separator TYPE ty_char1 .
CLASS-METHODS:
temp_directory_set ,
temp_directory_clear .
DATA:
r_control TYPE REF TO i_oi_container_control ,
r_docproxy TYPE REF TO i_oi_document_proxy ,
r_spreadsheet TYPE REF TO i_oi_spreadsheet .
DATA:
BEGIN OF s_ole ,
handle TYPE cntl_handle ,
application TYPE ole2_object ,
activeworkbook TYPE ole2_object ,
activewindow TYPE ole2_object ,
activesheet TYPE ole2_object ,
vbscript TYPE ole2_object ,
location TYPE ole2_object ,
locationnew TYPE ole2_object ,
pagebreak TYPE ole2_object ,
pagebreaks TYPE ole2_object ,
tmp_range TYPE ole2_object ,
tmp_range_rows TYPE ole2_object ,
tmp_range_row TYPE ole2_object ,
tmp_range_cols TYPE ole2_object ,
tmp_range_col TYPE ole2_object ,
tmp_cells TYPE ole2_object ,
cur_range TYPE ole2_object ,
cur_rang1 TYPE ole2_object ,
cur_range_rows TYPE ole2_object ,
cur_range_row TYPE ole2_object ,
cur_range_cols TYPE ole2_object ,
cur_range_col TYPE ole2_object ,
selection TYPE ole2_object ,
END OF s_ole .
DATA:
v_temp_filename TYPE string ,
v_readonly TYPE flag ,
v_viewmode TYPE flag ,
v_background TYPE flag ,
v_postprocessing TYPE flag ,
v_extension TYPE ty_char10 ,
r_container TYPE REF TO cl_gui_container .
CONSTANTS:
BEGIN OF c_viewmode ,
floating TYPE flag VALUE abap_on ,
inplace TYPE flag VALUE space ,
END OF c_viewmode .
CONSTANTS:
BEGIN OF c_fcode ,
close_template TYPE ui_func VALUE 'CLOSE_TEMPLATE' ,
END OF c_fcode .
EVENTS:
evnt_fcode
EXPORTING value(ev_fcode) TYPE ui_func .
METHODS:
constructor
IMPORTING ir_container TYPE REF TO cl_gui_container
iv_document_rawdata TYPE xstring
iv_viewmode TYPE flag
iv_readonly TYPE flag DEFAULT space
iv_background TYPE flag DEFAULT space
EXCEPTIONS process_terminated ,
init
IMPORTING iv_document_rawdata TYPE xstring
EXCEPTIONS process_terminated ,
application_availability_check ,
rawdata_get_as_table
IMPORTING iv_extension TYPE ty_char10
EXPORTING et_document_table TYPE tsfmime
ev_document_size TYPE i ,
free ,
free_ole_object
IMPORTING value(iv_varname) TYPE any ,
hndl_close
FOR EVENT on_close_document OF i_oi_document_proxy .
PRIVATE SECTION .
TYPES:
BEGIN OF ty_s_regval ,
key TYPE string ,
name TYPE string ,
value TYPE i ,
END OF ty_s_regval ,
ty_t_regval TYPE STANDARD TABLE OF ty_s_regval .
METHODS:
register_setnew
EXPORTING et_regval TYPE ty_t_regval ,
register_return
IMPORTING it_regval TYPE ty_t_regval .
ENDCLASS . "lcl_ole DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_ole IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_ole IMPLEMENTATION .
METHOD constructor .
super->constructor( ) .
IF v_gui_available IS INITIAL .
MESSAGE e000(lp) WITH v_text-t125 " text: Process is flowing in OFF-line
mode
RAISING process_terminated .
ENDIF .
v_readonly = iv_readonly .
v_viewmode = iv_viewmode .
v_background = iv_background .
r_container = ir_container .
ENDMETHOD . "constructor
METHOD init .
msg_init( ) .
DATA:
lv_inplace TYPE flag ,
lv_show_toolbars TYPE flag ,
lv_r3_appl_name TYPE ty_char10 VALUE 'XLWB' ,
lv_on_close_event TYPE flag ,
lt_document_table TYPE tsfmime ,
lv_document_size TYPE i ,
lv_fileformat_cur TYPE ty_char10 ,
lt_regval TYPE ty_t_regval .
IF v_readonly IS INITIAL .
temp_directory_set( ) .
IF v_temp_directory IS INITIAL .
MESSAGE i000(lp) WITH v_text-t050 . " text: The working directory is not
determined
EXIT .
ENDIF .
temp_directory_clear( ) .
ENDIF .
c_oi_container_control_creator=>get_container_control(
IMPORTING control = r_control ) .
CASE v_viewmode .
WHEN c_viewmode-floating .
lv_inplace = abap_off .
lv_show_toolbars = abap_off .
lv_on_close_event = abap_on .
WHEN c_viewmode-inplace .
lv_inplace = abap_on .
lv_show_toolbars = abap_on .
lv_on_close_event = abap_off .
ENDCASE .
r_control->init_control(
EXPORTING parent = r_container
inplace_enabled = lv_inplace
inplace_scroll_documents = lv_inplace
inplace_show_toolbars = lv_show_toolbars
r3_application_name = lv_r3_appl_name
register_on_close_event = lv_on_close_event
no_flush = abap_on ) .
r_control->get_document_proxy(
EXPORTING document_type = soi_doctype_excel_sheet
no_flush = abap_on
IMPORTING document_proxy = r_docproxy ) .
IF iv_document_rawdata IS INITIAL .
r_docproxy->create_document(
EXPORTING create_view_data = abap_off
open_inplace = lv_inplace ) .
ELSE .
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = iv_document_rawdata
IMPORTING
output_length = lv_document_size
TABLES
binary_tab = lt_document_table.
r_docproxy->open_document_from_table(
EXPORTING document_size = lv_document_size
document_table = lt_document_table
open_inplace = lv_inplace
no_flush = abap_on ) .
r_docproxy->get_spreadsheet_interface(
EXPORTING no_flush = abap_on
IMPORTING sheet_interface = r_spreadsheet ) .
r_spreadsheet->load_lib(
EXPORTING no_flush = abap_on ) .
IF lv_on_close_event EQ abap_on .
SET HANDLER hndl_close FOR r_docproxy .
ENDIF .
CASE v_background .
WHEN space . r_spreadsheet->screen_update( EXPORTING updating = abap_on
no_flush = abap_on ) .
WHEN OTHERS . r_spreadsheet->screen_update( EXPORTING updating = abap_off
no_flush = abap_on ) .
ENDCASE .
IF v_readonly IS INITIAL .
r_docproxy->get_document_handle(
EXPORTING no_flush = abap_on
IMPORTING handle = s_ole-handle ) .
GET PROPERTY OF s_ole-handle-obj 'Application' = s_ole-application no flush .
GET PROPERTY OF s_ole-application 'ActiveWorkbook' = s_ole-activeworkbook no
flush .
IF v_background IS INITIAL .
r_control->set_focus( ) .
ENDIF .
ENDMETHOD . "init
METHOD register_setnew .
* Windows registry modification according
http://support.microsoft.com/kb/948615/en-us
* ( see SAP Note 1517552 )
*
* to avoid an Excel application popup-message:
* "The file you are trying to open ... ,
* is in a different format than specified by the file extension"
DO .
CLEAR lv_tmp_key .
CLEAR lv_tmp_value .
CLEAR lv_rc .
CLEAR lv_office_version .
CASE sy-index .
WHEN 1 . lv_office_version = '12.0' .
WHEN 2 . lv_office_version = '14.0' .
WHEN 3 . lv_office_version = '15.0' .
WHEN 4 . lv_office_version = '16.0' .
WHEN OTHERS . EXIT .
ENDCASE .
cl_gui_frontend_services=>registry_get_value(
EXPORTING root = cl_gui_frontend_services=>hkey_current_user
key = lv_tmp_key
value = 'ExcelName'
IMPORTING reg_value = lv_tmp_value
EXCEPTIONS OTHERS = 0 ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
ls_regval-name = 'ExtensionHardening' .
cl_gui_frontend_services=>registry_get_dword_value(
EXPORTING root = cl_gui_frontend_services=>hkey_current_user
key = ls_regval-key
value = ls_regval-name
IMPORTING reg_value = ls_regval-value
EXCEPTIONS OTHERS = 0 ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
CHECK ls_regval-value NE 0 .
cl_gui_frontend_services=>registry_set_dword_value(
EXPORTING root = cl_gui_frontend_services=>hkey_current_user
key = ls_regval-key
value = ls_regval-name
dword_value = 0
IMPORTING rc = lv_rc
EXCEPTIONS OTHERS = 0 ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
CHECK lv_rc EQ 1 .
CHECK sy-subrc EQ 0 .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
ENDMETHOD . "register_return
METHOD temp_directory_set .
DATA lv_temp_dir_c TYPE ty_char1024 .
DATA lv_rc TYPE i .
cl_gui_frontend_services=>get_sapgui_workdir(
CHANGING sapworkdir = v_temp_dir
EXCEPTIONS OTHERS = 0 ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
IF v_temp_dir IS INITIAL .
CALL FUNCTION 'GUI_GET_DESKTOP_INFO'
EXPORTING
type = 4
CHANGING
return = lv_temp_dir_c.
v_temp_dir = lv_temp_dir_c .
ENDIF .
CHECK v_temp_dir IS NOT INITIAL .
* create subdirectory for NEW temporary files (if not exists yet)
CONCATENATE v_temp_dir '~tmp_XLWB_template'
INTO v_temp_directory SEPARATED BY v_file_separator .
cl_gui_frontend_services=>directory_create(
EXPORTING directory = v_temp_directory
CHANGING rc = lv_rc
EXCEPTIONS OTHERS = 1 ) .
IF lv_rc NE 0
OR sy-subrc NE 0 .
CLEAR v_temp_directory .
ENDIF .
ENDMETHOD . "temp_directory_set
METHOD temp_directory_clear .
DATA:
lv_temp_filename TYPE string ,
ls_old_filetab TYPE file_info ,
lt_old_filetab TYPE STANDARD TABLE OF file_info ,
lv_rc TYPE i ,
lv_count TYPE i .
cl_gui_frontend_services=>directory_list_files(
EXPORTING directory = v_temp_directory
files_only = abap_on
CHANGING file_table = lt_old_filetab
count = lv_count
EXCEPTIONS OTHERS = 0 ) .
cl_gui_frontend_services=>file_delete(
EXPORTING filename = lv_temp_filename
CHANGING rc = lv_rc
EXCEPTIONS OTHERS = 0 ) .
ENDLOOP .
ENDMETHOD . "temp_directory_clear
METHOD application_availability_check .
msg_init( ) .
IF lv_rs NE c_oi_errors=>ret_ok .
SPLIT v_text-t054 " text: Excel is not responding. |Perhaps a cell is
being edited now
AT '|' INTO sy-msgv1 sy-msgv2 .
MESSAGE e000(lp) WITH sy-msgv1 sy-msgv2 INTO v_dummy .
msg_syst_catch( ) .
EXIT .
ENDIF .
ENDMETHOD . "application_availability_check
METHOD rawdata_get_as_table .
CHECK v_readonly IS INITIAL .
msg_init( ) .
CLEAR ev_document_size .
CLEAR et_document_table .
v_extension = iv_extension .
IF v_extension IS INITIAL .
v_extension = c_extension_xlsx .
ENDIF .
application_availability_check( ) .
CHECK v_retcode NE c_retcode-error .
DATA:
lv_snap_filename TYPE string ,
lv_snap_filename_c(30000) TYPE c ,
lv_guid TYPE string ,
lv_rc TYPE i ,
lv_fileformat_cur TYPE i ,
lv_fileformat_new TYPE i ,
lv_document_rawdata TYPE xstring ,
lv_temp_filename TYPE string ,
ls_document_table TYPE w3mime .
* required format
CASE v_extension .
WHEN c_extension_xlsx . lv_fileformat_new = 51 . " xlOpenXMLWorkbook
WHEN c_extension_xlsm . lv_fileformat_new = 52 . "
xlOpenXMLWorkbookMacroEnabled
ENDCASE .
IF lv_fileformat_cur EQ lv_fileformat_new .
* returning of result
r_docproxy->save_document_to_table(
CHANGING document_size = ev_document_size
document_table = et_document_table ) .
* sometimes GET PROPERTY 'FileFormat' returns wrong value. So, we verify file
header signature
READ TABLE et_document_table INTO ls_document_table INDEX 1 .
IF ls_document_table-line(8) NE '504B030414000600' .
CLEAR lv_fileformat_cur .
CLEAR ev_document_size .
CLEAR et_document_table .
ENDIF .
ENDIF .
IF lv_fileformat_cur NE lv_fileformat_new .
* convert to required format
lv_guid = guid_create( ) .
CONCATENATE v_temp_directory v_file_separator lv_guid `--` v_extension
INTO lv_temp_filename .
cl_gui_frontend_services=>gui_upload(
EXPORTING filename = lv_temp_filename
filetype = 'BIN'
IMPORTING filelength = ev_document_size
CHANGING data_tab = et_document_table
EXCEPTIONS OTHERS = 1 ) .
free( ) .
temp_directory_clear( ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
ENDMETHOD . "rawdata_get_as_table
METHOD free .
DATA lv_rc TYPE i .
DATA lv_count TYPE i .
IF r_spreadsheet IS BOUND .
r_spreadsheet->screen_update( EXPORTING updating = abap_on ) .
ENDIF .
IF v_readonly IS INITIAL .
CALL METHOD OF s_ole-activeworkbook 'Close' EXPORTING #1 = 0 .
FREE OBJECT s_ole-activeworkbook . CLEAR s_ole-activeworkbook .
* CALL METHOD OF s_ole-application 'Quit' .
FREE OBJECT s_ole-application . CLEAR s_ole-application .
ENDIF .
IF r_docproxy IS BOUND .
r_docproxy->is_open( IMPORTING ret_value = lv_rc ) .
IF lv_rc EQ 1 .
CALL METHOD r_docproxy->close_document( ) .
ENDIF .
r_docproxy->is_destroyed( IMPORTING ret_value = lv_rc ) .
IF lv_rc EQ 0 .
CALL METHOD r_docproxy->release_document( ) .
ENDIF .
ENDIF .
cl_gui_cfw=>dispatch( ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
IF r_spreadsheet IS BOUND .
FREE r_spreadsheet .
ENDIF .
IF r_docproxy IS BOUND .
FREE r_docproxy .
ENDIF .
IF NOT r_control IS INITIAL .
FREE r_control .
ENDIF .
IF v_readonly IS INITIAL .
temp_directory_clear( ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
ENDIF .
ENDMETHOD . "free
METHOD free_ole_object .
FIELD-SYMBOLS <ole2_object> TYPE ole2_object .
TRANSLATE iv_varname TO UPPER CASE .
ASSIGN COMPONENT iv_varname OF STRUCTURE s_ole TO <ole2_object> .
CHECK <ole2_object> IS ASSIGNED .
*----------------------------------------------------------------------*
* CLASS lcl_context DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_context DEFINITION INHERITING FROM lcl_root .
PUBLIC SECTION .
TYPES:
ty_s_hierarchy TYPE snodetext ,
ty_t_hierarchy TYPE STANDARD TABLE OF ty_s_hierarchy .
TYPES:
BEGIN OF ty_s_properties ,
id TYPE ty_s_hierarchy-id ,
comp_type TYPE ty_comp_type ,
comp_name TYPE ty_comp_name ,
comp_fullpath TYPE ty_comp_path ,
comp_shortdescr TYPE ddtext ,
type_absname TYPE abap_abstypename ,
type_absname_t TYPE abap_abstypename ,
type_refname TYPE abap_abstypename ,
type_refname_tab TYPE tabname ,
type_refname_fld TYPE fieldname ,
type_kind TYPE abap_typekind ,
type_length TYPE i ,
type_decimals TYPE i ,
type_edit_mask TYPE abap_editmask ,
END OF ty_s_properties ,
ty_t_properties TYPE HASHED TABLE OF ty_s_properties
WITH UNIQUE KEY comp_fullpath .
TYPES:
ty_contextname TYPE bdlstruct .
DATA:
v_contextname TYPE ty_contextname READ-ONLY ,
v_contextshortdescr TYPE as4text READ-ONLY ,
t_properties TYPE ty_t_properties READ-ONLY ,
t_hierarchy TYPE ty_t_hierarchy READ-ONLY ,
v_root_id TYPE snode-id READ-ONLY ,
v_f4_strategy TYPE i READ-ONLY .
CONSTANTS:
BEGIN OF c_comp_type ,
root TYPE ty_comp_type VALUE 'R' ,
table TYPE ty_comp_type VALUE 'T' ,
struct TYPE ty_comp_type VALUE 'S' ,
element TYPE ty_comp_type VALUE 'E' ,
tree TYPE ty_comp_type VALUE 'A' ,
tree_s TYPE ty_comp_type VALUE 'a' ,
END OF c_comp_type .
CONSTANTS:
BEGIN OF c_comp_icon ,
root TYPE icon_d VALUE icon_tree ,
table TYPE icon_d VALUE icon_list ,
struct TYPE icon_d VALUE icon_structure ,
element TYPE icon_d VALUE icon_field_with_text ,
tree TYPE icon_d VALUE icon_display_tree ,
END OF c_comp_icon .
CONSTANTS:
BEGIN OF c_f4_strategy ,
loopstep TYPE i VALUE 1 ,
folder TYPE i VALUE 2 ,
value TYPE i VALUE 3 ,
tree TYPE i VALUE 4 ,
grid TYPE i VALUE 5 ,
gridfld TYPE i VALUE 6 ,
apr_relpath TYPE i VALUE 7 ,
END OF c_f4_strategy .
METHODS:
constructor
IMPORTING iv_contextname TYPE any ,
free,
comp_shortdescription
IMPORTING iv_type_kind TYPE any
iv_type_absname TYPE any
iv_type_absname_t TYPE any
iv_type_refname_tab TYPE any
iv_type_refname_fld TYPE any
RETURNING value(rv_comp_shortdescr) TYPE ddtext ,
node_get
IMPORTING iv_id TYPE any
RETURNING value(rs_properties) TYPE ty_s_properties ,
node_get_by_path
IMPORTING iv_comp_fullpath TYPE any OPTIONAL
iv_relpath TYPE any OPTIONAL
iv_fullpath_parent TYPE any OPTIONAL
RETURNING value(rs_properties) TYPE ty_s_properties ,
subtree_get
IMPORTING iv_begin_fullpath TYPE any OPTIONAL
iv_f4_strategy TYPE i
EXPORTING et_hierarchy TYPE ty_t_hierarchy ,
gridfld_get
IMPORTING iv_begin_fullpath TYPE any
EXPORTING et_hierarchy TYPE ty_t_hierarchy
et_properties TYPE ty_t_properties .
PRIVATE SECTION .
METHODS:
subtree_get_recurs
IMPORTING iv_parent_id_new TYPE snode-id
is_parent_hierarchy TYPE ty_s_hierarchy
CHANGING ct_hierarchy_new TYPE ty_t_hierarchy ,
node_add
IMPORTING iv_parent_id TYPE snode-id
CHANGING cs_properties TYPE ty_s_properties ,
nodes_recurs
IMPORTING iv_parent_id TYPE snode-id
iv_parent_fullpath TYPE any
iv_type_refname TYPE any
iv_comp_name TYPE any .
super->constructor( ) .
msg_init( ) .
cl_abap_datadescr=>describe_by_name(
EXPORTING p_name = iv_contextname
EXCEPTIONS OTHERS = 4 ) .
IF sy-subrc EQ 0 .
v_contextname = iv_contextname .
ELSE .
MESSAGE e000(lp) WITH v_text-t004 INTO v_dummy . " text: Specify valid name
of the context
msg_syst_catch( ) .
ENDIF .
ls_attr-nodeicon = c_comp_icon-root .
ls_attr-kind = 'I' .
ls_attr-tlength1 = 30 .
ls_attr-text1 = 'Component' .
ls_attr-tlength2 = 10 .
ls_attr-text2 = 'Type' .
ls_attr-tlength3 = 10 .
ls_attr-text3 = 'Length' . CONDENSE ls_attr-text3 .
ls_attr-tlength4 = 10.
ls_attr-text4 = 'Decimals' . CONDENSE ls_attr-text4 .
* ls_attr-tlength5 = 20 .
* ls_attr-text5 = 'Absolute_name' .
ls_attr-tlength5 = 20 .
ls_attr-text5 = 'Short description' .
ENDMETHOD . "constructor
METHOD free .
CLEAR:
v_contextname ,
t_properties ,
t_hierarchy ,
v_root_id ,
v_f4_strategy .
ENDMETHOD . "free
METHOD comp_shortdescription .
DATA lv_tablename TYPE dd02l-tabname .
DATA lv_fieldname TYPE dd03l-fieldname .
DATA lv_ddtext TYPE dd02t-ddtext .
DATA ls_dd40v TYPE dd40v .
DATA lv_objname TYPE ddobjname .
CASE iv_type_kind .
WHEN cl_abap_datadescr=>typekind_struct1
OR cl_abap_datadescr=>typekind_struct2 .
lv_tablename = iv_type_refname_tab .
CALL FUNCTION 'RS_DS_INT_TAB_INFO'
EXPORTING
p_tablename = lv_tablename
p_language = sy-langu
IMPORTING
p_text = lv_ddtext
EXCEPTIONS
OTHERS = 0.
rv_comp_shortdescr = lv_ddtext .
WHEN cl_abap_datadescr=>typekind_table .
lv_objname = iv_type_refname_tab .
CALL FUNCTION 'DDIF_TTYP_GET'
EXPORTING
name = lv_objname
state = 'M'
langu = sy-langu
IMPORTING
dd40v_wa = ls_dd40v
EXCEPTIONS
OTHERS = 0.
rv_comp_shortdescr = ls_dd40v-ddtext .
WHEN cl_abap_datadescr=>typekind_class .
SELECT SINGLE descript
INTO rv_comp_shortdescr
FROM seoclasstx
WHERE clsname EQ iv_type_absname_t
AND langu EQ sy-langu .
IF sy-subrc NE 0 .
SELECT SINGLE descript
INTO rv_comp_shortdescr
FROM seoclasstx
WHERE clsname EQ iv_type_absname_t .
ENDIF .
WHEN OTHERS .
lv_tablename = iv_type_refname_tab .
lv_fieldname = iv_type_refname_fld .
CALL FUNCTION 'RS_DS_INT_FIELD_INFO'
EXPORTING
p_tablename = lv_tablename
p_fieldname = lv_fieldname
p_language = sy-langu
IMPORTING
p_fieldtext = lv_ddtext
EXCEPTIONS
OTHERS = 0.
rv_comp_shortdescr = lv_ddtext .
ENDCASE .
ENDMETHOD . "comp_shortdescription
METHOD nodes_recurs .
DATA:
lr_tabledescr TYPE REF TO cl_abap_tabledescr ,
lr_structdescr TYPE REF TO cl_abap_structdescr ,
lr_elemdescr TYPE REF TO cl_abap_elemdescr ,
lr_typedescr TYPE REF TO cl_abap_typedescr ,
lr_classdescr TYPE REF TO cl_abap_classdescr ,
lt_components TYPE abap_compdescr_tab ,
lv_type_refname TYPE string ,
ls_properties TYPE ty_s_properties ,
lv_type_refname_tab TYPE ty_char100 ,
lv_type_absname TYPE abap_abstypename ,
lv_type_absname_t TYPE abap_abstypename ,
lv_dummy TYPE dummy .
FIELD-SYMBOLS:
<components> TYPE abap_compdescr .
*======================================================================
* add current node
*======================================================================
ls_properties-comp_name = iv_comp_name .
ls_properties-type_refname = iv_type_refname .
ls_properties-comp_fullpath =
get_fullpath( iv_parent_fullpath = iv_parent_fullpath
iv_relpath = iv_comp_name ) .
* describe
cl_abap_datadescr=>describe_by_name(
EXPORTING p_name = iv_type_refname
RECEIVING p_descr_ref = lr_typedescr
EXCEPTIONS type_not_found = 4 ) .
IF sy-subrc NE 0 .
EXIT .
ENDIF .
CASE lr_typedescr->type_kind .
WHEN cl_abap_datadescr=>typekind_struct1
OR cl_abap_datadescr=>typekind_struct2 .
TRY .
lr_structdescr ?= lr_typedescr .
CATCH cx_sy_move_cast_error .
EXIT .
ENDTRY .
ls_properties-comp_type = c_comp_type-struct .
ls_properties-type_absname = lr_structdescr->absolute_name .
ls_properties-type_kind = lr_structdescr->type_kind .
ls_properties-type_length = lr_structdescr->length .
ls_properties-type_decimals = lr_structdescr->decimals .
lt_components[] = lr_structdescr->components[] .
WHEN cl_abap_datadescr=>typekind_table .
TRY .
lr_tabledescr ?= lr_typedescr .
lr_structdescr ?= lr_tabledescr->get_table_line_type( ) .
CATCH cx_sy_move_cast_error .
EXIT .
ENDTRY .
ls_properties-comp_type = c_comp_type-table .
ls_properties-type_absname = lr_tabledescr->absolute_name .
ls_properties-type_kind = lr_tabledescr->type_kind .
ls_properties-type_length = lr_tabledescr->length .
ls_properties-type_decimals = lr_tabledescr->decimals .
WHEN cl_abap_datadescr=>typekind_class
OR cl_abap_datadescr=>typekind_oref .
CLEAR lv_type_absname .
CASE lr_typedescr->type_kind .
WHEN cl_abap_datadescr=>typekind_class .
TRY .
lr_classdescr ?= lr_typedescr .
CATCH cx_sy_move_cast_error .
EXIT .
ENDTRY .
lv_type_absname = lr_classdescr->absolute_name .
WHEN cl_abap_datadescr=>typekind_oref .
SELECT SINGLE rollname
INTO lv_type_absname
FROM dd03l
WHERE tabname EQ ls_properties-type_refname_tab
AND fieldname EQ ls_properties-type_refname_fld .
CHECK sy-subrc EQ 0 .
WHEN OTHERS .
ENDCASE .
IF lv_type_absname CS '=' .
SPLIT lv_type_absname AT '=' INTO lv_dummy lv_type_absname_t .
ELSE .
lv_type_absname_t = lv_type_absname .
ENDIF .
CASE lv_type_absname_t .
WHEN c_typename_tree .
ls_properties-comp_type = c_comp_type-tree .
ls_properties-type_absname = lv_type_absname .
ls_properties-type_absname_t = lv_type_absname_t .
ls_properties-type_kind = cl_abap_datadescr=>typekind_class .
WHEN c_typename_tree_s .
ls_properties-comp_type = c_comp_type-tree_s .
ls_properties-type_absname = lv_type_absname .
ls_properties-type_absname_t = lv_type_absname_t .
ls_properties-type_kind = cl_abap_datadescr=>typekind_class .
WHEN OTHERS . EXIT .
ENDCASE .
WHEN OTHERS .
TRY .
lr_elemdescr ?= lr_typedescr .
CATCH cx_sy_move_cast_error .
EXIT .
ENDTRY .
ls_properties-comp_type = c_comp_type-element .
ls_properties-type_absname = lr_elemdescr->absolute_name .
ls_properties-type_kind = lr_elemdescr->type_kind .
ls_properties-type_length = lr_elemdescr->output_length .
ls_properties-type_decimals = lr_elemdescr->decimals .
ls_properties-type_edit_mask = lr_elemdescr->edit_mask .
ENDCASE .
IF ls_properties-type_absname CS '=' .
SPLIT ls_properties-type_absname AT '='
INTO lv_dummy ls_properties-type_absname_t .
ELSE .
ls_properties-type_absname_t = ls_properties-type_absname .
ENDIF .
ls_properties-comp_shortdescr = comp_shortdescription(
iv_type_kind = ls_properties-type_kind
iv_type_absname = ls_properties-type_absname
iv_type_absname_t = ls_properties-type_absname_t
iv_type_refname_tab = ls_properties-type_refname_tab
iv_type_refname_fld = ls_properties-type_refname_fld ) .
IF iv_parent_id EQ v_root_id
AND iv_type_refname EQ v_contextname .
v_contextshortdescr = ls_properties-comp_shortdescr .
ENDIF .
*======================================================================
* find and add children components
*======================================================================
CASE ls_properties-type_kind .
WHEN cl_abap_datadescr=>typekind_struct1
OR cl_abap_datadescr=>typekind_struct2 .
WHEN cl_abap_datadescr=>typekind_table .
nodes_recurs( iv_parent_id = ls_properties-id
iv_parent_fullpath = ls_properties-comp_fullpath
iv_type_refname = lr_structdescr->absolute_name
iv_comp_name = 'LINE' ) .
WHEN OTHERS .
ENDCASE .
ENDMETHOD . "nodes_recurs
METHOD node_add .
DATA:
ls_attr TYPE streeattr .
ls_attr-kind = 'I' .
ls_attr-tlength1 = 30 .
ls_attr-text1 = cs_properties-comp_name .
ls_attr-tlength2 = 10 .
ls_attr-text2 = cs_properties-type_kind .
ls_attr-tlength3 = 10 .
ls_attr-text3 = cs_properties-type_length . CONDENSE ls_attr-text3 .
ls_attr-tlength4 = 10 .
ls_attr-text4 = cs_properties-type_decimals . CONDENSE ls_attr-text4 .
ls_attr-tlength5 = 20 .
ls_attr-text5 = cs_properties-comp_shortdescr .
* ls_attr-text5 = cs_properties-type_absname .
CASE cs_properties-comp_type .
WHEN c_comp_type-struct . ls_attr-nodeicon = c_comp_icon-struct .
WHEN c_comp_type-table . ls_attr-nodeicon = c_comp_icon-table .
WHEN c_comp_type-element . ls_attr-nodeicon = c_comp_icon-element .
WHEN c_comp_type-tree
OR c_comp_type-tree_s .
ls_attr-nodeicon = c_comp_icon-tree .
ENDCASE .
DATA:
lv_subtree_root_id TYPE snode-id ,
ls_attr TYPE streeattr ,
ls_hierarchy TYPE ty_s_hierarchy ,
ls_properties TYPE ty_s_properties .
v_f4_strategy = iv_f4_strategy .
CASE v_f4_strategy .
WHEN c_f4_strategy-loopstep
OR c_f4_strategy-grid .
READ TABLE et_hierarchy TRANSPORTING NO FIELDS
WITH KEY nodeicon = lcl_context=>c_comp_icon-table .
WHEN c_f4_strategy-folder .
READ TABLE et_hierarchy TRANSPORTING NO FIELDS
WITH KEY nodeicon = lcl_context=>c_comp_icon-struct .
WHEN c_f4_strategy-apr_relpath
OR c_f4_strategy-gridfld .
READ TABLE et_hierarchy TRANSPORTING NO FIELDS
WITH KEY nodeicon = lcl_context=>c_comp_icon-element .
WHEN c_f4_strategy-value .
READ TABLE et_hierarchy TRANSPORTING NO FIELDS
WITH KEY nodeicon = lcl_context=>c_comp_icon-element .
IF sy-subrc NE 0 .
READ TABLE et_hierarchy TRANSPORTING NO FIELDS
WITH KEY nodeicon = lcl_context=>c_comp_icon-table .
ENDIF .
WHEN c_f4_strategy-tree .
READ TABLE et_hierarchy TRANSPORTING NO FIELDS
WITH KEY nodeicon = lcl_context=>c_comp_icon-tree .
WHEN OTHERS .
ENDCASE .
IF sy-subrc NE 0 .
MESSAGE e000(lp) WITH v_text-t006 INTO v_dummy . " text: Relevant nodes of
the context are not found
msg_syst_catch( ) .
CLEAR et_hierarchy[] .
EXIT .
ENDIF .
ENDMETHOD . "subtree_get
METHOD subtree_get_recurs .
DATA:
ls_attr TYPE streeattr ,
ls_hierarchy TYPE ty_s_hierarchy ,
ls_properties TYPE ty_s_properties ,
lv_id_new TYPE snode-id ,
lv_id_next TYPE snode-id .
lv_id_next = is_parent_hierarchy-child .
lv_id_new = iv_parent_id_new .
DO .
* read a next node
READ TABLE t_hierarchy INTO ls_hierarchy
WITH KEY parent = is_parent_hierarchy-id
id = lv_id_next .
IF sy-subrc NE 0 .
EXIT .
ENDIF .
DO 1 TIMES .
CASE v_f4_strategy .
WHEN c_f4_strategy-loopstep
OR c_f4_strategy-grid .
CHECK ls_properties-comp_type EQ c_comp_type-table
OR ls_properties-comp_type EQ c_comp_type-struct .
WHEN c_f4_strategy-folder .
CHECK ls_properties-comp_type EQ c_comp_type-struct .
WHEN c_f4_strategy-value .
CHECK ls_properties-comp_type EQ c_comp_type-table
OR ls_properties-comp_type EQ c_comp_type-struct
OR ls_properties-comp_type EQ c_comp_type-element .
WHEN c_f4_strategy-apr_relpath .
CHECK ls_properties-comp_type EQ c_comp_type-struct
OR ls_properties-comp_type EQ c_comp_type-element .
WHEN c_f4_strategy-tree .
CHECK ls_properties-comp_type EQ c_comp_type-struct
OR ls_properties-comp_type EQ c_comp_type-tree
OR ls_properties-comp_type EQ c_comp_type-tree_s .
WHEN c_f4_strategy-gridfld .
CHECK ls_properties-comp_type EQ c_comp_type-table
OR ls_properties-comp_type EQ c_comp_type-struct
OR ls_properties-comp_type EQ c_comp_type-element .
WHEN OTHERS .
ENDCASE .
*===================================================
DO 1 TIMES .
CHECK ls_hierarchy-child IS NOT INITIAL .
IF ls_properties-comp_type EQ c_comp_type-table .
CHECK v_f4_strategy EQ c_f4_strategy-gridfld .
ENDIF .
* recursive process subtree
subtree_get_recurs( EXPORTING iv_parent_id_new = lv_id_new
is_parent_hierarchy = ls_hierarchy
CHANGING ct_hierarchy_new = ct_hierarchy_new ) .
ENDDO .
*===================================================
IF ls_hierarchy-next IS INITIAL .
EXIT .
ELSE .
lv_id_next = ls_hierarchy-next .
ENDIF .
ENDDO .
ENDMETHOD . "subtree_get_recurs
METHOD gridfld_get .
DATA:
ls_hierarchy TYPE ty_s_hierarchy ,
lt_hierarchy TYPE ty_t_hierarchy ,
ls_properties TYPE ty_s_properties .
CLEAR:
et_properties ,
et_hierarchy .
subtree_get(
EXPORTING iv_begin_fullpath = iv_begin_fullpath
iv_f4_strategy = c_f4_strategy-gridfld
IMPORTING et_hierarchy = lt_hierarchy ) .
ENDMETHOD . "gridfld_get
ENDCLASS . "lcl_context IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_excel DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_excel DEFINITION INHERITING FROM lcl_root ABSTRACT .
PUBLIC SECTION.
TYPE-POOLS:
ixml.
TYPES:
ty_rawdata TYPE xstring.
TYPES:
BEGIN OF ty_s_elemsequence ,
order TYPE sy-index ,
element TYPE string ,
END OF ty_s_elemsequence ,
ty_t_elemsequence TYPE STANDARD TABLE OF ty_s_elemsequence .
TYPES:
BEGIN OF ty_s_coordinates ,
beg_y TYPE i ,
beg_x TYPE i ,
end_y TYPE i ,
end_x TYPE i ,
END OF ty_s_coordinates .
TYPES:
BEGIN OF ty_s_sharedstrings ,
value TYPE string ,
key TYPE i ,
si_node TYPE REF TO if_ixml_node , " -->> if extended cell
formatting occurs
END OF ty_s_sharedstrings ,
ty_t_sharedstrings TYPE HASHED TABLE OF ty_s_sharedstrings
WITH UNIQUE KEY value .
TYPES:
BEGIN OF ty_s_mergecells .
INCLUDE TYPE ty_s_coordinates .
TYPES:
autofit_rows TYPE flag ,
autofit_cols TYPE flag ,
END OF ty_s_mergecells ,
ty_t_mergecells TYPE STANDARD TABLE OF ty_s_mergecells
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_relstab ,
target TYPE string ,
type TYPE string ,
id TYPE string ,
END OF ty_s_relstab ,
ty_t_relstab TYPE STANDARD TABLE OF ty_s_relstab
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_datavalidation ,
allowblank TYPE string ,
error TYPE string ,
errorstyle TYPE string ,
errortitle TYPE string ,
imemode TYPE string ,
operator TYPE string ,
prompt TYPE string ,
prompttitle TYPE string ,
showdropdown TYPE string ,
showerrormessage TYPE string ,
showinputmessage TYPE string ,
type TYPE string ,
formula1 TYPE string ,
formula1_dataset_id TYPE snodetext-id ,
formula1_dataset_fld TYPE string ,
formula1_dataset_rt_path_1 TYPE string ,
formula2 TYPE string ,
END OF ty_s_datavalidation .
TYPES:
BEGIN OF ty_s_datavalid_rt .
INCLUDE TYPE ty_s_datavalidation .
TYPES:
t_coordinates TYPE STANDARD TABLE OF ty_s_coordinates WITH DEFAULT
KEY ,
END OF ty_s_datavalid_rt ,
ty_t_datavalid_rt TYPE SORTED TABLE OF ty_s_datavalid_rt
WITH UNIQUE KEY allowblank
error
errorstyle
errortitle
imemode
operator
prompt
prompttitle
showdropdown
showerrormessage
showinputmessage
TYPE
formula1
formula1_dataset_id
formula1_dataset_fld
formula1_dataset_rt_path_1
formula2 .
TYPES:
BEGIN OF ty_s_datavalid_seqnr ,
id TYPE snodetext-id ,
dataset_seqnr TYPE i ,
END OF ty_s_datavalid_seqnr ,
ty_t_datavalid_seqnr TYPE HASHED TABLE OF ty_s_datavalid_seqnr
WITH UNIQUE KEY id .
TYPES:
BEGIN OF ty_s_cells ,
y TYPE i ,
x TYPE i ,
style TYPE string ,
type TYPE string ,
value TYPE string ,
value_s TYPE string , " -->> respecting shared strings
formula TYPE string ,
textformat_style TYPE flag ,
dateformat_style TYPE flag ,
tmp_flag TYPE flag ,
tmp_value_s TYPE string ,
tmp_si_node TYPE REF TO if_ixml_node ,
datavalidation TYPE ty_s_datavalidation ,
END OF ty_s_cells ,
ty_t_cells TYPE SORTED TABLE OF ty_s_cells
WITH UNIQUE KEY y x .
TYPES:
BEGIN OF ty_s_calcchain ,
sheet_index TYPE i ,
y TYPE i ,
x TYPE i ,
END OF ty_s_calcchain ,
ty_t_calcchain TYPE STANDARD TABLE OF ty_s_calcchain
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_colprop ,
x TYPE i ,
width TYPE string ,
style TYPE string ,
hidden TYPE string ,
bestfit TYPE string ,
customwidth TYPE string ,
outlinelevel TYPE string ,
collapsed TYPE string ,
END OF ty_s_colprop ,
ty_t_colprop TYPE SORTED TABLE OF ty_s_colprop
WITH UNIQUE KEY x .
TYPES:
BEGIN OF ty_s_rowprop ,
y TYPE i ,
s TYPE string ,
customformat TYPE string ,
ht TYPE string ,
customheight TYPE string ,
hidden TYPE string ,
outlinelevel TYPE string ,
collapsed TYPE string ,
is_empty TYPE flag ,
END OF ty_s_rowprop ,
ty_t_rowprop TYPE HASHED TABLE OF ty_s_rowprop
WITH UNIQUE KEY y .
TYPES:
BEGIN OF ty_s_patterns ,
id TYPE snode-id ,
outlinelevel_row TYPE i ,
outlinelevel_col TYPE i ,
t_cells TYPE ty_t_cells ,
t_mergecells TYPE ty_t_mergecells_rel ,
t_colprop TYPE ty_t_colprop ,
t_rowprop TYPE ty_t_rowprop .
INCLUDE TYPE soi_area_item .
TYPES:
END OF ty_s_patterns ,
ty_t_patterns TYPE STANDARD TABLE OF ty_s_patterns
WITH KEY id .
TYPES:
BEGIN OF ty_s_nopgbrk_range ,
top TYPE flag ,
left TYPE flag .
INCLUDE TYPE ty_s_coordinates .
TYPES:
END OF ty_s_nopgbrk_range ,
ty_t_nopgbrk_range TYPE STANDARD TABLE OF ty_s_nopgbrk_range
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_manual_pgbrk ,
id TYPE i ,
END OF ty_s_manual_pgbrk ,
ty_t_manual_pgbrk TYPE STANDARD TABLE OF ty_s_manual_pgbrk
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_chart_series ,
idx TYPE string ,
caption TYPE string ,
END OF ty_s_chart_series ,
ty_t_chart_series TYPE STANDARD TABLE OF ty_s_chart_series
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_drawings_tmp ,
name TYPE string ,
drawing_type TYPE i ,
twocellanchor_node TYPE REF TO if_ixml_node ,
media_rawdata TYPE xstring ,
dataset_id TYPE snodetext-id ,
dataset_rt_path_1 TYPE string , " -->> runtime path (for dataset
subordination)
dataset_series_tab TYPE ty_t_dataset_series_tab ,
dataset_series_captyp TYPE i ,
chart_id TYPE snodetext-id ,
chart_series TYPE ty_t_chart_series ,
chart_series_title TYPE flag ,
chart_title TYPE flag ,
chart_title_tx TYPE string ,
chart_catax_title TYPE flag ,
chart_catax_title_tx TYPE string ,
chart_valax_title TYPE flag ,
chart_valax_title_tx TYPE string ,
chart_ixml_doc TYPE REF TO if_ixml_document ,
chartcolors_ixml_doc TYPE REF TO if_ixml_document ,
chartstyle_ixml_doc TYPE REF TO if_ixml_document ,
drawing_size_h TYPE i ,
drawing_size_w TYPE i .
INCLUDE TYPE soi_area_item .
TYPES:
END OF ty_s_drawings_tmp ,
ty_t_drawings_tmp TYPE HASHED TABLE OF ty_s_drawings_tmp
WITH UNIQUE KEY name .
TYPES:
BEGIN OF ty_s_drawings ,
drawing_type TYPE i ,
twocellanchor_node TYPE REF TO if_ixml_node ,
refer_id TYPE string ,
drawing_size_h TYPE i ,
drawing_size_w TYPE i .
INCLUDE TYPE ty_s_coordinates .
TYPES:
END OF ty_s_drawings ,
ty_t_drawings TYPE STANDARD TABLE OF ty_s_drawings
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_media ,
media_rawdata TYPE xstring ,
id TYPE string ,
END OF ty_s_media ,
ty_t_media TYPE HASHED TABLE OF ty_s_media
WITH UNIQUE KEY media_rawdata .
TYPES:
BEGIN OF ty_s_charts ,
id TYPE string ,
chart_ixml_doc TYPE REF TO if_ixml_document ,
chart_path TYPE string ,
chart_path_ TYPE string ,
chartcolors_ixml_doc TYPE REF TO if_ixml_document ,
chartcolors_path TYPE string ,
chartstyle_ixml_doc TYPE REF TO if_ixml_document ,
chartstyle_path TYPE string ,
chart_series_title TYPE flag ,
chart_title TYPE flag ,
chart_title_tx TYPE string ,
chart_catax_title TYPE flag ,
chart_catax_title_tx TYPE string ,
chart_valax_title TYPE flag ,
chart_valax_title_tx TYPE string ,
dataset_id TYPE snodetext-id ,
dataset_rt_path_1 TYPE string ,
dataset_series_tab TYPE ty_t_dataset_series_tab ,
dataset_series_captyp TYPE i ,
END OF ty_s_charts ,
ty_t_charts TYPE HASHED TABLE OF ty_s_charts
WITH UNIQUE KEY id .
TYPES:
BEGIN OF ty_s_dataset_ref_fields ,
field TYPE string ,
ref TYPE string ,
ref_2 TYPE string ,
beg_x TYPE i ,
end_x TYPE i ,
beg_y TYPE i ,
end_y TYPE i ,
caption_x TYPE i ,
caption_y TYPE i ,
caption_ref TYPE string ,
END OF ty_s_dataset_ref_fields ,
ty_t_dataset_ref_fields TYPE STANDARD TABLE OF ty_s_dataset_ref_fields
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_dataset_refs ,
rt_path_1 TYPE string , " -->> runtime path (for dataset
subordination)
sheetname TYPE string ,
t_fields TYPE ty_t_dataset_ref_fields ,
END OF ty_s_dataset_refs ,
ty_t_dataset_refs TYPE HASHED TABLE OF ty_s_dataset_refs
WITH UNIQUE KEY rt_path_1 .
TYPES:
BEGIN OF ty_s_datasets ,
id TYPE snodetext-id ,
t_refs TYPE ty_t_dataset_refs ,
END OF ty_s_datasets ,
ty_t_datasets TYPE HASHED TABLE OF ty_s_datasets
WITH UNIQUE KEY id .
TYPES:
BEGIN OF ty_s_cellrng_name ,
name TYPE string .
INCLUDE TYPE ty_s_coordinates .
TYPES:
END OF ty_s_cellrng_name ,
ty_t_cellrng_name TYPE STANDARD TABLE OF ty_s_cellrng_name
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_vmldrawings_rels .
INCLUDE TYPE ty_s_relstab .
TYPES:
media_path TYPE string ,
media_rawdata TYPE xstring ,
END OF ty_s_vmldrawings_rels ,
ty_t_vmldrawings_rels TYPE STANDARD TABLE OF ty_s_vmldrawings_rels WITH
DEFAULT KEY .
TYPES:
BEGIN OF ty_s_vmldrawings ,
id TYPE string ,
path TYPE string ,
ixml_doc TYPE REF TO if_ixml_document ,
rels_path TYPE string ,
t_rels TYPE ty_t_vmldrawings_rels ,
END OF ty_s_vmldrawings ,
ty_t_vmldrawings TYPE HASHED TABLE OF ty_s_vmldrawings
WITH UNIQUE KEY id .
TYPES:
BEGIN OF ty_s_sheetdata_template ,
t_patterns TYPE ty_t_patterns ,
t_sheetrels TYPE ty_t_relstab ,
t_drawings TYPE ty_t_drawings_tmp ,
vmldrawings TYPE ty_s_vmldrawings ,
END OF ty_s_sheetdata_template .
TYPES:
BEGIN OF ty_s_sheetdata_runtime .
INCLUDE TYPE ty_s_coordinates .
TYPES:
t_cells TYPE ty_t_cells ,
t_mergecells TYPE ty_t_mergecells ,
t_colprop TYPE ty_t_colprop ,
t_rowprop TYPE ty_t_rowprop ,
t_sheetrels TYPE ty_t_relstab ,
t_drawings TYPE ty_t_drawings ,
t_datavalid TYPE ty_t_datavalid_rt ,
drawing_path TYPE string ,
outlinelevelrow TYPE i ,
outlinelevelcol TYPE i ,
printtitles TYPE ty_s_coordinates ,
sheetprotection TYPE ty_s_sheetprotection ,
t_cellrng_name TYPE ty_t_cellrng_name ,
t_nopgbrk_range TYPE ty_t_nopgbrk_range ,
t_manual_pgbrk_col TYPE ty_t_manual_pgbrk ,
t_manual_pgbrk_row TYPE ty_t_manual_pgbrk ,
hidden TYPE flag ,
postprocessing_autofit TYPE flag ,
postprocessing_nopgbrk TYPE flag ,
END OF ty_s_sheetdata_runtime .
TYPES:
BEGIN OF ty_s_sheets ,
name TYPE ty_char31 ,
name_int TYPE ty_char100 ,
id TYPE ty_char100 ,
num TYPE ty_char100 ,
index TYPE i ,
ixml_doc TYPE REF TO if_ixml_document ,
summarybelow TYPE flag ,
summaryright TYPE flag ,
chartsheet TYPE flag ,
active TYPE flag ,
sheetdata_template TYPE ty_s_sheetdata_template ,
sheetdata_runtime TYPE ty_s_sheetdata_runtime ,
END OF ty_s_sheets ,
ty_t_sheets TYPE STANDARD TABLE OF ty_s_sheets
WITH KEY name .
TYPES:
BEGIN OF ty_s_textformat_styles ,
s TYPE i ,
END OF ty_s_textformat_styles ,
ty_t_textformat_styles TYPE HASHED TABLE OF ty_s_textformat_styles
WITH UNIQUE KEY s .
TYPES:
BEGIN OF ty_s_dateformat_styles ,
s TYPE i ,
END OF ty_s_dateformat_styles ,
ty_t_dateformat_styles TYPE HASHED TABLE OF ty_s_dateformat_styles
WITH UNIQUE KEY s .
TYPES:
BEGIN OF ty_s_model ,
ixml_doc_contenttypes TYPE REF TO if_ixml_document ,
ixml_doc_core TYPE REF TO if_ixml_document ,
ixml_doc_app TYPE REF TO if_ixml_document ,
ixml_doc_workbook TYPE REF TO if_ixml_document ,
ixml_doc_sharedstrings TYPE REF TO if_ixml_document ,
ixml_doc_calcchain TYPE REF TO if_ixml_document ,
ixml_doc_styles TYPE REF TO if_ixml_document ,
t_contentrels TYPE ty_t_relstab ,
t_workbookrels TYPE ty_t_relstab ,
t_sheets TYPE ty_t_sheets ,
t_sharedstrings TYPE ty_t_sharedstrings ,
t_calcchain TYPE ty_t_calcchain ,
t_media TYPE ty_t_media ,
t_charts TYPE ty_t_charts ,
t_datasets TYPE ty_t_datasets ,
t_textformat_styles TYPE ty_t_textformat_styles ,
t_dateformat_styles TYPE ty_t_dateformat_styles ,
t_vmldrawings TYPE ty_t_vmldrawings ,
v_refer_id TYPE ty_char10 ,
v_active_sheet_id TYPE ty_char100 ,
END OF ty_s_model .
DATA:
s_model TYPE ty_s_model READ-ONLY ,
r_zipfolder TYPE REF TO cl_abap_zip READ-ONLY ,
v_runtime TYPE flag ,
v_extension TYPE ty_char10 ,
t_elemsequence_worksheet TYPE ty_t_elemsequence ,
t_elemsequence_workbook TYPE ty_t_elemsequence .
CONSTANTS:
BEGIN OF c_tag ,
a TYPE string VALUE 'a' ,
p TYPE string VALUE 'p' ,
r TYPE string VALUE 'r' ,
s TYPE string VALUE 's' ,
t TYPE string VALUE 't' ,
c TYPE string VALUE 'c' ,
v TYPE string VALUE 'v' ,
table TYPE string VALUE 'table' ,
basetype TYPE string VALUE 'baseType' ,
drawing TYPE string VALUE 'drawing' ,
legacydrawing TYPE string VALUE 'legacyDrawing' ,
override TYPE string VALUE 'Override' ,
default TYPE string VALUE 'Default' ,
contenttype TYPE string VALUE 'ContentType' ,
extension TYPE string VALUE 'Extension' ,
partname TYPE string VALUE 'PartName' ,
relationships TYPE string VALUE 'Relationships' ,
relationship TYPE string VALUE 'Relationship' ,
type TYPE string VALUE 'Type' ,
types TYPE string VALUE 'Types' ,
target TYPE string VALUE 'Target' ,
twocellanchor TYPE string VALUE 'twoCellAnchor' ,
onecellanchor TYPE string VALUE 'oneCellAnchor' ,
headingpairs TYPE string VALUE 'HeadingPairs' ,
titlesofparts TYPE string VALUE 'TitlesOfParts' ,
vt TYPE string VALUE 'vt' ,
lpstr TYPE string VALUE 'lpstr' ,
i4 TYPE string VALUE 'i4' ,
i TYPE string VALUE 'i' ,
vector TYPE string VALUE 'vector' ,
variant TYPE string VALUE 'variant' ,
size TYPE string VALUE 'size' ,
id TYPE string VALUE 'id' ,
id_ TYPE string VALUE 'Id' ,
name TYPE string VALUE 'name' ,
sheet TYPE string VALUE 'sheet' ,
sheets TYPE string VALUE 'sheets' ,
sheetid TYPE string VALUE 'sheetId' ,
row TYPE string VALUE 'row' ,
rowoff TYPE string VALUE 'rowOff' ,
definednames TYPE string VALUE 'definedNames' ,
definedname TYPE string VALUE 'definedName' ,
localsheetid TYPE string VALUE 'localSheetId' ,
xlnmprinttitles TYPE string VALUE '_xlnm.Print_Titles' ,
si TYPE string VALUE 'si' ,
sst TYPE string VALUE 'sst' ,
space_ TYPE string VALUE 'space' ,
xml TYPE string VALUE 'xml' ,
xmlns TYPE string VALUE 'xmlns' ,
count TYPE string VALUE 'count' ,
uniquecount TYPE string VALUE 'uniqueCount' ,
workbookview TYPE string VALUE 'workbookView' ,
workbook TYPE string VALUE 'workbook' ,
activetab TYPE string VALUE 'activeTab' ,
mergecell TYPE string VALUE 'mergeCell' ,
mergecells TYPE string VALUE 'mergeCells' ,
ref TYPE string VALUE 'ref' ,
sheetdata TYPE string VALUE 'sheetData' ,
spans TYPE string VALUE 'spans' ,
worksheet TYPE string VALUE 'worksheet' ,
dimension TYPE string VALUE 'dimension' ,
selection TYPE string VALUE 'selection' ,
sheetformatpr TYPE string VALUE 'sheetFormatPr' ,
outlinelevelrow TYPE string VALUE 'outlineLevelRow' ,
outlinelevelcol TYPE string VALUE 'outlineLevelCol' ,
cols TYPE string VALUE 'cols' ,
col TYPE string VALUE 'col' ,
coloff TYPE string VALUE 'colOff' ,
calcchain TYPE string VALUE 'calcChain' ,
width TYPE string VALUE 'width' ,
style TYPE string VALUE 'style' ,
state TYPE string VALUE 'state' ,
hidden TYPE string VALUE 'hidden' ,
bestfit TYPE string VALUE 'bestfit' ,
customwidth TYPE string VALUE 'customWidth' ,
customheight TYPE string VALUE 'customHeight' ,
outlinelevel TYPE string VALUE 'outlineLevel' ,
customformat TYPE string VALUE 'customFormat' ,
collapsed TYPE string VALUE 'collapsed' ,
ht TYPE string VALUE 'ht' ,
min TYPE string VALUE 'min' ,
max TYPE string VALUE 'max' ,
xdr TYPE string VALUE 'xdr' ,
cnvpr TYPE string VALUE 'cNvPr' ,
pic TYPE string VALUE 'pic' ,
blip TYPE string VALUE 'blip' ,
embed TYPE string VALUE 'embed' ,
from TYPE string VALUE 'from' ,
to TYPE string VALUE 'to' ,
wsdr TYPE string VALUE 'wsDr' ,
editas TYPE string VALUE 'editAs' ,
onecell TYPE string VALUE 'oneCell' ,
clientdata TYPE string VALUE 'clientData' ,
nvpicpr TYPE string VALUE 'nvPicPr' ,
cnvpicpr TYPE string VALUE 'cNvPicPr' ,
descr TYPE string VALUE 'descr' ,
piclocks TYPE string VALUE 'picLocks' ,
nochangeaspect TYPE string VALUE 'noChangeAspect' ,
blipfill TYPE string VALUE 'blipFill' ,
stretch TYPE string VALUE 'stretch' ,
fillrect TYPE string VALUE 'fillRect' ,
sppr TYPE string VALUE 'spPr' ,
xfrm TYPE string VALUE 'xfrm' ,
off TYPE string VALUE 'off' ,
ext TYPE string VALUE 'ext' ,
x TYPE string VALUE 'x' ,
y TYPE string VALUE 'y' ,
cx TYPE string VALUE 'cx' ,
cy TYPE string VALUE 'cy' ,
prstgeom TYPE string VALUE 'prstGeom' ,
prst TYPE string VALUE 'prst' ,
rect TYPE string VALUE 'rect' ,
avlst TYPE string VALUE 'avLst' ,
jpeg TYPE string VALUE 'jpeg' ,
imagejpeg TYPE string VALUE 'image/jpeg' ,
emf TYPE string VALUE 'emf' ,
imageemf TYPE string VALUE 'image/x-emf' ,
outlinepr TYPE string VALUE 'outlinePr' ,
summarybelow TYPE string VALUE 'summaryBelow' ,
summaryright TYPE string VALUE 'summaryRight' ,
sheetprotection TYPE string VALUE 'sheetProtection' ,
password TYPE string VALUE 'password' ,
selectlockedcells TYPE string VALUE 'selectLockedCells' ,
selectunlockedcells TYPE string VALUE 'selectUnlockedCells' ,
formatcells TYPE string VALUE 'formatCells' ,
formatcolumns TYPE string VALUE 'formatColumns' ,
formatrows TYPE string VALUE 'formatRows' ,
insertcolumns TYPE string VALUE 'insertColumns' ,
insertrows TYPE string VALUE 'insertRows' ,
inserthyperlinks TYPE string VALUE 'insertHyperlinks' ,
deletecolumns TYPE string VALUE 'deleteColumns' ,
deleterows TYPE string VALUE 'deleteRows' ,
sort TYPE string VALUE 'sort' ,
autofilter TYPE string VALUE 'autoFilter' ,
pivottables TYPE string VALUE 'pivotTables' ,
objects TYPE string VALUE 'objects' ,
scenarios TYPE string VALUE 'scenarios' ,
cellxfs TYPE string VALUE 'cellXfs' ,
xf TYPE string VALUE 'xf' ,
numfmtid TYPE string VALUE 'numFmtId' ,
preserve TYPE string VALUE 'preserve' ,
properties TYPE string VALUE 'Properties' ,
coreproperties TYPE string VALUE 'coreProperties' ,
manager TYPE string VALUE 'Manager' ,
company TYPE string VALUE 'Company' ,
hyperlinkbase TYPE string VALUE 'HyperlinkBase' ,
contentstatus TYPE string VALUE 'contentStatus' ,
category TYPE string VALUE 'category' ,
description TYPE string VALUE 'description' ,
creator TYPE string VALUE 'creator' ,
subject TYPE string VALUE 'subject' ,
title TYPE string VALUE 'title' ,
keywords TYPE string VALUE 'keywords' ,
lastmodifiedby TYPE string VALUE 'lastModifiedBy' ,
dc TYPE string VALUE 'dc' ,
cp TYPE string VALUE 'cp' ,
rowbreaks TYPE string VALUE 'rowBreaks' ,
colbreaks TYPE string VALUE 'colBreaks' ,
manualbreakcount TYPE string VALUE 'manualBreakCount' ,
brk TYPE string VALUE 'brk' ,
man TYPE string VALUE 'man' ,
graphicframe TYPE string VALUE 'graphicFrame' ,
chart TYPE string VALUE 'chart' ,
plotarea TYPE string VALUE 'plotArea' ,
ser TYPE string VALUE 'ser' ,
val TYPE string VALUE 'val' ,
xval TYPE string VALUE 'xVal' ,
yval TYPE string VALUE 'yVal' ,
cat TYPE string VALUE 'cat' ,
idx TYPE string VALUE 'idx' ,
catax TYPE string VALUE 'catAx' ,
valax TYPE string VALUE 'valAx' ,
rich TYPE string VALUE 'rich' ,
tx TYPE string VALUE 'tx' ,
txpr TYPE string VALUE 'txPr' ,
strcache TYPE string VALUE 'strCache' ,
numcache TYPE string VALUE 'numCache' ,
pt TYPE string VALUE 'pt' ,
numref TYPE string VALUE 'numRef' ,
strref TYPE string VALUE 'strRef' ,
f TYPE string VALUE 'f' ,
layout TYPE string VALUE 'layout' ,
sheetview TYPE string VALUE 'sheetView' ,
tabselected TYPE string VALUE 'tabSelected' ,
endpararpr TYPE string VALUE 'endParaRPr' ,
datavalidation TYPE string VALUE 'dataValidation' ,
datavalidations TYPE string VALUE 'dataValidations' ,
sqref TYPE string VALUE 'sqref' ,
formula1 TYPE string VALUE 'formula1' ,
formula2 TYPE string VALUE 'formula2' ,
allowblank TYPE string VALUE 'allowBlank' ,
error TYPE string VALUE 'error' ,
errorstyle TYPE string VALUE 'errorStyle' ,
errortitle TYPE string VALUE 'errorTitle' ,
imemode TYPE string VALUE 'imeMode' ,
operator TYPE string VALUE 'operator' ,
prompt TYPE string VALUE 'prompt' ,
prompttitle TYPE string VALUE 'promptTitle' ,
showdropdown TYPE string VALUE 'showDropDown' ,
showerrormessage TYPE string VALUE 'showErrorMessage' ,
showinputmessage TYPE string VALUE 'showInputMessage' ,
type_ TYPE string VALUE 'type' ,
END OF c_tag .
CONSTANTS:
BEGIN OF c_contenttype ,
app TYPE string VALUE 'application/vnd.openxmlformats-
officedocument.extended-properties+xml' ,
workbook TYPE string VALUE 'application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet.main+xml' ,
workbook_macro TYPE string VALUE 'application/vnd.ms-
excel.sheet.macroEnabled.main+xml' ,
workbook_macro12 TYPE string VALUE 'application/vnd.ms-
excel.sheet.macroEnabled.12.main+xml' ,
sharedstrings TYPE string VALUE 'application/vnd.openxmlformats-
officedocument.spreadsheetml.sharedStrings+xml' ,
calcchain TYPE string VALUE 'application/vnd.openxmlformats-
officedocument.spreadsheetml.calcChain+xml' ,
sheet TYPE string VALUE 'application/vnd.openxmlformats-
officedocument.spreadsheetml.worksheet+xml' ,
drawing TYPE string VALUE 'application/vnd.openxmlformats-
officedocument.drawing+xml' ,
chart TYPE string VALUE 'application/vnd.openxmlformats-
officedocument.drawingml.chart+xml' ,
chartstyle TYPE string VALUE 'application/vnd.ms-
office.chartstyle+xml' ,
chartcolors TYPE string VALUE 'application/vnd.ms-
office.chartcolorstyle+xml' ,
relationships TYPE string VALUE
'http://schemas.openxmlformats.org/package/2006/relationships' ,
thumbnail TYPE string VALUE
'http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail' ,
wb TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships' ,
wb_sheet TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet' ,
wb_chartsheet TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet' ,
wb_sharedstrings TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings'
,
wb_calcchain TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain' ,
wb_drawing TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing' ,
wb_vmldrawing TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing' ,
wb_image TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image' ,
wb_chart TYPE string VALUE
'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart' ,
wb_chartstyle TYPE string VALUE
'http://schemas.microsoft.com/office/2011/relationships/chartStyle' ,
wb_chartcolors TYPE string VALUE
'http://schemas.microsoft.com/office/2011/relationships/chartColorStyle' ,
wb_main TYPE string VALUE
'http://schemas.openxmlformats.org/spreadsheetml/2006/main' ,
wb_drawings TYPE string VALUE
'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing' ,
wb_drawings_main TYPE string VALUE
'http://schemas.openxmlformats.org/drawingml/2006/main' ,
END OF c_contenttype .
CONSTANTS:
BEGIN OF c_path ,
contenttypes TYPE string VALUE '[Content_Types].xml' ,
app TYPE string VALUE '/docProps/app.xml' ,
core TYPE string VALUE '/docProps/core.xml' ,
workbook TYPE string VALUE '/xl/workbook.xml' ,
sharedstrings TYPE string VALUE '/xl/sharedStrings.xml' ,
calcchain TYPE string VALUE '/xl/calcChain.xml' ,
styles TYPE string VALUE '/xl/styles.xml' ,
sheetsfolder TYPE string VALUE '/xl/worksheets' ,
drawingsfolder TYPE string VALUE '/xl/drawings' ,
drawingsfolder_ TYPE string VALUE '../drawings' ,
mediafolder TYPE string VALUE '/xl/media' ,
mediafolder_ TYPE string VALUE '../media' ,
chartsfolder TYPE string VALUE '/xl/charts' ,
chartsfolder_ TYPE string VALUE '../charts' ,
formparameters TYPE string VALUE '/FormParameters' ,
formhead TYPE string VALUE '/FormParameters/head.xml' ,
formproperties TYPE string VALUE '/FormParameters/properties.xml' ,
formhierarchy TYPE string VALUE '/FormParameters/hierarchy.xml' ,
END OF c_path .
CONSTANTS:
BEGIN OF c_drawing_type ,
vector TYPE i VALUE 1 ,
bitmap TYPE i VALUE 2 ,
chart TYPE i VALUE 3 ,
END OF c_drawing_type .
CONSTANTS:
c_numbers TYPE ty_char10 VALUE '0123456789' ,
c_numbers__ TYPE ty_char15 VALUE ' 0123456789' ,
c_numbers_ TYPE ty_char15 VALUE '-0123456789.' ,
c_character_set TYPE string VALUE 'UTF-8' .
METHODS:
constructor
IMPORTING iv_rawdata TYPE any OPTIONAL
it_document_table TYPE tsfmime OPTIONAL
iv_document_size TYPE i OPTIONAL
EXCEPTIONS error_file_reading ,
free ,
bufferization_baseinfo ,
rawdata_set
IMPORTING iv_rawdata TYPE any ,
rawdata_set_as_table
IMPORTING it_document_table TYPE tsfmime
iv_document_size TYPE i ,
rawdata_get
RETURNING value(rv_rawdata) TYPE ty_rawdata,
rawdata_get_as_table
EXPORTING et_document_table TYPE tsfmime
ev_document_size TYPE i ,
conv_nc
IMPORTING iv_number TYPE any
EXPORTING ev_char TYPE any ,
conv_cn
IMPORTING iv_char TYPE any
EXPORTING ev_number TYPE any ,
conv_ref_nc
IMPORTING iv_beg_x TYPE any OPTIONAL
iv_beg_y TYPE any OPTIONAL
iv_end_x TYPE any OPTIONAL
iv_end_y TYPE any OPTIONAL
iv_prefix TYPE any OPTIONAL
iv_prefix_x TYPE any OPTIONAL
iv_prefix_y TYPE any OPTIONAL
iv_sheetname TYPE any OPTIONAL
EXPORTING ev_ref TYPE any
ev_ref_2 TYPE any ,
conv_ref_nc_2
IMPORTING iv_beg_x TYPE any OPTIONAL
iv_beg_y TYPE any OPTIONAL
iv_end_x TYPE any OPTIONAL
iv_end_y TYPE any OPTIONAL
iv_prefix TYPE any OPTIONAL
iv_sheetname TYPE any
EXPORTING ev_ref TYPE any ,
conv_ref_cn
IMPORTING iv_ref TYPE any
EXPORTING ev_beg_x TYPE any
ev_beg_y TYPE any
ev_end_x TYPE any
ev_end_y TYPE any ,
conv_formula_r1c1_a1
IMPORTING iv_y TYPE any
iv_x TYPE any
CHANGING cv_formula TYPE any ,
conv_formula_r1c1_a1_getshift
CHANGING cv_substring TYPE any
cv_shift TYPE i .
PROTECTED SECTION .
METHODS:
xml_attrib_get
IMPORTING ir_node TYPE REF TO if_ixml_node
iv_attrib_name1 TYPE any OPTIONAL
iv_attrib_name2 TYPE any OPTIONAL
iv_attrib_name3 TYPE any OPTIONAL
iv_attrib_name4 TYPE any OPTIONAL
EXPORTING ev_attrib_value1 TYPE any
ev_attrib_value2 TYPE any
ev_attrib_value3 TYPE any
ev_attrib_value4 TYPE any ,
xml_load
IMPORTING iv_path TYPE any
iv_preserve TYPE flag OPTIONAL
RETURNING value(rv_ixml_doc) TYPE REF TO if_ixml_document ,
xml_save
IMPORTING iv_ixml_doc TYPE REF TO if_ixml_document
value(iv_path) TYPE any
iv_show TYPE flag OPTIONAL
RETURNING value(rv_xml_xstring) TYPE xstring ,
xml_string_to_dom
IMPORTING iv_string TYPE string
iv_preserve TYPE flag OPTIONAL
RETURNING value(rv_ixml_doc) TYPE REF TO if_ixml_document ,
xml_xstring_to_dom
IMPORTING iv_xstring TYPE xstring
iv_preserve TYPE flag OPTIONAL
RETURNING value(rv_ixml_doc) TYPE REF TO if_ixml_document ,
xml_insert_element
IMPORTING iv_name_element TYPE any
ir_ixml_element TYPE REF TO if_ixml_element
it_elemsequence TYPE ty_t_elemsequence
CHANGING cr_ixml_parent TYPE REF TO if_ixml_element ,
xml_relstab_get
IMPORTING iv_path TYPE any
RETURNING value(rt_relstab) TYPE ty_t_relstab ,
xml_relstab_set
IMPORTING iv_path TYPE any
it_relstab TYPE ty_t_relstab ,
xml_remove_nodes
IMPORTING iv_ixml_doc TYPE REF TO if_ixml_document
iv_name TYPE any
iv_namespace TYPE any OPTIONAL ,
template_getfrom_hardcode
RETURNING value(rv_rawdata) TYPE xstring .
msg_init( ) .
IF it_document_table IS NOT INITIAL
AND iv_document_size IS NOT INITIAL .
rawdata_set_as_table( it_document_table = it_document_table
iv_document_size = iv_document_size ) .
ELSEIF iv_rawdata IS NOT INITIAL .
rawdata_set( iv_rawdata ) .
ELSE .
DATA lv_rawdata TYPE xstring .
lv_rawdata = template_getfrom_hardcode( ) .
rawdata_set( lv_rawdata ) .
ENDIF .
IF v_retcode EQ c_retcode-error .
MESSAGE e000(lp) WITH v_text-t336 " text: Error while reading
template file
RAISING error_file_reading .
ENDIF .
ENDMETHOD . "constructor
METHOD free .
CLEAR s_model .
FREE s_model .
IF r_zipfolder IS BOUND .
FREE r_zipfolder .
ENDIF .
ENDMETHOD . "free
METHOD conv_nc .
DATA:
lv_number TYPE i ,
lv_flt TYPE f ,
lv_int TYPE i ,
lv_tail TYPE i ,
lv_symbol TYPE ty_char1 .
lv_number = iv_number .
CLEAR ev_char .
WHILE lv_number GT 0 .
lv_flt = lv_number / 26 .
lv_int = TRUNC( lv_flt ).
lv_tail = lv_number - lv_int * 26 .
CASE lv_tail .
WHEN 1 . lv_symbol = 'A' .
WHEN 2 . lv_symbol = 'B' .
WHEN 3 . lv_symbol = 'C' .
WHEN 4 . lv_symbol = 'D' .
WHEN 5 . lv_symbol = 'E' .
WHEN 6 . lv_symbol = 'F' .
WHEN 7 . lv_symbol = 'G' .
WHEN 8 . lv_symbol = 'H' .
WHEN 9 . lv_symbol = 'I' .
WHEN 10. lv_symbol = 'J' .
WHEN 11. lv_symbol = 'K' .
WHEN 12. lv_symbol = 'L' .
WHEN 13. lv_symbol = 'M' .
WHEN 14. lv_symbol = 'N' .
WHEN 15. lv_symbol = 'O' .
WHEN 16. lv_symbol = 'P' .
WHEN 17. lv_symbol = 'Q' .
WHEN 18. lv_symbol = 'R' .
WHEN 19. lv_symbol = 'S' .
WHEN 20. lv_symbol = 'T' .
WHEN 21. lv_symbol = 'U' .
WHEN 22. lv_symbol = 'V' .
WHEN 23. lv_symbol = 'W' .
WHEN 24. lv_symbol = 'X' .
WHEN 25. lv_symbol = 'Y' .
WHEN 0 . lv_symbol = 'Z' . SUBTRACT 1 FROM lv_int .
ENDCASE .
lv_number = lv_int .
ENDWHILE .
ENDMETHOD . "conv_nc
METHOD conv_cn .
DATA:
lv_char TYPE ty_char1024 ,
lv_tail TYPE i ,
lv_strlen TYPE i ,
lv_offset TYPE i ,
lv_exponent TYPE i .
FIELD-SYMBOLS:
<symbol> TYPE ty_char1 .
lv_char = iv_char .
CLEAR ev_number .
IF lv_char CA c_numbers .
CLEAR lv_char+sy-fdpos .
ENDIF .
CONDENSE lv_char NO-GAPS .
DO lv_strlen TIMES .
lv_exponent = lv_strlen - sy-index .
ADD 1 TO lv_offset .
ASSIGN lv_char+lv_offset(1)
TO <symbol> .
CASE <symbol>.
WHEN 'A' . lv_tail = 1 .
WHEN 'B' . lv_tail = 2 .
WHEN 'C' . lv_tail = 3 .
WHEN 'D' . lv_tail = 4 .
WHEN 'E' . lv_tail = 5 .
WHEN 'F' . lv_tail = 6 .
WHEN 'G' . lv_tail = 7 .
WHEN 'H' . lv_tail = 8 .
WHEN 'I' . lv_tail = 9 .
WHEN 'J' . lv_tail = 10.
WHEN 'K' . lv_tail = 11.
WHEN 'L' . lv_tail = 12.
WHEN 'M' . lv_tail = 13.
WHEN 'N' . lv_tail = 14.
WHEN 'O' . lv_tail = 15.
WHEN 'P' . lv_tail = 16.
WHEN 'Q' . lv_tail = 17.
WHEN 'R' . lv_tail = 18.
WHEN 'S' . lv_tail = 19.
WHEN 'T' . lv_tail = 20.
WHEN 'U' . lv_tail = 21.
WHEN 'V' . lv_tail = 22.
WHEN 'W' . lv_tail = 23.
WHEN 'X' . lv_tail = 24.
WHEN 'Y' . lv_tail = 25.
WHEN 'Z' . lv_tail = 26.
WHEN OTHERS. CLEAR ev_number. EXIT .
ENDCASE .
ENDMETHOD . "conv_cn
METHOD conv_ref_nc .
DATA:
lv_beg_x_char TYPE ty_char100 ,
lv_beg_y_char TYPE ty_char100 ,
lv_end_x_char TYPE ty_char100 ,
lv_end_y_char TYPE ty_char100 ,
lv_ref TYPE ty_char1024 .
ev_ref_2 = lv_ref .
ev_ref = lv_ref .
ENDMETHOD . "conv_ref_nc
METHOD conv_ref_nc_2 .
DATA:
lv_beg_x_char TYPE ty_char100 ,
lv_beg_y_char TYPE ty_char100 ,
lv_end_x_char TYPE ty_char100 ,
lv_end_y_char TYPE ty_char100 ,
lv_ref TYPE ty_char1024 .
CLEAR ev_ref .
lv_end_y_char = iv_end_y .
CONDENSE lv_end_y_char NO-GAPS .
ev_ref = lv_ref .
ENDMETHOD . "conv_ref_nc_2
METHOD conv_ref_cn .
DATA:
lv_ref TYPE ty_char1024 ,
lv_ref_beg TYPE ty_char100 ,
lv_ref_end TYPE ty_char100 ,
lv_beg_x_char TYPE ty_char100 ,
lv_beg_y_char TYPE ty_char100 ,
lv_end_x_char TYPE ty_char100 ,
lv_end_y_char TYPE ty_char100 .
CLEAR:
ev_beg_x ,
ev_beg_y ,
ev_end_x ,
ev_end_y .
CHECK iv_ref IS NOT INITIAL .
lv_ref = iv_ref .
SPLIT lv_ref AT ':' INTO lv_ref_beg lv_ref_end .
ENDMETHOD . "conv_ref_cn
METHOD conv_formula_r1c1_a1 .
*======================================================================
* convert R1C1 notation to A1
*======================================================================
DATA:
lt_result_tab TYPE match_result_tab ,
lv_i TYPE i ,
lv_i2 TYPE i ,
lv_x TYPE i ,
lv_x_prefix TYPE string ,
lv_y TYPE i ,
lv_y_prefix TYPE string ,
lv_shift TYPE i ,
lv_substring TYPE c LENGTH 10000 ,
lv_sub_r TYPE c LENGTH 10000 ,
lv_sub_c TYPE c LENGTH 10000 ,
lv_formula_a1 TYPE string .
FIELD-SYMBOLS:
<ls_result_tab> TYPE match_result ,
<ls_submatches> TYPE submatch_result .
* ===========
IF <ls_result_tab>-offset > lv_i .
lv_i2 = <ls_result_tab>-offset - lv_i .
CONCATENATE lv_formula_a1
cv_formula+lv_i(lv_i2)
INTO lv_formula_a1 .
ENDIF .
lv_i = <ls_result_tab>-offset + <ls_result_tab>-length .
lv_substring = cv_formula+<ls_result_tab>-offset(<ls_result_tab>-length) .
DO 1 TIMES .
CHECK lv_substring(1) EQ 'R' .
CHECK lv_substring CS 'C' .
lv_sub_r = lv_substring(sy-fdpos) .
lv_sub_c = lv_substring+sy-fdpos .
* Row
SHIFT lv_sub_r LEFT DELETING LEADING 'R' .
IF lv_sub_r IS INITIAL .
lv_y = iv_y .
lv_y_prefix = space .
* Column
SHIFT lv_sub_c LEFT DELETING LEADING 'C' .
IF lv_sub_c IS INITIAL .
lv_x = iv_x .
lv_x_prefix = space .
ELSE .
CHECK lv_sub_c CO c_numbers__ .
lv_x = lv_sub_c .
lv_x_prefix = '$' .
ENDIF .
* ===========
CONCATENATE lv_formula_a1
lv_substring
INTO lv_formula_a1 .
AT LAST .
CHECK STRLEN( cv_formula ) > lv_i .
CONCATENATE lv_formula_a1
cv_formula+lv_i
INTO lv_formula_a1 .
ENDAT .
ENDLOOP .
ENDMETHOD . "conv_formula_r1c1_a1
METHOD conv_formula_r1c1_a1_getshift .
* get relative shift: number inside the square brackets (for example [-5] )
DATA:
lv_negative TYPE flag ,
lv_length TYPE i .
CLEAR cv_shift .
cv_substring = cv_substring+1 .
IF cv_substring(1) EQ '-' .
cv_substring = cv_substring+1 .
lv_negative = abap_on .
ELSE .
lv_negative = space .
ENDIF .
lv_length = sy-fdpos .
cv_shift = cv_substring(lv_length) .
ADD 1 TO lv_length .
cv_substring = cv_substring+lv_length .
CLEAR ev_attrib_value1 .
CLEAR ev_attrib_value2 .
CLEAR ev_attrib_value3 .
CLEAR ev_attrib_value4 .
lr_ndmap = ir_node->get_attributes( ) .
lr_nditerator = lr_ndmap->create_iterator( ) .
lr_attrib = lr_nditerator->get_next( ) .
CASE lv_attrib_name .
WHEN iv_attrib_name1 . ev_attrib_value1 = lv_attrib_value .
WHEN iv_attrib_name2 . ev_attrib_value2 = lv_attrib_value .
WHEN iv_attrib_name3 . ev_attrib_value3 = lv_attrib_value .
WHEN iv_attrib_name4 . ev_attrib_value4 = lv_attrib_value .
WHEN OTHERS .
ENDCASE .
lr_attrib = lr_nditerator->get_next( ) .
ENDWHILE .
ENDMETHOD . "xml_attrib_get
METHOD xml_load .
DATA:
lv_name TYPE string ,
lv_content TYPE xstring .
lv_name = iv_path .
SHIFT lv_name LEFT DELETING LEADING '/' .
IF lr_parser->parse( ) NE 0
AND lr_parser->num_errors( ) NE 0 .
lv_err_count = lr_parser->num_errors( ) .
WHILE lv_err_index < lv_err_count .
lr_parse_error = lr_parser->get_error( index = lv_err_index ) .
lv_err_reason = lr_parse_error->get_reason( ) .
MESSAGE i000(lp) WITH lv_err_reason .
ADD 1 TO lv_err_index .
ENDWHILE .
ENDIF .
lr_istream->close( ) .
ENDMETHOD . "xml_xstring_to_dom
METHOD xml_save .
DATA:
lr_ixml TYPE REF TO if_ixml ,
lr_streamfactory TYPE REF TO if_ixml_stream_factory ,
lr_ostream TYPE REF TO if_ixml_ostream ,
lr_encoding TYPE REF TO if_ixml_encoding ,
lr_renderer TYPE REF TO if_ixml_renderer .
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
DATA:
lv_tabix TYPE sytabix ,
lv_index TYPE syindex ,
ls_elemsequence TYPE ty_s_elemsequence ,
lr_ixml_node TYPE REF TO if_ixml_node ,
lr_ixml_node_any TYPE REF TO if_ixml_node ,
lr_ixml_node_next TYPE REF TO if_ixml_node ,
lr_ixml_ncol TYPE REF TO if_ixml_node_collection .
lv_index = lr_ixml_ncol->get_length( ) - 1 .
CHECK lv_index GE 0 .
* insert the new node exactly AFTER node that has been found
CHECK lr_ixml_node_any IS BOUND .
lr_ixml_node_next = lr_ixml_node_any->get_next( ) .
lr_ixml_node ?= ir_ixml_element .
IF lr_ixml_node_next IS BOUND .
cr_ixml_parent->insert_child( new_child = lr_ixml_node
ref_child = lr_ixml_node_next ) .
ELSE .
cr_ixml_parent->append_child( new_child = lr_ixml_node ) .
ENDIF .
ENDMETHOD . "xml_insert_element
METHOD xml_relstab_get .
DATA:
lr_document TYPE REF TO if_ixml_document ,
lr_ncol TYPE REF TO if_ixml_node_collection ,
lr_node TYPE REF TO if_ixml_node ,
lv_index TYPE syindex ,
lv_fullpath_rels TYPE string ,
lv_path TYPE string ,
lv_file TYPE string ,
ls_relstab TYPE ty_s_relstab .
CLEAR rt_relstab .
FREE rt_relstab .
* compose XML
lr_ixml = cl_ixml=>create( ) .
lr_ixml_doc = lr_ixml->create_document( ) .
ENDMETHOD . "xml_relstab_set
METHOD xml_remove_nodes .
DATA:
lr_ncol TYPE REF TO if_ixml_node_collection ,
lr_node TYPE REF TO if_ixml_node ,
lv_index TYPE sy-index .
IF iv_namespace IS INITIAL .
lr_ncol = iv_ixml_doc->get_elements_by_tag_name(
name = iv_name ) .
ELSE .
lr_ncol = iv_ixml_doc->get_elements_by_tag_name(
name = iv_name
namespace = iv_namespace ) .
ENDIF .
IF lr_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_node = lr_ncol->get_item( index = lv_index ) .
IF lr_node IS NOT BOUND. EXIT. ENDIF .
lr_node->remove_node( ) .
ENDDO .
ENDIF .
ENDMETHOD . "xml_remove_nodes
METHOD bufferization_baseinfo .
CHECK r_zipfolder->save( ) IS NOT INITIAL .
*======================================================================
* bufferization header data
*======================================================================
s_model-ixml_doc_contenttypes = xml_load( iv_path = c_path-contenttypes ) .
s_model-ixml_doc_core = xml_load( iv_path = c_path-core ) .
s_model-ixml_doc_app = xml_load( iv_path = c_path-app ) .
s_model-ixml_doc_workbook = xml_load( iv_path = c_path-workbook ) .
s_model-ixml_doc_sharedstrings = xml_load( iv_path = c_path-sharedstrings
iv_preserve = abap_on ) .
s_model-ixml_doc_styles = xml_load( iv_path = c_path-styles ) .
s_model-t_contentrels = xml_relstab_get( c_path-contenttypes ) .
s_model-t_workbookrels = xml_relstab_get( c_path-workbook ) .
*======================================================================
* bufferization sheets data
*======================================================================
FIELD-SYMBOLS:
<sheets> TYPE ty_s_sheets ,
<chart_series> TYPE ty_s_chart_series .
TYPES:
BEGIN OF ty_s_images ,
id TYPE string ,
value TYPE xstring ,
END OF ty_s_images ,
ty_t_images TYPE HASHED TABLE OF ty_s_images
WITH UNIQUE KEY id .
DATA:
ls_textformat_styles TYPE ty_s_textformat_styles ,
ls_dateformat_styles TYPE ty_s_dateformat_styles ,
lv_string_tmp TYPE string ,
lv_index TYPE sy-index ,
lv_path_sheet TYPE string ,
lv_path TYPE string ,
lv_id TYPE string ,
lv_id_drawings TYPE string ,
ls_drawings TYPE ty_s_drawings_tmp ,
lv_numfmtid TYPE i ,
lv_partname TYPE string ,
lv_contenttype TYPE string ,
lr_ncol TYPE REF TO if_ixml_node_collection ,
lr_node TYPE REF TO if_ixml_node ,
lr_twocellanchor_ncol TYPE REF TO if_ixml_node_collection ,
lr_twocellanchor_node TYPE REF TO if_ixml_node ,
lr_ser_ncol TYPE REF TO if_ixml_node_collection ,
lr_ser_node TYPE REF TO if_ixml_node ,
ls_sheetrels TYPE ty_s_relstab ,
ls_drawingrels TYPE ty_s_relstab ,
lt_drawingrels TYPE ty_t_relstab ,
ls_vmldrawing_rels TYPE ty_s_vmldrawings_rels ,
ls_vmldrawingrels TYPE ty_s_relstab ,
lt_vmldrawingrels TYPE ty_t_relstab ,
ls_chartrels TYPE ty_s_relstab ,
lt_chartrels TYPE ty_t_relstab ,
lr_drawing_doc TYPE REF TO if_ixml_document ,
ls_workbookrels TYPE ty_s_relstab .
DATA:
BEGIN OF lr_element ,
any TYPE REF TO if_ixml_element ,
twocellanchor TYPE REF TO if_ixml_element ,
drawing TYPE REF TO if_ixml_element ,
legacydrawing TYPE REF TO if_ixml_element ,
cnvpr TYPE REF TO if_ixml_element ,
pic TYPE REF TO if_ixml_element ,
blip TYPE REF TO if_ixml_element ,
cellxfs TYPE REF TO if_ixml_element ,
outlinepr TYPE REF TO if_ixml_element ,
graphicframe TYPE REF TO if_ixml_element ,
chart TYPE REF TO if_ixml_element ,
plotarea TYPE REF TO if_ixml_element ,
ser TYPE REF TO if_ixml_element ,
idx TYPE REF TO if_ixml_element ,
tx TYPE REF TO if_ixml_element ,
strcache TYPE REF TO if_ixml_element ,
pt TYPE REF TO if_ixml_element ,
v TYPE REF TO if_ixml_element ,
sheetview TYPE REF TO if_ixml_element ,
END OF lr_element .
*======================================================================
* format definition (analyze [Content_Types].xml)
*======================================================================
DO 1 TIMES .
CLEAR v_extension .
lr_ncol =
s_model-ixml_doc_contenttypes->get_elements_by_tag_name(
name = c_tag-override ) .
CHECK lr_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_node = lr_ncol->get_item( index = lv_index ) .
IF lr_node IS INITIAL. EXIT. ENDIF .
*======================================================================
* bufferization styles (get styles with text format)
*======================================================================
DO 1 TIMES .
lr_element-cellxfs =
s_model-ixml_doc_styles->find_from_name( name = c_tag-cellxfs depth = 1 ) .
CHECK lr_element-cellxfs IS BOUND .
lr_ncol =
lr_element-cellxfs->get_elements_by_tag_name(
name = c_tag-xf
depth = 1 ) .
CHECK lr_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_node = lr_ncol->get_item( index = lv_index ) .
IF lr_node IS INITIAL. EXIT. ENDIF .
*======================================================================
* analyze xl/workbook.xml
* and add sheets into buffer
*======================================================================
lr_ncol =
s_model-ixml_doc_workbook->get_elements_by_tag_name(
name = c_tag-sheet
depth = 3 ) .
CHECK lr_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_node = lr_ncol->get_item( index = lv_index ) .
IF lr_node IS INITIAL. EXIT. ENDIF .
*======================================================================
* loop at worksheets
*======================================================================
LOOP AT s_model-t_sheets ASSIGNING <sheets> .
*======================================================================
*======================================================================
* read /xl/worksheets/sheet.xml
*======================================================================
*======================================================================
CONCATENATE '/xl/' ls_workbookrels-target INTO lv_path_sheet .
<sheets>-ixml_doc = xml_load( iv_path = lv_path_sheet ) .
lr_element-outlinepr =
<sheets>-ixml_doc->find_from_name( name = c_tag-outlinepr depth = 2 ) .
CHECK lr_element-outlinepr IS BOUND .
CLEAR lv_string_tmp .
lv_string_tmp = lr_element-outlinepr->get_attribute( name = c_tag-
summarybelow ) .
IF lv_string_tmp EQ '0' .
CLEAR <sheets>-summarybelow .
ENDIF .
CLEAR lv_string_tmp .
lv_string_tmp = lr_element-outlinepr->get_attribute( name = c_tag-
summaryright ) .
IF lv_string_tmp EQ '0' .
CLEAR <sheets>-summaryright .
ENDIF .
ENDDO .
CLEAR lv_string_tmp .
lv_string_tmp = lr_element-sheetview->get_attribute( name = c_tag-
tabselected ) .
IF lv_string_tmp EQ '1' .
<sheets>-active = abap_on .
ENDIF .
ENDDO .
*======================================================================
*======================================================================
* DRAWING
*======================================================================
*======================================================================
DO 1 TIMES .
* in the sheet we lookup an ID, that refer the document with Drawing
lr_element-drawing =
<sheets>-ixml_doc->find_from_name(
name = c_tag-drawing
depth = 1 ) .
CHECK lr_element-drawing IS BOUND .
lv_id_drawings = lr_element-drawing->get_attribute(
name = c_tag-id
namespace = c_tag-r ) .
CHECK lv_id_drawings IS NOT INITIAL . " -->> id was found
*======================================================================
* xl/worksheets/sheet1.xml
* --> xl/worksheets/_rels/sheet.xml.rels
* --> xl/drawings/drawing.xml
* --> xl/drawings/_rels/drawing.xml.rels
*======================================================================
READ TABLE <sheets>-sheetdata_template-t_sheetrels INTO ls_sheetrels
WITH KEY type = c_contenttype-wb_drawing
id = lv_id_drawings .
CHECK sy-subrc EQ 0.
*======================================================================
* analyze xl/drawings/drawing.xml :
* and fill general buffer of drawings
*======================================================================
lr_twocellanchor_ncol =
lr_drawing_doc->get_elements_by_tag_name(
name = c_tag-twocellanchor
namespace = c_tag-xdr
depth = 2 ) .
CHECK lr_twocellanchor_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_twocellanchor_node = lr_twocellanchor_ncol->get_item( index = lv_index
) .
IF lr_twocellanchor_node IS INITIAL. EXIT. ENDIF .
lr_element-twocellanchor ?= lr_twocellanchor_node-
>query_interface( ixml_iid_element ) .
CLEAR ls_drawings .
ls_drawings-name = lr_element-cnvpr->get_attribute( name = c_tag-name ) .
ls_drawings-twocellanchor_node = lr_twocellanchor_node->clone( ) .
DO 1 TIMES .
CHECK ls_drawings-drawing_type IS INITIAL .
DO 1 TIMES .
CHECK ls_drawings-drawing_type IS INITIAL .
lr_ser_ncol =
lr_element-plotarea->get_elements_by_tag_name(
name = c_tag-ser
namespace = c_tag-c
depth = 2 ) .
CHECK lr_ser_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_ser_node = lr_ser_ncol->get_item( index = lv_index ) .
IF lr_ser_node IS INITIAL. EXIT. ENDIF .
lr_element-ser ?= lr_ser_node->query_interface( ixml_iid_element ) .
FREE lr_element-idx . CLEAR lr_element-idx .
lr_element-idx = lr_element-ser->find_from_name( name = c_tag-idx
namespace = c_tag-c depth = 1 ) .
CHECK lr_element-idx IS BOUND .
APPEND INITIAL LINE TO ls_drawings-chart_series ASSIGNING
<chart_series> .
<chart_series>-idx = lr_element-idx->get_attribute( name = c_tag-
val ) .
FREE lr_element-tx . CLEAR lr_element-tx .
lr_element-tx = lr_element-ser->find_from_name( name = c_tag-tx
namespace = c_tag-c depth = 1 ) .
CHECK lr_element-tx IS BOUND .
DO 1 TIMES .
CHECK ls_drawings-drawing_type IS INITIAL .
*======================================================================
*======================================================================
* LEGACY DRAWING (whole copy with all related objects)
*======================================================================
*======================================================================
DO 1 TIMES .
* in the sheet we lookup an ID, that refer the document with Legacy Drawing
lr_element-legacydrawing =
<sheets>-ixml_doc->find_from_name(
name = c_tag-legacydrawing
depth = 1 ) .
CHECK lr_element-legacydrawing IS BOUND .
<sheets>-sheetdata_template-vmldrawings-id = lr_element-legacydrawing-
>get_attribute(
name = c_tag-id
namespace = c_tag-r ) .
CHECK <sheets>-sheetdata_template-vmldrawings-id IS NOT INITIAL . " -->> id
was found
*======================================================================
* xl/worksheets/sheet1.xml
* --> xl/worksheets/_rels/sheet.xml.rels
* --> xl/drawings/vmlDrawing.xml
* --> xl/drawings/_rels/vmlDrawing.vml.rels
*======================================================================
READ TABLE <sheets>-sheetdata_template-t_sheetrels INTO ls_sheetrels
WITH KEY type = c_contenttype-wb_vmldrawing
id = <sheets>-sheetdata_template-vmldrawings-id .
CHECK sy-subrc EQ 0.
* get ...xl\media\imageXXX.emf
CLEAR ls_vmldrawing_rels .
MOVE-CORRESPONDING ls_vmldrawingrels TO ls_vmldrawing_rels .
rawdata_set( lv_rawdata ) .
ENDMETHOD . "rawdata_set_as_table
METHOD rawdata_get .
rv_rawdata = r_zipfolder->save( ) .
IF rv_rawdata EQ '504B0506000000000000000000000000000000000000' .
CLEAR rv_rawdata .
FREE rv_rawdata .
ENDIF .
ENDMETHOD . "rawdata_get
METHOD rawdata_get_as_table .
DATA lv_rawdata TYPE ty_rawdata .
lv_rawdata = rawdata_get( ) .
mk_append:
'504B030414000600080000002100CC7EE6A14E010000080400001300DF015B436F6E74656E745F5479
7065735D2E786D6C20A2DB0128A00002000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'00000000000000000000000000000000000000000000000000000000AC93CB4EC3301045F748FC83E5
2D8ADDB2400835ED82C712BA281F60EC4963D52F79DCD2FE3D938422814A455536B1226BEE9D39733D9
96DBD631BC86863A8F9588C3883A0A3B161' ,
'59F3D7C55375CB1916158C723140CD77807C36BDBC982C7609905175C09AB7A5A43B2951B7E0158A98
20D04D13B357857EF35226A5576A09F27A34BA913A8602A154A5D3E0D3C90B3590AD013657B93C2B4F3
E72EB64213518BE63417A9CDD0F859D77CD' ,
'554ACE6A55A873B909E6876B159BC66A3051AF3D79895EECAA5391BF1A62D939C0B3AD306550065B80
E29D1844F7CE0FD0A8B52BEC714B0406E8191C9E36DA274C4195FDF8D8DA84471C8EB33BCEE43DE6D55
B8CABFFA6D2D1115ED9B0EFFB5008687BF3' ,
'1C134ADAF5D90D4087DC80A91249422E16BE981DF2A60076B3F76B44D91FE7A7F07B34BEF4FFC440C7
0CA743D867A5AB3E30B9ECDFF1F4030000FFFF0300504B030414000600080000002100B5553023F5000
0004C0200000B00CE015F72656C732F2E72' ,
'656C7320A2CA0128A00002000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E480
8A1A5BB4C48BB21541EC024EE1FB58DA324' ,
'40F7F68403824A63DBD1F6E7CF3F5BDEEEE669541F1C622F4EC3BA2841B133627BD76A78AD9F560FA0
6222676914C71A8E1C6157DDDE6C5F78A4949B62D7FBA8B28B8B1ABA94FC2362341D4F140BF1EC72A59
13051CA6168D19319A865DC94E53D86BF1E' ,
'502D3CD5C16A08077B07AA3EFA3CF9B2B7344D6F782FE67D62974E8C409E133BCB76E543660BA9CFDB
A89A42CB498315F39CD311C9FB2263039E26DA5C4FF4FFB63871224B89D048E0F33CDF8A7340EBEB812
E9F68A9F8BDCE3CE2A784E14D64F861C1C5' ,
'0F545F000000FFFF0300504B0304140006000800000021008D87DA70E00000002D0200001A00080178
6C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C7320A2040128A0000100000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'000000000000000000000000000000000000000000000000000000000000AC91CB6AC3301045F785FE
83987D3D760AA594C8D99442B6C5FD00218F1FC496846692D67F5FE182DD404836D908AE06DD73246D7
73FE3A04E14B9F74E4391E5A0C8595FF7AE' ,
'D5F0557D3CBD826231AE368377A46122865DF9F8B0FDA4C1483AC45D1F58A516C71A3A91F086C8B6A3
D170E603B934697C1C8DA4185B0CC61E4C4BB8C9F3178CFF3BA03CEB54FB5A43DCD7CFA0AA2924F2ED6
EDF34BDA5776F8F2339B980409669481750' ,
'95892D8986BF9C2547C0CBF8CD3DF1929E8556FA1C715E8B6B0EC53D1DBE7D3C704724ABC7B2C5384F
16193CFBE4F2170000FFFF0300504B0304140000000800C8665944FA26B7975C0100005B0200000F000
000786C2F776F726B626F6F6B2E786D6C8D' ,
'914D6E83301085F7957A07CBFB0670429A469048512B359BAA52A364EDE221583136B24D49CED6458F
D42B7400919F5D579E37E06FDE1BFF7EFF24CB63A9C81758278D4E69340A29019D1921F53EA5B5CF1F6
69438CFB5E0CA6848E9091C5D2EEEEF92C6' ,
'D8C3A731078200ED525A785FCD83C0650594DC8D4C051ABFE4C696DCA3B4FBC05516B87005802F55C0
C2701A945C6ADA13E6F63F0C93E732836793D52568DF432C28EED1BE2B64E5287A2324C9A5826D9F8AF
0AA7AE3257A3F2A4A1477FE45480F22A513' ,
'94A6819B86ADAB552D552BE230A624E87943DA774B7039D0F33685742B6C522220E7B5F21BF43D8CC5
65B20963D333A2BDBE95D0B84E5E31DB2639EEA416A649E9231BE31B9C06396368A2E9C44E0A5F20761
C5D7AAF20F7854F298B2F5E83DB4949B7F1' ,
'F3D44E11DD05F868EB081FB83DD798196B3B9758D8B5882EC02B42927195B55BC0A3BBC12671F4D4FF
9A0443A4C51F504B0304140006000800000021001D21165BC5010000800300000D000000786C2F73747
96C65732E786D6CA4934D8ADC301085F781' ,
'B983D07E466E930C49B03D8B4043600602D3816C654BB605FA3152B969E70259CC1D72872CB3C81DBA
6F9492EC7177AFB2C8C62E3D557D7AAE928B8783D1642F7D50CE9674739751226DE384B25D49BFEEB6B
7EF2909C0ADE0DA5959D24906FA50DDBC29' ,
'024C5A3EF7520241840D25ED01868F8C85A69786873B37488B3BADF386032E7DC7C2E02517211619CD
F22CBB67862B4BABA275160269DC68015D2C425584EF64CF352A1BCAAAA271DA790288472349B1DCC83
9E313D7AAF62AA6B5DC283DCD729EEA7AEE' ,
'03FA4CA83C7B1BB5E472A935CA3A1F45166D2CAF8020A5F56A2A8FA650A88A8103486FB7B8204BBC9B
06B464B1433326E5FD23BBF37CDAE4EF2E0A583AB02A6AE7054EE4B21DB354155AB68046BDEAFAF8063
7E0B37600CE602014EF9CE51A43F65AB104' ,
'F8398DD4FA394EED5B7BC53EB4C48E666BE0B32829CE3F36E135C40F59C299372F22FF9236B3FF1B4B
0EED351F8917B6AF4CAFC79378074A7AFC79FC757A39FD38FE39BD1C7FD31545EA516950F61A9CDA806
C7138B7228B93005EE3AD8E4D5A4FC38E08' ,
'D9F251C36EDD2CE9397E92428DE6C39AF545ED1D244449CFF1639CD8E63E4D3BACBF4EF5170000FFFF
0300504B030414000600080000002100DAEB1BFFA0060000861B000013000000786C2F7468656D652F7
468656D65312E786D6CEC59CF6E1B4518BF' ,
'23F10EA3BDB7B6133B8DA33A55ECD804DAB451EC16F5385E8F77A799DD59CD8C93FA56A5472410A220
2E48C085030222B5884BFA0EEE33048AA0487D05BE99D9B577E20D49DA08043487D83BFBFBFEFF996FC
657AFDD8F18DA2542521E37BCCAE5B28748' ,
'ECF3018D838677BBD7B9B4EC21A9703CC08CC7A4E18D89F4AEADBEFDD655BCA242121104F4B15CC10D
2F542A592995A40FCB585EE60989E1DD908B082B7814416920F01EF08D5869A15C5E2A4598C61E8A710
46C275F4F7E9C1C4E0ED0ADE190FAC45BCD' ,
'F8B719088995D40B3E135DCD9D64445F3DDB9F1C4C9E4E9E4C0E9E3D80EF4FE1F323433BD8A9680A39
962D26D02E660D0F440FF85E8FDC571E62582A78D1F0CAE6CF2BAD5E2DE1959488A9136873741DF397D
2A504839D05235304FDA9D04AA75ABFB23E' ,
'E56F004CCDE3DAED76AB5D99F23300ECFB60B9D525CFB3DA59AE34339E3990FD3ACFBB55AE95AB2E3E
C77F714EE77AB3D9ACD5535D2C5303B25FAB73F8E5F252756DC1C11B90C5D7E6F0D5E65AABB5E4E00DC
8E297E6F09D2BF5A5AA8B37A090D178670E' ,
'AD03DAE9A4DCA79021671B85F065802F9753F80C05D930CD362D62C86375D6DC8BF03D2E3A40A00919
5634466A9C9021F621D15B38EA0B8AB540BC4270EE8D5DF2E5DC92968DA42F68A21ADE7B0986A299F17
B79F8DDCBC3C7E8E5E1C1D1FE93A3FD9F8E' ,
'1E3E3CDAFFC1F2720837701CE4095F7CF3F11F5F3C40BF3FFEF2C5A34F8BF1328FFFE5FB0F7E7EFA49
31102A6AA6D1F3CF0E7E7D72F0FCF30F7FFBF651017C4DE07E1EDEA31191E826D943DB3C02DB8C635CC
D495F9C8FA21762EA50E0107817B06EABD0' ,
'01DE1C6356846B12D7797704349322E03BA37B8EAEDD508C142D907C3D8C1CE026E7ACC945A103AE6B
59390FF74671502C5C8CF2B86D8C778B64B770EC84B63D4AA0AB6649E9F8BE151247CD2D86638503121
385F43BBE43488175772975FCBA497DC125' ,
'1F2A7497A226A6852EE9D1BE934833A20D1A415CC6453643A81DDF6CDE414DCE8AAC5E27BB2E120A02
B302E57B84396E7C078F148E8A58F670C4F20EBF815558A464772CFC3CAE2D15443A208CA3F68048594
4734B80BDB9A05FC7D0BF0AC3BEC9C6918B' ,
'148AEE14F1BC8139CF23D7F94E2BC4515284EDD238CC63DF953B90A2186D715504DFE46E85E8678803
8E4F0CF71D4A9C709FDE086ED3C051699620FACD48E85842E376FA6F44E3BF6AC68C4237B639F0A6193
7BC35D89A8A4A62E3580B3E09F72F6CBCEB' ,
'78146F11C8F5F98DE74DDF7DD377BDFF7CDF3DA996CFDA6D670D167AAF1E1EEC9C6CA6E6E8CC43F390
32D65563466E4833374BD83C061D58D47CCC99924C0F5549085FD366EFE002810D0D125CBD4F55D80D7
1023377C5D34C0299B20E244AB884B39F59' ,
'2EE4ADF130B72B7B72ACE93385ED0F12AB4D3EB0CB8B7A393B3A4CD9982D2830E7D54CD0A266705661
8B5752A660F6AB08AB68A5CE2CAD625433ADCF91363519623A6F1A2C4EBD095309825906BCBC04A77A2
D1ACE2A989181F6BBDD90B3B098285C6488' ,
'648807248D91B67B3E461513A42C57CCE501E44E418CF439F014AFE5A4D535DBD790769620E5C5554F
109745EF75A29465F02C4ABA8E8F95238BF3C5C962B4D7F0EAB5859A877C9C34BC211C73E16B9440D4A
51E04310BE03AC957C2A6FDA9C56CAA7C16' ,
'CD7A66985B0415B8C9B07E9F33D8E90389906A1DCBD0A6867995A6008BB524ABFF420DDC7A5106D84C
7F052D16972119FE312DC08F6E68C970487C950F766E45FBCE3EA6AD948F1411DD70B087FA6C24B6318
45FA72AD833A0126E2B4C47D00F70D5A6BD' ,
'6D5EB9CD392DBAFC0597C1D975CC9210A7ED56976856C9166EEA78AA8379CAA907B615EA6E8C3BBF29
A6E42FC8947C1AFFCF4CD1FB095C1F2C0E74047CB8FC1518E97A6D785CA89043174A42EA77040C12A67
740B6C0752DBC86A4822B68F329C8AEFEB4' ,
'35677998B28653A0DAA6011214F623150A42B6A02D99EC3B855925DDBB2C4B963232199553572656ED
3ED925ACA77BE092DEDB3D1442AA9B6E92B601833B9E7FEE735A41FD400F39F97A737AC874EFB535F07
74F3EB698C128B70F9B8126F3FF54C5825D' ,
'D5D21BF26CEFCD1BA25FCCC6AC6A5615202CB715D4D3B27F4515CEB9D5DA8E3567F1422D530EA2386F
312C4E07A2042E8190FE07FB1F153EB33F66E80DB5C7B7A1B722F82D423383B481ACBE64070FA41BA45
DECC3E064176D326956D6B5E9E8A4BD966D' ,
'D6173CE94EE51E73B6D6EC2CF13EA7B3A7C3992BCEA9C58B7476EA61C7D776ED445743648F97282C0D
B3838D098CF9212CFF4315EFDF8340AFC395FF88296992097E76121846CFAEA903287E2BD190AEFE090
000FFFF0300504B03041400000008003681' ,
'4148C357C7AD510100005102000018000000786C2F776F726B7368656574732F7368656574312E786D
6C8D52CB4EC33010BC23F10F96EFD40D8887AAA415A8427000A156E2EE26EBC4AAED8DEC0DA1DFC6814
FE217B093B60871E1E6995DCFCE8EFDF5F1' ,
'992FDEAD616FE0834657F06C32E50C5C89957675C13B5267379C0592AE92061D147C07812FE6A72779
8F7E1B1A006251C185823744ED4C885036606598600B2E56147A2B29425F8BD07A90D570C91A713E9D5
E092BB5E3A3C2CCFF470395D2252CB1EC2C' ,
'381A453C1849D17F68741B7834C7583E4C79F12CAE02CFD246E7EBC4646339366047463B882DA1B356
FADD1D18EC0B1E03D8132B5D37341062D4147BD111553A3A48B1310FAAE0B7D9B16F687BD5D087C3B02
3C3486ED660A024A862DC9CA5183788DB54' ,
'7CACFE4EFB911945EE872CA2EB0A94EC0CADB07F80D16876F9DBC152923C10ADACE149FA5ABBC00CA8
B4D6E49A33BF5F319D09DBE11455364884F6809AF868E013BAE04C21D21124F15C1C7FC2FC1B504B030
41400000008002D6659445FA65CD1440100' ,
'007C02000011000000646F6350726F70732F636F72652E786D6C8D92DF4AC3301487EF05DFA1E4BE4D
D3E970A1ED608A2038101414EF4272D6159B3F2499DD9ECD0B1FC95730EDB6BAB15D08B9497E5FBE9C7
3C8CFD7773E5DCB26FA04EB6AAD0A449214' ,
'45A0B816B5AA0AB4F28BF80645CE332558A3151468030E4DCBCB8B9C1BCAB58527AB0D585F838B8249
39CA4D8196DE1B8AB1E34B90CC258150215C682B990F5B5B61C3F807AB0067693AC6123C13CC33DC096
33318D14E29F8A0342BDBF402C131342041' ,
'79874942F01FEBC14A77F6429F1C90B2F61B0367D17D38D06B570F60DBB6493BEAD1503FC16FF3C7E7
BED5B856DDAC38A030A128CA05A7DC02F3DA960F95B6336DBBC1E6F8E0BCE7C22C1BE6FC3CA48B1AC46
C738C9FC63B7BDFD05605220A25D26D43FB' ,
'E475747BF7728FCA2C25A398A461BD90945E8DE9F5E4BDABE2E8FEB154EE1EFBA795D06C42497660DD
0BBABF824F3E4BF90B504B030414000000080019665944DE01D331A80100009A03000010000000646F6
350726F70732F6170702E786D6C9D53C18E' ,
'D33010BD23F10F96EF5B271542A872BC5A75913880A8D4B277E34C1A0BC7B6EC69D472832B9FC08F20
71E017B65FB2BF809B6CB25D85E5B03ED96F669EDFF378EE7EFFE197FBC6901642D4CE16349F6594805
5AED4765BD01D56176F2889286D298DB350' ,
'D003447A295EBEE0ABE03C04D41049A2B0B1A035A25F3016550D8D8CB314B62952B9D0484CC7B065AE
AAB4826BA7760D5864F32C7BCD608F604B282FFC48487BC6458BCF252D9D3AE98B379B834F7C492F21F
CCA7BA395C4E4547CD02AB8E82A246FF70A' ,
'0C67E7C12E3B11AE41ED82C683C8383B3F76F1B5920696E91251491381B307A08BBF03797AC495D421
7648C25A5CB4A0D00512F5D7F498734A3ECB082791056D65D0D222BD4FBE4FEFC111EB51E3230671FBF
3F6D7F1DBF1FBF10767233816B37F543FCD' ,
'A85F89BC2B499BFF50F45067A177C92636F946A381F8B15AC9804F3ACFCF9D77CA1FFBEECDAC6B00CC
27EEA62AA677F2A56BBCB407C1D9B0EBE0F7DA7E899FFCC65D4B84A1758FC1BEBDB50C50A6AE8FED1D8
1BEBD497930A7BA652DED16CA216F1A183E' ,
'DF4D3F65229FCFB2B4BA3F376069A0D8C34489BF504B0102130014000600080000002100CC7EE6A14E
010000080400001300DF0100000000000000000000000000005B436F6E74656E745F54797065735D2E7
86D6C20A2DB0128A0000200000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000504B0102130014000600080000002100B5553
023F50000004C0200000B00CE0100000000' ,
'0000000000005E0300005F72656C732F2E72656C7320A2CA0128A00002000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
0504B01021300140006000800000021008D' ,
'87DA70E00000002D0200001A000801000000000000000000004A060000786C2F5F72656C732F776F72
6B626F6F6B2E786D6C2E72656C7320A2040128A00001000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' ,
'00000000000000000000000000000000000000504B01021400140000000800C8665944FA26B7975C01
00005B0200000F000000000000000100200000006A080000786C2F776F726B626F6F6B2E786D6C504B0
1021300140006000800000021001D21165B' ,
'C5010000800300000D00000000000000000000000000F3090000786C2F7374796C65732E786D6C504B
0102130014000600080000002100DAEB1BFFA0060000861B00001300000000000000000000000000E30
B0000786C2F7468656D652F7468656D6531' ,
'2E786D6C504B0102140014000000080036814148C357C7AD5101000051020000180000000000000001
0020000000B4120000786C2F776F726B7368656574732F7368656574312E786D6C504B0102140014000
00008002D6659445FA65CD1440100007C02' ,
'000011000000000000000100200000003B140000646F6350726F70732F636F72652E786D6C504B0102
140014000000080019665944DE01D331A80100009A0300001000000000000000010020000000AE15000
0646F6350726F70732F6170702E786D6C50' ,
'4B05060000000009000900F30600008417000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000' .
ENDMETHOD . "template_getfrom_hardcode
ENDCLASS . "lcl_excel IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_excelruntime DEFINITION
*----------------------------------------------------------------------*
* runtime excel buffer
*----------------------------------------------------------------------*
CLASS lcl_excelruntime DEFINITION INHERITING FROM lcl_excel .
PUBLIC SECTION .
DATA:
v_summarybelow TYPE flag READ-ONLY ,
v_summaryright TYPE flag READ-ONLY .
METHODS:
constructor
EXCEPTIONS error_file_reading ,
free REDEFINITION ,
begin_model
IMPORTING is_model TYPE ty_s_model
iv_extension TYPE ty_char10
ir_zipfolder TYPE REF TO cl_abap_zip
iv_protect TYPE flag
iv_definednames_dont_remove TYPE flag OPTIONAL ,
finalize_model
IMPORTING it_docproperties TYPE ckf_field_value_table
EXCEPTIONS process_terminated ,
begin_sheet
IMPORTING iv_sheetname TYPE any OPTIONAL
iv_hidden TYPE any
iv_active TYPE any
iv_ixml_doc TYPE REF TO if_ixml_document
it_sheetrels TYPE ty_t_relstab
iv_summarybelow TYPE flag
iv_summaryright TYPE flag
is_sheetprotection TYPE ty_s_sheetprotection
is_vmldrawings TYPE ty_s_vmldrawings
RETURNING value(rv_sheet_name) TYPE string ,
finalize_sheet ,
sheet_name_validate
CHANGING cv_sheetname TYPE any ,
begin_folder ,
finalize_folder
IMPORTING iv_left TYPE any
iv_top TYPE any
iv_rows TYPE any
iv_columns TYPE any
iv_rowgroup_level TYPE any
iv_colgroup_level TYPE any
iv_rowgroup_clp TYPE any
iv_colgroup_clp TYPE any
iv_nopgbrk_top TYPE any OPTIONAL
iv_nopgbrk_left TYPE any OPTIONAL
iv_nopgbrk_beg_x TYPE any OPTIONAL
iv_nopgbrk_end_x TYPE any OPTIONAL
iv_nopgbrk_beg_y TYPE any OPTIONAL
iv_nopgbrk_end_y TYPE any OPTIONAL
iv_pgbrk_top TYPE any OPTIONAL
iv_pgbrk_left TYPE any OPTIONAL
iv_cellrng_name TYPE any OPTIONAL ,
begin_field
IMPORTING iv_value TYPE any
iv_top TYPE any
iv_left TYPE any
iv_formula TYPE flag OPTIONAL
iv_rt_path_1 TYPE any OPTIONAL " -->> runtime path (for
dataset subordination)
it_valvld_attr_table TYPE ANY TABLE OPTIONAL
iv_valvld_for1_dataset_id TYPE any OPTIONAL
iv_valvld_for1_dataset_fld TYPE any OPTIONAL
iv_valvld_for1_value TYPE any OPTIONAL
iv_valvld_for1_value_x TYPE flag OPTIONAL
iv_valvld_for2_value TYPE any OPTIONAL
iv_valvld_for2_value_x TYPE flag OPTIONAL ,
begin_field_textmark
IMPORTING iv_value TYPE any
iv_textmark TYPE any
iv_formula TYPE flag OPTIONAL
iv_rt_path_1 TYPE any OPTIONAL " -->> runtime path (for
dataset subordination)
it_valvld_attr_table TYPE ANY TABLE OPTIONAL
iv_valvld_for1_dataset_id TYPE any OPTIONAL
iv_valvld_for1_dataset_fld TYPE any OPTIONAL
iv_valvld_for1_value TYPE any OPTIONAL
iv_valvld_for1_value_x TYPE flag OPTIONAL
iv_valvld_for2_value TYPE any OPTIONAL
iv_valvld_for2_value_x TYPE flag OPTIONAL ,
begin_drawing
IMPORTING is_drawings_tmp TYPE ty_s_drawings_tmp ,
begin_chart
IMPORTING is_drawings_tmp TYPE ty_s_drawings_tmp ,
begin_pattern
IMPORTING is_patterns TYPE ty_s_patterns ,
finalize_pattern
IMPORTING iv_printtitles_r TYPE flag
iv_printtitles_c TYPE flag
iv_autofitmerged_r TYPE flag DEFAULT space
iv_autofitmerged_c TYPE flag DEFAULT space
CHANGING cv_top TYPE i
cv_left TYPE i ,
finalize_respattern
IMPORTING iv_rowspan TYPE flag OPTIONAL
iv_colspan TYPE flag OPTIONAL
iv_top TYPE i
iv_left TYPE i
iv_rows TYPE i
iv_columns TYPE i
iv_autofitmerged_r TYPE flag DEFAULT space
iv_autofitmerged_c TYPE flag DEFAULT space
it_autofitmerged_r TYPE ty_t_int_tab OPTIONAL
it_autofitmerged_c TYPE ty_t_int_tab OPTIONAL ,
finalize_grid
IMPORTING iv_form_id TYPE any
it_ref_fields TYPE ty_t_dataset_ref_fields
iv_rt_path_1 TYPE any , " -->> runtime path (for dataset
subordination)
value_describe
IMPORTING iv_value TYPE any
iv_cell_dateformat_style TYPE flag
EXPORTING ev_number_flag TYPE flag
ev_date_flag TYPE flag
ev_date_excel TYPE ty_char100 ,
is_number
IMPORTING value(iv_value) TYPE any
RETURNING value(rv_number) TYPE flag ,
postprocessing
IMPORTING iv_startup_macro TYPE any
CHANGING cv_vbs_code TYPE any
ct_vbs_tables_tab TYPE ty_t_vbs_tables_tab ,
postpr_ole_nopgbrk ,
postpr_ole_autofit ,
postpr_vbs_autofit ,
postpr_vbs_autofit_macros_add ,
postpr_vbs_nopgbrk ,
postpr_vbs_nopgbrk_macros_add ,
postpr_vbs_final
CHANGING cv_vbs_code TYPE any
ct_vbs_tables_tab TYPE ty_t_vbs_tables_tab .
PRIVATE SECTION .
TYPES:
BEGIN OF ty_s_sheetnamesuffix ,
sheetname TYPE ty_char31 ,
suffix_index TYPE sy-index ,
END OF ty_s_sheetnamesuffix ,
ty_t_sheetnamesuffix TYPE HASHED TABLE OF ty_s_sheetnamesuffix
WITH UNIQUE KEY sheetname .
DATA:
v_postprocessing_autofit TYPE flag ,
v_postprocessing_nopgbrk TYPE flag ,
v_protect TYPE flag ,
s_sheets TYPE ty_s_sheets ,
s_patterns TYPE ty_s_patterns ,
t_drawings_tmp TYPE STANDARD TABLE OF ty_s_drawings_tmp ,
t_sheetnamesuffix TYPE ty_t_sheetnamesuffix ,
r_ole TYPE REF TO lcl_ole ,
BEGIN OF s_ole_variables ,
ref TYPE string ,
ref1 TYPE string ,
ref2 TYPE string ,
index TYPE sy-index ,
height TYPE i ,
width TYPE i ,
cur_rows_height TYPE i ,
cur_rows_count TYPE i ,
cur_cols_width TYPE i ,
cur_cols_count TYPE i ,
cur_wraptext TYPE i ,
vbscode TYPE string ,
END OF s_ole_variables .
mk_elemsequence_add
t_elemsequence_worksheet :
'sheetPr' ,
'dimension' ,
'sheetViews' ,
'sheetFormatPr' ,
'cols' ,
'sheetData' ,
'sheetCalcPr' ,
'sheetProtection' ,
'protectedRanges' ,
'scenarios' ,
'autoFilter' ,
'sortState' ,
'dataConsolidate' ,
'customSheetViews' ,
'mergeCells' ,
'phoneticPr' ,
'conditionalFormatting' ,
'dataValidations' ,
'hyperlinks' ,
'printOptions' ,
'pageMargins' ,
'pageSetup' ,
'headerFooter' ,
'rowBreaks' ,
'colBreaks' ,
'customProperties' ,
'cellWatches' ,
'ignoredErrors' ,
'smartTags' ,
'drawing' ,
'drawingHF' ,
'picture' ,
'oleObjects' ,
'controls' ,
'webPublishItems' ,
'tableParts' ,
'extLst' .
SORT t_elemsequence_worksheet BY order DESCENDING .
mk_elemsequence_add
t_elemsequence_workbook :
'fileVersion' ,
'fileSharing' ,
'workbookPr' ,
'workbookProtection' ,
'bookViews' ,
'sheets' ,
'functionGroups' ,
'externalReferences' ,
'definedNames' ,
'calcPr' ,
'oleSize' ,
'customWorkbookViews' ,
'pivotCaches' ,
'smartTagPr' ,
'smartTagTypes' ,
'webPublishing' ,
'fileRecoveryPr' ,
'webPublishObjects' ,
'extLst' .
SORT t_elemsequence_workbook BY order DESCENDING .
ENDMETHOD . "constructor
METHOD free .
super->free( ).
ENDMETHOD . " FREE
METHOD begin_model .
s_model-ixml_doc_contenttypes = is_model-ixml_doc_contenttypes .
s_model-ixml_doc_core = is_model-ixml_doc_core .
s_model-ixml_doc_app = is_model-ixml_doc_app .
s_model-ixml_doc_workbook = is_model-ixml_doc_workbook .
s_model-t_contentrels = is_model-t_contentrels .
s_model-t_workbookrels = is_model-t_workbookrels .
s_model-t_sharedstrings = is_model-t_sharedstrings .
v_protect = iv_protect .
v_extension = iv_extension .
r_zipfolder = ir_zipfolder .
DATA:
lr_ncol TYPE REF TO if_ixml_node_collection ,
lr_node TYPE REF TO if_ixml_node ,
lr_elem TYPE REF TO if_ixml_element ,
lv_index TYPE sy-index ,
lv_contenttype TYPE string ,
lv_activetab TYPE string ,
ls_contentrels TYPE ty_s_relstab .
*======================================================================
* Clear [Content_Types].xml
*======================================================================
lr_ncol =
s_model-ixml_doc_contenttypes->get_elements_by_tag_name(
name = c_tag-override ) .
IF lr_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_node = lr_ncol->get_item( index = lv_index ) .
IF lr_node IS NOT BOUND. EXIT. ENDIF .
CLEAR lv_contenttype .
xml_attrib_get( EXPORTING ir_node = lr_node
iv_attrib_name1 = c_tag-contenttype
IMPORTING ev_attrib_value1 = lv_contenttype ) .
CASE lv_contenttype .
WHEN c_contenttype-sheet
OR c_contenttype-sharedstrings
OR c_contenttype-calcchain
OR c_contenttype-drawing
OR c_contenttype-chart
OR c_contenttype-chartstyle
OR c_contenttype-chartcolors .
lr_node->remove_node( ) .
ENDCASE .
ENDDO .
ENDIF .
lr_ncol =
s_model-ixml_doc_contenttypes->get_elements_by_tag_name(
name = c_tag-default ) .
IF lr_ncol IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_node = lr_ncol->get_item( index = lv_index ) .
IF lr_node IS NOT BOUND. EXIT. ENDIF .
CLEAR lv_contenttype .
xml_attrib_get( EXPORTING ir_node = lr_node
iv_attrib_name1 = c_tag-contenttype
IMPORTING ev_attrib_value1 = lv_contenttype ) .
CHECK lv_contenttype CP 'image/*' .
lr_node->remove_node( ) .
ENDDO .
ENDIF .
*======================================================================
* Clear \docProps\app.xml
*======================================================================
xml_remove_nodes(
iv_ixml_doc = s_model-ixml_doc_app
iv_name = c_tag-vector
iv_namespace = c_tag-vt ) .
*======================================================================
* Clear \xl\_rels\workbook.xml.rels
*======================================================================
DELETE s_model-t_workbookrels
WHERE type EQ c_contenttype-wb_sheet
OR type EQ c_contenttype-wb_sharedstrings
OR type EQ c_contenttype-wb_calcchain
.
*======================================================================
* Clear \xl\workbook.xml
*======================================================================
xml_remove_nodes(
iv_ixml_doc = s_model-ixml_doc_workbook
iv_name = c_tag-sheet ) .
IF iv_definednames_dont_remove IS INITIAL .
xml_remove_nodes(
iv_ixml_doc = s_model-ixml_doc_workbook
iv_name = c_tag-definednames ) .
ENDIF .
* lr_ncol =
* s_model-ixml_doc_workbook->get_elements_by_tag_name(
* name = c_tag-workbookview ) .
* IF lr_ncol IS BOUND .
* DO .
* lv_index = sy-index - 1 .
* lr_node = lr_ncol->get_item( index = lv_index ) .
* IF lr_node IS NOT BOUND. EXIT. ENDIF .
* xml_attrib_get( EXPORTING ir_node = lr_node
* iv_attrib_name1 = c_tag-activetab
* IMPORTING ev_attrib_value1 = lv_activetab ) .
* CHECK lv_activetab IS NOT INITIAL
* AND lv_activetab NE 0 .
*
* lr_elem ?= lr_node->query_interface( ixml_iid_element ) .
* lr_elem->remove_attribute( name = c_tag-activetab ) .
* ENDDO .
* ENDIF .
*======================================================================
* Remove XML-docs from ZIP-folder
*======================================================================
FIELD-SYMBOLS <files> TYPE r_zipfolder->t_file .
DEFINE mk_delete_files .
loop at r_zipfolder->files assigning <files> where name cs &1+1 .
mk_delete_files:
c_path-sharedstrings ,
c_path-calcchain ,
c_path-sheetsfolder ,
c_path-mediafolder ,
c_path-drawingsfolder ,
c_path-formparameters ,
c_path-chartsfolder .
*======================================================================
* Clear \.rels
*======================================================================
LOOP AT s_model-t_contentrels INTO ls_contentrels
WHERE type EQ c_contenttype-thumbnail .
mk_delete_files ls_contentrels-target .
DELETE s_model-t_contentrels .
ENDLOOP .
*======================================================================
* Fill [Content_Types].xml
*======================================================================
lr_element-types =
s_model-ixml_doc_contenttypes->find_from_name(
name = c_tag-types
depth = 1 ) .
IF lr_element-types IS BOUND .
* sheets
IF s_model-t_sheets[] IS NOT INITIAL .
LOOP AT s_model-t_sheets ASSIGNING <sheets> .
* drawing
IF <sheets>-sheetdata_runtime-t_drawings[] IS NOT INITIAL .
lr_element-override = s_model-ixml_doc_contenttypes-
>create_simple_element(
name = c_tag-override parent =
lr_element-types ) .
lr_element-override->set_attribute( name = c_tag-partname value =
<sheets>-sheetdata_runtime-drawing_path ) .
lr_element-override->set_attribute( name = c_tag-contenttype value =
c_contenttype-drawing ) .
lr_element-override = s_model-ixml_doc_contenttypes-
>create_simple_element(
name = c_tag-override parent =
lr_element-types ) .
lr_element-override->set_attribute( name = c_tag-partname value =
<charts>-chartstyle_path ) .
lr_element-override->set_attribute( name = c_tag-contenttype value =
c_contenttype-chartstyle ) .
lr_element-override = s_model-ixml_doc_contenttypes-
>create_simple_element(
name = c_tag-override parent =
lr_element-types ) .
lr_element-override->set_attribute( name = c_tag-partname value =
<charts>-chartcolors_path ) .
lr_element-override->set_attribute( name = c_tag-contenttype value =
c_contenttype-chartcolors ) .
ENDLOOP .
ENDIF .
* sheet
lr_element-override = s_model-ixml_doc_contenttypes-
>create_simple_element(
name = c_tag-override parent =
lr_element-types ) .
CONCATENATE c_path-sheetsfolder '/' <sheets>-name_int '.xml' INTO
lv_string_tmp .
lr_element-override->set_attribute( name = c_tag-partname value =
lv_string_tmp ) .
lr_element-override->set_attribute( name = c_tag-contenttype value =
c_contenttype-sheet ) .
ENDLOOP .
ENDIF .
* shared strings
IF s_model-t_sharedstrings[] IS NOT INITIAL .
lr_element-override = s_model-ixml_doc_contenttypes->create_simple_element(
name = c_tag-override parent =
lr_element-types ) .
lr_element-override->set_attribute( name = c_tag-partname value =
c_path-sharedstrings ) .
lr_element-override->set_attribute( name = c_tag-contenttype value =
c_contenttype-sharedstrings ) .
ENDIF .
* calculation chain
IF s_model-t_calcchain[] IS NOT INITIAL .
lr_element-override = s_model-ixml_doc_contenttypes->create_simple_element(
name = c_tag-override parent =
lr_element-types ) .
lr_element-override->set_attribute( name = c_tag-partname value =
c_path-calcchain ) .
lr_element-override->set_attribute( name = c_tag-contenttype value =
c_contenttype-calcchain ) .
ENDIF .
* bitmaps
IF s_model-t_media[] IS NOT INITIAL .
lr_element-default = s_model-ixml_doc_contenttypes->create_simple_element(
name = c_tag-default parent =
lr_element-types ) .
lr_element-default->set_attribute( name = c_tag-extension value =
c_tag-jpeg ) .
lr_element-default->set_attribute( name = c_tag-contenttype value =
c_tag-imagejpeg ) .
ENDIF .
* vmlDrawings
LOOP AT s_model-t_vmldrawings ASSIGNING <vmldrawings> .
LOOP AT <vmldrawings>-t_rels ASSIGNING <vmldrawings_rels>
WHERE media_path CP '*.emf' .
lv_emf = abap_on .
ENDLOOP .
ENDLOOP .
IF lv_emf IS NOT INITIAL .
lr_element-default = s_model-ixml_doc_contenttypes->create_simple_element(
name = c_tag-default parent =
lr_element-types ) .
lr_element-default->set_attribute( name = c_tag-extension value =
c_tag-emf ) .
lr_element-default->set_attribute( name = c_tag-contenttype value =
c_tag-imageemf ) .
ENDIF .
ENDIF .
*======================================================================
* Fill /.rels
*======================================================================
xml_relstab_set( iv_path = c_path-contenttypes
it_relstab = s_model-t_contentrels[] ) .
*======================================================================
* Fill \docProps\core.xml
*======================================================================
DO 1 TIMES .
lr_element-properties =
s_model-ixml_doc_core->find_from_name( name = c_tag-coreproperties
namespace = c_tag-cp ) .
CHECK lr_element-properties IS BOUND .
lr_element-any =
s_model-ixml_doc_core->find_from_name( name = c_tag-lastmodifiedby
namespace = c_tag-cp ) .
IF lr_element-any IS BOUND .
lr_element-any->remove_node( ) .
ENDIF .
lr_element-any =
s_model-ixml_doc_core->find_from_name( name = lv_name
namespace = lv_namespace ) .
IF lr_element-any IS BOUND .
lr_element-any->remove_node( ) .
ENDIF .
lv_string_tmp = ls_docproperties-value .
s_model-ixml_doc_core->create_simple_element(
name = lv_name
namespace = lv_namespace
value = lv_string_tmp
parent = lr_element-properties ) .
ENDLOOP .
ENDDO .
*======================================================================
* Fill \docProps\app.xml
*======================================================================
DO 1 TIMES .
lr_element-headingpairs =
s_model-ixml_doc_app->find_from_name( name = c_tag-headingpairs ).
CHECK lr_element-headingpairs IS BOUND .
lr_element-vector =
s_model-ixml_doc_app->create_simple_element(
namespace = c_tag-vt name = c_tag-vector
parent = lr_element-headingpairs ).
lr_element-variant =
s_model-ixml_doc_app->create_simple_element(
namespace = c_tag-vt name = c_tag-variant
parent = lr_element-vector ) .
lr_element-lpstr =
s_model-ixml_doc_app->create_simple_element(
namespace = c_tag-vt name = c_tag-lpstr
parent = lr_element-variant ) .
lr_element-variant =
s_model-ixml_doc_app->create_simple_element(
namespace = c_tag-vt name = c_tag-variant
parent = lr_element-vector ) .
lr_element-i4 =
s_model-ixml_doc_app->create_simple_element(
namespace = c_tag-vt name = c_tag-i4
parent = lr_element-variant ) .
ENDDO .
DO 1 TIMES .
lr_element-titlesofparts =
s_model-ixml_doc_app->find_from_name( name = c_tag-titlesofparts ).
CHECK lr_element-titlesofparts IS BOUND .
lr_element-vector =
s_model-ixml_doc_app->create_simple_element(
namespace = c_tag-vt name = c_tag-vector
parent = lr_element-titlesofparts ) .
lv_string_tmp = <sheets>-name .
lr_element-lpstr->set_value( lv_string_tmp ) .
ENDLOOP .
ENDDO .
DO 1 TIMES .
lr_element-company =
s_model-ixml_doc_app->find_from_name( name = c_tag-company ) .
CHECK lr_element-company IS BOUND .
lr_element-company->set_value( lv_string_tmp ) .
ENDDO .
DO 1 TIMES .
lr_element-properties =
s_model-ixml_doc_app->find_from_name( name = c_tag-properties ) .
CHECK lr_element-properties IS BOUND .
LOOP AT it_docproperties INTO ls_docproperties .
SET LOCALE LANGUAGE sy-langu .
TRANSLATE ls_docproperties-fieldname TO LOWER CASE .
CASE ls_docproperties-fieldname .
WHEN 'manager' . lv_name = c_tag-manager .
WHEN 'company' . lv_name = c_tag-company .
WHEN 'hyperlinkbase' . lv_name = c_tag-hyperlinkbase .
WHEN OTHERS . CONTINUE .
ENDCASE .
lr_element-any =
s_model-ixml_doc_app->find_from_name( name = lv_name ) .
IF lr_element-any IS BOUND .
lr_element-any->remove_node( ) .
ENDIF .
lv_string_tmp = ls_docproperties-value .
s_model-ixml_doc_app->create_simple_element(
name = lv_name
value = lv_string_tmp
parent = lr_element-properties ) .
ENDLOOP .
ENDDO .
*======================================================================
* Fill /xl/_rels/workbook.xml.rels
*======================================================================
DATA ls_relstab TYPE ty_s_relstab .
*======================================================================
* Fill \xl\workbook.xml
*======================================================================
DO 1 TIMES .
* sheets
lr_element-sheets =
s_model-ixml_doc_workbook->find_from_name( name = c_tag-sheets ) .
CHECK lr_element-sheets IS BOUND .
lv_string_tmp = <sheets>-name .
lr_element-sheet->set_attribute( name = c_tag-name value =
lv_string_tmp ) .
IF <sheets>-sheetdata_runtime-hidden IS INITIAL .
IF lv_activetab IS INITIAL .
lv_activetab = <sheets>-index .
ENDIF .
ELSE .
lr_element-sheet->set_attribute( name = c_tag-state value = c_tag-hidden
) .
ENDIF .
lv_string_tmp = <sheets>-id .
lr_element-sheet->set_attribute( namespace = c_tag-r name = c_tag-id
value = lv_string_tmp ) .
ENDLOOP .
ENDDO .
DO 1 TIMES .
IF lv_activetab IS INITIAL .
MESSAGE e000(lp) WITH v_text-t023 " text: Workbook must have at least one
visible Worksheet
RAISING process_terminated .
ENDIF .
SUBTRACT 1 FROM lv_activetab .
lr_ncol-workbookview =
s_model-ixml_doc_workbook->get_elements_by_tag_name( name = c_tag-
workbookview ) .
IF lr_ncol-workbookview IS BOUND .
DO .
lv_index = sy-index - 1 .
lr_node-workbookview = lr_ncol-workbookview->get_item( index = lv_index )
.
IF lr_node-workbookview IS NOT BOUND. EXIT. ENDIF .
lr_element-any ?= lr_node-workbookview->query_interface( ixml_iid_element
) .
lr_element-any->remove_attribute( name = c_tag-activetab ) .
CHECK lv_activetab GT 0 .
lv_string_tmp = lv_activetab . CONDENSE lv_string_tmp NO-GAPS .
lr_element-any->set_attribute( name = c_tag-activetab value =
lv_string_tmp ) .
ENDDO .
ENDIF .
ENDDO .
DO 1 TIMES .
CLEAR lv_definednames_occurs .
* compose a 'definedNames' node
lr_element-definednames =
s_model-ixml_doc_workbook->create_element( name = c_tag-definednames ) .
lv_definednames_occurs = abap_on .
ENDLOOP .
ENDLOOP .
** no-Page-Break ranges
* LOOP AT s_model-t_sheets ASSIGNING <sheets> .
* LOOP AT <sheets>-sheetdata_runtime-t_nopgbrk_range ASSIGNING
<nopgbrk_range> .
* lr_element-definedname =
* s_model-ixml_doc_workbook->create_simple_element(
* name = c_tag-definedname parent = lr_element-definednames ) .
* CALL FUNCTION 'GUID_CREATE'
* IMPORTING
* ev_guid_32 = lv_guid.
* IF <nopgbrk_range>-top IS NOT INITIAL .
* lv_shift = 'T' .
* ELSEIF NOT <nopgbrk_range>-left IS NOT INITIAL .
* lv_shift = 'L' .
* ENDIF.
* CONCATENATE c_preventpagebreak lv_shift lv_guid INTO lv_string_tmp .
* lr_element-definedname->set_attribute( name = c_tag-name value =
lv_string_tmp ) .
*
* conv_ref_nc_2( EXPORTING iv_beg_x = <nopgbrk_range>-beg_x
* iv_beg_y = <nopgbrk_range>-beg_y
* iv_end_x = <nopgbrk_range>-end_x
* iv_end_y = <nopgbrk_range>-end_y
* iv_prefix = '$'
* iv_sheetname = <sheets>-name
* IMPORTING ev_ref = lv_string_tmp ) .
* lr_text = s_model-ixml_doc_workbook->create_text( lv_string_tmp ) .
* lr_element-definedname->append_child( lr_text ) .
*
* lv_definednames_occurs = abap_on .
* ENDLOOP .
* ENDLOOP .
* print titles
LOOP AT s_model-t_sheets ASSIGNING <sheets> .
lv_localsheetid = <sheets>-index - 1 .
CONDENSE lv_localsheetid NO-GAPS .
lr_element-definedname =
s_model-ixml_doc_workbook->create_simple_element(
name = c_tag-definedname parent = lr_element-definednames ) .
lr_element-definedname->set_attribute( name = c_tag-name value = c_tag-
xlnmprinttitles ) .
lr_element-definedname->set_attribute( name = c_tag-localsheetid value =
lv_localsheetid ) .
lv_definednames_occurs = abap_on .
ENDLOOP .
xml_insert_element(
EXPORTING iv_name_element = c_tag-definednames
ir_ixml_element = lr_element-definednames
it_elemsequence = t_elemsequence_workbook
CHANGING cr_ixml_parent = lr_element-workbook ) .
ENDDO .
*======================================================================
* Fill /xl/charts/chartXXX.xml
* /xl/charts/colorsXXX.xml
* /xl/charts/styleXXX.xml
* /xl/charts/_rels/chartXXX.xml.rels
*======================================================================
CLEAR lt_chartrels .
DO 2 TIMES .
CASE sy-index .
WHEN 1 . " -----[ /xl/charts/colorsXXX.xml
CHECK <charts>-chartcolors_ixml_doc IS BOUND .
ls_relstab-id = 'rId546' .
ls_relstab-type = c_contenttype-wb_chartcolors .
CONCATENATE 'colors' <drawings>-refer_id '.xml' INTO ls_relstab-
target .
* -----[ /xl/charts/chartXXX.xml ]
DO 1 TIMES .
READ TABLE s_model-t_datasets ASSIGNING <datasets> WITH TABLE KEY id =
<charts>-dataset_id .
CHECK sy-subrc EQ 0 .
READ TABLE <datasets>-t_refs ASSIGNING <dataset_refs> WITH TABLE KEY
rt_path_1 = <charts>-dataset_rt_path_1 .
CHECK sy-subrc EQ 0 .
CASE <charts>-chart_series_title .
WHEN space .
lr_element-any =
<charts>-chart_ixml_doc->create_simple_element( name = c_tag-v
namespace = c_tag-c parent = lr_element-tx ) .
CHECK lr_element-any IS BOUND .
lr_element-any->set_value( value = <dataset_series_tab>-
sercap ) .
WHEN OTHERS .
lr_element-ref =
<charts>-chart_ixml_doc->create_simple_element( name = c_tag-
strref namespace = c_tag-c parent = lr_element-tx ) .
CHECK lr_element-ref IS BOUND .
lr_element-any =
<charts>-chart_ixml_doc->create_simple_element( name = c_tag-f
namespace = c_tag-c parent = lr_element-ref ) .
CHECK lr_element-any IS BOUND .
lr_element-any->set_value( value = <dataset_ref_fields>-
caption_ref ) .
ENDCASE .
ENDDO .
* AXIS Titles
DO 2 TIMES .
CASE sy-index .
WHEN 1 . " first iteration: Category Axis Title
lv_axis_title = <charts>-chart_catax_title .
lv_axis_title_tx = <charts>-chart_catax_title_tx .
" -->> find < c:catAx >
FREE lr_element-axis . CLEAR lr_element-axis .
lr_element-axis = lr_element-plotarea->find_from_name( name =
c_tag-catax namespace = c_tag-c depth = 1 ) .
lv_axis_title = <charts>-chart_valax_title .
lv_axis_title_tx = <charts>-chart_valax_title_tx .
" -->> find < c:valAx >
FREE lr_element-axis . CLEAR lr_element-axis .
lr_element-axis = lr_element-plotarea->find_from_name( name =
c_tag-valax namespace = c_tag-c depth = 1 ) .
ENDCASE .
CASE lv_axis_title .
WHEN '1' .
READ TABLE <charts>-dataset_series_tab ASSIGNING
<dataset_series_tab> WITH KEY seridx = '9999' .
CHECK sy-subrc EQ 0 .
READ TABLE <dataset_refs>-t_fields ASSIGNING <dataset_ref_fields>
WITH KEY field = <dataset_series_tab>-dtsfld .
CHECK sy-subrc EQ 0 .
CHECK <dataset_ref_fields>-ref IS NOT INITIAL .
WHEN OTHERS .
ENDCASE .
CASE lv_axis_title .
WHEN '1' .
IF lr_element-strref IS BOUND . " Caption by cell reference
" we need to just overwrite value
WHEN OTHERS .
IF lr_element-strref IS BOUND . " Caption by cell reference
" we need to convert it to hardcoded value
" find <c:txPr>
FREE lr_element-txpr . CLEAR lr_element-txpr .
lr_element-txpr = lr_element-title->find_from_name( name = c_tag-
txpr namespace = c_tag-c depth = 1 ) .
CHECK lr_element-txpr IS BOUND .
lr_element-r =
<charts>-chart_ixml_doc->create_simple_element( name = c_tag-r
namespace = c_tag-a parent = lr_element-p ) .
CHECK lr_element-r IS BOUND .
lr_element-t =
<charts>-chart_ixml_doc->create_simple_element( name = c_tag-t
namespace = c_tag-a parent = lr_element-r value = lv_axis_title_tx ) .
ENDDO .
*======================================================================
* save Bitmap files into '/xl/media' folder
*======================================================================
LOOP AT s_model-t_media ASSIGNING <media> .
CONCATENATE c_path-mediafolder+1 '/image' <media>-id '.jpeg'
INTO lv_string_tmp .
CONDENSE lv_string_tmp NO-GAPS .
r_zipfolder->add( name = lv_string_tmp
content = <media>-media_rawdata ) .
ENDLOOP .
*======================================================================
* save vmlDrawings
*======================================================================
LOOP AT s_model-t_vmldrawings ASSIGNING <vmldrawings> .
CLEAR lt_vmldrawingsrels .
LOOP AT <vmldrawings>-t_rels ASSIGNING <vmldrawings_rels> .
MOVE-CORRESPONDING <vmldrawings_rels> TO ls_vmldrawingsrels .
APPEND ls_vmldrawingsrels TO lt_vmldrawingsrels .
* -----[ /xl/media/imageXXX.emf
r_zipfolder->add( name = <vmldrawings_rels>-media_path
content = <vmldrawings_rels>-media_rawdata ) .
ENDLOOP .
* -----[ /xl/drawings/_rels/vmldrawingsXXX.vml.rels
xml_relstab_set( iv_path = <vmldrawings>-path
it_relstab = lt_vmldrawingsrels[] ) .
ENDLOOP .
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*======================================================================
* Fill \xl\sharedStrings.xml
*======================================================================
* According SAP NOTE 1229110 (Lack of memory when working with large amounts of
XML data),
* here we implement step-by-step (by piecemeal) rendering of XML-file
*======================================================================
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
* create XML-DOM
lt_sharedstrings[] = s_model-t_sharedstrings[] .
lr_ixml = cl_ixml=>create( ) .
s_model-ixml_doc_sharedstrings = lr_ixml->create_document( ) .
* split rendered XML Xstring at bookmark into two parts (BEGIN and END)
CONCATENATE '<' lc_tag_bookmark '/>' INTO lv_bookmark_string . " -->>
bookmark
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_bookmark_string
IMPORTING
buffer = lv_bookmark_xstring
EXCEPTIONS
OTHERS = 0.
CLEAR lv_bookmark_offset .
FIND lv_bookmark_xstring IN lv_xml_xstring
MATCH OFFSET lv_bookmark_offset IN BYTE MODE .
IF sy-subrc EQ 0
AND lv_bookmark_offset NE 0 .
ls_ostream_xstring-beg = lv_xml_xstring(lv_bookmark_offset) .
ADD 12 TO lv_bookmark_offset .
ls_ostream_xstring-end = lv_xml_xstring+lv_bookmark_offset .
ENDIF .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_streamfactory .
FREE lr_ixml .
FREE s_model-t_sharedstrings[] .
lv_string_tmp = c_path-sharedstrings .
SHIFT lv_string_tmp LEFT DELETING LEADING '/' .
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*======================================================================
* Fill \xl\calcChain.xml
*======================================================================
* According SAP NOTE 1229110 (Lack of memory when working with large amounts of
XML data),
* here we implement step-by-step (by piecemeal) rendering of XML-file
*======================================================================
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
* create XML-DOM
lr_ixml = cl_ixml=>create( ) .
s_model-ixml_doc_calcchain = lr_ixml->create_document( ) .
* split rendered XML Xstring at bookmark into two parts (BEGIN and END)
CONCATENATE '<' lc_tag_bookmark '/>' INTO lv_bookmark_string . " -->>
bookmark
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_bookmark_string
IMPORTING
buffer = lv_bookmark_xstring
EXCEPTIONS
OTHERS = 0.
CLEAR lv_bookmark_offset .
FIND lv_bookmark_xstring IN lv_xml_xstring
MATCH OFFSET lv_bookmark_offset IN BYTE MODE .
IF sy-subrc EQ 0
AND lv_bookmark_offset NE 0 .
ls_ostream_xstring-beg = lv_xml_xstring(lv_bookmark_offset) .
ADD 12 TO lv_bookmark_offset .
ls_ostream_xstring-end = lv_xml_xstring+lv_bookmark_offset .
ENDIF .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
FREE s_model-t_calcchain[] .
lv_string_tmp = c_path-calcchain .
SHIFT lv_string_tmp LEFT DELETING LEADING '/' .
CLEAR s_sheets .
FREE s_sheets .
s_sheets-active = iv_active .
s_sheets-sheetdata_runtime-hidden = iv_hidden .
s_sheets-sheetdata_runtime-sheetprotection = is_sheetprotection .
lr_ixml = cl_ixml=>create( ) .
s_sheets-ixml_doc = lr_ixml->create_document( ) .
lr_rootnode = iv_ixml_doc->clone( ) .
s_sheets-ixml_doc ?= lr_rootnode->query_interface( ixml_iid_document ) .
IF s_sheets-sheetdata_runtime-sheetprotection-mode NE c_sheetprotection_mode-
from_template .
xml_remove_nodes( iv_ixml_doc = s_sheets-ixml_doc iv_name = c_tag-
sheetprotection ) .
ENDIF .
DELETE s_sheets-sheetdata_runtime-t_sheetrels
WHERE type EQ c_contenttype-wb_drawing .
* vmlDrawings
DO 1 TIMES .
CHECK is_vmldrawings-id IS NOT INITIAL .
DATA:
lr_ixml TYPE REF TO if_ixml ,
lr_ixml_doc_drawing TYPE REF TO if_ixml_document ,
BEGIN OF lr_element ,
worksheet TYPE REF TO if_ixml_element ,
dimension TYPE REF TO if_ixml_element ,
sheetformatpr TYPE REF TO if_ixml_element ,
sheetdata TYPE REF TO if_ixml_element ,
sheetview TYPE REF TO if_ixml_element ,
mergecells TYPE REF TO if_ixml_element ,
mergecell TYPE REF TO if_ixml_element ,
drawing TYPE REF TO if_ixml_element ,
wsdr TYPE REF TO if_ixml_element ,
any TYPE REF TO if_ixml_element ,
row TYPE REF TO if_ixml_element ,
cols TYPE REF TO if_ixml_element ,
col TYPE REF TO if_ixml_element ,
c TYPE REF TO if_ixml_element ,
f TYPE REF TO if_ixml_element ,
twocellanchor TYPE REF TO if_ixml_element ,
from TYPE REF TO if_ixml_element ,
to TYPE REF TO if_ixml_element ,
clientdata TYPE REF TO if_ixml_element ,
blip TYPE REF TO if_ixml_element ,
cnvpr TYPE REF TO if_ixml_element ,
pic TYPE REF TO if_ixml_element ,
chart TYPE REF TO if_ixml_element ,
nvpicpr TYPE REF TO if_ixml_element ,
cnvpicpr TYPE REF TO if_ixml_element ,
piclocks TYPE REF TO if_ixml_element ,
blipfill TYPE REF TO if_ixml_element ,
stretch TYPE REF TO if_ixml_element ,
sppr TYPE REF TO if_ixml_element ,
xfrm TYPE REF TO if_ixml_element ,
off TYPE REF TO if_ixml_element ,
ext TYPE REF TO if_ixml_element ,
prstgeom TYPE REF TO if_ixml_element ,
sheetprotection TYPE REF TO if_ixml_element ,
rowbreaks TYPE REF TO if_ixml_element ,
colbreaks TYPE REF TO if_ixml_element ,
brk TYPE REF TO if_ixml_element ,
datavalidations TYPE REF TO if_ixml_element ,
datavalidation TYPE REF TO if_ixml_element ,
END OF lr_element ,
BEGIN OF lr_node ,
twocellanchor TYPE REF TO if_ixml_node ,
cnvpr TYPE REF TO if_ixml_node ,
ext TYPE REF TO if_ixml_node ,
to TYPE REF TO if_ixml_node ,
END OF lr_node ,
lr_text TYPE REF TO if_ixml_text ,
lr_cnvpr_ncol TYPE REF TO if_ixml_node_collection ,
lv_string_tmp TYPE string ,
lv_string_fname TYPE string ,
lv_string_value TYPE string ,
lv_string_sqref TYPE string ,
lv_spans TYPE string ,
lv_name TYPE string ,
lv_value TYPE string ,
lv_min TYPE string ,
lv_max TYPE string ,
lv_index TYPE syindex ,
lv_subrc TYPE sysubrc ,
lv_x_char TYPE ty_char15 ,
lv_y_char TYPE ty_char15 ,
ls_relstab TYPE ty_s_relstab ,
lv_sheetpath TYPE string ,
lt_drawingrels TYPE ty_t_relstab ,
lv_drawingnumber TYPE string ,
lt_chartrels TYPE ty_t_relstab ,
ls_cells TYPE ty_s_cells ,
ls_nopgbrk_range TYPE ty_s_nopgbrk_range ,
lt_nopgbrk_range TYPE ty_t_nopgbrk_range .
FIELD-SYMBOLS:
<cells> TYPE ty_s_cells ,
<mergecells> TYPE ty_s_mergecells ,
<drawings> TYPE ty_s_drawings ,
<charts> TYPE ty_s_charts ,
<colprop> TYPE ty_s_colprop ,
<rowprop> TYPE ty_s_rowprop ,
<nopgbrk_range> TYPE ty_s_nopgbrk_range ,
<manual_pgbrk> TYPE ty_s_manual_pgbrk ,
<datavalid> TYPE ty_s_datavalid_rt ,
<coordinates> TYPE ty_s_coordinates ,
<value> TYPE ANY ,
<datasets> TYPE ty_s_datasets ,
<dataset_refs> TYPE ty_s_dataset_refs ,
<cellrng_name> TYPE ty_s_cellrng_name ,
<dataset_ref_fields> TYPE ty_s_dataset_ref_fields .
lr_element-worksheet =
s_sheets-ixml_doc->find_from_name(
name = c_tag-worksheet
depth = 1 ) .
CHECK lr_element-worksheet IS BOUND .
*======================================================================
* set data dimension
*======================================================================
DO 1 TIMES .
lr_element-dimension =
s_sheets-ixml_doc->find_from_name(
name = c_tag-dimension
depth = 2 ) .
CHECK lr_element-dimension IS BOUND .
IF s_sheets-sheetdata_runtime-beg_x IS INITIAL
AND s_sheets-sheetdata_runtime-beg_y IS INITIAL
AND s_sheets-sheetdata_runtime-end_x IS INITIAL
AND s_sheets-sheetdata_runtime-end_y IS INITIAL .
lv_string_tmp = 'A1' .
ELSE .
conv_ref_nc( EXPORTING iv_beg_x = s_sheets-sheetdata_runtime-beg_x
iv_beg_y = s_sheets-sheetdata_runtime-beg_y
iv_end_x = s_sheets-sheetdata_runtime-end_x
iv_end_y = s_sheets-sheetdata_runtime-end_y
IMPORTING ev_ref = lv_string_tmp ) .
ENDIF .
lr_element-dimension->set_attribute(
name = c_tag-ref
value = lv_string_tmp ) .
ENDDO .
*======================================================================
* set active sheet
*======================================================================
DO 1 TIMES .
IF s_sheets-active IS NOT INITIAL
AND s_model-v_active_sheet_id IS INITIAL .
s_model-v_active_sheet_id = s_sheets-id .
ENDIF .
lr_element-sheetview =
s_sheets-ixml_doc->find_from_name(
name = c_tag-sheetview
depth = 3 ) .
CHECK lr_element-sheetview IS BOUND .
lr_element-sheetview->remove_attribute(
name = c_tag-tabselected ) .
ENDDO .
*======================================================================
* set outline level
*======================================================================
IF s_sheets-sheetdata_runtime-outlinelevelrow IS NOT INITIAL
OR s_sheets-sheetdata_runtime-outlinelevelcol IS NOT INITIAL .
lr_element-sheetformatpr =
s_sheets-ixml_doc->find_from_name(
name = c_tag-sheetformatpr
depth = 2 ) .
*======================================================================
* set a tamper protection (if required)
*======================================================================
IF v_protect IS NOT INITIAL .
* compose a 'sheetProtection' node
lr_element-sheetprotection =
s_sheets-ixml_doc->create_element( name = c_tag-sheetprotection ) .
lr_element-sheetprotection->set_attribute( name = c_tag-password value =
'D692' ) . " pass: 1677718881
lr_element-sheetprotection->set_attribute( name = c_tag-sheet value =
'1' ) .
lr_element-sheetprotection->set_attribute( name = c_tag-objects value =
'1' ) .
lr_element-sheetprotection->set_attribute( name = c_tag-scenarios value =
'1' ) .
CASE s_sheets-sheetdata_runtime-sheetprotection-mode .
WHEN c_sheetprotection_mode-off
OR c_sheetprotection_mode-from_template .
* ... do nothing
WHEN c_sheetprotection_mode-from_context
OR c_sheetprotection_mode-static .
CASE s_sheets-sheetdata_runtime-sheetprotection-selectlockedcells .
WHEN space OR '0' . lr_element-sheetprotection->set_attribute( name =
c_tag-selectlockedcells value = '1' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-selectunlockedcells .
WHEN space OR '0' . lr_element-sheetprotection->set_attribute( name =
c_tag-selectunlockedcells value = '1' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-formatcells .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-formatcells value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-formatcolumns .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-formatcolumns value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-formatrows .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-formatrows value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-insertcolumns .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-insertcolumns value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-insertrows .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-insertrows value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-inserthyperlinks .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-inserthyperlinks value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-deletecolumns .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-deletecolumns value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-deleterows .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-deleterows value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-sort .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-sort value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-autofilter .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-autofilter value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-pivottables .
WHEN space OR '0' .
WHEN OTHERS . lr_element-sheetprotection->set_attribute( name =
c_tag-pivottables value = '0' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-objects .
WHEN space OR '0' . lr_element-sheetprotection->set_attribute( name =
c_tag-objects value = '1' ) .
ENDCASE .
CASE s_sheets-sheetdata_runtime-sheetprotection-scenarios .
WHEN space OR '0' . lr_element-sheetprotection->set_attribute( name =
c_tag-scenarios value = '1' ) .
ENDCASE .
*======================================================================
* set drawings
*======================================================================
IF s_sheets-sheetdata_runtime-t_drawings[] IS NOT INITIAL .
lv_string_tmp = s_sheets-id .
lr_element-drawing->set_attribute(
name = c_tag-id
namespace = c_tag-r
value = lv_string_tmp ) .
* insert element
xml_insert_element(
EXPORTING iv_name_element = c_tag-drawing
ir_ixml_element = lr_element-drawing
it_elemsequence = t_elemsequence_worksheet
CHANGING cr_ixml_parent = lr_element-worksheet ) .
CLEAR lv_drawingnumber .
LOOP AT s_sheets-sheetdata_runtime-t_drawings[] ASSIGNING <drawings> .
CASE <drawings>-drawing_type .
WHEN c_drawing_type-vector "= V e c t o r g r a p h i c s
==========================
OR c_drawing_type-chart . "= C h a r t
==============================================
* -----[ /xl/drawings/drawingXXX.xml ] copy 'twoCellAnchor' node as it
was in the template,
* and overwrite dataset references,
* runtime location coordinates,
etc.
lr_node-twocellanchor = <drawings>-twocellanchor_node->clone( ) .
lr_element-twocellanchor ?= lr_node-twocellanchor-
>query_interface( ixml_iid_element ) .
IF <drawings>-drawing_size_h EQ 0
AND <drawings>-drawing_size_w EQ 0 .
* -----< xdr:to >
lr_element-to = lr_element-twocellanchor->find_from_name(
name = c_tag-to namespace = c_tag-xdr depth =
2 ) .
lr_element-any = lr_element-to->find_from_name(
name = c_tag-col namespace = c_tag-xdr depth =
1 ) .
lv_string_tmp = <drawings>-end_x . CONDENSE lv_string_tmp .
lr_element-any->set_value( value = lv_string_tmp ) .
lr_element-any = lr_element-to->find_from_name(
name = c_tag-coloff namespace = c_tag-xdr depth =
1 ) .
lr_element-any->set_value( value = '0' ) .
lr_element-any = lr_element-to->find_from_name(
name = c_tag-row namespace = c_tag-xdr depth =
1 ) .
lv_string_tmp = <drawings>-end_y . CONDENSE lv_string_tmp .
lr_element-any->set_value( value = lv_string_tmp ) .
lr_element-any = lr_element-to->find_from_name(
name = c_tag-rowoff namespace = c_tag-xdr depth =
1 ) .
lr_element-any->set_value( value = '0' ) .
ELSE .
lr_element-to = lr_element-twocellanchor->find_from_name(
name = c_tag-to namespace = c_tag-xdr depth =
2 ) .
* -----< xdr:ext >
lr_element-ext = lr_ixml_doc_drawing->create_element(
name = c_tag-ext namespace = c_tag-xdr ) .
lv_string_tmp = <drawings>-drawing_size_w . CONDENSE lv_string_tmp .
lr_element-ext->set_attribute( name = c_tag-cx value =
lv_string_tmp ) .
lv_string_tmp = <drawings>-drawing_size_h . CONDENSE lv_string_tmp .
lr_element-ext->set_attribute( name = c_tag-cy value =
lv_string_tmp ) .
* replace
lr_node-to ?= lr_element-to .
lr_node-ext ?= lr_element-ext .
lr_node-twocellanchor->replace_child(
old_child = lr_node-to new_child = lr_node-ext ) .
ENDIF .
* -----
IF <drawings>-drawing_type EQ c_drawing_type-chart .
READ TABLE s_model-t_charts ASSIGNING <charts> WITH TABLE KEY id =
<drawings>-refer_id .
CHECK sy-subrc EQ 0 .
* -----[ prepare paths ]
CONCATENATE c_path-chartsfolder_ '/chart' <drawings>-refer_id
'.xml' INTO <charts>-chart_path_ .
CONCATENATE c_path-chartsfolder '/chart' <drawings>-refer_id
'.xml' INTO <charts>-chart_path .
CONCATENATE c_path-chartsfolder '/style' <drawings>-refer_id
'.xml' INTO <charts>-chartstyle_path .
CONCATENATE c_path-chartsfolder '/colors' <drawings>-refer_id
'.xml' INTO <charts>-chartcolors_path .
* -----[ /xl/drawings/_rels/drawingXXX.xml.rels ]
CONCATENATE 'rId' <drawings>-refer_id INTO ls_relstab-id .
ls_relstab-type = c_contenttype-wb_chart .
ls_relstab-target = <charts>-chart_path_ .
COLLECT ls_relstab INTO lt_drawingrels[] .
* -----[ /xl/drawings/_rels/drawingXXX.xml.rels ]
CONCATENATE 'rId' <drawings>-refer_id INTO ls_relstab-id .
ls_relstab-type = c_contenttype-wb_image .
CONCATENATE c_path-mediafolder_ '/image' <drawings>-refer_id '.jpeg'
INTO ls_relstab-target .
COLLECT ls_relstab INTO lt_drawingrels[] .
IF <drawings>-drawing_size_h EQ 0
AND <drawings>-drawing_size_w EQ 0 .
* -----< xdr:twoCellAnchor >
lr_element-twocellanchor = lr_ixml_doc_drawing-
>create_simple_element(
name = c_tag-twocellanchor namespace = c_tag-xdr parent =
lr_element-wsdr ) .
ELSE .
* -----< xdr:oneCellAnchor >
lr_element-twocellanchor = lr_ixml_doc_drawing-
>create_simple_element(
name = c_tag-onecellanchor namespace = c_tag-xdr parent =
lr_element-wsdr ) .
ENDIF .
* -----< xdr:from >
lr_element-from = lr_ixml_doc_drawing->create_simple_element(
name = c_tag-from namespace = c_tag-xdr parent = lr_element-
twocellanchor ) .
lv_string_tmp = <drawings>-beg_x . CONDENSE lv_string_tmp .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-col namespace = c_tag-xdr value = lv_string_tmp
parent = lr_element-from ) .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-coloff namespace = c_tag-xdr value = '0' parent =
lr_element-from ) .
lv_string_tmp = <drawings>-beg_y . CONDENSE lv_string_tmp .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-row namespace = c_tag-xdr value = lv_string_tmp
parent = lr_element-from ) .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-rowoff namespace = c_tag-xdr value = '0' parent =
lr_element-from ) .
IF <drawings>-drawing_size_h EQ 0
AND <drawings>-drawing_size_w EQ 0 .
* -----< xdr:to >
lr_element-to = lr_ixml_doc_drawing->create_simple_element(
name = c_tag-to namespace = c_tag-xdr parent = lr_element-
twocellanchor ) .
lv_string_tmp = <drawings>-end_x . CONDENSE lv_string_tmp .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-col namespace = c_tag-xdr value = lv_string_tmp
parent = lr_element-to ) .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-coloff namespace = c_tag-xdr value = '0' parent =
lr_element-to ) .
lv_string_tmp = <drawings>-end_y . CONDENSE lv_string_tmp .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-row namespace = c_tag-xdr value = lv_string_tmp
parent = lr_element-to ) .
lr_ixml_doc_drawing->create_simple_element(
name = c_tag-rowoff namespace = c_tag-xdr value = '0' parent =
lr_element-to ) .
ELSE .
* -----< xdr:ext >
lr_element-ext = lr_ixml_doc_drawing->create_simple_element(
name = c_tag-ext namespace = c_tag-xdr parent = lr_element-
twocellanchor ) .
lv_string_tmp = <drawings>-drawing_size_w . CONDENSE lv_string_tmp .
lr_element-ext->set_attribute( name = c_tag-cx value =
lv_string_tmp ) .
lv_string_tmp = <drawings>-drawing_size_h . CONDENSE lv_string_tmp .
lr_element-ext->set_attribute( name = c_tag-cy value =
lv_string_tmp ) .
ENDIF .
*============ drawing
CONCATENATE c_path-drawingsfolder '/drawing' s_sheets-num '.xml'
INTO s_sheets-sheetdata_runtime-drawing_path .
CONDENSE s_sheets-sheetdata_runtime-drawing_path .
*======================================================================
* optimize no-Page-Break areas
*======================================================================
SORT s_sheets-sheetdata_runtime-t_nopgbrk_range
BY top beg_y end_y
left beg_x end_x .
DELETE ADJACENT DUPLICATES FROM s_sheets-sheetdata_runtime-t_nopgbrk_range
COMPARING ALL FIELDS .
s_sheets-sheetdata_runtime-t_nopgbrk_range[] = lt_nopgbrk_range[] .
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*======================================================================
* According SAP NOTE 1229110 (Lack of memory when working with large amounts of
XML data),
* here we implement step-by-step (by piecemeal) rendering of XML-file
*
*----------------------------------------------------------------------
* NOW we have XML-DOM prepared above, we'll use it as Dummy-XML.
* NEXT, we perform the following steps:
*
* 1) render the Dummy-XML to Xstring
* 2) split rendered Dummy-XML-Xstring into several substrings (parts)
* at tags of nodes, which expecting large amount of data
* 3) render large data nodes to it's own substrings
* 4) concatenate all gotten substrings into whole XML-file Xstring
* and save in into ZIP-folder
*======================================================================
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DATA:
lr_streamfactory TYPE REF TO if_ixml_stream_factory ,
lr_ostream TYPE REF TO if_ixml_ostream ,
lr_encoding TYPE REF TO if_ixml_encoding ,
lr_renderer TYPE REF TO if_ixml_renderer .
DATA:
lv_bookmark_string TYPE string ,
lv_bookmark_xstring TYPE xstring ,
lv_bookmark_offset TYPE i ,
lv_bookmark_length TYPE i ,
lv_xml_xstring TYPE xstring ,
BEGIN OF ls_ostream_xstring ,
cols1 TYPE xstring ,
cols2 TYPE xstring ,
rows1 TYPE xstring ,
rows2 TYPE xstring ,
merg1 TYPE xstring ,
merg2 TYPE xstring ,
rbrk1 TYPE xstring ,
rbrk2 TYPE xstring ,
cbrk1 TYPE xstring ,
cbrk2 TYPE xstring ,
dtvl1 TYPE xstring ,
dtvl2 TYPE xstring ,
tail TYPE xstring ,
END OF ls_ostream_xstring .
CONSTANTS:
BEGIN OF lc_tag_bookmark ,
cols TYPE string VALUE 'BmarkCols' , " '<BmarkCols/>'
rows TYPE string VALUE 'BmarkRows' , " '<BmarkRows/>'
merg TYPE string VALUE 'BmarkMerg' , " '<BmarkMerg/>'
rbrk TYPE string VALUE 'BmarkRbrk' , " '<BmarkRbrk/>'
cbrk TYPE string VALUE 'BmarkCbrk' , " '<BmarkCbrk/>'
dtvl TYPE string VALUE 'BmarkDtvl' , " '<BmarkDtvl/>'
END OF lc_tag_bookmark .
*======================================================================
* 0) Supplement of Dummy-XML:
* Insert nodes (which expect large amount of data).
* Each of that nodes contain single children bookmark-node.
* In further, this bookmark-node will be used for splitting XML-Xstring
*======================================================================
xml_insert_element(
EXPORTING iv_name_element = c_tag-cols
ir_ixml_element = lr_element-cols
it_elemsequence = t_elemsequence_worksheet
CHANGING cr_ixml_parent = lr_element-worksheet ) .
ENDIF .
xml_insert_element(
EXPORTING iv_name_element = c_tag-mergecells
ir_ixml_element = lr_element-mergecells
it_elemsequence = t_elemsequence_worksheet
CHANGING cr_ixml_parent = lr_element-worksheet ) .
ENDIF .
lr_element-rowbreaks =
s_sheets-ixml_doc->create_element( name = c_tag-rowbreaks ) .
xml_insert_element(
EXPORTING iv_name_element = c_tag-rowbreaks
ir_ixml_element = lr_element-rowbreaks
it_elemsequence = t_elemsequence_worksheet
CHANGING cr_ixml_parent = lr_element-worksheet ) .
ENDIF .
lr_element-colbreaks =
s_sheets-ixml_doc->create_element( name = c_tag-colbreaks ) .
xml_insert_element(
EXPORTING iv_name_element = c_tag-colbreaks
ir_ixml_element = lr_element-colbreaks
it_elemsequence = t_elemsequence_worksheet
CHANGING cr_ixml_parent = lr_element-worksheet ) .
ENDIF .
xml_insert_element(
EXPORTING iv_name_element = c_tag-datavalidations
ir_ixml_element = lr_element-datavalidations
it_elemsequence = t_elemsequence_worksheet
CHANGING cr_ixml_parent = lr_element-worksheet ) .
ENDIF .
*======================================================================
* 1) render the Dummy-XML to Xstring
*======================================================================
s_sheets-ixml_doc->set_standalone( standalone = abap_true ).
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
lr_ostream = lr_streamfactory->create_ostream_xstring( string =
ls_ostream_xstring-tail ) .
lr_encoding = lr_ixml->create_encoding( character_set = c_character_set
byte_order = 0 ) .
lr_ostream->set_encoding( encoding = lr_encoding ) .
lr_renderer = lr_ixml->create_renderer( ostream = lr_ostream
document = s_sheets-ixml_doc ) .
lr_renderer->render( ) .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
*======================================================================
* 2) split rendered Dummy-XML-Xstring (at bookmarks) into several parts
*======================================================================
DO .
lv_index = sy-index .
CASE lv_index .
WHEN 1 . lv_bookmark_string = lc_tag_bookmark-cols .
WHEN 2 . lv_bookmark_string = lc_tag_bookmark-rows .
WHEN 3 . lv_bookmark_string = lc_tag_bookmark-merg .
WHEN 4 . lv_bookmark_string = lc_tag_bookmark-rbrk .
WHEN 5 . lv_bookmark_string = lc_tag_bookmark-cbrk .
WHEN 6 . lv_bookmark_string = lc_tag_bookmark-dtvl .
WHEN OTHERS . EXIT .
ENDCASE .
CLEAR lv_bookmark_offset .
FIND lv_bookmark_xstring IN ls_ostream_xstring-tail
MATCH OFFSET lv_bookmark_offset IN BYTE MODE .
CHECK sy-subrc EQ 0
AND lv_bookmark_offset NE 0 .
CASE lv_index .
WHEN 1 . ls_ostream_xstring-cols1 = ls_ostream_xstring-
tail(lv_bookmark_offset) .
WHEN 2 . ls_ostream_xstring-rows1 = ls_ostream_xstring-
tail(lv_bookmark_offset) .
WHEN 3 . ls_ostream_xstring-merg1 = ls_ostream_xstring-
tail(lv_bookmark_offset) .
WHEN 4 . ls_ostream_xstring-rbrk1 = ls_ostream_xstring-
tail(lv_bookmark_offset) .
WHEN 5 . ls_ostream_xstring-cbrk1 = ls_ostream_xstring-
tail(lv_bookmark_offset) .
WHEN 6 . ls_ostream_xstring-dtvl1 = ls_ostream_xstring-
tail(lv_bookmark_offset) .
WHEN OTHERS . EXIT .
ENDCASE .
*======================================================================
* 3) render large data nodes to its own substrings
*======================================================================
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
lr_ostream = lr_streamfactory->create_ostream_xstring( string =
ls_ostream_xstring-cols2 ) .
lr_encoding = lr_ixml->create_encoding( character_set = c_character_set
byte_order = 0 ) .
lr_ostream->set_encoding( encoding = lr_encoding ) .
AT END OF collapsed .
lv_max = <colprop_meta>-_x .
lr_element-col =
s_sheets-ixml_doc->create_element( name = c_tag-col ) .
CONDENSE lv_min NO-GAPS .
lr_element-col->set_attribute( name = c_tag-min value = lv_min ) .
CONDENSE lv_max NO-GAPS .
lr_element-col->set_attribute( name = c_tag-max value = lv_max ) .
DO 7 TIMES .
CASE sy-index .
WHEN 1 . lv_value = <colprop_meta>-width . lv_name = c_tag-
width .
WHEN 2 . lv_value = <colprop_meta>-style . lv_name = c_tag-
style .
WHEN 3 . lv_value = <colprop_meta>-hidden . lv_name = c_tag-
hidden .
WHEN 4 . lv_value = <colprop_meta>-bestfit . lv_name = c_tag-
bestfit .
WHEN 5 . lv_value = <colprop_meta>-customwidth . lv_name = c_tag-
customwidth .
WHEN 6 . lv_value = <colprop_meta>-outlinelevel. lv_name = c_tag-
outlinelevel. CONDENSE lv_value NO-GAPS .
WHEN 7 . lv_value = <colprop_meta>-collapsed . lv_name = c_tag-
collapsed .
WHEN OTHERS . EXIT .
ENDCASE .
CHECK lv_value IS NOT INITIAL .
CHECK lv_name IS NOT INITIAL .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
CLEAR s_sheets-sheetdata_runtime-t_colprop[] .
FREE s_sheets-sheetdata_runtime-t_colprop[] .
ENDIF .
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
lr_ostream = lr_streamfactory->create_ostream_xstring( string =
ls_ostream_xstring-rows2 ) .
lr_encoding = lr_ixml->create_encoding( character_set = c_character_set
byte_order = 0 ) .
lr_ostream->set_encoding( encoding = lr_encoding ) .
ls_cells-y = <rowprop>-y .
ls_cells-x = 0 .
INSERT ls_cells INTO TABLE s_sheets-sheetdata_runtime-t_cells .
ENDLOOP .
* process cells
CONCATENATE v_text-t222 " -->> text: Sheet is being prepared
'(' s_sheets-name ')'
v_text-t163 " -->> text: row(s)
INTO lv_string_tmp SEPARATED BY space .
progressbar_loop_init( iv_step = 777
iv_text = lv_string_tmp ) .
DO 1 TIMES .
IF lv_subrc EQ 0 .
CHECK <rowprop>-is_empty IS INITIAL .
ENDIF .
IF s_sheets-sheetdata_runtime-end_x GT 0 .
lr_element-row->set_attribute(
name = c_tag-spans
value = lv_spans ) .
ENDIF .
ENDDO .
lr_element-c->set_attribute(
name = c_tag-r
value = lv_string_tmp ) .
lr_element-f =
s_sheets-ixml_doc->create_simple_element(
name = c_tag-f
parent = lr_element-c ) .
lr_element-f->append_child( lr_text ) .
ENDIF .
AT END OF y .
lr_element-row->render( ostream = lr_ostream recursive = abap_on ).
lr_element-row->remove_node( ) .
ENDAT .
ENDLOOP .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
FREE s_sheets-sheetdata_runtime-t_cells[] .
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
lr_ostream = lr_streamfactory->create_ostream_xstring( string =
ls_ostream_xstring-merg2 ) .
lr_encoding = lr_ixml->create_encoding( character_set = c_character_set
byte_order = 0 ) .
lr_ostream->set_encoding( encoding = lr_encoding ) .
lr_element-mergecell->set_attribute(
name = c_tag-ref
value = lv_string_tmp ) .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
IF s_sheets-sheetdata_runtime-postprocessing_autofit IS INITIAL .
CLEAR s_sheets-sheetdata_runtime-t_mergecells[] .
FREE s_sheets-sheetdata_runtime-t_mergecells[] .
ENDIF .
ENDIF .
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
lr_ostream = lr_streamfactory->create_ostream_xstring( string =
ls_ostream_xstring-rbrk2 ) .
lr_encoding = lr_ixml->create_encoding( character_set = c_character_set
byte_order = 0 ) .
lr_ostream->set_encoding( encoding = lr_encoding ) .
lv_string_tmp = '16383' .
lr_element-brk->set_attribute( name = c_tag-max value = lv_string_tmp ) .
lv_string_tmp = '1' .
lr_element-brk->set_attribute( name = c_tag-man value = lv_string_tmp ) .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
CLEAR s_sheets-sheetdata_runtime-t_manual_pgbrk_row[] .
FREE s_sheets-sheetdata_runtime-t_manual_pgbrk_row[] .
ENDIF .
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
lr_ostream = lr_streamfactory->create_ostream_xstring( string =
ls_ostream_xstring-cbrk2 ) .
lr_encoding = lr_ixml->create_encoding( character_set = c_character_set
byte_order = 0 ) .
lr_ostream->set_encoding( encoding = lr_encoding ) .
lv_string_tmp = '1048575' .
lr_element-brk->set_attribute( name = c_tag-max value = lv_string_tmp ) .
lv_string_tmp = '1' .
lr_element-brk->set_attribute( name = c_tag-man value = lv_string_tmp ) .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
CLEAR s_sheets-sheetdata_runtime-t_manual_pgbrk_col[] .
FREE s_sheets-sheetdata_runtime-t_manual_pgbrk_col[] .
ENDIF .
lr_ixml = cl_ixml=>create( ) .
lr_streamfactory = lr_ixml->create_stream_factory( ) .
lr_ostream = lr_streamfactory->create_ostream_xstring( string =
ls_ostream_xstring-dtvl2 ) .
lr_encoding = lr_ixml->create_encoding( character_set = c_character_set
byte_order = 0 ) .
lr_ostream->set_encoding( encoding = lr_encoding ) .
* element: dataValidation
lr_element-datavalidation = s_sheets-ixml_doc->create_element( name =
c_tag-datavalidation ) .
* attribute: sqref
CLEAR lv_string_sqref .
LOOP AT <datavalid>-t_coordinates ASSIGNING <coordinates> .
* other attributes
DO .
CASE sy-index .
WHEN 1 . lv_string_fname = c_tag-allowblank .
WHEN 2 . lv_string_fname = c_tag-error .
WHEN 3 . lv_string_fname = c_tag-errorstyle .
WHEN 4 . lv_string_fname = c_tag-errortitle .
WHEN 5 . lv_string_fname = c_tag-imemode .
WHEN 6 . lv_string_fname = c_tag-operator .
WHEN 7 . lv_string_fname = c_tag-prompt .
WHEN 8 . lv_string_fname = c_tag-prompttitle .
WHEN 9 . lv_string_fname = c_tag-showdropdown .
WHEN 10 . lv_string_fname = c_tag-showerrormessage .
WHEN 11 . lv_string_fname = c_tag-showinputmessage .
WHEN 12 . lr_element-datavalidation->set_attribute( name = c_tag-
sqref value = lv_string_sqref ) . CONTINUE .
WHEN 13 . lv_string_fname = c_tag-type_ .
WHEN OTHERS . EXIT .
ENDCASE .
lv_string_tmp = lv_string_fname .
TRANSLATE lv_string_tmp TO UPPER CASE .
ASSIGN COMPONENT lv_string_tmp OF STRUCTURE <datavalid> TO <value> .
CHECK <value> IS ASSIGNED .
CHECK <value> IS NOT INITIAL .
lv_string_value = <value> .
lr_element-datavalidation->set_attribute( name = lv_string_fname
value = lv_string_value ) .
ENDDO .
* element: formula1
IF <datavalid>-formula1_dataset_id IS NOT INITIAL .
DO 1 TIMES .
READ TABLE s_model-t_datasets ASSIGNING <datasets> WITH TABLE KEY id =
<datavalid>-formula1_dataset_id .
CHECK sy-subrc EQ 0 .
READ TABLE <datasets>-t_refs ASSIGNING <dataset_refs> WITH TABLE KEY
rt_path_1 = <datavalid>-formula1_dataset_rt_path_1 .
CHECK sy-subrc EQ 0 .
READ TABLE <dataset_refs>-t_fields ASSIGNING <dataset_ref_fields> WITH
KEY field = <datavalid>-formula1_dataset_fld .
CHECK sy-subrc EQ 0 .
* element: formula2
IF <datavalid>-formula2 IS NOT INITIAL .
s_sheets-ixml_doc->create_simple_element( name = c_tag-formula2
parent = lr_element-
datavalidation
value = <datavalid>-
formula2 ) .
ENDIF .
lr_element-datavalidation->render( ostream = lr_ostream recursive =
abap_on ).
lr_element-datavalidation->remove_node( ) .
ENDLOOP .
lr_ostream->close( ) .
FREE lr_ostream .
FREE lr_encoding .
FREE lr_ostream .
FREE lr_streamfactory .
FREE lr_ixml .
CLEAR s_sheets-sheetdata_runtime-t_datavalid[] .
FREE s_sheets-sheetdata_runtime-t_datavalid[] .
ENDIF .
*======================================================================
* 4) concatenate all gotten substrings into whole XML-file Xstring
* and save it to ZIP-folder
*======================================================================
*============ WORKSHEET
CONCATENATE
ls_ostream_xstring-cols1 ls_ostream_xstring-cols2
ls_ostream_xstring-rows1 ls_ostream_xstring-rows2
ls_ostream_xstring-merg1 ls_ostream_xstring-merg2
ls_ostream_xstring-rbrk1 ls_ostream_xstring-rbrk2
ls_ostream_xstring-cbrk1 ls_ostream_xstring-cbrk2
ls_ostream_xstring-dtvl1 ls_ostream_xstring-dtvl2
ls_ostream_xstring-tail
INTO lv_xml_xstring IN BYTE MODE .
FREE ls_ostream_xstring .
*======================================================================
*======================================================================
ENDMETHOD . "finalize_sheet
METHOD sheet_name_validate .
DATA:
lv_new_sheetname TYPE ty_char31 ,
lv_suffix TYPE ty_char10 ,
lv_strlen_all TYPE i ,
lv_strlen_suf TYPE i ,
lv_offset_suf TYPE i .
DATA:
ls_sheetnamesuffix TYPE ty_s_sheetnamesuffix .
FIELD-SYMBOLS:
<sheetnamesuffix> TYPE ty_s_sheetnamesuffix .
lv_new_sheetname = cv_sheetname .
DO .
READ TABLE s_model-t_sheets TRANSPORTING NO FIELDS
WITH TABLE KEY name = lv_new_sheetname .
IF sy-subrc NE 0 .
EXIT .
ENDIF .
ADD 1 TO <sheetnamesuffix>-suffix_index .
lv_suffix = <sheetnamesuffix>-suffix_index .
CONDENSE lv_suffix NO-GAPS .
CONCATENATE '_' lv_suffix INTO lv_suffix .
cv_sheetname = lv_new_sheetname .
ENDMETHOD . "sheet_name_validate
METHOD begin_folder .
ENDMETHOD . "begin_folder
METHOD finalize_folder .
DATA:
ls_colprop TYPE ty_s_colprop ,
ls_rowprop TYPE ty_s_rowprop ,
ls_coordinates_abs TYPE ty_s_coordinates ,
ls_nopgbrk_range TYPE ty_s_nopgbrk_range ,
ls_manual_pgbrk TYPE ty_s_manual_pgbrk ,
ls_cellrng_name TYPE ty_s_cellrng_name .
FIELD-SYMBOLS:
<colprop> TYPE ty_s_colprop ,
<rowprop> TYPE ty_s_rowprop .
* calculate absolute coordinates of area margins
ls_coordinates_abs-beg_y = iv_top + 1 .
ls_coordinates_abs-end_y = iv_top + iv_rows .
ls_coordinates_abs-beg_x = iv_left + 1 .
ls_coordinates_abs-end_x = iv_left + iv_columns .
ADD 1 TO ls_rowprop-y .
ENDWHILE .
ENDIF .
IF v_summarybelow IS INITIAL .
ls_rowprop-y = ls_coordinates_abs-beg_y - 1 .
ELSE .
ls_rowprop-y = ls_coordinates_abs-end_y + 1 .
ENDIF .
ADD 1 TO ls_colprop-x .
ENDWHILE .
ENDIF .
IF v_summaryright IS INITIAL .
ls_colprop-x = ls_coordinates_abs-beg_x - 1 .
ELSE .
ls_colprop-x = ls_coordinates_abs-end_x + 1 .
ENDIF .
CLEAR ls_nopgbrk_range .
ls_nopgbrk_range-left = iv_nopgbrk_left .
ls_nopgbrk_range-beg_x = iv_nopgbrk_beg_x .
IF ls_nopgbrk_range-beg_x LE 0 .
ls_nopgbrk_range-beg_x = 1 .
ENDIF .
ls_nopgbrk_range-end_x = iv_nopgbrk_end_x .
APPEND ls_nopgbrk_range TO s_sheets-sheetdata_runtime-t_nopgbrk_range .
ENDIF .
CLEAR ls_nopgbrk_range .
ls_nopgbrk_range-top = iv_nopgbrk_top .
ls_nopgbrk_range-beg_y = iv_nopgbrk_beg_y .
IF ls_nopgbrk_range-beg_y LE 0 .
ls_nopgbrk_range-beg_y = 1 .
ENDIF .
ls_nopgbrk_range-end_y = iv_nopgbrk_end_y .
APPEND ls_nopgbrk_range TO s_sheets-sheetdata_runtime-t_nopgbrk_range .
ENDIF .
ENDMETHOD . "finalize_folder
METHOD begin_field .
DATA:
ls_cells TYPE ty_s_cells ,
ls_sharedstrings TYPE ty_s_sharedstrings ,
lv_date_excel TYPE ty_char100 ,
lv_date_flag TYPE flag ,
lv_number_flag TYPE flag ,
lv_fld TYPE string .
FIELD-SYMBOLS:
<cells> TYPE ty_s_cells ,
<sharedstrings> TYPE ty_s_sharedstrings ,
<valvld_attr_line> TYPE ANY ,
<valvld_attr_fld> TYPE ANY ,
<valvld_attr_val> TYPE ANY ,
<val> TYPE ANY .
CLEAR <cells>-tmp_flag .
CLEAR <cells>-tmp_value_s .
CLEAR <cells>-tmp_si_node .
ELSE .
LOOP AT it_valvld_attr_table ASSIGNING <valvld_attr_line> .
UNASSIGN <valvld_attr_fld> .
UNASSIGN <valvld_attr_val> .
DO 2 TIMES .
CASE sy-index .
WHEN 1 . ASSIGN COMPONENT 1 OF STRUCTURE <valvld_attr_line> TO
<valvld_attr_fld> .
WHEN 2 . ASSIGN COMPONENT 2 OF STRUCTURE <valvld_attr_line> TO
<valvld_attr_val> .
ENDCASE .
ENDDO .
IF <valvld_attr_fld> IS NOT ASSIGNED
OR <valvld_attr_val> IS NOT ASSIGNED .
EXIT .
ENDIF .
UNASSIGN <val> .
lv_fld = <valvld_attr_fld> .
TRANSLATE lv_fld TO UPPER CASE .
ASSIGN COMPONENT lv_fld OF STRUCTURE <cells>-datavalidation TO <val> .
CHECK <val> IS ASSIGNED .
<val> = <valvld_attr_val> .
ENDLOOP .
ENDIF .
* cell value
IF iv_formula IS NOT INITIAL .
<cells>-formula = iv_value .
CLEAR <cells>-value .
CLEAR <cells>-value_s .
RETURN .
ENDIF .
IF iv_value IS INITIAL .
<cells>-type = space .
<cells>-value = space .
<cells>-value_s = space .
ELSE .
<cells>-type = c_tag-s .
<cells>-value_s = iv_value .
READ TABLE s_model-t_sharedstrings ASSIGNING <sharedstrings>
WITH TABLE KEY value = <cells>-value_s .
IF sy-subrc NE 0 .
ls_sharedstrings-value = <cells>-value_s .
ls_sharedstrings-key = LINES( s_model-t_sharedstrings ) .
INSERT ls_sharedstrings INTO TABLE s_model-t_sharedstrings
ASSIGNING <sharedstrings> .
ENDIF .
CHECK <sharedstrings> IS ASSIGNED .
<cells>-value = <sharedstrings>-key .
ENDIF .
ENDMETHOD . " begin_field
METHOD begin_field_textmark .
DATA:
ls_cells TYPE ty_s_cells ,
ls_sharedstrings TYPE ty_s_sharedstrings ,
lv_date_excel TYPE ty_char100 ,
lv_date_flag TYPE flag ,
lv_number_flag TYPE flag ,
lv_fld TYPE string .
DATA:
lv_val_index TYPE sy-index ,
lr_val_ncol TYPE REF TO if_ixml_node_collection ,
lr_val_node_r TYPE REF TO if_ixml_node ,
lr_val_node TYPE REF TO if_ixml_node ,
lr_val_elem TYPE REF TO if_ixml_element ,
lr_si_elem TYPE REF TO if_ixml_element ,
lv_stringtmp TYPE string .
FIELD-SYMBOLS:
<cells> TYPE ty_s_cells ,
<sharedstrings> TYPE ty_s_sharedstrings ,
<valvld_attr_line> TYPE ANY ,
<valvld_attr_fld> TYPE ANY ,
<valvld_attr_val> TYPE ANY ,
<val> TYPE ANY .
ELSE .
LOOP AT it_valvld_attr_table ASSIGNING <valvld_attr_line> .
UNASSIGN <valvld_attr_fld> .
UNASSIGN <valvld_attr_val> .
DO 2 TIMES .
CASE sy-index .
WHEN 1 . ASSIGN COMPONENT 1 OF STRUCTURE <valvld_attr_line> TO
<valvld_attr_fld> .
WHEN 2 . ASSIGN COMPONENT 2 OF STRUCTURE <valvld_attr_line> TO
<valvld_attr_val> .
ENDCASE .
ENDDO .
IF <valvld_attr_fld> IS NOT ASSIGNED
OR <valvld_attr_val> IS NOT ASSIGNED .
EXIT .
ENDIF .
UNASSIGN <val> .
lv_fld = <valvld_attr_fld> .
TRANSLATE lv_fld TO UPPER CASE .
ASSIGN COMPONENT lv_fld OF STRUCTURE <cells>-datavalidation TO <val> .
CHECK <val> IS ASSIGNED .
<val> = <valvld_attr_val> .
ENDLOOP .
ENDIF .
* cell value
IF <cells>-value_s EQ iv_textmark .
CLEAR <cells>-tmp_flag .
CLEAR <cells>-tmp_value_s .
CLEAR <cells>-tmp_si_node .
IF iv_value IS INITIAL .
<cells>-type = space .
<cells>-value = space .
<cells>-value_s = space .
ELSEIF lv_date_flag EQ abap_on
AND <cells>-dateformat_style EQ abap_on .
<cells>-type = space .
<cells>-value = lv_date_excel .
<cells>-value_s = lv_date_excel .
ELSE .
<cells>-type = c_tag-s .
<cells>-value_s = iv_value .
READ TABLE s_model-t_sharedstrings ASSIGNING <sharedstrings>
WITH TABLE KEY value = <cells>-value_s .
IF sy-subrc NE 0 .
ls_sharedstrings-value = <cells>-value_s .
ls_sharedstrings-key = LINES( s_model-t_sharedstrings ) .
INSERT ls_sharedstrings INTO TABLE s_model-t_sharedstrings
ASSIGNING <sharedstrings> .
ENDIF .
IF <sharedstrings> IS ASSIGNED .
<cells>-value = <sharedstrings>-key .
ENDIF .
ENDIF .
ELSE .
IF <cells>-tmp_flag IS INITIAL .
<cells>-tmp_flag = abap_on .
<cells>-tmp_value_s = <cells>-value_s .
IF <cells>-type EQ c_tag-s .
READ TABLE s_model-t_sharedstrings ASSIGNING <sharedstrings>
WITH TABLE KEY value = <cells>-value_s .
CHECK sy-subrc EQ 0 .
IF <sharedstrings>-si_node IS BOUND .
<cells>-tmp_si_node = <sharedstrings>-si_node->clone( ) .
ENDIF .
ENDIF .
ENDIF .
CLEAR:
ev_number_flag,
ev_date_flag ,
ev_date_excel .
IF iv_cell_dateformat_style EQ abap_on .
IF iv_value EQ '00000000'
OR iv_value EQ '00.00.0000' .
ev_date_flag = abap_on .
ev_date_excel = space .
ELSE .
IF STRLEN( iv_value ) EQ 8 .
lv_date_sap_char = iv_value .
ELSE .
CALL FUNCTION 'CONVERSION_EXIT_IDATE_INPUT'
EXPORTING
input = iv_value
IMPORTING
output = lv_date_sap_char.
ENDIF .
IF lv_date_sap_char IS NOT INITIAL
AND lv_date_sap_char CO ' 1234567890' .
ev_date_flag = abap_on .
lv_date_sap = lv_date_sap_char .
ev_date_excel = lv_date_sap - lv_date_beg .
CONDENSE ev_date_excel .
ENDIF .
ENDIF .
ENDIF .
IF ev_date_flag IS INITIAL .
ev_number_flag = is_number( iv_value ) .
ENDIF .
msg_init( ) .
lv_document_rawdata = rawdata_get( ) .
* Initialize objects
CREATE OBJECT r_ole
EXPORTING
ir_container = lr_dummy_container "cl_gui_container=>default_screen
iv_document_rawdata = lv_document_rawdata
iv_viewmode = lcl_ole=>c_viewmode-inplace
iv_readonly = abap_off
iv_background = abap_on
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0 .
MESSAGE e000(lp)
WITH v_text-t280 " text: Problem while OLE/VBScript post-processing
INTO v_dummy .
msg_syst_catch( iv_toplist = abap_on ) .
msg_show( ) .
RETURN .
ENDIF .
cl_gui_cfw=>flush( ) .
CASE s_presets_rt-postprocessing_method .
WHEN c_postprocessing_method-vbs .
* Auto Fit rows/ columns for merged cells
postpr_vbs_autofit( ) .
CASE v_retcode .
WHEN c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t280 " text: Problem while OLE/VBScript post-processing
'('
v_text-t281 " text: AutoFit merged cells
')'
INTO v_dummy .
msg_syst_catch( iv_toplist = abap_on ) .
WHEN OTHERS .
* Revise Automatic Page Breaks
postpr_vbs_nopgbrk( ) .
IF v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t280 " text: Problem while OLE/VBScript post-
processing
'('
v_text-t153 " text: Preventing of automatic page breaks
(inside)
')'
INTO v_dummy .
msg_syst_catch( iv_toplist = abap_on ) .
ENDIF .
ENDCASE .
WHEN c_postprocessing_method-ole .
* Auto Fit rows/ columns for merged cells
postpr_ole_autofit( ) .
* Final post-processing
IF v_retcode NE c_retcode-error .
postpr_vbs_final( CHANGING cv_vbs_code = cv_vbs_code
ct_vbs_tables_tab = ct_vbs_tables_tab ) .
IF v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t280 " text: Problem while OLE/VBScript post-processing
'('
v_text-t287 " text: Final post-processing
')'
INTO v_dummy .
msg_syst_catch( iv_toplist = abap_on ) .
ENDIF .
ENDIF .
* Get result
r_ole->rawdata_get_as_table(
EXPORTING iv_extension = v_extension
IMPORTING et_document_table = lt_document_table
ev_document_size = lv_document_size ) .
me->rawdata_set_as_table(
EXPORTING it_document_table = lt_document_table
iv_document_size = lv_document_size ) .
* Release objects
r_ole->free( ) .
FREE r_ole .
FREE lr_dummy_container .
ENDMETHOD . "postprocessing
METHOD postpr_ole_nopgbrk .
DATA:
lv_selection_top TYPE i ,
lv_selection_left TYPE i ,
lv_selection_rows TYPE i ,
lv_selection_columns TYPE i ,
lv_index TYPE i ,
lv_row TYPE i ,
lv_column TYPE i ,
lv_ref TYPE string .
FIELD-SYMBOLS:
<nopgbrk_range> TYPE ty_s_nopgbrk_range ,
<sheets> TYPE ty_s_sheets .
r_ole->r_spreadsheet->select_sheet(
EXPORTING name = <sheets>-name ) .
EXIT .
ENDLOOP .
ENDIF .
r_ole->free_ole_object( 'locationnew' ) .
r_ole->free_ole_object( 'location' ) .
r_ole->free_ole_object( 'pagebreak' ) .
ENDDO .
r_ole->free_ole_object( 'pagebreaks' ) .
*------------------- Vertical Page Breaks
GET PROPERTY OF r_ole->s_ole-activesheet 'VPageBreaks' = r_ole->s_ole-
pagebreaks .
DO .
lv_index = sy-index .
GET PROPERTY OF r_ole->s_ole-activesheet 'VPageBreaks' = r_ole->s_ole-
pagebreak exporting #1 = lv_index .
IF sy-subrc NE 0 .
r_ole->free_ole_object( 'pagebreak' ) .
EXIT .
ENDIF .
EXIT .
ENDLOOP .
ENDIF .
r_ole->free_ole_object( 'locationnew' ) .
r_ole->free_ole_object( 'location' ) .
r_ole->free_ole_object( 'pagebreak' ) .
ENDDO .
r_ole->free_ole_object( 'pagebreaks' ) .
r_ole->free_ole_object( 'activesheet' ) .
ENDMETHOD . "postpr_ole_nopgbrk
METHOD postpr_ole_autofit .
DATA:
lv_selection_top TYPE i ,
lv_selection_left TYPE i ,
lv_selection_rows TYPE i ,
lv_selection_columns TYPE i .
FIELD-SYMBOLS:
<mergecells> TYPE ty_s_mergecells ,
<sheets> TYPE ty_s_sheets .
r_ole->r_spreadsheet->select_sheet(
EXPORTING name = <sheets>-name ) .
CLEAR s_ole_variables .
CASE abap_on .
WHEN <mergecells>-autofit_rows .
* set column width of the temporary cell equal to total width of current
range
SET PROPERTY OF r_ole->s_ole-tmp_range 'ColumnWidth' =
s_ole_variables-cur_cols_width no flush .
* if the adjusted row height is greater than the total height of rows of
current range, we resize it
IF s_ole_variables-height GT s_ole_variables-cur_rows_height .
GET PROPERTY OF r_ole->s_ole-cur_range 'Rows' = r_ole->s_ole-
cur_range_rows no flush .
s_ole_variables-cur_rows_height = s_ole_variables-height /
s_ole_variables-cur_rows_count .
SET PROPERTY OF r_ole->s_ole-cur_range_rows 'RowHeight' =
s_ole_variables-cur_rows_height no flush .
WHEN <mergecells>-autofit_cols .
* set row height of the temporary cell equal to total height of current
range
SET PROPERTY OF r_ole->s_ole-tmp_range 'RowHeight' = s_ole_variables-
cur_rows_height no flush.
* if the adjusted column width is greater than the total width of columns
of current range, we resize it
IF s_ole_variables-width GT s_ole_variables-cur_cols_width .
GET PROPERTY OF r_ole->s_ole-cur_range 'Columns' = r_ole->s_ole-
cur_range_cols no flush .
s_ole_variables-cur_cols_width = s_ole_variables-width /
s_ole_variables-cur_cols_count .
SET PROPERTY OF r_ole->s_ole-cur_range_cols 'ColumnWidth' =
s_ole_variables-cur_cols_width no flush .
r_ole->free_ole_object( 'cur_range' ) .
r_ole->free_ole_object( 'cur_rang1' ) .
r_ole->free_ole_object( 'tmp_range' ) .
ENDLOOP .
r_ole->free_ole_object( 'activesheet' ) .
ENDMETHOD . "postpr_ole_autofit
METHOD postpr_vbs_autofit .
CHECK v_postprocessing_autofit IS NOT INITIAL .
DATA:
lv_selection_top TYPE i ,
lv_selection_left TYPE i ,
lv_selection_rows TYPE i ,
lv_selection_columns TYPE i ,
lt_mergecells TYPE ty_t_mergecells ,
lr_table_coll TYPE REF TO i_oi_table_collection ,
lr_error TYPE REF TO i_oi_error .
FIELD-SYMBOLS:
<sheets> TYPE ty_s_sheets .
msg_init( ) .
IF v_retcode NE c_retcode-error .
LOOP AT s_model-t_sheets ASSIGNING <sheets>
WHERE sheetdata_runtime-postprocessing_autofit IS NOT INITIAL .
DO 1 TIMES .
* send internal table T_MERGECELLS to MS Excel application
lr_table_coll->add_table( EXPORTING table_name = 'T_MERGECELLS'
table_type =
i_oi_table_collection=>table_type_output
IMPORTING error = lr_error
CHANGING data_table = lt_mergecells ) .
msg_io_catch( lr_error ) .
CHECK v_retcode NE c_retcode-error .
IF sy-subrc NE 0 .
MESSAGE e000(lp) WITH v_text-t283 " text: Macros execution error
INTO v_dummy .
msg_syst_catch( ) .
ENDIF .
lr_table_coll->remove_all_tables( ) .
ENDLOOP .
ENDIF .
lr_table_coll->remove_all_tables( ) .
ENDMETHOD . "postpr_vbs_autofit
METHOD postpr_vbs_autofit_macros_add .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
` For i = 1 To XLWB_Table.Rows.Count`
` Set XLWB_TableRow = XLWB_Table.Rows(i)`
` Call MergeCellsAutofitProcess(XLWB_TableRow.Cell(1), _`
` XLWB_TableRow.Cell(2), _`
` XLWB_TableRow.Cell(3), _`
` XLWB_TableRow.Cell(4), _`
` XLWB_TableRow.Cell(5), _`
` XLWB_TableRow.Cell(6))`
` Next`
`End Sub`
`Sub MergeCellsAutofitProcess(beg_y, _`
` beg_x, _`
` end_y, _`
` end_x, _`
` autofit_rows, _`
` autofit_cols)`
` CurRang1.Copy`
` TmpRange.Select`
` MySheet.Paste`
` 'now all content of the temporary range is placed in a single cell 'A1'
(temporary cell)`
` Set TmpRange = MySheet.Range(MySheet.Cells(TmpY, TmpX), MySheet.Cells(TmpY,
TmpX))`
` 'if the adjusted row height is greater than the total height of rows of
current range, we resize it`
` If NewH > CurH Then`
` CurRange.RowHeight = NewH / CurRange.Rows.Count + 1`
` End If`
` 'if the adjusted column width is greater than the total width of columns
of current range, we resize it`
` If NewW > CurW Then`
` CurRange.ColumnWidth = NewW / CurRange.Columns.Count + 1`
` End If`
` End If`
` XLWB_Application.Selection.EntireRow.Delete`
` XLWB_Application.Selection.EntireColumn.Delete`
`End Sub`
INTO s_ole_variables-vbscode SEPARATED BY cl_abap_char_utilities=>cr_lf.
TYPES:
BEGIN OF ty_s_nopgbrk ,
beg TYPE i ,
end TYPE i ,
END OF ty_s_nopgbrk ,
ty_t_nopgbrk TYPE STANDARD TABLE OF ty_s_nopgbrk .
DATA:
lv_selection_top TYPE i ,
lv_selection_left TYPE i ,
lv_selection_rows TYPE i ,
lv_selection_columns TYPE i ,
lr_table_coll TYPE REF TO i_oi_table_collection ,
lr_error TYPE REF TO i_oi_error ,
ls_nopgbrk TYPE ty_s_nopgbrk ,
lt_nopgbrk_horizontal TYPE ty_t_nopgbrk ,
lt_nopgbrk_vertical TYPE ty_t_nopgbrk .
FIELD-SYMBOLS:
<sheets> TYPE ty_s_sheets ,
<nopgbrk_range> TYPE ty_s_nopgbrk_range .
msg_init( ) .
IF v_retcode NE c_retcode-error .
LOOP AT s_model-t_sheets ASSIGNING <sheets>
WHERE sheetdata_runtime-postprocessing_nopgbrk IS NOT INITIAL .
DO 1 TIMES .
* send internal tables T_NOPGBRK_HORIZONTAL and T_NOPGBRK_VERTICAL to MS
Excel application
lr_table_coll->add_table( EXPORTING table_name = 'T_NOPGBRK_HORIZONTAL'
table_type =
i_oi_table_collection=>table_type_output
IMPORTING error = lr_error
CHANGING data_table = lt_nopgbrk_horizontal )
.
msg_io_catch( lr_error ) .
CHECK v_retcode NE c_retcode-error .
IF sy-subrc NE 0 .
MESSAGE e000(lp) WITH v_text-t283 " text: Macros execution error
INTO v_dummy .
msg_syst_catch( ) .
ENDIF .
lr_table_coll->remove_all_tables( ) .
ENDLOOP .
ENDIF .
lr_table_coll->remove_all_tables( ) .
ENDMETHOD . "postpr_vbs_nopgbrk
METHOD postpr_vbs_nopgbrk_macros_add .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
` XLWB_Application.ScreenUpdating = False`
` XLWB_Application.ActiveWindow.View = xlPageBreakPreview`
DATA:
lr_table_coll TYPE REF TO i_oi_table_collection ,
lr_table_data_copy TYPE REF TO data ,
lr_error TYPE REF TO i_oi_error .
FIELD-SYMBOLS:
<ls_vbs_tables_tab> TYPE ty_s_vbs_tables_tab ,
<lt_table_data> TYPE ANY TABLE ,
<lt_table_data_copy> TYPE ANY TABLE .
DO 1 TIMES .
CHECK ct_vbs_tables_tab[] IS NOT INITIAL .
DO 1 TIMES .
CHECK v_retcode NE c_retcode-error .
IF sy-subrc NE 0 .
MESSAGE e000(lp) WITH v_text-t283 INTO v_dummy . " text: Macros execution
error
msg_syst_catch( ) .
EXIT .
ENDIF .
ENDDO .
* release objects
IF r_ole->s_ole-vbscript IS NOT INITIAL .
FREE OBJECT r_ole->s_ole-vbscript .
CLEAR r_ole->s_ole-vbscript .
ENDIF .
IF lr_table_coll IS BOUND .
lr_table_coll->remove_all_tables( ) .
ENDIF .
ENDMETHOD . "postpr_vbs_final
METHOD begin_drawing .
APPEND is_drawings_tmp TO t_drawings_tmp .
ENDMETHOD . "begin_drawing
METHOD begin_chart .
ENDMETHOD . "begin_chart
METHOD begin_pattern .
s_patterns = is_patterns .
CLEAR t_drawings_tmp .
ENDMETHOD . "begin_pattern
METHOD finalize_pattern .
DATA:
ls_cells TYPE ty_s_cells ,
ls_sharedstrings TYPE ty_s_sharedstrings ,
ls_calcchain TYPE ty_s_calcchain ,
ls_mergecells_rel TYPE ty_s_mergecells_rel ,
ls_mergecells TYPE ty_s_mergecells ,
ls_patternarea TYPE ty_s_coordinates ,
ls_drawings_tmp TYPE ty_s_drawings_tmp ,
ls_drawings TYPE ty_s_drawings ,
ls_media TYPE ty_s_media ,
ls_charts TYPE ty_s_charts ,
ls_datavalid TYPE ty_s_datavalid_rt .
DATA:
ls_colprop TYPE ty_s_colprop ,
ls_rowprop TYPE ty_s_rowprop .
FIELD-SYMBOLS:
<cells> TYPE ty_s_cells ,
<sharedstrings> TYPE ty_s_sharedstrings ,
<colprop> TYPE ty_s_colprop ,
<rowprop> TYPE ty_s_rowprop ,
<datavalid> TYPE ty_s_datavalid_rt ,
<coordinates> TYPE ty_s_coordinates .
* formula works
DO 1 TIMES .
CHECK ls_cells-formula IS NOT INITIAL .
v_postprocessing_autofit = abap_on .
s_sheets-sheetdata_runtime-postprocessing_autofit = abap_on .
ENDLOOP .
CASE ls_drawings-drawing_type .
WHEN c_drawing_type-vector .
ls_drawings-twocellanchor_node = ls_drawings_tmp-twocellanchor_node .
WHEN c_drawing_type-bitmap .
READ TABLE s_model-t_media INTO ls_media
WITH TABLE KEY media_rawdata = ls_drawings_tmp-media_rawdata .
IF sy-subrc NE 0 .
ADD 1 TO s_model-v_refer_id . CONDENSE s_model-v_refer_id NO-GAPS .
CLEAR ls_media .
ls_media-media_rawdata = ls_drawings_tmp-media_rawdata .
ls_media-id = s_model-v_refer_id .
INSERT ls_media INTO TABLE s_model-t_media .
ENDIF .
ls_drawings-refer_id = ls_media-id .
WHEN c_drawing_type-chart .
ADD 1 TO s_model-v_refer_id . CONDENSE s_model-v_refer_id NO-GAPS .
CLEAR ls_charts .
ls_charts-id = s_model-v_refer_id .
ls_charts-chart_ixml_doc = ls_drawings_tmp-chart_ixml_doc .
ls_charts-chartcolors_ixml_doc = ls_drawings_tmp-chartcolors_ixml_doc .
ls_charts-chartstyle_ixml_doc = ls_drawings_tmp-chartstyle_ixml_doc .
ls_charts-chart_series_title = ls_drawings_tmp-chart_series_title .
ls_charts-chart_title = ls_drawings_tmp-chart_title .
ls_charts-chart_title_tx = ls_drawings_tmp-chart_title_tx .
ls_charts-chart_catax_title = ls_drawings_tmp-chart_catax_title .
ls_charts-chart_catax_title_tx = ls_drawings_tmp-chart_catax_title_tx .
ls_charts-chart_valax_title = ls_drawings_tmp-chart_valax_title .
ls_charts-chart_valax_title_tx = ls_drawings_tmp-chart_valax_title_tx .
ls_charts-dataset_series_tab[] = ls_drawings_tmp-dataset_series_tab[] .
ls_charts-dataset_id = ls_drawings_tmp-dataset_id .
ls_charts-dataset_rt_path_1 = ls_drawings_tmp-dataset_rt_path_1 .
INSERT ls_charts INTO TABLE s_model-t_charts .
ls_drawings-twocellanchor_node = ls_drawings_tmp-twocellanchor_node .
ls_drawings-refer_id = ls_charts-id .
ENDCASE .
ENDMETHOD . "finalize_pattern
METHOD finalize_respattern .
DATA:
ls_mergecells TYPE ty_s_mergecells ,
ls_drawings TYPE ty_s_drawings ,
ls_cells_src TYPE ty_s_cells ,
ls_cells_new TYPE ty_s_cells .
FIELD-SYMBOLS:
<mergecells> TYPE ty_s_mergecells ,
<drawings> TYPE ty_s_drawings .
CASE abap_on .
*======================================================================
WHEN iv_rowspan .
*======================================================================
DO iv_columns TIMES .
CLEAR ls_mergecells .
ls_mergecells-beg_y = iv_top + 1 .
ls_mergecells-end_y = iv_top + iv_rows .
ls_mergecells-beg_x =
ls_mergecells-end_x = iv_left + sy-index .
IF iv_rows GT 1 .
ls_mergecells-autofit_rows = iv_autofitmerged_r .
ls_mergecells-autofit_cols = iv_autofitmerged_c .
READ TABLE it_autofitmerged_r TRANSPORTING NO FIELDS
WITH TABLE KEY table_line = sy-index .
IF sy-subrc EQ 0 .
ls_mergecells-autofit_rows = abap_on .
ENDIF .
ls_mergecells-autofit_cols = iv_autofitmerged_c .
READ TABLE it_autofitmerged_c TRANSPORTING NO FIELDS
WITH TABLE KEY table_line = sy-index .
IF sy-subrc EQ 0 .
ls_mergecells-autofit_cols = abap_on .
ENDIF .
LOOP AT s_sheets-sheetdata_runtime-t_mergecells ASSIGNING <mergecells>
WHERE beg_y EQ ls_mergecells-beg_y
AND beg_x LE ls_mergecells-beg_x
AND end_x GE ls_mergecells-end_x .
<mergecells>-end_y = ls_mergecells-end_y .
<mergecells>-autofit_rows = ls_mergecells-autofit_rows .
<mergecells>-autofit_cols = ls_mergecells-autofit_cols .
ENDLOOP .
IF sy-subrc NE 0 .
INSERT ls_mergecells INTO TABLE s_sheets-sheetdata_runtime-
t_mergecells .
ENDIF .
IF ls_mergecells-autofit_rows IS NOT INITIAL
OR ls_mergecells-autofit_cols IS NOT INITIAL .
v_postprocessing_autofit = abap_on .
s_sheets-sheetdata_runtime-postprocessing_autofit = abap_on .
ENDIF .
ls_drawings-beg_y = ls_mergecells-beg_y - 1 .
ls_drawings-beg_x = ls_mergecells-beg_x - 1 .
ls_drawings-end_x = ls_mergecells-end_x .
ls_drawings-end_y = ls_mergecells-end_y .
LOOP AT s_sheets-sheetdata_runtime-t_drawings ASSIGNING <drawings>
WHERE drawing_size_h EQ 0
AND drawing_size_w EQ 0
AND beg_y EQ ls_drawings-beg_y
AND beg_x LE ls_drawings-beg_x
AND end_x GE ls_drawings-end_x .
<drawings>-end_y = ls_drawings-end_y .
ENDLOOP .
ENDIF .
CLEAR ls_cells_new .
ls_cells_new-y = iv_top + sy-index .
ls_cells_new-x = ls_cells_src-x .
ls_cells_new-style = ls_cells_src-style .
INSERT ls_cells_new INTO TABLE s_sheets-sheetdata_runtime-t_cells .
ENDDO .
ENDIF .
ENDDO .
*======================================================================
WHEN iv_colspan .
*======================================================================
DO iv_rows TIMES .
CLEAR ls_mergecells .
ls_mergecells-beg_y =
ls_mergecells-end_y = iv_top + sy-index .
ls_mergecells-beg_x = iv_left + 1 .
ls_mergecells-end_x = iv_left + iv_columns .
IF iv_columns GT 1 .
ls_mergecells-autofit_rows = iv_autofitmerged_r .
ls_mergecells-autofit_cols = iv_autofitmerged_c .
READ TABLE it_autofitmerged_r TRANSPORTING NO FIELDS
WITH TABLE KEY table_line = sy-index .
IF sy-subrc EQ 0 .
ls_mergecells-autofit_rows = abap_on .
ENDIF .
ls_mergecells-autofit_cols = iv_autofitmerged_c .
READ TABLE it_autofitmerged_c TRANSPORTING NO FIELDS
WITH TABLE KEY table_line = sy-index .
IF sy-subrc EQ 0 .
ls_mergecells-autofit_cols = abap_on .
ENDIF .
LOOP AT s_sheets-sheetdata_runtime-t_mergecells ASSIGNING <mergecells>
WHERE beg_x EQ ls_mergecells-beg_x
AND beg_y LE ls_mergecells-beg_y
AND end_y GE ls_mergecells-end_y .
<mergecells>-end_x = ls_mergecells-end_x .
<mergecells>-autofit_rows = ls_mergecells-autofit_rows .
<mergecells>-autofit_cols = ls_mergecells-autofit_cols .
ENDLOOP .
IF sy-subrc NE 0 .
INSERT ls_mergecells INTO TABLE s_sheets-sheetdata_runtime-
t_mergecells .
ENDIF .
IF ls_mergecells-autofit_rows IS NOT INITIAL
OR ls_mergecells-autofit_cols IS NOT INITIAL .
v_postprocessing_autofit = abap_on .
s_sheets-sheetdata_runtime-postprocessing_autofit = abap_on .
ENDIF .
ls_drawings-beg_y = ls_mergecells-beg_y - 1 .
ls_drawings-beg_x = ls_mergecells-beg_x - 1 .
ls_drawings-end_x = ls_mergecells-end_x .
ls_drawings-end_y = ls_mergecells-end_y .
LOOP AT s_sheets-sheetdata_runtime-t_drawings ASSIGNING <drawings>
WHERE drawing_size_h EQ 0
AND drawing_size_w EQ 0
AND beg_x EQ ls_drawings-beg_x
AND beg_y LE ls_drawings-beg_y
AND end_y GE ls_drawings-end_y .
<drawings>-end_x = ls_drawings-end_x .
ENDLOOP .
ENDIF .
CLEAR ls_cells_new .
ls_cells_new-y = ls_cells_src-y .
ls_cells_new-x = iv_left + sy-index .
ls_cells_new-style = ls_cells_src-style .
INSERT ls_cells_new INTO TABLE s_sheets-sheetdata_runtime-t_cells .
ENDDO .
ENDIF .
ENDDO .
ENDCASE .
ENDMETHOD . "finalize_respattern
METHOD finalize_grid .
DATA:
ls_datasets TYPE ty_s_datasets ,
ls_dataset_refs TYPE ty_s_dataset_refs ,
ls_ref_fields TYPE ty_s_dataset_ref_fields .
FIELD-SYMBOLS:
<datasets> TYPE ty_s_datasets .
* dataset info
IF it_ref_fields[] IS NOT INITIAL .
READ TABLE s_model-t_datasets ASSIGNING <datasets> WITH TABLE KEY id =
iv_form_id .
IF sy-subrc NE 0 .
ls_datasets-id = iv_form_id .
INSERT ls_datasets INTO TABLE s_model-t_datasets ASSIGNING <datasets> .
ENDIF .
ENDMETHOD . "finalize_grid
ENDCLASS . "lcl_excelruntime IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_exceltemplate DEFINITION
*----------------------------------------------------------------------*
* excel template buffer
*----------------------------------------------------------------------*
CLASS lcl_exceltemplate DEFINITION INHERITING FROM lcl_excel.
PUBLIC SECTION .
METHODS:
free REDEFINITION ,
bufferization_patterns
IMPORTING value(it_patternarea) TYPE ty_t_patternarea OPTIONAL ,
get_sheet
IMPORTING iv_sheetname TYPE any
RETURNING value(rs_sheets) TYPE ty_s_sheets ,
get_pattern
IMPORTING iv_sheetname TYPE any
iv_id TYPE any
RETURNING value(rs_patterns) TYPE ty_s_patterns ,
get_drawing_static
IMPORTING iv_sheetname TYPE any
iv_drwstat_name TYPE any
RETURNING value(rs_drawings) TYPE ty_s_drawings_tmp ,
formparameters_struc_get
IMPORTING iv_path TYPE any
CHANGING cs_struc TYPE any ,
formparameters_struc_set
IMPORTING iv_path TYPE any
is_struc TYPE any ,
formparameters_table_get
IMPORTING iv_path TYPE any
CHANGING ct_tab TYPE STANDARD TABLE ,
formparameters_table_set
IMPORTING iv_path TYPE any
it_tab TYPE STANDARD TABLE .
TYPES:
BEGIN OF ty_s_datavalid_tmp .
INCLUDE TYPE ty_s_coordinates .
INCLUDE TYPE ty_s_datavalidation .
TYPES:
END OF ty_s_datavalid_tmp ,
ty_t_datavalid_tmp TYPE STANDARD TABLE OF ty_s_datavalid_tmp .
DATA:
ls_patternarea_abs TYPE ty_s_coordinates ,
ls_patterns TYPE ty_s_patterns ,
ls_cells TYPE ty_s_cells ,
lt_cells_tmp TYPE ty_t_cells ,
ls_coordinates TYPE ty_s_coordinates .
DATA:
ls_mergecells_rel TYPE ty_s_mergecells_rel ,
ls_mergecells TYPE ty_s_mergecells ,
lt_mergecells TYPE ty_t_mergecells ,
lv_mgc_index TYPE sy-index ,
lv_mgc_ref TYPE string ,
lr_mgc_ncol TYPE REF TO if_ixml_node_collection ,
lr_mgc_node TYPE REF TO if_ixml_node .
DATA:
lt_drawings TYPE ty_t_drawings_tmp ,
ls_vmldrawings TYPE ty_s_vmldrawings ,
lt_sheetrels TYPE ty_t_relstab ,
ls_sharedstrings TYPE ty_s_sharedstrings ,
lt_sharedstrings_tmp TYPE HASHED TABLE OF ty_s_sharedstrings
WITH UNIQUE KEY key ,
lv_str_index TYPE sy-index ,
lr_str_ncol TYPE REF TO if_ixml_node_collection ,
lr_str_node TYPE REF TO if_ixml_node ,
lr_str_elem TYPE REF TO if_ixml_element ,
lv_val_index TYPE sy-index ,
lr_val_ncol TYPE REF TO if_ixml_node_collection ,
lr_val_node TYPE REF TO if_ixml_node ,
lr_val_elem TYPE REF TO if_ixml_element .
DATA:
lv_row_index TYPE sy-index ,
lv_row_ref TYPE string ,
lr_row_ncol TYPE REF TO if_ixml_node_collection ,
lr_row_node TYPE REF TO if_ixml_node ,
lr_row_elem TYPE REF TO if_ixml_element .
DATA:
lr_cols_elem TYPE REF TO if_ixml_element ,
lv_col_index TYPE sy-index ,
lv_col_ref TYPE string ,
lr_col_ncol TYPE REF TO if_ixml_node_collection ,
lr_col_node TYPE REF TO if_ixml_node ,
lr_col_elem TYPE REF TO if_ixml_element .
DATA:
lr_dvls_elem TYPE REF TO if_ixml_element ,
lv_dvl_index TYPE sy-index ,
lv_dvl_ref TYPE string ,
lr_dvl_ncol TYPE REF TO if_ixml_node_collection ,
lr_dvl_node TYPE REF TO if_ixml_node ,
lr_dvl_elem TYPE REF TO if_ixml_element ,
lr_dvlf_node TYPE REF TO if_ixml_node ,
lr_dvlf_elem TYPE REF TO if_ixml_element .
DATA:
ls_rowprop TYPE ty_s_rowprop ,
lt_rowprop TYPE ty_t_rowprop ,
ls_colprop TYPE ty_s_colprop ,
lt_colprop TYPE ty_t_colprop ,
lv_stringtmp TYPE string ,
lv_min TYPE string ,
lv_max TYPE string ,
ls_datavalid_tmp TYPE ty_s_datavalid_tmp ,
lt_datavalid_tmp TYPE ty_t_datavalid_tmp ,
lv_attrname TYPE string ,
lv_sqref TYPE string ,
lt_sqref TYPE STANDARD TABLE OF string ,
lv_y TYPE i ,
lv_x TYPE i .
DATA:
lr_attr_ndmap TYPE REF TO if_ixml_named_node_map ,
lr_attr_nditerator TYPE REF TO if_ixml_node_iterator ,
lr_attr_node TYPE REF TO if_ixml_node .
FIELD-SYMBOLS:
<patternarea> TYPE ty_s_patternarea ,
<sheets> TYPE ty_s_sheets ,
<cells> TYPE ty_s_cells ,
<field> TYPE ANY .
*======================================================================
* initialization
*======================================================================
CLEAR s_model-t_sharedstrings .
FREE s_model-t_sharedstrings .
LOOP AT s_model-t_sheets ASSIGNING <sheets> .
lt_drawings[] = <sheets>-sheetdata_template-t_drawings[] .
lt_sheetrels[] = <sheets>-sheetdata_template-t_sheetrels[] .
ls_vmldrawings = <sheets>-sheetdata_template-vmldrawings .
CLEAR <sheets>-sheetdata_template .
FREE <sheets>-sheetdata_template .
<sheets>-sheetdata_template-t_drawings[] = lt_drawings[] .
<sheets>-sheetdata_template-t_sheetrels[] = lt_sheetrels[] .
<sheets>-sheetdata_template-vmldrawings = ls_vmldrawings .
ENDLOOP .
*======================================================================
* pre-read all shared strings in the workbook
*======================================================================
DO 1 TIMES .
CHECK s_model-ixml_doc_sharedstrings IS BOUND .
lr_str_ncol = s_model-ixml_doc_sharedstrings->get_elements_by_tag_name(
name = c_tag-si
depth = 1 ) .
CHECK lr_str_ncol IS BOUND .
DO .
lv_str_index = sy-index - 1 .
lr_str_node = lr_str_ncol->get_item( index = lv_str_index ) .
IF lr_str_node IS NOT BOUND. EXIT. ENDIF .
lr_str_elem ?= lr_str_node->query_interface( ixml_iid_element ).
lr_val_node = lr_str_elem->find_from_name( name = c_tag-t depth = 1 ) .
CLEAR ls_sharedstrings .
ls_sharedstrings-key = lv_str_index .
IF lr_val_node IS BOUND .
ls_sharedstrings-value = lr_val_node->get_value( ) .
ELSE . " -->> extended cell formatting
ls_sharedstrings-value = guid_create( ) .
lr_val_ncol = lr_str_elem->get_elements_by_tag_name( name = c_tag-t ) .
IF lr_val_ncol IS BOUND .
DO .
lv_val_index = sy-index - 1 .
lr_val_node = lr_val_ncol->get_item( index = lv_val_index ) .
IF lr_val_node IS NOT BOUND. EXIT. ENDIF .
lv_stringtmp = lr_val_node->get_value( ) .
CONCATENATE ls_sharedstrings-value lv_stringtmp INTO
ls_sharedstrings-value .
ENDDO .
ENDIF .
ls_sharedstrings-si_node = lr_str_node->clone( ) .
ENDIF .
INSERT ls_sharedstrings INTO TABLE lt_sharedstrings_tmp .
ENDDO .
ENDDO .
*======================================================================
* extract pattern areas information for each sheet
*======================================================================
SORT it_patternarea BY sheetname .
LOOP AT it_patternarea ASSIGNING <patternarea> .
AT NEW sheetname .
CLEAR ls_rowprop .
WHILE lr_attr_node IS NOT INITIAL .
CASE lr_attr_node->get_name( ) .
WHEN c_tag-r . ls_rowprop-y = lv_row_ref = lr_attr_node-
>get_value( ) .
WHEN c_tag-s . ls_rowprop-s = lr_attr_node-
>get_value( ) .
WHEN c_tag-customformat . ls_rowprop-customformat = lr_attr_node-
>get_value( ) .
WHEN c_tag-ht . ls_rowprop-ht = lr_attr_node-
>get_value( ) .
WHEN c_tag-customheight . ls_rowprop-customheight = lr_attr_node-
>get_value( ) .
WHEN c_tag-hidden . ls_rowprop-hidden = lr_attr_node-
>get_value( ) .
WHEN c_tag-outlinelevel . ls_rowprop-outlinelevel = lr_attr_node-
>get_value( ) .
WHEN c_tag-collapsed . ls_rowprop-collapsed = lr_attr_node-
>get_value( ) .
ENDCASE .
lr_attr_node = lr_attr_nditerator->get_next( ) .
ENDWHILE .
INSERT ls_rowprop INTO TABLE lt_rowprop .
CLEAR ls_cells .
ls_cells-y = lv_row_ref .
lr_mgc_ncol =
<sheets>-ixml_doc->get_elements_by_tag_name(
name = c_tag-mergecell
depth = 3 ) .
IF lr_mgc_ncol IS BOUND .
DO .
lv_mgc_index = sy-index - 1 .
lr_mgc_node = lr_mgc_ncol->get_item( index = lv_mgc_index ) .
IF lr_mgc_node IS NOT BOUND. EXIT. ENDIF .
lr_cols_elem = <sheets>-ixml_doc->find_from_name(
name = c_tag-cols
depth = 2 ) .
IF lr_cols_elem IS BOUND .
lr_col_ncol = lr_cols_elem->get_elements_by_tag_name(
name = c_tag-col
depth = 1 ) .
IF lr_col_ncol IS BOUND .
DO .
lv_col_index = sy-index - 1 .
lr_col_node = lr_col_ncol->get_item( index = lv_col_index ) .
IF lr_col_node IS NOT BOUND. EXIT. ENDIF .
lr_attr_ndmap = lr_col_node->get_attributes( ) .
lr_attr_nditerator = lr_attr_ndmap->create_iterator( ) .
lr_attr_node = lr_attr_nditerator->get_next( ) .
CLEAR ls_colprop .
CLEAR lv_min .
CLEAR lv_max .
WHILE lr_attr_node IS NOT INITIAL .
CASE lr_attr_node->get_name( ) .
WHEN c_tag-min . lv_min = lr_attr_node-
>get_value( ) .
WHEN c_tag-max . lv_max = lr_attr_node-
>get_value( ) .
WHEN c_tag-width . ls_colprop-width = lr_attr_node-
>get_value( ) .
WHEN c_tag-style . ls_colprop-style = lr_attr_node-
>get_value( ) .
WHEN c_tag-hidden . ls_colprop-hidden = lr_attr_node-
>get_value( ) .
WHEN c_tag-bestfit . ls_colprop-bestfit = lr_attr_node-
>get_value( ) .
WHEN c_tag-customwidth . ls_colprop-customwidth = lr_attr_node-
>get_value( ) .
WHEN c_tag-outlinelevel . ls_colprop-outlinelevel = lr_attr_node-
>get_value( ) .
WHEN c_tag-collapsed . ls_colprop-collapsed = lr_attr_node-
>get_value( ) .
ENDCASE .
lr_attr_node = lr_attr_nditerator->get_next( ) .
ENDWHILE .
lr_dvls_elem = <sheets>-ixml_doc->find_from_name(
name = c_tag-datavalidations
depth = 2 ) .
IF lr_dvls_elem IS BOUND .
lr_dvl_ncol = lr_dvls_elem->get_elements_by_tag_name(
name = c_tag-datavalidation
depth = 1 ) .
IF lr_dvl_ncol IS BOUND .
DO .
* element: dataValidation
lv_dvl_index = sy-index - 1 .
lr_dvl_node = lr_dvl_ncol->get_item( index = lv_dvl_index ) .
IF lr_dvl_node IS NOT BOUND. EXIT. ENDIF .
lr_dvl_elem ?= lr_dvl_node->query_interface( ixml_iid_element ).
CLEAR ls_datavalid_tmp .
CLEAR lv_sqref .
CLEAR lt_sqref .
* element: formula1
lr_dvlf_elem = lr_dvl_elem->find_from_name(
name = c_tag-formula1
depth = 1 ) .
IF lr_dvlf_elem IS BOUND .
ls_datavalid_tmp-formula1 = lr_dvlf_elem->get_value( ) .
ENDIF .
* element: formula2
lr_dvlf_elem = lr_dvl_elem->find_from_name(
name = c_tag-formula2
depth = 1 ) .
IF lr_dvlf_elem IS BOUND .
ls_datavalid_tmp-formula2 = lr_dvlf_elem->get_value( ) .
ENDIF .
* attributes
lr_attr_ndmap = lr_dvl_node->get_attributes( ) .
lr_attr_nditerator = lr_attr_ndmap->create_iterator( ) .
lr_attr_node = lr_attr_nditerator->get_next( ) .
ls_patternarea_abs-beg_y = <patternarea>-top .
ls_patternarea_abs-end_y = <patternarea>-top + <patternarea>-rows - 1 .
ls_patternarea_abs-beg_x = <patternarea>-left .
ls_patternarea_abs-end_x = <patternarea>-left + <patternarea>-columns - 1 .
CLEAR ls_coordinates .
MOVE-CORRESPONDING ls_datavalid_tmp TO ls_coordinates .
IF ls_coordinates-beg_y LT ls_patternarea_abs-beg_y .
ls_coordinates-beg_y = ls_patternarea_abs-beg_y .
ENDIF .
IF ls_coordinates-beg_x LT ls_patternarea_abs-beg_x .
ls_coordinates-beg_x = ls_patternarea_abs-beg_x .
ENDIF .
IF ls_coordinates-end_y GT ls_patternarea_abs-end_y .
ls_coordinates-end_y = ls_patternarea_abs-end_y .
ENDIF .
IF ls_coordinates-end_x GT ls_patternarea_abs-end_x .
ls_coordinates-end_x = ls_patternarea_abs-end_x .
ENDIF .
lv_y = ls_coordinates-beg_y .
lv_x = ls_coordinates-beg_x .
DO .
DO .
READ TABLE ls_patterns-t_cells ASSIGNING <cells>
WITH KEY y = lv_y x = lv_x .
IF sy-subrc NE 0 .
CLEAR ls_cells .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
INSERT ls_cells INTO TABLE ls_patterns-t_cells ASSIGNING <cells> .
ENDIF .
MOVE-CORRESPONDING ls_datavalid_tmp TO <cells>-datavalidation .
ADD 1 TO lv_x .
IF lv_x GE ls_coordinates-end_x .
EXIT .
ENDIF .
ENDDO .
ADD 1 TO lv_y .
IF lv_y GE ls_coordinates-end_y .
EXIT .
ENDIF .
ENDDO .
ENDLOOP .
IF ls_mergecells-beg_y LT ls_patternarea_abs-beg_y .
ls_mergecells-beg_y = ls_patternarea_abs-beg_y .
ENDIF .
IF ls_mergecells-end_y GT ls_patternarea_abs-end_y .
ls_mergecells-end_y = ls_patternarea_abs-end_y .
ENDIF .
IF ls_mergecells-beg_x LT ls_patternarea_abs-beg_x .
ls_mergecells-beg_x = ls_patternarea_abs-beg_x .
ENDIF .
IF ls_mergecells-end_x GT ls_patternarea_abs-end_x .
ls_mergecells-end_x = ls_patternarea_abs-end_x .
ENDIF .
*======================================================================
ENDMETHOD . "bufferization_patterns
METHOD get_sheet .
CLEAR rs_sheets .
READ TABLE s_model-t_sheets INTO rs_sheets
WITH TABLE KEY name = iv_sheetname .
ENDMETHOD . "get_sheet
METHOD get_pattern .
FIELD-SYMBOLS:
<sheets> TYPE ty_s_sheets .
CLEAR rs_patterns .
READ TABLE s_model-t_sheets ASSIGNING <sheets>
WITH TABLE KEY name = iv_sheetname .
CHECK sy-subrc EQ 0 .
CLEAR rs_drawings .
READ TABLE s_model-t_sheets ASSIGNING <sheets>
WITH TABLE KEY name = iv_sheetname .
CHECK sy-subrc EQ 0 .
CLEAR cs_struc .
FREE cs_struc .
lr_ixml_document = xml_load( iv_path = iv_path ) .
CHECK lr_ixml_document IS BOUND .
lr_fld_ndmap = lr_row_node->get_attributes( ) .
lr_fld_nditerator = lr_fld_ndmap->create_iterator( ) .
lr_fld_attrib = lr_fld_nditerator->get_next( ) .
WHILE lr_fld_attrib IS NOT INITIAL .
lv_fld_name = lr_fld_attrib->get_name( ) .
lv_fld_value = lr_fld_attrib->get_value( ) .
lr_fld_attrib = lr_fld_nditerator->get_next( ) .
ENDWHILE .
ENDMETHOD . "formparameters_struc_get
METHOD formparameters_struc_set .
DATA:
lr_ixml TYPE REF TO if_ixml ,
lr_ixml_document TYPE REF TO if_ixml_document ,
lr_ixml_element TYPE REF TO if_ixml_element ,
lv_string_fname TYPE string ,
lv_string_value TYPE string ,
lr_descr_line TYPE REF TO cl_abap_structdescr .
FIELD-SYMBOLS:
<components> TYPE abap_compdescr ,
<value> TYPE ANY .
lr_ixml = cl_ixml=>create( ) .
lr_ixml_document = lr_ixml->create_document( ) .
lr_ixml_element =
lr_ixml_document->create_simple_element( name = c_tag-row
parent = lr_ixml_document ) .
LOOP AT lr_descr_line->components ASSIGNING <components>.
ASSIGN COMPONENT <components>-name OF STRUCTURE is_struc TO <value> .
CHECK <value> IS ASSIGNED .
lv_string_fname = <components>-name .
lv_string_value = <value> .
lr_ixml_element->set_attribute( name = lv_string_fname
value = lv_string_value ) .
ENDLOOP .
CLEAR ct_tab .
FREE ct_tab .
lr_row_ncol =
lr_ixml_document->get_elements_by_tag_name( name = c_tag-row
depth = 1 ) .
CHECK lr_row_ncol IS BOUND .
DO .
lv_row_index = sy-index - 1 .
lr_row_node = lr_row_ncol->get_item( index = lv_row_index ) .
IF lr_row_node IS INITIAL. EXIT. ENDIF .
lr_fld_ndmap = lr_row_node->get_attributes( ) .
lr_fld_nditerator = lr_fld_ndmap->create_iterator( ) .
lr_fld_attrib = lr_fld_nditerator->get_next( ) .
lr_fld_attrib = lr_fld_nditerator->get_next( ) .
ENDWHILE .
ENDDO .
ENDMETHOD . "formparameters_table_get
METHOD formparameters_table_set .
DATA:
lr_ixml TYPE REF TO if_ixml ,
lr_ixml_document TYPE REF TO if_ixml_document ,
lr_tab_element TYPE REF TO if_ixml_element ,
lr_row_element TYPE REF TO if_ixml_element ,
lv_string_fname TYPE string ,
lv_string_value TYPE string ,
lr_descr_tab TYPE REF TO cl_abap_tabledescr ,
lr_descr_line TYPE REF TO cl_abap_structdescr .
FIELD-SYMBOLS:
<components> TYPE abap_compdescr ,
<row> TYPE ANY ,
<value> TYPE ANY .
lr_ixml = cl_ixml=>create( ) .
lr_ixml_document = lr_ixml->create_document( ) .
lr_tab_element =
lr_ixml_document->create_simple_element( name = c_tag-table
parent = lr_ixml_document ) .
lv_string_fname = <components>-name .
lv_string_value = <value> .
lr_row_element->set_attribute( name = lv_string_fname
value = lv_string_value ) .
ENDLOOP .
ENDLOOP .
PUBLIC SECTION .
CLASS-DATA:
v_dcpfm TYPE usr01-dcpfm .
TYPES:
ty_s_hierarchy TYPE snodetext ,
ty_t_hierarchy TYPE STANDARD TABLE OF ty_s_hierarchy .
TYPES:
BEGIN OF ty_s_properties ,
id TYPE ty_s_hierarchy-id ,
comp_type TYPE ty_comp_type ,
comp_name TYPE ty_comp_name ,
comp_descr TYPE ddtext ,
DATA:
v_formname TYPE string READ-ONLY ,
v_formdescr TYPE wwwdatatab-text READ-ONLY ,
v_devclass TYPE tadir-devclass READ-ONLY ,
v_active TYPE flag READ-ONLY ,
v_root_id TYPE snode-id READ-ONLY ,
v_created_uname TYPE syuname READ-ONLY ,
v_created_datum TYPE sydatum READ-ONLY ,
v_changed_uname TYPE syuname READ-ONLY ,
v_changed_datum TYPE sydatum READ-ONLY ,
r_context TYPE REF TO lcl_context READ-ONLY ,
r_exceltemplate TYPE REF TO lcl_exceltemplate READ-ONLY ,
t_properties TYPE ty_t_properties READ-ONLY ,
t_exceptions TYPE ty_t_exceptions READ-ONLY ,
t_hierarchy TYPE ty_t_hierarchy READ-ONLY ,
t_patternarea TYPE ty_t_patternarea READ-ONLY .
CLASS-METHODS:
class_constructor ,
conv_formname_ie
IMPORTING value(iv_objid) TYPE any
RETURNING value(rv_formname) TYPE wwwdatatab-objid ,
conv_formname_ei
IMPORTING iv_formname TYPE any
RETURNING value(rv_objid) TYPE wwwdatatab-objid ,
conv_sheetprotection_st
IMPORTING iv_sheetprotection TYPE ty_s_properties-tb_sheetprotection
RETURNING value(rs_sheetprotection) TYPE ty_s_sheetprotection ,
conv_sheetprotection_ts
IMPORTING is_sheetprotection TYPE ty_s_sheetprotection
RETURNING value(rv_sheetprotection) TYPE ty_s_properties-
tb_sheetprotection ,
conv_vbs_tables_st
IMPORTING iv_vbs_tables TYPE ty_s_properties-postproc_vbs_tables
RETURNING value(rt_vbs_tables_tab) TYPE ty_t_vbs_tables_tab ,
conv_vbs_tables_ts
IMPORTING it_vbs_tables_tab TYPE ty_t_vbs_tables_tab
RETURNING value(rv_vbs_tables) TYPE ty_s_properties-
postproc_vbs_tables ,
conv_dataset_series_st
IMPORTING iv_dataset_series TYPE ty_s_properties-dataset_series
RETURNING value(rt_dataset_series_tab) TYPE ty_t_dataset_series_tab ,
conv_dataset_series_ts
IMPORTING it_dataset_series_tab TYPE ty_t_dataset_series_tab
RETURNING value(rv_dataset_series) TYPE ty_s_properties-dataset_series ,
conv_grid_fldseq_st
IMPORTING iv_grid_fldseq TYPE ty_s_properties-grid_fldseq
RETURNING value(rt_grid_fldseq_tab) TYPE ty_t_grid_fldseq ,
conv_grid_fldseq_ts
IMPORTING it_grid_fldseq_tab TYPE ty_t_grid_fldseq
RETURNING value(rv_grid_fldseq) TYPE ty_s_properties-grid_fldseq ,
conv_grid_fldprop_st
IMPORTING iv_grid_fldprop TYPE ty_s_properties-grid_fldprop
RETURNING value(rt_grid_fldprop_tab) TYPE ty_t_grid_fldprop ,
conv_grid_fldprop_ts
IMPORTING it_grid_fldprop_tab TYPE ty_t_grid_fldprop
RETURNING value(rv_grid_fldprop) TYPE ty_s_properties-grid_fldprop ,
conv_container_fs
IMPORTING value(iv_field) TYPE csequence
EXPORTING es_structure TYPE any ,
conv_container_sf
IMPORTING is_structure TYPE any
EXPORTING ev_field TYPE csequence ,
get_devclass
IMPORTING iv_formname TYPE any
RETURNING value(rv_devclass) TYPE tadir-devclass ,
enq_lock
IMPORTING iv_formname TYPE any
RETURNING value(rv_foreign_lock) TYPE flag ,
enq_unlock
IMPORTING iv_formname TYPE any ,
enq_check
IMPORTING iv_formname TYPE any
RETURNING value(rv_foreign_lock) TYPE flag ,
is_val_convert_relevant
IMPORTING is_ctxt_prop TYPE lcl_context=>ty_s_properties
RETURNING value(rv_is_relevant) TYPE flag ,
vbs_code_default_get
RETURNING value(rv_vbs_code) TYPE string ,
vbs_code_validate
CHANGING cv_vbs_code TYPE string .
CLASS-DATA:
t_comp_types TYPE ty_t_comp_types READ-ONLY .
CONSTANTS:
BEGIN OF c_comp_type ,
root TYPE ty_comp_type VALUE 'R' ,
sheet TYPE ty_comp_type VALUE 'S' ,
loopstep TYPE ty_comp_type VALUE 'L' ,
pattern TYPE ty_comp_type VALUE 'P' ,
respattern TYPE ty_comp_type VALUE 'Q' ,
field TYPE ty_comp_type VALUE 'F' ,
folder TYPE ty_comp_type VALUE 'E' ,
drawing TYPE ty_comp_type VALUE 'D' ,
tree TYPE ty_comp_type VALUE 'T' ,
grid TYPE ty_comp_type VALUE 'G' ,
chart TYPE ty_comp_type VALUE 'C' ,
END OF c_comp_type ,
BEGIN OF c_comp_icon ,
root TYPE icon_d VALUE icon_object_list ,
sheet TYPE icon_d VALUE icon_xls ,
loopstep TYPE icon_d VALUE icon_businav_objects ,
pattern TYPE icon_d VALUE icon_alv_variants ,
respattern TYPE icon_d VALUE icon_wd_toolbar ,
field TYPE icon_d VALUE icon_change_text ,
folder TYPE icon_d VALUE icon_open ,
drawing TYPE icon_d VALUE icon_tif ,
tree TYPE icon_d VALUE icon_display_tree ,
grid TYPE icon_d VALUE icon_table_settings ,
chart TYPE icon_d VALUE icon_graphics ,
END OF c_comp_icon ,
BEGIN OF c_tb_direction ,
up2down TYPE ty_char1 VALUE space ,
left2right TYPE ty_char1 VALUE abap_on ,
END OF c_tb_direction ,
BEGIN OF c_tb_mergecells ,
rows TYPE ty_char1 VALUE space ,
cols TYPE ty_char1 VALUE abap_on ,
END OF c_tb_mergecells ,
BEGIN OF c_draft_subtree ,
no TYPE ty_char1 VALUE space ,
yes TYPE ty_char1 VALUE abap_on ,
legacy TYPE ty_char1 VALUE '+' ,
END OF c_draft_subtree ,
BEGIN OF c_stru_exp_coll ,
dynamic TYPE ty_char1 VALUE space ,
collapsed TYPE ty_char1 VALUE '-' ,
expanded TYPE ty_char1 VALUE '+' ,
END OF c_stru_exp_coll ,
BEGIN OF c_head_titles ,
tech_descr TYPE ty_char1 VALUE space ,
tech TYPE ty_char1 VALUE '1' ,
descr TYPE ty_char1 VALUE '2' ,
END OF c_head_titles ,
BEGIN OF c_drawing_size ,
fit_within_area TYPE ty_char1 VALUE space ,
from_context TYPE ty_char1 VALUE 'C' ,
END OF c_drawing_size ,
BEGIN OF c_respattern_place ,
before_subarea TYPE ty_char1 VALUE space ,
after_subarea TYPE ty_char1 VALUE 'X' ,
END OF c_respattern_place ,
METHODS:
constructor
IMPORTING iv_formname TYPE any
iv_create_new TYPE flag DEFAULT abap_off
iv_editor TYPE flag DEFAULT abap_off
iv_template_path TYPE string OPTIONAL
EXCEPTIONS process_terminated ,
free ,
set_context
IMPORTING iv_contextname TYPE any ,
set_template
IMPORTING iv_rawdata TYPE any OPTIONAL
it_document_table TYPE tsfmime OPTIONAL
iv_document_size TYPE i OPTIONAL ,
get_relevant_child_comptypes
IMPORTING is_properties TYPE ty_s_properties
RETURNING value(rt_child_types) TYPE ty_t_comp_types ,
is_comptype_allowed
IMPORTING iv_id TYPE any
iv_child_type TYPE ty_comp_type
RETURNING value(rv_allowed) TYPE flag,
node_get_properties
IMPORTING iv_id TYPE any
RETURNING value(rs_properties) TYPE ty_s_properties ,
node_get_exceptions
IMPORTING iv_id TYPE any
RETURNING value(rs_exceptions) TYPE ty_s_exceptions ,
node_get_parent
IMPORTING iv_id TYPE any
RETURNING value(rv_id_parent) TYPE ty_s_hierarchy-parent ,
node_get_skipfolders
IMPORTING iv_id TYPE any
RETURNING value(rs_properties) TYPE ty_s_properties ,
node_get_legacy_info
IMPORTING iv_id TYPE any
EXPORTING es_exceptions TYPE ty_s_exceptions
ev_cb_fullpath TYPE any
ev_tb_sheet_exists TYPE any
ev_tb_sheet_compname TYPE any
ev_tb_sheetname TYPE any
ev_tb_chartsheet TYPE any
ev_tb_area_top TYPE any
ev_tb_area_left TYPE any
ev_tb_area_rows TYPE any
ev_tb_area_columns TYPE any
ev_real_level TYPE any
ev_comp_level TYPE any
ev_draft_subtree TYPE any ,
node_get_retcode_severity
IMPORTING iv_id TYPE any
RETURNING value(rv_retcode) TYPE sysubrc ,
node_get_protab_relevance
IMPORTING iv_id TYPE any OPTIONAL
is_properties TYPE ty_s_properties OPTIONAL
EXPORTING ev_rt_show TYPE any
ev_cm_show TYPE any
ev_pr_show TYPE any
ev_ms_show TYPE any ,
check_subtree
IMPORTING value(iv_id) TYPE any OPTIONAL ,
get_grid_fldseqprop
IMPORTING iv_id TYPE any
EXPORTING et_ctxt_hier TYPE lcl_context=>ty_t_hierarchy
et_ctxt_prop TYPE lcl_context=>ty_t_properties
et_fldseq TYPE ty_t_grid_fldseq
et_fldprop TYPE ty_t_grid_fldprop
ev_grid_fldseq TYPE any
ev_grid_fldprop TYPE any ,
get_sub_ctxt
IMPORTING value(iv_cb_fullpath) TYPE any OPTIONAL
is_form_prop TYPE ty_s_properties
RETURNING value(rs_ctxt_prop) TYPE lcl_context=>ty_s_properties ,
get_relevant_datasets
IMPORTING iv_id TYPE any
iv_same_sheet TYPE flag OPTIONAL
RETURNING value(rt_datasets) TYPE ty_t_nodetab ,
get_relevant_vbs_tables
RETURNING value(rt_vbs_tables_tab) TYPE ty_t_vbs_tables_tab .
PRIVATE SECTION .
DATA:
v_editor TYPE flag .
METHODS:
check_recurs
IMPORTING is_data_parent TYPE ty_s_check_data
is_legacy_parent TYPE ty_s_check_legacy_info ,
check_process
IMPORTING is_data_parent TYPE ty_s_check_data
is_legacy_parent TYPE ty_s_check_legacy_info
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_root ,
check_process_component
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_cb
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_cb_appearance
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_cb_value
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_cb_valvld
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_tb_drawing
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_chart
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_tree
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_grid
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_tb_sheet
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data ,
check_process_tb_area
IMPORTING is_data_parent TYPE ty_s_check_data
CHANGING cs_legacy TYPE ty_s_check_legacy_info
cs_data TYPE ty_s_check_data .
ls_comp_types-comp_type = c_comp_type-root .
ls_comp_types-icon = c_comp_icon-root .
ls_comp_types-description = 'ROOT' .
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-sheet .
ls_comp_types-icon = c_comp_icon-sheet .
ls_comp_types-description = v_text-t008 . " text: Sheet
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-loopstep .
ls_comp_types-icon = c_comp_icon-loopstep .
ls_comp_types-description = v_text-t009 . " text: Loop
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-pattern .
ls_comp_types-icon = c_comp_icon-pattern .
ls_comp_types-description = v_text-t010 . " text: Pattern
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-respattern .
ls_comp_types-icon = c_comp_icon-respattern .
ls_comp_types-description = v_text-t175 . " text: Pattern (resizable)
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-field .
ls_comp_types-icon = c_comp_icon-field .
ls_comp_types-description = v_text-t011 . " text: Value
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-folder .
ls_comp_types-icon = c_comp_icon-folder .
ls_comp_types-description = v_text-t012 . " text: Folder
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-drawing .
ls_comp_types-icon = c_comp_icon-drawing .
ls_comp_types-description = v_text-t139 . " text: Drawing
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-tree .
ls_comp_types-icon = c_comp_icon-tree .
ls_comp_types-description = v_text-t174 . " text: Tree
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-grid .
ls_comp_types-icon = c_comp_icon-grid .
ls_comp_types-description = v_text-t225 . " text: Grid
INSERT ls_comp_types INTO TABLE t_comp_types .
ls_comp_types-comp_type = c_comp_type-chart .
ls_comp_types-icon = c_comp_icon-chart .
ls_comp_types-description = v_text-t232 . " text: Chart
INSERT ls_comp_types INTO TABLE t_comp_types .
ENDMETHOD . "class_constructor
METHOD constructor .
super->constructor( ) .
DATA:
ls_head TYPE ty_s_head ,
ls_key TYPE wwwdatatab ,
lv_value TYPE wwwparams-value ,
lt_document_table TYPE tsfmime ,
lv_document_size TYPE i ,
lv_template_ok TYPE flag ,
lv_formstructure_ok TYPE flag .
*======================================================================
* presets and checks
*======================================================================
CLEAR t_hierarchy[] .
CLEAR t_properties[] .
CLEAR t_exceptions[] .
CLEAR v_active .
CLEAR v_root_id .
CLEAR v_formdescr .
CLEAR v_created_uname .
CLEAR v_created_datum .
CLEAR v_changed_uname .
CLEAR v_changed_datum .
v_formname = iv_formname .
v_editor = iv_editor .
IF v_formname IS INITIAL .
MESSAGE i000(lp) WITH v_text-t013 " text: Specify a name of the form
RAISING process_terminated .
ENDIF .
v_devclass = get_devclass( iv_formname = v_formname ) .
* enq_check( v_formname ) .
ENDIF .
*======================================================================
* try to upload Form's rawdata from the repository
* (Form is represented as XLSX-file)
*======================================================================
ls_key-relid = c_relid .
ls_key-objid = conv_formname_ei( v_formname ) .
IF lv_document_size IS INITIAL
OR lt_document_table[] IS INITIAL .
MESSAGE i000(lp) WITH v_formname ':' v_text-t015 " text: Form data is
interupted
INTO v_dummy .
msg_syst_catch( ) .
ELSE .
lv_template_ok = abap_on .
ENDIF .
* from frontend
IF iv_template_path IS NOT INITIAL .
cl_gui_frontend_services=>gui_upload(
EXPORTING filename = iv_template_path
filetype = 'BIN'
IMPORTING filelength = lv_document_size
CHANGING data_tab = lt_document_table
EXCEPTIONS OTHERS = 0 ) .
ENDIF .
ls_key-relid = c_relid .
ls_key-objid = conv_formname_ei( '&TEMPLATE&' ) .
*======================================================================
* try to find form parameters and structure in the XLSX-file
*======================================================================
IF lv_template_ok EQ abap_on .
r_exceltemplate->formparameters_struc_get(
EXPORTING iv_path = r_exceltemplate->c_path-formhead
CHANGING cs_struc = ls_head ) .
r_exceltemplate->formparameters_table_get(
EXPORTING iv_path = r_exceltemplate->c_path-formproperties
CHANGING ct_tab = t_properties ) .
r_exceltemplate->formparameters_table_get(
EXPORTING iv_path = r_exceltemplate->c_path-formhierarchy
CHANGING ct_tab = t_hierarchy ) .
v_formdescr = ls_head-formdescr .
v_active = ls_head-active .
v_root_id = ls_head-root_id .
v_created_uname = ls_head-created_uname .
v_created_datum = ls_head-created_datum .
v_changed_uname = ls_head-changed_uname .
v_changed_datum = ls_head-changed_datum .
IF t_hierarchy[] IS INITIAL
OR t_properties[] IS INITIAL .
MESSAGE i000(lp) WITH v_formname ':' v_text-t015 " text: Form data is
interupted
INTO v_dummy .
msg_syst_catch( ) .
ELSE .
lv_formstructure_ok = abap_on .
ENDIF .
ENDIF .
*======================================================================
* if form parameters/structure does not exist,
* we create the init form structure
*======================================================================
IF lv_formstructure_ok IS INITIAL .
CALL FUNCTION 'RS_TREE_CREATE'
EXPORTING
root_name = v_formname
IMPORTING
root_id = v_root_id.
*======================================================================
* context initialization
*======================================================================
set_context( ls_head-contextname ) .
ENDMETHOD . "constructor
METHOD free .
CLEAR:
v_formname ,
v_active ,
v_root_id ,
t_properties ,
t_exceptions ,
t_hierarchy ,
t_patternarea .
IF r_context IS BOUND .
r_context->free( ) .
CLEAR r_context .
FREE r_context .
ENDIF .
IF r_exceltemplate IS BOUND .
r_exceltemplate->free( ) .
CLEAR r_exceltemplate .
FREE r_exceltemplate .
ENDIF .
CONCATENATE
is_sheetprotection-mode
is_sheetprotection-password
is_sheetprotection-cb_val_relpath
is_sheetprotection-selectlockedcells
is_sheetprotection-selectunlockedcells
is_sheetprotection-formatcells
is_sheetprotection-formatcolumns
is_sheetprotection-formatrows
is_sheetprotection-insertcolumns
is_sheetprotection-insertrows
is_sheetprotection-inserthyperlinks
is_sheetprotection-deletecolumns
is_sheetprotection-deleterows
is_sheetprotection-sort
is_sheetprotection-autofilter
is_sheetprotection-pivottables
is_sheetprotection-objects
is_sheetprotection-scenarios
INTO rv_sheetprotection SEPARATED BY ';' .
ENDMETHOD . "conv_sheetprotection_ts
METHOD conv_vbs_tables_st .
DATA:
lv_line TYPE string ,
lt_table TYPE ty_t_string_tab ,
ls_vbs_tables_tab TYPE ty_s_vbs_tables_tab .
CLEAR rt_vbs_tables_tab[] .
CLEAR es_structure .
cl_abap_container_utilities=>read_container_c(
EXPORTING im_container = iv_field(lv_length)
IMPORTING ex_value = es_structure
EXCEPTIONS OTHERS = 0 ) .
ENDMETHOD . "conv_container_fs
METHOD conv_container_sf .
DATA lv_length TYPE i .
DESCRIBE FIELD is_structure .
lv_length = sy-folen .
CLEAR ev_field .
cl_abap_container_utilities=>fill_container_c(
EXPORTING im_value = is_structure
IMPORTING ex_container = ev_field(lv_length)
EXCEPTIONS OTHERS = 0 ) .
ENDMETHOD . "conv_container_sf
METHOD get_devclass .
DATA lv_objid TYPE wwwdatatab-objid .
enq_unlock( iv_formname ) .
rv_foreign_lock = abap_on .
MESSAGE i000(lp)
WITH v_text-t017 iv_formname " text: Form
v_text-t018 ls_enq-guname " text: is locked by the user
INTO lv_msg_dummy .
ENDMETHOD . "enq_check
METHOD is_val_convert_relevant .
IF is_ctxt_prop-type_edit_mask IS NOT INITIAL
OR is_ctxt_prop-type_kind EQ cl_abap_typedescr=>typekind_date
OR is_ctxt_prop-type_kind EQ cl_abap_typedescr=>typekind_time .
rv_is_relevant = abap_on .
ELSE .
rv_is_relevant = abap_off .
ENDIF .
ENDMETHOD . "is_val_convert_relevant
METHOD vbs_code_default_get .
CONCATENATE `Sub Entry()`
`' use object XLWB_Application instead Application`
`' use object XLWB_ActiveWorkbook instead ActiveWorkbook` space
space space
`End Sub`
INTO rv_vbs_code
SEPARATED BY cl_abap_char_utilities=>cr_lf .
ENDMETHOD . "vbs_code_default_get
METHOD vbs_code_validate .
DATA:
lv_vbs_code_default TYPE string ,
lv_vbs_code_current TYPE string .
lv_vbs_code_default = vbs_code_default_get( ) .
lv_vbs_code_current = cv_vbs_code .
CLEAR cv_vbs_code .
ENDMETHOD . "vbs_code_validate
METHOD check_subtree .
ls_data-hierarchy-child = v_root_id.
ELSE.
lv_id = node_get_parent( lv_id ).
ls_data-properties = node_get_skipfolders( lv_id ).
lv_id = ls_data-properties-id.
READ TABLE t_hierarchy INTO ls_data-hierarchy WITH KEY id = lv_id.
ENDMETHOD . "check_subtree
METHOD check_recurs .
DATA:
ls_data TYPE ty_s_check_data ,
ls_legacy TYPE ty_s_check_legacy_info ,
lv_id_next TYPE snode-id .
FIELD-SYMBOLS:
<properties> TYPE ty_s_properties .
lv_id_next = is_data_parent-hierarchy-child .
DO .
CLEAR ls_data .
* read a next node
READ TABLE t_hierarchy INTO ls_data-hierarchy
WITH KEY parent = is_data_parent-hierarchy-id
id = lv_id_next .
IF sy-subrc NE 0 .
EXIT .
ENDIF .
IF ls_data-hierarchy-next IS INITIAL .
EXIT .
ELSE .
lv_id_next = ls_data-hierarchy-next .
ENDIF .
ENDDO .
ENDMETHOD . "check_recurs
METHOD check_process .
CLEAR cs_data-exceptions .
cs_data-exceptions-id = cs_data-properties-id .
CASE is_legacy_parent-draft_subtree .
WHEN c_draft_subtree-yes . cs_legacy-draft_subtree = c_draft_subtree-
legacy .
WHEN c_draft_subtree-legacy . cs_legacy-draft_subtree = c_draft_subtree-
legacy .
WHEN OTHERS . cs_legacy-draft_subtree = c_draft_subtree-no .
ENDCASE .
IF cs_data-properties-draft_subtree EQ c_draft_subtree-yes
AND cs_data-properties-comp_type NE c_comp_type-folder .
cs_data-properties-draft_subtree = c_draft_subtree-no .
ENDIF .
IF cs_data-properties-draft_subtree EQ c_draft_subtree-yes .
cs_legacy-draft_subtree = c_draft_subtree-legacy .
ELSE .
cs_data-properties-draft_subtree = cs_legacy-draft_subtree .
ENDIF .
mk_set_legacy_exception:
cs_legacy-exceptions-comp_type cs_data-exceptions-comp_type ,
cs_legacy-exceptions-comp_name cs_data-exceptions-comp_name ,
cs_legacy-exceptions-cb_relpath cs_data-exceptions-cb_relpath ,
cs_legacy-exceptions-cb_apr_relpath cs_data-exceptions-cb_apr_relpath ,
cs_legacy-exceptions-cb_val_relpath cs_data-exceptions-cb_val_relpath ,
cs_legacy-exceptions-tb_area cs_data-exceptions-tb_area ,
cs_legacy-exceptions-tb_sheetname cs_data-exceptions-tb_sheetname ,
cs_legacy-exceptions-dataset cs_data-exceptions-dataset .
ENDMETHOD . "check_process
METHOD check_process_root . "the whole form checks (check for Root node)
DATA:
lv_vbs_code_tmp TYPE string ,
lt_vbs_tables_tab_s TYPE ty_t_vbs_tables_tab ,
lt_vbs_tables_tab_r TYPE ty_t_vbs_tables_tab .
FIELD-SYMBOLS:
<ls_properties> TYPE ty_s_properties ,
<ls_exceptions> TYPE ty_s_exceptions ,
<ls_vbs_tables_tab_s> TYPE ty_s_vbs_tables_tab .
lv_vbs_code_tmp = <ls_properties>-postproc_vbs_code .
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN lv_vbs_code_tmp
WITH space .
CONDENSE lv_vbs_code_tmp NO-GAPS .
TRANSLATE lv_vbs_code_tmp TO UPPER CASE .
IF <ls_properties>-postproc_vbs_code IS INITIAL .
CLEAR <ls_properties>-postproc_vbs_tables .
ENDIF .
ELSE .
LOOP AT lt_vbs_tables_tab_s TRANSPORTING NO FIELDS
WHERE table_name EQ <ls_vbs_tables_tab_s>-table_name
AND cb_relpath NE <ls_vbs_tables_tab_s>-cb_relpath .
EXIT .
ENDLOOP .
IF sy-subrc EQ 0 .
MESSAGE e000(lp)
WITH v_text-t287 ':' " text: Final post-
processing
v_text-t293 " text: Table name is not
unique
<ls_vbs_tables_tab_s>-table_name INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = <ls_exceptions>-t_retmess ) .
<ls_exceptions>-postprocessing = c_retcode-error .
ENDIF .
ENDIF .
ENDLOOP .
<ls_properties>-postproc_vbs_tables = conv_vbs_tables_ts( lt_vbs_tables_tab_s
) .
ENDIF .
ENDMETHOD . "check_process_root
METHOD check_process_component . "check the name & type of component
ENDMETHOD . "check_process_component
METHOD check_process_cb . "check for general context binding
*------ validate
IF cs_data-properties-comp_type NE c_comp_type-loopstep
AND cs_data-properties-comp_type NE c_comp_type-folder .
CLEAR cs_data-properties-cb_relpath .
ENDIF .
IF cs_data-properties-comp_type EQ c_comp_type-loopstep .
IF cs_data-properties-cb_loop_from LE 0 .
cs_data-properties-cb_loop_from = 1 .
ENDIF .
IF cs_data-properties-cb_loop_to IS NOT INITIAL
AND cs_data-properties-cb_loop_to LT cs_data-properties-cb_loop_from .
cs_data-properties-cb_loop_to = cs_data-properties-cb_loop_from .
ENDIF .
ELSE .
CLEAR cs_data-properties-cb_loop_from .
CLEAR cs_data-properties-cb_loop_to .
ENDIF .
ELSE .
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-cb_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error
OR ( cs_data-properties-comp_type EQ c_comp_type-loopstep AND
ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-table )
OR ( cs_data-properties-comp_type EQ c_comp_type-field AND
ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-element ) .
MESSAGE e000(lp) WITH v_text-t020 INTO v_dummy . " text: Context binding is
incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_relpath = c_retcode-error .
EXIT .
ENDIF .
ENDMETHOD . "check_process_cb
METHOD check_process_cb_appearance . "check for context binding, which controls
an Appearance of component
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lv_length TYPE i .
*------ validate
IF cs_data-properties-cb_apr_relpath IS INITIAL .
CLEAR cs_data-properties-cb_apr_offset .
CLEAR cs_data-properties-cb_apr_match .
ENDIF .
EXIT .
ENDCASE .
ELSE .
EXIT .
ENDIF .
*------
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-cb_apr_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t079 " text: Appearance in runtime:
v_text-t020 INTO v_dummy . " text: Context binding is incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_apr_relpath = c_retcode-error .
WHEN c_comp_type-field .
IF cs_data-properties-cb_val_relpath IS INITIAL .
MESSAGE w000(lp)
WITH v_text-t011 ':' " text: Value
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-warning .
ENDIF .
WHEN c_comp_type-drawing .
CLEAR cs_data-properties-cb_val_offset .
CLEAR cs_data-properties-cb_val_match .
CLEAR cs_data-properties-cb_val_convert .
IF cs_data-properties-tb_drwstat_flag IS INITIAL .
IF cs_data-properties-cb_val_relpath IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t011 ':' " text: Value
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
ENDIF .
ELSE .
CLEAR cs_data-properties-cb_val_relpath .
ENDIF .
WHEN c_comp_type-tree
OR c_comp_type-grid .
CLEAR cs_data-properties-cb_val_offset .
CLEAR cs_data-properties-cb_val_match .
CLEAR cs_data-properties-cb_val_convert .
CLEAR cs_data-properties-cb_val_sub_req .
CLEAR cs_data-properties-cb_val_sub_row .
CLEAR cs_data-properties-cb_val_sub_col .
IF cs_data-properties-cb_val_relpath IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t011 ':' " text: Value
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
ENDIF .
WHEN OTHERS .
CLEAR cs_data-properties-cb_val_relpath .
ENDCASE .
*------ validate
IF cs_data-properties-cb_val_relpath IS INITIAL .
CLEAR cs_data-properties-cb_val_offset .
CLEAR cs_data-properties-cb_val_match .
CLEAR cs_data-properties-cb_val_convert .
CLEAR cs_data-properties-cb_val_sub_req .
CLEAR cs_data-properties-cb_val_sub_row .
CLEAR cs_data-properties-cb_val_sub_col .
EXIT .
ENDIF .
EXIT .
ENDCASE .
ELSE .
EXIT .
ENDIF .
*------ check, if Context component type is allowed for the Form component
DO 1 TIMES .
CASE cs_data-properties-comp_type .
WHEN c_comp_type-sheet
OR c_comp_type-field
OR c_comp_type-drawing .
CHECK ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-element
AND ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-table .
WHEN c_comp_type-grid .
CHECK ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-table .
WHEN c_comp_type-tree .
CHECK ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-tree
AND ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-tree_s .
WHEN OTHERS . EXIT . " -->> do
ENDCASE .
MESSAGE e000(lp) WITH v_text-t020 INTO v_dummy . " text: Context binding is
incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
ENDDO .
CASE ls_ctxt_prop-comp_type .
WHEN lcl_context=>c_comp_type-element .
cs_data-properties-cb_val_sub_req = abap_off .
WHEN lcl_context=>c_comp_type-table .
cs_data-properties-cb_val_sub_req = abap_on .
IF cs_data-properties-cb_val_sub_row IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t236 " text: Table row
v_text-t031 " text: is missing
':'
v_text-t020 INTO v_dummy . " text: Context binding is incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
EXIT .
ENDIF .
IF cs_data-properties-cb_val_sub_col IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t237 " text: Column
v_text-t031 " text: is missing
':'
v_text-t020 INTO v_dummy . " text: Context binding is incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
EXIT .
ENDIF .
ls_ctxt_prop =
get_sub_ctxt( iv_cb_fullpath = cs_legacy-cb_fullpath
is_form_prop = cs_data-properties ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH cs_data-properties-cb_val_relpath '-'
cs_data-properties-cb_val_sub_col
v_text-t020 INTO v_dummy . " text: Context binding is incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
EXIT .
ENDIF .
ENDCASE .
IF ls_ctxt_prop-type_kind EQ cl_abap_typedescr=>typekind_char
AND ls_ctxt_prop-type_length GT 1 .
lv_length = cs_data-properties-cb_val_offset + cs_data-properties-
cb_val_match .
IF lv_length GT ls_ctxt_prop-type_length .
MESSAGE i000(lp)
WITH v_text-t024 lv_length " text: Chars number
v_text-t025 ls_ctxt_prop-type_length " text: overlap the field
length
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
ENDIF .
ELSE .
CLEAR cs_data-properties-cb_val_offset .
CLEAR cs_data-properties-cb_val_match .
ENDIF .
ENDMETHOD . "check_process_cb_value
METHOD check_process_cb_valvld . "check for data validation option
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_dtsets TYPE ty_t_nodetab ,
ls_dtset_fldseq TYPE ty_s_grid_fldseq ,
lt_dtset_fldseq TYPE ty_t_grid_fldseq ,
ls_dtset_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_dtset_ctxt_prop TYPE lcl_context=>ty_t_properties ,
lv_msg_prefix TYPE string ,
lv_error_flag TYPE flag ,
lr_typedescr TYPE REF TO cl_abap_typedescr ,
lr_tabledescr TYPE REF TO cl_abap_tabledescr ,
lr_structdescr TYPE REF TO cl_abap_structdescr .
FIELD-SYMBOLS:
<components> TYPE abap_compdescr .
EXIT .
ENDCASE .
ELSE .
EXIT .
ENDIF .
*------ attributes
IF cs_data-properties-cb_valvld_attr_relpath IS NOT INITIAL .
DO 1 TIMES .
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-cb_valvld_attr_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
* check: the table must contain two leading fields with char/string type
cl_abap_datadescr=>describe_by_name(
EXPORTING p_name = ls_ctxt_prop-type_absname_t
RECEIVING p_descr_ref = lr_typedescr
EXCEPTIONS type_not_found = 4 ) .
IF sy-subrc NE 0 .
lv_error_flag = abap_on .
EXIT .
ENDIF .
TRY .
lr_tabledescr ?= lr_typedescr .
lr_structdescr ?= lr_tabledescr->get_table_line_type( ) .
CATCH cx_sy_move_cast_error .
lv_error_flag = abap_on .
EXIT .
ENDTRY .
DO 2 TIMES .
READ TABLE lr_structdescr->components ASSIGNING <components> INDEX
sy-index .
IF sy-subrc NE 0 .
lv_error_flag = abap_on .
EXIT .
ENDIF .
CASE <components>-type_kind .
WHEN cl_abap_datadescr=>typekind_clike
OR cl_abap_datadescr=>typekind_string
OR cl_abap_datadescr=>typekind_csequence
OR cl_abap_datadescr=>typekind_char .
WHEN OTHERS .
lv_error_flag = abap_on .
EXIT .
ENDCASE .
ENDDO .
ENDDO .
*------ formula1
CONCATENATE v_text-t348 " text: Data validation
v_text-t351 " text: Value (Formula)
'[1] :'
INTO lv_msg_prefix SEPARATED BY space .
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-
cb_valvld_for1_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error
OR ls_ctxt_prop-comp_type NE lcl_context=>c_comp_type-element .
MESSAGE e000(lp)
WITH lv_msg_prefix
v_text-t020 INTO v_dummy . " text: Context binding is
incorrect
* check dataset
lt_dtsets = get_relevant_datasets( cs_data-properties-id ) .
ENDDO .
*------ formula2
CONCATENATE v_text-t348 " text: Data validation
v_text-t351 " text: Value (Formula)
'[2] :'
INTO lv_msg_prefix SEPARATED BY space .
WHEN OTHERS .
CLEAR cs_data-properties-cb_valvld_attr_relpath .
CLEAR cs_data-properties-cb_valvld_for1_dataset_id .
CLEAR cs_data-properties-cb_valvld_for1_dataset_fld .
CLEAR cs_data-properties-cb_valvld_for1_relpath .
CLEAR cs_data-properties-cb_valvld_for2_relpath .
ENDCASE .
ENDMETHOD . "check_process_cb_valvld
METHOD check_process_tb_sheet . " check for template Sheet binding
MESSAGE e000(lp)
WITH v_text-t026 " text: problem occurs with component
v_text-t008 " text: Sheet
v_text-t021 INTO v_dummy . " text: on the upper levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_sheetname = c_retcode-legacy .
ENDCASE .
*------ validate
CASE cs_data-properties-comp_type .
WHEN c_comp_type-sheet .
WHEN OTHERS .
CLEAR cs_data-properties-tb_sheetname .
CLEAR cs_data-properties-tb_sheetstate .
CLEAR cs_data-properties-tb_sheetprotection .
ENDCASE .
*------ check
CASE cs_data-properties-comp_type .
WHEN c_comp_type-loopstep
OR c_comp_type-folder .
WHEN c_comp_type-sheet .
IF cs_legacy-tb_sheet_exists IS NOT INITIAL .
MESSAGE e000(lp)
WITH v_text-t027 " text: A component
v_text-t008 " text: Sheet
v_text-t028 " text: already presents
v_text-t021 INTO v_dummy ." text: on the upper levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_sheetname = c_retcode-error .
ENDIF .
IF cs_data-properties-tb_sheetname IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t029 " text: Binding with Sheet of the template missing
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_sheetname = c_retcode-error .
ELSE .
DATA ls_sheets TYPE lcl_excel=>ty_s_sheets .
ls_sheets =
r_exceltemplate->get_sheet( iv_sheetname = cs_data-properties-
tb_sheetname ) .
IF ls_sheets IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t030 " text: Template does not contain a Sheet
'[' cs_data-properties-tb_sheetname ']' INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_sheetname = c_retcode-error .
ELSE .
cs_legacy-tb_chartsheet = ls_sheets-chartsheet .
cs_legacy-tb_sheetname = cs_data-properties-tb_sheetname .
cs_legacy-summarybelow = ls_sheets-summarybelow .
cs_legacy-summaryright = ls_sheets-summaryright .
ENDIF .
ENDIF .
cs_legacy-tb_sheet_exists = abap_on .
CASE ls_sheetprotection-mode .
WHEN c_sheetprotection_mode-off .
CLEAR ls_sheetprotection .
WHEN c_sheetprotection_mode-from_template .
CLEAR ls_sheetprotection .
ls_sheetprotection-mode = c_sheetprotection_mode-
from_template.
WHEN c_sheetprotection_mode-from_context .
lv_relpath = ls_sheetprotection-cb_val_relpath .
lv_password = ls_sheetprotection-password .
CLEAR ls_sheetprotection .
ls_sheetprotection-mode = c_sheetprotection_mode-from_context
.
ls_sheetprotection-cb_val_relpath = lv_relpath .
ls_sheetprotection-password = lv_password .
DO 1 TIMES .
IF ls_sheetprotection-cb_val_relpath IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t298 ':' " text: Sheet protection
v_text-t022 INTO v_dummy . " text: Context binding is
missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess
) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
EXIT .
ENDIF .
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = ls_sheetprotection-
cb_val_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t298 ':' " text: Sheet protection
v_text-t020 INTO v_dummy . " text: Context binding is
incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess
) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
EXIT .
ENDIF .
ENDDO .
WHEN c_sheetprotection_mode-static .
CLEAR ls_sheetprotection-cb_val_relpath .
ENDCASE .
cs_data-properties-tb_sheetprotection =
lcl_form=>conv_sheetprotection_ts( ls_sheetprotection ) .
*<<------ sheet protection
WHEN OTHERS .
IF cs_legacy-tb_sheet_exists IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t027 " text: A component
v_text-t008 " text: Sheet
v_text-t031 " text: is missing
v_text-t021 INTO v_dummy ." text: on the upper levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_sheetname = c_retcode-error .
ELSE .
IF cs_legacy-tb_chartsheet IS NOT INITIAL
AND cs_data-properties-comp_type NE c_comp_type-chart .
MESSAGE e000(lp)
WITH v_text-t274 INTO v_dummy ." text: Chart Sheet can contain the
Charts only' .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_sheetname = c_retcode-error .
ENDIF .
ENDIF .
ENDCASE .
IF cs_data-properties-comp_type EQ c_comp_type-tree
AND ( cs_legacy-summarybelow IS NOT INITIAL ) .
* OR cs_legacy-summaryright IS NOT INITIAL ) .
MESSAGE e000(lp)
WITH v_text-t182 " text: follow to Excel menu: DATA-
>OUTLINE
v_text-t183 " text: and uncheck SUMMARY ROWS BELOW
DETAIL
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-comp_type = c_retcode-error .
ENDIF .
ENDMETHOD . "check_process_tb_sheet
METHOD check_process_tb_area . " check for template Area binding
DATA:
lv_top TYPE i ,
lv_left TYPE i ,
lv_bottom TYPE i ,
lv_right TYPE i .
DATA:
lv_parent_top TYPE i ,
lv_parent_left TYPE i ,
lv_parent_bottom TYPE i ,
lv_parent_right TYPE i .
CLEAR:
cs_data-properties-tb_area_top ,
cs_data-properties-tb_area_left ,
cs_data-properties-tb_area_rows ,
cs_data-properties-tb_area_columns .
WHEN c_comp_type-field .
IF cs_data-properties-tb_area_textmark IS INITIAL
AND cs_data-properties-tb_area_top IS INITIAL
AND cs_data-properties-tb_area_left IS INITIAL
AND cs_data-properties-tb_area_rows IS INITIAL
AND cs_data-properties-tb_area_columns IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t032 INTO v_dummy . " text: An area is not specified in
the template
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_area = c_retcode-error .
ENDIF .
WHEN OTHERS .
IF cs_data-properties-tb_area_top IS INITIAL
AND cs_data-properties-tb_area_left IS INITIAL
AND cs_data-properties-tb_area_rows IS INITIAL
AND cs_data-properties-tb_area_columns IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t032 INTO v_dummy . " text: An area is not specified in
the template
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_area = c_retcode-error .
ENDIF .
ENDCASE .
CASE is_data_parent-exceptions-tb_area .
WHEN c_retcode-error
OR c_retcode-legacy .
MESSAGE e000(lp)
WITH v_text-t033 " text: A problem with area
determination occurs
v_text-t021 INTO v_dummy . " text: on the upper levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_area = c_retcode-legacy .
WHEN OTHERS .
IF is_data_parent-properties-comp_type EQ c_comp_type-respattern
AND cs_data-properties-comp_type NE c_comp_type-field .
ELSE .
IF ( is_data_parent-properties-tb_area_top IS NOT INITIAL
OR is_data_parent-properties-tb_area_left IS NOT INITIAL
OR is_data_parent-properties-tb_area_rows IS NOT INITIAL
OR is_data_parent-properties-tb_area_columns IS NOT INITIAL )
AND ( cs_data-properties-tb_area_top IS NOT INITIAL
OR cs_data-properties-tb_area_left IS NOT INITIAL
OR cs_data-properties-tb_area_rows IS NOT INITIAL
OR cs_data-properties-tb_area_columns IS NOT INITIAL ) .
lv_top = cs_data-properties-tb_area_top .
lv_left = cs_data-properties-tb_area_left .
lv_bottom = lv_top + cs_data-properties-tb_area_rows .
lv_right = lv_left + cs_data-properties-tb_area_columns .
lv_parent_top = is_data_parent-properties-tb_area_top .
lv_parent_left = is_data_parent-properties-tb_area_left .
lv_parent_bottom = lv_parent_top + is_data_parent-properties-
tb_area_rows .
lv_parent_right = lv_parent_left + is_data_parent-properties-
tb_area_columns .
IF lv_top LT lv_parent_top
OR lv_left LT lv_parent_left
OR lv_bottom GT lv_parent_bottom
OR lv_right GT lv_parent_right .
MESSAGE e000(lp)
WITH v_text-t034 " text: An area is beyond the scope of upper-
level areas
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess )
.
cs_data-exceptions-tb_area = c_retcode-error .
ENDIF .
ENDIF .
ENDIF .
WHEN OTHERS .
CLEAR cs_data-properties-tb_mergecells .
ENDCASE .
WHEN OTHERS .
CLEAR cs_data-properties-tb_autofitmerged_r .
CLEAR cs_data-properties-tb_autofitmerged_c .
ENDCASE .
ENDMETHOD . "check_process_tb_area
METHOD check_process_tb_drawing .
*------ validate
CASE cs_data-properties-comp_type .
WHEN c_comp_type-drawing .
CLEAR: cs_data-properties-cb_val_convert .
WHEN c_comp_type-chart .
CLEAR: cs_data-properties-cb_val_convert .
EXIT .
WHEN OTHERS .
CLEAR: cs_data-properties-tb_drwstat_flag ,
cs_data-properties-tb_drwstat_name ,
cs_data-properties-drawing_size ,
cs_data-properties-drawing_size_h_relpath ,
cs_data-properties-drawing_size_w_relpath .
EXIT .
ENDCASE .
*------ checks
CASE cs_data-properties-tb_drwstat_flag .
WHEN abap_on .
IF cs_data-properties-tb_drwstat_name IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t145 INTO v_dummy . " text: Name of the drawing is not
specified
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
WHEN abap_off .
CLEAR:
cs_data-properties-tb_drwstat_name .
ENDCASE .
*------ checks 2
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties .
CASE cs_data-properties-drawing_size .
WHEN c_drawing_size-fit_within_area .
CLEAR:
cs_data-properties-drawing_size_h_relpath ,
cs_data-properties-drawing_size_w_relpath .
WHEN c_drawing_size-from_context .
IF cs_data-exceptions-cb_relpath NE c_retcode-legacy
AND ( cs_legacy-exceptions-cb_relpath EQ c_retcode-error OR
cs_legacy-exceptions-cb_relpath EQ c_retcode-legacy ) .
" set a legacy error (if occurs)
MESSAGE e000(lp) WITH v_text-t020 " text: Context binding
is incorrect
v_text-t021 INTO v_dummy . " text: on the upper
levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_relpath = c_retcode-legacy .
ELSE .
* --- Height
IF cs_data-properties-drawing_size_h_relpath IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t139 " text: Drawing
v_text-t340 ':' " text: Height
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
ELSE .
" check relpath for chart title
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-
drawing_size_h_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t139 " text: Drawing
v_text-t340 ':' " text: Height
v_text-t020 INTO v_dummy . " text: Context binding is
incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess )
.
cs_data-exceptions-tb_drawing = c_retcode-error .
ENDIF .
ENDIF .
* --- Width
IF cs_data-properties-drawing_size_w_relpath IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t139 " text: Drawing
v_text-t341 ':' " text: Width
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
ELSE .
" check relpath for chart title
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-
drawing_size_w_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t139 " text: Drawing
v_text-t341 ':' " text: Width
v_text-t020 INTO v_dummy . " text: Context binding is
incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess )
.
cs_data-exceptions-tb_drawing = c_retcode-error .
ENDIF .
ENDIF .
ENDIF .
ENDCASE .
ENDMETHOD . "check_process_tb_drawing
METHOD check_process_chart .
DATA:
ls_drawings TYPE lcl_excel=>ty_s_drawings_tmp ,
ls_chart_series TYPE lcl_excel=>ty_s_chart_series ,
lt_dtsets TYPE ty_t_nodetab ,
ls_dtset_fldseq TYPE ty_s_grid_fldseq ,
lt_dtset_fldseq TYPE ty_t_grid_fldseq ,
ls_dtset_series_tab TYPE ty_s_dataset_series_tab ,
lt_dtset_series_tab TYPE ty_t_dataset_series_tab ,
lt_dtset_series_tab_tmp TYPE ty_t_dataset_series_tab ,
lv_dtset_series_n_a TYPE ty_char10 ,
lv_dtset_series_all TYPE ty_char10 ,
ls_dtset_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_dtset_ctxt_prop TYPE lcl_context=>ty_t_properties ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lv_msg_tmp TYPE string .
*======================================================================
* Model
*======================================================================
IF cs_data-properties-tb_drwstat_name IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t241 INTO v_dummy . " text: Name of the Chart model is
not specified
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
ls_drawings =
r_exceltemplate->get_drawing_static( iv_sheetname = cs_legacy-tb_sheetname
iv_drwstat_name = cs_data-properties-
tb_drwstat_name ) .
IF ls_drawings IS INITIAL
OR ls_drawings-drawing_type NE r_exceltemplate->c_drawing_type-chart .
MESSAGE e000(lp)
WITH v_text-t008 " text: Sheet
cs_legacy-tb_sheetname
v_text-t242 " text: does not contain any Charts
cs_data-properties-tb_drwstat_name INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
ENDIF .
ENDIF .
CASE cs_data-properties-chart_title .
WHEN space .
CLEAR cs_data-properties-chart_title_relpath .
WHEN OTHERS .
IF cs_data-properties-chart_title_relpath IS INITIAL .
MESSAGE w000(lp)
WITH v_text-t251 ':' " text: Chart title
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
ELSE .
IF cs_data-exceptions-cb_relpath NE c_retcode-legacy
AND ( cs_legacy-exceptions-cb_relpath EQ c_retcode-error OR
cs_legacy-exceptions-cb_relpath EQ c_retcode-legacy ) .
" set a legacy error (if occurs)
MESSAGE e000(lp) WITH v_text-t020 " text: Context
binding is incorrect
v_text-t021 INTO v_dummy . " text: on the upper
levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_relpath = c_retcode-legacy .
ELSE .
" check relpath for chart title
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-
chart_title_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t251 ':' " text: Chart title
v_text-t020 INTO v_dummy . " text: Context binding is
incorrect
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess )
.
cs_data-exceptions-tb_drawing = c_retcode-error .
ENDIF .
ENDIF .
ENDIF .
ENDCASE .
CASE cs_data-properties-chart_catax_title .
WHEN space
OR '1' . " -->> From header of grid column
CLEAR cs_data-properties-chart_catax_title_relpath .
WHEN OTHERS .
IF cs_data-properties-chart_catax_title_relpath IS INITIAL .
MESSAGE w000(lp)
WITH v_text-t232 " text: Chart
v_text-t343 ':' " text: Value Axis title
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
ELSE .
IF cs_data-exceptions-cb_relpath NE c_retcode-legacy
AND ( cs_legacy-exceptions-cb_relpath EQ c_retcode-error OR
cs_legacy-exceptions-cb_relpath EQ c_retcode-legacy ) .
" set a legacy error (if occurs)
MESSAGE e000(lp) WITH v_text-t020 " text: Context
binding is incorrect
v_text-t021 INTO v_dummy . " text: on the upper
levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_relpath = c_retcode-legacy .
ELSE .
" check relpath for chart title
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-
chart_catax_title_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE w000(lp)
WITH v_text-t232 " text: Chart
v_text-t343 ':' " text: Value Axis title
v_text-t022 INTO v_dummy . " text: Context binding is
missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess )
.
cs_data-exceptions-tb_drawing = c_retcode-error .
ENDIF .
ENDIF .
ENDIF .
ENDCASE .
CASE cs_data-properties-chart_valax_title .
WHEN space .
CLEAR cs_data-properties-chart_valax_title_relpath .
WHEN OTHERS .
IF cs_data-properties-chart_valax_title_relpath IS INITIAL .
MESSAGE w000(lp)
WITH v_text-t232 " text: Chart
v_text-t343 ':' " text: Value Axis title
v_text-t022 INTO v_dummy . " text: Context binding is missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
ELSE .
IF cs_data-exceptions-cb_relpath NE c_retcode-legacy
AND ( cs_legacy-exceptions-cb_relpath EQ c_retcode-error OR
cs_legacy-exceptions-cb_relpath EQ c_retcode-legacy ) .
" set a legacy error (if occurs)
MESSAGE e000(lp) WITH v_text-t020 " text: Context
binding is incorrect
v_text-t021 INTO v_dummy . " text: on the upper
levels
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_relpath = c_retcode-legacy .
ELSE .
" check relpath for chart title
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-
chart_valax_title_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
IF r_context->v_retcode EQ c_retcode-error .
MESSAGE w000(lp)
WITH v_text-t232 " text: Chart
v_text-t343 ':' " text: Value Axis title
v_text-t022 INTO v_dummy . " text: Context binding is
missing
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess )
.
cs_data-exceptions-tb_drawing = c_retcode-error .
ENDIF .
ENDIF .
ENDIF .
ENDCASE .
*======================================================================
* Dataset
*======================================================================
IF cs_data-properties-dataset_id IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t243 INTO v_dummy . " text: Dataset is not specified
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
EXIT .
ENDIF .
*======================================================================
* Series
*======================================================================
CHECK cs_data-exceptions-tb_drawing NE c_retcode-error
AND cs_data-exceptions-tb_drawing NE c_retcode-legacy .
CLEAR ls_chart_series .
ls_chart_series-idx = c_chart_category_idx .
ls_chart_series-caption = v_text-t250 . " text: Horizontal (Category)
axis labels
APPEND ls_chart_series TO ls_drawings-chart_series .
IF ls_dtset_series_tab-dtsfld IS INITIAL .
ADD 1 TO lv_dtset_series_n_a .
ENDIF .
ADD 1 TO lv_dtset_series_all .
ENDLOOP .
IF lv_dtset_series_n_a EQ lv_dtset_series_all .
MESSAGE e000(lp)
WITH v_text-t235 " text: Series
':'
v_text-t247 " text: assignment
v_text-t031 " text: is missing
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
MESSAGE e000(lp)
WITH v_text-t235 " text: Series
lv_msg_tmp
v_text-t247 " text: assignment
v_text-t031 " text: is missing
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_drawing = c_retcode-error .
ENDIF .
ENDMETHOD . "check_process_chart
METHOD check_process_tree .
DATA ls_tree_layout TYPE ty_s_tree_layout .
DATA ls_ctxt_prop TYPE lcl_context=>ty_s_properties .
CASE cs_data-properties-comp_type .
WHEN c_comp_type-tree .
WHEN OTHERS .
CLEAR cs_data-properties-tree_layout .
EXIT .
ENDCASE .
conv_container_fs(
EXPORTING iv_field = cs_data-properties-tree_layout
IMPORTING es_structure = ls_tree_layout ) .
ls_ctxt_prop = r_context->node_get_by_path(
iv_relpath = cs_data-properties-cb_val_relpath
iv_fullpath_parent = cs_legacy-cb_fullpath ) .
*------ validate
IF ls_tree_layout-stru IS INITIAL .
CLEAR ls_tree_layout-stru_exp_coll .
IF ls_tree_layout-col_hier IS INITIAL .
CLEAR ls_tree_layout-col_hier_shift .
CLEAR ls_tree_layout-col_hier_after .
ENDIF .
IF ls_tree_layout-col_othr IS INITIAL .
CLEAR ls_tree_layout-col_othr_width .
CLEAR ls_tree_layout-allow_formulas .
ENDIF .
*------ checks
IF cs_data-exceptions-tb_area NE c_retcode-error
AND ( cs_data-properties-tb_area_rows LT 2 OR cs_data-properties-
tb_area_columns LT 2 ) .
SPLIT v_text-t196 " text: As area specify 2x2(or more) |cell range (see
documentation)
AT '|'
INTO sy-msgv1 sy-msgv2 .
MESSAGE e000(lp)
WITH sy-msgv1 sy-msgv2
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_area = c_retcode-error .
ENDIF .
IF ls_tree_layout-stru IS INITIAL
AND ls_tree_layout-col_hier IS INITIAL
AND ls_tree_layout-col_othr IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t203 " text: Nothing to output (structure/ hier.col/ other
cols)
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-tb_area = c_retcode-error .
ENDIF .
conv_container_sf(
EXPORTING is_structure = ls_tree_layout
IMPORTING ev_field = cs_data-properties-tree_layout ) .
ENDMETHOD . "check_process_tree
METHOD check_process_grid .
DATA ls_grid_layout TYPE ty_s_grid_layout .
CASE cs_data-properties-comp_type .
WHEN c_comp_type-grid .
WHEN OTHERS .
CLEAR cs_data-properties-grid_layout .
CLEAR cs_data-properties-grid_fldseq .
CLEAR cs_data-properties-grid_fldprop .
EXIT .
ENDCASE .
conv_container_fs(
EXPORTING iv_field = cs_data-properties-grid_layout
IMPORTING es_structure = ls_grid_layout ) .
*------ validate
IF cs_data-properties-cb_val_relpath IS INITIAL .
CLEAR cs_data-properties-grid_fldseq .
CLEAR cs_data-properties-grid_fldprop .
ELSE .
get_grid_fldseqprop(
EXPORTING iv_id = cs_data-properties-id
IMPORTING ev_grid_fldseq = cs_data-properties-grid_fldseq
ev_grid_fldprop = cs_data-properties-grid_fldprop ) .
ENDIF .
*------ checks
IF cs_data-properties-grid_fldseq IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t231 " text: No column list is specified
INTO v_dummy .
msg_syst_catch2( CHANGING ct_retmess = cs_data-exceptions-t_retmess ) .
cs_data-exceptions-cb_val_relpath = c_retcode-error .
ENDIF .
* IF cs_data-exceptions-tb_area NE c_retcode-error
* AND ( cs_data-properties-tb_area_rows LT 2 OR cs_data-properties-
tb_area_columns LT 2 ) .
*
* ENDIF .
conv_container_sf(
EXPORTING is_structure = ls_grid_layout
IMPORTING ev_field = cs_data-properties-grid_layout ) .
ENDMETHOD . "check_process_grid
METHOD set_context .
msg_init( ) .
IF r_context IS BOUND .
cl_abap_datadescr=>describe_by_name(
EXPORTING p_name = iv_contextname
EXCEPTIONS OTHERS = 4 ) .
IF sy-subrc NE 0 .
MESSAGE e000(lp)
WITH v_text-t004 INTO v_dummy . " text: Specify valid name of the
context
msg_syst_catch( ) .
CHECK v_retcode NE c_retcode-error .
ENDIF .
CLEAR r_context .
FREE r_context .
ENDIF .
check_subtree( ) .
ENDMETHOD . "set_context
METHOD set_template .
msg_init( ) .
IF r_exceltemplate IS BOUND .
r_exceltemplate->free( ) .
CLEAR r_exceltemplate .
FREE r_exceltemplate .
ENDIF .
ENDCASE .
ENDMETHOD . "set_template
METHOD get_relevant_child_comptypes .
msg_init( ) .
CLEAR rt_child_types[] .
IF is_properties-comp_type EQ c_comp_type-sheet
AND is_properties-tb_sheetname IS NOT INITIAL .
ls_sheets = r_exceltemplate->get_sheet( iv_sheetname = is_properties-
tb_sheetname ) .
ENDIF .
CASE is_properties-comp_type .
WHEN c_comp_type-root .
CHECK ls_comp_types-comp_type EQ c_comp_type-sheet
OR ls_comp_types-comp_type EQ c_comp_type-loopstep
OR ls_comp_types-comp_type EQ c_comp_type-folder .
WHEN c_comp_type-sheet .
CASE ls_sheets-chartsheet .
WHEN space .
CHECK ls_comp_types-comp_type EQ c_comp_type-loopstep
OR ls_comp_types-comp_type EQ c_comp_type-pattern
OR ls_comp_types-comp_type EQ c_comp_type-respattern
OR ls_comp_types-comp_type EQ c_comp_type-tree
OR ls_comp_types-comp_type EQ c_comp_type-grid
OR ls_comp_types-comp_type EQ c_comp_type-folder .
WHEN OTHERS .
CHECK ls_comp_types-comp_type EQ c_comp_type-chart .
ENDCASE .
WHEN c_comp_type-loopstep .
CHECK ls_comp_types-comp_type EQ c_comp_type-sheet
OR ls_comp_types-comp_type EQ c_comp_type-loopstep
OR ls_comp_types-comp_type EQ c_comp_type-pattern
OR ls_comp_types-comp_type EQ c_comp_type-respattern
OR ls_comp_types-comp_type EQ c_comp_type-tree
OR ls_comp_types-comp_type EQ c_comp_type-grid
OR ls_comp_types-comp_type EQ c_comp_type-folder .
WHEN c_comp_type-pattern .
CHECK ls_comp_types-comp_type EQ c_comp_type-field
OR ls_comp_types-comp_type EQ c_comp_type-drawing
OR ls_comp_types-comp_type EQ c_comp_type-chart .
WHEN c_comp_type-folder .
CHECK ls_comp_types-comp_type EQ c_comp_type-sheet
OR ls_comp_types-comp_type EQ c_comp_type-loopstep
OR ls_comp_types-comp_type EQ c_comp_type-pattern
OR ls_comp_types-comp_type EQ c_comp_type-respattern
OR ls_comp_types-comp_type EQ c_comp_type-folder
OR ls_comp_types-comp_type EQ c_comp_type-tree
OR ls_comp_types-comp_type EQ c_comp_type-grid .
WHEN c_comp_type-respattern .
CHECK ls_comp_types-comp_type EQ c_comp_type-field
OR ls_comp_types-comp_type EQ c_comp_type-drawing
OR ls_comp_types-comp_type EQ c_comp_type-loopstep
OR ls_comp_types-comp_type EQ c_comp_type-pattern
OR ls_comp_types-comp_type EQ c_comp_type-respattern
OR ls_comp_types-comp_type EQ c_comp_type-folder
OR ls_comp_types-comp_type EQ c_comp_type-tree
OR ls_comp_types-comp_type EQ c_comp_type-grid .
WHEN OTHERS .
* WHEN c_comp_type-field
* OR c_comp_type-drawing
* OR c_comp_type-tree
* OR c_comp_type-grid
* OR c_comp_type-chart .
CONTINUE .
ENDCASE .
rv_allowed = abap_off .
MESSAGE e000(lp)
WITH v_text-t027 " text: A component
ls_child_type-description
v_text-t035 " text: is inappropriate under the
component
ls_comp_type-description INTO v_dummy .
msg_syst_catch( ) .
ENDCASE .
ENDMETHOD . "is_comptype_allowed
METHOD node_get_properties .
msg_init( ) .
CLEAR rs_properties .
READ TABLE t_properties INTO rs_properties WITH KEY id = iv_id .
IF sy-subrc NE 0 .
MESSAGE e000(lp) WITH v_text-t005 " text: Requested node was not found in
the structure
INTO v_dummy .
msg_syst_catch( ) .
ENDIF .
CHECK v_retcode NE c_retcode-error .
ENDMETHOD . " node_get_properties
METHOD node_get_exceptions .
msg_init( ) .
CLEAR rs_exceptions .
READ TABLE t_exceptions INTO rs_exceptions WITH KEY id = iv_id .
CHECK sy-subrc NE 0 .
rs_exceptions-id = iv_id .
ENDMETHOD . " node_get_exceptions
METHOD node_get_parent .
msg_init( ) .
CLEAR es_exceptions .
CLEAR ev_cb_fullpath .
CLEAR ev_tb_sheetname .
CLEAR ev_tb_sheet_exists .
CLEAR ev_tb_area_top .
CLEAR ev_tb_area_left .
CLEAR ev_tb_area_rows .
CLEAR ev_tb_area_columns .
CLEAR ev_real_level .
CLEAR ev_comp_level .
CLEAR ev_draft_subtree .
ls_properties-id = iv_id .
DEFINE mk_set_legacy_exception .
if &1 eq c_retcode-okey and &2 eq c_retcode-warning .
&1 = c_retcode-warning .
elseif &1 eq c_retcode-okey and &2 eq c_retcode-error .
&1 = c_retcode-error .
elseif &1 eq c_retcode-warning and &2 eq c_retcode-error .
&1 = c_retcode-error .
endif .
END-OF-DEFINITION .
DO .
*------ level
ADD 1 TO ev_real_level .
ADD 1 TO ev_comp_level .
*------
* IF ls_properties-id EQ v_root_id.
* EXIT.
* ENDIF.
ls_properties = node_get_properties( ls_properties-id ) .
ls_exceptions = node_get_exceptions( ls_properties-id ) .
*------ draft ?
IF ls_properties-comp_type EQ c_comp_type-folder
AND ls_properties-draft_subtree EQ c_draft_subtree-yes .
IF ls_properties-id EQ iv_id .
ev_draft_subtree = c_draft_subtree-yes .
ELSE .
ev_draft_subtree = c_draft_subtree-legacy .
ENDIF .
ENDIF .
*------ exceptions
mk_set_legacy_exception:
es_exceptions-comp_type ls_exceptions-comp_type ,
es_exceptions-comp_name ls_exceptions-comp_name ,
es_exceptions-cb_relpath ls_exceptions-cb_relpath ,
es_exceptions-cb_apr_relpath ls_exceptions-cb_apr_relpath ,
es_exceptions-cb_val_relpath ls_exceptions-cb_val_relpath ,
es_exceptions-tb_area ls_exceptions-tb_area ,
es_exceptions-tb_sheetname ls_exceptions-tb_sheetname ,
es_exceptions-tb_drawing ls_exceptions-tb_drawing ,
es_exceptions-dataset ls_exceptions-dataset .
IF ls_properties-id EQ v_root_id .
EXIT .
ENDIF .
*------
ls_properties-id = node_get_parent( ls_properties-id ) .
ENDDO .
ENDMETHOD . "node_get_legacy_info
METHOD node_get_retcode_severity .
DATA ls_exceptions TYPE ty_s_exceptions .
ls_exceptions = node_get_exceptions( iv_id ) .
rv_retcode = c_retcode-okey .
IF ls_exceptions-comp_type EQ c_retcode-error
OR ls_exceptions-comp_name EQ c_retcode-error
OR ls_exceptions-cb_relpath EQ c_retcode-error
OR ls_exceptions-cb_apr_relpath EQ c_retcode-error
OR ls_exceptions-cb_val_relpath EQ c_retcode-error
OR ls_exceptions-tb_area EQ c_retcode-error
OR ls_exceptions-tb_sheetname EQ c_retcode-error
OR ls_exceptions-tb_drawing EQ c_retcode-error
OR ls_exceptions-dataset EQ c_retcode-error
OR ls_exceptions-postprocessing EQ c_retcode-error .
rv_retcode = c_retcode-error .
ELSEIF ls_exceptions-comp_type EQ c_retcode-legacy
OR ls_exceptions-comp_name EQ c_retcode-legacy
OR ls_exceptions-cb_relpath EQ c_retcode-legacy
OR ls_exceptions-cb_apr_relpath EQ c_retcode-legacy
OR ls_exceptions-cb_val_relpath EQ c_retcode-legacy
OR ls_exceptions-tb_area EQ c_retcode-legacy
OR ls_exceptions-tb_sheetname EQ c_retcode-legacy
OR ls_exceptions-tb_drawing EQ c_retcode-legacy
OR ls_exceptions-dataset EQ c_retcode-legacy
OR ls_exceptions-postprocessing EQ c_retcode-legacy .
rv_retcode = c_retcode-legacy .
ELSEIF ls_exceptions-comp_type EQ c_retcode-warning
OR ls_exceptions-comp_name EQ c_retcode-warning
OR ls_exceptions-cb_relpath EQ c_retcode-warning
OR ls_exceptions-cb_apr_relpath EQ c_retcode-warning
OR ls_exceptions-cb_val_relpath EQ c_retcode-warning
OR ls_exceptions-tb_area EQ c_retcode-warning
OR ls_exceptions-tb_sheetname EQ c_retcode-warning
OR ls_exceptions-tb_drawing EQ c_retcode-warning
OR ls_exceptions-dataset EQ c_retcode-warning
OR ls_exceptions-postprocessing EQ c_retcode-warning .
rv_retcode = c_retcode-warning .
ENDIF .
ENDMETHOD . "node_get_retcode_severity
METHOD node_get_protab_relevance .
msg_init( ) .
IF is_properties IS INITIAL .
ls_properties = node_get_properties( iv_id ) .
CHECK v_retcode NE c_retcode-error .
ELSE .
ls_properties = is_properties .
ENDIF .
CASE ls_properties-comp_type .
WHEN c_comp_type-root .
ev_rt_show = abap_on .
ev_cm_show = abap_off .
ev_pr_show = abap_off .
WHEN OTHERS .
ev_rt_show = abap_off .
ev_pr_show = abap_on .
ev_cm_show = abap_on .
ENDCASE .
IF ev_ms_show IS REQUESTED .
ls_exceptions = node_get_exceptions( ls_properties-id ) .
IF v_retcode NE c_retcode-error
AND ls_exceptions-t_retmess[] IS NOT INITIAL .
ev_ms_show = abap_on .
ELSE .
ev_ms_show = abap_off .
ENDIF .
ENDIF .
ENDMETHOD . "node_get_protab_relevance
METHOD get_grid_fldseqprop .
msg_init( ) .
DATA:
ls_form_prop TYPE ty_s_properties ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lv_begin_fullpath TYPE ty_comp_path ,
ls_fldseq TYPE ty_s_grid_fldseq ,
ls_fldprop TYPE ty_s_grid_fldprop ,
lt_fldprop_tmp TYPE ty_t_grid_fldprop ,
lv_tabix TYPE sytabix ,
lv_fldseq TYPE ty_s_properties-grid_fldseq ,
lv_fldprop TYPE ty_s_properties-grid_fldprop .
node_get_legacy_info(
EXPORTING iv_id = ls_form_prop-id
IMPORTING ev_cb_fullpath = lv_begin_fullpath ) .
lv_begin_fullpath =
get_fullpath( iv_parent_fullpath = lv_begin_fullpath
iv_relpath = ls_form_prop-cb_val_relpath ) .
r_context->gridfld_get(
EXPORTING iv_begin_fullpath = lv_begin_fullpath
IMPORTING et_hierarchy = et_ctxt_hier
et_properties = et_ctxt_prop ) .
CLEAR ev_grid_fldseq .
CLEAR ev_grid_fldprop .
CLEAR et_fldseq .
CLEAR et_fldprop .
* field sequence
et_fldseq = conv_grid_fldseq_st( iv_grid_fldseq = ls_form_prop-grid_fldseq ) .
DELETE et_fldseq .
ENDLOOP .
* field properties
lt_fldprop_tmp = conv_grid_fldprop_st( iv_grid_fldprop = ls_form_prop-
grid_fldprop ) .
ENDMETHOD . "get_grid_fldseqprop
METHOD get_sub_ctxt .
msg_init( ) .
DATA:
lv_cb_fullpath_sub TYPE ty_comp_path ,
lv_cb_relpath_sub TYPE ty_comp_path .
rs_ctxt_prop =
r_context->node_get_by_path( iv_relpath = lv_cb_relpath_sub
iv_fullpath_parent = lv_cb_fullpath_sub ) .
ENDMETHOD . "get_sub_ctxt
METHOD get_relevant_datasets .
DATA:
ls_properties TYPE ty_s_properties ,
ls_datasets TYPE ty_s_nodetab ,
lv_cb_fullpath TYPE ty_comp_path ,
lv_cb_fullpath_ds TYPE ty_comp_path ,
lv_tb_sheetname TYPE string ,
lv_tb_sheetname_ds TYPE string .
ls_datasets-id = ls_properties-id .
APPEND ls_datasets TO rt_datasets .
ENDLOOP .
ENDMETHOD . "get_relevant_datasets
METHOD get_relevant_vbs_tables .
DATA:
lt_ctxt_hier TYPE lcl_context=>ty_t_hierarchy ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties .
FIELD-SYMBOLS:
<ls_ctxt_hier> TYPE lcl_context=>ty_s_hierarchy ,
<ls_vbs_tables_tab> TYPE ty_s_vbs_tables_tab .
CLEAR rt_vbs_tables_tab .
*------ get a subtree of relevant context nested tables (on root level)
r_context->subtree_get(
EXPORTING iv_begin_fullpath = space
iv_f4_strategy = r_context->c_f4_strategy-loopstep
IMPORTING et_hierarchy = lt_ctxt_hier ) .
CHECK lt_ctxt_hier[] IS NOT INITIAL .
ENDMETHOD . "get_relevant_vbs_tables
ENDCLASS . "lcl_form IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_formruntime DEFINITION
*----------------------------------------------------------------------*
* Runtime form composer
*----------------------------------------------------------------------*
CLASS lcl_formruntime DEFINITION INHERITING FROM lcl_form .
PUBLIC SECTION .
TYPES:
BEGIN OF ty_s_compose_data ,
properties TYPE ty_s_properties ,
shift_relpath TYPE ty_comp_path ,
shift_apr_relpath TYPE ty_comp_path ,
shift_val_relpath TYPE ty_comp_path ,
shift_cellrng_relpath TYPE ty_comp_path ,
hierarchy TYPE ty_s_hierarchy ,
END OF ty_s_compose_data .
TYPES:
BEGIN OF ty_s_compose_legacy_info ,
cb_fullpath TYPE ty_comp_path ,
shift_fullpath TYPE ty_comp_path ,
rt_path_1 TYPE ty_comp_path ,
tb_sheetname TYPE ty_s_properties-tb_sheetname ,
tb_area_top TYPE ty_s_properties-tb_area_top ,
tb_area_left TYPE ty_s_properties-tb_area_left ,
tb_area_rows TYPE ty_s_properties-tb_area_rows ,
tb_area_columns TYPE ty_s_properties-tb_area_columns ,
tb_area_prew_top TYPE i ,
tb_area_prew_left TYPE i ,
tb_area_prew_rows TYPE i ,
tb_area_prew_columns TYPE i ,
tb_rowgroup_level TYPE i ,
tb_colgroup_level TYPE i ,
real_level TYPE i ,
comp_level TYPE i ,
tb_printtitles_r TYPE snode-id ,
tb_printtitles_c TYPE snode-id ,
summarybelow TYPE flag ,
summaryright TYPE flag ,
END OF ty_s_compose_legacy_info .
TYPES:
BEGIN OF ty_s_buffer_icon ,
id TYPE icon-id ,
name TYPE icon-name ,
rawdata TYPE xstring ,
END OF ty_s_buffer_icon ,
ty_t_buffer_icon TYPE HASHED TABLE OF ty_s_buffer_icon
WITH UNIQUE KEY id .
TYPES:
BEGIN OF ty_s_tree_subtotals ,
nodekey TYPE lvc_nkey ,
fieldname TYPE lvc_fname ,
fieldvalue TYPE string ,
END OF ty_s_tree_subtotals ,
ty_t_tree_subtotals TYPE HASHED TABLE OF ty_s_tree_subtotals
WITH UNIQUE KEY nodekey fieldname .
TYPES:
BEGIN OF ty_s_grid_rowvalues ,
index TYPE i ,
position TYPE i ,
position_rel TYPE i ,
value_fullpath TYPE string ,
value_relpath TYPE string ,
ctxt_prop TYPE lcl_context=>ty_s_properties ,
autofitmerged_r TYPE flag , " -->> for res.pattern
autofitmerged_c TYPE flag , " -->> for res.pattern
END OF ty_s_grid_rowvalues ,
ty_t_grid_rowvalues TYPE STANDARD TABLE OF ty_s_grid_rowvalues
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_grid_rowpattrens ,
position TYPE i ,
position_rel TYPE i ,
columns TYPE i ,
t_autofitmerged_r TYPE ty_t_int_tab ,
t_autofitmerged_c TYPE ty_t_int_tab ,
patterns TYPE lcl_excel=>ty_t_patterns ,
rowvalues TYPE ty_t_grid_rowvalues ,
END OF ty_s_grid_rowpattrens ,
ty_t_grid_rowpattrens TYPE STANDARD TABLE OF ty_s_grid_rowpattrens
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_grid_rowstructure ,
level TYPE i ,
loop_fullpath TYPE string ,
loop_relpath TYPE string ,
rowvalues TYPE ty_t_grid_rowvalues ,
rowpattrens TYPE ty_t_grid_rowpattrens ,
END OF ty_s_grid_rowstructure ,
ty_t_grid_rowstructure TYPE STANDARD TABLE OF ty_s_grid_rowstructure
WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_s_grid_rowstructure_buf ,
form_id TYPE ty_s_hierarchy-id ,
maxlevel TYPE i ,
maxsubpattern TYPE i ,
maxposition TYPE i ,
rowvalues TYPE ty_t_grid_rowvalues ,
patterns_h TYPE lcl_excel=>ty_s_patterns ,
rowstructure TYPE ty_t_grid_rowstructure ,
END OF ty_s_grid_rowstructure_buf ,
ty_t_grid_rowstructure_buf
TYPE HASHED TABLE OF ty_s_grid_rowstructure_buf
WITH UNIQUE KEY form_id .
METHODS:
constructor
IMPORTING iv_formname TYPE any
iv_context_ref TYPE any
iv_protect TYPE any OPTIONAL
iv_startup_macro TYPE any OPTIONAL
it_docproperties TYPE ckf_field_value_table OPTIONAL
EXCEPTIONS process_terminated ,
free REDEFINITION ,
get_rawdata
RETURNING value(rv_rawdata) TYPE xstring ,
get_extension
RETURNING value(rv_extension) TYPE ty_char10 ,
pbo .
DATA:
r_excelruntime TYPE REF TO lcl_excelruntime READ-ONLY .
PROTECTED SECTION .
DATA:
v_proc TYPE i ,
v_step TYPE i ,
t_buffer_icon TYPE ty_t_buffer_icon ,
t_buffer_rs TYPE ty_t_grid_rowstructure_buf .
METHODS:
postprocessing
IMPORTING iv_context_ref TYPE any
iv_startup_macro TYPE any ,
compose_recurs
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
it_comp_type_filter TYPE ty_t_comp_type_rng OPTIONAL
CHANGING cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
CHANGING cs_data TYPE ty_s_compose_data
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_sheet
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_loopstep
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_pattern
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_respattern_a
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_respattern_b
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_folder
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_field
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_drawing
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_chart
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_tree
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_tree_recurs
IMPORTING iv_parent_node_key TYPE lvc_nkey
iv_parent_level TYPE i
is_parent_patterns_a TYPE lcl_excel=>ty_s_patterns
is_parent_patterns_b TYPE lcl_excel=>ty_s_patterns
it_patterns_a TYPE lcl_excel=>ty_t_patterns
it_patterns_b TYPE lcl_excel=>ty_t_patterns
it_fcat_lvc TYPE lvc_t_fcat
is_tree_layout TYPE ty_s_tree_layout
it_expanded_nodes TYPE lvc_t_nkey
it_subtotals TYPE ty_t_tree_subtotals
CHANGING cr_alvtree TYPE ty_r_tree
cs_outtab_line TYPE any
cs_legacy TYPE ty_s_compose_legacy_info
cv_top TYPE i
cv_left TYPE i
cv_firstrow TYPE flag ,
compose_process_tree_recsub
IMPORTING iv_parent_node_key TYPE lvc_nkey
it_fcat_lvc TYPE lvc_t_fcat
EXPORTING ev_leaf TYPE flag
CHANGING cr_alvtree TYPE ty_r_tree
cs_outtab_line TYPE any
ct_subtotals TYPE ty_t_tree_subtotals ,
compose_process_tree_s
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_tree_s_recurs
IMPORTING ir_salv_node_parent TYPE REF TO cl_salv_node
iv_parent_level TYPE i
is_parent_patterns_a TYPE lcl_excel=>ty_s_patterns
is_parent_patterns_b TYPE lcl_excel=>ty_s_patterns
it_patterns_a TYPE lcl_excel=>ty_t_patterns
it_patterns_b TYPE lcl_excel=>ty_t_patterns
it_fcat_lvc TYPE lvc_t_fcat
is_tree_layout TYPE ty_s_tree_layout
it_expanded_nodes TYPE lvc_t_nkey
it_subtotals TYPE ty_t_tree_subtotals
CHANGING cr_salvtree TYPE REF TO cl_salv_tree
cs_legacy TYPE ty_s_compose_legacy_info
cv_top TYPE i
cv_left TYPE i
cv_firstrow TYPE flag ,
compose_process_tree_s_recsub
IMPORTING ir_salv_node_parent TYPE REF TO cl_salv_node
it_fcat_lvc TYPE lvc_t_fcat
EXPORTING ev_leaf TYPE flag
CHANGING cs_outtab_line TYPE any
cr_salvtree TYPE REF TO cl_salv_tree
ct_subtotals TYPE ty_t_tree_subtotals ,
compose_process_grid
IMPORTING is_parent_data TYPE ty_s_compose_data
is_parent_context_ref TYPE any
is_data TYPE ty_s_compose_data
CHANGING cs_legacy TYPE ty_s_compose_legacy_info
cs_parent_legacy TYPE ty_s_compose_legacy_info ,
compose_process_grid_r
IMPORTING iv_parent_level TYPE any
ir_parent_context TYPE any
iv_maxlevel TYPE any
iv_maxsubpattern TYPE any
is_grid_layout TYPE ty_s_grid_layout
CHANGING ct_rowstructure TYPE ty_t_grid_rowstructure
cs_legacy TYPE ty_s_compose_legacy_info
cv_top TYPE i
cv_left TYPE i
cv_subpattern TYPE any
cv_firstcall TYPE flag ,
get_appearance_req
IMPORTING is_parent_context_ref TYPE any
iv_apr_relpath TYPE any
iv_apr_offset TYPE any
iv_apr_match TYPE any
RETURNING value(rv_required) TYPE flag ,
get_value_simple
IMPORTING is_parent_context_ref TYPE any
iv_relpath TYPE any
iv_offset TYPE any
iv_match TYPE any
EXPORTING ev_value TYPE any ,
get_value
IMPORTING is_parent_context_ref TYPE any
iv_shift_val_relpath TYPE any
iv_val_relpath TYPE any
iv_val_sub_req TYPE any DEFAULT space
iv_val_sub_col TYPE any DEFAULT space
iv_val_sub_row TYPE any DEFAULT 0
iv_val_offset TYPE any DEFAULT 0
iv_val_match TYPE any DEFAULT 0
iv_val_convert TYPE any
iv_fullpath TYPE any
value(is_ctxt_prop) TYPE lcl_context=>ty_s_properties
OPTIONAL
RETURNING value(rv_value) TYPE string ,
get_icon_rawdata
IMPORTING iv_icon TYPE any "icon_d
RETURNING value(rv_rawdata) TYPE xstring ,
shift_relpath
CHANGING cv_relpath TYPE any ,
salv_node_get_children
IMPORTING ir_salv_node TYPE REF TO cl_salv_node
RETURNING value(rt_nodes) TYPE salv_t_nodes .
tech_presets_rt_load( ) .
r_exceltemplate->bufferization_patterns( t_patternarea ) .
DATA:
ls_properties TYPE ty_s_properties .
ls_data-hierarchy-child = v_root_id .
msg_init( ) .
compose_recurs( EXPORTING is_parent_data = ls_data
is_parent_context_ref = iv_context_ref
CHANGING cs_parent_legacy = ls_legacy ) .
msg_show( ) .
progressbar( iv_percentage = 80
iv_text = v_text-t197 ) . " -->> text: Writing of data to
XLSX-file
ENDMETHOD . "constructor
METHOD free .
super->free( ).
ENDMETHOD . "free
METHOD get_rawdata .
rv_rawdata = r_excelruntime->rawdata_get( ) .
ENDMETHOD . "get_rawdata
METHOD get_extension .
rv_extension = r_excelruntime->v_extension .
ENDMETHOD . "get_extension
METHOD pbo .
ENDMETHOD . "pbo
METHOD postprocessing .
DATA:
ls_properties TYPE ty_s_properties ,
lt_vbs_tables_tab TYPE ty_t_vbs_tables_tab .
FIELD-SYMBOLS:
<ls_vbs_tables_tab> TYPE ty_s_vbs_tables_tab ,
<lt_context_tab> TYPE ANY TABLE .
IF <ls_vbs_tables_tab>-cb_relpath IS INITIAL .
ASSIGN iv_context_ref TO <lt_context_tab> .
ELSE .
ASSIGN COMPONENT <ls_vbs_tables_tab>-cb_relpath
OF STRUCTURE iv_context_ref TO <lt_context_tab> .
CHECK <lt_context_tab> IS ASSIGNED .
ENDIF .
*------ process
r_excelruntime->postprocessing( EXPORTING iv_startup_macro = iv_startup_macro
CHANGING cv_vbs_code = ls_properties-
postproc_vbs_code
ct_vbs_tables_tab = lt_vbs_tables_tab
) .
ENDMETHOD . "postprocessing
METHOD compose_recurs .
DATA:
ls_data TYPE ty_s_compose_data ,
lv_id_next TYPE snode-id .
lv_id_next = is_parent_data-hierarchy-child .
DO .
CLEAR ls_data .
IF ls_data-properties-comp_type IN it_comp_type_filter[] .
IF ls_data-hierarchy-next IS INITIAL .
EXIT .
ELSE .
lv_id_next = ls_data-hierarchy-next .
ENDIF .
ENDDO .
ENDMETHOD . "compose_recurs
METHOD compose_process .
DATA:
ls_legacy TYPE ty_s_compose_legacy_info ,
lv_progress_text TYPE ty_char100 .
* progress indicator
IF v_step GE 654 .
v_step = 0 .
lv_progress_text = v_proc .
CONDENSE lv_progress_text NO-GAPS .
progressbar( iv_percentage = 0
iv_text = lv_progress_text ) .
ENDIF .
ADD 1 TO v_step .
ADD 1 TO v_proc .
* preset a fullpath
ls_legacy-cb_fullpath = get_fullpath( iv_parent_fullpath = cs_parent_legacy-
cb_fullpath
iv_relpath = cs_data-properties-
cb_relpath ) .
* preset shifted values
cs_data-shift_relpath = cs_data-properties-cb_relpath .
cs_data-shift_apr_relpath = cs_data-properties-cb_apr_relpath .
cs_data-shift_val_relpath = cs_data-properties-cb_val_relpath .
cs_data-shift_cellrng_relpath = cs_data-properties-cb_cellrng_relpath .
shift_relpath( CHANGING cv_relpath = cs_data-shift_relpath ) .
shift_relpath( CHANGING cv_relpath = cs_data-shift_apr_relpath ) .
shift_relpath( CHANGING cv_relpath = cs_data-shift_val_relpath ) .
shift_relpath( CHANGING cv_relpath = cs_data-shift_cellrng_relpath ) .
* component processing
CASE cs_data-properties-comp_type .
WHEN c_comp_type-root .
CLEAR ls_legacy-cb_fullpath .
CLEAR ls_legacy-shift_fullpath .
WHEN c_comp_type-loopstep .
compose_process_loopstep(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_comp_type-pattern .
compose_process_pattern(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_comp_type-respattern .
CASE cs_data-properties-tb_respattern_place .
WHEN c_respattern_place-before_subarea .
compose_process_respattern_b(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_respattern_place-after_subarea .
compose_process_respattern_a(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
ENDCASE .
WHEN c_comp_type-field .
compose_process_field(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_comp_type-drawing .
compose_process_drawing(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_comp_type-chart .
compose_process_chart(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_comp_type-folder .
compose_process_folder(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_comp_type-tree .
compose_process_tree(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN c_comp_type-grid .
compose_process_grid(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = cs_data
CHANGING
cs_legacy = ls_legacy
cs_parent_legacy = cs_parent_legacy ).
WHEN OTHERS.
ENDCASE.
DATA:
lv_new_rows TYPE i ,
lv_new_columns TYPE i .
lv_new_rows = ls_legacy-tb_area_top + ls_legacy-tb_area_rows -
cs_parent_legacy-tb_area_top .
lv_new_columns = ls_legacy-tb_area_left + ls_legacy-tb_area_columns -
cs_parent_legacy-tb_area_left .
IF cs_parent_legacy-tb_area_rows LT lv_new_rows .
cs_parent_legacy-tb_area_rows = lv_new_rows .
ENDIF .
IF cs_parent_legacy-tb_area_columns LT lv_new_columns .
cs_parent_legacy-tb_area_columns = lv_new_columns .
ENDIF .
ENDMETHOD . "compose_process
METHOD compose_process_sheet .
DATA:
lv_sheetname_template TYPE string ,
lv_sheetname_target TYPE string ,
ls_sheets TYPE lcl_excel=>ty_s_sheets ,
lv_val_fullpath TYPE string ,
lv_shift_val_relpath TYPE string ,
lv_hidden TYPE flag ,
ls_sheetprotection TYPE ty_s_sheetprotection ,
ls_sheetprotection_flags TYPE ty_s_sheetprotection_flags ,
lv_sheetprotection_flags TYPE string .
FIELD-SYMBOLS:
<context_ref> TYPE ANY .
lv_sheetname_target =
get_value(
is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = is_data-shift_val_relpath
iv_val_relpath = is_data-properties-cb_val_relpath
iv_val_sub_req = is_data-properties-cb_val_sub_req
iv_val_sub_col = is_data-properties-cb_val_sub_col
iv_val_sub_row = is_data-properties-cb_val_sub_row
iv_val_offset = is_data-properties-cb_val_offset
iv_val_match = is_data-properties-cb_val_match
iv_val_convert = is_data-properties-cb_val_convert
iv_fullpath = lv_val_fullpath ) .
IF lv_sheetname_target IS INITIAL .
lv_sheetname_target = lv_sheetname_template .
ENDIF .
IF is_data-properties-tb_sheetstate IS NOT INITIAL .
lv_hidden = abap_on .
ENDIF .
DO 1 TIMES .
CHECK ls_sheetprotection-mode EQ c_sheetprotection_mode-from_context
AND ls_sheetprotection-cb_val_relpath IS NOT INITIAL .
lv_shift_val_relpath = ls_sheetprotection-cb_val_relpath .
shift_relpath( CHANGING cv_relpath = lv_shift_val_relpath ) .
lv_sheetprotection_flags =
get_value(
is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_shift_val_relpath
iv_val_relpath = ls_sheetprotection-cb_val_relpath
iv_val_convert = space
iv_fullpath = lv_val_fullpath ) .
CLEAR ls_sheetprotection_flags .
ls_sheetprotection_flags = lv_sheetprotection_flags .
ENDDO .
lv_sheetname_target =
r_excelruntime->begin_sheet(
iv_sheetname = lv_sheetname_target
iv_hidden = lv_hidden
iv_ixml_doc = ls_sheets-ixml_doc
it_sheetrels = ls_sheets-sheetdata_template-t_sheetrels[]
iv_summarybelow = ls_sheets-summarybelow
iv_summaryright = ls_sheets-summaryright
iv_active = ls_sheets-active
is_sheetprotection = ls_sheetprotection
is_vmldrawings = ls_sheets-sheetdata_template-vmldrawings ) .
cs_legacy-tb_area_top = 0 .
cs_legacy-tb_area_left = 0 .
cs_legacy-tb_area_rows = 0 .
cs_legacy-tb_area_columns = 0 .
cs_legacy-tb_area_prew_left = 0 .
cs_legacy-tb_area_prew_top = 0 .
cs_legacy-tb_area_prew_rows = 0 .
cs_legacy-tb_area_prew_columns = 0 .
cs_legacy-tb_printtitles_r = is_data-properties-tb_printtitles_r .
cs_legacy-tb_printtitles_c = is_data-properties-tb_printtitles_c .
cs_legacy-summarybelow = ls_sheets-summarybelow .
cs_legacy-summaryright = ls_sheets-summaryright .
ENDMETHOD . "compose_process_sheet
METHOD compose_process_loopstep .
DATA:
lv_lines TYPE i ,
lv_from TYPE i ,
lv_to TYPE i ,
lv_tabix TYPE i ,
lv_seqnr TYPE c LENGTH 20 ,
lr_descr_tab TYPE REF TO cl_abap_tabledescr .
FIELD-SYMBOLS:
<cb_reftable_any> TYPE ANY TABLE ,
<cb_reftable_std> TYPE STANDARD TABLE ,
<context_ref> TYPE ANY .
* binding with reference of context data (it only can have a type of nested
table)
IF is_data-shift_relpath IS INITIAL .
ASSIGN is_parent_context_ref TO <cb_reftable_any> .
ELSE .
ASSIGN COMPONENT is_data-shift_relpath
OF STRUCTURE is_parent_context_ref TO <cb_reftable_any> .
CHECK <cb_reftable_any> IS ASSIGNED .
ENDIF .
DEFINE mk_process .
* preset runtime path
add 1 to lv_seqnr . condense lv_seqnr no-gaps .
concatenate cs_legacy-cb_fullpath '(' lv_seqnr ')' into cs_legacy-rt_path_1 .
IF is_data-properties-cb_loop_from LE 1 .
lv_from = 1 .
ELSEIF is_data-properties-cb_loop_from BETWEEN 2 AND lv_lines .
lv_from = is_data-properties-cb_loop_from .
ELSE .
EXIT .
ENDIF .
* kind of table ?
lr_descr_tab ?= cl_abap_typedescr=>describe_by_data( <cb_reftable_any> ) .
IF lr_descr_tab IS BOUND
AND lr_descr_tab->table_kind EQ cl_abap_tabledescr=>tablekind_std .
* process Sorted table
ASSIGN <cb_reftable_any> TO <cb_reftable_std> .
LOOP AT <cb_reftable_std> ASSIGNING <context_ref> FROM lv_from TO lv_to .
mk_process .
ENDLOOP .
ELSE .
* process Other table
LOOP AT <cb_reftable_any> ASSIGNING <context_ref> .
ADD 1 TO lv_tabix .
CHECK lv_tabix BETWEEN lv_from AND lv_to .
mk_process .
ENDLOOP .
ENDIF .
ENDMETHOD . "compose_process_loopstep
METHOD compose_process_pattern .
DATA:
ls_patterns TYPE lcl_excel=>ty_s_patterns ,
lv_printtitles_r_flag TYPE flag ,
lv_printtitles_c_flag TYPE flag .
FIELD-SYMBOLS:
<context_ref> TYPE ANY .
* finalize pattetn
cs_legacy-tb_area_rows = ls_patterns-rows .
cs_legacy-tb_area_columns = ls_patterns-columns .
CASE is_data-properties-tb_direction .
WHEN c_tb_direction-up2down .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top +
cs_parent_legacy-tb_area_prew_rows .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left .
WHEN c_tb_direction-left2right .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left +
cs_parent_legacy-tb_area_prew_columns .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top .
ENDCASE .
cs_parent_legacy-tb_area_prew_top = cs_legacy-tb_area_prew_top =
cs_legacy-tb_area_top .
cs_parent_legacy-tb_area_prew_rows = cs_legacy-tb_area_prew_rows =
cs_legacy-tb_area_rows .
cs_parent_legacy-tb_area_prew_left = cs_legacy-tb_area_prew_left =
cs_legacy-tb_area_left .
cs_parent_legacy-tb_area_prew_columns = cs_legacy-tb_area_prew_columns =
cs_legacy-tb_area_columns .
ENDMETHOD . "compose_process_pattern
METHOD compose_process_respattern_a .
DATA:
ls_patterns TYPE lcl_excel=>ty_s_patterns ,
lv_printtitles_r_flag TYPE flag ,
lv_printtitles_c_flag TYPE flag ,
ls_comp_type_filter TYPE ty_s_comp_type_rng ,
lt_comp_type_filter TYPE ty_t_comp_type_rng ,
lv_tb_area_top TYPE i ,
lv_tb_area_left TYPE i ,
lv_tb_area_rows TYPE i ,
lv_tb_area_columns TYPE i ,
lv_tb_mergecells TYPE ty_char1 .
FIELD-SYMBOLS:
<context_ref> TYPE ANY .
lv_tb_mergecells = is_data-properties-tb_mergecells .
*================================================================================
* print Sub-patterns
*================================================================================
cs_legacy-tb_area_rows = 0 .
cs_legacy-tb_area_columns = 0 .
CASE is_data-properties-tb_direction .
WHEN c_tb_direction-up2down .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top +
cs_parent_legacy-tb_area_prew_rows .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left .
WHEN c_tb_direction-left2right .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left +
cs_parent_legacy-tb_area_prew_columns .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top .
ENDCASE .
cs_legacy-tb_area_prew_left = cs_legacy-tb_area_left .
cs_legacy-tb_area_prew_top = cs_legacy-tb_area_top .
cs_legacy-tb_area_prew_rows = cs_legacy-tb_area_rows .
cs_legacy-tb_area_prew_columns = cs_legacy-tb_area_columns .
lv_tb_area_top = cs_legacy-tb_area_top .
lv_tb_area_left = cs_legacy-tb_area_left .
lv_tb_area_rows = cs_legacy-tb_area_rows .
lv_tb_area_columns = cs_legacy-tb_area_columns .
*================================================================================
* print a resizable (spanned) pattern
*================================================================================
CASE is_data-properties-tb_mergecells .
WHEN c_tb_mergecells-cols .
cs_legacy-tb_area_top = cs_legacy-tb_area_top +
cs_legacy-tb_area_rows .
WHEN c_tb_mergecells-rows .
cs_legacy-tb_area_left = cs_legacy-tb_area_left +
cs_legacy-tb_area_columns .
ENDCASE .
* finalize pattetn
cs_legacy-tb_area_rows = ls_patterns-rows .
cs_legacy-tb_area_columns = ls_patterns-columns .
CASE lv_tb_mergecells .
WHEN c_tb_mergecells-cols . cs_legacy-tb_area_columns = cs_legacy-
tb_area_columns + lv_tb_area_columns - 1 .
WHEN c_tb_mergecells-rows . cs_legacy-tb_area_rows = cs_legacy-
tb_area_rows + lv_tb_area_rows - 1 .
ENDCASE .
cs_parent_legacy-tb_area_prew_top = cs_legacy-tb_area_prew_top =
cs_legacy-tb_area_top .
cs_parent_legacy-tb_area_prew_rows = cs_legacy-tb_area_prew_rows =
cs_legacy-tb_area_rows .
cs_parent_legacy-tb_area_prew_left = cs_legacy-tb_area_prew_left =
cs_legacy-tb_area_left .
cs_parent_legacy-tb_area_prew_columns = cs_legacy-tb_area_prew_columns =
cs_legacy-tb_area_columns .
*================================================================================
* merge Rows/Columns in the Spanned pattern
*================================================================================
CASE lv_tb_mergecells .
WHEN c_tb_mergecells-rows .
r_excelruntime->finalize_respattern(
EXPORTING iv_rowspan = abap_on
iv_top = cs_legacy-tb_area_top
iv_left = cs_legacy-tb_area_left
iv_rows = lv_tb_area_rows
iv_columns = cs_legacy-tb_area_columns
iv_autofitmerged_r = is_data-properties-tb_autofitmerged_r
iv_autofitmerged_c = is_data-properties-
tb_autofitmerged_c ) .
WHEN c_tb_mergecells-cols .
r_excelruntime->finalize_respattern(
EXPORTING iv_colspan = abap_on
iv_top = cs_legacy-tb_area_top
iv_left = cs_legacy-tb_area_left
iv_rows = cs_legacy-tb_area_rows
iv_columns = lv_tb_area_columns
iv_autofitmerged_r = is_data-properties-tb_autofitmerged_r
iv_autofitmerged_c = is_data-properties-
tb_autofitmerged_c ) .
ENDCASE .
ENDMETHOD . "compose_process_respattern_a
METHOD compose_process_respattern_b .
DATA:
ls_patterns TYPE lcl_excel=>ty_s_patterns ,
lv_printtitles_r_flag TYPE flag ,
lv_printtitles_c_flag TYPE flag ,
ls_comp_type_filter TYPE ty_s_comp_type_rng ,
lt_comp_type_filter TYPE ty_t_comp_type_rng ,
lv_tb_area_top TYPE i ,
lv_tb_area_left TYPE i ,
lv_tb_area_rows TYPE i ,
lv_tb_area_columns TYPE i ,
lv_tb_mergecells TYPE ty_char1 .
FIELD-SYMBOLS:
<context_ref> TYPE ANY .
*================================================================================
* print a resizable (spanned) pattern
*================================================================================
* finalize pattetn
cs_legacy-tb_area_rows = ls_patterns-rows .
cs_legacy-tb_area_columns = ls_patterns-columns .
CASE is_data-properties-tb_direction .
WHEN c_tb_direction-up2down .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top +
cs_parent_legacy-tb_area_prew_rows .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left .
WHEN c_tb_direction-left2right .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left +
cs_parent_legacy-tb_area_prew_columns .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top .
ENDCASE .
lv_tb_area_top = cs_legacy-tb_area_top .
lv_tb_area_left = cs_legacy-tb_area_left .
lv_tb_area_rows = cs_legacy-tb_area_rows .
lv_tb_area_columns = cs_legacy-tb_area_columns .
*================================================================================
* print Sub-patterns
*================================================================================
lv_tb_mergecells = is_data-properties-tb_mergecells .
CASE is_data-properties-tb_mergecells .
WHEN c_tb_mergecells-cols .
cs_legacy-tb_area_top = cs_legacy-tb_area_top +
cs_legacy-tb_area_rows .
WHEN c_tb_mergecells-rows .
cs_legacy-tb_area_left = cs_legacy-tb_area_left +
cs_legacy-tb_area_columns .
ENDCASE .
cs_legacy-tb_area_rows = 0 .
cs_legacy-tb_area_columns = 0 .
cs_legacy-tb_area_prew_left = cs_legacy-tb_area_left .
cs_legacy-tb_area_prew_top = cs_legacy-tb_area_top .
cs_legacy-tb_area_prew_rows = cs_legacy-tb_area_rows .
cs_legacy-tb_area_prew_columns = cs_legacy-tb_area_columns .
* CASE is_data-properties-tb_mergecells .
* WHEN c_tb_mergecells-cols .
* cs_legacy-tb_area_top = cs_legacy-tb_area_top +
* cs_legacy-tb_area_rows .
* cs_legacy-tb_area_columns = 0 .
*
* WHEN c_tb_mergecells-rows .
* cs_legacy-tb_area_left = cs_legacy-tb_area_left +
* cs_legacy-tb_area_columns .
* cs_legacy-tb_area_rows = 0 .
* ENDCASE .
*
*
* cs_legacy-tb_area_prew_left = cs_legacy-tb_area_left .
* cs_legacy-tb_area_prew_top = cs_legacy-tb_area_top .
* cs_legacy-tb_area_prew_rows = cs_legacy-tb_area_rows .
* cs_legacy-tb_area_prew_columns = cs_legacy-tb_area_columns .
*
* cs_legacy-tb_area_rows = 0 .
* cs_legacy-tb_area_columns = 0 .
cs_legacy-tb_area_top = lv_tb_area_top .
cs_legacy-tb_area_left = lv_tb_area_left .
CASE lv_tb_mergecells .
WHEN c_tb_mergecells-cols . ADD lv_tb_area_rows TO cs_legacy-tb_area_rows .
WHEN c_tb_mergecells-rows . ADD lv_tb_area_columns TO cs_legacy-
tb_area_columns .
ENDCASE .
cs_parent_legacy-tb_area_prew_top = cs_legacy-tb_area_prew_top =
cs_legacy-tb_area_top .
cs_parent_legacy-tb_area_prew_rows = cs_legacy-tb_area_prew_rows =
cs_legacy-tb_area_rows .
cs_parent_legacy-tb_area_prew_left = cs_legacy-tb_area_prew_left =
cs_legacy-tb_area_left .
cs_parent_legacy-tb_area_prew_columns = cs_legacy-tb_area_prew_columns =
cs_legacy-tb_area_columns .
*================================================================================
* merge Rows/Columns in the Spanned pattern
*================================================================================
CASE lv_tb_mergecells .
WHEN c_tb_mergecells-rows .
r_excelruntime->finalize_respattern(
EXPORTING iv_rowspan = abap_on
iv_top = lv_tb_area_top
iv_left = lv_tb_area_left
iv_rows = cs_legacy-tb_area_prew_rows
iv_columns = lv_tb_area_columns
iv_autofitmerged_r = is_data-properties-tb_autofitmerged_r
iv_autofitmerged_c = is_data-properties-
tb_autofitmerged_c ) .
WHEN c_tb_mergecells-cols .
r_excelruntime->finalize_respattern(
EXPORTING iv_colspan = abap_on
iv_top = lv_tb_area_top
iv_left = lv_tb_area_left
iv_rows = lv_tb_area_rows
iv_columns = cs_legacy-tb_area_prew_columns
iv_autofitmerged_r = is_data-properties-tb_autofitmerged_r
iv_autofitmerged_c = is_data-properties-
tb_autofitmerged_c ) .
ENDCASE .
ENDMETHOD . "compose_process_respattern_b
METHOD compose_process_folder .
DATA:
lv_nopgbrk_beg_x TYPE i ,
lv_nopgbrk_end_x TYPE i ,
lv_nopgbrk_beg_y TYPE i ,
lv_nopgbrk_end_y TYPE i ,
lv_cellrng_name TYPE string .
FIELD-SYMBOLS:
<context_ref> TYPE ANY .
cs_legacy-tb_area_rows = 0 .
cs_legacy-tb_area_columns = 0 .
CASE is_data-properties-tb_direction .
WHEN c_tb_direction-up2down .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top +
cs_parent_legacy-tb_area_prew_rows .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left .
WHEN c_tb_direction-left2right .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left +
cs_parent_legacy-tb_area_prew_columns .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top .
ENDCASE .
cs_legacy-tb_area_prew_left = cs_legacy-tb_area_left .
cs_legacy-tb_area_prew_top = cs_legacy-tb_area_top .
cs_legacy-tb_area_prew_rows = cs_legacy-tb_area_rows .
cs_legacy-tb_area_prew_columns = cs_legacy-tb_area_columns .
IF is_data-properties-tb_nopgbrk_top IS INITIAL .
CLEAR: lv_nopgbrk_beg_y ,
lv_nopgbrk_end_y .
ELSE .
lv_nopgbrk_beg_y = cs_legacy-tb_area_top + 1 - is_data-properties-
tb_nopgbrk_top_shift .
lv_nopgbrk_end_y = cs_legacy-tb_area_top + cs_legacy-tb_area_rows .
ENDIF .
* finalize folder
r_excelruntime->finalize_folder(
iv_left = cs_legacy-tb_area_left
iv_top = cs_legacy-tb_area_top
iv_rows = cs_legacy-tb_area_rows
iv_columns = cs_legacy-tb_area_columns
iv_rowgroup_level = cs_legacy-tb_rowgroup_level
iv_colgroup_level = cs_legacy-tb_colgroup_level
iv_rowgroup_clp = is_data-properties-tb_rowgroup_clp
iv_colgroup_clp = is_data-properties-tb_colgroup_clp
iv_nopgbrk_top = is_data-properties-tb_nopgbrk_top
iv_nopgbrk_left = is_data-properties-tb_nopgbrk_left
iv_nopgbrk_beg_x = lv_nopgbrk_beg_x
iv_nopgbrk_end_x = lv_nopgbrk_end_x
iv_nopgbrk_beg_y = lv_nopgbrk_beg_y
iv_nopgbrk_end_y = lv_nopgbrk_end_y
iv_pgbrk_top = is_data-properties-tb_pgbrk_top
iv_pgbrk_left = is_data-properties-tb_pgbrk_left
iv_cellrng_name = lv_cellrng_name ) .
cs_parent_legacy-tb_area_prew_top = cs_legacy-tb_area_prew_top =
cs_legacy-tb_area_top .
cs_parent_legacy-tb_area_prew_rows = cs_legacy-tb_area_prew_rows =
cs_legacy-tb_area_rows .
cs_parent_legacy-tb_area_prew_left = cs_legacy-tb_area_prew_left =
cs_legacy-tb_area_left .
cs_parent_legacy-tb_area_prew_columns = cs_legacy-tb_area_prew_columns =
cs_legacy-tb_area_columns .
ENDMETHOD . "compose_process_folder
METHOD compose_process_field .
DATA:
lv_value TYPE string ,
lv_val_fullpath TYPE string ,
lr_valvld_attr_table_dummy TYPE REF TO data,
lv_valvld_fullpath TYPE string ,
lv_valvld_relpath_shift TYPE string ,
lv_valvld_for1_value_x TYPE flag ,
lv_valvld_for1_value TYPE string ,
lv_valvld_for2_value_x TYPE flag ,
lv_valvld_for2_value TYPE string .
FIELD-SYMBOLS:
<valvld_attr_table> TYPE ANY TABLE .
DO 1 TIMES .
CHECK is_data-properties-cb_val_relpath IS NOT INITIAL .
lv_val_fullpath = get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-
cb_val_relpath ) .
lv_value =
get_value( is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = is_data-shift_val_relpath
iv_val_relpath = is_data-properties-cb_val_relpath
iv_val_sub_req = is_data-properties-cb_val_sub_req
iv_val_sub_col = is_data-properties-cb_val_sub_col
iv_val_sub_row = is_data-properties-cb_val_sub_row
iv_val_offset = is_data-properties-cb_val_offset
iv_val_match = is_data-properties-cb_val_match
iv_val_convert = is_data-properties-cb_val_convert
iv_fullpath = lv_val_fullpath ) .
ENDDO .
DO 1 TIMES .
CHECK is_data-properties-cb_valvld_attr_relpath IS NOT INITIAL .
lv_valvld_relpath_shift = is_data-properties-cb_valvld_attr_relpath .
shift_relpath( CHANGING cv_relpath = lv_valvld_relpath_shift ) .
IF lv_valvld_relpath_shift IS INITIAL .
ASSIGN is_parent_context_ref TO <valvld_attr_table> .
ELSE .
ASSIGN COMPONENT lv_valvld_relpath_shift
OF STRUCTURE is_parent_context_ref TO <valvld_attr_table> .
ENDIF .
ENDDO .
IF <valvld_attr_table> IS NOT ASSIGNED .
CREATE DATA lr_valvld_attr_table_dummy TYPE lvc_t_fcat .
ASSIGN lr_valvld_attr_table_dummy->* TO <valvld_attr_table> .
ENDIF .
DO 1 TIMES .
CHECK is_data-properties-cb_valvld_for1_relpath IS NOT INITIAL .
lv_valvld_for1_value_x = abap_on .
lv_valvld_fullpath =
get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-cb_valvld_for1_relpath ) .
lv_valvld_relpath_shift = is_data-properties-cb_valvld_for1_relpath .
shift_relpath( CHANGING cv_relpath = lv_valvld_relpath_shift ) .
lv_valvld_for1_value =
get_value( is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_valvld_relpath_shift
iv_val_relpath = is_data-properties-cb_valvld_for1_relpath
iv_val_convert = space
iv_fullpath = lv_valvld_fullpath ) .
ENDDO .
DO 1 TIMES .
CHECK is_data-properties-cb_valvld_for2_relpath IS NOT INITIAL .
lv_valvld_for2_value_x = abap_on .
lv_valvld_fullpath =
get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-cb_valvld_for2_relpath ) .
lv_valvld_relpath_shift = is_data-properties-cb_valvld_for2_relpath .
shift_relpath( CHANGING cv_relpath = lv_valvld_relpath_shift ) .
lv_valvld_for2_value =
get_value( is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_valvld_relpath_shift
iv_val_relpath = is_data-properties-cb_valvld_for2_relpath
iv_val_convert = space
iv_fullpath = lv_valvld_fullpath ) .
ENDDO .
DATA:
lv_x TYPE i ,
lv_y TYPE i ,
lv_tb_area_top TYPE i ,
lv_tb_area_left TYPE i ,
lv_value_tmp TYPE string ,
lv_offset TYPE i ,
lv_strlen TYPE i .
lv_y = 1 .
DO .
lv_x = 1 .
DO .
lv_tb_area_top = is_data-properties-tb_area_top + lv_y - 1 .
lv_tb_area_left = is_data-properties-tb_area_left + lv_x - 1 .
lv_value_tmp = lv_value+lv_offset(1) .
r_excelruntime->begin_field(
iv_top = lv_tb_area_top
iv_left = lv_tb_area_left
iv_value = lv_value_tmp ) .
ADD 1 TO lv_offset .
lv_x = lv_x + 1 + is_data-properties-tb_val_matr_c .
IF lv_x GT is_data-properties-tb_area_columns
OR lv_offset GE lv_strlen .
EXIT . " -->> do
ENDIF .
ENDDO .
IF lv_y GT is_data-properties-tb_area_rows
OR lv_offset GE lv_strlen .
EXIT . " -->> do
ENDIF .
ENDDO .
ELSE .
r_excelruntime->begin_field(
iv_value = lv_value
iv_top = is_data-properties-tb_area_top
iv_left = is_data-properties-tb_area_left
iv_formula = is_data-properties-tb_val_formula
iv_rt_path_1 = cs_legacy-rt_path_1 " -->> runtime path
(for dataset subordination)
it_valvld_attr_table = <valvld_attr_table>
iv_valvld_for1_dataset_id = is_data-properties-
cb_valvld_for1_dataset_id
iv_valvld_for1_dataset_fld = is_data-properties-
cb_valvld_for1_dataset_fld
iv_valvld_for1_value = lv_valvld_for1_value
iv_valvld_for1_value_x = lv_valvld_for1_value_x
iv_valvld_for2_value = lv_valvld_for2_value
iv_valvld_for2_value_x = lv_valvld_for2_value_x ) .
ENDIF .
ENDMETHOD . "compose_process_field
METHOD compose_process_drawing .
DATA:
ls_drawings_tmp TYPE lcl_excel=>ty_s_drawings_tmp ,
lv_shift_relpath TYPE string ,
lv_fullpath TYPE string .
IF is_data-properties-tb_drwstat_flag IS INITIAL .
* dynamic Drawing (Rawdata from context's field)
CHECK is_data-properties-cb_val_relpath IS NOT INITIAL .
ls_drawings_tmp-media_rawdata = get_value(
is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = is_data-shift_val_relpath
iv_val_relpath = is_data-properties-cb_val_relpath
iv_val_sub_req = is_data-properties-cb_val_sub_req
iv_val_sub_col = is_data-properties-cb_val_sub_col
iv_val_sub_row = is_data-properties-cb_val_sub_row
iv_val_offset = is_data-properties-cb_val_offset
iv_val_match = is_data-properties-cb_val_match
iv_val_convert = is_data-properties-cb_val_convert
iv_fullpath = lv_fullpath ) .
CHECK ls_drawings_tmp-media_rawdata IS NOT INITIAL .
ls_drawings_tmp-drawing_type = lcl_excel=>c_drawing_type-bitmap .
ELSE .
* static Drawing (Presence in the template)
CHECK is_data-properties-tb_drwstat_name IS NOT INITIAL .
ls_drawings_tmp =
r_exceltemplate->get_drawing_static(
iv_sheetname = cs_parent_legacy-tb_sheetname
iv_drwstat_name = is_data-properties-tb_drwstat_name ) .
CHECK ls_drawings_tmp IS NOT INITIAL .
ENDIF .
ls_drawings_tmp-top = is_data-properties-tb_area_top .
ls_drawings_tmp-left = is_data-properties-tb_area_left .
ls_drawings_tmp-rows = is_data-properties-tb_area_rows .
ls_drawings_tmp-columns = is_data-properties-tb_area_columns .
IF is_data-properties-drawing_size EQ c_drawing_size-from_context .
lv_fullpath = get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-
drawing_size_h_relpath ) .
lv_shift_relpath = is_data-properties-drawing_size_h_relpath .
shift_relpath( CHANGING cv_relpath = lv_shift_relpath ) .
ls_drawings_tmp-drawing_size_h = get_value(
is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_shift_relpath
iv_val_relpath = is_data-properties-drawing_size_h_relpath
iv_val_convert = space
iv_fullpath = lv_fullpath ) .
lv_shift_relpath = is_data-properties-drawing_size_w_relpath .
shift_relpath( CHANGING cv_relpath = lv_shift_relpath ) .
ls_drawings_tmp-drawing_size_w = get_value(
is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_shift_relpath
iv_val_relpath = is_data-properties-drawing_size_w_relpath
iv_val_convert = space
iv_fullpath = lv_fullpath ) .
IF ls_drawings_tmp-drawing_size_h GT 0
AND ls_drawings_tmp-drawing_size_w GT 0 .
CLEAR ls_drawings_tmp-rows .
CLEAR ls_drawings_tmp-columns .
ELSE .
CLEAR ls_drawings_tmp-drawing_size_h .
CLEAR ls_drawings_tmp-drawing_size_w .
ENDIF .
ENDIF .
ENDMETHOD . "compose_process_drawing
METHOD compose_process_chart .
DATA:
ls_drawings_tmp TYPE lcl_excel=>ty_s_drawings_tmp ,
lv_chart_title_fullpath TYPE string ,
lv_chart_title_relpath_shift TYPE string ,
lv_shift_relpath TYPE string ,
lv_fullpath TYPE string .
FIELD-SYMBOLS:
<context_ref> TYPE ANY .
ls_drawings_tmp =
r_exceltemplate->get_drawing_static(
iv_sheetname = cs_parent_legacy-tb_sheetname
iv_drwstat_name = is_data-properties-tb_drwstat_name ) .
CHECK ls_drawings_tmp IS NOT INITIAL .
* dataset
ls_drawings_tmp-chart_id = is_data-properties-id .
ls_drawings_tmp-dataset_id = is_data-properties-dataset_id .
ls_drawings_tmp-dataset_rt_path_1 = cs_legacy-rt_path_1 . " -->> runtime path
(for dataset subordination)
ls_drawings_tmp-dataset_series_tab[] = conv_dataset_series_st( is_data-
properties-dataset_series ) .
* title: chart
IF is_data-properties-chart_title IS NOT INITIAL .
ls_drawings_tmp-chart_title = is_data-properties-chart_title .
lv_chart_title_fullpath =
get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-chart_title_relpath ) .
lv_chart_title_relpath_shift = is_data-properties-chart_title_relpath .
shift_relpath( CHANGING cv_relpath = lv_chart_title_relpath_shift ) .
ls_drawings_tmp-chart_title_tx =
get_value( is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_chart_title_relpath_shift
iv_val_relpath = is_data-properties-chart_title_relpath
iv_val_convert = space
iv_fullpath = lv_chart_title_fullpath ) .
ENDIF .
lv_chart_title_fullpath =
get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-chart_catax_title_relpath ) .
lv_chart_title_relpath_shift = is_data-properties-chart_catax_title_relpath .
shift_relpath( CHANGING cv_relpath = lv_chart_title_relpath_shift ) .
ls_drawings_tmp-chart_catax_title_tx =
get_value( is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_chart_title_relpath_shift
iv_val_relpath = is_data-properties-
chart_catax_title_relpath
iv_val_convert = space
iv_fullpath = lv_chart_title_fullpath ) .
ENDIF .
lv_chart_title_fullpath =
get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-chart_valax_title_relpath ) .
lv_chart_title_relpath_shift = is_data-properties-chart_valax_title_relpath .
shift_relpath( CHANGING cv_relpath = lv_chart_title_relpath_shift ) .
ls_drawings_tmp-chart_valax_title_tx =
get_value( is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_chart_title_relpath_shift
iv_val_relpath = is_data-properties-
chart_valax_title_relpath
iv_val_convert = space
iv_fullpath = lv_chart_title_fullpath ) .
ENDIF .
* title: series
ls_drawings_tmp-chart_series_title = is_data-properties-chart_series_title .
* layout
ls_drawings_tmp-top = is_data-properties-tb_area_top .
ls_drawings_tmp-left = is_data-properties-tb_area_left .
ls_drawings_tmp-rows = is_data-properties-tb_area_rows .
ls_drawings_tmp-columns = is_data-properties-tb_area_columns .
IF is_data-properties-drawing_size EQ c_drawing_size-from_context .
lv_fullpath = get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-
drawing_size_h_relpath ) .
lv_shift_relpath = is_data-properties-drawing_size_h_relpath .
shift_relpath( CHANGING cv_relpath = lv_shift_relpath ) .
ls_drawings_tmp-drawing_size_h = get_value(
is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_shift_relpath
iv_val_relpath = is_data-properties-drawing_size_h_relpath
iv_val_convert = space
iv_fullpath = lv_fullpath ) .
lv_shift_relpath = is_data-properties-drawing_size_w_relpath .
shift_relpath( CHANGING cv_relpath = lv_shift_relpath ) .
ls_drawings_tmp-drawing_size_w = get_value(
is_parent_context_ref = is_parent_context_ref
iv_shift_val_relpath = lv_shift_relpath
iv_val_relpath = is_data-properties-drawing_size_w_relpath
iv_val_convert = space
iv_fullpath = lv_fullpath ) .
IF ls_drawings_tmp-drawing_size_h GT 0
AND ls_drawings_tmp-drawing_size_w GT 0 .
CLEAR ls_drawings_tmp-rows .
CLEAR ls_drawings_tmp-columns .
ELSE .
CLEAR ls_drawings_tmp-drawing_size_h .
CLEAR ls_drawings_tmp-drawing_size_w .
ENDIF .
ENDIF .
* pass to excel
r_excelruntime->begin_chart( is_drawings_tmp = ls_drawings_tmp ) .
ENDMETHOD . "compose_process_chart
METHOD compose_process_tree .
DATA:
ls_patterns TYPE lcl_excel=>ty_s_patterns ,
ls_patterns_a TYPE lcl_excel=>ty_s_patterns ,
lt_patterns_a TYPE lcl_excel=>ty_t_patterns ,
ls_patterns_b TYPE lcl_excel=>ty_s_patterns ,
lt_patterns_b TYPE lcl_excel=>ty_t_patterns ,
ls_cells TYPE lcl_excel=>ty_s_cells ,
ls_colprop TYPE lcl_excel=>ty_s_colprop ,
ls_rowprop TYPE lcl_excel=>ty_s_rowprop ,
ls_mergecells TYPE ty_s_mergecells_rel ,
lv_x TYPE i ,
lv_y TYPE i ,
lv_i TYPE i ,
lv_times_row TYPE i ,
lv_index_row TYPE i ,
lv_times_col TYPE i ,
lv_index_col TYPE i ,
lv_index_rel TYPE i ,
lv_index_rel2 TYPE i ,
lv_index TYPE i ,
ls_tree_layout TYPE ty_s_tree_layout ,
lv_value(30000) TYPE c ,
lv_subrc TYPE sysubrc .
DATA:
lr_alvtree TYPE ty_r_tree ,
lt_fcat_lvc TYPE lvc_t_fcat ,
lr_outtab_table TYPE REF TO data ,
lr_outtab_line TYPE REF TO data ,
lt_subtotals TYPE ty_t_tree_subtotals ,
lv_top TYPE i ,
lv_left TYPE i ,
lv_value_top TYPE i ,
lv_value_left TYPE i ,
lt_expanded_nodes TYPE lvc_t_nkey ,
lv_hierarchy_column_width TYPE i ,
lv_firstrow TYPE flag VALUE abap_on .
DATA:
lv_fullpath TYPE string ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties .
FIELD-SYMBOLS:
<context_ref> TYPE ANY ,
<outtab_table> TYPE STANDARD TABLE ,
<outtab_line> TYPE ANY ,
<fcat_lvc> TYPE lvc_s_fcat .
*======================================================================
* redirect to CL_SALV_TREE processing (if required)
*======================================================================
lv_fullpath = get_fullpath( iv_parent_fullpath = cs_legacy-cb_fullpath
iv_relpath = is_data-properties-
cb_val_relpath ) .
IF ls_ctxt_prop-comp_type EQ lcl_context=>c_comp_type-tree_s .
compose_process_tree_s(
EXPORTING
is_parent_data = is_parent_data
is_parent_context_ref = is_parent_context_ref
is_data = is_data
CHANGING
cs_legacy = cs_legacy
cs_parent_legacy = cs_parent_legacy ).
RETURN .
ENDIF .
*======================================================================
* binding with reference of context data
*======================================================================
IF is_data-shift_val_relpath IS INITIAL .
ASSIGN is_parent_context_ref TO <context_ref> .
ELSE .
ASSIGN COMPONENT is_data-shift_val_relpath
OF STRUCTURE is_parent_context_ref TO <context_ref> .
CHECK <context_ref> IS ASSIGNED .
ENDIF .
TRY .
lr_alvtree ?= <context_ref> .
CATCH cx_sy_move_cast_error
cx_sy_dyn_call_illegal_method .
EXIT .
ENDTRY .
conv_container_fs(
EXPORTING iv_field = is_data-properties-tree_layout
IMPORTING es_structure = ls_tree_layout ) .
*======================================================================
* prepare expanded nodes, fieldcatalog, subtotals and coordinates
*======================================================================
lr_outtab_table = lr_alvtree->get_outtab( ) .
lr_alvtree->get_expanded_nodes( CHANGING ct_expanded_nodes = lt_expanded_nodes
EXCEPTIONS OTHERS = 0 ) .
SORT lt_expanded_nodes .
compose_process_tree_recsub(
EXPORTING iv_parent_node_key = lr_alvtree->c_virtual_root_node
it_fcat_lvc = lt_fcat_lvc
CHANGING cr_alvtree = lr_alvtree
cs_outtab_line = <outtab_line>
ct_subtotals = lt_subtotals ) .
CASE is_data-properties-tb_direction .
WHEN c_tb_direction-up2down .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top +
cs_parent_legacy-tb_area_prew_rows .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left .
WHEN c_tb_direction-left2right .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left +
cs_parent_legacy-tb_area_prew_columns .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top .
ENDCASE .
cs_legacy-tb_area_rows = 0 .
cs_legacy-tb_area_columns = 0 .
*======================================================================
* prepare patterns (get a content of pattern area)
*======================================================================
ls_patterns =
r_exceltemplate->get_pattern( iv_sheetname = cs_parent_legacy-tb_sheetname
iv_id = is_data-properties-id ) .
* lr_alvtree->get_hierarchy_header_width( IMPORTING e_width =
lv_hierarchy_column_width ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
CASE ls_tree_layout-rotate .
WHEN space .
* A-PATTERNS
lv_times_row = ls_patterns-rows .
CLEAR ls_patterns_a .
ls_patterns_a-id = lv_index_row - 1 .
ls_patterns_a-left = ls_patterns-left .
ls_patterns_a-top = ls_patterns-top + lv_index_row - 1 .
ls_patterns_a-rows = 1 .
lv_x = ls_patterns-left .
lv_y = ls_patterns-top + lv_index_row - 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_a-t_mergecells .
ELSE .
ls_mergecells-columns = 1 .
ENDIF .
DO ls_mergecells-columns TIMES .
IF sy-index GT 1 .
ADD 1 TO lv_x .
ENDIF .
READ TABLE ls_patterns-t_cells INTO ls_cells WITH KEY y = lv_y x =
lv_x BINARY SEARCH .
IF sy-subrc NE 0 .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
ENDIF .
INSERT ls_cells INTO TABLE ls_patterns_a-t_cells .
CLEAR ls_colprop .
READ TABLE ls_patterns-t_colprop INTO ls_colprop WITH KEY x = lv_x
BINARY SEARCH .
ls_colprop-x = lv_x .
IF ls_tree_layout-col_othr_width EQ 0
OR lv_hierarchy_column_width EQ 0 .
IF sy-subrc EQ 0 .
INSERT ls_colprop INTO TABLE ls_patterns_a-t_colprop .
ENDIF .
ELSE .
ls_colprop-customwidth = '1' .
ls_colprop-width = lv_i = ls_tree_layout-col_othr_width *
lv_hierarchy_column_width .
CONDENSE ls_colprop-width NO-GAPS .
INSERT ls_colprop INTO TABLE ls_patterns_a-t_colprop .
ENDIF .
ENDDO .
ls_patterns_a-columns = ls_mergecells-columns .
APPEND ls_patterns_a TO lt_patterns_a .
ENDDO .
* B-PATTERNS
lv_times_row = ls_patterns-rows .
lv_times_col = LINES( lt_fcat_lvc ) .
CLEAR ls_patterns_b .
ls_patterns_b-id = lv_index_row - 1 .
ls_patterns_b-left = ls_patterns-left + ls_patterns_a-columns .
ls_patterns_b-top = ls_patterns-top + lv_index_row - 1 .
ls_patterns_b-rows = 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
lv_index_col = 0 .
lv_index_rel = 0 .
lv_index_rel2 = ls_patterns_a-columns - 1 .
lv_x = ls_patterns-left + lv_index_rel2 .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_b-t_mergecells .
ELSE .
ls_mergecells-columns = 1 .
ENDIF .
DO ls_mergecells-columns TIMES .
lv_index = sy-index .
IF lv_index GT 1 .
ADD 1 TO lv_index_rel .
ADD 1 TO lv_index_rel2 .
ADD 1 TO lv_x .
ENDIF .
IF lv_index_rel2 LT ls_patterns-columns .
CLEAR ls_cells .
READ TABLE ls_patterns-t_cells INTO ls_cells WITH KEY y = lv_y x =
lv_x BINARY SEARCH .
ENDIF .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
INSERT ls_cells INTO TABLE ls_patterns_b-t_cells .
IF lv_index_rel2 LT ls_patterns-columns .
CLEAR ls_colprop .
READ TABLE ls_patterns-t_colprop INTO ls_colprop WITH KEY x = lv_x
BINARY SEARCH .
lv_subrc = sy-subrc .
ENDIF .
IF lv_index GT 1
OR ls_tree_layout-col_othr_width EQ 0
OR <fcat_lvc>-outputlen EQ 0 .
IF lv_subrc EQ 0 .
ls_colprop-x = lv_x .
INSERT ls_colprop INTO TABLE ls_patterns_b-t_colprop .
ENDIF .
ELSE .
ls_colprop-x = lv_x .
ls_colprop-customwidth = '1' .
ls_colprop-width = lv_i = ls_tree_layout-col_othr_width *
<fcat_lvc>-outputlen .
CONDENSE ls_colprop-width NO-GAPS .
INSERT ls_colprop INTO TABLE ls_patterns_b-t_colprop .
ENDIF .
ENDDO .
* A-PATTERNS
lv_times_row = ls_patterns-columns .
CLEAR ls_patterns_a .
ls_patterns_a-id = lv_index_row - 1 .
ls_patterns_a-left = ls_patterns-left + lv_index_row - 1 .
ls_patterns_a-top = ls_patterns-top .
ls_patterns_a-columns = 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_a-t_mergecells .
ELSE .
ls_mergecells-rows = 1 .
ENDIF .
DO ls_mergecells-rows TIMES .
IF sy-index GT 1 .
ADD 1 TO lv_y .
ENDIF .
CLEAR ls_rowprop .
READ TABLE ls_patterns-t_rowprop INTO ls_rowprop WITH TABLE KEY y =
lv_y .
ls_rowprop-y = lv_y .
IF ls_tree_layout-col_othr_width EQ 0
OR lv_hierarchy_column_width EQ 0 .
IF sy-subrc EQ 0 .
INSERT ls_rowprop INTO TABLE ls_patterns_a-t_rowprop .
ENDIF .
ELSE .
ls_rowprop-customheight = '1' .
ls_rowprop-ht = lv_i = ls_tree_layout-col_othr_width *
lv_hierarchy_column_width .
CONDENSE ls_rowprop-ht NO-GAPS .
INSERT ls_rowprop INTO TABLE ls_patterns_a-t_rowprop .
ENDIF .
ENDDO .
ls_patterns_a-rows = ls_mergecells-rows .
APPEND ls_patterns_a TO lt_patterns_a .
ENDDO .
* B-PATTERNS
lv_times_row = ls_patterns-columns .
lv_times_col = LINES( lt_fcat_lvc ) .
CLEAR ls_patterns_b .
ls_patterns_b-id = lv_index_row - 1 .
ls_patterns_b-left = ls_patterns-left + lv_index_row - 1 .
ls_patterns_b-top = ls_patterns-top + ls_patterns_a-rows .
ls_patterns_b-columns = 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
lv_index_col = 0 .
lv_index_rel = 0 .
lv_index_rel2 = ls_patterns_a-rows - 1 .
lv_y = ls_patterns-top + lv_index_rel2 .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_b-t_mergecells .
ELSE .
ls_mergecells-rows = 1 .
ENDIF .
DO ls_mergecells-rows TIMES .
lv_index = sy-index .
IF lv_index GT 1 .
ADD 1 TO lv_index_rel .
ADD 1 TO lv_index_rel2 .
ADD 1 TO lv_y .
ENDIF .
IF lv_index_rel2 LT ls_patterns-rows .
CLEAR ls_cells .
READ TABLE ls_patterns-t_cells INTO ls_cells WITH KEY y = lv_y x =
lv_x BINARY SEARCH .
ENDIF .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
INSERT ls_cells INTO TABLE ls_patterns_b-t_cells .
IF lv_index_rel2 LT ls_patterns-rows .
CLEAR ls_rowprop .
READ TABLE ls_patterns-t_rowprop INTO ls_rowprop WITH TABLE KEY y =
lv_y .
lv_subrc = sy-subrc .
ENDIF .
IF lv_index GT 1
OR ls_tree_layout-col_othr_width EQ 0
OR <fcat_lvc>-outputlen EQ 0 .
IF lv_subrc EQ 0 .
ls_rowprop-y = lv_y .
INSERT ls_rowprop INTO TABLE ls_patterns_b-t_rowprop .
ENDIF .
ELSE .
ls_rowprop-y = lv_y .
ls_rowprop-customheight = '1' .
ls_rowprop-ht = lv_i = ls_tree_layout-col_othr_width * <fcat_lvc>-
outputlen .
CONDENSE ls_rowprop-ht NO-GAPS .
INSERT ls_rowprop INTO TABLE ls_patterns_b-t_rowprop .
ENDIF .
ENDDO .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_top .
WHEN OTHERS . ADD 1 TO lv_left .
ENDCASE .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_left .
WHEN OTHERS . ADD 1 TO lv_top .
ENDCASE .
* lv_value_top = ls_patterns_a-top .
* lv_value_left = ls_patterns_a-left .
*
* r_excelruntime->begin_field(
* EXPORTING iv_top = lv_value_top
* iv_left = lv_value_left
* iv_value = lv_value ) .
* other columns
IF ls_tree_layout-col_othr IS NOT INITIAL
AND lt_fcat_lvc[] IS NOT INITIAL .
r_excelruntime->begin_pattern( is_patterns = ls_patterns_b ) .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_left .
WHEN OTHERS . ADD 1 TO lv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = lv_top
cv_left = lv_left ) .
CASE ls_tree_layout-rotate .
WHEN space . lv_left = lv_left + ls_patterns_b-columns - 1 .
WHEN OTHERS . lv_top = lv_top + ls_patterns_b-rows - 1 .
ENDCASE .
ENDIF .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_left .
WHEN OTHERS . ADD 1 TO lv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = lv_top
cv_left = lv_left ) .
CASE ls_tree_layout-rotate .
WHEN space . lv_left = lv_left + ls_patterns_a-columns - 1 .
WHEN OTHERS . lv_top = lv_top + ls_patterns_a-rows - 1 .
ENDCASE .
ENDIF .
ENDIF .
*======================================================================
* positions
*======================================================================
compose_process_tree_recurs(
EXPORTING iv_parent_node_key = lr_alvtree->c_virtual_root_node
iv_parent_level = 0
is_parent_patterns_a = ls_patterns_a
is_parent_patterns_b = ls_patterns_b
it_patterns_a = lt_patterns_a
it_patterns_b = lt_patterns_b
it_fcat_lvc = lt_fcat_lvc
is_tree_layout = ls_tree_layout
it_expanded_nodes = lt_expanded_nodes
it_subtotals = lt_subtotals
CHANGING cr_alvtree = lr_alvtree
cs_outtab_line = <outtab_line>
cs_legacy = cs_legacy
cv_top = lv_top
cv_left = lv_left
cv_firstrow = lv_firstrow ) .
IF cs_legacy-tb_area_rows LT 0 .
cs_legacy-tb_area_rows = 0 .
ENDIF .
IF cs_legacy-tb_area_columns LT 0 .
cs_legacy-tb_area_columns = 0 .
ENDIF .
cs_parent_legacy-tb_area_prew_top = cs_legacy-tb_area_prew_top =
cs_legacy-tb_area_top .
cs_parent_legacy-tb_area_prew_rows = cs_legacy-tb_area_prew_rows =
cs_legacy-tb_area_rows .
cs_parent_legacy-tb_area_prew_left = cs_legacy-tb_area_prew_left =
cs_legacy-tb_area_left .
cs_parent_legacy-tb_area_prew_columns = cs_legacy-tb_area_prew_columns =
cs_legacy-tb_area_columns . .
ENDMETHOD . "compose_process_tree
METHOD compose_process_tree_recurs .
DATA:
lt_nodes TYPE lvc_t_nkey ,
lv_node_key TYPE lvc_nkey ,
lv_node_text TYPE lvc_value ,
ls_node_layout TYPE lvc_s_layn ,
lv_level TYPE i ,
lv_rows TYPE i ,
lv_columns TYPE i ,
lv_begin_top TYPE i ,
lv_begin_left TYPE i ,
lv_pattern_top TYPE i ,
lv_pattern_left TYPE i ,
lv_value_top TYPE i ,
lv_value_left TYPE i ,
lv_offset TYPE i ,
ls_patterns_a TYPE lcl_excel=>ty_s_patterns ,
ls_patterns_b TYPE lcl_excel=>ty_s_patterns ,
lv_rowgroup_level TYPE i ,
lv_colgroup_level TYPE i ,
lv_collapsed TYPE flag ,
lv_value(30000) TYPE c ,
lv_formula TYPE flag ,
ls_fcat_lvc TYPE lvc_s_fcat ,
lr_tdescr TYPE REF TO cl_abap_typedescr ,
ls_subtotals TYPE ty_s_tree_subtotals ,
ls_drawings TYPE lcl_excel=>ty_s_drawings_tmp .
FIELD-SYMBOLS:
<value> TYPE ANY .
lv_level = iv_parent_level + 1 .
* prepare patterns
READ TABLE it_patterns_a INTO ls_patterns_a WITH KEY id = lv_level .
IF sy-subrc NE 0 .
ls_patterns_a = is_parent_patterns_a .
ENDIF .
READ TABLE it_patterns_b INTO ls_patterns_b WITH KEY id = lv_level .
IF sy-subrc NE 0 .
ls_patterns_b = is_parent_patterns_b .
ENDIF .
IF cv_firstrow EQ abap_off .
CASE is_tree_layout-rotate .
WHEN space . CLEAR: ls_patterns_a-t_colprop[], ls_patterns_b-t_colprop[]
.
WHEN OTHERS . CLEAR: ls_patterns_a-t_rowprop[], ls_patterns_b-t_rowprop[]
.
ENDCASE .
ENDIF .
* process nodes
LOOP AT lt_nodes INTO lv_node_key .
cr_alvtree->get_outtab_line(
EXPORTING i_node_key = lv_node_key
IMPORTING e_outtab_line = cs_outtab_line
e_node_text = lv_node_text
es_node_layout = ls_node_layout ) .
CASE is_tree_layout-rotate .
WHEN space .
ADD 1 TO cv_top .
cv_left = cs_legacy-tb_area_left - 1 .
lv_begin_top = cv_top .
lv_begin_left = cs_legacy-tb_area_left .
WHEN OTHERS .
cv_top = cs_legacy-tb_area_top - 1 .
ADD 1 TO cv_left .
lv_begin_top = cs_legacy-tb_area_top .
lv_begin_left = cv_left .
ENDCASE .
CLEAR lv_value .
IF lv_level GT 1 .
lv_offset = ( lv_level - 1 ) * is_tree_layout-col_hier_shift .
lv_value+lv_offset = lv_node_text .
ELSE .
lv_value = lv_node_text .
ENDIF .
lv_value_top = ls_patterns_a-top .
lv_value_left = ls_patterns_a-left .
r_excelruntime->begin_field(
EXPORTING iv_top = lv_value_top
iv_left = lv_value_left
iv_value = lv_value ) .
CASE is_tree_layout-rotate .
WHEN space . ADD 1 TO cv_left .
WHEN OTHERS . ADD 1 TO cv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = cv_top
cv_left = cv_left ) .
CASE is_tree_layout-rotate .
WHEN space . cv_left = cv_left + ls_patterns_a-columns - 1 .
WHEN OTHERS . cv_top = cv_top + ls_patterns_a-rows - 1 .
ENDCASE .
ENDIF .
* other columns
CLEAR lv_pattern_top .
CLEAR lv_pattern_left .
IF is_tree_layout-col_othr IS NOT INITIAL
AND it_fcat_lvc[] IS NOT INITIAL .
r_excelruntime->begin_pattern( is_patterns = ls_patterns_b ) .
CLEAR lv_value .
cl_gui_alv_grid=>cell_display(
EXPORTING is_data = cs_outtab_line
i_int_value = <value>
IMPORTING e_ext_value = lv_value
CHANGING cs_fieldcat = ls_fcat_lvc ) .
CASE lr_tdescr->type_kind .
WHEN cl_abap_datadescr=>typekind_packed
OR cl_abap_datadescr=>typekind_int .
CASE v_dcpfm .
WHEN space .TRANSLATE lv_value USING '. ,.'. "1.234.567,89
WHEN 'X' . TRANSLATE lv_value USING ', '. "1,234,567.89
WHEN 'Y' . TRANSLATE lv_value USING ',.'. "1 234 567,89
ENDCASE .
IF <value> LT 0 .
REPLACE FIRST OCCURRENCE OF '-' IN lv_value WITH space .
CONCATENATE '-' lv_value INTO lv_value .
ENDIF .
WHEN OTHERS .
CHECK lv_value IS NOT INITIAL .
SHIFT lv_value LEFT DELETING LEADING space .
ENDCASE .
DO 1 TIMES .
CLEAR lv_formula .
CHECK is_tree_layout-allow_formulas IS NOT INITIAL .
CHECK lv_value IS NOT INITIAL .
CHECK lv_value(1) EQ '=' .
lv_formula = abap_on .
ENDDO .
r_excelruntime->begin_field(
EXPORTING iv_top = lv_value_top
iv_left = lv_value_left
iv_value = lv_value
iv_formula = lv_formula ) .
ENDLOOP .
CASE is_tree_layout-rotate .
WHEN space . ADD 1 TO cv_left .
WHEN OTHERS . ADD 1 TO cv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = cv_top
cv_left = cv_left ) .
CASE is_tree_layout-rotate .
WHEN space . cv_left = cv_left + ls_patterns_b-columns - 1 .
WHEN OTHERS . cv_top = cv_top + ls_patterns_b-rows - 1 .
ENDCASE .
ENDIF .
CLEAR lv_value .
IF lv_level GT 1 .
lv_offset = ( lv_level - 1 ) * is_tree_layout-col_hier_shift .
lv_value+lv_offset = lv_node_text .
ELSE .
lv_value = lv_node_text .
ENDIF .
lv_value_top = ls_patterns_a-top .
lv_value_left = ls_patterns_a-left .
r_excelruntime->begin_field(
EXPORTING iv_top = lv_value_top
iv_left = lv_value_left
iv_value = lv_value ) .
CASE is_tree_layout-rotate .
WHEN space . ADD 1 TO cv_left .
WHEN OTHERS . ADD 1 TO cv_top .
ENDCASE .
CASE is_tree_layout-rotate .
WHEN space .
IF cv_left LT cs_legacy-tb_area_left .
cv_left = cs_legacy-tb_area_left .
ENDIF .
WHEN OTHERS .
IF cv_top LT cs_legacy-tb_area_top .
cv_top = cs_legacy-tb_area_top .
ENDIF .
ENDCASE .
*----------------------------------------------
CASE is_tree_layout-rotate .
WHEN space .
CHECK lv_rows GE 1 .
ADD 1 TO lv_begin_top .
lv_rowgroup_level = lv_level .
WHEN OTHERS .
CHECK lv_columns GE 1 .
ADD 1 TO lv_begin_left .
lv_colgroup_level = lv_level .
ENDCASE .
CASE is_tree_layout-stru_exp_coll .
WHEN c_stru_exp_coll-dynamic .
READ TABLE it_expanded_nodes TRANSPORTING NO FIELDS
WITH KEY table_line = lv_node_key BINARY SEARCH .
CASE sy-subrc .
WHEN 0 . lv_collapsed = abap_off .
WHEN OTHERS . lv_collapsed = abap_on .
ENDCASE .
WHEN c_stru_exp_coll-collapsed . lv_collapsed = abap_on .
WHEN c_stru_exp_coll-expanded . lv_collapsed = abap_off .
WHEN OTHERS . EXIT .
ENDCASE .
r_excelruntime->finalize_folder(
EXPORTING iv_left = lv_begin_left
iv_top = lv_begin_top
iv_rows = lv_rows
iv_columns = lv_columns
iv_rowgroup_level = lv_rowgroup_level
iv_colgroup_level = lv_colgroup_level
iv_rowgroup_clp = lv_collapsed
iv_colgroup_clp = lv_collapsed ) .
ENDDO .
ENDLOOP .
ENDMETHOD . "compose_process_tree_recurs
METHOD compose_process_tree_recsub .
DATA:
lv_node_key TYPE lvc_nkey ,
lt_nodes TYPE lvc_t_nkey ,
lv_count TYPE i ,
l_dref_calc_tab TYPE REF TO data ,
l_dref_calc_wa TYPE REF TO data ,
l_dref_wa TYPE REF TO data ,
ls_subtotals TYPE ty_s_tree_subtotals .
FIELD-SYMBOLS:
<outtab_line> TYPE ANY ,
<calc_line> TYPE ANY ,
<calc_tab> TYPE STANDARD TABLE ,
<fcat_lvc> TYPE lvc_s_fcat ,
<f1> TYPE ANY ,
<f2> TYPE ANY ,
<f3> TYPE ANY ,
<f4> TYPE ANY .
cr_alvtree->get_outtab_line(
EXPORTING i_node_key = iv_parent_node_key
IMPORTING e_outtab_line = cs_outtab_line ) .
EXIT .
ELSE .
CLEAR ev_leaf .
* process nodes
LOOP AT lt_nodes INTO lv_node_key .
compose_process_tree_recsub(
EXPORTING iv_parent_node_key = lv_node_key
it_fcat_lvc = it_fcat_lvc
CHANGING cr_alvtree = cr_alvtree
cs_outtab_line = <calc_line>
ct_subtotals = ct_subtotals ) .
APPEND <calc_line> TO <calc_tab> .
ENDLOOP .
ENDIF .
* calculate level
CLEAR cs_outtab_line .
* calculate column
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5
conversion_errors = 5 .
CASE <fcat_lvc>-h_ftype .
WHEN 'MIN' . " -->> minimum
IF sy-tabix EQ 1
OR <f1> LT <f2> .
<f2> = <f1> .
ENDIF .
WHEN 'MAX' . " -->> maximum
IF sy-tabix EQ 1
OR <f1> GT <f2> .
<f2> = <f1> .
ENDIF .
WHEN 'AVG' . " -->> average
ADD <f1> TO <f2> .
ADD 1 TO lv_count .
WHEN 'SUM' " -->> total
OR space .
ADD <f1> TO <f2> .
ENDCASE .
ENDCATCH .
IF sy-subrc EQ 5 .
CLEAR <f2> .
EXIT .
ENDIF .
* get currency
IF <fcat_lvc>-cfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-cfieldname OF STRUCTURE <calc_line> TO
<f3> .
ASSIGN COMPONENT <fcat_lvc>-cfieldname OF STRUCTURE cs_outtab_line TO
<f4> .
IF <f4> IS INITIAL .
MOVE <f3> TO <f4> .
ELSE .
IF <f4> NE <f3>
AND <f3> IS NOT INITIAL .
MOVE '***' TO <f4> .
ENDIF .
ENDIF .
ENDIF .
* get quantity
IF <fcat_lvc>-qfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-qfieldname OF STRUCTURE <calc_line> TO
<f3> .
ASSIGN COMPONENT <fcat_lvc>-qfieldname OF STRUCTURE cs_outtab_line TO
<f4> .
IF <f4> IS INITIAL .
MOVE <f3> TO <f4> .
ELSE .
IF <f4> NE <f3>
AND <f3> IS NOT INITIAL .
MOVE '***' TO <f4> .
ENDIF .
ENDIF .
ENDIF .
ENDLOOP .
* calcualte avg
IF <fcat_lvc>-h_ftype EQ 'AVG' .
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5
conversion_errors = 5 .
<f2> = <f2> / lv_count .
ENDCATCH .
ENDIF .
* subtotals
DO 1 TIMES .
ASSIGN COMPONENT <fcat_lvc>-fieldname OF STRUCTURE cs_outtab_line TO <f2> .
CHECK <f2> IS ASSIGNED .
CLEAR ls_subtotals .
ls_subtotals-nodekey = iv_parent_node_key .
ls_subtotals-fieldname = <fcat_lvc>-fieldname .
ls_subtotals-fieldvalue = <f2> .
INSERT ls_subtotals INTO TABLE ct_subtotals .
ENDDO .
DO 1 TIMES .
CHECK <fcat_lvc>-cfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-cfieldname OF STRUCTURE cs_outtab_line TO
<f2> .
CHECK <f2> IS ASSIGNED .
CLEAR ls_subtotals .
ls_subtotals-nodekey = iv_parent_node_key .
ls_subtotals-fieldname = <fcat_lvc>-cfieldname .
ls_subtotals-fieldvalue = <f2> .
INSERT ls_subtotals INTO TABLE ct_subtotals .
ENDDO .
DO 1 TIMES .
CHECK <fcat_lvc>-qfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-qfieldname OF STRUCTURE cs_outtab_line TO
<f2> .
CHECK <f2> IS ASSIGNED .
CLEAR ls_subtotals .
ls_subtotals-nodekey = iv_parent_node_key .
ls_subtotals-fieldname = <fcat_lvc>-qfieldname .
ls_subtotals-fieldvalue = <f2> .
INSERT ls_subtotals INTO TABLE ct_subtotals .
ENDDO .
ENDLOOP .
ENDMETHOD . "compose_process_tree_recsub
METHOD compose_process_tree_s .
DATA:
ls_patterns TYPE lcl_excel=>ty_s_patterns ,
ls_patterns_a TYPE lcl_excel=>ty_s_patterns ,
lt_patterns_a TYPE lcl_excel=>ty_t_patterns ,
ls_patterns_b TYPE lcl_excel=>ty_s_patterns ,
lt_patterns_b TYPE lcl_excel=>ty_t_patterns ,
ls_cells TYPE lcl_excel=>ty_s_cells ,
ls_colprop TYPE lcl_excel=>ty_s_colprop ,
ls_rowprop TYPE lcl_excel=>ty_s_rowprop ,
ls_mergecells TYPE ty_s_mergecells_rel ,
lv_x TYPE i ,
lv_y TYPE i ,
lv_i TYPE i ,
lv_times_row TYPE i ,
lv_index_row TYPE i ,
lv_times_col TYPE i ,
lv_index_col TYPE i ,
lv_index_rel TYPE i ,
lv_index_rel2 TYPE i ,
lv_index TYPE i ,
ls_tree_layout TYPE ty_s_tree_layout ,
lv_value(30000) TYPE c ,
lv_subrc TYPE sysubrc .
DATA:
lr_outtab_line TYPE REF TO data ,
lr_salvtree TYPE REF TO cl_salv_tree ,
lr_salv_nodes_all TYPE REF TO cl_salv_nodes ,
lr_salv_node_root TYPE REF TO cl_salv_node ,
lr_salv_columns_tree TYPE REF TO cl_salv_columns_tree ,
lr_salv_aggregations TYPE REF TO cl_salv_aggregations ,
lt_column_ref TYPE salv_t_column_ref ,
lt_nodes TYPE salv_t_nodes ,
lt_aggregation TYPE salv_t_aggregation ,
lt_fcat_lvc TYPE lvc_t_fcat ,
lt_subtotals TYPE ty_t_tree_subtotals ,
lv_top TYPE i ,
lv_left TYPE i ,
lv_value_top TYPE i ,
lv_value_left TYPE i ,
lt_expanded_nodes TYPE lvc_t_nkey ,
lv_hierarchy_column_width TYPE i ,
lv_firstrow TYPE flag VALUE abap_on .
DATA:
lv_fullpath TYPE string ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties .
FIELD-SYMBOLS:
<context_ref> TYPE ANY ,
<fcat_lvc> TYPE lvc_s_fcat ,
<outtab_line> TYPE ANY ,
<aggregation> TYPE salv_s_aggregation ,
<column_ref> TYPE salv_s_column_ref .
*======================================================================
* binding with reference of context data
*======================================================================
IF is_data-shift_val_relpath IS INITIAL .
ASSIGN is_parent_context_ref TO <context_ref> .
ELSE .
ASSIGN COMPONENT is_data-shift_val_relpath
OF STRUCTURE is_parent_context_ref TO <context_ref> .
CHECK <context_ref> IS ASSIGNED .
ENDIF .
TRY .
lr_salvtree ?= <context_ref> .
CATCH cx_sy_move_cast_error
cx_sy_dyn_call_illegal_method .
EXIT .
ENDTRY .
conv_container_fs(
EXPORTING iv_field = is_data-properties-tree_layout
IMPORTING es_structure = ls_tree_layout ) .
*======================================================================
* prepare expanded nodes, fieldcatalog, subtotals and coordinates
*======================================================================
* -->> fieldcatalog
IF is_gui_available( ) IS NOT INITIAL .
lr_salvtree->get_metadata( ) .
ENDIF .
lr_salv_columns_tree = lr_salvtree->get_columns( ) .
lr_salv_aggregations = lr_salvtree->get_aggregations( ) .
lt_fcat_lvc = cl_salv_controller_metadata=>get_tree_fieldcatalog(
r_columns = lr_salv_columns_tree
r_aggregations = lr_salv_aggregations ) .
lt_column_ref = lr_salv_columns_tree->get( ) .
IF <column_ref>-r_column->is_visible( ) IS INITIAL .
<fcat_lvc>-no_out = abap_on .
ELSE .
<fcat_lvc>-no_out = abap_off .
ENDIF .
<fcat_lvc>-outputlen = <column_ref>-r_column->get_output_length( ) .
<fcat_lvc>-tech = <column_ref>-r_column->is_technical( ) .
<fcat_lvc>-col_pos = lr_salv_columns_tree->get_column_position( columnname
= <column_ref>-columnname ) .
ENDLOOP .
DELETE lt_fcat_lvc WHERE tech IS NOT INITIAL .
DELETE lt_fcat_lvc WHERE no_out IS NOT INITIAL .
lt_aggregation[] = lr_salv_aggregations->get( ) .
LOOP AT lt_aggregation ASSIGNING <aggregation> .
READ TABLE lt_fcat_lvc ASSIGNING <fcat_lvc> WITH KEY fieldname =
<column_ref>-columnname .
CHECK sy-subrc EQ 0 .
CASE <aggregation>-r_aggregation->get( ) .
WHEN if_salv_c_aggregation=>total . <fcat_lvc>-h_ftype = 'SUM' .
<fcat_lvc>-do_sum = abap_on .
WHEN if_salv_c_aggregation=>minimum . <fcat_lvc>-h_ftype = 'MIN' .
<fcat_lvc>-do_sum = abap_on .
WHEN if_salv_c_aggregation=>maximum . <fcat_lvc>-h_ftype = 'MAX' .
<fcat_lvc>-do_sum = abap_on .
WHEN if_salv_c_aggregation=>average . <fcat_lvc>-h_ftype = 'AVG' .
<fcat_lvc>-do_sum = abap_on .
WHEN if_salv_c_aggregation=>none . <fcat_lvc>-h_ftype = '' .
<fcat_lvc>-do_sum = abap_off .
ENDCASE .
ENDLOOP .
* -->> subtotals
lr_outtab_line = lr_salv_node_root->get_data_row( ) .
ASSIGN lr_outtab_line->* TO <outtab_line> .
compose_process_tree_s_recsub(
EXPORTING ir_salv_node_parent = lr_salv_node_root
it_fcat_lvc = lt_fcat_lvc
CHANGING cs_outtab_line = <outtab_line>
cr_salvtree = lr_salvtree
ct_subtotals = lt_subtotals ) .
* -->> coordinates
CASE is_data-properties-tb_direction .
WHEN c_tb_direction-up2down .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top +
cs_parent_legacy-tb_area_prew_rows .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left .
WHEN c_tb_direction-left2right .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left +
cs_parent_legacy-tb_area_prew_columns .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top .
ENDCASE .
cs_legacy-tb_area_rows = 0 .
cs_legacy-tb_area_columns = 0 .
*======================================================================
* prepare patterns (get a content of pattern area)
*======================================================================
ls_patterns =
r_exceltemplate->get_pattern( iv_sheetname = cs_parent_legacy-tb_sheetname
iv_id = is_data-properties-id ) .
* lr_alvtree->get_hierarchy_header_width( IMPORTING e_width =
lv_hierarchy_column_width ) .
cl_gui_cfw=>flush( EXCEPTIONS OTHERS = 0 ) .
CASE ls_tree_layout-rotate .
WHEN space .
* A-PATTERNS
lv_times_row = ls_patterns-rows .
CLEAR ls_patterns_a .
ls_patterns_a-id = lv_index_row - 1 .
ls_patterns_a-left = ls_patterns-left .
ls_patterns_a-top = ls_patterns-top + lv_index_row - 1 .
ls_patterns_a-rows = 1 .
lv_x = ls_patterns-left .
lv_y = ls_patterns-top + lv_index_row - 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_a-t_mergecells .
ELSE .
ls_mergecells-columns = 1 .
ENDIF .
DO ls_mergecells-columns TIMES .
IF sy-index GT 1 .
ADD 1 TO lv_x .
ENDIF .
CLEAR ls_colprop .
READ TABLE ls_patterns-t_colprop INTO ls_colprop WITH KEY x = lv_x
BINARY SEARCH .
ls_colprop-x = lv_x .
IF ls_tree_layout-col_othr_width EQ 0
OR lv_hierarchy_column_width EQ 0 .
IF sy-subrc EQ 0 .
INSERT ls_colprop INTO TABLE ls_patterns_a-t_colprop .
ENDIF .
ELSE .
ls_colprop-customwidth = '1' .
ls_colprop-width = lv_i = ls_tree_layout-col_othr_width *
lv_hierarchy_column_width .
CONDENSE ls_colprop-width NO-GAPS .
INSERT ls_colprop INTO TABLE ls_patterns_a-t_colprop .
ENDIF .
ENDDO .
ls_patterns_a-columns = ls_mergecells-columns .
APPEND ls_patterns_a TO lt_patterns_a .
ENDDO .
* B-PATTERNS
lv_times_row = ls_patterns-rows .
lv_times_col = LINES( lt_fcat_lvc ) .
CLEAR ls_patterns_b .
ls_patterns_b-id = lv_index_row - 1 .
ls_patterns_b-left = ls_patterns-left + ls_patterns_a-columns .
ls_patterns_b-top = ls_patterns-top + lv_index_row - 1 .
ls_patterns_b-rows = 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
lv_index_col = 0 .
lv_index_rel = 0 .
lv_index_rel2 = ls_patterns_a-columns - 1 .
lv_x = ls_patterns-left + lv_index_rel2 .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_b-t_mergecells .
ELSE .
ls_mergecells-columns = 1 .
ENDIF .
DO ls_mergecells-columns TIMES .
lv_index = sy-index .
IF lv_index GT 1 .
ADD 1 TO lv_index_rel .
ADD 1 TO lv_index_rel2 .
ADD 1 TO lv_x .
ENDIF .
IF lv_index_rel2 LT ls_patterns-columns .
CLEAR ls_cells .
READ TABLE ls_patterns-t_cells INTO ls_cells WITH KEY y = lv_y x =
lv_x BINARY SEARCH .
ENDIF .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
INSERT ls_cells INTO TABLE ls_patterns_b-t_cells .
IF lv_index_rel2 LT ls_patterns-columns .
CLEAR ls_colprop .
READ TABLE ls_patterns-t_colprop INTO ls_colprop WITH KEY x = lv_x
BINARY SEARCH .
lv_subrc = sy-subrc .
ENDIF .
IF lv_index GT 1
OR ls_tree_layout-col_othr_width EQ 0
OR <fcat_lvc>-outputlen EQ 0 .
IF lv_subrc EQ 0 .
ls_colprop-x = lv_x .
INSERT ls_colprop INTO TABLE ls_patterns_b-t_colprop .
ENDIF .
ELSE .
ls_colprop-x = lv_x .
ls_colprop-customwidth = '1' .
ls_colprop-width = lv_i = ls_tree_layout-col_othr_width *
<fcat_lvc>-outputlen .
CONDENSE ls_colprop-width NO-GAPS .
INSERT ls_colprop INTO TABLE ls_patterns_b-t_colprop .
ENDIF .
ENDDO .
* A-PATTERNS
lv_times_row = ls_patterns-columns .
CLEAR ls_patterns_a .
ls_patterns_a-id = lv_index_row - 1 .
ls_patterns_a-left = ls_patterns-left + lv_index_row - 1 .
ls_patterns_a-top = ls_patterns-top .
ls_patterns_a-columns = 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_a-t_mergecells .
ELSE .
ls_mergecells-rows = 1 .
ENDIF .
DO ls_mergecells-rows TIMES .
IF sy-index GT 1 .
ADD 1 TO lv_y .
ENDIF .
CLEAR ls_rowprop .
READ TABLE ls_patterns-t_rowprop INTO ls_rowprop WITH TABLE KEY y =
lv_y .
ls_rowprop-y = lv_y .
IF ls_tree_layout-col_othr_width EQ 0
OR lv_hierarchy_column_width EQ 0 .
IF sy-subrc EQ 0 .
INSERT ls_rowprop INTO TABLE ls_patterns_a-t_rowprop .
ENDIF .
ELSE .
ls_rowprop-customheight = '1' .
ls_rowprop-ht = lv_i = ls_tree_layout-col_othr_width *
lv_hierarchy_column_width .
CONDENSE ls_rowprop-ht NO-GAPS .
INSERT ls_rowprop INTO TABLE ls_patterns_a-t_rowprop .
ENDIF .
ENDDO .
ls_patterns_a-rows = ls_mergecells-rows .
APPEND ls_patterns_a TO lt_patterns_a .
ENDDO .
* B-PATTERNS
lv_times_row = ls_patterns-columns .
lv_times_col = LINES( lt_fcat_lvc ) .
CLEAR ls_patterns_b .
ls_patterns_b-id = lv_index_row - 1 .
ls_patterns_b-left = ls_patterns-left + lv_index_row - 1 .
ls_patterns_b-top = ls_patterns-top + ls_patterns_a-rows .
ls_patterns_b-columns = 1 .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
lv_index_col = 0 .
lv_index_rel = 0 .
lv_index_rel2 = ls_patterns_a-rows - 1 .
lv_y = ls_patterns-top + lv_index_rel2 .
CLEAR ls_mergecells .
READ TABLE ls_patterns-t_mergecells INTO ls_mergecells
WITH KEY top = lv_y left = lv_x .
IF sy-subrc EQ 0 .
INSERT ls_mergecells INTO TABLE ls_patterns_b-t_mergecells .
ELSE .
ls_mergecells-rows = 1 .
ENDIF .
DO ls_mergecells-rows TIMES .
lv_index = sy-index .
IF lv_index GT 1 .
ADD 1 TO lv_index_rel .
ADD 1 TO lv_index_rel2 .
ADD 1 TO lv_y .
ENDIF .
IF lv_index_rel2 LT ls_patterns-rows .
CLEAR ls_cells .
READ TABLE ls_patterns-t_cells INTO ls_cells WITH KEY y = lv_y x =
lv_x BINARY SEARCH .
ENDIF .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
INSERT ls_cells INTO TABLE ls_patterns_b-t_cells .
IF lv_index_rel2 LT ls_patterns-rows .
CLEAR ls_rowprop .
READ TABLE ls_patterns-t_rowprop INTO ls_rowprop WITH TABLE KEY y =
lv_y .
lv_subrc = sy-subrc .
ENDIF .
IF lv_index GT 1
OR ls_tree_layout-col_othr_width EQ 0
OR <fcat_lvc>-outputlen EQ 0 .
IF lv_subrc EQ 0 .
ls_rowprop-y = lv_y .
INSERT ls_rowprop INTO TABLE ls_patterns_b-t_rowprop .
ENDIF .
ELSE .
ls_rowprop-y = lv_y .
ls_rowprop-customheight = '1' .
ls_rowprop-ht = lv_i = ls_tree_layout-col_othr_width * <fcat_lvc>-
outputlen .
CONDENSE ls_rowprop-ht NO-GAPS .
INSERT ls_rowprop INTO TABLE ls_patterns_b-t_rowprop .
ENDIF .
ENDDO .
*======================================================================
* header
*======================================================================
lv_top = cs_legacy-tb_area_top - 1 .
lv_left = cs_legacy-tb_area_left - 1 .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_top .
WHEN OTHERS . ADD 1 TO lv_left .
ENDCASE .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_left .
WHEN OTHERS . ADD 1 TO lv_top .
ENDCASE .
* lv_value_top = ls_patterns_a-top .
* lv_value_left = ls_patterns_a-left .
*
* r_excelruntime->begin_field(
* EXPORTING iv_top = lv_value_top
* iv_left = lv_value_left
* iv_value = lv_value ) .
* other columns
IF ls_tree_layout-col_othr IS NOT INITIAL
AND lt_fcat_lvc[] IS NOT INITIAL .
r_excelruntime->begin_pattern( is_patterns = ls_patterns_b ) .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_left .
WHEN OTHERS . ADD 1 TO lv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = lv_top
cv_left = lv_left ) .
CASE ls_tree_layout-rotate .
WHEN space . lv_left = lv_left + ls_patterns_b-columns - 1 .
WHEN OTHERS . lv_top = lv_top + ls_patterns_b-rows - 1 .
ENDCASE .
ENDIF .
CASE ls_tree_layout-rotate .
WHEN space . ADD 1 TO lv_left .
WHEN OTHERS . ADD 1 TO lv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = lv_top
cv_left = lv_left ) .
CASE ls_tree_layout-rotate .
WHEN space . lv_left = lv_left + ls_patterns_a-columns - 1 .
WHEN OTHERS . lv_top = lv_top + ls_patterns_a-rows - 1 .
ENDCASE .
ENDIF .
ENDIF .
*======================================================================
* positions
*======================================================================
compose_process_tree_s_recurs(
EXPORTING ir_salv_node_parent = lr_salv_node_root
iv_parent_level = 0
is_parent_patterns_a = ls_patterns_a
is_parent_patterns_b = ls_patterns_b
it_patterns_a = lt_patterns_a
it_patterns_b = lt_patterns_b
it_fcat_lvc = lt_fcat_lvc
is_tree_layout = ls_tree_layout
it_expanded_nodes = lt_expanded_nodes
it_subtotals = lt_subtotals
CHANGING cr_salvtree = lr_salvtree
cs_legacy = cs_legacy
cv_top = lv_top
cv_left = lv_left
cv_firstrow = lv_firstrow ) .
IF cs_legacy-tb_area_rows LT 0 .
cs_legacy-tb_area_rows = 0 .
ENDIF .
IF cs_legacy-tb_area_columns LT 0 .
cs_legacy-tb_area_columns = 0 .
ENDIF .
cs_parent_legacy-tb_area_prew_top = cs_legacy-tb_area_prew_top =
cs_legacy-tb_area_top .
cs_parent_legacy-tb_area_prew_rows = cs_legacy-tb_area_prew_rows =
cs_legacy-tb_area_rows .
cs_parent_legacy-tb_area_prew_left = cs_legacy-tb_area_prew_left =
cs_legacy-tb_area_left .
cs_parent_legacy-tb_area_prew_columns = cs_legacy-tb_area_prew_columns =
cs_legacy-tb_area_columns . .
ENDMETHOD . "compose_process_tree_s
METHOD compose_process_tree_s_recurs .
DATA:
ls_nodes TYPE salv_s_nodes ,
lt_nodes TYPE salv_t_nodes ,
lr_outtab_line TYPE REF TO data ,
lv_node_text TYPE lvc_value ,
lv_level TYPE i ,
lv_rows TYPE i ,
lv_columns TYPE i ,
lv_begin_top TYPE i ,
lv_begin_left TYPE i ,
lv_pattern_top TYPE i ,
lv_pattern_left TYPE i ,
lv_value_top TYPE i ,
lv_value_left TYPE i ,
lv_offset TYPE i ,
ls_patterns_a TYPE lcl_excel=>ty_s_patterns ,
ls_patterns_b TYPE lcl_excel=>ty_s_patterns ,
lv_rowgroup_level TYPE i ,
lv_colgroup_level TYPE i ,
lv_collapsed TYPE flag ,
lv_value(30000) TYPE c ,
lv_formula TYPE flag ,
ls_fcat_lvc TYPE lvc_s_fcat ,
lr_tdescr TYPE REF TO cl_abap_typedescr ,
ls_subtotals TYPE ty_s_tree_subtotals ,
ls_drawings TYPE lcl_excel=>ty_s_drawings_tmp .
FIELD-SYMBOLS:
<value> TYPE ANY ,
<outtab_line> TYPE ANY .
lv_level = iv_parent_level + 1 .
* prepare patterns
READ TABLE it_patterns_a INTO ls_patterns_a WITH KEY id = lv_level .
IF sy-subrc NE 0 .
ls_patterns_a = is_parent_patterns_a .
ENDIF .
READ TABLE it_patterns_b INTO ls_patterns_b WITH KEY id = lv_level .
IF sy-subrc NE 0 .
ls_patterns_b = is_parent_patterns_b .
ENDIF .
IF cv_firstrow EQ abap_off .
CASE is_tree_layout-rotate .
WHEN space . CLEAR: ls_patterns_a-t_colprop[], ls_patterns_b-t_colprop[]
.
WHEN OTHERS . CLEAR: ls_patterns_a-t_rowprop[], ls_patterns_b-t_rowprop[]
.
ENDCASE .
ENDIF .
* process nodes
LOOP AT lt_nodes INTO ls_nodes .
lv_node_text = ls_nodes-node->get_text( ) .
lr_outtab_line = ls_nodes-node->get_data_row( ) .
ASSIGN lr_outtab_line->* TO <outtab_line> .
CASE is_tree_layout-rotate .
WHEN space .
ADD 1 TO cv_top .
cv_left = cs_legacy-tb_area_left - 1 .
lv_begin_top = cv_top .
lv_begin_left = cs_legacy-tb_area_left .
WHEN OTHERS .
cv_top = cs_legacy-tb_area_top - 1 .
ADD 1 TO cv_left .
lv_begin_top = cs_legacy-tb_area_top .
lv_begin_left = cv_left .
ENDCASE .
CLEAR lv_value .
IF lv_level GT 1 .
lv_offset = ( lv_level - 1 ) * is_tree_layout-col_hier_shift .
lv_value+lv_offset = lv_node_text .
ELSE .
lv_value = lv_node_text .
ENDIF .
lv_value_top = ls_patterns_a-top .
lv_value_left = ls_patterns_a-left .
r_excelruntime->begin_field(
EXPORTING iv_top = lv_value_top
iv_left = lv_value_left
iv_value = lv_value ) .
CASE is_tree_layout-rotate .
WHEN space . ADD 1 TO cv_left .
WHEN OTHERS . ADD 1 TO cv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = cv_top
cv_left = cv_left ) .
CASE is_tree_layout-rotate .
WHEN space . cv_left = cv_left + ls_patterns_a-columns - 1 .
WHEN OTHERS . cv_top = cv_top + ls_patterns_a-rows - 1 .
ENDCASE .
ENDIF .
* other columns
CLEAR lv_pattern_top .
CLEAR lv_pattern_left .
IF is_tree_layout-col_othr IS NOT INITIAL
AND it_fcat_lvc[] IS NOT INITIAL .
r_excelruntime->begin_pattern( is_patterns = ls_patterns_b ) .
IF ls_fcat_lvc-icon IS INITIAL .
READ TABLE it_subtotals INTO ls_subtotals
WITH TABLE KEY nodekey = ls_nodes-key
fieldname = ls_fcat_lvc-fieldname .
IF sy-subrc EQ 0 .
<value> = ls_subtotals-fieldvalue .
ENDIF .
CLEAR lv_value .
cl_gui_alv_grid=>cell_display(
EXPORTING is_data = <outtab_line>
i_int_value = <value>
IMPORTING e_ext_value = lv_value
CHANGING cs_fieldcat = ls_fcat_lvc ) .
CASE lr_tdescr->type_kind .
WHEN cl_abap_datadescr=>typekind_packed
OR cl_abap_datadescr=>typekind_int .
CASE v_dcpfm .
WHEN space .TRANSLATE lv_value USING '. ,.'. "1.234.567,89
WHEN 'X' . TRANSLATE lv_value USING ', '. "1,234,567.89
WHEN 'Y' . TRANSLATE lv_value USING ',.'. "1 234 567,89
ENDCASE .
IF <value> LT 0 .
REPLACE FIRST OCCURRENCE OF '-' IN lv_value WITH space .
CONCATENATE '-' lv_value INTO lv_value .
ENDIF .
WHEN OTHERS .
CHECK lv_value IS NOT INITIAL .
SHIFT lv_value LEFT DELETING LEADING space .
ENDCASE .
DO 1 TIMES .
CLEAR lv_formula .
CHECK is_tree_layout-allow_formulas IS NOT INITIAL .
CHECK lv_value IS NOT INITIAL .
CHECK lv_value(1) EQ '=' .
lv_formula = abap_on .
ENDDO .
r_excelruntime->begin_field(
EXPORTING iv_top = lv_value_top
iv_left = lv_value_left
iv_value = lv_value
iv_formula = lv_formula ) .
ELSEIF <value>(1) EQ '@' .
CLEAR ls_drawings .
ls_drawings-media_rawdata = get_icon_rawdata( <value> ) .
CHECK ls_drawings-media_rawdata IS NOT INITIAL .
ls_drawings-drawing_type = lcl_excel=>c_drawing_type-bitmap .
ls_drawings-top = lv_value_top .
ls_drawings-left = lv_value_left .
ls_drawings-rows = 1 .
ls_drawings-columns = 1 .
r_excelruntime->begin_drawing( is_drawings_tmp = ls_drawings ) .
ENDIF .
ENDLOOP .
CASE is_tree_layout-rotate .
WHEN space . ADD 1 TO cv_left .
WHEN OTHERS . ADD 1 TO cv_top .
ENDCASE .
r_excelruntime->finalize_pattern( EXPORTING iv_printtitles_r = space
iv_printtitles_c = space
CHANGING cv_top = cv_top
cv_left = cv_left ) .
CASE is_tree_layout-rotate .
WHEN space . cv_left = cv_left + ls_patterns_b-columns - 1 .
WHEN OTHERS . cv_top = cv_top + ls_patterns_b-rows - 1 .
ENDCASE .
ENDIF .
CLEAR lv_value .
IF lv_level GT 1 .
lv_offset = ( lv_level - 1 ) * is_tree_layout-col_hier_shift .
lv_value+lv_offset = lv_node_text .
ELSE .
lv_value = lv_node_text .
ENDIF .
lv_value_top = ls_patterns_a-top .
lv_value_left = ls_patterns_a-left .
r_excelruntime->begin_field(
EXPORTING iv_top = lv_value_top
iv_left = lv_value_left
iv_value = lv_value ) .
CASE is_tree_layout-rotate .
WHEN space . ADD 1 TO cv_left .
WHEN OTHERS . ADD 1 TO cv_top .
ENDCASE .
*----------------------------------------------
IF cv_firstrow EQ abap_on .
cv_firstrow = abap_off .
ENDIF .
CASE is_tree_layout-rotate .
WHEN space .
IF cv_left LT cs_legacy-tb_area_left .
cv_left = cs_legacy-tb_area_left .
ENDIF .
WHEN OTHERS .
IF cv_top LT cs_legacy-tb_area_top .
cv_top = cs_legacy-tb_area_top .
ENDIF .
ENDCASE .
*----------------------------------------------
CASE is_tree_layout-rotate .
WHEN space .
CHECK lv_rows GE 1 .
ADD 1 TO lv_begin_top .
lv_rowgroup_level = lv_level .
WHEN OTHERS .
CHECK lv_columns GE 1 .
ADD 1 TO lv_begin_left .
lv_colgroup_level = lv_level .
ENDCASE .
CASE is_tree_layout-stru_exp_coll .
WHEN c_stru_exp_coll-dynamic .
READ TABLE it_expanded_nodes TRANSPORTING NO FIELDS
WITH KEY table_line = ls_nodes-key BINARY SEARCH .
CASE sy-subrc .
WHEN 0 . lv_collapsed = abap_off .
WHEN OTHERS . lv_collapsed = abap_on .
ENDCASE .
WHEN c_stru_exp_coll-collapsed . lv_collapsed = abap_on .
WHEN c_stru_exp_coll-expanded . lv_collapsed = abap_off .
WHEN OTHERS . EXIT .
ENDCASE .
r_excelruntime->finalize_folder(
EXPORTING iv_left = lv_begin_left
iv_top = lv_begin_top
iv_rows = lv_rows
iv_columns = lv_columns
iv_rowgroup_level = lv_rowgroup_level
iv_colgroup_level = lv_colgroup_level
iv_rowgroup_clp = lv_collapsed
iv_colgroup_clp = lv_collapsed ) .
ENDDO .
ENDLOOP .
ENDMETHOD . "compose_process_tree_s_recurs
METHOD compose_process_tree_s_recsub .
DATA:
ls_nodes TYPE salv_s_nodes ,
lt_nodes TYPE salv_t_nodes ,
lv_count TYPE i ,
l_dref_calc_tab TYPE REF TO data ,
l_dref_calc_wa TYPE REF TO data ,
l_dref_wa TYPE REF TO data ,
ls_subtotals TYPE ty_s_tree_subtotals ,
lr_outtab_line TYPE REF TO data .
FIELD-SYMBOLS:
<outtab_line> TYPE ANY ,
<calc_line> TYPE ANY ,
<calc_tab> TYPE STANDARD TABLE ,
<fcat_lvc> TYPE lvc_s_fcat ,
<f1> TYPE ANY ,
<f2> TYPE ANY ,
<f3> TYPE ANY ,
<f4> TYPE ANY .
IF lt_nodes IS INITIAL .
ev_leaf = abap_on .
lr_outtab_line = ir_salv_node_parent->get_data_row( ) .
ASSIGN lr_outtab_line->* TO <outtab_line> .
cs_outtab_line = <outtab_line> .
EXIT .
ELSE .
CLEAR ev_leaf .
* process nodes
LOOP AT lt_nodes INTO ls_nodes .
compose_process_tree_s_recsub(
EXPORTING ir_salv_node_parent = ls_nodes-node
it_fcat_lvc = it_fcat_lvc
CHANGING cr_salvtree = cr_salvtree
cs_outtab_line = <calc_line>
ct_subtotals = ct_subtotals ) .
APPEND <calc_line> TO <calc_tab> .
ENDLOOP .
ENDIF .
* calculate level
CLEAR cs_outtab_line .
* calculate column
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5
conversion_errors = 5 .
CASE <fcat_lvc>-h_ftype .
WHEN 'MIN' . " -->> minimum
IF sy-tabix EQ 1
OR <f1> LT <f2> .
<f2> = <f1> .
ENDIF .
WHEN 'MAX' . " -->> maximum
IF sy-tabix EQ 1
OR <f1> GT <f2> .
<f2> = <f1> .
ENDIF .
WHEN 'AVG' . " -->> average
ADD <f1> TO <f2> .
ADD 1 TO lv_count .
WHEN 'SUM' " -->> total
OR space .
ADD <f1> TO <f2> .
ENDCASE .
ENDCATCH .
IF sy-subrc EQ 5 .
CLEAR <f2> .
EXIT .
ENDIF .
* get currency
IF <fcat_lvc>-cfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-cfieldname OF STRUCTURE <calc_line> TO
<f3> .
ASSIGN COMPONENT <fcat_lvc>-cfieldname OF STRUCTURE cs_outtab_line TO
<f4> .
IF <f4> IS INITIAL .
MOVE <f3> TO <f4> .
ELSE .
IF <f4> NE <f3>
AND <f3> IS NOT INITIAL .
MOVE '***' TO <f4> .
ENDIF .
ENDIF .
ENDIF .
* get quantity
IF <fcat_lvc>-qfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-qfieldname OF STRUCTURE <calc_line> TO
<f3> .
ASSIGN COMPONENT <fcat_lvc>-qfieldname OF STRUCTURE cs_outtab_line TO
<f4> .
IF <f4> IS INITIAL .
MOVE <f3> TO <f4> .
ELSE .
IF <f4> NE <f3>
AND <f3> IS NOT INITIAL .
MOVE '***' TO <f4> .
ENDIF .
ENDIF .
ENDIF .
ENDLOOP .
* calcualte avg
IF <fcat_lvc>-h_ftype EQ 'AVG' .
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5
conversion_errors = 5 .
<f2> = <f2> / lv_count .
ENDCATCH .
ENDIF .
* subtotals
DO 1 TIMES .
ASSIGN COMPONENT <fcat_lvc>-fieldname OF STRUCTURE cs_outtab_line TO <f2> .
CHECK <f2> IS ASSIGNED .
CLEAR ls_subtotals .
ls_subtotals-nodekey = ir_salv_node_parent->get_key( ) .
ls_subtotals-fieldname = <fcat_lvc>-fieldname .
ls_subtotals-fieldvalue = <f2> .
INSERT ls_subtotals INTO TABLE ct_subtotals .
ENDDO .
DO 1 TIMES .
CHECK <fcat_lvc>-cfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-cfieldname OF STRUCTURE cs_outtab_line TO
<f2> .
CHECK <f2> IS ASSIGNED .
CLEAR ls_subtotals .
ls_subtotals-nodekey = ir_salv_node_parent->get_key( ) .
ls_subtotals-fieldname = <fcat_lvc>-cfieldname .
ls_subtotals-fieldvalue = <f2> .
INSERT ls_subtotals INTO TABLE ct_subtotals .
ENDDO .
DO 1 TIMES .
CHECK <fcat_lvc>-qfieldname IS NOT INITIAL .
ASSIGN COMPONENT <fcat_lvc>-qfieldname OF STRUCTURE cs_outtab_line TO
<f2> .
CHECK <f2> IS ASSIGNED .
CLEAR ls_subtotals .
ls_subtotals-nodekey = ir_salv_node_parent->get_key( ) .
ls_subtotals-fieldname = <fcat_lvc>-qfieldname .
ls_subtotals-fieldvalue = <f2> .
INSERT ls_subtotals INTO TABLE ct_subtotals .
ENDDO .
ENDLOOP .
ENDMETHOD . "compose_process_tree_s_recsub
METHOD compose_process_grid .
DATA:
ls_grid_layout TYPE ty_s_grid_layout ,
ls_rowvalues TYPE ty_s_grid_rowvalues ,
ls_patterns TYPE lcl_excel=>ty_s_patterns ,
ls_patterns_m TYPE lcl_excel=>ty_s_patterns ,
ls_patterns_p TYPE lcl_excel=>ty_s_patterns ,
lt_patterns_p TYPE lcl_excel=>ty_t_patterns ,
ls_cells TYPE lcl_excel=>ty_s_cells ,
ls_colprop TYPE lcl_excel=>ty_s_colprop ,
ls_rowprop TYPE lcl_excel=>ty_s_rowprop ,
ls_mergecells_rel TYPE ty_s_mergecells_rel ,
lv_x TYPE i ,
lv_y TYPE i ,
lv_x_from TYPE i ,
lv_x_to TYPE i ,
lv_y_from TYPE i ,
lv_y_to TYPE i ,
lv_top TYPE i ,
lv_left TYPE i ,
lv_value_top TYPE i ,
lv_value_left TYPE i ,
lv_value TYPE string ,
lv_pattern_top TYPE i ,
lv_pattern_left TYPE i ,
lv_comp_fullpath TYPE string ,
lv_index TYPE i ,
lv_index_delta TYPE i ,
lv_index_previous TYPE i ,
lv_subrc TYPE sysubrc ,
lv_offset TYPE i ,
lv_subpattern TYPE i ,
lv_firstcall TYPE flag VALUE abap_on .
DATA:
ls_ctxt_hier TYPE lcl_context=>ty_s_hierarchy ,
lt_ctxt_hier TYPE lcl_context=>ty_t_hierarchy ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_ctxt_prop TYPE lcl_context=>ty_t_properties ,
ls_fldseq TYPE ty_s_grid_fldseq ,
lt_fldseq TYPE ty_t_grid_fldseq ,
ls_fldprop TYPE ty_s_grid_fldprop ,
lt_fldprop TYPE ty_t_grid_fldprop ,
ls_buffer_rs TYPE ty_s_grid_rowstructure_buf .
FIELD-SYMBOLS:
<context_tab> TYPE ANY TABLE ,
<rowvalues> TYPE ty_s_grid_rowvalues ,
<rowpattrens> TYPE ty_s_grid_rowpattrens ,
<rowstructure> TYPE ty_s_grid_rowstructure .
* binding with reference of context data (it only can have a type of nested
table)
IF is_data-shift_val_relpath IS INITIAL .
ASSIGN is_parent_context_ref TO <context_tab> .
ELSE .
ASSIGN COMPONENT is_data-shift_val_relpath
OF STRUCTURE is_parent_context_ref TO <context_tab> .
CHECK <context_tab> IS ASSIGNED .
ENDIF .
conv_container_fs(
EXPORTING iv_field = is_data-properties-grid_layout
IMPORTING es_structure = ls_grid_layout ) .
*======================================================================
*======================================================================
* Prepare coordinates and fields
*======================================================================
*======================================================================
CASE is_data-properties-tb_direction .
WHEN c_tb_direction-up2down .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top +
cs_parent_legacy-tb_area_prew_rows .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left .
WHEN c_tb_direction-left2right .
cs_legacy-tb_area_left = cs_parent_legacy-tb_area_prew_left +
cs_parent_legacy-tb_area_prew_columns .
cs_legacy-tb_area_top = cs_parent_legacy-tb_area_prew_top .
ENDCASE .
cs_legacy-tb_area_rows = 0 .
cs_legacy-tb_area_columns = 0 .
*======================================================================
*======================================================================
* Try to read 'rowstructure' from the buffer.
* If not occurred, calculate it and insert into buffer
*======================================================================
*======================================================================
CLEAR ls_buffer_rs .
READ TABLE t_buffer_rs INTO ls_buffer_rs WITH TABLE KEY form_id = is_data-
properties-id .
IF sy-subrc NE 0 .
*======================================================================
* get field sequence
*======================================================================
get_grid_fldseqprop(
EXPORTING iv_id = is_data-properties-id
IMPORTING et_ctxt_hier = lt_ctxt_hier[]
et_ctxt_prop = lt_ctxt_prop[]
et_fldseq = lt_fldseq[]
et_fldprop = lt_fldprop[] ) .
*======================================================================
* prepare patterns (get a content of pattern area)
*======================================================================
ls_patterns_m =
r_exceltemplate->get_pattern( iv_sheetname = cs_parent_legacy-tb_sheetname
iv_id = is_data-properties-id ) .
CASE ls_grid_layout-rotate .
WHEN space .
DO ls_patterns_m-rows TIMES . " -->> loop at ROWS
lv_index = sy-index .
lv_y = ls_patterns_m-top + lv_index - 1 .
CLEAR ls_patterns .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
ls_patterns-id = lv_index - 1 .
ls_patterns-left = ls_patterns_m-left .
ls_patterns-top = ls_patterns_m-top + lv_index - 1 .
ls_patterns-rows = 1 .
CLEAR ls_buffer_rs-rowvalues[] .
CLEAR ls_rowvalues .
ls_rowvalues-position = ls_patterns_m-left - 1 .
ls_rowvalues-position_rel = 0 .
ADD 1 TO ls_rowvalues-position .
ADD 1 TO ls_rowvalues-position_rel .
lv_x = ls_rowvalues-position .
ls_rowvalues-index = sy-tabix .
ls_rowvalues-value_fullpath = ls_fldseq-field .
ls_rowvalues-autofitmerged_r = ls_fldprop-autofitmerged_r .
ls_rowvalues-autofitmerged_c = ls_fldprop-autofitmerged_c .
APPEND ls_rowvalues TO ls_buffer_rs-rowvalues[] .
CLEAR ls_mergecells_rel .
READ TABLE ls_patterns_m-t_mergecells INTO ls_mergecells_rel
WITH KEY top = lv_y
left = lv_x .
IF sy-subrc EQ 0 .
ls_mergecells_rel-autofit_rows = ls_fldprop-autofitmerged_r .
ls_mergecells_rel-autofit_cols = ls_fldprop-autofitmerged_c .
INSERT ls_mergecells_rel INTO TABLE ls_patterns-t_mergecells .
ELSE .
ls_mergecells_rel-columns = 1 .
ENDIF .
DO ls_mergecells_rel-columns TIMES .
IF sy-index GT 1 .
ADD 1 TO ls_rowvalues-position .
ADD 1 TO ls_rowvalues-position_rel .
lv_x = ls_rowvalues-position .
ENDIF .
IF ls_rowvalues-position_rel LE ls_patterns_m-columns .
CLEAR ls_cells .
READ TABLE ls_patterns_m-t_cells INTO ls_cells WITH KEY y = lv_y
x = lv_x BINARY SEARCH .
ENDIF .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
INSERT ls_cells INTO TABLE ls_patterns-t_cells .
IF ls_rowvalues-position_rel LE ls_patterns_m-columns .
CLEAR ls_colprop .
READ TABLE ls_patterns_m-t_colprop INTO ls_colprop WITH KEY x =
lv_x BINARY SEARCH .
lv_subrc = sy-subrc .
ENDIF .
IF lv_subrc EQ 0 .
ls_colprop-x = lv_x .
INSERT ls_colprop INTO TABLE ls_patterns-t_colprop .
ENDIF .
ENDDO .
ENDLOOP .
CLEAR ls_patterns .
CLEAR ls_cells .
CLEAR ls_colprop .
CLEAR ls_rowprop .
ls_patterns-id = lv_index - 1 .
ls_patterns-left = ls_patterns_m-left + lv_index - 1 .
ls_patterns-top = ls_patterns_m-top .
ls_patterns-columns = 1 .
CLEAR ls_buffer_rs-rowvalues[] .
CLEAR ls_rowvalues .
ls_rowvalues-position = ls_patterns_m-top - 1 .
ls_rowvalues-position_rel = 0 .
ADD 1 TO ls_rowvalues-position .
ADD 1 TO ls_rowvalues-position_rel .
lv_y = ls_rowvalues-position .
ls_rowvalues-index = sy-tabix .
ls_rowvalues-value_fullpath = ls_fldseq-field .
ls_rowvalues-autofitmerged_r = ls_fldprop-autofitmerged_r .
ls_rowvalues-autofitmerged_c = ls_fldprop-autofitmerged_c .
APPEND ls_rowvalues TO ls_buffer_rs-rowvalues[] .
CLEAR ls_mergecells_rel .
READ TABLE ls_patterns_m-t_mergecells INTO ls_mergecells_rel
WITH KEY top = lv_y
left = lv_x .
IF sy-subrc EQ 0 .
ls_mergecells_rel-autofit_rows = ls_fldprop-autofitmerged_r .
ls_mergecells_rel-autofit_cols = ls_fldprop-autofitmerged_c .
INSERT ls_mergecells_rel INTO TABLE ls_patterns-t_mergecells .
ELSE .
ls_mergecells_rel-rows = 1 .
ENDIF .
DO ls_mergecells_rel-rows TIMES .
IF sy-index GT 1 .
ADD 1 TO ls_rowvalues-position .
ADD 1 TO ls_rowvalues-position_rel .
lv_y = ls_rowvalues-position .
ENDIF .
IF ls_rowvalues-position_rel LE ls_patterns_m-rows .
CLEAR ls_cells .
READ TABLE ls_patterns_m-t_cells INTO ls_cells WITH KEY y = lv_y
x = lv_x BINARY SEARCH .
ENDIF .
ls_cells-y = lv_y .
ls_cells-x = lv_x .
INSERT ls_cells INTO TABLE ls_patterns-t_cells .
IF ls_rowvalues-position_rel LE ls_patterns_m-rows .
CLEAR ls_rowprop .
READ TABLE ls_patterns_m-t_rowprop INTO ls_rowprop WITH TABLE KEY
y = lv_y .
lv_subrc = sy-subrc .
ENDIF .
IF lv_subrc EQ 0 .
ls_rowprop-y = lv_y .
INSERT ls_rowprop INTO TABLE ls_patterns-t_rowprop .
ENDIF .
ENDDO .
ENDLOOP .
IF lt_patterns_p IS INITIAL
AND ls_buffer_rs-patterns_h IS NOT INITIAL .
ls_buffer_rs-patterns_h-id = 1 .
APPEND ls_buffer_rs-patterns_h TO lt_patterns_p .
ENDIF .
*======================================================================
* prepare row structure
*======================================================================
APPEND INITIAL LINE TO ls_buffer_rs-rowstructure ASSIGNING <rowstructure> .
<rowstructure>-level = sy-tabix .
node_get_legacy_info(
EXPORTING iv_id = is_data-properties-id
IMPORTING ev_cb_fullpath = <rowstructure>-loop_fullpath ) .
<rowstructure>-loop_fullpath =
get_fullpath( iv_parent_fullpath = <rowstructure>-loop_fullpath
iv_relpath = is_data-properties-cb_val_relpath ) .
lv_index = <rowvalues>-index + 1 .
READ TABLE ls_buffer_rs-rowvalues INTO ls_rowvalues WITH KEY INDEX =
lv_index . " read the next field position
IF sy-subrc EQ 0 .
<rowpattrens>-columns = ls_rowvalues-position - <rowpattrens>-
position .
ELSE .
<rowpattrens>-columns = ls_buffer_rs-maxposition - <rowpattrens>-
position + 1 .
ENDIF .
CASE ls_grid_layout-rotate .
WHEN space .
lv_x_from = <rowpattrens>-position .
lv_x_to = <rowpattrens>-position + <rowpattrens>-columns - 1 .
ls_patterns-t_cells[] = ls_patterns_p-t_cells[] .
DELETE ls_patterns-t_cells WHERE NOT x BETWEEN lv_x_from AND
lv_x_to .
ls_patterns-t_mergecells[] = ls_patterns_p-t_mergecells[] .
DELETE ls_patterns-t_mergecells WHERE NOT left BETWEEN lv_x_from
AND lv_x_to .
ls_patterns-t_rowprop[] = ls_patterns_p-t_rowprop[] .
ls_patterns-t_colprop[] = ls_patterns_p-t_colprop[] .
DELETE ls_patterns-t_colprop WHERE NOT x BETWEEN lv_x_from AND
lv_x_to .
ls_patterns-id = ls_patterns_p-id .
ls_patterns-left = <rowpattrens>-position .
ls_patterns-top = ls_patterns_p-top .
ls_patterns-columns = <rowpattrens>-columns .
ls_patterns-rows = ls_patterns_p-rows .
APPEND ls_patterns TO <rowpattrens>-patterns .
WHEN OTHERS .
lv_y_from = <rowpattrens>-position .
lv_y_to = <rowpattrens>-position + <rowpattrens>-columns - 1 .
ls_patterns-t_cells[] = ls_patterns_p-t_cells[] .
DELETE ls_patterns-t_cells WHERE NOT y BETWEEN lv_y_from AND
lv_y_to .
ls_patterns-t_mergecells[] = ls_patterns_p-t_mergecells[] .
DELETE ls_patterns-t_mergecells WHERE NOT top BETWEEN lv_y_from AND
lv_y_to .
ls_patterns-t_rowprop[] = ls_patterns_p-t_rowprop[] .
ls_patterns-t_colprop[] = ls_patterns_p-t_colprop[] .
DELETE ls_patterns-t_rowprop WHERE NOT y BETWEEN lv_y_from AND
lv_y_to .
ls_patterns-id = ls_patterns_p-id .
ls_patterns-left = ls_patterns_p-left .
ls_patterns-top = <rowpattrens>-position .
ls_patterns-columns = ls_patterns_p-columns .
ls_patterns-rows = <rowpattrens>-columns .
APPEND ls_patterns TO <rowpattrens>-patterns .
ENDCASE .
ENDLOOP .
ENDLOOP .
ENDLOOP .
lv_comp_fullpath = <rowstructure>-loop_fullpath .
ENDLOOP .
*======================================================================
* insert 'rowstructure' into buffer
*======================================================================
ls_buffer_rs-form_id = is_data-properties-id .
ls_buffer_rs-maxlevel = LINES( ls_buffer_rs-rowstructure ) .
ls_buffer_rs-maxsubpattern = LINES( lt_patterns_p ) .
INSERT ls_buffer_rs INTO TABLE t_buffer_rs .
ENDIF .
*======================================================================
*======================================================================
* Paste header
*======================================================================
*======================================================================
CASE ls_grid_layout-rotate .
WHEN space .
lv_top = cs_legacy-tb_area_top .
lv_left = cs_legacy-tb_area_left - 1 .
WHEN OTHERS .
lv_top = cs_legacy-tb_area_top - 1 .
lv_left = cs_legacy-tb_area_left .
ENDCASE .
CASE ls_grid_layout-head_titles .
WHEN c_head_titles-tech . lv_value = <rowvalues>-ctxt_prop-comp_name .
WHEN c_head_titles-descr . lv_value = <rowvalues>-ctxt_prop-
comp_shortdescr .
WHEN OTHERS .
CONCATENATE <rowvalues>-ctxt_prop-comp_name '-' <rowvalues>-ctxt_prop-
comp_shortdescr
INTO lv_value SEPARATED BY space .
ENDCASE .
*======================================================================
*======================================================================
* Positions
*======================================================================
*======================================================================
IF <context_tab> IS NOT INITIAL .
lv_subpattern = 0 .
CASE ls_grid_layout-rotate .
WHEN space .
cs_legacy-tb_area_rows = lv_top - cs_legacy-tb_area_top .
cs_legacy-tb_area_columns = ls_buffer_rs-patterns_h-columns .
WHEN OTHERS .
cs_legacy-tb_area_rows = ls_buffer_rs-patterns_h-rows .
cs_legacy-tb_area_columns = lv_left - cs_legacy-tb_area_left .
ENDCASE .
IF cs_legacy-tb_area_rows LT 0 .
cs_legacy-tb_area_rows = 0 .
ENDIF .
IF cs_legacy-tb_area_columns LT 0 .
cs_legacy-tb_area_columns = 0 .
ENDIF .
cs_parent_legacy-tb_area_prew_top = cs_legacy-tb_area_prew_top =
cs_legacy-tb_area_top .
cs_parent_legacy-tb_area_prew_rows = cs_legacy-tb_area_prew_rows =
cs_legacy-tb_area_rows .
cs_parent_legacy-tb_area_prew_left = cs_legacy-tb_area_prew_left =
cs_legacy-tb_area_left .
cs_parent_legacy-tb_area_prew_columns = cs_legacy-tb_area_prew_columns =
cs_legacy-tb_area_columns .
*======================================================================
*======================================================================
* Dataset Series information for Chart
*======================================================================
*======================================================================
DO 1 TIMES .
* is this Grid dataset for a Chart or CellDataValidation ?
LOOP AT t_properties TRANSPORTING NO FIELDS
WHERE dataset_id EQ is_data-properties-id
OR cb_valvld_for1_dataset_id EQ is_data-properties-id .
EXIT .
ENDLOOP .
CHECK sy-subrc EQ 0 . " -->> yes, it's dataset
DATA:
ls_ref_fields TYPE lcl_excelruntime=>ty_s_dataset_ref_fields ,
lt_ref_fields TYPE lcl_excelruntime=>ty_t_dataset_ref_fields .
*======================================================================
*======================================================================
* Finalize
*======================================================================
*======================================================================
ENDMETHOD . "compose_process_grid
METHOD compose_process_grid_r .
DATA:
lv_level TYPE i ,
lv_value TYPE string ,
lv_val_convert TYPE flag ,
lv_formula TYPE flag ,
lv_begin_top TYPE i ,
lv_begin_left TYPE i ,
lv_value_top TYPE i ,
lv_value_left TYPE i ,
lv_pattern_top TYPE i ,
lv_pattern_left TYPE i ,
lv_span TYPE i ,
ls_drawings TYPE lcl_excel=>ty_s_drawings_tmp ,
lr_context_line TYPE REF TO data ,
lr_context_tab TYPE REF TO data .
FIELD-SYMBOLS:
<context_tab1> TYPE STANDARD TABLE ,
<context_line1> TYPE ANY ,
<context_tab> TYPE ANY TABLE ,
<context_line> TYPE ANY ,
<rowvalues> TYPE ty_s_grid_rowvalues ,
<rowpattrens> TYPE ty_s_grid_rowpattrens ,
<rowstructure> TYPE ty_s_grid_rowstructure ,
<rowstructure2> TYPE ty_s_grid_rowstructure ,
<patterns> TYPE lcl_excel=>ty_s_patterns .
lv_level = iv_parent_level + 1 .
IF <rowstructure>-loop_relpath IS INITIAL .
ASSIGN ir_parent_context TO <context_tab> .
ELSE .
ASSIGN COMPONENT <rowstructure>-loop_relpath
OF STRUCTURE ir_parent_context
TO <context_tab> .
ENDIF .
CHECK <context_tab> IS ASSIGNED .
IF <context_tab> IS INITIAL .
CREATE DATA lr_context_line LIKE LINE OF <context_tab> .
ASSIGN lr_context_line->* TO <context_line1> .
CREATE DATA lr_context_tab LIKE STANDARD TABLE OF <context_line1> .
ASSIGN lr_context_tab->* TO <context_tab1> .
APPEND INITIAL LINE TO <context_tab1> .
ASSIGN lr_context_tab->* TO <context_tab> .
ENDIF .
IF lv_level EQ 1 .
progressbar_loop_init(
EXPORTING it_tab = <context_tab>
iv_step = 777
iv_percent_start = 1
iv_percent_end = 99
iv_text = v_text-t225 ) .
ENDIF .
*================================================================================
* current level processing
*================================================================================
IF lv_level EQ 1 .
progressbar_loop_actualize( ) .
CASE iv_maxsubpattern .
WHEN 1 .
cv_subpattern = 1 .
WHEN OTHERS .
IF cv_subpattern LT iv_maxsubpattern .
ADD 1 TO cv_subpattern .
ELSE .
cv_subpattern = 1 .
ENDIF .
ENDCASE .
ENDIF .
lv_begin_top = cv_top .
lv_begin_left = cv_left .
CASE is_grid_layout-rotate .
WHEN space . cv_left = cs_legacy-tb_area_left + <rowpattrens>-
position_rel - 1 .
WHEN OTHERS . cv_top = cs_legacy-tb_area_top + <rowpattrens>-
position_rel - 1 .
ENDCASE .
lv_pattern_top = cv_top .
lv_pattern_left = cv_left .
CASE is_grid_layout-rotate .
WHEN space .
lv_value_top = <patterns>-top .
lv_value_left = <rowvalues>-position .
WHEN OTHERS .
lv_value_left = <patterns>-left .
lv_value_top = <rowvalues>-position .
ENDCASE .
lv_formula = abap_on .
ENDDO .
IF <rowvalues>-ctxt_prop-type_kind EQ cl_abap_datadescr=>typekind_xstring
.
CLEAR ls_drawings .
ls_drawings-drawing_type = lcl_excel=>c_drawing_type-bitmap .
ls_drawings-media_rawdata = lv_value .
ELSE .
DO 1 TIMES .
CLEAR ls_drawings .
CHECK lv_value IS NOT INITIAL .
CHECK lv_value+0(1) EQ '@' .
CHECK STRLEN( lv_value ) EQ 4 .
CHECK lv_value+3(1) EQ '@' .
ls_drawings-drawing_type = lcl_excel=>c_drawing_type-bitmap .
ls_drawings-media_rawdata = get_icon_rawdata( lv_value ) .
ENDDO .
ENDIF .
IF ls_drawings-media_rawdata IS INITIAL .
r_excelruntime->begin_field( EXPORTING iv_top = lv_value_top
iv_left = lv_value_left
iv_value = lv_value
iv_formula = lv_formula ) .
ELSE .
ls_drawings-top = lv_value_top .
ls_drawings-left = lv_value_left .
ls_drawings-rows = 1 .
ls_drawings-columns = 1 .
r_excelruntime->begin_drawing( EXPORTING is_drawings_tmp =
ls_drawings ) .
ENDIF .
ENDLOOP .
*================================================================================
* recursive processing of the children levels
*================================================================================
IF lv_level LT iv_maxlevel .
compose_process_grid_r( EXPORTING iv_parent_level = lv_level
ir_parent_context = <context_line>
iv_maxlevel = iv_maxlevel
iv_maxsubpattern = iv_maxsubpattern
is_grid_layout = is_grid_layout
CHANGING ct_rowstructure = ct_rowstructure
cs_legacy = cs_legacy
cv_top = cv_top
cv_left = cv_left
cv_subpattern = cv_subpattern
cv_firstcall = cv_firstcall ) .
ENDIF .
*================================================================================
* merge Rows/Columns in the Spanned pattern
*================================================================================
DO 1 TIMES .
CASE is_grid_layout-rotate .
WHEN space . CHECK cv_top GT lv_begin_top .
WHEN OTHERS . CHECK cv_left GT lv_begin_left .
ENDCASE .
r_excelruntime->finalize_respattern(
EXPORTING iv_rowspan = abap_on
iv_top = lv_pattern_top
iv_left = lv_pattern_left
iv_rows = lv_span
iv_columns = <rowpattrens>-columns
it_autofitmerged_r = <rowpattrens>-t_autofitmerged_r
it_autofitmerged_c = <rowpattrens>-
t_autofitmerged_c ) .
WHEN OTHERS .
lv_span = cv_left - lv_begin_left .
CHECK lv_span GT 1 .
lv_pattern_top = cs_legacy-tb_area_top + <rowpattrens>-position_rel
- 1 .
lv_pattern_left = lv_begin_left .
r_excelruntime->finalize_respattern(
EXPORTING iv_colspan = abap_on
iv_top = lv_pattern_top
iv_left = lv_pattern_left
iv_rows = <rowpattrens>-columns
iv_columns = lv_span
it_autofitmerged_r = <rowpattrens>-t_autofitmerged_r
it_autofitmerged_c = <rowpattrens>-
t_autofitmerged_c ) .
ENDCASE .
ENDLOOP .
ENDDO .
*================================================================================
* optimize row/column properties
*================================================================================
DO 1 TIMES .
CHECK cv_firstcall IS NOT INITIAL .
CHECK lv_level EQ 1 .
CLEAR cv_firstcall .
*================================================================================
* next row/column
*================================================================================
IF lv_level EQ iv_maxlevel .
CASE is_grid_layout-rotate .
WHEN space . ADD 1 TO cv_top .
WHEN OTHERS . ADD 1 TO cv_left .
ENDCASE .
ENDIF .
ENDMETHOD . "compose_process_grid_r
METHOD get_appearance_req .
FIELD-SYMBOLS:
<component> TYPE ANY .
IF iv_apr_relpath IS INITIAL.
rv_required = abap_on.
EXIT.
ELSE.
rv_required = abap_off.
ENDIF.
IF iv_apr_offset IS INITIAL
AND iv_apr_match IS INITIAL.
CHECK <component> IS NOT INITIAL .
rv_required = abap_on .
ENDMETHOD . "get_appearance_req
METHOD get_value_simple .
DATA:
lv_part TYPE string .
FIELD-SYMBOLS:
<component> TYPE ANY .
CLEAR ev_value .
lv_part = <component> .
CHECK lv_part IS NOT INITIAL .
TRY .
IF iv_offset IS INITIAL
AND iv_match IS INITIAL .
CLEAR rv_value.
CHECK iv_val_relpath IS NOT INITIAL .
*======================================================================
* get reference
*======================================================================
CASE iv_val_sub_req .
WHEN space .
IF is_ctxt_prop IS INITIAL .
is_ctxt_prop = r_context->node_get_by_path( iv_comp_fullpath =
iv_fullpath ) .
ENDIF .
CHECK is_ctxt_prop-type_kind NE cl_abap_datadescr=>typekind_table .
IF iv_shift_val_relpath IS INITIAL .
ASSIGN is_parent_context_ref TO <component> .
ELSE .
ASSIGN COMPONENT iv_shift_val_relpath
OF STRUCTURE is_parent_context_ref TO <component> .
ENDIF .
CHECK <component> IS ASSIGNED .
WHEN OTHERS .
CHECK iv_val_sub_row IS NOT INITIAL .
CHECK iv_val_sub_col IS NOT INITIAL .
IF is_ctxt_prop IS INITIAL .
is_ctxt_prop = r_context->node_get_by_path( iv_comp_fullpath =
iv_fullpath ) .
ENDIF .
CHECK is_ctxt_prop-type_kind EQ cl_abap_datadescr=>typekind_table .
IF iv_shift_val_relpath IS INITIAL .
ASSIGN is_parent_context_ref TO <table_any> .
ELSE .
ASSIGN COMPONENT iv_shift_val_relpath
OF STRUCTURE is_parent_context_ref TO <table_any> .
ENDIF .
CHECK <table_any> IS NOT INITIAL .
WHEN OTHERS .
ASSIGN <table_any> TO <table_std> .
ENDCASE .
CHECK <table_std> IS ASSIGNED .
READ TABLE <table_std> ASSIGNING <table_line> INDEX iv_val_sub_row .
CHECK <table_line> IS ASSIGNED .
is_ctxt_prop =
r_context->node_get_by_path( iv_relpath = lv_relpath_sub
iv_fullpath_parent = iv_fullpath ) .
CHECK is_ctxt_prop-type_kind NE cl_abap_datadescr=>typekind_table .
ENDCASE .
*======================================================================
* conversion
*======================================================================
IF is_ctxt_prop-type_kind EQ cl_abap_datadescr=>typekind_packed
OR is_ctxt_prop-type_kind EQ cl_abap_datadescr=>typekind_int .
rv_value = <component> .
IF <component> LT 0 .
REPLACE FIRST OCCURRENCE OF '-' IN rv_value WITH space .
CONCATENATE '-' rv_value INTO rv_value .
ENDIF .
CONDENSE rv_value NO-GAPS .
lr_input_util->output_convert(
EXPORTING field_value_int = <component>
IMPORTING field_value_ext = lv_value
EXCEPTIONS OTHERS = 2 ) .
IF sy-subrc EQ 0 .
rv_value = lv_value .
ELSE .
rv_value = <component> .
ENDIF .
ENDIF .
lv_val_offset = iv_val_offset .
lv_val_match = iv_val_match .
lv_val_strlen = STRLEN( rv_value ) .
lv_min_strlen = lv_val_offset + lv_val_match .
IF lv_val_strlen LE lv_val_offset .
CLEAR rv_value .
EXIT .
ELSEIF lv_val_strlen LT lv_min_strlen .
lv_val_match = lv_val_strlen - lv_val_offset .
ENDIF .
TRY .
IF lv_val_offset IS NOT INITIAL
AND lv_val_match IS NOT INITIAL .
rv_value = rv_value+lv_val_offset(lv_val_match) .
DO 1 TIMES .
SELECT SINGLE id name
INTO (ls_buffer_icon-id, ls_buffer_icon-name)
FROM icon
WHERE id EQ iv_icon .
CHECK sy-subrc EQ 0 .
lv_objkey = ls_buffer_icon-name .
CREATE OBJECT lr_bds_document .
lr_bds_document->get_with_table(
EXPORTING classname = 'SAP_ICONS'
classtype = 'OT'
object_key = lv_objkey
CHANGING content = lt_content
components = lt_components
EXCEPTIONS OTHERS = 1 ) .
lv_content_size = <components>-comp_size .
CHECK lv_content_size GT 0 .
DEFINE mk_shift_left .
if &2 is not initial .
lv_tmp_relpath1 = &1 .
lv_i = strlen( &2 ) .
if lv_tmp_relpath1(lv_i) eq &2 .
shift lv_tmp_relpath1 left by lv_i places .
endif .
&1 = lv_tmp_relpath1 .
endif .
END-OF-DEFINITION .
METHODS:
save
IMPORTING iv_deactivate TYPE flag DEFAULT abap_on
iv_devclass TYPE any OPTIONAL ,
activate ,
deactivate ,
node_add
IMPORTING iv_comp_type TYPE any
iv_comp_name TYPE any
iv_comp_descr TYPE any OPTIONAL
iv_parent_id TYPE any
iv_sibling_id TYPE any OPTIONAL
iv_default_values TYPE any DEFAULT abap_on
RETURNING value(rv_new_id) TYPE ty_s_hierarchy-id ,
node_del
IMPORTING iv_id TYPE any ,
node_clone
IMPORTING iv_id_sample TYPE any
iv_id_target_parent TYPE any OPTIONAL
iv_rename_prefix TYPE any OPTIONAL
iv_rename_postfix TYPE any OPTIONAL
iv_rename_find TYPE any OPTIONAL
iv_rename_replacement TYPE any OPTIONAL
RETURNING value(rv_id_clone) TYPE ty_s_hierarchy-id ,
node_move
IMPORTING iv_id_source TYPE any
iv_id_target TYPE any ,
node_move_sibling_up
IMPORTING iv_id TYPE any ,
node_move_sibling_down
IMPORTING iv_id TYPE any ,
node_set_properties
CHANGING cs_properties TYPE ty_s_properties ,
get_retmess_icon
IMPORTING iv_id TYPE any
RETURNING value(rv_retmess_icon) TYPE icon_d ,
set_formname_new
IMPORTING iv_formname TYPE any ,
set_formdescr_new
IMPORTING iv_formdescr TYPE any ,
autostructure_create ,
autostructure_recurs
IMPORTING is_altern_form_prop TYPE lcl_form=>ty_s_properties
is_parent_form_prop TYPE lcl_form=>ty_s_properties
is_parent_ctxt_prop TYPE lcl_context=>ty_s_properties
iv_parent_level TYPE i
iv_parent_cb_fullpath TYPE any ,
is_component_subnode_of
IMPORTING iv_form_id TYPE ty_s_hierarchy-id
iv_form_id_checked TYPE ty_s_hierarchy-id
RETURNING value(rv_yes) TYPE flag .
PRIVATE SECTION .
METHODS:
node_clone_recurs
IMPORTING is_hier_sample_parent TYPE ty_s_hierarchy
iv_id_clone_parent TYPE ty_s_hierarchy-id
iv_rename_prefix TYPE any OPTIONAL
iv_rename_postfix TYPE any OPTIONAL
iv_rename_find TYPE any OPTIONAL
iv_rename_replacement TYPE any OPTIONAL .
DATA:
ls_head TYPE ty_s_head ,
lv_objid TYPE wwwdatatab-objid ,
lt_html_table TYPE STANDARD TABLE OF w3html ,
lt_document_table TYPE tsfmime ,
lv_document_size TYPE i ,
lv_devclass TYPE tadir-devclass .
v_changed_uname = sy-uname .
v_changed_datum = sy-datum .
IF v_created_uname IS INITIAL .
v_created_uname = v_changed_uname .
ENDIF .
IF v_created_datum IS INITIAL .
v_created_datum = v_changed_datum .
ENDIF .
ls_head-created_uname = v_created_uname .
ls_head-created_datum = v_created_datum .
ls_head-changed_uname = v_changed_uname .
ls_head-changed_datum = v_changed_datum .
r_exceltemplate->formparameters_struc_set(
iv_path = r_exceltemplate->c_path-formhead
is_struc = ls_head ) .
r_exceltemplate->formparameters_table_set(
iv_path = r_exceltemplate->c_path-formproperties
it_tab = t_properties ) .
r_exceltemplate->formparameters_table_set(
iv_path = r_exceltemplate->c_path-formhierarchy
it_tab = t_hierarchy ) .
r_exceltemplate->rawdata_get_as_table(
IMPORTING et_document_table = lt_document_table
ev_document_size = lv_document_size ) .
IF v_devclass IS INITIAL .
lv_devclass = iv_devclass .
ELSE .
lv_devclass = v_devclass .
ENDIF .
IF lv_devclass IS INITIAL .
MESSAGE e000(lp) WITH v_text-t037 INTO v_dummy . " text: Development class
is not specified
msg_syst_catch( ) .
EXIT .
ENDIF .
v_devclass = lv_devclass .
ENDMETHOD . "save
METHOD activate .
msg_init( ) .
DATA:
ls_properties TYPE ty_s_properties ,
lv_active TYPE flag .
FIELD-SYMBOLS:
<exceptions> TYPE ty_s_exceptions ,
<retmess> TYPE bapiret2 .
IF v_devclass IS INITIAL .
MESSAGE e000(lp) WITH v_text-t038 INTO v_dummy . " text: Firstly, save the
form
msg_syst_catch( ) .
EXIT .
ENDIF .
check_subtree( ) .
v_msg_init = abap_off .
lv_active = abap_on .
v_active = lv_active .
save( iv_deactivate = space ) .
v_msg_init = abap_on .
ENDMETHOD . "activate
METHOD deactivate .
v_active = abap_off .
ENDMETHOD . "deactivate
METHOD node_add .
msg_init( ) .
DATA:
ls_properties TYPE ty_s_properties ,
ls_tree_layout TYPE ty_s_tree_layout ,
ls_grid_layout TYPE ty_s_grid_layout .
IF iv_sibling_id IS INITIAL .
CALL FUNCTION 'RS_TREE_ADD_NODE'
EXPORTING
new_name = space
insert_id = iv_parent_id
relationship = stree_reltype_baby
IMPORTING
new_id = rv_new_id
EXCEPTIONS
OTHERS = 0.
ELSE .
CALL FUNCTION 'RS_TREE_ADD_NODE'
EXPORTING
new_name = space
insert_id = iv_sibling_id
relationship = stree_reltype_next
IMPORTING
new_id = rv_new_id
EXCEPTIONS
OTHERS = 0.
ENDIF .
ls_properties-id = rv_new_id .
APPEND ls_properties TO t_properties .
*------------ check subtree
check_subtree( rv_new_id ) .
deactivate( ) .
ENDMETHOD . "node_add
METHOD node_del .
msg_init( ) .
DATA:
lv_id TYPE snode-id ,
ls_hier_subtree TYPE ty_s_hierarchy ,
lt_hier_subtree TYPE ty_t_hierarchy .
IF iv_id EQ v_root_id .
MESSAGE e000(lp) WITH v_text-t342 " text: Root node cannot be removed
INTO v_dummy .
msg_syst_catch( ) .
RETURN .
ENDIF .
lv_id = iv_id .
check_subtree( ) .
deactivate( ) .
ENDMETHOD . "node_del
METHOD node_move .
msg_init( ) .
DATA:
lv_id_parent_old TYPE snode-id ,
lv_id_source TYPE snode-id ,
lv_id_target TYPE snode-id ,
ls_form_prop_source TYPE ty_s_properties .
*------ prepare
lv_id_source = iv_id_source .
lv_id_target = iv_id_target .
lv_id_parent_old = node_get_parent( lv_id_source ) .
CHECK lv_id_parent_old NE lv_id_target .
*------ checks
check_subtree( lv_id_target ) .
deactivate( ) .
ENDMETHOD . "node_move
METHOD node_move_sibling_up .
msg_init( ) .
DATA:
lv_id_parent TYPE snode-id ,
ls_hierarchy TYPE ty_s_hierarchy ,
ls_hier_prec TYPE ty_s_hierarchy .
*------ prepare
lv_id_parent = node_get_parent( iv_id ) .
*------ checks
check_subtree( lv_id_parent ) .
deactivate( ) .
ENDMETHOD . "node_move_sibling_up
METHOD node_move_sibling_down .
msg_init( ) .
DATA:
lv_id_parent TYPE snode-id ,
ls_hierarchy TYPE ty_s_hierarchy .
*------ prepare
lv_id_parent = node_get_parent( iv_id ) .
READ TABLE t_hierarchy INTO ls_hierarchy WITH KEY id = iv_id .
IF sy-subrc NE 0
OR ls_hierarchy-next IS INITIAL .
MESSAGE e000(lp) WITH v_text-t041 INTO v_dummy . " text: Moving of the
component is impossible
msg_syst_catch( ) .
ENDIF .
CHECK v_retcode NE c_retcode-error .
*------ checks
check_subtree( lv_id_parent ) .
deactivate( ) .
ENDMETHOD . "node_move_sibling_down
METHOD node_set_properties .
msg_init( ) .
<properties> = cs_properties .
check_subtree( cs_properties-id ) .
deactivate( ) .
READ TABLE t_properties INTO cs_properties
WITH KEY id = cs_properties-id .
ENDMETHOD . "node_set_properties
METHOD get_retmess_icon .
msg_init( ) .
IF iv_id EQ v_root_id .
IF v_active IS INITIAL .
rv_retmess_icon = icon_space .
ELSE .
rv_retmess_icon = icon_activate .
ENDIF .
EXIT .
ENDIF .
enq_lock( iv_formname ) .
v_formname = iv_formname .
v_devclass = get_devclass( iv_formname = iv_formname ) .
v_created_uname = sy-uname .
v_created_datum = sy-datum .
CLEAR: v_changed_uname ,
v_changed_datum .
ENDMETHOD . "set_formname_new
METHOD set_formdescr_new .
msg_init( ) .
v_formdescr = iv_formdescr .
check_subtree( ) .
ENDMETHOD . "set_formdescr_new
METHOD node_clone .
msg_init( ) .
DATA:
ls_prop_sample TYPE ty_s_properties ,
ls_hier_sample TYPE ty_s_hierarchy ,
ls_prop_clone TYPE ty_s_properties ,
lv_id_target_sibling TYPE ty_s_properties-id ,
lv_id_target_parent TYPE ty_s_properties-id .
IF ls_prop_sample-comp_type EQ c_comp_type-root .
MESSAGE e000(lp) WITH v_text-t104 INTO v_dummy . " text: Function has not
been processed
msg_syst_catch( ) .
ENDIF .
CHECK v_retcode NE c_retcode-error .
lv_id_target_parent = iv_id_target_parent .
IF iv_id_target_parent EQ node_get_parent( iv_id_sample ) .
lv_id_target_sibling = iv_id_sample .
ENDIF .
* add node
ls_prop_clone = ls_prop_sample .
rv_id_clone = ls_prop_clone-id .
check_subtree( lv_id_target_parent ) .
ENDMETHOD . "node_clone
METHOD node_clone_recurs .
DATA:
ls_hier_sample TYPE ty_s_hierarchy ,
ls_prop_sample TYPE ty_s_properties ,
ls_prop_clone TYPE ty_s_properties ,
lv_id_sample TYPE snode-id .
lv_id_sample = is_hier_sample_parent-child .
DO .
CLEAR ls_hier_sample .
CLEAR ls_prop_sample .
CLEAR ls_prop_clone .
* copy node
ls_prop_clone = ls_prop_sample .
ENDMETHOD . "node_clone_recurs
METHOD is_component_subnode_of .
DATA lv_form_id_current TYPE ty_s_hierarchy-id .
DATA ls_hierarchy TYPE ty_s_hierarchy .
rv_yes = abap_off .
lv_form_id_current = iv_form_id_checked .
DO .
IF lv_form_id_current EQ iv_form_id .
rv_yes = abap_on .
RETURN .
ENDIF .
CLEAR ls_hierarchy .
READ TABLE t_hierarchy INTO ls_hierarchy
WITH KEY id = lv_form_id_current .
IF ls_hierarchy-parent IS INITIAL .
RETURN .
ENDIF .
lv_form_id_current = ls_hierarchy-parent .
ENDDO .
ENDMETHOD . "is_component_subnode_of
METHOD autostructure_create .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_form_hier TYPE lcl_form=>ty_s_hierarchy ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_sheets TYPE lcl_exceltemplate=>ty_s_sheets .
ENDMETHOD . "autostructure_create
METHOD autostructure_recurs .
DATA:
ls_ctxt_hier TYPE lcl_context=>ty_s_hierarchy ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_form_prop_altern TYPE lcl_form=>ty_s_properties ,
lv_offset TYPE i ,
lv_level TYPE i ,
lv_cb_fullpath TYPE ty_comp_path .
lv_level = iv_parent_level + 1 .
CLEAR ls_form_prop .
ls_form_prop-comp_name = ls_ctxt_prop-comp_name .
ls_form_prop-comp_descr = ls_ctxt_prop-comp_shortdescr .
CASE ls_ctxt_prop-comp_type .
WHEN lcl_context=>c_comp_type-table .
ls_form_prop-comp_type = lcl_form=>c_comp_type-loopstep .
ls_form_prop-id =
node_add( iv_comp_type = ls_form_prop-comp_type
iv_comp_name = ls_form_prop-comp_name
iv_comp_descr = ls_form_prop-comp_descr
iv_parent_id = is_altern_form_prop-id ) .
CHECK v_retcode NE c_retcode-error .
lv_cb_fullpath = ls_ctxt_prop-comp_fullpath .
ls_form_prop_altern = ls_form_prop .
WHEN lcl_context=>c_comp_type-struct .
ls_form_prop-comp_type = lcl_form=>c_comp_type-pattern .
ls_form_prop-id =
node_add( iv_comp_type = ls_form_prop-comp_type
iv_comp_name = ls_form_prop-comp_name
iv_comp_descr = ls_form_prop-comp_descr
iv_parent_id = is_altern_form_prop-id ) .
CHECK v_retcode NE c_retcode-error .
lv_cb_fullpath = iv_parent_cb_fullpath .
ls_form_prop_altern = is_altern_form_prop .
WHEN lcl_context=>c_comp_type-element .
CASE ls_ctxt_prop-type_kind .
WHEN cl_abap_datadescr=>typekind_xstring .
ls_form_prop-comp_type = lcl_form=>c_comp_type-drawing .
WHEN OTHERS .
ls_form_prop-comp_type = lcl_form=>c_comp_type-field .
ENDCASE .
ls_form_prop-id =
node_add( iv_comp_type = ls_form_prop-comp_type
iv_comp_name = ls_form_prop-comp_name
iv_comp_descr = ls_form_prop-comp_descr
iv_parent_id = is_parent_form_prop-id ) .
CHECK v_retcode NE c_retcode-error .
lv_cb_fullpath = ls_ctxt_prop-comp_fullpath .
ls_form_prop_altern = is_altern_form_prop .
WHEN lcl_context=>c_comp_type-tree
OR lcl_context=>c_comp_type-tree_s .
ls_form_prop-comp_type = lcl_form=>c_comp_type-tree .
ls_form_prop-id =
node_add( iv_comp_type = ls_form_prop-comp_type
iv_comp_name = ls_form_prop-comp_name
iv_comp_descr = ls_form_prop-comp_descr
iv_parent_id = is_altern_form_prop-id ) .
CHECK v_retcode NE c_retcode-error .
lv_cb_fullpath = ls_ctxt_prop-comp_fullpath .
ls_form_prop_altern = is_altern_form_prop .
*----------------------------------------------------------------------*
* CLASS lcl_wb_formtree_drgdrpdata DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_wb_formtree_drgdrpdata DEFINITION .
PUBLIC SECTION.
DATA:
v_source_alvtree_nkey TYPE tv_nodekey ,
v_source_form_id TYPE snode-id ,
v_target_alvtree_nkey TYPE tv_nodekey ,
v_target_form_id TYPE snode-id ,
v_terminated TYPE flag ,
r_formtemplate TYPE REF TO lcl_formtemplate .
DATA:
lv_repid TYPE syrepid ,
lv_dynnr TYPE sydynnr ,
lv_text TYPE text100 ,
lv_icon TYPE icon-id ,
ls_events TYPE cntl_simple_event ,
lt_events TYPE cntl_simple_events .
lv_repid = sy-repid .
lv_dynnr = sy-dynnr .
ls_events-eventid = cl_gui_toolbar=>m_id_function_selected .
APPEND ls_events TO lt_events .
CASE iv_mass_processing .
WHEN space . lv_icon = icon_segmented_data_ina .
WHEN OTHERS. lv_icon = icon_segmented_data_act .
ENDCASE .
lv_text = v_text-t214 . " text: Mass processing
r_toolbar->add_button( fcode = c_fcode-appl_mass_processing
icon = lv_icon
butn_type = cntb_btype_button
quickinfo = lv_text(30) ) .
r_toolbar->set_registered_events( events = lt_events ) .
SET HANDLER hndl_toolbar_fcode FOR r_toolbar .
ENDMETHOD . "constructor
METHOD free .
IF r_toolbar IS BOUND .
r_toolbar->free( ) .
FREE r_toolbar .
ENDIF .
IF r_container IS BOUND .
r_container->free( ) .
FREE r_container .
ENDIF .
ENDMETHOD . "free
METHOD hndl_toolbar_fcode .
RAISE EVENT evnt_fcode EXPORTING ev_fcode = fcode .
ENDMETHOD . "hndl_toolbar_fcode
ENDCLASS . "lcl_wb_appltoolbar IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_wb_excelole DEFINITION
*----------------------------------------------------------------------*
* MS-Office template document
*----------------------------------------------------------------------*
CLASS lcl_wb_ole DEFINITION INHERITING FROM lcl_ole .
PUBLIC SECTION .
METHODS:
constructor
IMPORTING ir_container TYPE REF TO cl_gui_container
iv_document_rawdata TYPE xstring
iv_viewmode TYPE flag
EXCEPTIONS process_terminated ,
selection_get
EXPORTING ev_sheet TYPE any
ev_name TYPE any
ev_area_top TYPE i
ev_area_left TYPE i
ev_area_rows TYPE i
ev_area_columns TYPE i ,
selection_set
IMPORTING iv_sheet TYPE any
iv_sheet_only TYPE flag OPTIONAL
iv_area_top TYPE i
iv_area_left TYPE i
iv_area_rows TYPE i
iv_area_columns TYPE i
RETURNING value(rv_sheet_not_found) TYPE flag ,
free REDEFINITION .
*----------------------------------------------------------------------*
* CLASS lcl_wb_ole IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_wb_ole IMPLEMENTATION .
METHOD constructor .
super->constructor(
EXPORTING ir_container = ir_container
iv_document_rawdata = iv_document_rawdata
iv_viewmode = iv_viewmode
iv_readonly = abap_off
EXCEPTIONS OTHERS = 1 ) .
IF sy-subrc NE 0 .
RAISE process_terminated .
ENDIF .
ENDMETHOD . "constructor
METHOD selection_get .
msg_init( ) .
application_availability_check( ) .
CHECK v_retcode NE c_retcode-error .
WHEN 1 .
READ TABLE lt_areas INTO ls_area INDEX 1 .
ev_area_left = ls_area-left .
ev_area_top = ls_area-top .
ev_area_rows = ls_area-rows .
ev_area_columns = ls_area-columns .
IF ev_area_left EQ 1
AND ev_area_top EQ 1
AND ev_area_rows EQ 1000
AND ev_area_columns EQ 1000 .
CLEAR:
ev_area_left ,
ev_area_top ,
ev_area_rows ,
ev_area_columns .
MESSAGE e000(lp) WITH v_text-t051 INTO v_dummy . " text: Select an area
on the actual template sheet
msg_syst_catch( ) .
EXIT .
ENDIF .
WHEN OTHERS .
MESSAGE e000(lp) WITH v_text-t052 INTO v_dummy . " text: Only single area
selection is required
msg_syst_catch( ) .
ENDCASE .
ENDMETHOD . "selection_get
METHOD selection_set .
CLEAR rv_sheet_not_found .
DO 1 TIMES .
IF iv_sheet IS INITIAL .
lv_errorflag = abap_on .
ENDIF .
CHECK lv_errorflag IS INITIAL .
r_spreadsheet->get_sheets(
IMPORTING sheets = lt_sheets
retcode = lv_rc ) .
READ TABLE lt_sheets TRANSPORTING NO FIELDS
WITH KEY sheet_name = iv_sheet .
IF sy-subrc NE 0 .
lv_errorflag = abap_on .
rv_sheet_not_found = abap_on .
ENDIF .
CHECK lv_errorflag IS INITIAL .
r_spreadsheet->select_sheet(
EXPORTING name = iv_sheet
IMPORTING retcode = lv_rc ) .
IF lv_rc NE 'OK' .
lv_errorflag = abap_on .
ENDIF .
CHECK lv_errorflag IS INITIAL .
IF iv_area_top IS INITIAL
AND iv_area_left IS INITIAL
AND iv_area_rows IS INITIAL
AND iv_area_columns IS INITIAL .
lv_errorflag = abap_on .
ENDIF .
CHECK lv_errorflag IS INITIAL .
r_spreadsheet->set_selection(
EXPORTING left = iv_area_left
top = iv_area_top
rows = iv_area_rows
columns = iv_area_columns
IMPORTING retcode = lv_rc ) .
IF lv_rc NE 'OK' .
lv_errorflag = abap_on .
ENDIF .
CHECK lv_errorflag IS INITIAL .
ENDDO .
ENDMETHOD . "selection_set
METHOD free .
super->free( ) .
ENDMETHOD . "free
ENDCLASS . "lcl_wb_ole IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_wb_formtree DEFINITION
*----------------------------------------------------------------------*
* tree for the form structure visualization
*----------------------------------------------------------------------*
CLASS lcl_wb_formtree DEFINITION INHERITING FROM cl_gui_alv_tree .
PUBLIC SECTION .
TYPES:
BEGIN OF ty_s_links ,
alvtree_nkey TYPE tv_nodekey ,
form_id TYPE snode-id ,
END OF ty_s_links ,
ty_t_links TYPE STANDARD TABLE OF ty_s_links .
TYPES:
BEGIN OF ty_s_outtab ,
retmess_icon TYPE icon_d ,
direction_icon TYPE icon_d ,
comp_descr TYPE ddtext ,
END OF ty_s_outtab ,
ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab .
DATA:
r_dgdp_source TYPE REF TO cl_dragdrop ,
r_dgdp_target TYPE REF TO cl_dragdrop ,
r_dgdp_full TYPE REF TO cl_dragdrop ,
r_dgdp_none TYPE REF TO cl_dragdrop ,
v_root_nkey TYPE lvc_nkey VALUE ' 1' ,
t_outtab TYPE ty_t_outtab ,
t_links TYPE ty_t_links .
CONSTANTS:
BEGIN OF c_fcode ,
comp_add_child TYPE ui_func VALUE 'COMP_ADD_CHILD' ,
comp_add_sibling TYPE ui_func VALUE 'COMP_ADD_SIBLING' ,
comp_clone TYPE ui_func VALUE 'COMP_CLONE' ,
comp_clone_mass TYPE ui_func VALUE 'COMP_CLONE_MASS' ,
comp_delete TYPE ui_func VALUE 'COMP_DELETE' ,
comp_delete_mass TYPE ui_func VALUE 'COMP_DELETE_MASS' ,
comp_selected TYPE ui_func VALUE 'COMP_SELECTED' ,
comp_move_sibling_up TYPE ui_func VALUE 'COMP_MOVE_SIBLING_UP' ,
comp_move_sibling_down TYPE ui_func VALUE 'COMP_MOVE_SIBLING_DOWN' ,
comp_select_all TYPE ui_func VALUE 'COMP_SELECT_ALL' ,
comp_tbshift_mass TYPE ui_func VALUE 'COMP_TBSHIFT_MASS' ,
appl_actualize TYPE ui_func VALUE 'APPL_ACTUALIZE' ,
END OF c_fcode .
METHODS:
constructor
IMPORTING ir_container TYPE REF TO cl_gui_container
ir_formtemplate TYPE REF TO lcl_formtemplate
iv_mass_processing TYPE flag DEFAULT space
EXCEPTIONS process_terminated ,
redraw
IMPORTING iv_form_id TYPE snode-id OPTIONAL
ir_formtemplate TYPE REF TO lcl_formtemplate ,
node_add
IMPORTING ir_formtemplate TYPE REF TO lcl_formtemplate
iv_form_id TYPE snode-id
iv_alvtree_nkey TYPE lvc_nkey
iv_sibling TYPE flag DEFAULT space
RETURNING value(rv_alvtree_nkey_new) TYPE lvc_nkey ,
node_del
IMPORTING iv_alvtree_nkey TYPE lvc_nkey ,
node_upd
IMPORTING ir_formtemplate TYPE REF TO lcl_formtemplate
iv_form_id TYPE snode-id
iv_alvtree_nkey TYPE lvc_nkey ,
node_prepare
IMPORTING ir_formtemplate TYPE REF TO lcl_formtemplate
iv_form_id TYPE snode-id
EXPORTING es_form_properties TYPE lcl_formtemplate=>ty_s_properties
es_outtab TYPE ty_s_outtab
es_layn TYPE lvc_s_layn
ev_ntext TYPE lvc_value .
EVENTS:
evnt_fcode
EXPORTING value(ev_fcode) TYPE ui_func
value(ev_form_id) TYPE snode-id ,
evnt_comp_move
EXPORTING value(ev_drag_drop_object) TYPE REF TO cl_dragdropobject .
PRIVATE SECTION .
METHODS:
hndl_toolbar_fcode
FOR EVENT function_selected OF cl_gui_toolbar
IMPORTING fcode ,
hndl_selection_changed
FOR EVENT selection_changed OF cl_gui_alv_tree
IMPORTING node_key ,
hndl_node_double_click
FOR EVENT node_double_click OF cl_gui_alv_tree
IMPORTING node_key ,
hndl_item_double_click
FOR EVENT item_double_click OF cl_gui_alv_tree
IMPORTING node_key fieldname ,
hndl_node_drag
FOR EVENT on_drag OF cl_gui_alv_tree
IMPORTING sender node_key drag_drop_object fieldname ,
hndl_node_drop
FOR EVENT on_drop OF cl_gui_alv_tree
IMPORTING sender node_key drag_drop_object ,
hndl_node_drop_complete
FOR EVENT on_drop_complete OF cl_gui_alv_tree
IMPORTING sender node_key fieldname drag_drop_object ,
hndl_node_context_menu_req
FOR EVENT node_context_menu_request OF cl_gui_alv_tree
IMPORTING node_key menu ,
hndl_node_context_menu_sel
FOR EVENT node_context_menu_selected OF cl_gui_alv_tree
IMPORTING node_key fcode ,
raise_component_selected
IMPORTING iv_alvtree_nkey TYPE lvc_nkey,
redraw_recurs
IMPORTING ir_formtemplate TYPE REF TO lcl_formtemplate
is_form_hier_parent TYPE lcl_formtemplate=>ty_s_hierarchy
OPTIONAL
iv_alvtree_nkey_parent TYPE lvc_nkey DEFAULT space .
super->constructor(
EXPORTING parent = ir_container
node_selection_mode = lv_node_selection_mode
item_selection = abap_off
no_html_header = abap_on
no_toolbar = abap_off
EXCEPTIONS OTHERS = 7 ) .
IF sy-subrc NE 0 .
RAISE process_terminated .
ENDIF .
* hierarchy header
DATA ls_hdr TYPE treev_hhdr .
ls_hdr-heading =
ls_hdr-tooltip = lcl_root=>v_text-t055 . " text: Form structure
ls_hdr-t_image = icon_tree .
ls_hdr-width = 45 .
ls_hdr-width_pix = space .
* variant
DATA ls_var TYPE disvariant .
ls_var-report = sy-repid .
ls_var-handle = '0001' .
CALL FUNCTION 'LVC_VARIANT_DEFAULT_GET'
EXPORTING
i_save = space
CHANGING
cs_variant = ls_var
EXCEPTIONS
OTHERS = 0.
* fieldcatalog
DATA:
ls_fct TYPE lvc_s_fcat ,
lt_fct TYPE lvc_t_fcat .
CLEAR ls_fct .
ls_fct-fieldname = 'RETMESS_ICON' .
ls_fct-scrtext_s =
ls_fct-scrtext_l = ls_fct-scrtext_m =
ls_fct-reptext = ls_fct-coltext = lcl_root=>v_text-t056 . " text: Status
ls_fct-icon = abap_on .
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'DIRECTION_ICON' .
ls_fct-scrtext_s =
ls_fct-scrtext_l = ls_fct-scrtext_m =
ls_fct-reptext = ls_fct-coltext = lcl_root=>v_text-t057 . " text: Direction
ls_fct-icon = abap_on .
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'COMP_DESCR' .
ls_fct-scrtext_s =
ls_fct-scrtext_l = ls_fct-scrtext_m =
ls_fct-reptext = ls_fct-coltext = lcl_root=>v_text-t058 . " text:
Description
ls_fct-outputlen = 20 .
APPEND ls_fct TO lt_fct .
* initialization
me->set_table_for_first_display(
EXPORTING i_save = 'A'
is_hierarchy_header = ls_hdr
is_variant = ls_var
CHANGING it_fieldcatalog = lt_fct[]
it_outtab = t_outtab[] ) .
* tree events
IF iv_mass_processing IS INITIAL .
DATA:
ls_events TYPE cntl_simple_event ,
lt_events TYPE cntl_simple_events .
me->get_registered_events( IMPORTING events = lt_events ) .
* ls_events-eventid = cl_gui_column_tree=>eventid_node_double_click .
* APPEND ls_events TO lt_events .
* ls_events-eventid = cl_gui_column_tree=>eventid_item_double_click .
* APPEND ls_events TO lt_events .
ls_events-eventid = cl_gui_column_tree=>eventid_node_context_menu_req .
APPEND ls_events TO lt_events .
ls_events-eventid = cl_gui_column_tree=>eventid_selection_changed .
APPEND ls_events TO lt_events .
me->set_registered_events( events = lt_events ) .
ENDIF .
SET HANDLER:
hndl_selection_changed FOR me ,
hndl_node_double_click FOR me ,
hndl_item_double_click FOR me ,
hndl_node_drag FOR me ,
hndl_node_drop FOR me ,
hndl_node_drop_complete FOR me ,
hndl_node_context_menu_req FOR me ,
hndl_node_context_menu_sel FOR me .
* tree toolbar
DATA:
lr_toolbar TYPE REF TO cl_gui_toolbar ,
lv_text TYPE text100 .
FIELD-SYMBOLS <table_button> TYPE stb_button .
me->get_toolbar_object( IMPORTING er_toolbar = lr_toolbar ) .
CASE iv_mass_processing .
WHEN space .
lv_text = lcl_root=>v_text-t061 . " text: Delete component
lr_toolbar->add_button( fcode = c_fcode-comp_delete
icon = icon_delete
butn_type = cntb_btype_button
quickinfo = lv_text(30) ) .
* add nodes
me->redraw( ir_formtemplate = ir_formtemplate ) .
ENDMETHOD. "constructor
METHOD redraw .
DATA ls_form_hier TYPE lcl_form=>ty_s_hierarchy .
IF iv_form_id IS INITIAL
OR iv_form_id EQ '000000'
OR iv_form_id EQ ir_formtemplate->v_root_id .
ls_form_hier-child = ir_formtemplate->v_root_id .
ELSE .
READ TABLE ir_formtemplate->t_hierarchy INTO ls_form_hier
WITH KEY id = iv_form_id .
ls_form_hier-id = ls_form_hier-parent .
ls_form_hier-child = iv_form_id .
ENDIF .
lv_form_id_next = is_form_hier_parent-child .
DO .
READ TABLE ir_formtemplate->t_hierarchy ASSIGNING <form_hier>
WITH KEY parent = is_form_hier_parent-id
id = lv_form_id_next .
IF sy-subrc NE 0 .
EXIT .
ENDIF .
IF <form_hier>-next IS INITIAL .
EXIT .
ELSE .
lv_form_id_next = <form_hier>-next .
ENDIF .
ENDDO .
ENDMETHOD . "redraw_recurs
METHOD node_prepare .
DATA ls_hierarchy TYPE lcl_form=>ty_s_hierarchy .
DATA ls_comp_types TYPE lcl_form=>ty_s_comp_types .
DATA lv_dragdropid TYPE i .
CLEAR es_form_properties .
CLEAR es_outtab .
CLEAR es_layn .
CLEAR ev_ntext .
* node layout
READ TABLE ir_formtemplate->t_comp_types INTO ls_comp_types
WITH KEY comp_type = es_form_properties-comp_type
BINARY SEARCH .
IF sy-subrc EQ 0 .
es_layn-n_image = es_layn-exp_image = ls_comp_types-icon .
ENDIF .
CASE es_form_properties-comp_type .
WHEN ir_formtemplate->c_comp_type-sheet
OR ir_formtemplate->c_comp_type-loopstep
OR ir_formtemplate->c_comp_type-pattern
OR ir_formtemplate->c_comp_type-respattern
OR ir_formtemplate->c_comp_type-folder .
r_dgdp_full->get_handle( IMPORTING handle = lv_dragdropid ) .
WHEN ir_formtemplate->c_comp_type-field
OR ir_formtemplate->c_comp_type-drawing
OR ir_formtemplate->c_comp_type-chart
OR ir_formtemplate->c_comp_type-tree
OR ir_formtemplate->c_comp_type-grid .
r_dgdp_source->get_handle( IMPORTING handle = lv_dragdropid ) .
WHEN ir_formtemplate->c_comp_type-root .
r_dgdp_target->get_handle( IMPORTING handle = lv_dragdropid ) .
WHEN OTHERS .
r_dgdp_none->get_handle( IMPORTING handle = lv_dragdropid ) .
ENDCASE .
es_layn-dragdropid = lv_dragdropid .
* node text
ev_ntext = es_form_properties-comp_name .
* outtab
es_outtab-comp_descr = es_form_properties-comp_descr .
CASE es_form_properties-draft_subtree .
WHEN ir_formtemplate->c_draft_subtree-yes . es_outtab-retmess_icon =
icon_delete_template .
WHEN ir_formtemplate->c_draft_subtree-legacy . es_outtab-retmess_icon =
icon_dummy .
WHEN OTHERS . es_outtab-retmess_icon = ir_formtemplate-
>get_retmess_icon( iv_form_id ) .
ENDCASE .
CASE es_form_properties-comp_type .
WHEN ir_formtemplate->c_comp_type-pattern
OR ir_formtemplate->c_comp_type-respattern
OR ir_formtemplate->c_comp_type-folder
OR ir_formtemplate->c_comp_type-tree
OR ir_formtemplate->c_comp_type-grid .
CASE es_form_properties-tb_direction .
WHEN ir_formtemplate->c_tb_direction-left2right .
es_outtab-direction_icon = icon_trend_unchanged .
WHEN ir_formtemplate->c_tb_direction-up2down .
es_outtab-direction_icon = icon_trend_down .
WHEN OTHERS .
es_outtab-direction_icon = space .
ENDCASE .
WHEN OTHERS .
es_outtab-direction_icon = space .
ENDCASE .
ENDMETHOD. "node_prepare
METHOD node_add .
DATA:
ls_form_properties TYPE lcl_formtemplate=>ty_s_properties ,
ls_outtab TYPE ty_s_outtab ,
ls_layn TYPE lvc_s_layn ,
lv_ntext TYPE lvc_value ,
ls_links TYPE ty_s_links ,
lv_relationship LIKE cl_gui_column_tree=>relat_next_sibling .
node_prepare(
EXPORTING ir_formtemplate = ir_formtemplate
iv_form_id = iv_form_id
IMPORTING es_form_properties = ls_form_properties
es_outtab = ls_outtab
es_layn = ls_layn
ev_ntext = lv_ntext ) .
CASE iv_sibling .
WHEN space . lv_relationship = cl_gui_column_tree=>relat_last_child .
WHEN OTHERS . lv_relationship = cl_gui_column_tree=>relat_next_sibling .
ENDCASE .
me->add_node(
EXPORTING i_relat_node_key = iv_alvtree_nkey
i_relationship = lv_relationship
i_node_text = lv_ntext
is_outtab_line = ls_outtab
is_node_layout = ls_layn
IMPORTING e_new_node_key = rv_alvtree_nkey_new ) .
IF ls_form_properties-id EQ ir_formtemplate->v_root_id .
v_root_nkey = rv_alvtree_nkey_new .
ENDIF .
ls_links-form_id = iv_form_id .
ls_links-alvtree_nkey = rv_alvtree_nkey_new .
APPEND ls_links TO t_links .
DATA:
ls_outtab TYPE ty_s_outtab ,
ls_layn TYPE lvc_s_layn ,
lv_ntext TYPE lvc_value ,
ls_outtab_old TYPE ty_s_outtab ,
lv_ntext_old TYPE lvc_value ,
ls_layn_old TYPE lvc_s_layn ,
ls_lacn TYPE lvc_s_lacn ,
lv_ntext_flag TYPE flag .
me->change_node(
EXPORTING i_node_key = iv_alvtree_nkey
i_outtab_line = ls_outtab
is_node_layout = ls_lacn
i_node_text = lv_ntext
i_u_node_text = lv_ntext_flag ) .
ENDMETHOD . "node_upd
METHOD hndl_toolbar_fcode .
DATA:
lv_node_key TYPE lvc_nkey ,
lt_node_key TYPE lvc_t_nkey ,
ls_links TYPE ty_s_links .
ENDMETHOD . "hndl_toolbar_fcode
METHOD hndl_selection_changed .
raise_component_selected( node_key ) .
ENDMETHOD . "hndl_selection_changed
METHOD hndl_node_double_click .
raise_component_selected( node_key ) .
ENDMETHOD . "hndl_node_double_click
METHOD hndl_item_double_click .
raise_component_selected( node_key ) .
ENDMETHOD . "hndl_item_double_click
METHOD hndl_node_drag .
DATA lr_dragdrop_data TYPE REF TO lcl_wb_formtree_drgdrpdata .
FIELD-SYMBOLS <links> TYPE ty_s_links .
CHECK sy-subrc NE 0 .
drag_drop_object->abort( ) .
ENDMETHOD . "hndl_node_drop
METHOD hndl_node_drop_complete .
DATA lr_dragdrop_data TYPE REF TO lcl_wb_formtree_drgdrpdata .
* move subtree
move_node(
EXPORTING i_node_key = lr_dragdrop_data->v_source_alvtree_nkey
i_relatkey = lr_dragdrop_data->v_target_alvtree_nkey
i_relatship = cl_gui_column_tree=>relat_last_child
EXCEPTIONS node_not_found = 1
relative_not_found = 2
OTHERS = 3 ) .
IF sy-subrc EQ 0 .
redraw( iv_form_id = lr_dragdrop_data->v_target_form_id
"lr_dragdrop_data->v_source_form_id
ir_formtemplate = lr_dragdrop_data->r_formtemplate ) .
ENDMETHOD . "hndl_node_drop_complete
METHOD hndl_node_context_menu_req .
DATA lv_text TYPE gui_text .
*----------------------------------------------------------------------*
* CLASS lcl_wb_protab DEFINITION
*----------------------------------------------------------------------*
* tab bar of the properties
*----------------------------------------------------------------------*
CLASS lcl_wb_protab DEFINITION INHERITING FROM lcl_root .
PUBLIC SECTION .
DATA:
* ----------- general
v_form_id TYPE snode-id ,
v_formdescr TYPE string ,
v_devclass TYPE tadir-devclass ,
v_extension TYPE ty_char10 ,
v_created_uname TYPE syuname ,
v_created_datum TYPE sydatum ,
v_changed_uname TYPE syuname ,
v_changed_datum TYPE sydatum ,
v_contextname TYPE string ,
v_contextshortdescr TYPE string ,
s_comp_types TYPE ty_s_comp_types ,
v_dummy_text TYPE string ,
* ----------- tabs appearance
v_rt_show TYPE flag ,
v_cm_show TYPE flag ,
v_pr_show TYPE flag ,
v_ms_show TYPE flag ,
v_dm_show TYPE flag ,
* ----------- comp.properties
s_form_prop TYPE lcl_form=>ty_s_properties ,
v_tb_printtitles_r_name TYPE ty_comp_name ,
v_tb_printtitles_c_name TYPE ty_comp_name ,
v_dataset_name TYPE ty_char100 ,
v_valvld_for1_dataset_name TYPE ty_char100 ,
v_valvld_for1_dataset_field TYPE ty_char100 ,
* ----------- messages
t_ms_retmess TYPE bapiret2_t ,
v_ms_logh TYPE balloghndl ,
v_ms_cnth TYPE balcnthndl .
METHODS:
constructor
IMPORTING ir_container TYPE REF TO cl_gui_container ,
free,
redraw
IMPORTING ir_formtemplate TYPE REF TO lcl_formtemplate
iv_form_id TYPE snode-id OPTIONAL
iv_activetab_id TYPE i OPTIONAL ,
redraw_dummy
IMPORTING iv_text TYPE any OPTIONAL
iv_icon TYPE icon-id OPTIONAL .
CONSTANTS:
BEGIN OF c_tab_id ,
root TYPE i VALUE 1 ,
common TYPE i VALUE 2 ,
adjustments TYPE i VALUE 3 ,
messages TYPE i VALUE 4 ,
dummy TYPE i VALUE 5 ,
END OF c_tab_id .
CONSTANTS:
BEGIN OF c_fcode ,
context_change TYPE ui_func VALUE 'CONTEXT_CHANGE' ,
formdescr_change TYPE ui_func VALUE 'FORMDESCR_CHANGE' ,
format_change TYPE ui_func VALUE 'FORMAT_CHANGE' ,
compname_change TYPE ui_func VALUE 'COMPNAME_CHANGE' ,
cb_relpath_change_f4 TYPE ui_func VALUE 'CB_RELPATH_CHANGE_F4' ,
cb_relpath_change_mn TYPE ui_func VALUE 'CB_RELPATH_CHANGE_MN' ,
cb_relpath_delete TYPE ui_func VALUE 'CB_RELPATH_DELETE' ,
cb_aprpath_change_f4 TYPE ui_func VALUE 'CB_APRPATH_CHANGE_F4' ,
cb_aprpath_change_mn TYPE ui_func VALUE 'CB_APRPATH_CHANGE_MN' ,
cb_aprchar_change TYPE ui_func VALUE 'CB_APRCHAR_CHANGE' ,
cb_aprpath_delete TYPE ui_func VALUE 'CB_APRPATH_DELETE' ,
cb_cellrng_change_f4 TYPE ui_func VALUE 'CB_CELLRNG_CHANGE_F4' ,
cb_cellrng_change_mn TYPE ui_func VALUE 'CB_CELLRNG_CHANGE_MN' ,
cb_cellrng_change_char TYPE ui_func VALUE 'CB_CELLRNG_CHANGE_CHAR' ,
cb_cellrng_delete TYPE ui_func VALUE 'CB_CELLRNG_DELETE' ,
cb_valpath_change_f4 TYPE ui_func VALUE 'CB_VALPATH_CHANGE_F4' ,
cb_valpath_change_mn TYPE ui_func VALUE 'CB_VALPATH_CHANGE_MN' ,
cb_valpath_sub TYPE ui_func VALUE 'CB_VALPATH_SUB' ,
cb_valchar_change TYPE ui_func VALUE 'CB_VALCHAR_CHANGE' ,
cb_valpath_delete TYPE ui_func VALUE 'CB_VALPATH_DELETE' ,
cb_valconv_change TYPE ui_func VALUE 'CB_VALCONV_CHANGE' ,
cb_valvld_attrpath_change_f4 TYPE ui_func VALUE
'CB_VALVLD_ATTRPATH_CHANGE_F4' ,
cb_valvld_attrpath_change_mn TYPE ui_func VALUE
'CB_VALVLD_ATTRPATH_CHANGE_MN' ,
cb_valvld_attrpath_delete TYPE ui_func VALUE 'CB_VALVLD_ATTRPATH_DELETE
' ,
PRIVATE SECTION .
DATA:
r_container TYPE REF TO cl_gui_container ,
r_container_bar TYPE REF TO cl_gui_container_bar_2 ,
r_menutree_rt TYPE REF TO cl_gui_list_tree ,
r_menutree_cm TYPE REF TO cl_gui_list_tree ,
r_menutree_pr TYPE REF TO cl_gui_list_tree .
CONSTANTS:
BEGIN OF c_nkey ,
cntxt TYPE tv_nodekey VALUE 'CNTXT' ,
cntxt_name TYPE tv_nodekey VALUE 'CNTXT_NAME' ,
formdescr TYPE tv_nodekey VALUE 'FORMDESCR' ,
formdescr_name TYPE tv_nodekey VALUE 'FORMDESCR_NM' ,
format TYPE tv_nodekey VALUE 'FORMAT' ,
format_line1 TYPE tv_nodekey VALUE 'FORMAT_LINE1' ,
postprocessing TYPE tv_nodekey VALUE 'POSTPROCESSING' ,
postproc_line1 TYPE tv_nodekey VALUE 'POSTPROC_LINE1' ,
techinfo TYPE tv_nodekey VALUE 'TECHINFO' ,
created TYPE tv_nodekey VALUE 'CREATED' ,
changed TYPE tv_nodekey VALUE 'CHANGED' ,
devclass TYPE tv_nodekey VALUE 'DEVCLASS' ,
relpath TYPE tv_nodekey VALUE 'RELPATH' ,
relpath_line1 TYPE tv_nodekey VALUE 'RELPATH_1' ,
relpath_line2 TYPE tv_nodekey VALUE 'RELPATH_2' ,
cellrng TYPE tv_nodekey VALUE 'CELLRNG' ,
cellrng_line1 TYPE tv_nodekey VALUE 'CELLRNG_1' ,
cellrng_line2 TYPE tv_nodekey VALUE 'CELLRNG_2' ,
cellrng_line3 TYPE tv_nodekey VALUE 'CELLRNG_3' ,
aprpath TYPE tv_nodekey VALUE 'APRPATH' ,
aprpath_line1 TYPE tv_nodekey VALUE 'APRPATH_1' ,
aprpath_line2 TYPE tv_nodekey VALUE 'APRPATH_2' ,
aprpath_line3 TYPE tv_nodekey VALUE 'APRPATH_3' ,
valpath TYPE tv_nodekey VALUE 'VALPATH' ,
valpath_line1 TYPE tv_nodekey VALUE 'VALPATH_1' ,
valpath_line2 TYPE tv_nodekey VALUE 'VALPATH_2' ,
valpath_line3 TYPE tv_nodekey VALUE 'VALPATH_3' ,
valpath_line4 TYPE tv_nodekey VALUE 'VALPATH_4' ,
vallayout TYPE tv_nodekey VALUE 'VALLAYOUT' ,
vallayout_line1 TYPE tv_nodekey VALUE 'VALLAYOUT_1' ,
vallayout_line2 TYPE tv_nodekey VALUE 'VALLAYOUT_2' ,
vallayout_line3 TYPE tv_nodekey VALUE 'VALLAYOUT_3' ,
vallayout_line31 TYPE tv_nodekey VALUE 'VALLAYOUT_31' ,
valvalid TYPE tv_nodekey VALUE 'VALIDAT' ,
valvalid_line1 TYPE tv_nodekey VALUE 'VALIDAT_1' ,
valvalid_line11 TYPE tv_nodekey VALUE 'VALIDAT_11' ,
valvalid_line12 TYPE tv_nodekey VALUE 'VALIDAT_12' ,
valvalid_line2 TYPE tv_nodekey VALUE 'VALIDAT_2' ,
valvalid_line21 TYPE tv_nodekey VALUE 'VALIDAT_21' ,
valvalid_line22 TYPE tv_nodekey VALUE 'VALIDAT_22' ,
valvalid_line23 TYPE tv_nodekey VALUE 'VALIDAT_23' ,
valvalid_line3 TYPE tv_nodekey VALUE 'VALIDAT_3' ,
valvalid_line31 TYPE tv_nodekey VALUE 'VALIDAT_31' ,
valvalid_line32 TYPE tv_nodekey VALUE 'VALIDAT_32' ,
valvalid_line33 TYPE tv_nodekey VALUE 'VALIDAT_33' ,
component TYPE tv_nodekey VALUE 'COMP' ,
component_line1 TYPE tv_nodekey VALUE 'COMP_1' ,
component_line2 TYPE tv_nodekey VALUE 'COMP_2' ,
sheet TYPE tv_nodekey VALUE 'SHEET' ,
sheet_line1 TYPE tv_nodekey VALUE 'SHEET_1' ,
area TYPE tv_nodekey VALUE 'AREA' ,
area_line1 TYPE tv_nodekey VALUE 'AREA_1' ,
direction TYPE tv_nodekey VALUE 'DIRECTION' ,
direction_line1 TYPE tv_nodekey VALUE 'DIRECTION_1' ,
colrow_prop TYPE tv_nodekey VALUE 'COLROW_PRP' ,
colrow_prop_line1 TYPE tv_nodekey VALUE 'COLROW_PRP_1' ,
colrow_grp TYPE tv_nodekey VALUE 'COLROW_GRP' ,
colrow_grp_line1 TYPE tv_nodekey VALUE 'COLROW_GRP_1' ,
drwstat TYPE tv_nodekey VALUE 'DRWSTAT' ,
drwstat_line1 TYPE tv_nodekey VALUE 'DRWSTAT_1' ,
drwstat_line2 TYPE tv_nodekey VALUE 'DRWSTAT_2' ,
drwsize TYPE tv_nodekey VALUE 'DRWSIZE' ,
drwsize_line1 TYPE tv_nodekey VALUE 'DRWSIZE_1' ,
drwsize_line2 TYPE tv_nodekey VALUE 'DRWSIZE_2' ,
drwsize_line3 TYPE tv_nodekey VALUE 'DRWSIZE_3' ,
chart_layout TYPE tv_nodekey VALUE 'CHARTLAYOUT' ,
chart_model TYPE tv_nodekey VALUE 'CHART_MDL' ,
chart_title TYPE tv_nodekey VALUE 'CHART_TITLE' ,
chart_title_catax TYPE tv_nodekey VALUE 'CHART_TLCATAX' ,
chart_title_valax TYPE tv_nodekey VALUE 'CHART_TLVALAX' ,
chart_title_ser TYPE tv_nodekey VALUE 'CHART_TLSER' ,
chart_dtset TYPE tv_nodekey VALUE 'CHART_DTS' ,
chart_dtset_1 TYPE tv_nodekey VALUE 'CHART_DTS_1' ,
chart_dtset_2 TYPE tv_nodekey VALUE 'CHART_DTS_2' ,
printtitles TYPE tv_nodekey VALUE 'PRINTTL' ,
printtitles_line1 TYPE tv_nodekey VALUE 'PRINTTL_1' ,
printtitles_line2 TYPE tv_nodekey VALUE 'PRINTTL_2' ,
sheetprot TYPE tv_nodekey VALUE 'SHEETPROT' ,
sheetprot_line1 TYPE tv_nodekey VALUE 'SHEETPROT_1' ,
sheetprot_line2 TYPE tv_nodekey VALUE 'SHEETPROT_2' ,
sheetprot_line3 TYPE tv_nodekey VALUE 'SHEETPROT_3' ,
sheetprot_line4 TYPE tv_nodekey VALUE 'SHEETPROT_4' ,
pgbrk TYPE tv_nodekey VALUE 'PGBRK' ,
pgbrk_line1 TYPE tv_nodekey VALUE 'PGBRK_1' ,
pgbrk_line2 TYPE tv_nodekey VALUE 'PGBRK_2' ,
nopgbrk TYPE tv_nodekey VALUE 'NOPGBRK' ,
nopgbrk_line1 TYPE tv_nodekey VALUE 'NOPGBRK_1' ,
nopgbrk_line2 TYPE tv_nodekey VALUE 'NOPGBRK_2' ,
mergecells TYPE tv_nodekey VALUE 'MRGCELLS' ,
mergecells_line1 TYPE tv_nodekey VALUE 'MRGCELLS_1' ,
mergecells_line2 TYPE tv_nodekey VALUE 'MRGCELLS_2' ,
autofitmrg TYPE tv_nodekey VALUE 'AUTOFITMRG' ,
autofitmrg_line1 TYPE tv_nodekey VALUE 'AUTOFITMRG_1' ,
treelayout TYPE tv_nodekey VALUE 'TREELAYOUT' ,
treelayout_line1 TYPE tv_nodekey VALUE 'TREELAYO_1' ,
treelayout_line2 TYPE tv_nodekey VALUE 'TREELAYO_2' ,
treelayout_line3 TYPE tv_nodekey VALUE 'TREELAYO_3' ,
treelayout_line4 TYPE tv_nodekey VALUE 'TREELAYO_4' ,
treelayout_line5 TYPE tv_nodekey VALUE 'TREELAYO_5' ,
treelayout_line6 TYPE tv_nodekey VALUE 'TREELAYO_6' ,
treelayout_line61 TYPE tv_nodekey VALUE 'TREELAYO_61' ,
treelayout_line62 TYPE tv_nodekey VALUE 'TREELAYO_62' ,
gridlayout TYPE tv_nodekey VALUE 'GRIDLAYOUT' ,
gridlayout_line1 TYPE tv_nodekey VALUE 'GRIDLAYO_1' ,
gridlayout_line2 TYPE tv_nodekey VALUE 'GRIDLAYO_2' ,
gridlayout_line3 TYPE tv_nodekey VALUE 'GRIDLAYO_3' ,
gridlayout_line4 TYPE tv_nodekey VALUE 'GRIDLAYO_4' ,
draft TYPE tv_nodekey VALUE 'DRAFT' ,
draft_line1 TYPE tv_nodekey VALUE 'DRAFT_1' ,
loop TYPE tv_nodekey VALUE 'LOOP' ,
loop_line1 TYPE tv_nodekey VALUE 'LOOP_1' ,
root_others TYPE tv_nodekey VALUE 'ROOT_OTH' ,
root_others_line1 TYPE tv_nodekey VALUE 'ROOT_OTH_1' ,
respatt_place TYPE tv_nodekey VALUE 'RPT_PLACE' ,
respatt_place_line1 TYPE tv_nodekey VALUE 'RPT_PLACE1' ,
END OF c_nkey .
METHODS:
hndl_tab_clicked
FOR EVENT clicked OF cl_gui_container_bar_2
IMPORTING id container name ,
hndl_button_click
FOR EVENT button_click OF cl_gui_list_tree
IMPORTING sender node_key item_name ,
redraw_tab_rt
IMPORTING ir_container TYPE REF TO cl_gui_container ,
redraw_tab_cm
IMPORTING ir_container TYPE REF TO cl_gui_container ,
redraw_tab_pr
IMPORTING ir_container TYPE REF TO cl_gui_container ,
redraw_tab_ms
IMPORTING ir_container TYPE REF TO cl_gui_container ,
redraw_tab_dm
IMPORTING ir_container TYPE REF TO cl_gui_container ,
redraw_menutree
IMPORTING it_nodes TYPE treev_ntab
it_items TYPE STANDARD TABLE
ir_container TYPE REF TO cl_gui_container
CHANGING cr_menutree TYPE REF TO cl_gui_list_tree ,
tab_block_context
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_format
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_postprocessing
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_root_others
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_techinfo
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_formdescr
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_component
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_loop
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_relpath
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_relpath_apr
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_relpath_cellrng
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_relpath_val
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_val_layout
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_val_validation
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_sheet_tb
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_printtitles
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_sheetprotection
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_pgbrk
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_draft
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_area
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_direction
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_mergecells
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_colrow_prop
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_colrow_group
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_autofitmerged
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_respattern_place
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_drwstat
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_drwsize
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_chart
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_tree_layout
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
tab_block_grid_layout
CHANGING ct_nodes TYPE treev_ntab
ct_items TYPE STANDARD TABLE ,
format_text1
IMPORTING iv_offset TYPE any
iv_match TYPE any
EXPORTING ev_text TYPE any .
r_container = ir_container .
DATA:
ls_captions TYPE sbptcaptn ,
lt_captions TYPE sbptcaptns .
ENDMETHOD . "constructor
METHOD free .
IF r_menutree_rt IS BOUND .
r_menutree_rt->free( ) .
FREE r_menutree_rt .
ENDIF.
IF r_menutree_cm IS BOUND .
r_menutree_cm->free( ) .
FREE r_menutree_cm .
ENDIF.
IF r_menutree_pr IS BOUND .
r_menutree_pr->free( ) .
FREE r_menutree_pr .
ENDIF.
IF r_container_bar IS BOUND .
r_container_bar->free( ) .
FREE r_container_bar .
ENDIF.
IF r_container IS BOUND .
r_container->free( ) .
FREE r_container .
ENDIF .
ENDMETHOD . "free
METHOD redraw_dummy .
v_rt_show = abap_off .
v_cm_show = abap_off .
v_pr_show = abap_off .
v_ms_show = abap_off .
v_dm_show = abap_on .
v_dummy_text = iv_text .
ENDMETHOD . "redraw_dummy
METHOD redraw .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
lv_sheet_compname TYPE ty_char100 ,
lv_sheet_compname_ds TYPE ty_char100 ,
ls_ms_retmess TYPE bapiret2 ,
lv_ms_error TYPE flag ,
ls_ctxt_prop_ds TYPE lcl_context=>ty_s_properties ,
lt_ctxt_prop_ds TYPE lcl_context=>ty_t_properties .
CLEAR s_comp_types .
READ TABLE ir_formtemplate->t_comp_types INTO s_comp_types
WITH KEY comp_type = s_form_prop-comp_type
BINARY SEARCH .
ir_formtemplate->node_get_protab_relevance(
EXPORTING is_properties = s_form_prop
IMPORTING ev_rt_show = v_rt_show
ev_cm_show = v_cm_show
ev_pr_show = v_pr_show
ev_ms_show = v_ms_show ) .
CHECK ir_formtemplate->v_retcode NE ir_formtemplate->c_retcode-error .
v_form_id = iv_form_id .
v_formdescr = ir_formtemplate->v_formdescr .
v_devclass = ir_formtemplate->v_devclass .
v_extension = ir_formtemplate->r_exceltemplate->v_extension .
v_created_uname = ir_formtemplate->v_created_uname .
v_created_datum = ir_formtemplate->v_created_datum .
v_changed_uname = ir_formtemplate->v_changed_uname .
v_changed_datum = ir_formtemplate->v_changed_datum .
v_contextname = ir_formtemplate->r_context->v_contextname .
v_contextshortdescr = ir_formtemplate->r_context->v_contextshortdescr .
t_ms_retmess = ls_form_excp-t_retmess .
lv_ms_error = abap_on .
EXIT .
ENDLOOP .
CLEAR v_tb_printtitles_c_name .
IF s_form_prop-tb_printtitles_c IS NOT INITIAL .
ls_form_prop = ir_formtemplate->node_get_properties( s_form_prop-
tb_printtitles_c ) .
IF ir_formtemplate->v_retcode NE c_retcode-error .
v_tb_printtitles_c_name = ls_form_prop-comp_name .
ENDIF .
ENDIF .
CLEAR ls_form_prop .
ls_form_prop = ir_formtemplate->node_get_properties( s_form_prop-dataset_id )
.
v_dataset_name = ls_form_prop-comp_name .
CHECK ls_form_prop-id IS NOT INITIAL .
CLEAR ls_form_prop .
ls_form_prop = ir_formtemplate->node_get_properties( s_form_prop-
cb_valvld_for1_dataset_id ) .
v_valvld_for1_dataset_name = ls_form_prop-comp_name .
ir_formtemplate->get_grid_fldseqprop(
EXPORTING iv_id = s_form_prop-cb_valvld_for1_dataset_id
IMPORTING et_ctxt_prop = lt_ctxt_prop_ds[] ).
v_valvld_for1_dataset_field = ls_ctxt_prop_ds-comp_name .
IF ls_ctxt_prop_ds-comp_shortdescr IS NOT INITIAL .
CONCATENATE v_valvld_for1_dataset_field ` (`
ls_ctxt_prop_ds-comp_shortdescr `)`
INTO v_valvld_for1_dataset_field .
ENDIF .
ENDDO .
*------
IF v_cm_show IS NOT INITIAL .
DATA ls_caption TYPE sbptcaptn .
CONCATENATE '~~' s_form_prop-comp_name
'~~' s_form_prop-comp_descr INTO ls_caption-caption .
SET LOCALE LANGUAGE sy-langu .
TRANSLATE ls_caption-caption USING '~ ' .
ls_caption-icon = s_comp_types-icon .
ls_caption-no_close = abap_on .
ls_caption-invisible = abap_on .
ls_caption-name = 'COMMON' .
r_container_bar->set_cell_caption( id = c_tab_id-common caption = ls_caption
) .
ENDIF .
ENDMETHOD . "redraw
METHOD hndl_tab_clicked .
CASE id .
WHEN c_tab_id-root . redraw_tab_rt( container ) .
WHEN c_tab_id-common . redraw_tab_cm( container ) .
WHEN c_tab_id-adjustments . redraw_tab_pr( container ) .
WHEN c_tab_id-messages . redraw_tab_ms( container ) .
WHEN c_tab_id-dummy . redraw_tab_dm( container ) .
ENDCASE .
ENDMETHOD . "hndl_tab_clicked
METHOD redraw_tab_rt .
CHECK v_rt_show EQ abap_on .
DATA:
lt_nodes TYPE treev_ntab ,
lt_items TYPE STANDARD TABLE OF mtreeitm
WITH DEFAULT KEY .
tab_block_formdescr(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_context(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_format(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_postprocessing(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_root_others(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_techinfo(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
redraw_menutree(
EXPORTING it_nodes = lt_nodes
it_items = lt_items
ir_container = ir_container
CHANGING cr_menutree = r_menutree_rt ) .
ENDMETHOD . "redraw_tab_rt
METHOD redraw_tab_cm .
CHECK v_cm_show EQ abap_on .
DATA:
lt_nodes TYPE treev_ntab ,
lt_items TYPE STANDARD TABLE OF mtreeitm
WITH DEFAULT KEY .
ENDMETHOD . "redraw_tab_cm
METHOD redraw_tab_pr .
CHECK v_pr_show EQ abap_on .
DATA:
lt_nodes TYPE treev_ntab,
lt_items TYPE STANDARD TABLE OF mtreeitm
WITH DEFAULT KEY .
CASE s_comp_types-comp_type .
WHEN lcl_form=>c_comp_type-sheet .
tab_block_sheet_tb(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_val(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_apr(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_printtitles(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_sheetprotection(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-folder .
tab_block_relpath(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_apr(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_direction(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_cellrng(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_colrow_group(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_pgbrk(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_draft(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-loopstep .
tab_block_relpath(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_loop(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-pattern .
tab_block_area(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_apr(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_direction(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_colrow_prop(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_autofitmerged(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-respattern .
tab_block_area(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_apr(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_direction(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_mergecells(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_respattern_place(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_colrow_prop(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_autofitmerged(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-field .
tab_block_area(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_val(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_val_layout(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_val_validation(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-drawing .
tab_block_area(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_drwsize(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_apr(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_drwstat(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
IF s_form_prop-tb_drwstat_flag IS INITIAL .
tab_block_relpath_val(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
ENDIF .
WHEN lcl_form=>c_comp_type-chart .
tab_block_area(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_drwsize(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_apr(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_chart(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-tree .
tab_block_area(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_val(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_direction(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_tree_layout(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN lcl_form=>c_comp_type-grid .
tab_block_area(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_relpath_val(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_direction(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
tab_block_grid_layout(
CHANGING ct_nodes = lt_nodes
ct_items = lt_items ) .
WHEN OTHERS .
ENDCASE .
DATA:
lt_ms_logh TYPE bal_t_logh ,
ls_log TYPE bal_s_log ,
ls_msg TYPE bal_s_msg ,
ls_display_profile TYPE bal_s_prof ,
ls_retmess TYPE bapiret2 .
IF v_ms_logh IS INITIAL .
ls_log-extnumber = 'COMP_MESSAGES' .
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = v_ms_logh
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc EQ 0 .
INSERT v_ms_logh INTO TABLE lt_ms_logh .
IF lt_ms_logh[] IS INITIAL .
INSERT v_ms_logh INTO TABLE lt_ms_logh .
ENDIF .
ENDMETHOD . "redraw_tab_ms
METHOD redraw_tab_dm .
CHECK v_dm_show EQ abap_on .
DATA:
lr_html_document TYPE REF TO cl_dd_document ,
lv_text TYPE sdydo_text_element .
lr_html_document->underline( ) .
lv_text = v_dummy_text .
lr_html_document->add_text( text = lv_text
sap_style = cl_dd_document=>heading ).
lr_html_document->underline( ) .
lr_html_document->merge_document( ) .
lr_html_document->display_document( parent = ir_container ) .
ENDMETHOD . "redraw_tab_dm
METHOD redraw_menutree .
DATA:
ls_events TYPE cntl_simple_event ,
lt_events TYPE cntl_simple_events ,
ls_node TYPE treev_node ,
lt_collapsed TYPE treev_nks .
ls_events-eventid = cl_gui_list_tree=>eventid_button_click .
APPEND ls_events TO lt_events .
ls_events-eventid = cl_gui_list_tree=>eventid_checkbox_change .
APPEND ls_events TO lt_events .
cr_menutree->set_registered_events(
EXPORTING events = lt_events
EXCEPTIONS OTHERS = 3 ) .
IF sy-subrc NE 0 .
MESSAGE i000(lp) WITH v_text-t072 . " text: Error Creating Control
EXIT .
ENDIF .
cr_menutree->add_nodes_and_items(
EXPORTING node_table = it_nodes
item_table = it_items
item_table_structure_name = 'MTREEITM'
EXCEPTIONS OTHERS = 7 ) .
IF sy-subrc NE 0 .
MESSAGE i000(lp) WITH v_text-t072 . " text: Error Creating Control
EXIT .
ENDIF .
cr_menutree->expand_root_nodes(
EXPORTING level_count = 10
expand_subtree = abap_on
EXCEPTIONS OTHERS = 0 ) .
ENDMETHOD . "redraw_menutree
METHOD hndl_button_click .
DATA lv_fcode TYPE ui_func .
* translate button click (in the tree of properties tab) to user command
CASE sender .
WHEN r_menutree_rt .
IF node_key EQ c_nkey-cntxt_name AND item_name EQ '1' .
lv_fcode = c_fcode-context_change .
ELSEIF node_key EQ c_nkey-formdescr_name AND item_name EQ '1' .
lv_fcode = c_fcode-formdescr_change .
ELSEIF node_key EQ c_nkey-format_line1 AND item_name EQ '1' .
lv_fcode = c_fcode-format_change .
ELSEIF node_key EQ c_nkey-postproc_line1 AND item_name EQ '1' .
lv_fcode = c_fcode-postproc_vbs_code .
ELSEIF node_key EQ c_nkey-postproc_line1 AND item_name EQ '2' .
lv_fcode = c_fcode-postproc_vbs_tables .
ELSEIF node_key EQ c_nkey-root_others_line1 AND item_name EQ '1' .
lv_fcode = c_fcode-definednames_dont_remove .
ENDIF .
WHEN r_menutree_cm .
IF node_key EQ c_nkey-component AND item_name EQ '1' .
lv_fcode = c_fcode-compname_change .
ENDIF .
WHEN r_menutree_pr .
IF node_key EQ c_nkey-relpath_line1 AND item_name EQ '1' .
lv_fcode = c_fcode-cb_relpath_change_f4 .
ELSEIF node_key EQ c_nkey-relpath_line1 AND item_name EQ '2' .
lv_fcode = c_fcode-cb_relpath_change_mn .
ELSEIF node_key EQ c_nkey-relpath_line1 AND item_name EQ '3' .
lv_fcode = c_fcode-cb_relpath_delete .
WHEN OTHERS .
ENDCASE .
CLEAR ls_items .
ls_items-node_key = c_nkey-cntxt .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t073 . " text: Name of the context
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-cntxt_name .
ls_nodes-relatkey = c_nkey-cntxt .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-cntxt_name .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-cntxt_name .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF v_contextname IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
ls_items-text = v_contextname .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_context
METHOD tab_block_format .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-format .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-format .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t327 . " text: File format
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-format_line1 .
ls_nodes-relatkey = c_nkey-format .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-format_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-format_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CASE v_extension .
WHEN c_extension_xlsx . ls_items-text = v_text-t328 . " text: Without
VBA-macro .XLSX
WHEN c_extension_xlsm . ls_items-text = v_text-t329 . " text: VBA-macro-
enabled .XLSM
ENDCASE .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_format
METHOD tab_block_postprocessing .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-postprocessing .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-postprocessing .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t287 . " text: Final post processing
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-postproc_line1 .
ls_nodes-relatkey = c_nkey-postprocessing .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-postproc_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-text = ' VBScript' .
CASE s_form_prop-postproc_vbs_code .
WHEN space . ls_items-t_image = icon_abap_local .
WHEN OTHERS . ls_items-t_image = icon_abap .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-postproc_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
* ls_items-text = v_text-t288 . " text: Provide tables
ls_items-t_image = icon_report_call .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_postprocessing
METHOD tab_block_root_others .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-root_others .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-root_others .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t346 . " text: Other options
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-root_others_line1 .
ls_nodes-relatkey = c_nkey-root_others .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-root_others_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-definednames_dont_remove IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-root_others_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text = v_text-t347 . " text: Keep named ranges of template
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_root_others
METHOD tab_block_techinfo .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm ,
lv_datum10 TYPE ty_char10 .
CLEAR ls_items .
ls_items-node_key = c_nkey-techinfo .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t147 . " text: Technical information
APPEND ls_items TO ct_items .
*------ CREATED BY
IF v_created_uname IS NOT INITIAL
OR v_created_datum IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-created .
ls_nodes-relatkey = c_nkey-techinfo .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
ls_items-font = cl_gui_list_tree=>item_font_prop .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-created .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CONCATENATE v_text-t148 ':' INTO ls_items-text . " text: Created by
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-created .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
WRITE v_created_datum TO lv_datum10 DD/MM/YYYY .
CONCATENATE v_created_uname lv_datum10 INTO ls_items-text+1 SEPARATED BY
space .
APPEND ls_items TO ct_items .
ENDIF .
*------ CHANGED BY
IF v_changed_uname IS NOT INITIAL
OR v_changed_datum IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-changed .
ls_nodes-relatkey = c_nkey-techinfo .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-changed .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CONCATENATE v_text-t149 ':' INTO ls_items-text . " text: Changed by
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-changed .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
WRITE v_changed_datum TO lv_datum10 DD/MM/YYYY .
CONCATENATE v_changed_uname lv_datum10 INTO ls_items-text+1 SEPARATED BY
space .
APPEND ls_items TO ct_items .
ENDIF .
*------ PACKAGE
IF v_devclass IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-devclass .
ls_nodes-relatkey = c_nkey-techinfo .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-devclass .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CONCATENATE v_text-t150 ':' INTO ls_items-text . " text: Package
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-devclass .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text+1 = v_devclass .
APPEND ls_items TO ct_items .
ENDIF .
ENDMETHOD . "tab_block_techinfo
METHOD tab_block_formdescr .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-formdescr .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-formdescr .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t075 . " text: Form description
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-formdescr_name .
ls_nodes-relatkey = c_nkey-formdescr .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-formdescr_name .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-formdescr_name .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF v_formdescr IS INITIAL .
ls_items-text = space .
ELSE .
ls_items-text = v_formdescr .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_formdescr
METHOD tab_block_component .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-component .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-component .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t076 . " text: Name/ description
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-component_line1 .
ls_nodes-relatkey = c_nkey-component .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-component_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-t_image = s_comp_types-icon .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-component_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = s_form_prop-comp_name .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-component_line2 .
ls_nodes-relatkey = c_nkey-component .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-component_line2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text = s_form_prop-comp_descr .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_component
METHOD tab_block_loop .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
DATA:
lv_icon TYPE icon_d ,
lv_text TYPE ty_char100 ,
lv_loop_from TYPE ty_char100 ,
lv_loop_to TYPE ty_char100 .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-loop .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-loop .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t261 . " text: Row processing
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-loop_line1 .
ls_nodes-relatkey = c_nkey-loop .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-loop_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-loop_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
* presets
IF s_form_prop-cb_loop_from IS INITIAL .
s_form_prop-cb_loop_from = 1 .
ENDIF .
IF s_form_prop-cb_loop_from EQ 1
AND s_form_prop-cb_loop_to IS INITIAL .
ls_items-text+1 = v_text-t262 . " text: All rows
APPEND ls_items TO ct_items .
ELSE .
ls_items-text+1 = v_text-t163 . " text: row(s)
APPEND ls_items TO ct_items .
* calculations
lv_loop_from = s_form_prop-cb_loop_from . CONDENSE lv_loop_from NO-GAPS .
lv_loop_to = s_form_prop-cb_loop_to . CONDENSE lv_loop_to NO-GAPS .
IF s_form_prop-cb_loop_to IS INITIAL .
IF s_form_prop-cb_loop_from EQ 1 .
lv_icon = icon_select_all .
lv_text = v_text-t262 . " text: All rows
ELSE .
lv_icon = icon_greater_equal_green .
lv_text = lv_loop_from .
ENDIF .
ELSE .
IF s_form_prop-cb_loop_from EQ s_form_prop-cb_loop_to .
lv_icon = icon_equal_green .
lv_text = lv_loop_from .
ELSEIF s_form_prop-cb_loop_from EQ 1 .
lv_icon = icon_less_equal_green .
lv_text = lv_loop_to .
ELSE .
lv_icon = icon_interval_include_green .
CLEAR ls_items .
ls_items-node_key = c_nkey-loop_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = lv_icon .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-loop_line1 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = lv_text .
APPEND ls_items TO ct_items .
ENDIF .
ENDMETHOD . "tab_block_loop
METHOD tab_block_relpath .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-relpath .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-relpath .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t077 . " text: Binding with context
IF s_form_prop-comp_type EQ lcl_form=>c_comp_type-folder .
CONCATENATE ls_items-text
v_text-t078 " text: (optional)
INTO ls_items-text SEPARATED BY space .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-relpath_line1 .
ls_nodes-relatkey = c_nkey-relpath .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-relpath_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-relpath_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change_password ."icon_create_note .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-relpath_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-cb_relpath IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-relpath_line1 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-cb_relpath IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
format_path( EXPORTING iv_source = s_form_prop-cb_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_relpath
METHOD tab_block_relpath_apr .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-aprpath .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-aprpath .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t079 . " text: Appearance at runtime:
IF s_form_prop-cb_apr_relpath IS INITIAL .
CONCATENATE ls_items-text
v_text-t080 " text: Always
INTO ls_items-text SEPARATED BY space .
ELSE .
CONCATENATE ls_items-text
v_text-t081 " text: Only when field contains value
INTO ls_items-text SEPARATED BY space .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-aprpath_line1 .
ls_nodes-relatkey = c_nkey-aprpath .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-aprpath_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-aprpath_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change_password ."icon_create_note .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-aprpath_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-cb_apr_relpath IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-aprpath_line1 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
format_path( EXPORTING iv_source = s_form_prop-cb_apr_relpath
CHANGING cv_formatted = ls_items-text ) .
APPEND ls_items TO ct_items .
*------
CHECK s_form_prop-cb_apr_relpath IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-aprpath_line2 .
ls_nodes-relatkey = c_nkey-aprpath .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-aprpath_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_change .
format_text1( EXPORTING iv_offset = s_form_prop-cb_apr_offset
iv_match = s_form_prop-cb_apr_match
IMPORTING ev_text = ls_items-text ) .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_relpath_apr
METHOD tab_block_relpath_val .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm ,
lv_char_tmp TYPE ty_char100 .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valpath .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
IF s_form_prop-comp_type EQ lcl_form=>c_comp_type-sheet .
ls_items-text = v_text-t082 . " text: Sheet name at runtime
IF s_form_prop-cb_val_relpath IS INITIAL .
CONCATENATE ls_items-text
v_text-t083 " text: Auto
INTO ls_items-text SEPARATED BY space .
ELSE .
CONCATENATE ls_items-text
v_text-t084 " text: get Value from field
INTO ls_items-text SEPARATED BY space .
ENDIF .
ELSE .
ls_items-text = v_text-t011 . " text: Value
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valpath_line1 .
ls_nodes-relatkey = c_nkey-valpath .
IF s_form_prop-cb_val_sub_req IS NOT INITIAL .
ls_nodes-isfolder = abap_on .
ENDIF .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change_password ."icon_create_note .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-cb_val_relpath IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath_line1 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-cb_val_relpath IS INITIAL .
ls_items-text = space .
ELSE .
format_path( EXPORTING iv_source = s_form_prop-cb_val_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
*------
IF s_form_prop-cb_val_sub_req IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valpath_line2 .
ls_nodes-relatkey = c_nkey-valpath_line1 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_expand_all .
ls_nodes-exp_image = icon_expand_all .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_table_settings .
ls_items-text = space .
APPEND ls_items TO ct_items .
*------
IF s_form_prop-comp_type NE lcl_form=>c_comp_type-drawing
AND s_form_prop-comp_type NE lcl_form=>c_comp_type-tree
AND s_form_prop-comp_type NE lcl_form=>c_comp_type-grid
AND s_form_prop-cb_val_relpath IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valpath_line3 .
ls_nodes-relatkey = c_nkey-valpath .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath_line3 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_change .
format_text1( EXPORTING iv_offset = s_form_prop-cb_val_offset
iv_match = s_form_prop-cb_val_match
IMPORTING ev_text = ls_items-text ) .
APPEND ls_items TO ct_items .
ENDIF .
*------
IF s_form_prop-comp_type NE lcl_form=>c_comp_type-drawing
AND s_form_prop-comp_type NE lcl_form=>c_comp_type-tree
AND s_form_prop-comp_type NE lcl_form=>c_comp_type-grid
AND s_form_prop-cb_val_relpath IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valpath_line4 .
ls_nodes-relatkey = c_nkey-valpath .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valpath_line4 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t085 . " text: convert value to ext.format
IF s_form_prop-cb_val_convert IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
ENDIF .
ENDMETHOD . "tab_block_relpath_val
METHOD tab_block_relpath_cellrng .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-cellrng .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-cellrng .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t330 . " text: Name of Cell range
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-cellrng_line1 .
ls_nodes-relatkey = c_nkey-cellrng .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-cellrng_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-cellrng_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change_password ."icon_create_note .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-cellrng_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-cb_cellrng_relpath IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-cellrng_line1 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
format_path( EXPORTING iv_source = s_form_prop-cb_cellrng_relpath
CHANGING cv_formatted = ls_items-text ) .
APPEND ls_items TO ct_items .
*------
CHECK s_form_prop-cb_cellrng_relpath IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-cellrng_line2 .
ls_nodes-relatkey = c_nkey-cellrng .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-cellrng_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_change .
format_text1( EXPORTING iv_offset = s_form_prop-cb_cellrng_offset
iv_match = s_form_prop-cb_cellrng_match
IMPORTING ev_text = ls_items-text ) .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_relpath_cellrng
METHOD tab_block_val_layout .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-vallayout .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t185 . " text: Layout options
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-vallayout_line1 .
ls_nodes-relatkey = c_nkey-vallayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-tb_val_matrix IS INITIAL
AND s_form_prop-tb_val_formula IS INITIAL .
ls_items-t_image = icon_radiobutton .
ELSE .
ls_items-t_image = icon_wd_radio_button_empty .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t011 . " text: Value
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-vallayout_line2 .
ls_nodes-relatkey = c_nkey-vallayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-tb_val_formula IS INITIAL .
ls_items-t_image = icon_wd_radio_button_empty .
ELSE .
ls_items-t_image = icon_radiobutton .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t268 . " text: Formula
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-vallayout_line3 .
ls_nodes-relatkey = c_nkey-vallayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
IF s_form_prop-tb_val_matrix IS NOT INITIAL .
ls_nodes-isfolder = abap_on .
ENDIF .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line3 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-tb_area_textmark IS NOT INITIAL .
ls_items-disabled = abap_on .
ENDIF .
IF s_form_prop-tb_val_matrix IS INITIAL .
ls_items-t_image = icon_wd_radio_button_empty .
ELSE .
ls_items-t_image = icon_radiobutton .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line3 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t216 . " text: Matrix (one char per cell)
APPEND ls_items TO ct_items .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-vallayout_line31 .
ls_nodes-relatkey = c_nkey-vallayout_line3 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line31 .
ls_items-item_name = '1' .
ls_items-t_image = icon_space .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-vallayout_line31 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CONCATENATE v_text-t217 " text: Interval:
v_text-t162 " text: column(s)
lv_interval_cols '/'
v_text-t163 " text: row(s)
lv_interval_rows
INTO ls_items-text SEPARATED BY space .
CONDENSE ls_items-text .
APPEND ls_items TO ct_items .
ENDIF .
ENDMETHOD . "tab_block_val_layout
METHOD tab_block_val_validation .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
IF s_form_prop-cb_valvld_attr_relpath IS INITIAL
AND s_form_prop-cb_valvld_for1_dataset_id IS INITIAL
AND s_form_prop-cb_valvld_for1_relpath IS INITIAL
AND s_form_prop-cb_valvld_for2_relpath IS INITIAL .
ls_nodes-expander = '-' .
ENDIF .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t348 . " text: Data validation
APPEND ls_items TO ct_items .
*====== Attributes
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line1 .
ls_nodes-relatkey = c_nkey-valvalid .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image =
ls_nodes-exp_image = icon_oo_attribute .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t349 . " text: Attributes (from template)
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line11 .
ls_nodes-relatkey = c_nkey-valvalid_line1 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line11 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t350 . " text: Table for dynamic substitution
(field/value)
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line12 .
ls_nodes-relatkey = c_nkey-valvalid_line1 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line12 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line12 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change_password ."icon_create_note .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line12 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-cb_valvld_attr_relpath IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line12 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-cb_valvld_attr_relpath IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
format_path( EXPORTING iv_source = s_form_prop-cb_valvld_attr_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
*====== Formula1
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line2 .
ls_nodes-relatkey = c_nkey-valvalid .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image =
ls_nodes-exp_image = icon_parameter_import .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CONCATENATE `( 1 ) ` v_text-t351 " text: Value (Formula)
INTO ls_items-text .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line21 .
ls_nodes-relatkey = c_nkey-valvalid_line2 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line21 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-cb_valvld_for1_dataset_id IS INITIAL
AND s_form_prop-cb_valvld_for1_relpath IS INITIAL .
ls_items-t_image = icon_radiobutton .
ELSE .
ls_items-t_image = icon_wd_radio_button_empty .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line21 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t299 . " text: From template
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line22 .
ls_nodes-relatkey = c_nkey-valvalid_line2 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line22 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-cb_valvld_for1_dataset_id IS INITIAL
AND s_form_prop-cb_valvld_for1_relpath IS NOT INITIAL .
ls_items-t_image = icon_radiobutton .
ELSE .
ls_items-t_image = icon_wd_radio_button_empty .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line22 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t339 . " text: From context field
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line22 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-cb_valvld_for1_relpath IS NOT INITIAL .
format_path( EXPORTING iv_source = s_form_prop-cb_valvld_for1_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line23 .
ls_nodes-relatkey = c_nkey-valvalid_line2 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line23 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-cb_valvld_for1_dataset_id IS NOT INITIAL
AND s_form_prop-cb_valvld_for1_relpath IS INITIAL .
ls_items-t_image = icon_radiobutton .
ELSE .
ls_items-t_image = icon_wd_radio_button_empty .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line23 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t352 . " text: From Grid
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line23 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF v_valvld_for1_dataset_name IS NOT INITIAL .
ls_items-text = v_valvld_for1_dataset_name .
ENDIF .
APPEND ls_items TO ct_items .
IF s_form_prop-cb_valvld_for1_dataset_id IS NOT INITIAL .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line23 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_choose_columns .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line23 .
ls_items-item_name = '5' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text = v_valvld_for1_dataset_field .
APPEND ls_items TO ct_items .
ENDIF .
*====== Formula2
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line3 .
ls_nodes-relatkey = c_nkey-valvalid .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image =
ls_nodes-exp_image = icon_parameter_import .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line3 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CONCATENATE `( 2 ) ` v_text-t351 " text: Value (Formula)
INTO ls_items-text .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line31 .
ls_nodes-relatkey = c_nkey-valvalid_line3 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line31 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-cb_valvld_for2_relpath IS INITIAL .
ls_items-t_image = icon_radiobutton .
ELSE .
ls_items-t_image = icon_wd_radio_button_empty .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line31 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t299 . " text: From template
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-valvalid_line32 .
ls_nodes-relatkey = c_nkey-valvalid_line3 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line32 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF s_form_prop-cb_valvld_for2_relpath IS NOT INITIAL .
ls_items-t_image = icon_radiobutton .
ELSE .
ls_items-t_image = icon_wd_radio_button_empty .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line32 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t339 . " text: From context field
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-valvalid_line32 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-cb_valvld_for2_relpath IS NOT INITIAL .
format_path( EXPORTING iv_source = s_form_prop-cb_valvld_for2_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_val_validation
METHOD tab_block_sheet_tb .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-sheet .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheet .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t086 . " text: Binding with sheet of the
template
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheet_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheet_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-tb_sheetname IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheet_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-tb_sheetname IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE.
ls_items-text = s_form_prop-tb_sheetname .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_sheet_tb
METHOD tab_block_printtitles .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-printtitles .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-printtitles .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t152 . " text: Print titles
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-printtitles_line1 .
ls_nodes-relatkey = c_nkey-printtitles .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-printtitles_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text = v_text-t092 . " text: Rows
ls_items-text+8 = ':' .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-printtitles_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-printtitles_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-tb_printtitles_r IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-printtitles_line2 .
ls_nodes-relatkey = c_nkey-printtitles .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-printtitles_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text = v_text-t093 . " text: Columns
ls_items-text+8 = ':' .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-printtitles_line2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-printtitles_line2 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-tb_printtitles_c IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_printtitles
METHOD tab_block_sheetprotection .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm ,
ls_sheetprotection TYPE ty_s_sheetprotection .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-sheetprot .
ls_nodes-isfolder = abap_on .
IF ls_sheetprotection IS INITIAL .
ls_nodes-n_image = icon_unlocked .
ELSE .
ls_nodes-n_image = icon_locked .
ENDIF .
ls_nodes-exp_image = ls_nodes-n_image .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheetprot .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t298 . " text: Sheet protection
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheetprot_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheetprot_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF ls_sheetprotection IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheetprot_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
CASE ls_sheetprotection-mode .
WHEN c_sheetprotection_mode-off . ls_items-text = v_text-t276 .
" text: Off
WHEN c_sheetprotection_mode-from_template . ls_items-text = v_text-t299 .
" text: From template
WHEN c_sheetprotection_mode-from_context . ls_items-text = v_text-t300 .
" text: From context
WHEN c_sheetprotection_mode-static . ls_items-text = v_text-t301 .
" text: Static
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-sheetprot_line1 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF ls_sheetprotection-cb_val_relpath IS INITIAL .
ls_items-text = space .
ELSE .
format_path( EXPORTING iv_source = ls_sheetprotection-cb_val_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_sheetprotection
METHOD tab_block_pgbrk .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm ,
lv_char_tmp TYPE ty_char100 .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-pgbrk .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-pgbrk .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t223 . " text: Insert page break (at the
beginning)
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-pgbrk_line1 .
ls_nodes-relatkey = c_nkey-pgbrk .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-pgbrk_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t154 . " text: Horizontal
IF s_form_prop-tb_pgbrk_top IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-pgbrk_line2 .
ls_nodes-relatkey = c_nkey-pgbrk .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-pgbrk_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t155 . " text: Vertical
IF s_form_prop-tb_pgbrk_left IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-nopgbrk .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-nopgbrk .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t153 . " text: Preventing of automatic page
breaks (inside)
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-nopgbrk_line1 .
ls_nodes-relatkey = c_nkey-nopgbrk .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-nopgbrk_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t154 . " text: Horizontal
IF s_form_prop-tb_nopgbrk_top IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-nopgbrk_line2 .
ls_nodes-relatkey = c_nkey-nopgbrk .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-nopgbrk_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t155 . " text: Vertical
IF s_form_prop-tb_nopgbrk_left IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
IF s_form_prop-tb_nopgbrk_left_shift IS INITIAL .
ls_items-text = v_text-t158 . " text: shift pagebreak to the left-side
border
ELSE .
ls_items-text = v_text-t159 . " text: shift pagebreak: & column(s)
outside the left border
ENDMETHOD . "tab_block_pgbrk
METHOD tab_block_draft .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-draft .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-draft .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t195 . " text: Draft
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-draft_line1 .
ls_nodes-relatkey = c_nkey-draft .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-draft_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-draft_subtree IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_draft
METHOD tab_block_area .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-area .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-area .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t087 . " text: Area in the template
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-area_line1 .
ls_nodes-relatkey = c_nkey-area .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-area_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
IF s_form_prop-comp_type EQ lcl_form=>c_comp_type-field .
CLEAR ls_items .
ls_items-node_key = c_nkey-area_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_fast_entry .
APPEND ls_items TO ct_items .
ENDIF .
CLEAR ls_items .
ls_items-node_key = c_nkey-area_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-tb_area_top IS INITIAL
AND s_form_prop-tb_area_left IS INITIAL
AND s_form_prop-tb_area_rows IS INITIAL
AND s_form_prop-tb_area_columns IS INITIAL
AND s_form_prop-tb_area_textmark IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-area_line1 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-tb_area_top IS NOT INITIAL
OR s_form_prop-tb_area_left IS NOT INITIAL
OR s_form_prop-tb_area_rows IS NOT INITIAL
OR s_form_prop-tb_area_columns IS NOT INITIAL .
DATA:
lv_top TYPE ty_char100 ,
lv_left TYPE ty_char100 ,
lv_rows TYPE ty_char100 ,
lv_columns TYPE ty_char100 .
WRITE:
s_form_prop-tb_area_top TO lv_top LEFT-JUSTIFIED ,
s_form_prop-tb_area_left TO lv_left LEFT-JUSTIFIED ,
s_form_prop-tb_area_rows TO lv_rows LEFT-JUSTIFIED ,
s_form_prop-tb_area_columns TO lv_columns LEFT-JUSTIFIED .
IF s_form_prop-comp_type EQ lcl_form=>c_comp_type-field
AND s_form_prop-tb_val_matrix IS INITIAL .
CONCATENATE 'Top:' lv_top 'Left:' lv_left
INTO ls_items-text SEPARATED BY space .
ELSE .
CONCATENATE 'Top:' lv_top 'Left:' lv_left 'Rows:' lv_rows 'Columns:'
lv_columns
INTO ls_items-text SEPARATED BY space .
ENDIF .
ENDMETHOD . "tab_block_area
METHOD tab_block_direction .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-direction .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-direction .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t088 . " text: Output direction at runtime
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-direction_line1 .
ls_nodes-relatkey = c_nkey-direction .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-direction_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE s_form_prop-tb_direction .
WHEN lcl_form=>c_tb_direction-left2right .
ls_items-t_image = icon_trend_unchanged .
WHEN lcl_form=>c_tb_direction-up2down .
ls_items-t_image = icon_trend_down .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-direction_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
CASE s_form_prop-tb_direction .
WHEN lcl_form=>c_tb_direction-left2right .
ls_items-text = v_text-t089 . " text: Right
WHEN lcl_form=>c_tb_direction-up2down .
ls_items-text = v_text-t090 . " text: Down
ENDCASE .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_direction
METHOD tab_block_mergecells .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-mergecells .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-mergecells .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t176 . " text: Merge cells
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-mergecells_line1 .
ls_nodes-relatkey = c_nkey-mergecells .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-mergecells_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE s_form_prop-tb_mergecells .
WHEN lcl_form=>c_tb_mergecells-rows .
ls_items-t_image = icon_wd_view_set_t_layout_270 .
WHEN lcl_form=>c_tb_mergecells-cols .
ls_items-t_image = icon_wd_view_set_t_layout .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-mergecells_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
CASE s_form_prop-tb_mergecells .
WHEN lcl_form=>c_tb_mergecells-rows .
ls_items-text = v_text-t177 . " text: Span rows
WHEN lcl_form=>c_tb_mergecells-cols .
ls_items-text = v_text-t178 . " text: Span columns
ENDCASE .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_mergecells
METHOD tab_block_colrow_prop .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-colrow_prop .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_prop .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t091 . " text: Copy properties
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-colrow_prop_line1 .
ls_nodes-relatkey = c_nkey-colrow_prop .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_prop_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t092 . " text: Rows
IF s_form_prop-tb_rowprop IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_prop_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t093 . " text: Columns
IF s_form_prop-tb_colprop IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_colrow_prop
METHOD tab_block_colrow_group .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-colrow_grp .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_grp .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t094 . " text: Group
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-colrow_grp_line1 .
ls_nodes-relatkey = c_nkey-colrow_grp .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_grp_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t092 . " text: Rows
IF s_form_prop-tb_rowgroup IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_grp_line1 .
ls_items-item_name = '2' .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = space .
IF s_form_prop-tb_rowgroup IS INITIAL .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-t_image = icon_space .
ELSEIF s_form_prop-tb_rowgroup_clp IS INITIAL .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-t_image = icon_collapse .
ELSE .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-t_image = icon_expand .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_grp_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t093 . " text: Columns
IF s_form_prop-tb_colgroup IS INITIAL .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-colrow_grp_line1 .
ls_items-item_name = '4' .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = space .
IF s_form_prop-tb_colgroup IS INITIAL .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-t_image = icon_space .
ELSEIF s_form_prop-tb_colgroup_clp IS INITIAL .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-t_image = icon_collapse .
ELSE .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-t_image = icon_expand .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_colrow_group
METHOD tab_block_autofitmerged .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-autofitmrg .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-autofitmrg .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t275 . " text: AutoFit for merged cells
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-autofitmrg_line1 .
ls_nodes-relatkey = c_nkey-autofitmrg .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-autofitmrg_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t276 . " text: Off
IF s_form_prop-tb_autofitmerged_r IS INITIAL
AND s_form_prop-tb_autofitmerged_c IS INITIAL .
ls_items-t_image = icon_radiobutton .
ELSE .
ls_items-t_image = icon_wd_radio_button_empty .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-autofitmrg_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t277 . " text: Row height
CASE s_form_prop-tb_autofitmerged_r .
WHEN space . ls_items-t_image = icon_wd_radio_button_empty .
WHEN OTHERS . ls_items-t_image = icon_radiobutton .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-autofitmrg_line1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t278 . " text: Column width
CASE s_form_prop-tb_autofitmerged_c .
WHEN space . ls_items-t_image = icon_wd_radio_button_empty .
WHEN OTHERS . ls_items-t_image = icon_radiobutton .
ENDCASE .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_autofitmerged
METHOD tab_block_respattern_place .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-respatt_place .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-respatt_place .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t355 . " text: Place relative to Subarea
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-respatt_place_line1 .
ls_nodes-relatkey = c_nkey-respatt_place .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-respatt_place_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t356 . " text: Before
CASE s_form_prop-tb_respattern_place .
WHEN lcl_form=>c_respattern_place-before_subarea . ls_items-t_image =
icon_radiobutton .
WHEN lcl_form=>c_respattern_place-after_subarea . ls_items-t_image =
icon_wd_radio_button_empty .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-respatt_place_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t357 . " text: After
CASE s_form_prop-tb_respattern_place .
WHEN lcl_form=>c_respattern_place-before_subarea . ls_items-t_image =
icon_wd_radio_button_empty .
WHEN lcl_form=>c_respattern_place-after_subarea . ls_items-t_image =
icon_radiobutton .
ENDCASE .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_respattern_place
METHOD tab_block_drwstat .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-drwstat .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwstat .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t140 . " text: Source
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-drwstat_line1 .
ls_nodes-relatkey = c_nkey-drwstat .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwstat_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
IF s_form_prop-tb_drwstat_flag IS INITIAL .
ls_items-t_image = icon_binary_document .
ls_items-text+1 = v_text-t141 . " text: Rawdata from context field
ELSE .
ls_items-t_image = icon_jpg .
ls_items-text+1 = v_text-t142 . " text: Drawing, located on the sheet
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-drwstat_line2 .
ls_nodes-relatkey = c_nkey-drwstat .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwstat_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwstat_line2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-tb_drwstat_name IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwstat_line2 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
IF s_form_prop-tb_drwstat_name IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
ls_items-text = s_form_prop-tb_drwstat_name .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_drwstat
METHOD tab_block_drwsize .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-drwsize .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image = icon_dummy .
ls_nodes-exp_image = icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t337 . " text: Size
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-drwsize_line1 .
ls_nodes-relatkey = c_nkey-drwsize .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t338 . " text: Fit within area
CASE s_form_prop-drawing_size .
WHEN lcl_form=>c_drawing_size-fit_within_area . ls_items-t_image =
icon_radiobutton .
WHEN lcl_form=>c_drawing_size-from_context . ls_items-t_image =
icon_wd_radio_button_empty .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t339 . " text: From context field
CASE s_form_prop-drawing_size .
WHEN lcl_form=>c_drawing_size-fit_within_area . ls_items-t_image =
icon_wd_radio_button_empty .
WHEN lcl_form=>c_drawing_size-from_context . ls_items-t_image =
icon_radiobutton .
ENDCASE .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-drwsize_line2 .
ls_nodes-relatkey = c_nkey-drwsize .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text = v_text-t340 . " text: Height
ls_items-text+8 = ':' .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line2 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change_password .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line2 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-drawing_size_h_relpath IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
format_path( EXPORTING iv_source = s_form_prop-drawing_size_h_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-drwsize_line3 .
ls_nodes-relatkey = c_nkey-drwsize .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line3 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text = v_text-t341 . " text: Width
ls_items-text+8 = ':' .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line3 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line3 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change_password .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-drwsize_line3 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-drawing_size_w_relpath IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
format_path( EXPORTING iv_source = s_form_prop-drawing_size_w_relpath
CHANGING cv_formatted = ls_items-text ) .
ENDIF .
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_drwsize
METHOD tab_block_chart .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm .
DATA:
lv_dataset_series_assigned TYPE ty_char10 ,
lv_dataset_series_all TYPE ty_char10 ,
lt_dataset_series_tab TYPE ty_t_dataset_series_tab .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_layout .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t185 . " text: Layout options
APPEND ls_items TO ct_items .
*------ Model
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-chart_model .
ls_nodes-relatkey = c_nkey-chart_layout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image =
ls_nodes-exp_image = icon_gis_bar .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_model .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_change .
ls_items-text+1 = v_text-t233 . " text: Model
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_model .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-tb_drwstat_name IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_model .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-tb_drwstat_name IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
ls_items-text = s_form_prop-tb_drwstat_name .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t251 . " text: Chart title
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text(1) = ':' .
CASE s_form_prop-chart_title .
WHEN space . ls_items-text+2 = v_text-t253 . " text: from Model
(statically)
WHEN OTHERS . ls_items-text+2 = v_text-t254 . " text: from Context
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_catax .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_catax .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t344 . " text: Category Axis title
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_catax .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text(1) = ':' .
CASE s_form_prop-chart_catax_title .
WHEN space . ls_items-text+2 = v_text-t253 . " text: from Model
(statically)
WHEN '1' . ls_items-text+2 = v_text-t255 . " text: from Dataset grid
column captions
WHEN OTHERS . ls_items-text+2 = v_text-t254 . " text: from Context
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_valax .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_valax .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t343 . " text: Value Axis title
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_valax .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text(1) = ':' .
CASE s_form_prop-chart_valax_title .
WHEN space . ls_items-text+2 = v_text-t253 . " text: from Model
(statically)
WHEN OTHERS . ls_items-text+2 = v_text-t254 . " text: from Context
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_ser .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_change .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_ser .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t252 . " text: Series name
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_title_ser .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
ls_items-text(1) = ':' .
CASE s_form_prop-chart_series_title .
WHEN space . ls_items-text+2 = v_text-t253 . " text: from Model
(statically)
WHEN OTHERS . ls_items-text+2 = v_text-t255 . " text: from Dataset grid
column captions
ENDCASE .
APPEND ls_items TO ct_items .
*------ DataSource
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-chart_dtset .
ls_nodes-relatkey = space .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image =
ls_nodes-exp_image = icon_wd_table .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_dtset .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t234 . " text: Dataset
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-chart_dtset_1 .
ls_nodes-relatkey = c_nkey-chart_dtset .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image =
ls_nodes-exp_image = icon_table_settings .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_dtset_1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_change .
ls_items-text+1 = v_text-t225 . " text: Grid
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_dtset_1 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_delete .
IF s_form_prop-dataset_id IS INITIAL .
ls_items-disabled = abap_on .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_dtset_1 .
ls_items-item_name = '3' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
IF s_form_prop-dataset_id IS INITIAL .
ls_items-text = v_text-t074 . " text: <...not assigned...>
ELSE .
ls_items-text = v_dataset_name .
ENDIF .
APPEND ls_items TO ct_items .
*------ Series
CHECK s_form_prop-dataset_id IS NOT INITIAL .
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-chart_dtset_2 .
ls_nodes-relatkey = c_nkey-chart_dtset .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image =
ls_nodes-exp_image = icon_choose_columns .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_dtset_2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_change .
ls_items-text+1 = v_text-t235 . " text: Series
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-chart_dtset_2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_fixed .
lt_dataset_series_tab[] =
lcl_formtemplate=>conv_dataset_series_st( s_form_prop-dataset_series ) .
DELETE lt_dataset_series_tab WHERE seridx EQ c_chart_category_idx .
lv_dataset_series_all = LINES( lt_dataset_series_tab[] ) .
LOOP AT lt_dataset_series_tab TRANSPORTING NO FIELDS WHERE dtsfld IS NOT
INITIAL .
ADD 1 TO lv_dataset_series_assigned .
ENDLOOP .
IF lv_dataset_series_assigned IS INITIAL .
ls_items-text+2 = v_text-t074 . " text: <...not assigned...>
ELSEIF lv_dataset_series_assigned EQ lv_dataset_series_all .
ls_items-t_image = icon_complete .
ELSE .
CONCATENATE lv_dataset_series_assigned
v_text-t246 " text: from
lv_dataset_series_all
INTO ls_items-text SEPARATED BY space .
CONDENSE ls_items-text+2 .
ENDIF .
ENDMETHOD . "tab_block_chart
METHOD tab_block_tree_layout .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm ,
ls_tree_layout TYPE ty_s_tree_layout ,
lv_int TYPE i ,
lv_text TYPE ty_char100 .
lcl_form=>conv_container_fs(
EXPORTING iv_field = s_form_prop-tree_layout
IMPORTING es_structure = ls_tree_layout ) .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-treelayout .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image =
ls_nodes-exp_image = icon_layout_control . "icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t185 . " text: Layout options
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-treelayout_line1 .
ls_nodes-relatkey = c_nkey-treelayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CASE ls_tree_layout-rotate .
WHEN space .
ls_items-t_image = icon_bw_apd_transformation .
ls_items-text+1 = v_text-t187 . " text: standard orientation
WHEN OTHERS .
ls_items-t_image = icon_bw_rotate_left .
ls_items-text+1 = v_text-t186 . " text: rotate 90 CCW
ENDCASE .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-treelayout_line2 .
ls_nodes-relatkey = c_nkey-treelayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE ls_tree_layout-stru .
WHEN space . ls_items-t_image = icon_wd_iframe .
WHEN OTHERS . ls_items-t_image = icon_checkbox .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t188 . " text: structure
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line2 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CASE ls_tree_layout-stru_exp_coll .
WHEN lcl_form=>c_stru_exp_coll-expanded .
ls_items-t_image = icon_collapse .
ls_items-text+1 = v_text-t193 . " text: All expanded
WHEN lcl_form=>c_stru_exp_coll-collapsed .
ls_items-t_image = icon_expand .
ls_items-text+1 = v_text-t194 . " text: All Collapsed
WHEN OTHERS .
ls_items-t_image = icon_paw_item .
ls_items-text+1 = v_text-t204 . " text: Actual (from TreeControl)
ENDCASE .
APPEND ls_items TO ct_items .
ENDIF .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-treelayout_line4 .
ls_nodes-relatkey = c_nkey-treelayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line4 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE ls_tree_layout-head .
WHEN space . ls_items-t_image = icon_wd_iframe .
WHEN OTHERS . ls_items-t_image = icon_checkbox .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line4 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t189 . " text: header
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-treelayout_line5 .
ls_nodes-relatkey = c_nkey-treelayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line5 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE ls_tree_layout-col_hier .
WHEN space . ls_items-t_image = icon_wd_iframe .
WHEN OTHERS . ls_items-t_image = icon_checkbox .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line5 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t190 . " text: hierarchy column
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line5 .
ls_items-item_name = '4' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-t_image = icon_change .
lv_text = lv_int = ls_tree_layout-col_hier_shift .
CONDENSE lv_text NO-GAPS .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-treelayout_line6 .
ls_nodes-relatkey = c_nkey-treelayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
IF ls_tree_layout-col_othr IS NOT INITIAL .
ls_nodes-isfolder = abap_on .
ENDIF .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line6 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE ls_tree_layout-col_othr .
WHEN space . ls_items-t_image = icon_wd_iframe .
WHEN OTHERS . ls_items-t_image = icon_checkbox .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line6 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t192 . " text: other columns
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line61 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
IF ls_tree_layout-col_othr_width IS INITIAL
OR ls_tree_layout-col_othr_width EQ 0 .
ls_items-t_image = icon_wd_iframe .
ELSE .
ls_items-t_image = icon_checkbox .
ENDIF .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line61 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
IF ls_tree_layout-col_othr_width IS INITIAL
OR ls_tree_layout-col_othr_width EQ 0 .
ls_items-text+1 = v_text-t201 . " text: width from f.cat.
ELSE .
lv_text = lv_int = ls_tree_layout-col_othr_width .
CONDENSE lv_text .
CONCATENATE v_text-t201 " text: width from f.cat.
'~(' v_text-t202 " text: multiplier
':~' lv_text ')'
INTO ls_items-text+1 .
SET LOCALE LANGUAGE sy-langu .
TRANSLATE ls_items-text USING '~ ' .
ENDIF .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-treelayout_line62 .
ls_nodes-relatkey = c_nkey-treelayout_line6 .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line62 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE ls_tree_layout-allow_formulas .
WHEN space . ls_items-t_image = icon_wd_iframe .
WHEN OTHERS . ls_items-t_image = icon_checkbox .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-treelayout_line62 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t269 . " text: allow formulas
APPEND ls_items TO ct_items .
ENDIF .
ENDMETHOD . "tab_block_tree_layout
METHOD tab_block_grid_layout .
DATA:
ls_nodes TYPE treev_node ,
ls_items TYPE mtreeitm ,
ls_grid_layout TYPE ty_s_grid_layout .
lcl_form=>conv_container_fs(
EXPORTING iv_field = s_form_prop-grid_layout
IMPORTING es_structure = ls_grid_layout ) .
*------
CLEAR ls_nodes.
ls_nodes-node_key = c_nkey-gridlayout .
ls_nodes-isfolder = abap_on .
ls_nodes-n_image =
ls_nodes-exp_image = icon_layout_control . "icon_dummy .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text = v_text-t185 . " text: Layout options
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-gridlayout_line1 .
ls_nodes-relatkey = c_nkey-gridlayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout_line1 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
CASE ls_grid_layout-rotate .
WHEN space .
ls_items-t_image = icon_bw_apd_transformation .
ls_items-text+1 = v_text-t187 . " text: standard orientation
WHEN OTHERS .
ls_items-t_image = icon_bw_rotate_left .
ls_items-text+1 = v_text-t186 . " text: rotate 90 CCW
ENDCASE .
APPEND ls_items TO ct_items .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-gridlayout_line2 .
ls_nodes-relatkey = c_nkey-gridlayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout_line2 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE ls_grid_layout-head .
WHEN space . ls_items-t_image = icon_wd_iframe .
WHEN OTHERS . ls_items-t_image = icon_checkbox .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout_line2 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t189 . " text: header
APPEND ls_items TO ct_items .
CASE ls_grid_layout-head_titles .
WHEN lcl_form=>c_head_titles-tech . ls_items-text = v_text-t229 . " text:
Tech.names
WHEN lcl_form=>c_head_titles-descr . ls_items-text = v_text-t230 . " text:
Descriptions
WHEN OTHERS .
CONCATENATE v_text-t229 '-' " text: Tech.names
v_text-t230 " text: Descriptions
INTO ls_items-text SEPARATED BY space .
ENDCASE .
APPEND ls_items TO ct_items .
ENDIF .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-gridlayout_line3 .
ls_nodes-relatkey = c_nkey-gridlayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout_line3 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-t_image = icon_choose_columns .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout_line3 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
*------
CLEAR ls_nodes .
ls_nodes-node_key = c_nkey-gridlayout_line4 .
ls_nodes-relatkey = c_nkey-gridlayout .
ls_nodes-relatship = cl_gui_list_tree=>relat_last_child .
ls_nodes-n_image = icon_space .
ls_nodes-exp_image = icon_space .
APPEND ls_nodes TO ct_nodes .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout_line4 .
ls_items-item_name = '1' .
ls_items-class = cl_gui_list_tree=>item_class_button .
ls_items-alignment = cl_gui_list_tree=>align_auto .
CASE ls_grid_layout-allow_formulas .
WHEN space . ls_items-t_image = icon_wd_iframe .
WHEN OTHERS . ls_items-t_image = icon_checkbox .
ENDCASE .
APPEND ls_items TO ct_items .
CLEAR ls_items .
ls_items-node_key = c_nkey-gridlayout_line4 .
ls_items-item_name = '2' .
ls_items-class = cl_gui_list_tree=>item_class_text .
ls_items-alignment = cl_gui_list_tree=>align_auto .
ls_items-font = cl_gui_list_tree=>item_font_prop .
ls_items-text+1 = v_text-t269 . " text: allow formulas
APPEND ls_items TO ct_items .
ENDMETHOD . "tab_block_grid_layout
METHOD format_text1 .
DATA:
lv_char_offset TYPE ty_char100 ,
lv_char_match TYPE ty_char100 .
IF iv_offset EQ 0
AND iv_match EQ 0 .
ev_text = v_text-t095 . " text: The entire value
ELSEIF iv_offset EQ 0
AND iv_match NE 0 .
CONCATENATE v_text-t096 " text: first
'_' lv_char_match '_'
v_text-t097 " text: characters
INTO ev_text SEPARATED BY space .
ELSEIF iv_offset NE 0
AND iv_match EQ 0 .
CONCATENATE v_text-t098 " text: from position
lv_char_offset ',_'
v_text-t099 " text: all subsequent
INTO ev_text .
ELSE .
CONCATENATE v_text-t098 " text: from position
':_' lv_char_offset INTO lv_char_offset .
CONCATENATE v_text-t097 " text: characters
':_' lv_char_match INTO lv_char_match .
CONCATENATE lv_char_offset ',_' lv_char_match INTO ev_text .
ENDIF .
TRANSLATE ev_text USING '_ ' .
ENDMETHOD . "format_text1
ENDCLASS . "lcl_wb_protab IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_workbench DEFINITION
*----------------------------------------------------------------------*
* the form builder application
*----------------------------------------------------------------------*
CLASS lcl_workbench DEFINITION INHERITING FROM lcl_root .
PUBLIC SECTION .
METHODS:
constructor
IMPORTING iv_formname TYPE any OPTIONAL
iv_action TYPE any
EXCEPTIONS process_terminated ,
free ,
action_edit
IMPORTING iv_formname TYPE any
EXCEPTIONS process_terminated ,
action_create
IMPORTING iv_formname TYPE any
iv_with_template TYPE flag DEFAULT space
EXCEPTIONS process_terminated ,
action_copy
IMPORTING iv_formname TYPE any
EXCEPTIONS process_terminated ,
action_delete
IMPORTING iv_formname TYPE any
EXCEPTIONS process_terminated ,
action_export
IMPORTING iv_formname TYPE any
EXCEPTIONS process_terminated ,
action_import
IMPORTING iv_formname TYPE any
EXCEPTIONS process_terminated ,
new_formname_to_selscreen
IMPORTING iv_formname TYPE any ,
pbo ,
popup_compname
IMPORTING iv_comp_type TYPE any
CHANGING cv_retcode TYPE any
cv_comp_name TYPE any
cv_comp_descr TYPE any ,
popup_comp_types
IMPORTING iv_title TYPE any OPTIONAL
it_comp_types TYPE ty_t_comp_types
iv_wizard_mode_allow TYPE any
EXPORTING ev_comp_type TYPE any
ev_wizard_mode TYPE any
ev_cancel TYPE flag ,
popup_component
IMPORTING iv_title TYPE any OPTIONAL
iv_comp_type TYPE any
EXPORTING es_form_prop TYPE lcl_form=>ty_s_properties
ev_cancel TYPE flag ,
popup_textmark
CHANGING cv_retcode TYPE any
cv_textmark TYPE any ,
popup_ctxtfield
IMPORTING iv_cb_fullpath_parent TYPE any
iv_f4_strategy TYPE i
iv_manual TYPE flag OPTIONAL
CHANGING cv_cb_relpath TYPE ty_comp_path
cv_cb_comp_type TYPE ty_comp_type OPTIONAL
cv_cancel TYPE flag OPTIONAL ,
popup_ctxtfield_sub
IMPORTING iv_cb_fullpath_parent TYPE any
iv_cb_relpath TYPE ty_comp_path
CHANGING cv_cb_val_sub_col TYPE any
cv_cb_val_sub_row TYPE i
cs_ctxt_prop TYPE lcl_context=>ty_s_properties
cv_cancel TYPE flag OPTIONAL ,
popup_ctxtfield_callback
IMPORTING is_nodetab TYPE seucomm
iv_uc TYPE any
CHANGING cv_exit TYPE flag
cv_list_refresh TYPE flag ,
popup_ctxtmulti
IMPORTING iv_cb_fullpath_parent TYPE any
CHANGING ct_comp_paths TYPE ty_t_ctxtmulti
cv_cancel TYPE flag OPTIONAL ,
popup_ctxtmulti_callback
IMPORTING is_nodetab TYPE seucomm
iv_uc TYPE any
CHANGING cv_exit TYPE flag
cv_list_refresh TYPE flag ,
popup_charpos
IMPORTING iv_length TYPE any
CHANGING cv_offset TYPE any
cv_match TYPE any
cv_cancel TYPE flag OPTIONAL ,
popup_matrix_interval
CHANGING cv_rows TYPE any
cv_cols TYPE any
cv_cancel TYPE flag OPTIONAL ,
popup_tbsheet
RETURNING value(rv_name) TYPE ty_char31 ,
popup_tbdrawing
IMPORTING iv_sheetname TYPE any
iv_vector TYPE flag OPTIONAL
iv_bitmap TYPE flag OPTIONAL
iv_chart TYPE flag OPTIONAL
RETURNING value(rv_name) TYPE ty_char100 ,
popup_dataset_id
IMPORTING iv_id TYPE lcl_form=>ty_s_hierarchy-id
iv_same_sheet TYPE flag OPTIONAL
CHANGING cv_dataset_id TYPE lcl_form=>ty_s_hierarchy-id ,
popup_dataset_series
CHANGING cs_form_prop TYPE lcl_form=>ty_s_properties ,
popup_dataset_field
IMPORTING iv_dataset_id TYPE lcl_form=>ty_s_hierarchy-id
CHANGING cv_fieldname TYPE string ,
popup_devclass
IMPORTING iv_objid TYPE any
RETURNING value(rv_devclass) TYPE tadir-devclass ,
popup_pgbrk
IMPORTING iv_top TYPE any OPTIONAL
iv_left TYPE any OPTIONAL
CHANGING cv_shift TYPE any ,
popup_printtitles
IMPORTING iv_sheetname TYPE any
iv_rows TYPE any OPTIONAL
iv_cols TYPE any OPTIONAL
CHANGING cv_comp_id TYPE any ,
popup_grid_fldseq
CHANGING cs_form_prop TYPE lcl_form=>ty_s_properties ,
popup_grid_fldprop
CHANGING cs_form_prop TYPE lcl_form=>ty_s_properties ,
popup_vbs_code_editor
CHANGING cv_vbs_code TYPE any
cv_cancel TYPE flag OPTIONAL ,
popup_vbs_tables
CHANGING cv_vbs_tables TYPE any
cv_cancel TYPE flag OPTIONAL .
CLASS-METHODS:
class_constructor ,
popup_postprocessing_info ,
popup_to_confirm
IMPORTING iv_text TYPE any
iv_text_button_1 TYPE any OPTIONAL
iv_icon_button_1 TYPE any OPTIONAL
iv_text_button_2 TYPE any OPTIONAL
iv_icon_button_2 TYPE any OPTIONAL
RETURNING value(rv_answer_okey) TYPE flag ,
popup_to_get_value
IMPORTING iv_title TYPE any OPTIONAL
iv_tabname TYPE any
iv_fieldname TYPE any
iv_fieldtext TYPE any OPTIONAL
iv_obligatory TYPE any OPTIONAL
iv_2tabname TYPE any OPTIONAL
iv_2fieldname TYPE any OPTIONAL
iv_2fieldtext TYPE any OPTIONAL
iv_2obligatory TYPE any OPTIONAL
iv_3tabname TYPE any OPTIONAL
iv_3fieldname TYPE any OPTIONAL
iv_3fieldtext TYPE any OPTIONAL
iv_3obligatory TYPE any OPTIONAL
iv_4tabname TYPE any OPTIONAL
iv_4fieldname TYPE any OPTIONAL
iv_4fieldtext TYPE any OPTIONAL
iv_4obligatory TYPE any OPTIONAL
EXPORTING ev_cancel TYPE any
CHANGING cv_value TYPE any
cv_2value TYPE any OPTIONAL
cv_3value TYPE any OPTIONAL
cv_4value TYPE any OPTIONAL ,
popup_to_decide
IMPORTING iv_title TYPE any OPTIONAL
iv_text TYPE any OPTIONAL
iv_text2 TYPE any OPTIONAL
iv_text_rb1 TYPE any
iv_text_rb2 TYPE any OPTIONAL
iv_text_rb3 TYPE any OPTIONAL
iv_text_rb4 TYPE any OPTIONAL
iv_text_rb5 TYPE any OPTIONAL
iv_text_rb6 TYPE any OPTIONAL
iv_text_rb7 TYPE any OPTIONAL
iv_text_rb8 TYPE any OPTIONAL
EXPORTING ev_cancel TYPE flag
CHANGING cv_selected_rb TYPE any ,
popup_sheetprotection_static
EXPORTING ev_cancel TYPE any
CHANGING cs_sheetprotection TYPE ty_s_sheetprotection ,
popup_sheetprotection_password
EXPORTING ev_cancel TYPE any
CHANGING cv_password TYPE any ,
popup_file_select
IMPORTING iv_title TYPE any OPTIONAL
RETURNING value(rv_fullpath) TYPE string ,
popup_formname_f4
CHANGING cv_formname TYPE any .
CLASS-DATA:
popup_ctxtfield_id TYPE snodetext-id ,
popup_ctxtfield_cancel TYPE flag .
CONSTANTS:
BEGIN OF c_action ,
edit TYPE syucomm VALUE 'EDIT' ,
create TYPE syucomm VALUE 'CREATE' ,
crea_t TYPE syucomm VALUE 'CREA_T' ,
copy TYPE syucomm VALUE 'COPY' ,
delete TYPE syucomm VALUE 'DELETE' ,
export TYPE syucomm VALUE 'EXPORT' ,
import TYPE syucomm VALUE 'IMPORT' ,
help TYPE syucomm VALUE 'HELP' ,
preset TYPE syucomm VALUE 'PRESET' ,
prese2 TYPE syucomm VALUE 'PRESE2' ,
END OF c_action .
PRIVATE SECTION.
DATA:
r_cont_splitter1 TYPE REF TO cl_gui_splitter_container ,
r_cont_splitter2 TYPE REF TO cl_gui_splitter_container ,
r_cont_4splitter2 TYPE REF TO cl_gui_container ,
r_cont_root TYPE REF TO cl_gui_docking_container ,
r_cont_4formtree TYPE REF TO cl_gui_container ,
r_cont_4protab TYPE REF TO cl_gui_container ,
r_cont_4template TYPE REF TO cl_gui_container ,
r_appltoolbar TYPE REF TO lcl_wb_appltoolbar ,
r_excelole TYPE REF TO lcl_wb_ole ,
r_formtree TYPE REF TO lcl_wb_formtree ,
r_protab TYPE REF TO lcl_wb_protab ,
r_formtemplate TYPE REF TO lcl_formtemplate .
DATA:
v_oletempl_viewmode TYPE flag ,
v_initialized TYPE flag ,
v_mass_processing TYPE flag ,
v_extension TYPE ty_char10 .
METHODS:
init_containers ,
init_appltoolbar ,
init_excelole ,
init_formtree ,
init_protab ,
tech_template_sync
IMPORTING iv_new_extension TYPE ty_char10 OPTIONAL
RETURNING value(rv_okey) TYPE flag ,
tech_fcode_dispatch
IMPORTING iv_fcode TYPE any
iv_form_id TYPE snode-id OPTIONAL ,
tech_presets_dt_save ,
tech_presets_rt_save ,
hndl_fcode_appl
FOR EVENT evnt_fcode OF lcl_wb_appltoolbar
IMPORTING ev_fcode ,
hndl_fcode_comp
FOR EVENT evnt_fcode OF lcl_wb_formtree
IMPORTING ev_fcode ev_form_id ,
hndl_fcode_ptab
FOR EVENT evnt_fcode OF lcl_wb_protab
IMPORTING ev_fcode ev_form_id ,
hndl_fcode_tmpl
FOR EVENT evnt_fcode OF lcl_wb_ole
IMPORTING ev_fcode ,
hndl_comp_move
FOR EVENT evnt_comp_move OF lcl_wb_formtree
IMPORTING sender ev_drag_drop_object ,
actn_appl_save ,
actn_appl_save_as ,
actn_appl_activate ,
actn_appl_actualize ,
actn_appl_viewmode ,
actn_appl_help
IMPORTING iv_url TYPE any ,
actn_appl_presets ,
actn_appl_presets_designtime ,
actn_appl_presets_runtime ,
actn_appl_close_template ,
actn_appl_mass_processing ,
actn_comp_selected
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_comp_add
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_child TYPE flag OPTIONAL
iv_sibling TYPE flag OPTIONAL ,
actn_comp_clone
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_comp_clone_mass ,
actn_comp_delete
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_comp_delete_mass ,
actn_comp_tbshift_mass ,
actn_comp_move_sibling_up
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_comp_move_sibling_down
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_compname_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_formdescr_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_format_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_context_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_cb_loop_from_to
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_cb_relpath_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_relpath_mn TYPE flag OPTIONAL , " -->> manual
actn_cb_relpath_delete
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_cb_val_vld_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_attrpath_f4 TYPE flag OPTIONAL " -->> search-help
iv_attrpath_mn TYPE flag OPTIONAL " -->> manual
iv_attrpath_del TYPE flag OPTIONAL
iv_for1_template TYPE flag OPTIONAL
iv_for1_relpath TYPE flag OPTIONAL
iv_for1_dataset_id TYPE flag OPTIONAL
iv_for1_dataset_fld TYPE flag OPTIONAL
iv_for2_template TYPE flag OPTIONAL
iv_for2_relpath TYPE flag OPTIONAL ,
actn_cb_apr_relpath_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_relpath_f4 TYPE flag OPTIONAL " -->> search-help
iv_relpath_mn TYPE flag OPTIONAL , " -->> manual
actn_cb_apr_relpath_delete
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_cb_cellrng_relpth_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_relpath_f4 TYPE flag OPTIONAL " -->> search-help
iv_relpath_mn TYPE flag OPTIONAL , " -->> manual
actn_cb_cellrng_relpth_delete
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_cb_val_relpath_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_relpath_f4 TYPE flag OPTIONAL " -->> search-help
iv_relpath_mn TYPE flag OPTIONAL " -->> manual
iv_charpos TYPE flag OPTIONAL
iv_convertion TYPE flag OPTIONAL
iv_sub TYPE flag OPTIONAL ,
actn_cb_val_relpath_delete
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_val_layout_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_valformula TYPE flag OPTIONAL
iv_valmatrix TYPE flag OPTIONAL ,
actn_tb_sheetname_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_sheetname_delete
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_sheetstate
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_sheetprotection
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_change TYPE flag OPTIONAL
iv_delete TYPE flag OPTIONAL ,
actn_tb_area_delete
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_area_setcells
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_area_settextmark
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_direction_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_colrow_prop_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_columns TYPE flag OPTIONAL
iv_rows TYPE flag OPTIONAL ,
actn_tb_colrow_group_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_clp TYPE flag OPTIONAL
iv_columns TYPE flag OPTIONAL
iv_rows TYPE flag OPTIONAL ,
actn_tb_drwstatflag_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_drwstatname_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_change TYPE flag OPTIONAL
iv_delete TYPE flag OPTIONAL ,
actn_tb_drwsize_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_fit TYPE flag OPTIONAL
iv_context TYPE flag OPTIONAL
iv_h_f4 TYPE flag OPTIONAL
iv_h_mn TYPE flag OPTIONAL
iv_w_f4 TYPE flag OPTIONAL
iv_w_mn TYPE flag OPTIONAL ,
actn_tb_pgbreak
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_top TYPE flag OPTIONAL
iv_left TYPE flag OPTIONAL
iv_nopgbreak TYPE flag DEFAULT space ,
actn_tb_printtitles
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_cols TYPE flag OPTIONAL
iv_rows TYPE flag OPTIONAL
iv_change TYPE flag OPTIONAL
iv_delete TYPE flag OPTIONAL ,
actn_tb_mergecells_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tb_autofitmerged_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_rows TYPE flag DEFAULT space
iv_cols TYPE flag DEFAULT space ,
actn_tb_respattern_place
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_before TYPE flag DEFAULT space
iv_after TYPE flag DEFAULT space ,
actn_draft_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id ,
actn_tree_layout_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_rotate TYPE flag OPTIONAL
iv_stru TYPE flag OPTIONAL
iv_stru_exp_coll TYPE flag OPTIONAL
iv_head TYPE flag OPTIONAL
iv_col_hier TYPE flag OPTIONAL
iv_col_hier_after TYPE flag OPTIONAL
iv_col_hier_shift TYPE flag OPTIONAL
iv_col_othr TYPE flag OPTIONAL
iv_col_othr_width TYPE flag OPTIONAL
iv_col_othr_allowformulas
TYPE flag OPTIONAL ,
actn_grid_layout_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_rotate TYPE flag OPTIONAL
iv_head TYPE flag OPTIONAL
iv_head_titles TYPE flag OPTIONAL
iv_fldseq TYPE flag OPTIONAL
iv_fldprop TYPE flag OPTIONAL
iv_allowformulas TYPE flag OPTIONAL ,
actn_chart_change
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_model_change TYPE flag OPTIONAL
iv_model_delete TYPE flag OPTIONAL
iv_title TYPE flag OPTIONAL
iv_title_catax TYPE flag OPTIONAL
iv_title_valax TYPE flag OPTIONAL
iv_title_series TYPE flag OPTIONAL
iv_dtset_change TYPE flag OPTIONAL
iv_dtset_delete TYPE flag OPTIONAL
iv_dtset_series TYPE flag OPTIONAL ,
actn_postproccessing
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_vbs_code TYPE flag OPTIONAL
iv_vbs_tables TYPE flag OPTIONAL ,
actn_root_others
IMPORTING iv_alvtree_nkey TYPE lvc_nkey
iv_form_id TYPE snode-id
iv_definednames_dont_remove TYPE flag OPTIONAL .
IF v_gui_available IS INITIAL .
MESSAGE e000(lp)
WITH v_text-t125 " text: Process is flowing in OFF-line mode
RAISING process_terminated .
ENDIF .
CASE iv_action .
WHEN lcl_workbench=>c_action-edit . action_edit( EXPORTING iv_formname =
iv_formname EXCEPTIONS OTHERS = 1 ) .
WHEN lcl_workbench=>c_action-create . action_create( EXPORTING iv_formname =
iv_formname EXCEPTIONS OTHERS = 1 ) .
WHEN lcl_workbench=>c_action-crea_t . action_create( EXPORTING iv_formname =
iv_formname iv_with_template = abap_on EXCEPTIONS OTHERS = 1 ) .
WHEN lcl_workbench=>c_action-copy . action_copy( EXPORTING iv_formname =
iv_formname EXCEPTIONS OTHERS = 1 ) .
WHEN lcl_workbench=>c_action-delete . action_delete( EXPORTING iv_formname =
iv_formname EXCEPTIONS OTHERS = 1 ) .
WHEN lcl_workbench=>c_action-export . action_export( EXPORTING iv_formname =
iv_formname EXCEPTIONS OTHERS = 1 ) .
WHEN lcl_workbench=>c_action-import . action_import( EXPORTING iv_formname =
iv_formname EXCEPTIONS OTHERS = 1 ) .
WHEN lcl_workbench=>c_action-help . actn_appl_help( iv_url = v_text-
url1 ) .
WHEN lcl_workbench=>c_action-preset . actn_appl_presets( ) .
WHEN OTHERS .
MESSAGE e000(lp)
WITH v_text-t104 "text: Function has not been processed
RAISING process_terminated .
ENDCASE .
CHECK sy-subrc NE 0 .
ENDMETHOD . "constructor
METHOD free .
tech_presets_dt_save( ) .
IF r_appltoolbar IS BOUND .
r_appltoolbar->free( ) .
FREE r_appltoolbar .
ENDIF .
IF r_excelole IS BOUND .
r_excelole->free( ) .
FREE r_excelole .
ENDIF .
IF r_formtree IS BOUND .
r_formtree->free( ) .
FREE r_formtree .
ENDIF .
IF r_protab IS BOUND .
r_protab->free( ) .
FREE r_protab .
ENDIF .
ENDMETHOD . "free
METHOD action_edit .
IF iv_formname IS INITIAL .
MESSAGE s000(lp) WITH v_text-t013 " text: Specify a name of the form
RAISING process_terminated .
ENDMETHOD . "action_edit
METHOD action_create .
IF iv_formname IS INITIAL .
MESSAGE s000(lp) WITH v_text-t013 " text: Specify a name of the form
RAISING process_terminated .
r_formtemplate->autostructure_create( ) .
ENDMETHOD . "action_create
METHOD action_copy .
IF iv_formname IS INITIAL .
MESSAGE s000(lp) WITH v_text-t013 " text: Specify a name of the form
RAISING process_terminated .
DATA:
ls_oldkey TYPE wwwdatatab ,
ls_newkey TYPE wwwdatatab ,
lv_formname_new TYPE ty_char30 ,
lv_cancel TYPE flag .
popup_to_get_value(
EXPORTING iv_title = v_text-t166 " text: Save as...
iv_tabname = 'MASSD_F4_ATT'
iv_fieldname = 'TABNAME'
iv_fieldtext = v_text-t167 " text: New form name
iv_obligatory = abap_on
IMPORTING ev_cancel = lv_cancel
CHANGING cv_value = lv_formname_new ) .
IF lv_formname_new EQ iv_formname .
MESSAGE i000(lp) WITH v_text-t168 " text: Specify another form name
RAISING process_terminated .
ENDIF .
ls_oldkey-relid = lcl_form=>c_relid .
ls_oldkey-objid = lcl_form=>conv_formname_ei( iv_formname ) .
ls_newkey-relid = lcl_form=>c_relid .
ls_newkey-objid = lcl_form=>conv_formname_ei( lv_formname_new ) .
ENDMETHOD . "action_copy
METHOD action_delete .
IF iv_formname IS INITIAL .
MESSAGE s000(lp) WITH v_text-t013 " text: Specify a name of the form
RAISING process_terminated .
ls_key-relid = lcl_form=>c_relid .
ls_key-objid = lcl_form=>conv_formname_ei( iv_formname ) .
ENDMETHOD . "action_delete
METHOD action_export .
IF iv_formname IS INITIAL .
MESSAGE s000(lp) WITH v_text-t013 " text: Specify a name of the form
RAISING process_terminated .
DATA:
ls_key TYPE wwwdatatab ,
lt_mime TYPE STANDARD TABLE OF w3mime ,
lv_fullpath TYPE string ,
lv_directory TYPE string ,
lv_filename TYPE string ,
lv_fileseparator TYPE ty_char1 ,
lv_filesize TYPE ty_char10 ,
lv_filesize_i TYPE i .
cl_gui_frontend_services=>get_file_separator(
CHANGING file_separator = lv_fileseparator
EXCEPTIONS OTHERS = 4 ) .
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING process_terminated .
ENDIF .
CONCATENATE lv_directory
lv_fileseparator
lv_filename
INTO lv_fullpath .
* get content
ls_key-relid = lcl_form=>c_relid .
ls_key-objid = lcl_form=>conv_formname_ei( iv_formname ) .
ENDMETHOD . "action_export
METHOD action_import .
DATA:
ls_key TYPE wwwdatatab ,
lv_formname TYPE massd_f4_att-tabname ,
lv_formdescr TYPE wwwdatatab-text .
DATA:
lv_cancel TYPE flag .
* check existence
IF lcl_form=>get_devclass( lv_formname ) IS NOT INITIAL .
MESSAGE i000(lp)
WITH v_text-t014 " text: A form already exists with the
name
lv_formname
RAISING process_terminated .
ENDIF .
* lock an object
IF lcl_form=>enq_lock( iv_formname = lv_formname ) IS NOT INITIAL .
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING process_terminated .
ENDIF .
* upload file
ls_key-relid = lcl_form=>c_relid .
ls_key-objid = lcl_form=>conv_formname_ei( lv_formname ) .
ls_key-text = lv_formdescr .
ENDMETHOD . "action_import
METHOD new_formname_to_selscreen .
* return new form name to parameter of initial screen
DATA:
ls_callstack TYPE abap_callstack_line ,
lt_callstack TYPE abap_callstack ,
lv_form_parname TYPE string .
FIELD-SYMBOLS:
<lv_form> TYPE ANY .
init_containers( ) .
init_appltoolbar( ) .
init_excelole( ) .
init_formtree( ) .
init_protab( ) .
ENDMETHOD . "pbo
METHOD init_containers .
CREATE OBJECT r_cont_root
EXPORTING
lifetime = cntl_lifetime_dynpro
extension = cl_gui_docking_container=>ws_maximizebox
EXCEPTIONS
OTHERS = 6.
ENDMETHOD . "init_excelole
METHOD init_formtree .
CREATE OBJECT r_formtree
EXPORTING
ir_container = r_cont_4formtree
ir_formtemplate = r_formtemplate
iv_mass_processing = v_mass_processing
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
EXIT .
ENDIF .
DATA:
lt_document_table TYPE tsfmime ,
lv_document_size TYPE i ,
lv_extension TYPE ty_char10 .
IF r_formtemplate->r_exceltemplate IS BOUND .
CASE iv_new_extension .
WHEN space . lv_extension = r_formtemplate->r_exceltemplate->v_extension .
WHEN OTHERS. lv_extension = iv_new_extension .
ENDCASE .
ENDIF .
IF lv_extension IS INITIAL .
lv_extension = c_extension_xlsx .
ENDIF .
r_excelole->rawdata_get_as_table(
EXPORTING iv_extension = lv_extension
IMPORTING et_document_table = lt_document_table
ev_document_size = lv_document_size ) .
IF lt_document_table[] IS INITIAL
OR lv_document_size IS INITIAL .
MESSAGE e000(lp) WITH v_text-t173 INTO v_dummy . " text: an actual data were
not obtained from Excel !
msg_syst_catch( ) .
v_retcode = c_retcode-error .
ELSE .
r_formtemplate->set_template(
EXPORTING it_document_table = lt_document_table
iv_document_size = lv_document_size ) .
IF r_formtemplate->v_retcode EQ c_retcode-error .
MESSAGE e000(lp) WITH v_text-t336 " text: Error while reading
template file
INTO v_dummy .
msg_syst_catch( ) .
ENDMETHOD . "tech_template_sync
METHOD tech_fcode_dispatch .
*======================================================================
* preliminary works
*======================================================================
msg_init( ) .
IF iv_form_id IS SUPPLIED
AND iv_form_id IS NOT INITIAL .
DATA ls_links TYPE lcl_wb_formtree=>ty_s_links .
READ TABLE r_formtree->t_links INTO ls_links WITH KEY form_id = iv_form_id .
CHECK sy-subrc EQ 0 .
ENDIF .
CASE iv_fcode .
WHEN lcl_wb_formtree=>c_fcode-comp_selected .
r_excelole->selection_get( ) .
WHEN lcl_wb_formtree=>c_fcode-comp_move_sibling_up
OR lcl_wb_formtree=>c_fcode-comp_move_sibling_down .
WHEN OTHERS .
tech_template_sync( ) .
CHECK msg_check_errors_and_show( me ) IS INITIAL .
ENDCASE .
*======================================================================
* command processing
*======================================================================
DEFINE mk_callmethod .
call method me->&1
exporting
iv_alvtree_nkey = ls_links-alvtree_nkey
iv_form_id = ls_links-form_id.
END-OF-DEFINITION .
DEFINE mk_callmeth_2 .
call method me->&1
exporting
iv_alvtree_nkey = ls_links-alvtree_nkey
iv_form_id = ls_links-form_id
&2 = abap_on.
END-OF-DEFINITION .
CASE iv_fcode .
* ----------->> application
WHEN lcl_wb_appltoolbar=>c_fcode-appl_save . actn_appl_save( ) .
WHEN lcl_wb_appltoolbar=>c_fcode-appl_save_as .
actn_appl_save_as( ) .
WHEN lcl_wb_appltoolbar=>c_fcode-appl_activate . actn_appl_activate( )
.
WHEN lcl_wb_appltoolbar=>c_fcode-appl_actualize .
actn_appl_actualize( ) .
WHEN lcl_wb_appltoolbar=>c_fcode-appl_viewmode . actn_appl_viewmode( )
.
WHEN lcl_wb_appltoolbar=>c_fcode-appl_help .
actn_appl_help( iv_url = v_text-url2 ) .
WHEN lcl_wb_appltoolbar=>c_fcode-appl_presets_designtime .
actn_appl_presets_designtime( ) .
WHEN lcl_wb_appltoolbar=>c_fcode-appl_presets_runtime .
actn_appl_presets_runtime( ) .
WHEN lcl_wb_appltoolbar=>c_fcode-appl_mass_processing .
actn_appl_mass_processing( ) .
* ----------->> ole-template
WHEN lcl_wb_ole=>c_fcode-close_template .
actn_appl_close_template( ) .
*======================================================================
* post-processing
*======================================================================
CASE iv_fcode .
WHEN lcl_wb_formtree=>c_fcode-comp_selected .
WHEN OTHERS .
r_formtree->redraw( ir_formtemplate = r_formtemplate ) .
ENDCASE .
ENDMETHOD . "tech_fcode_dispatch
METHOD popup_postprocessing_info .
DATA lv_button_pressed TYPE i .
DATA lv_url(30000) TYPE c .
IF sy-langu EQ 'R' .
CALL FUNCTION 'POPUP_FOR_INTERACTION'
EXPORTING
headline = 'Внимание!'
text1 = 'Данная опция реализована Пост-обработкой OLE/VBScript.'
text2 = 'Применяйте пост-обработку при крайней необходимости,
т.к. :'
text3 = '- она будет игнорироваться в фоновом режиме
выполнения;'
text4 = '- она может существенно замедлить вывод формы;'
button_1 = icon_checked
button_2 = '@0S@ Подробнее'
IMPORTING
button_pressed = lv_button_pressed.
ELSE .
CALL FUNCTION 'POPUP_FOR_INTERACTION'
EXPORTING
headline = 'Notice!'
text1 = 'The option is implemented via OLE/VBScript Post-
processing.'
text2 = 'Use post-processing only when it is quite necessary,
because:'
text3 = '- it will be ignored in background run-time mode;'
text4 = '- it is able to reduce performance;'
button_1 = icon_checked
button_2 = '@0S@ More info about it'
IMPORTING
button_pressed = lv_button_pressed.
ENDIF .
CHECK lv_button_pressed EQ 2 .
lv_url = v_text-url3 .
CALL FUNCTION 'CALL_BROWSER'
EXPORTING
url = lv_url
EXCEPTIONS
OTHERS = 6.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF .
ENDMETHOD . "popup_postprocessing_info
METHOD popup_to_confirm .
DATA:
lv_answer TYPE ty_char1 ,
lv_text TYPE ty_char1024 ,
lv_text_button_1 TYPE ty_char1024 ,
lv_icon_button_1 TYPE icon-name ,
lv_text_button_2 TYPE ty_char1024 ,
lv_icon_button_2 TYPE icon-name .
lv_text = iv_text .
IF iv_text_button_1 IS INITIAL .
lv_text_button_1 = v_text-t106 . " text: Continue
ELSE .
lv_text_button_1 = iv_text_button_1 .
ENDIF .
IF iv_icon_button_1 IS INITIAL .
lv_icon_button_1 = 'ICON_OKAY' .
ELSE .
lv_icon_button_1 = iv_icon_button_1 .
ENDIF .
IF iv_text_button_2 IS INITIAL .
lv_text_button_2 = v_text-t107 . " text: Cancel
ELSE .
lv_text_button_2 = iv_text_button_2 .
ENDIF .
IF iv_icon_button_2 IS INITIAL .
lv_icon_button_2 = 'ICON_CANCEL' .
ELSE .
lv_icon_button_2 = iv_icon_button_2 .
ENDIF .
ENDMETHOD . "popup_to_confirm
METHOD popup_to_get_value .
DATA:
lv_retcode TYPE ty_char1 ,
ls_fields TYPE sval ,
lt_fields TYPE STANDARD TABLE OF sval .
CLEAR ev_cancel .
ls_fields-tabname = iv_tabname .
ls_fields-fieldname = iv_fieldname .
ls_fields-fieldtext = iv_fieldtext .
ls_fields-value = cv_value .
ls_fields-field_obl = iv_obligatory .
APPEND ls_fields TO lt_fields .
CLEAR ev_cancel .
ls_decide_lines-selflag = cs_sheetprotection-selectlockedcells .
ls_decide_lines-varoption = v_text-t302 . " text: Select Locked Cells
ls_decide_lines-varoption+64(1) = '`' .
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-selectunlockedcells .
ls_decide_lines-varoption = v_text-t303 . " text: Select Unlocked Cells
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-formatcells .
ls_decide_lines-varoption = v_text-t304 . " text: Format Cells
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-formatcolumns .
ls_decide_lines-varoption = v_text-t305 . " text: Format Columns
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-formatrows .
ls_decide_lines-varoption = v_text-t306 . " text: Format Rows
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-insertcolumns .
ls_decide_lines-varoption = v_text-t307 . " text: Insert Columns
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-insertrows .
ls_decide_lines-varoption = v_text-t308 . " text: Insert Rows
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-inserthyperlinks .
ls_decide_lines-varoption = v_text-t309 . " text: Insert Hyperlinks
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-deletecolumns .
ls_decide_lines-varoption = v_text-t310 . " text: Delete Columns
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-deleterows .
ls_decide_lines-varoption = v_text-t311 . " text: Delete Rows
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-sort .
ls_decide_lines-varoption = v_text-t312 . " text: Sort
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-autofilter .
ls_decide_lines-varoption = v_text-t313 . " text: Auto Filter
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-pivottables .
ls_decide_lines-varoption = v_text-t314 . " text: Pivot Tables
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-objects .
ls_decide_lines-varoption = v_text-t315 . " text: Objects
APPEND ls_decide_lines TO lt_decide_lines .
ls_decide_lines-selflag = cs_sheetprotection-scenarios .
ls_decide_lines-varoption = v_text-t316 . " text: Scenarios
APPEND ls_decide_lines TO lt_decide_lines .
CASE lv_answer .
WHEN 'A' .
ev_cancel = abap_on .
MESSAGE s000(lp) WITH v_text-t100 . " text: Operation was terminated by
the user
RETURN .
WHEN OTHERS .
LOOP AT lt_decide_lines INTO ls_decide_lines .
CASE sy-tabix .
WHEN 01 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
selectlockedcells .
WHEN 02 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
selectunlockedcells .
WHEN 03 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
formatcells .
WHEN 04 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
formatcolumns .
WHEN 05 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
formatrows .
WHEN 06 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
insertcolumns .
WHEN 07 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
insertrows .
WHEN 08 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
inserthyperlinks .
WHEN 09 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
deletecolumns .
WHEN 10 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
deleterows .
WHEN 11 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-sort .
WHEN 12 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
autofilter .
WHEN 13 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
pivottables .
WHEN 14 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
objects .
WHEN 15 . MOVE ls_decide_lines-selflag TO cs_sheetprotection-
scenarios .
ENDCASE .
ENDLOOP .
ENDCASE .
ENDMETHOD . "popup_sheetprotection_static
METHOD popup_sheetprotection_password .
* --------------------------
* password | hash-function
* --------------------------
* SAP12345 | EBF1
* QwErTy | DEFB
* Hello555 | E5C7
* %tgb^yhn | 8541
* R$^*h&!19fS | 9922
* DL7!Etj@6$s | C8F6
* R(dkS$9!@Sn | C931
* --------------------------
CLEAR ev_cancel .
DATA:
lv_selected TYPE ty_char1,
lv_text_rb1 TYPE string .
CONCATENATE '@MG@'
v_text-t276 " -->> text: Off
INTO lv_text_rb1 .
CASE cv_password .
WHEN 'EBF1' . lv_selected = '2' .
WHEN 'DEFB' . lv_selected = '3' .
WHEN 'E5C7' . lv_selected = '4' .
WHEN '8541' . lv_selected = '5' .
WHEN '9922' . lv_selected = '6' .
WHEN 'C8F6' . lv_selected = '7' .
WHEN 'C931' . lv_selected = '8' .
WHEN OTHERS . lv_selected = '1' .
ENDCASE .
ENDMETHOD . "popup_sheetprotection_password
METHOD popup_to_decide .
CLEAR ev_cancel .
DATA:
lv_answer TYPE ty_char1 ,
lv_cursorline TYPE sy-lilli ,
ls_decide_lines TYPE spopli ,
lt_decide_lines TYPE STANDARD TABLE OF spopli .
ls_decide_lines-varoption = iv_text_rb1 .
ls_decide_lines-varoption+64(1) = '`' .
APPEND ls_decide_lines TO lt_decide_lines .
IF iv_text_rb2 IS SUPPLIED .
ls_decide_lines-varoption = iv_text_rb2 .
APPEND ls_decide_lines TO lt_decide_lines .
ENDIF .
IF iv_text_rb3 IS SUPPLIED .
ls_decide_lines-varoption = iv_text_rb3 .
APPEND ls_decide_lines TO lt_decide_lines .
ENDIF .
IF iv_text_rb4 IS SUPPLIED .
ls_decide_lines-varoption = iv_text_rb4 .
APPEND ls_decide_lines TO lt_decide_lines .
ENDIF .
IF iv_text_rb5 IS SUPPLIED .
ls_decide_lines-varoption = iv_text_rb5 .
APPEND ls_decide_lines TO lt_decide_lines .
ENDIF .
IF iv_text_rb6 IS SUPPLIED .
ls_decide_lines-varoption = iv_text_rb6 .
APPEND ls_decide_lines TO lt_decide_lines .
ENDIF .
IF iv_text_rb7 IS SUPPLIED .
ls_decide_lines-varoption = iv_text_rb7 .
APPEND ls_decide_lines TO lt_decide_lines .
ENDIF .
IF iv_text_rb8 IS SUPPLIED .
ls_decide_lines-varoption = iv_text_rb8 .
APPEND ls_decide_lines TO lt_decide_lines .
ENDIF .
lv_cursorline = cv_selected_rb .
CASE lv_answer .
WHEN 'A' .
MESSAGE s000(lp) WITH v_text-t100 . " text: Operation was terminated by the
user
ev_cancel = abap_on .
WHEN OTHERS .
cv_selected_rb = lv_answer .
ENDCASE .
ENDMETHOD . "popup_to_decide
METHOD popup_file_select .
DATA:
lv_title TYPE string ,
lv_directory TYPE string ,
lv_directory_char TYPE ty_char255 ,
lv_rc TYPE i ,
lv_user_action TYPE i ,
lt_filetable TYPE filetable .
FIELD-SYMBOLS:
<filetable> TYPE file_table .
CONSTANTS:
lc_idparam_default_directory
TYPE tpara-paramid VALUE 'ZXLWB_DEFDIR_IMP'.
CLEAR cv_retcode .
popup_to_get_value(
EXPORTING iv_title = v_text-t108 " text: Specify a unique name of
the component
iv_tabname = 'MASSD_F4_ATT'
iv_fieldname = 'TABNAME'
iv_fieldtext = lv_fieldtext
iv_obligatory = abap_on
iv_2tabname = 'WWWDATATAB'
iv_2fieldname = 'TEXT'
IMPORTING ev_cancel = cv_retcode
CHANGING cv_value = cv_comp_name
cv_2value = cv_comp_descr ) .
ENDMETHOD . "popup_compname
METHOD popup_comp_types .
CLEAR ev_cancel .
CLEAR ev_comp_type .
CLEAR ev_wizard_mode .
TYPES:
BEGIN OF ty_s_comp_types_f4 ,
order TYPE i ,
comp_type TYPE ty_comp_type ,
icon TYPE icon_d ,
description TYPE ty_char100 ,
icon2 TYPE icon_d ,
END OF ty_s_comp_types_f4 ,
ty_t_comp_types_f4 TYPE STANDARD TABLE OF ty_s_comp_types_f4 .
DATA:
ls_comp_types TYPE ty_s_comp_types .
DATA:
lv_title TYPE ty_char100 ,
lv_screen_end_line TYPE i ,
ls_fct_f4 TYPE lvc_s_fcat ,
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag ,
lv_icon2_flag TYPE flag ,
ls_comp_types_f4 TYPE ty_s_comp_types_f4 ,
lt_comp_types_f4 TYPE ty_t_comp_types_f4 ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
lv_cancel TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path ,
ls_comp_paths TYPE ty_s_ctxtmulti ,
lt_comp_paths TYPE ty_t_ctxtmulti .
ls_fct_f4-fieldname = 'ICON' .
ls_fct_f4-outputlen = 4 .
APPEND ls_fct_f4 TO lt_fct_f4 .
ls_fct_f4-fieldname = 'DESCRIPTION' .
IF lv_icon2_flag IS NOT INITIAL
AND iv_wizard_mode_allow IS NOT INITIAL .
ls_fct_f4-outputlen = 19 .
APPEND ls_fct_f4 TO lt_fct_f4 .
ls_fct_f4-fieldname = 'ICON2' .
ls_fct_f4-outputlen = 3 .
ELSE .
ls_fct_f4-outputlen = 22 .
ENDIF .
APPEND ls_fct_f4 TO lt_fct_f4 .
CASE iv_title .
WHEN space . lv_title = v_text-t121 . " text: Choose a component
WHEN OTHERS . lv_title = iv_title .
ENDCASE .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_comp_types_f4 INTO ls_comp_types_f4 INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
ev_comp_type = ls_comp_types_f4-comp_type .
IF ls_selfield-fieldname EQ 'ICON2'
AND ls_comp_types_f4-icon2 IS NOT INITIAL .
ev_wizard_mode = abap_on .
ENDIF .
ENDMETHOD . "popup_comp_types
METHOD popup_component .
TYPES:
BEGIN OF ty_s_outtab_f4 ,
id TYPE lcl_form=>ty_s_properties-dataset_id ,
comp_name TYPE lcl_form=>ty_s_properties-comp_name ,
sheet_compname TYPE lcl_form=>ty_s_properties-comp_name ,
END OF ty_s_outtab_f4 ,
ty_t_outtab_f4 TYPE STANDARD TABLE OF ty_s_outtab_f4 .
DATA:
lv_title TYPE ty_char100 ,
ls_fct_f4 TYPE lvc_s_fcat ,
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
ls_outtab_f4 TYPE ty_s_outtab_f4 ,
lt_outtab_f4 TYPE ty_t_outtab_f4 ,
ls_form_prop TYPE lcl_form=>ty_s_properties .
CLEAR:
es_form_prop ,
ev_cancel .
CLEAR ls_outtab_f4 .
* Component Id / Name
ls_outtab_f4-id = ls_form_prop-id .
ls_outtab_f4-comp_name = ls_form_prop-comp_name .
* Sheet Name
r_formtemplate->node_get_legacy_info( EXPORTING iv_id = ls_form_prop-id
IMPORTING ev_tb_sheet_compname =
ls_outtab_f4-sheet_compname ) .
APPEND ls_outtab_f4 TO lt_outtab_f4 .
ENDLOOP .
CLEAR ls_fct_f4 .
ls_fct_f4-fieldname = 'COMP_NAME' .
ls_fct_f4-coltext = v_text-t068 . " text: Component
ls_fct_f4-outputlen = 20 .
ls_fct_f4-hotspot = abap_on .
APPEND ls_fct_f4 TO lt_fct_f4 .
CLEAR ls_fct_f4 .
ls_fct_f4-fieldname = 'SHEET_COMPNAME' .
ls_fct_f4-coltext = v_text-t238 . " text: On the sheet
ls_fct_f4-outputlen = 15 .
ls_fct_f4-emphasize = 'C500' .
APPEND ls_fct_f4 TO lt_fct_f4 .
CASE iv_title .
WHEN space . lv_title = v_text-t068 . " text: Component
WHEN OTHERS . lv_title = iv_title .
ENDCASE .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab_f4 INTO ls_outtab_f4 INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
ENDMETHOD . "popup_component
METHOD popup_textmark .
DATA:
lv_fieldtext TYPE sval-fieldtext .
CLEAR cv_retcode .
popup_to_get_value(
EXPORTING iv_title = v_text-t273 " Text: Char.sequence, which has
to be replaced by the Value
iv_tabname = 'BDCDATA'
iv_fieldname = 'FVAL'
iv_fieldtext = lv_fieldtext
iv_obligatory = abap_on
IMPORTING ev_cancel = cv_retcode
CHANGING cv_value = cv_textmark ) .
ENDMETHOD . "popup_textmark
METHOD popup_ctxtfield .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_ctxt_hier TYPE lcl_context=>ty_s_hierarchy ,
lt_ctxt_hier TYPE lcl_context=>ty_t_hierarchy ,
lv_offset TYPE i ,
lv_exit TYPE flag ,
lv_fullpath TYPE string ,
ls_nodetab TYPE seucomm .
CLEAR popup_ctxtfield_id .
CLEAR popup_ctxtfield_cancel .
CLEAR cv_cancel .
*======================================================================
* get a subtree of relevant context components
*======================================================================
r_formtemplate->r_context->subtree_get(
EXPORTING iv_begin_fullpath = iv_cb_fullpath_parent
iv_f4_strategy = iv_f4_strategy
IMPORTING et_hierarchy = lt_ctxt_hier ) .
IF lt_ctxt_hier[] IS INITIAL .
MESSAGE s000(lp) WITH v_text-t109 . " text: Relevant nodes were not found in
the context .
EXIT .
ENDIF .
CASE iv_manual .
*======================================================================
WHEN space . " display the popup tree of search-help
*======================================================================
CALL FUNCTION 'RS_TREE_SET_CURRENT_TREE'
TABLES
nodeinfo = lt_ctxt_hier.
IF popup_ctxtfield_id IS INITIAL
OR popup_ctxtfield_cancel IS NOT INITIAL .
MESSAGE s000(lp) WITH v_text-t100 . " text: Operation was
terminated by the user
cv_cancel = abap_on .
RETURN .
ELSE .
ls_ctxt_prop = r_formtemplate->r_context-
>node_get( popup_ctxtfield_id ) .
CLEAR popup_ctxtfield_id .
*======================================================================
WHEN OTHERS . " display field for manually input of path
*======================================================================
DO .
* popup screen to manual input
popup_to_get_value(
EXPORTING iv_title = v_text-t077 " text: Binding with
context
iv_tabname = 'SYST'
iv_fieldname = 'ULINE'
iv_fieldtext = v_text-t077 " text: Binding with
context
iv_obligatory = abap_on
IMPORTING ev_cancel = cv_cancel
CHANGING cv_value = cv_cb_relpath ) .
IF cv_cancel IS NOT INITIAL .
MESSAGE s000(lp) WITH v_text-t100 . " text: Operation was
terminated by the user
RETURN .
ENDIF .
cv_cb_comp_type = ls_ctxt_prop-comp_type .
RETURN .
ENDDO .
ENDCASE .
ENDMETHOD . "popup_ctxtfield
METHOD popup_ctxtfield_callback .
CHECK iv_uc EQ 'TRPI' .
DO 1 TIMES .
lv_allow = abap_off .
CASE r_formtemplate->r_context->v_f4_strategy .
WHEN r_formtemplate->r_context->c_f4_strategy-loopstep
OR r_formtemplate->r_context->c_f4_strategy-grid .
CHECK ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-
table .
WHEN r_formtemplate->r_context->c_f4_strategy-folder .
CHECK ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-
struct .
WHEN r_formtemplate->r_context->c_f4_strategy-value .
CHECK ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-
element
OR ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-
table .
WHEN r_formtemplate->r_context->c_f4_strategy-apr_relpath .
CHECK ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-
element .
WHEN r_formtemplate->r_context->c_f4_strategy-tree .
CHECK ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-
tree
OR ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-
tree_s .
WHEN OTHERS .
ENDCASE .
lv_allow = abap_on .
ENDDO .
IF lv_allow EQ abap_on .
popup_ctxtfield_id = ls_ctxt_prop-id .
cv_exit = abap_on .
ELSE .
MESSAGE s000(lp) WITH v_text-t110 . " text: Component is not allowed for
choice
ENDIF .
ENDMETHOD . "popup_ctxtfield_callback
METHOD popup_ctxtfield_sub .
* EXPORTING iv_cb_fullpath_parent TYPE any
* iv_cb_relpath TYPE ty_comp_path
* CHANGING cv_cb_val_sub_col TYPE any
* cv_cb_val_sub_row TYPE i
* cv_cancel TYPE flag OPTIONAL ,
TYPES:
BEGIN OF ty_s_outtab_f4 ,
id TYPE snode-id ,
fieldname TYPE ty_char100 ,
END OF ty_s_outtab_f4 ,
ty_t_outtab_f4 TYPE STANDARD TABLE OF ty_s_outtab_f4 .
DATA:
lv_begin_fullpath TYPE ty_comp_path ,
lt_ctxt_hier TYPE lcl_context=>ty_t_hierarchy ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_ctxt_prop TYPE lcl_context=>ty_t_properties .
DATA:
lv_title TYPE ty_char100 ,
ls_fct_f4 TYPE lvc_s_fcat ,
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag ,
ls_outtab_f4 TYPE ty_s_outtab_f4 ,
lt_outtab_f4 TYPE ty_t_outtab_f4 .
lv_begin_fullpath =
get_fullpath( iv_parent_fullpath = iv_cb_fullpath_parent
iv_relpath = iv_cb_relpath ) .
r_formtemplate->r_context->gridfld_get(
EXPORTING iv_begin_fullpath = lv_begin_fullpath
IMPORTING et_hierarchy = lt_ctxt_hier
et_properties = lt_ctxt_prop ) .
CLEAR ls_outtab_f4 .
ls_outtab_f4-id = ls_ctxt_prop-id .
CONCATENATE ls_ctxt_prop-comp_name '~~~('
ls_ctxt_prop-comp_shortdescr ')'
INTO ls_outtab_f4-fieldname .
TRANSLATE ls_outtab_f4-fieldname USING '~ ' .
APPEND ls_outtab_f4 TO lt_outtab_f4 .
ENDLOOP .
ls_fct_f4-fieldname = 'FIELDNAME' .
ls_fct_f4-outputlen = 50 .
APPEND ls_fct_f4 TO lt_fct_f4 .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab_f4 INTO ls_outtab_f4 INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
cv_cb_val_sub_col = ls_ctxt_prop-comp_name .
cs_ctxt_prop = ls_ctxt_prop .
DO .
popup_to_get_value(
EXPORTING iv_title = v_text-t126 " -->> text: Specify new value
iv_tabname = 'ALPDBUIALV'
iv_fieldname = 'INDEX'
iv_fieldtext = v_text-t236 " -->> text: Table row
iv_obligatory = abap_on
IMPORTING ev_cancel = cv_cancel
CHANGING cv_value = cv_cb_val_sub_row ) .
CHECK cv_cancel IS NOT INITIAL
OR cv_cb_val_sub_row IS NOT INITIAL .
EXIT . " -->> do
ENDDO .
ENDMETHOD . "popup_ctxtfield_sub
METHOD popup_ctxtmulti .
DATA:
lt_hierarchy TYPE lcl_context=>ty_t_hierarchy ,
lv_offset TYPE i ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_marktab TYPE snodetext ,
lt_marktab TYPE STANDARD TABLE OF snodetext ,
ls_comp_paths TYPE ty_s_ctxtmulti .
CLEAR popup_ctxtfield_cancel .
CLEAR ct_comp_paths .
CLEAR ls_comp_paths .
ls_comp_paths-comp_type = lcl_form=>c_comp_type-field .
ls_comp_paths-comp_name = ls_ctxt_prop-comp_name .
ls_comp_paths-comp_shortdescr = ls_ctxt_prop-comp_shortdescr .
ENDIF .
ENDMETHOD . "popup_ctxtmulti
METHOD popup_ctxtmulti_callback .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_marktab TYPE STANDARD TABLE OF snodetext ,
ls_node_info TYPE snodetext .
CASE iv_uc .
WHEN 'CANC' .
MESSAGE s000(lp) WITH v_text-t100 . " text: Operation was terminated by
the user
popup_ctxtfield_cancel = abap_on .
cv_exit = abap_on .
WHEN 'TRA1' .
CALL FUNCTION 'RS_TREE_GET_MARKED_NODES'
EXPORTING
with_subtree = space
TABLES
marktab = lt_marktab.
IF lt_marktab[] IS INITIAL .
MESSAGE s000(lp) WITH v_text-t181 . " text: Select components to be
added
ELSE .
cv_exit = abap_on .
ENDIF .
WHEN OTHERS .
ls_ctxt_prop = r_formtemplate->r_context->node_get( is_nodetab-hide ) .
IF ls_ctxt_prop-comp_type NE r_formtemplate->r_context->c_comp_type-element
.
MESSAGE s000(lp) WITH v_text-t110 . " text: Component is not allowed
for choice
EXIT .
ENDIF .
CASE ls_node_info-nodeicon .
WHEN lcl_context=>c_comp_icon-element .
ls_node_info-nodeicon = icon_okay .
WHEN icon_okay .
ls_node_info-nodeicon = lcl_context=>c_comp_icon-element .
WHEN OTHERS .
ENDCASE.
CASE ls_node_info-nodeicon .
WHEN lcl_context=>c_comp_icon-element .
CALL FUNCTION 'RS_TREE_RESET_LOCK'
EXPORTING
node_id = ls_node_info-id
with_subtree = space
EXCEPTIONS
OTHERS = 0.
WHEN icon_okay .
CALL FUNCTION 'RS_TREE_SET_LOCK'
EXPORTING
node_id = ls_node_info-id
with_subtree = space
EXCEPTIONS
OTHERS = 0.
WHEN OTHERS .
ENDCASE.
cv_list_refresh = abap_on .
ENDCASE .
ENDMETHOD . "popup_ctxtmulti_callback
METHOD popup_charpos .
DATA:
lv_match TYPE i , "sval-value ,
lv_offset TYPE i , "sval-value ,
lv_title TYPE ty_char100 ,
lv_length TYPE i .
CLEAR cv_cancel .
DO .
CLEAR lv_offset .
IF cv_offset IS NOT INITIAL .
lv_offset = cv_offset .
ENDIF .
CLEAR lv_match .
IF cv_match IS NOT INITIAL .
lv_match = cv_match .
ENDIF .
popup_to_get_value(
EXPORTING iv_title = lv_title
iv_tabname = 'SYST'
iv_fieldname = 'INDEX'
iv_fieldtext = v_text-t098 " text: from position
iv_2tabname = 'SYST'
iv_2fieldname = 'TABIX'
iv_2fieldtext = v_text-t024 " text: Chars number
IMPORTING ev_cancel = cv_cancel
CHANGING cv_value = lv_offset
cv_2value = lv_match ) .
ENDMETHOD . "popup_charpos
METHOD popup_matrix_interval .
DATA lv_title TYPE ty_char100 .
CONCATENATE v_text-t216 '.' " text: Matrix (one char per cell)
v_text-t217 " text: Interval:
INTO lv_title SEPARATED BY space .
popup_to_get_value(
EXPORTING iv_title = lv_title
iv_tabname = 'SYST'
iv_fieldname = 'INDEX'
iv_fieldtext = v_text-t162 " text: column(s)
iv_2tabname = 'SYST'
iv_2fieldname = 'TABIX'
iv_2fieldtext = v_text-t163 " text: row(s)
CHANGING cv_value = cv_cols
cv_2value = cv_rows ) .
ENDMETHOD . "popup_matrix_interval
METHOD popup_tbsheet .
TYPES:
BEGIN OF ty_s_sheets_f4 ,
name TYPE ty_char31 ,
END OF ty_s_sheets_f4 ,
ty_t_sheets_f4 TYPE STANDARD TABLE OF ty_s_sheets_f4 .
DATA:
lv_title TYPE ty_char100 ,
ls_fct_f4 TYPE lvc_s_fcat ,
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag ,
ls_sheets TYPE lcl_exceltemplate=>ty_s_sheets ,
ls_sheets_f4 TYPE ty_s_sheets_f4 ,
lt_sheets_f4 TYPE ty_t_sheets_f4 .
CLEAR rv_name .
ls_fct_f4-fieldname = 'NAME' .
ls_fct_f4-outputlen = 35 .
APPEND ls_fct_f4 TO lt_fct_f4 .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_sheets_f4 INTO ls_sheets_f4 INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
rv_name = ls_sheets_f4-name .
ENDMETHOD . "popup_tbsheet
METHOD popup_tbdrawing .
TYPES:
BEGIN OF ty_s_drawings_f4 ,
name TYPE ty_char100 ,
END OF ty_s_drawings_f4 ,
ty_t_drawings_f4 TYPE STANDARD TABLE OF ty_s_drawings_f4 .
DATA:
lv_title TYPE ty_char100 ,
ls_fct_f4 TYPE lvc_s_fcat ,
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag ,
ls_sheets TYPE lcl_exceltemplate=>ty_s_sheets ,
ls_drawings TYPE lcl_exceltemplate=>ty_s_drawings_tmp ,
ls_drawings_f4 TYPE ty_s_drawings_f4 ,
lt_drawings_f4 TYPE ty_t_drawings_f4 .
CLEAR rv_name .
ls_sheets = r_formtemplate->r_exceltemplate->get_sheet( iv_sheetname ) .
ls_drawings_f4-name = ls_drawings-name .
APPEND ls_drawings_f4 TO lt_drawings_f4 .
ENDLOOP .
IF lt_drawings_f4[] IS INITIAL .
CASE abap_on .
WHEN iv_vector OR iv_bitmap .
MESSAGE i000(lp) WITH v_text-t144 " text: There are no drawings on
the sheet
iv_sheetname .
WHEN iv_chart .
MESSAGE i000(lp) WITH v_text-t240 " text: There are no Charts on the
worksheet
iv_sheetname .
WHEN OTHERS .
ENDCASE .
EXIT .
ENDIF .
ls_excl_f4-func = '%SC' . APPEND ls_excl_f4 TO lt_excl_f4 .
ls_excl_f4-func = '&RNT' . APPEND ls_excl_f4 TO lt_excl_f4 .
ls_excl_f4-func = '&OL0' . APPEND ls_excl_f4 TO lt_excl_f4 .
ls_excl_f4-func = '&ODN' . APPEND ls_excl_f4 TO lt_excl_f4 .
ls_excl_f4-func = '&OUP' . APPEND ls_excl_f4 TO lt_excl_f4 .
ls_excl_f4-func = '&ILT' . APPEND ls_excl_f4 TO lt_excl_f4 .
ls_excl_f4-func = '&ELP' . APPEND ls_excl_f4 TO lt_excl_f4 .
ls_fct_f4-fieldname = 'NAME' .
ls_fct_f4-outputlen = 35 .
APPEND ls_fct_f4 TO lt_fct_f4 .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_drawings_f4 INTO ls_drawings_f4 INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
rv_name = ls_drawings_f4-name .
ENDMETHOD . "popup_tbdrawing
METHOD popup_dataset_id .
TYPES:
BEGIN OF ty_s_outtab_f4 ,
grid_id TYPE lcl_form=>ty_s_properties-dataset_id ,
grid_compname TYPE lcl_form=>ty_s_properties-comp_name ,
sheet_compname TYPE lcl_form=>ty_s_properties-comp_name ,
END OF ty_s_outtab_f4 ,
ty_t_outtab_f4 TYPE STANDARD TABLE OF ty_s_outtab_f4 .
DATA:
lv_title TYPE ty_char100 ,
ls_fct_f4 TYPE lvc_s_fcat ,
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag ,
ls_outtab_f4 TYPE ty_s_outtab_f4 ,
lt_outtab_f4 TYPE ty_t_outtab_f4 ,
ls_datasets TYPE ty_s_nodetab ,
lt_datasets TYPE ty_t_nodetab ,
ls_form_prop TYPE lcl_form=>ty_s_properties .
r_formtemplate->get_relevant_datasets(
EXPORTING iv_id = iv_id
iv_same_sheet = iv_same_sheet
RECEIVING rt_datasets = lt_datasets ) .
IF lt_datasets[] IS INITIAL .
MESSAGE s000(lp) WITH v_text-t120 . " text: Relevant components are
missing
EXIT .
ENDIF .
CLEAR ls_fct_f4 .
ls_fct_f4-fieldname = 'GRID_COMPNAME' .
ls_fct_f4-coltext = v_text-t225 . " text: Grid
ls_fct_f4-outputlen = 20 .
ls_fct_f4-hotspot = abap_on .
APPEND ls_fct_f4 TO lt_fct_f4 .
CLEAR ls_fct_f4 .
ls_fct_f4-fieldname = 'SHEET_COMPNAME' .
ls_fct_f4-coltext = v_text-t238 . " text: On the sheet
ls_fct_f4-outputlen = 15 .
ls_fct_f4-emphasize = 'C500' .
APPEND ls_fct_f4 TO lt_fct_f4 .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab_f4 INTO ls_outtab_f4 INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
cv_dataset_id = ls_outtab_f4-grid_id .
ENDMETHOD . "popup_dataset_id
METHOD popup_dataset_series .
TYPES:
BEGIN OF ty_s_outtab_dtsfld ,
dtsfld TYPE string ,
dtsfld_text TYPE ty_char100 ,
END OF ty_s_outtab_dtsfld ,
ty_t_outtab_dtsfld TYPE STANDARD TABLE OF ty_s_outtab_dtsfld .
TYPES:
BEGIN OF ty_s_outtab_link ,
seridx TYPE string ,
sercap TYPE string ,
dtsfld TYPE string ,
sernum TYPE ty_char100 ,
dtsfld_text TYPE ty_char100 ,
status TYPE icon_d ,
END OF ty_s_outtab_link ,
ty_t_outtab_link TYPE STANDARD TABLE OF ty_s_outtab_link .
DATA:
ls_form_prop_ds TYPE lcl_form=>ty_s_properties ,
ls_ctxt_prop_ds TYPE lcl_context=>ty_s_properties ,
lt_ctxt_prop_ds TYPE lcl_context=>ty_t_properties ,
ls_fldseq TYPE lcl_form=>ty_s_grid_fldseq ,
lt_fldseq TYPE lcl_form=>ty_t_grid_fldseq ,
ls_drawings TYPE lcl_excel=>ty_s_drawings_tmp ,
ls_chart_series TYPE lcl_excel=>ty_s_chart_series ,
ls_dataset_series_tab TYPE ty_s_dataset_series_tab ,
lt_dataset_series_tab TYPE ty_t_dataset_series_tab ,
lv_tb_sheetname TYPE lcl_form=>ty_s_properties-tb_sheetname .
DATA:
lv_title_link TYPE ty_char100 ,
lv_title_dtsfld TYPE ty_char100 ,
lv_exit_link TYPE flag ,
lv_exit_dtsfld TYPE flag ,
ls_fct TYPE lvc_s_fcat ,
lt_fct_link TYPE lvc_t_fcat ,
lt_fct_dtsfld TYPE lvc_t_fcat ,
ls_excl TYPE lvc_s_excl ,
lt_excl_link TYPE lvc_t_excl ,
lt_excl_dtsfld TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lt_outtab_link TYPE ty_t_outtab_link ,
lt_outtab_dtsfld TYPE ty_t_outtab_dtsfld .
FIELD-SYMBOLS:
<outtab_link> TYPE ty_s_outtab_link ,
<outtab_dtsfld> TYPE ty_s_outtab_dtsfld .
* chart: Sheet
r_formtemplate->node_get_legacy_info( EXPORTING iv_id = cs_form_prop-id
IMPORTING ev_tb_sheetname =
lv_tb_sheetname ) .
CHECK lv_tb_sheetname IS NOT INITIAL .
* dataset: Properties
ls_form_prop_ds = r_formtemplate->node_get_properties( cs_form_prop-
dataset_id ) .
* ->> Fieldcatalog
CLEAR ls_fct .
ls_fct-fieldname = 'DTSFLD_TEXT' .
ls_fct-outputlen = 25 .
ls_fct-hotspot = abap_on .
CONCATENATE v_text-t226 " text: columns
'(' v_text-t234 ')' " text: Dataset
INTO ls_fct-coltext SEPARATED BY space .
APPEND ls_fct TO lt_fct_dtsfld .
* ->> Fieldcatalog
CLEAR ls_fct .
ls_fct-fieldname = 'SERNUM' .
ls_fct-coltext = v_text-t235 . " text: Series
ls_fct-outputlen = 6 .
ls_fct-emphasize = 'C500' .
APPEND ls_fct TO lt_fct_link .
CLEAR ls_fct .
ls_fct-fieldname = 'SERCAP' .
ls_fct-outputlen = 35 .
ls_fct-emphasize = 'C500' .
CONCATENATE v_text-t235 " text: Series
'(' v_text-t232 ')' " text: Chart
INTO ls_fct-coltext SEPARATED BY space .
APPEND ls_fct TO lt_fct_link .
CLEAR ls_fct .
ls_fct-fieldname = 'STATUS' .
ls_fct-coltext = v_text-t056 . " text: Status
ls_fct-outputlen = 3 .
ls_fct-emphasize = 'C510' .
ls_fct-icon = abap_on .
APPEND ls_fct TO lt_fct_link .
CLEAR ls_fct .
ls_fct-fieldname = 'DTSFLD_TEXT' .
ls_fct-outputlen = 40 .
ls_fct-hotspot = abap_on .
CONCATENATE v_text-t226 " text: columns
'(' v_text-t234 ')' " text: Dataset
INTO ls_fct-coltext SEPARATED BY space .
APPEND ls_fct TO lt_fct_link .
* ->> Output table
SORT ls_drawings-chart_series BY idx .
CLEAR ls_chart_series .
ls_chart_series-idx = c_chart_category_idx .
ls_chart_series-caption = v_text-t250 . " text: Horizontal (Category)
axis labels
APPEND ls_chart_series TO ls_drawings-chart_series .
DO .
* popup display: Link
CLEAR lv_exit_link .
CLEAR ls_selfield .
CALL FUNCTION 'LVC_SINGLE_ITEM_SELECTION'
EXPORTING
i_title = lv_title_link
it_fieldcatalog = lt_fct_link[]
it_status_excl = lt_excl_link[]
i_screen_start_column = 10
i_screen_start_line = 5
i_screen_end_column = 100
i_screen_end_line = 15
IMPORTING
es_selfield = ls_selfield
e_exit = lv_exit_link
TABLES
t_outtab = lt_outtab_link[].
IF lv_exit_link IS NOT INITIAL .
EXIT . " -->> do
ENDIF .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab_link ASSIGNING <outtab_link> INDEX ls_selfield-
tabindex .
CHECK sy-subrc EQ 0 .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab_dtsfld ASSIGNING <outtab_dtsfld> INDEX ls_selfield-
tabindex .
CHECK sy-subrc EQ 0 .
<outtab_link>-dtsfld = <outtab_dtsfld>-dtsfld .
<outtab_link>-dtsfld_text = <outtab_dtsfld>-dtsfld_text .
<outtab_link>-status = icon_presence .
ENDDO .
* return result
cs_form_prop-dataset_series = r_formtemplate-
>conv_dataset_series_ts( lt_dataset_series_tab[] ) .
ENDMETHOD . "popup_dataset_series
METHOD popup_dataset_field .
TYPES:
BEGIN OF ty_s_outtab_dtsfld ,
dtsfld TYPE string ,
dtsfld_text TYPE ty_char100 ,
END OF ty_s_outtab_dtsfld ,
ty_t_outtab_dtsfld TYPE STANDARD TABLE OF ty_s_outtab_dtsfld .
DATA:
ls_form_prop_ds TYPE lcl_form=>ty_s_properties ,
ls_ctxt_prop_ds TYPE lcl_context=>ty_s_properties ,
lt_ctxt_prop_ds TYPE lcl_context=>ty_t_properties ,
ls_fldseq TYPE lcl_form=>ty_s_grid_fldseq ,
lt_fldseq TYPE lcl_form=>ty_t_grid_fldseq .
DATA:
lv_title_dtsfld TYPE ty_char100 ,
lv_exit_dtsfld TYPE flag ,
ls_fct TYPE lvc_s_fcat ,
lt_fct_dtsfld TYPE lvc_t_fcat ,
ls_excl TYPE lvc_s_excl ,
lt_excl_dtsfld TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lt_outtab_dtsfld TYPE ty_t_outtab_dtsfld .
FIELD-SYMBOLS:
<outtab_dtsfld> TYPE ty_s_outtab_dtsfld .
* dataset: Properties
ls_form_prop_ds = r_formtemplate->node_get_properties( iv_dataset_id ) .
* ->> Title
lv_title_dtsfld = v_text-t227 . " text: available columns set
* ->> Fieldcatalog
CLEAR ls_fct .
ls_fct-fieldname = 'DTSFLD_TEXT' .
ls_fct-outputlen = 25 .
ls_fct-hotspot = abap_on .
CONCATENATE v_text-t226 " text: columns
'(' v_text-t234 ')' " text: Dataset
INTO ls_fct-coltext SEPARATED BY space .
APPEND ls_fct TO lt_fct_dtsfld .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab_dtsfld ASSIGNING <outtab_dtsfld> INDEX ls_selfield-
tabindex .
CHECK sy-subrc EQ 0 .
cv_fieldname = <outtab_dtsfld>-dtsfld .
ENDMETHOD . "popup_dataset_field
METHOD popup_formname_f4 .
*=======================================================================
* prepare selection criteria
*=======================================================================
DATA:
so_objid TYPE RANGE OF wwwdatatab-objid ,
so_text TYPE RANGE OF wwwdatatab-text ,
so_devcl TYPE RANGE OF tadir-devclass ,
lv_title TYPE ty_char100 ,
lv_back TYPE ty_char1 .
FIELD-SYMBOLS:
<objid> LIKE LINE OF so_objid .
*=======================================================================
* prepare the output dataset
*=======================================================================
DATA lt_outtab TYPE STANDARD TABLE OF wwwdatatab .
FIELD-SYMBOLS <outtab> TYPE wwwdatatab .
SELECT *
FROM wwwdata AS f
INNER JOIN tadir AS p
ON f~objid EQ p~obj_name
INTO CORRESPONDING FIELDS OF TABLE lt_outtab
WHERE f~text IN so_text
AND f~srtf2 EQ 0
AND f~relid EQ lcl_form=>c_relid
AND p~pgmid EQ lcl_form=>c_pgmid
AND p~object EQ lcl_form=>c_object
AND p~devclass IN so_devcl
AND p~obj_name IN so_objid .
IF lt_outtab[] IS INITIAL .
MESSAGE s000(lp) WITH lcl_root=>v_text-t137 . " text: Data was not found.
EXIT .
ENDIF .
SORT lt_outtab BY devclass objid ASCENDING .
*=======================================================================
* display the grid
*=======================================================================
DATA:
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag .
FIELD-SYMBOLS:
<fct_f4> TYPE lvc_s_fcat .
* prepare fieldcatalog
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'WWWDATATAB'
i_bypassing_buffer = abap_off
CHANGING
ct_fieldcat = lt_fct_f4
EXCEPTIONS
OTHERS = 3.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
EXIT .
ENDIF .
LOOP AT lt_fct_f4 ASSIGNING <fct_f4> .
CASE <fct_f4>-fieldname .
WHEN 'OBJID' . <fct_f4>-col_pos = 1 . <fct_f4>-outputlen = 20 .
<fct_f4>-emphasize = 'C500' .
WHEN 'TEXT' . <fct_f4>-col_pos = 2 . <fct_f4>-outputlen = 20 .
WHEN 'DEVCLASS' . <fct_f4>-col_pos = 3 . <fct_f4>-outputlen = 15 .
WHEN 'TDATE' . <fct_f4>-col_pos = 4 .
WHEN 'TTIME' . <fct_f4>-col_pos = 5 .
WHEN OTHERS. <fct_f4>-tech = abap_on .
ENDCASE .
ENDLOOP .
*=======================================================================
* result
*=======================================================================
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab ASSIGNING <outtab> INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
cv_formname = <outtab>-objid .
ENDMETHOD . "popup_formname_f4
METHOD popup_devclass .
CLEAR rv_devclass .
DATA:
lv_fieldtext TYPE sval-fieldtext ,
lv_value TYPE sval-value ,
lv_cancel TYPE flag .
popup_to_get_value(
EXPORTING iv_title = v_text-t156 " -->> text: Extend unbroken area
iv_tabname = 'SYST'
iv_fieldname = 'INDEX'
iv_fieldtext = lv_fieldtext
IMPORTING ev_cancel = lv_cancel
CHANGING cv_value = lv_value ) .
ENDMETHOD . "popup_pgbrk
METHOD popup_printtitles .
TYPES:
BEGIN OF ty_s_patterns_f4 ,
id TYPE lcl_form=>ty_s_properties-id ,
comp_name TYPE lcl_form=>ty_s_properties-comp_name,
comp_descr TYPE lcl_form=>ty_s_properties-comp_descr,
END OF ty_s_patterns_f4 ,
ty_t_patterns_f4 TYPE STANDARD TABLE OF ty_s_patterns_f4 .
DATA:
lv_title TYPE ty_char100 ,
ls_fct_f4 TYPE lvc_s_fcat ,
lt_fct_f4 TYPE lvc_t_fcat ,
ls_excl_f4 TYPE lvc_s_excl ,
lt_excl_f4 TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_patternarea TYPE lcl_form=>ty_s_patternarea ,
ls_patterns_f4 TYPE ty_s_patterns_f4 ,
lt_patterns_f4 TYPE ty_t_patterns_f4 .
CLEAR ls_patterns_f4 .
ls_patterns_f4-id = ls_form_prop-id .
ls_patterns_f4-comp_name = ls_form_prop-comp_name .
ls_patterns_f4-comp_descr = ls_form_prop-comp_descr .
APPEND ls_patterns_f4 TO lt_patterns_f4 .
ENDLOOP .
IF lt_patterns_f4[] IS INITIAL .
MESSAGE i000(lp) WITH v_text-t164 . " text: Patterns are not found
EXIT .
ENDIF .
ls_fct_f4-fieldname = 'COMP_NAME' .
ls_fct_f4-outputlen = 30 .
APPEND ls_fct_f4 TO lt_fct_f4 .
ls_fct_f4-fieldname = 'COMP_DESCR' .
ls_fct_f4-outputlen = 35 .
APPEND ls_fct_f4 TO lt_fct_f4 .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_patterns_f4 INTO ls_patterns_f4 INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
cv_comp_id = ls_patterns_f4-id .
ENDMETHOD . "popup_printtitles
METHOD popup_grid_fldseq .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_ctxt_prop TYPE lcl_context=>ty_t_properties ,
ls_fldseq TYPE lcl_form=>ty_s_grid_fldseq ,
lt_fldseq TYPE lcl_form=>ty_t_grid_fldseq ,
ls_fields TYPE lvc_s_objs ,
lt_fields TYPE lvc_t_objs ,
lt_fields_included TYPE STANDARD TABLE OF lvc_s_objs ,
lt_fields_excluded TYPE STANDARD TABLE OF lvc_s_objs ,
lv_title_left TYPE sy-title ,
lv_title_right TYPE sy-title ,
lv_popup_title TYPE sy-title ,
ls_layout TYPE lvc_s_daly ,
lv_exit TYPE flag .
r_formtemplate->get_grid_fldseqprop(
EXPORTING iv_id = cs_form_prop-id
IMPORTING et_ctxt_prop = lt_ctxt_prop[]
et_fldseq = lt_fldseq[] ) .
CLEAR ls_fields .
ls_fields-id = ls_ctxt_prop-id .
CONCATENATE ls_ctxt_prop-comp_name '~~~('
ls_ctxt_prop-comp_shortdescr ')'
INTO ls_fields-text .
TRANSLATE ls_fields-text USING '~ ' .
APPEND ls_fields TO lt_fields .
ENDLOOP .
lt_fields_excluded[] = lt_fields[] .
* return value
CLEAR lt_fldseq .
ENDMETHOD . "popup_grid_fldseq
METHOD popup_grid_fldprop .
TYPES:
BEGIN OF ty_s_outtab ,
field TYPE string ,
field_text TYPE ty_char255 ,
marker TYPE icon_d ,
autofitmerged TYPE icon_d ,
END OF ty_s_outtab ,
ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab .
DATA:
lt_fldprop TYPE lcl_form=>ty_t_grid_fldprop ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lt_ctxt_prop TYPE lcl_context=>ty_t_properties .
DATA:
lv_title TYPE ty_char100 ,
lv_exit TYPE flag ,
ls_fct TYPE lvc_s_fcat ,
lt_fct TYPE lvc_t_fcat ,
ls_excl TYPE lvc_s_excl ,
lt_excl TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lt_outtab TYPE ty_t_outtab ,
lv_selected TYPE ty_char1 ,
lv_info_flag TYPE flag .
FIELD-SYMBOLS:
<outtab> TYPE ty_s_outtab ,
<fldprop> TYPE lcl_form=>ty_s_grid_fldprop .
r_formtemplate->get_grid_fldseqprop(
EXPORTING iv_id = cs_form_prop-id
IMPORTING et_ctxt_prop = lt_ctxt_prop[]
et_fldprop = lt_fldprop[] ) .
* popup parameters:
* ->> Excluded functions
ls_excl-func = '%SC' . APPEND ls_excl TO lt_excl .
ls_excl-func = '&RNT' . APPEND ls_excl TO lt_excl .
ls_excl-func = '&OL0' . APPEND ls_excl TO lt_excl .
ls_excl-func = '&ODN' . APPEND ls_excl TO lt_excl .
ls_excl-func = '&OUP' . APPEND ls_excl TO lt_excl .
ls_excl-func = '&ILT' . APPEND ls_excl TO lt_excl .
ls_excl-func = '&ELP' . APPEND ls_excl TO lt_excl .
ls_excl-func = '&ONT' . APPEND ls_excl TO lt_excl .
* ->> Title
lv_title = v_text-t279 . " text: Properties of the Grid columns
* ->> Fieldcatalog
CLEAR ls_fct .
ls_fct-fieldname = 'MARKER' .
ls_fct-outputlen = 2 .
ls_fct-icon = abap_on .
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'FIELD_TEXT' .
ls_fct-outputlen = 70 .
ls_fct-coltext = v_text-t227 . " text: available columns set
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'AUTOFITMERGED' .
ls_fct-outputlen = 7 .
ls_fct-coltext = 'AutoFit' .
ls_fct-tooltip = v_text-t275 . " text: AutoFit for merged cells
ls_fct-icon = abap_on .
ls_fct-hotspot = abap_on .
ls_fct-emphasize = 'C500' .
APPEND ls_fct TO lt_fct .
* field
APPEND INITIAL LINE TO lt_outtab ASSIGNING <outtab> .
<outtab>-field = <fldprop>-field .
* field text
format_path( EXPORTING iv_source = ls_ctxt_prop-comp_name
CHANGING cv_formatted = <outtab>-field_text ) .
CONCATENATE <outtab>-field_text '~~~('
ls_ctxt_prop-comp_shortdescr ')'
INTO <outtab>-field_text .
TRANSLATE <outtab>-field_text USING '~ ' .
* marker
IF <fldprop>-autofitmerged_r IS INITIAL
AND <fldprop>-autofitmerged_c IS INITIAL .
<outtab>-marker = icon_rating_neutral .
ELSE .
<outtab>-marker = icon_rating_positive .
ENDIF .
DO .
* popup display: column list
CLEAR lv_exit .
CLEAR ls_selfield .
CALL FUNCTION 'LVC_SINGLE_ITEM_SELECTION'
EXPORTING
i_title = lv_title
it_fieldcatalog = lt_fct[]
it_status_excl = lt_excl[]
i_screen_start_column = 10
i_screen_start_line = 5
i_screen_end_column = 100
i_screen_end_line = 15
IMPORTING
es_selfield = ls_selfield
e_exit = lv_exit
TABLES
t_outtab = lt_outtab[].
IF lv_exit IS NOT INITIAL .
EXIT . " -->> do
ENDIF .
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab ASSIGNING <outtab> INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
CASE ls_selfield-fieldname .
WHEN 'AUTOFITMERGED' .
IF <fldprop>-autofitmerged_r IS NOT INITIAL .
lv_selected = 2 .
ELSEIF <fldprop>-autofitmerged_c IS NOT INITIAL .
lv_selected = 3 .
ELSE .
lv_selected = 1 .
ENDIF .
IF lv_info_flag IS INITIAL .
lv_info_flag = abap_on .
popup_postprocessing_info( ) .
ENDIF .
ENDIF .
WHEN OTHERS .
ENDCASE .
ENDDO .
* return result
cs_form_prop-grid_fldprop = r_formtemplate-
>conv_grid_fldprop_ts( lt_fldprop ) .
ENDMETHOD . "popup_grid_fldprop
METHOD popup_vbs_code_editor .
TYPES:
ty_v_content TYPE c LENGTH 255 .
DATA:
lv_content TYPE ty_v_content ,
lt_content TYPE STANDARD TABLE OF ty_v_content,
lv_changed TYPE s38e-buf_varied ,
lv_subrc TYPE sy-subrc ,
lv_vbs_code_tmp TYPE string ,
lv_vbs_code_before TYPE string .
cv_cancel = abap_on .
lv_vbs_code_before = cv_vbs_code .
IF cv_vbs_code IS INITIAL .
popup_postprocessing_info( ) .
cv_vbs_code = r_formtemplate->vbs_code_default_get( ) .
ENDIF .
SPLIT cv_vbs_code
AT cl_abap_char_utilities=>cr_lf
INTO TABLE lt_content .
CLEAR cv_vbs_code .
CLEAR cv_cancel .
IF cv_vbs_code NE lv_vbs_code_before .
CLEAR cv_cancel .
ENDIF .
ENDMETHOD . "popup_vbs_code_editor
METHOD popup_vbs_tables .
TYPES:
BEGIN OF ty_s_outtab ,
icon_checkbox TYPE icon_d ,
table_name TYPE string ,
cb_relpath TYPE string ,
cb_relpath_out TYPE ty_char255 ,
cb_shortdescr TYPE ty_char255 ,
END OF ty_s_outtab ,
ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab .
DATA:
lt_vbs_tables_tab_r TYPE ty_t_vbs_tables_tab ,
lt_vbs_tables_tab_s TYPE ty_t_vbs_tables_tab .
DATA:
lv_title TYPE ty_char100 ,
lv_exit TYPE flag ,
ls_fct TYPE lvc_s_fcat ,
lt_fct TYPE lvc_t_fcat ,
ls_excl TYPE lvc_s_excl ,
lt_excl TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lt_outtab TYPE ty_t_outtab ,
lv_selected TYPE ty_char1 ,
lv_vbs_tables_before TYPE string .
FIELD-SYMBOLS:
<ls_vbs_tables_tab_r> TYPE ty_s_vbs_tables_tab ,
<ls_vbs_tables_tab_s> TYPE ty_s_vbs_tables_tab ,
<ls_outtab> TYPE ty_s_outtab .
cv_cancel = abap_on .
lv_vbs_tables_before = cv_vbs_tables .
* ->> Fieldcatalog
CLEAR ls_fct .
ls_fct-fieldname = 'ICON_CHECKBOX' .
ls_fct-outputlen = 5 .
ls_fct-icon = abap_on .
ls_fct-hotspot = abap_on .
ls_fct-emphasize = 'C500' .
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'CB_RELPATH_OUT' .
ls_fct-outputlen = 40 .
ls_fct-coltext = v_text-t077 . " text: Binding with context
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'CB_SHORTDESCR' .
ls_fct-outputlen = 30 .
ls_fct-coltext = v_text-t058 . " text: Description
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'TABLE_NAME' .
ls_fct-outputlen = 30 .
ls_fct-coltext = v_text-t294 . " text: Table name
ls_fct-hotspot = abap_on .
ls_fct-emphasize = 'C500' .
APPEND ls_fct TO lt_fct .
DO .
*------ display popup-list
CLEAR lv_exit .
CLEAR ls_selfield .
CALL FUNCTION 'LVC_SINGLE_ITEM_SELECTION'
EXPORTING
i_title = lv_title
it_fieldcatalog = lt_fct[]
it_status_excl = lt_excl[]
i_screen_start_column = 10
i_screen_start_line = 5
i_screen_end_column = 130
i_screen_end_line = 15
IMPORTING
es_selfield = ls_selfield
e_exit = lv_exit
TABLES
t_outtab = lt_outtab[].
IF lv_exit IS NOT INITIAL .
EXIT . " -->> do
ENDIF .
*------ interaction
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab ASSIGNING <ls_outtab> INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
CASE ls_selfield-fieldname .
WHEN 'ICON_CHECKBOX' .
CASE <ls_outtab>-icon_checkbox .
WHEN icon_checkbox .
<ls_outtab>-table_name = space .
<ls_outtab>-icon_checkbox = icon_wd_iframe .
WHEN icon_wd_iframe .
popup_to_get_value(
EXPORTING iv_title = <ls_outtab>-cb_relpath_out
iv_tabname = 'MASSD_F4_ATT'
iv_fieldname = 'TABNAME'
iv_fieldtext = v_text-t292 " text: Specify
Table name
iv_obligatory = abap_on
CHANGING cv_value = <ls_outtab>-table_name ) .
WHEN 'TABLE_NAME' .
popup_to_get_value(
EXPORTING iv_title = <ls_outtab>-cb_relpath_out
iv_tabname = 'MASSD_F4_ATT'
iv_fieldname = 'TABNAME'
iv_fieldtext = v_text-t292 " text: Specify
Table name
iv_obligatory = abap_on
CHANGING cv_value = <ls_outtab>-table_name ) .
ENDCASE .
ENDDO .
<ls_vbs_tables_tab_s>-table_name = <ls_outtab>-table_name .
<ls_vbs_tables_tab_s>-cb_relpath = <ls_outtab>-cb_relpath .
ENDLOOP .
ENDMETHOD . "popup_vbs_tables
METHOD hndl_fcode_appl .
tech_fcode_dispatch( iv_fcode = ev_fcode ) .
ENDMETHOD . "hndl_fcode_appl
METHOD hndl_fcode_ptab .
tech_fcode_dispatch( iv_fcode = ev_fcode
iv_form_id = ev_form_id ) .
ENDMETHOD . "hndl_fcode_ptab
METHOD hndl_fcode_tmpl .
tech_fcode_dispatch( iv_fcode = ev_fcode ).
ENDMETHOD. "hndl_fcode_tmpl
METHOD hndl_fcode_comp .
tech_fcode_dispatch( iv_fcode = ev_fcode
iv_form_id = ev_form_id ) .
ENDMETHOD . "hndl_fcode_comp
METHOD hndl_comp_move .
msg_init( ) .
DATA:
lr_dragdrop_data TYPE REF TO lcl_wb_formtree_drgdrpdata .
lr_dragdrop_data->r_formtemplate = r_formtemplate .
ENDMETHOD . "hndl_comp_move
METHOD actn_comp_selected .
msg_init( ) .
r_formtemplate->node_get_legacy_info(
EXPORTING iv_id = iv_form_id
IMPORTING es_exceptions = ls_form_excp
ev_tb_sheetname = lv_tb_sheetname ) .
IF ls_form_prop-comp_type EQ lcl_form=>c_comp_type-field
AND ls_form_prop-tb_area_textmark IS NOT INITIAL .
ls_form_prop-id = r_formtemplate->node_get_parent( ls_form_prop-id ) . " -->>
get parent PATTERN
CASE ls_form_prop-comp_type .
WHEN r_formtemplate->c_comp_type-pattern
OR r_formtemplate->c_comp_type-respattern
OR r_formtemplate->c_comp_type-field
OR r_formtemplate->c_comp_type-drawing
OR r_formtemplate->c_comp_type-chart
OR r_formtemplate->c_comp_type-tree
OR r_formtemplate->c_comp_type-grid .
lv_sheet_only = abap_off .
WHEN OTHERS.
lv_sheet_only = abap_on .
ENDCASE.
lv_sheet_not_found =
r_excelole->selection_set( iv_sheet = lv_tb_sheetname
iv_sheet_only = lv_sheet_only
iv_area_top = ls_form_prop-tb_area_top
iv_area_left = ls_form_prop-tb_area_left
iv_area_rows = ls_form_prop-tb_area_rows
iv_area_columns = ls_form_prop-tb_area_columns ) .
IF lv_sheet_not_found IS NOT INITIAL
AND ls_form_excp-tb_sheetname EQ c_retcode-okey .
tech_template_sync( ) .
CHECK msg_check_errors_and_show( me ) IS INITIAL .
r_formtree->redraw( r_formtemplate ) .
ENDIF .
ENDMETHOD . "actn_comp_selected
METHOD actn_comp_add .
msg_init( ) .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_new_form_prop TYPE lcl_form=>ty_s_properties ,
ls_comp_types TYPE ty_s_comp_types ,
lt_comp_types TYPE ty_t_comp_types .
DATA:
lv_form_id_parent TYPE snode-id ,
lv_form_id_sibling TYPE snode-id ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
lv_cancel TYPE flag ,
lv_wizard_mode TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path ,
ls_comp_paths TYPE ty_s_ctxtmulti ,
lt_comp_paths TYPE ty_t_ctxtmulti .
WHEN iv_sibling .
CASE iv_form_id .
WHEN r_formtemplate->v_root_id .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is
irrelevant for component type
EXIT .
ENDCASE .
lv_form_id_sibling = iv_form_id .
lv_form_id_parent = r_formtemplate->node_get_parent( iv_form_id ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
ENDCASE .
IF lt_comp_types[] IS INITIAL .
MESSAGE i000(lp) WITH v_text-t120 . " text: Relevant components are missing
EXIT .
ENDIF .
popup_comp_types(
EXPORTING it_comp_types = lt_comp_types
iv_wizard_mode_allow = abap_on
IMPORTING ev_comp_type = ls_new_form_prop-comp_type
ev_wizard_mode = lv_wizard_mode
ev_cancel = lv_cancel ) .
CASE lv_wizard_mode .
WHEN space .
*======================================================================
* common mode
*======================================================================
popup_compname(
EXPORTING iv_comp_type = ls_new_form_prop-comp_type
CHANGING cv_retcode = lv_retcode
cv_comp_name = ls_new_form_prop-comp_name
cv_comp_descr = ls_new_form_prop-comp_descr ) .
CHECK lv_retcode IS INITIAL .
CHECK ls_new_form_prop-comp_name IS NOT INITIAL .
*------------ add the new component node into the form buffer
ls_new_form_prop-id =
r_formtemplate->node_add( iv_comp_type = ls_new_form_prop-comp_type
iv_comp_name = ls_new_form_prop-comp_name
iv_comp_descr = ls_new_form_prop-comp_descr
iv_parent_id = lv_form_id_parent
iv_sibling_id = lv_form_id_sibling ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
WHEN OTHERS .
*======================================================================
* WIZARD MODE (create fields via context)
*======================================================================
CASE ls_new_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-field .
IF ls_form_excp-cb_relpath EQ c_retcode-legacy .
MESSAGE s000(lp)
WITH v_text-t127 " text: Firstly, eliminate problems due context
binding
v_text-t021 . " text: on the upper levels
EXIT .
ENDIF .
*------------ add the new component node into the form buffer
ls_new_form_prop-id =
r_formtemplate->node_add( iv_comp_type = ls_new_form_prop-comp_type
iv_comp_name = ls_new_form_prop-comp_name
iv_comp_descr = ls_new_form_prop-comp_descr
iv_parent_id = lv_form_id_parent
iv_sibling_id = lv_form_id_sibling ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
WHEN OTHERS .
* not processing
RETURN .
ENDCASE .
ENDCASE .
ENDMETHOD . "actn_comp_clone
METHOD actn_comp_clone_mass .
msg_init( ) .
DATA:
lv_node_key TYPE lvc_nkey ,
lt_node_key TYPE lvc_t_nkey ,
ls_links TYPE lcl_wb_formtree=>ty_s_links ,
lv_tabix TYPE sy-tabix ,
lv_cancel TYPE flag ,
lv_form_id_new TYPE lcl_form=>ty_s_properties-id ,
lv_alvtree_nkey_tar TYPE lvc_nkey ,
ls_properties_tmp TYPE lcl_form=>ty_s_properties ,
ls_properties_tar TYPE lcl_form=>ty_s_properties ,
ls_properties_src TYPE lcl_form=>ty_s_properties ,
lt_properties_src TYPE lcl_form=>ty_t_properties ,
lv_comp_type_tar TYPE lcl_form=>ty_s_properties-comp_type ,
lv_comp_type_src TYPE lcl_form=>ty_s_properties-comp_type ,
lt_comp_types_tar TYPE ty_t_comp_types ,
ls_comp_types_tar TYPE ty_s_comp_types ,
ls_comp_types_tmp TYPE ty_s_comp_types ,
lt_comp_types_tmp TYPE ty_t_comp_types ,
lv_rename_prefix TYPE sy-tvar1 ,
lv_rename_postfix TYPE sy-tvar2 ,
lv_rename_find TYPE sy-tvar3 ,
lv_rename_peplacement TYPE sy-tvar4 .
*------ check: all selected components must have the same type
LOOP AT lt_node_key INTO lv_node_key .
IF lt_properties_src IS INITIAL .
MESSAGE s000(lp) WITH lcl_root=>v_text-t066 . " text: Select the node
EXIT .
ENDIF .
WHEN 1 .
READ TABLE lt_comp_types_tar INTO ls_comp_types_tar INDEX 1 .
lv_comp_type_tar = ls_comp_types_tar-comp_type .
WHEN OTHERS .
popup_comp_types(
EXPORTING iv_title = v_text-t321 " text: Specify target
parent component
it_comp_types = lt_comp_types_tar
iv_wizard_mode_allow = abap_off
IMPORTING ev_comp_type = lv_comp_type_tar
ev_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
ENDCASE .
lv_alvtree_nkey_tar = ls_links-alvtree_nkey .
*============ CLONING
LOOP AT lt_properties_src INTO ls_properties_src .
ENDMETHOD . "actn_comp_clone_mass
METHOD actn_comp_delete .
msg_init( ) .
ENDMETHOD . "actn_comp_delete
METHOD actn_comp_delete_mass .
msg_init( ) .
DATA:
lv_node_key TYPE lvc_nkey ,
lt_node_key TYPE lvc_t_nkey ,
lt_links_old TYPE lcl_wb_formtree=>ty_t_links ,
ls_links TYPE lcl_wb_formtree=>ty_s_links .
r_formtemplate->node_del( ls_links-form_id ) .
ENDLOOP .
ENDMETHOD . "actn_comp_delete_mass
METHOD actn_comp_tbshift_mass .
msg_init( ) .
DATA:
lv_node_key TYPE lvc_nkey ,
lt_node_key TYPE lvc_t_nkey ,
ls_links TYPE lcl_wb_formtree=>ty_s_links ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_shift_top TYPE i ,
lv_shift_left TYPE i ,
lv_tb_area_top TYPE i ,
lv_tb_area_left TYPE i ,
lv_changed TYPE flag ,
lv_cancel TYPE flag .
IF lv_shift_top IS INITIAL
AND lv_shift_left IS INITIAL .
MESSAGE s000(lp) WITH v_text-t221 . " test: Nothing to change
EXIT .
ENDIF .
CASE ls_form_prop-comp_type .
WHEN r_formtemplate->c_comp_type-root
OR r_formtemplate->c_comp_type-sheet
OR r_formtemplate->c_comp_type-loopstep
OR r_formtemplate->c_comp_type-folder .
CONTINUE .
WHEN OTHERS .
CHECK ls_form_prop-tb_area_rows GT 0 .
CHECK ls_form_prop-tb_area_columns GT 0 .
IF lv_tb_area_top GT 0 .
ls_form_prop-tb_area_top = lv_tb_area_top .
ENDIF .
IF lv_tb_area_left GT 0 .
ls_form_prop-tb_area_left = lv_tb_area_left .
ENDIF .
IF lv_changed IS INITIAL .
MESSAGE s000(lp) WITH v_text-t221 . " test: Nothing to change
EXIT .
ENDIF .
r_formtemplate->check_subtree( ) .
ENDMETHOD . "actn_comp_tbshift_mass
METHOD actn_comp_move_sibling_up .
msg_init( ) .
r_formtemplate->node_move_sibling_up( iv_form_id ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
r_formtemplate->node_move_sibling_down( iv_form_id ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
IF r_formtemplate->v_devclass IS INITIAL .
lv_objid = r_formtemplate->conv_formname_ei( r_formtemplate->v_formname ).
lv_devclass = popup_devclass( iv_objid = lv_objid ) .
ELSE .
lv_devclass = r_formtemplate->v_devclass .
ENDIF.
CHECK lv_devclass IS NOT INITIAL .
IF v_retcode EQ c_retcode-okey .
MESSAGE s000(lp) WITH v_text-t170 . " test: Form has been saved
ELSE .
msg_check_errors_and_show( me ).
ENDIF .
ENDMETHOD . "actn_appl_save
METHOD actn_appl_save_as .
msg_init( ) .
DATA:
lv_cancel TYPE flag ,
lv_formname_new TYPE wwwdatatab-objid .
popup_to_get_value(
EXPORTING iv_title = v_text-t166 " text: Save as...
iv_tabname = 'MASSD_F4_ATT'
iv_fieldname = 'TABNAME'
iv_fieldtext = v_text-t167 " text: New form name
iv_obligatory = abap_on
IMPORTING ev_cancel = lv_cancel
CHANGING cv_value = lv_formname_new ) .
IF lv_formname_new EQ r_formtemplate->v_formname .
MESSAGE i000(lp) WITH v_text-t168 . " text: Specify another form name
EXIT .
ENDIF.
actn_appl_save( ) .
ENDMETHOD . "actn_appl_save_as
METHOD actn_appl_activate .
msg_init( ) .
IF r_formtemplate->v_devclass IS INITIAL .
MESSAGE i000(lp) WITH v_text-t038 . " text: Firstly, save the form
EXIT .
ENDIF .
r_formtemplate->activate( ) .
msg_check_errors_and_show( EXPORTING iv_any = r_formtemplate ) .
r_formtree->free( ) .
FREE r_formtree .
init_formtree( ) .
r_excelole->free( ) .
FREE r_excelole .
init_excelole( ) .
ENDMETHOD . "actn_appl_actualize
METHOD actn_appl_viewmode .
IF r_excelole IS BOUND .
r_excelole->free( ) .
FREE r_excelole .
ENDIF .
CASE v_oletempl_viewmode .
WHEN lcl_wb_ole=>c_viewmode-floating . v_oletempl_viewmode =
lcl_wb_ole=>c_viewmode-inplace .
WHEN lcl_wb_ole=>c_viewmode-inplace . v_oletempl_viewmode =
lcl_wb_ole=>c_viewmode-floating .
ENDCASE .
init_excelole( ) .
ENDMETHOD . "actn_appl_viewmode
METHOD actn_appl_help .
DATA lv_url(30000) TYPE c .
lv_url = iv_url .
CALL FUNCTION 'CALL_BROWSER'
EXPORTING
url = lv_url
EXCEPTIONS
OTHERS = 6.
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF .
ENDMETHOD . "actn_appl_help
METHOD actn_appl_presets .
DATA lv_selected TYPE ty_char1 VALUE '1' .
CLEAR ls_fct .
ls_fct-fieldname = 'PARAMNAME' .
ls_fct-outputlen = 58 .
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'PARAMVALUE' .
ls_fct-outputlen = 10 .
ls_fct-hotspot = abap_on .
ls_fct-just = 'C' .
APPEND ls_fct TO lt_fct .
lv_title = v_text-t284 . " text: Design-time presets
DEFINE mk_add .
assign component &2 of structure s_presets_dt to <field> .
if <field> is assigned .
clear ls_outtab .
ls_outtab-fieldname = &2 .
ls_outtab-paramname = &3 .
if &1 is initial .
ls_outtab-paramvalue = <field> .
else .
ls_outtab-checkboxtype = abap_on .
case <field> .
when space . ls_outtab-paramvalue = icon_wd_iframe .
when others . ls_outtab-paramvalue = icon_checkbox .
endcase .
endif .
append ls_outtab to lt_outtab .
endif .
END-OF-DEFINITION .
DO .
CLEAR lt_outtab .
mk_add:
abap_on 'POPUP_TB' v_text-t208 , " text: Requesting of user
confirmation due template binding change
abap_on 'POPUP_IM' v_text-t103 , " text: Allow to upload an
initial XLSX-template from frontend
abap_on 'MESGTAB_WHEN_ERROR' v_text-t270 , " text: Activate messages tab
when error occurs
abap_on 'DESELECT_CELLS_NO_TB' v_text-t271 . " text: Losing cell range
selection when the component has no template binding
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab ASSIGNING <outtab> INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
CASE ls_outtab-checkboxtype .
WHEN space .
* CASE <outtab>-fieldname .
* WHEN ... .
* popup_to_get_value(
* EXPORTING iv_title = <outtab>-paramname
* iv_tabname = 'ALPDBUIALV'
* iv_fieldname = 'INDEX'
* iv_fieldtext = v_text-t126 " -->> text: Specify new
value
* CHANGING cv_value = <field> ) .
* WHEN OTHERS .
* ENDCASE .
WHEN OTHERS .
CASE <outtab>-paramvalue .
WHEN icon_wd_iframe . <field> = abap_on .
WHEN icon_checkbox . <field> = abap_off .
ENDCASE .
ENDCASE .
ENDDO .
tech_presets_dt_save( ) .
ENDMETHOD . "actn_appl_presets_designtime
METHOD actn_appl_presets_runtime .
TYPES:
BEGIN OF ty_s_outtab ,
checkboxtype TYPE flag ,
fieldname TYPE lvc_fname ,
paramname TYPE uws_service_parameter_name ,
paramvalue TYPE lvc_value ,
END OF ty_s_outtab ,
ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab .
DATA:
lv_title TYPE ty_char100 ,
ls_fct TYPE lvc_s_fcat ,
lt_fct TYPE lvc_t_fcat ,
ls_excl TYPE lvc_s_excl ,
lt_excl TYPE lvc_t_excl ,
ls_selfield TYPE slis_selfield ,
lv_exit TYPE flag ,
lv_selected TYPE ty_char1 ,
ls_outtab TYPE ty_s_outtab ,
lt_outtab TYPE ty_t_outtab .
FIELD-SYMBOLS:
<field> TYPE ANY ,
<outtab> TYPE ty_s_outtab .
CLEAR ls_fct .
ls_fct-fieldname = 'PARAMNAME' .
ls_fct-outputlen = 30 .
APPEND ls_fct TO lt_fct .
CLEAR ls_fct .
ls_fct-fieldname = 'PARAMVALUE' .
ls_fct-outputlen = 30 .
ls_fct-hotspot = abap_on .
ls_fct-just = 'C' .
APPEND ls_fct TO lt_fct .
DEFINE mk_add .
assign component &2 of structure s_presets_rt to <field> .
if <field> is assigned .
clear ls_outtab .
ls_outtab-fieldname = &2 .
ls_outtab-paramname = &3 .
if &1 is initial .
case ls_outtab-fieldname .
when 'POSTPROCESSING_METHOD' .
case <field> .
when c_postprocessing_method-vbs . ls_outtab-paramvalue =
'VBScript' .
when c_postprocessing_method-ole . ls_outtab-paramvalue = 'OLE' .
endcase .
when others .
ls_outtab-paramvalue = <field> .
endcase .
else .
ls_outtab-checkboxtype = abap_on .
case <field> .
when space . ls_outtab-paramvalue = icon_wd_iframe .
when others . ls_outtab-paramvalue = icon_checkbox .
endcase .
endif .
append ls_outtab to lt_outtab .
endif .
END-OF-DEFINITION .
DO .
CLEAR lt_outtab .
mk_add:
abap_off 'POSTPROCESSING_METHOD' v_text-t286 . " text: Method for post
processing
CHECK ls_selfield-tabindex NE 0 .
READ TABLE lt_outtab ASSIGNING <outtab> INDEX ls_selfield-tabindex .
CHECK sy-subrc EQ 0 .
CASE ls_outtab-checkboxtype .
WHEN space .
CASE <outtab>-fieldname .
WHEN 'POSTPROCESSING_METHOD' .
CASE <field> .
WHEN c_postprocessing_method-vbs . lv_selected = '1' .
WHEN c_postprocessing_method-ole . lv_selected = '2' .
ENDCASE .
popup_to_decide( EXPORTING iv_title = v_text-t126 " -->>
text: Specify new value
iv_text = v_text-t286 " -->>
text: Method for post processing
iv_text_rb1 = 'VBScript'
iv_text_rb2 = 'OLE'
CHANGING cv_selected_rb = lv_selected ) .
CASE lv_selected .
WHEN '1' . <field> = c_postprocessing_method-vbs .
WHEN '2' . <field> = c_postprocessing_method-ole .
ENDCASE .
WHEN OTHERS .
ENDCASE .
WHEN OTHERS .
CASE <outtab>-paramvalue .
WHEN icon_wd_iframe . <field> = abap_on .
WHEN icon_checkbox . <field> = abap_off .
ENDCASE .
ENDCASE .
ENDDO .
tech_presets_rt_save( ) .
ENDMETHOD . "actn_appl_presets_runtime
METHOD actn_appl_close_template .
msg_init( ) .
actn_appl_viewmode( ) .
r_formtemplate->check_subtree( ) .
ENDMETHOD . "actn_appl_close_template
METHOD actn_appl_mass_processing .
msg_init( ) .
CASE v_mass_processing .
WHEN space .
v_mass_processing = abap_on .
r_protab->redraw_dummy( iv_text = v_text-t214 " -->> text: Mass
processing
iv_icon = icon_segmented_data_act ) .
WHEN OTHERS .
v_mass_processing = abap_off .
r_protab->redraw( ir_formtemplate = r_formtemplate
iv_form_id = r_formtemplate->v_root_id
iv_activetab_id = r_protab->c_tab_id-root ) .
ENDCASE .
r_formtree->free( ) .
FREE r_formtree .
init_formtree( ) .
r_appltoolbar->free( ) .
FREE r_appltoolbar .
init_appltoolbar( ) .
ENDMETHOD . "actn_appl_mass_processing
METHOD actn_compname_change .
msg_init( ) .
DATA:
lv_retcode TYPE ty_char1 ,
ls_form_prop TYPE lcl_form=>ty_s_properties .
ENDMETHOD . "actn_compname_change
METHOD actn_context_change .
msg_init( ) .
ls_fields-tabname = 'MASSD_F4_ATT' .
ls_fields-fieldname = 'TABNAME' .
CONCATENATE icon_bom_item v_text-t123 " text: context
INTO ls_fields-fieldtext
SEPARATED BY space .
ls_fields-field_obl = abap_on .
IF r_formtemplate->r_context IS BOUND .
ls_fields-value = r_formtemplate->r_context->v_contextname .
ENDIF .
APPEND ls_fields TO lt_fields .
lv_ok_icon = icon_checked .
lv_ok_quickinfo = v_text-t106 . " text: Continue
r_formtree->free( ) .
FREE r_formtree .
init_formtree( ) .
ENDIF .
lv_formdescr = r_formtemplate->v_formdescr .
popup_to_get_value(
EXPORTING iv_title = v_text-t126 " text: Specify new value
iv_tabname = 'WWWDATATAB'
iv_fieldname = 'TEXT'
iv_fieldtext = v_text-t075 " text: Form description
IMPORTING ev_cancel = lv_cancel
CHANGING cv_value = lv_formdescr ) .
CASE r_formtemplate->r_exceltemplate->v_extension .
WHEN c_extension_xlsx . lv_selected = '1' .
WHEN c_extension_xlsm . lv_selected = '2' .
ENDCASE .
popup_to_decide( EXPORTING iv_title = v_text-t327 " -->>
text: File format
iv_text = v_text-t327 " -->>
text: File format
iv_text_rb1 = v_text-t328 " -->>
text: Without VBA-macro .XLSX
iv_text_rb2 = v_text-t329 " -->>
text: VBA-macro-enabled .XLSM
CHANGING cv_selected_rb = lv_selected ) .
CASE lv_selected .
WHEN '1' . lv_extension = c_extension_xlsx .
WHEN '2' . lv_extension = c_extension_xlsm .
WHEN 'A' . RETURN .
ENDCASE .
DATA:
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_2fieldtext TYPE ty_char100 ,
lv_cancel TYPE flag .
CASE ls_form_prop-comp_type .
WHEN r_formtemplate->c_comp_type-loopstep .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
popup_to_get_value(
EXPORTING iv_title = v_text-t261 " text: Row processing
iv_tabname = 'SYST'
iv_fieldname = 'INDEX'
iv_fieldtext = v_text-t264 " text: from
iv_obligatory = abap_on
iv_2tabname = 'SYST'
iv_2fieldname = 'TABIX'
iv_2fieldtext = lv_2fieldtext
IMPORTING ev_cancel = lv_cancel
CHANGING cv_value = ls_form_prop-cb_loop_from
cv_2value = ls_form_prop-cb_loop_to ) .
ENDMETHOD . "actn_cb_loop_from_to
METHOD actn_cb_relpath_change .
msg_init( ) .
DATA:
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_form_prop_parent TYPE lcl_form=>ty_s_properties ,
lv_f4_strategy TYPE i ,
lv_cancel TYPE flag ,
lv_cb_fullpath_parent TYPE ty_comp_path .
CASE ls_form_prop-comp_type .
WHEN r_formtemplate->c_comp_type-loopstep .
lv_f4_strategy = r_formtemplate->r_context->c_f4_strategy-loopstep .
WHEN r_formtemplate->c_comp_type-folder .
lv_f4_strategy = r_formtemplate->r_context->c_f4_strategy-folder .
WHEN OTHERS .
EXIT .
ENDCASE .
ENDMETHOD . "actn_cb_relpath_change
METHOD actn_cb_relpath_delete .
msg_init( ) .
ENDMETHOD . "actn_cb_relpath_delete
METHOD actn_cb_apr_relpath_change .
msg_init( ) .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_cancel TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path .
IF ls_form_prop-cb_apr_relpath IS INITIAL .
CLEAR: ls_form_prop-cb_apr_offset ,
ls_form_prop-cb_apr_match .
ELSE .
ls_ctxt_prop =
r_formtemplate->r_context->node_get_by_path(
iv_relpath = ls_form_prop-cb_apr_relpath
iv_fullpath_parent = lv_cb_fullpath ) .
IF ls_ctxt_prop-type_kind EQ cl_abap_typedescr=>typekind_char
AND ls_ctxt_prop-type_length GT 1 .
*------------ popup-dialog to request a character position of a value
popup_charpos( EXPORTING iv_length = ls_ctxt_prop-type_length
CHANGING cv_offset = ls_form_prop-cb_apr_offset
cv_match = ls_form_prop-cb_apr_match ) .
ELSE .
CLEAR: ls_form_prop-cb_apr_offset ,
ls_form_prop-cb_apr_match .
ENDIF .
ENDIF .
ENDMETHOD . "actn_cb_apr_relpath_change
METHOD actn_cb_val_vld_change .
msg_init( ) .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_cancel TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path .
CASE abap_on .
WHEN iv_attrpath_f4
OR iv_attrpath_mn .
*------------ popup-dialog to request a new context binding
popup_ctxtfield(
EXPORTING iv_cb_fullpath_parent = lv_cb_fullpath
iv_f4_strategy = r_formtemplate->r_context->c_f4_strategy-
loopstep
iv_manual = iv_attrpath_mn
CHANGING cv_cb_relpath = ls_form_prop-cb_valvld_attr_relpath
cv_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
WHEN iv_attrpath_del .
*------------ request a user confirmation
CHECK abap_on EQ popup_to_confirm( iv_text = v_text-t128 ) . " text:
Removing the binding
ls_form_prop-cb_valvld_attr_relpath = space .
WHEN iv_for1_template .
CHECK ls_form_prop-cb_valvld_for1_relpath IS NOT INITIAL
OR ls_form_prop-cb_valvld_for1_dataset_id IS NOT INITIAL .
*------------ request a user confirmation
CHECK abap_on EQ popup_to_confirm( iv_text = v_text-t128 ) . " text:
Removing the binding
ls_form_prop-cb_valvld_for1_relpath = space .
ls_form_prop-cb_valvld_for1_dataset_id = space .
ls_form_prop-cb_valvld_for1_dataset_fld = space .
WHEN iv_for1_relpath .
*------------ popup-dialog to request a new context binding
popup_ctxtfield(
EXPORTING iv_cb_fullpath_parent = lv_cb_fullpath
iv_f4_strategy = r_formtemplate->r_context->c_f4_strategy-
apr_relpath
iv_manual = space
CHANGING cv_cb_relpath = ls_form_prop-cb_valvld_for1_relpath
cv_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
CHECK ls_form_prop-cb_valvld_for1_relpath IS NOT INITIAL .
ls_form_prop-cb_valvld_for1_dataset_id = space .
ls_form_prop-cb_valvld_for1_dataset_fld = space .
WHEN iv_for1_dataset_id .
*------------ popup-dialog to request dataset (Grid)
popup_dataset_id( EXPORTING iv_id = ls_form_prop-id
iv_same_sheet = abap_on
CHANGING cv_dataset_id = ls_form_prop-
cb_valvld_for1_dataset_id ) .
CHECK ls_form_prop-cb_valvld_for1_dataset_id IS NOT INITIAL .
ls_form_prop-cb_valvld_for1_relpath = space .
WHEN iv_for1_dataset_fld .
CHECK ls_form_prop-cb_valvld_for1_dataset_id IS NOT INITIAL .
*------------ popup-dialog to request field of dataset (Grid)
popup_dataset_field( EXPORTING iv_dataset_id = ls_form_prop-
cb_valvld_for1_dataset_id
CHANGING cv_fieldname = ls_form_prop-
cb_valvld_for1_dataset_fld ) .
WHEN iv_for2_template .
CHECK ls_form_prop-cb_valvld_for2_relpath IS NOT INITIAL .
*------------ request a user confirmation
CHECK abap_on EQ popup_to_confirm( iv_text = v_text-t128 ) . " text:
Removing the binding
ls_form_prop-cb_valvld_for2_relpath = space .
WHEN iv_for2_relpath .
*------------ popup-dialog to request a new context binding
popup_ctxtfield(
EXPORTING iv_cb_fullpath_parent = lv_cb_fullpath
iv_f4_strategy = r_formtemplate->r_context->c_f4_strategy-
apr_relpath
iv_manual = space
CHANGING cv_cb_relpath = ls_form_prop-cb_valvld_for2_relpath
cv_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
CHECK ls_form_prop-cb_valvld_for2_relpath IS NOT INITIAL .
WHEN OTHERS .
RETURN .
ENDCASE .
ENDMETHOD . "actn_cb_val_vld_change
METHOD actn_cb_apr_relpath_delete .
msg_init( ) .
ENDMETHOD . "actn_cb_apr_relpath_delete
METHOD actn_cb_cellrng_relpth_change .
msg_init( ) .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_cancel TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path .
IF ls_form_prop-cb_cellrng_relpath IS INITIAL .
CLEAR: ls_form_prop-cb_cellrng_offset ,
ls_form_prop-cb_cellrng_match .
ELSE .
ls_ctxt_prop =
r_formtemplate->r_context->node_get_by_path(
iv_relpath = ls_form_prop-cb_cellrng_relpath
iv_fullpath_parent = lv_cb_fullpath ) .
IF ls_ctxt_prop-type_kind EQ cl_abap_typedescr=>typekind_char
AND ls_ctxt_prop-type_length GT 1 .
*------------ popup-dialog to request a character position of a value
popup_charpos( EXPORTING iv_length = ls_ctxt_prop-type_length
CHANGING cv_offset = ls_form_prop-cb_cellrng_offset
cv_match = ls_form_prop-cb_cellrng_match ) .
ELSE .
CLEAR: ls_form_prop-cb_cellrng_offset ,
ls_form_prop-cb_cellrng_match .
ENDIF .
ENDIF .
ENDMETHOD . "actn_cb_cellrng_relpth_change
METHOD actn_cb_cellrng_relpth_delete .
msg_init( ) .
ENDMETHOD . "actn_cb_cellrng_relpth_delete
METHOD actn_cb_val_relpath_change .
msg_init( ) .
DATA:
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
ls_ctxt_prop_sub TYPE lcl_context=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_cancel TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path ,
lv_cb_comp_type TYPE ty_comp_type ,
lv_f4_strategy TYPE i .
*======================================================================
* relative path
*======================================================================
IF iv_relpath_f4 IS NOT INITIAL
OR iv_relpath_mn IS NOT INITIAL .
CASE ls_form_prop-comp_type .
WHEN r_formtemplate->c_comp_type-tree . lv_f4_strategy =
r_formtemplate->r_context->c_f4_strategy-tree .
WHEN r_formtemplate->c_comp_type-grid . lv_f4_strategy =
r_formtemplate->r_context->c_f4_strategy-grid .
WHEN OTHERS . lv_f4_strategy =
r_formtemplate->r_context->c_f4_strategy-value .
ENDCASE .
IF lv_cb_comp_type EQ r_formtemplate->r_context->c_comp_type-table
AND ls_form_prop-comp_type NE r_formtemplate->c_comp_type-tree
AND ls_form_prop-comp_type NE r_formtemplate->c_comp_type-grid .
popup_ctxtfield_sub(
EXPORTING iv_cb_fullpath_parent = lv_cb_fullpath
iv_cb_relpath = ls_form_prop-cb_val_relpath
CHANGING cv_cb_val_sub_col = ls_form_prop-cb_val_sub_col
cv_cb_val_sub_row = ls_form_prop-cb_val_sub_row
cs_ctxt_prop = ls_ctxt_prop_sub
cv_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
ENDIF .
ENDIF .
DO 1 TIMES .
CHECK ls_form_prop-comp_type NE r_formtemplate->c_comp_type-tree .
CHECK ls_form_prop-comp_type NE r_formtemplate->c_comp_type-grid .
*======================================================================
* context properties
*======================================================================
IF ls_form_prop-cb_val_relpath IS INITIAL .
CLEAR: ls_form_prop-cb_val_offset ,
ls_form_prop-cb_val_match ,
ls_form_prop-cb_val_convert ,
ls_form_prop-cb_val_sub_req ,
ls_form_prop-cb_val_sub_row ,
ls_form_prop-cb_val_sub_col .
ELSE .
ls_ctxt_prop =
r_formtemplate->r_context->node_get_by_path(
iv_relpath = ls_form_prop-cb_val_relpath
iv_fullpath_parent = lv_cb_fullpath ) .
ENDIF .
*======================================================================
* sub
*======================================================================
IF ls_ctxt_prop-comp_type EQ r_formtemplate->r_context->c_comp_type-table .
ls_ctxt_prop_sub =
r_formtemplate->get_sub_ctxt( iv_cb_fullpath = lv_cb_fullpath
is_form_prop = ls_form_prop ) .
*======================================================================
* character position of a value
*======================================================================
CHECK ls_form_prop-comp_type NE r_formtemplate->c_comp_type-drawing .
IF ls_ctxt_prop-type_kind EQ cl_abap_typedescr=>typekind_char
AND ls_ctxt_prop-type_length GT 1 .
IF iv_charpos IS NOT INITIAL .
*------------ popup-dialog to request a character position of a value
popup_charpos( EXPORTING iv_length = ls_ctxt_prop-type_length
CHANGING cv_offset = ls_form_prop-cb_val_offset
cv_match = ls_form_prop-cb_val_match
cv_cancel = lv_cancel ) .
IF lv_cancel IS NOT INITIAL .
RETURN .
ENDIF .
ENDIF .
*======================================================================
* convertion
*======================================================================
IF iv_convertion IS NOT INITIAL .
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-field
OR lcl_form=>c_comp_type-sheet .
CASE ls_form_prop-cb_val_convert .
WHEN space . ls_form_prop-cb_val_convert = abap_on .
WHEN OTHERS . ls_form_prop-cb_val_convert = abap_off .
ENDCASE .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is
irrelevant for component type
EXIT .
ENDCASE .
ENDIF .
ENDDO .
*======================================================================
* update
*======================================================================
*------------ update properties
r_formtemplate->node_set_properties( CHANGING cs_properties = ls_form_prop ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
ENDMETHOD . "actn_cb_val_relpath_change
METHOD actn_cb_val_relpath_delete .
msg_init( ) .
ENDMETHOD . "actn_cb_val_relpath_delete
METHOD actn_tb_val_layout_change .
msg_init( ) .
DATA ls_form_prop TYPE lcl_form=>ty_s_properties .
DATA lv_cancel TYPE flag .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-field .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-sheet .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-sheet .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-sheet .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
DATA:
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_cancel TYPE flag ,
lv_selected TYPE ty_char1 ,
lv_password TYPE string ,
lv_cb_fullpath TYPE ty_comp_path ,
ls_sheetprotection TYPE lcl_form=>ty_s_sheetprotection .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-sheet .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
CASE abap_on .
WHEN iv_change .
CASE ls_sheetprotection-mode .
WHEN c_sheetprotection_mode-off . lv_selected = '3' .
WHEN c_sheetprotection_mode-from_template . lv_selected = '1' .
WHEN c_sheetprotection_mode-from_context . lv_selected = '2' .
WHEN c_sheetprotection_mode-static . lv_selected = '3' .
WHEN OTHERS . RETURN .
ENDCASE .
popup_to_decide( EXPORTING iv_title = v_text-t298 "
-->> text: Sheet protection
iv_text = v_text-t298 "
-->> text: Sheet protection
iv_text_rb1 = v_text-t299 "
-->> text: From template
iv_text_rb2 = v_text-t300 "
-->> text: From context
iv_text_rb3 = v_text-t301 "
-->> text: Static
IMPORTING ev_cancel = lv_cancel
CHANGING cv_selected_rb = lv_selected ) .
CASE lv_selected .
WHEN '1' . ls_sheetprotection-mode = c_sheetprotection_mode-from_template
.
WHEN '2' . ls_sheetprotection-mode = c_sheetprotection_mode-
from_context .
WHEN '3' . ls_sheetprotection-mode = c_sheetprotection_mode-static .
ENDCASE .
WHEN iv_delete .
ls_sheetprotection-mode = c_sheetprotection_mode-off .
ENDCASE .
popup_sheetprotection_password(
IMPORTING ev_cancel = lv_cancel
CHANGING cv_password = ls_sheetprotection-password ) .
ENDCASE .
WHEN c_sheetprotection_mode-from_template .
CLEAR ls_sheetprotection .
ls_sheetprotection-mode = c_sheetprotection_mode-from_template.
WHEN c_sheetprotection_mode-from_context .
lv_cb_fullpath = ls_sheetprotection-cb_val_relpath .
lv_password = ls_sheetprotection-password .
CLEAR ls_sheetprotection .
ls_sheetprotection-cb_val_relpath = lv_cb_fullpath .
ls_sheetprotection-mode = c_sheetprotection_mode-from_context .
ls_sheetprotection-password = lv_password .
WHEN c_sheetprotection_mode-static .
CLEAR ls_sheetprotection-cb_val_relpath .
ls_sheetprotection-mode = c_sheetprotection_mode-static .
popup_sheetprotection_static(
IMPORTING ev_cancel = lv_cancel
CHANGING cs_sheetprotection = ls_sheetprotection ) .
ENDCASE .
DATA:
lv_tb_sheetname_legacy TYPE ty_char31 ,
lv_tb_sheetname_current TYPE ty_char31 ,
ls_form_expt TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties .
DATA:
lv_retcode TYPE flag ,
ls_form_expt TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties .
ENDMETHOD . "actn_tb_area_delete
METHOD actn_tb_direction_change .
msg_init( ).
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
CASE ls_form_prop-tb_direction .
WHEN lcl_form=>c_tb_direction-up2down .
ls_form_prop-tb_direction = lcl_form=>c_tb_direction-left2right .
WHEN lcl_form=>c_tb_direction-left2right .
ls_form_prop-tb_direction = lcl_form=>c_tb_direction-up2down .
ENDCASE .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
ENDMETHOD . "actn_tb_direction_change
METHOD actn_tb_colrow_prop_change .
msg_init( ).
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-pattern
OR lcl_form=>c_comp_type-respattern .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ set new property
IF iv_rows IS NOT INITIAL .
CASE ls_form_prop-tb_rowprop .
WHEN space . ls_form_prop-tb_rowprop = abap_on .
WHEN OTHERS . ls_form_prop-tb_rowprop = abap_off .
ENDCASE .
ENDMETHOD . "actn_tb_colrow_prop_change
METHOD actn_tb_colrow_group_change .
msg_init( ).
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-folder .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
ENDMETHOD . "actn_tb_colrow_group_change
METHOD actn_tb_drwstatflag_change .
msg_init( ).
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
ENDMETHOD . "actn_tb_drwstatflag_change
METHOD actn_tb_drwstatname_change .
msg_init( ) .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
lv_tb_sheetname TYPE ty_char31 .
IF ls_form_prop-tb_drwstat_flag IS INITIAL .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant for
component type
EXIT .
ENDIF .
*=======================================
IF iv_change IS NOT INITIAL .
*=======================================
r_formtemplate->node_get_legacy_info(
EXPORTING iv_id = iv_form_id
IMPORTING ev_tb_sheetname = lv_tb_sheetname
es_exceptions = ls_form_excp ) .
IF lv_tb_sheetname IS INITIAL
OR ls_form_excp-tb_sheetname EQ c_retcode-error
OR ls_form_excp-tb_sheetname EQ c_retcode-legacy .
MESSAGE i000(lp)
WITH v_text-t026 " text: problem occurs with component
v_text-t008 " text: Sheet
v_text-t021 INTO v_dummy . " text: on the upper levels
EXIT .
ENDIF .
*=======================================
ELSEIF iv_delete IS NOT INITIAL .
*=======================================
CHECK ls_form_prop-tb_drwstat_name IS NOT INITIAL .
CHECK abap_on EQ popup_to_confirm( iv_text = v_text-t128 ) . " text:
Removing the binding
CLEAR ls_form_prop-tb_drwstat_name .
ENDIF .
DATA:
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_cancel TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-drawing
OR lcl_form=>c_comp_type-chart .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
CASE abap_on .
WHEN iv_context
OR iv_h_f4
OR iv_h_mn
OR iv_w_f4
OR iv_w_mn .
IF ls_form_excp-cb_relpath EQ c_retcode-legacy .
MESSAGE s000(lp)
WITH v_text-t127 " text: Firstly, eliminate problems due context
binding
v_text-t021 . " text: on the upper levels
EXIT .
ENDIF .
ENDCASE .
*------------ process
CASE abap_on .
WHEN iv_fit .
ls_form_prop-drawing_size = lcl_form=>c_drawing_size-fit_within_area .
ls_form_prop-drawing_size_h_relpath = space .
ls_form_prop-drawing_size_w_relpath = space .
WHEN iv_context .
ls_form_prop-drawing_size = lcl_form=>c_drawing_size-from_context .
WHEN iv_h_f4
OR iv_h_mn .
WHEN iv_w_f4
OR iv_w_mn .
ENDMETHOD . "actn_tb_drwsize_change
METHOD actn_tb_pgbreak .
msg_init( ) .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
*------------ read an actual node
ls_form_prop = r_formtemplate->node_get_properties( iv_form_id ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-folder .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ process
IF iv_nopgbreak IS INITIAL .
*------------ Insert page break (at the beginning)
IF iv_top IS NOT INITIAL .
CASE ls_form_prop-tb_pgbrk_top .
WHEN space . ls_form_prop-tb_pgbrk_top = abap_on .
WHEN OTHERS. ls_form_prop-tb_pgbrk_top = abap_off .
ENDCASE .
ELSE .
*------------ Preventing automatic page breaks (inside)
IF iv_top IS NOT INITIAL .
IF ls_form_prop-tb_nopgbrk_top IS INITIAL .
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = v_text-t105 " text: Notice!
txt2 = v_text-t157 " text: This option will be implemented via
OLE on FrontEnd
txt1 = space.
ls_form_prop-tb_nopgbrk_top = abap_on .
ENDIF .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_tb_sheetname TYPE ty_char31 .
*------------ process
r_formtemplate->node_get_legacy_info(
EXPORTING iv_id = iv_form_id
IMPORTING ev_tb_sheetname = lv_tb_sheetname ) .
CHECK lv_tb_sheetname IS NOT INITIAL .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
CASE ls_form_prop-tb_mergecells .
WHEN lcl_form=>c_tb_mergecells-rows .
ls_form_prop-tb_mergecells = lcl_form=>c_tb_mergecells-cols .
WHEN lcl_form=>c_tb_mergecells-cols .
ls_form_prop-tb_mergecells = lcl_form=>c_tb_mergecells-rows .
ENDCASE .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
ENDMETHOD . "actn_tb_mergecells_change
METHOD actn_tb_autofitmerged_change .
msg_init( ).
DATA ls_form_prop TYPE lcl_form=>ty_s_properties .
IF ls_form_prop-tb_autofitmerged_r IS INITIAL
AND ls_form_prop-tb_autofitmerged_c IS INITIAL
AND ( iv_rows IS NOT INITIAL OR iv_cols IS NOT INITIAL ) .
popup_postprocessing_info( ) .
ENDIF .
ls_form_prop-tb_autofitmerged_r = iv_rows .
ls_form_prop-tb_autofitmerged_c = iv_cols .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
ENDMETHOD . "actn_tb_autofitmerged_change
METHOD actn_tb_respattern_place .
msg_init( ).
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ update properties
r_formtemplate->node_set_properties( CHANGING cs_properties = ls_form_prop ) .
CHECK msg_check_errors_and_show( r_formtemplate ) IS INITIAL .
ENDMETHOD . "actn_tb_respattern_place
METHOD actn_tree_layout_change .
msg_init( ).
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_ctxt_prop TYPE lcl_context=>ty_s_properties ,
lv_cb_fullpath TYPE ty_comp_path ,
ls_tree_layout TYPE ty_s_tree_layout .
ls_ctxt_prop =
r_formtemplate->r_context->node_get_by_path(
iv_relpath = ls_form_prop-cb_val_relpath
iv_fullpath_parent = lv_cb_fullpath ) .
ENDIF .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-tree .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ process
lcl_form=>conv_container_fs(
EXPORTING iv_field = ls_form_prop-tree_layout
IMPORTING es_structure = ls_tree_layout ) .
popup_to_get_value(
EXPORTING iv_title = v_text-t126 " -->> text: Specify new value
iv_tabname = 'ALPDBUIALV'
iv_fieldname = 'INDEX'
iv_fieldtext = v_text-t191 " -->> text: shift
CHANGING cv_value = ls_tree_layout-col_hier_shift ) .
popup_to_get_value(
EXPORTING iv_title = v_text-t126 " -->> text: Specify new value
iv_tabname = 'ALPDBUIALV'
iv_fieldname = 'INDEX'
iv_fieldtext = v_text-t202 " -->> text: multiplier
CHANGING cv_value = ls_tree_layout-col_othr_width ) .
IF ls_tree_layout-col_othr_width IS INITIAL .
MESSAGE s000(lp) WITH v_text-t100 . " text: Operation was
terminated by the user
EXIT .
ENDIF .
ELSE .
ls_tree_layout-col_othr_width = 0 .
ENDIF .
lcl_form=>conv_container_sf(
EXPORTING is_structure = ls_tree_layout
IMPORTING ev_field = ls_form_prop-tree_layout ) .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_grid_layout TYPE ty_s_grid_layout .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-grid .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ process
lcl_form=>conv_container_fs(
EXPORTING iv_field = ls_form_prop-grid_layout
IMPORTING es_structure = ls_grid_layout ) .
lcl_form=>conv_container_sf(
EXPORTING is_structure = ls_grid_layout
IMPORTING ev_field = ls_form_prop-grid_layout ) .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
ls_form_excp TYPE lcl_form=>ty_s_exceptions ,
lv_cancel TYPE flag ,
lv_cb_fullpath TYPE ty_comp_path .
*------------ checks
CASE ls_form_prop-comp_type .
WHEN lcl_form=>c_comp_type-chart .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
*------------ process
IF iv_model_change IS NOT INITIAL .
actn_tb_drwstatname_change( iv_alvtree_nkey = iv_alvtree_nkey
iv_form_id = iv_form_id
iv_change = abap_on ) .
EXIT .
popup_ctxtfield(
EXPORTING iv_cb_fullpath_parent = lv_cb_fullpath
iv_f4_strategy = r_formtemplate->r_context-
>c_f4_strategy-apr_relpath
CHANGING cv_cb_relpath = ls_form_prop-chart_title_relpath
cv_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
CHECK ls_form_prop-chart_title_relpath IS NOT INITIAL .
ls_form_prop-chart_title = abap_on .
WHEN OTHERS .
ls_form_prop-chart_title = abap_off .
ENDCASE .
WHEN '1' .
IF ls_form_excp-cb_relpath EQ c_retcode-legacy .
MESSAGE s000(lp)
WITH v_text-t127 " text: Firstly, eliminate problems due context
binding
v_text-t021 . " text: on the upper levels
EXIT .
ENDIF .
" get a full path of context binding
r_formtemplate->node_get_legacy_info(
EXPORTING iv_id = iv_form_id
IMPORTING ev_cb_fullpath = lv_cb_fullpath ) .
popup_ctxtfield(
EXPORTING iv_cb_fullpath_parent = lv_cb_fullpath
iv_f4_strategy = r_formtemplate->r_context-
>c_f4_strategy-apr_relpath
CHANGING cv_cb_relpath = ls_form_prop-
chart_catax_title_relpath
cv_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
CHECK ls_form_prop-chart_catax_title_relpath IS NOT INITIAL .
ls_form_prop-chart_catax_title = abap_on .
WHEN OTHERS .
ls_form_prop-chart_catax_title = abap_off .
ENDCASE .
popup_ctxtfield(
EXPORTING iv_cb_fullpath_parent = lv_cb_fullpath
iv_f4_strategy = r_formtemplate->r_context-
>c_f4_strategy-apr_relpath
CHANGING cv_cb_relpath = ls_form_prop-
chart_valax_title_relpath
cv_cancel = lv_cancel ) .
CHECK lv_cancel IS INITIAL .
CHECK ls_form_prop-chart_valax_title_relpath IS NOT INITIAL .
ls_form_prop-chart_valax_title = abap_on .
WHEN OTHERS .
ls_form_prop-chart_valax_title = abap_off .
ENDCASE .
ELSE .
EXIT .
ENDIF .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
CASE ls_form_prop-draft_subtree .
WHEN space . ls_form_prop-draft_subtree = abap_on .
WHEN OTHERS . ls_form_prop-draft_subtree = space .
ENDCASE .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
ENDMETHOD . "actn_draft_change
METHOD actn_postproccessing .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties ,
lv_cancel TYPE flag .
*------------ checks
CASE iv_form_id .
WHEN r_formtemplate->v_root_id .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
CASE abap_on .
WHEN iv_vbs_code . popup_vbs_code_editor( CHANGING cv_vbs_code =
ls_form_prop-postproc_vbs_code cv_cancel = lv_cancel ) .
WHEN iv_vbs_tables . popup_vbs_tables( CHANGING cv_vbs_tables = ls_form_prop-
postproc_vbs_tables cv_cancel = lv_cancel ) .
WHEN OTHERS . RETURN .
ENDCASE .
CHECK lv_cancel IS INITIAL .
ENDMETHOD . "actn_postproccessing
METHOD actn_root_others .
DATA:
ls_form_prop TYPE lcl_form=>ty_s_properties .
*------------ checks
CASE iv_form_id .
WHEN r_formtemplate->v_root_id .
WHEN OTHERS .
MESSAGE i000(lp) WITH v_text-t130 . " text: The property is irrelevant
for component type
EXIT .
ENDCASE .
CASE abap_on .
WHEN iv_definednames_dont_remove .
CASE ls_form_prop-definednames_dont_remove .
WHEN space .
CHECK abap_on EQ popup_to_confirm( iv_text = v_text-t345 ) . " text:
Changing of this option can cause file error
ls_form_prop-definednames_dont_remove = abap_on .
WHEN OTHERS .
ls_form_prop-definednames_dont_remove = abap_off .
ENDCASE .
WHEN OTHERS .
ENDCASE .
ENDMETHOD . "actn_root_others
METHOD tech_presets_dt_save .
* initialize extract parameters
DATA ls_disextract TYPE disextract .
ls_disextract = tech_presets_dt_init( ) .
ls_fldval-field = <components>-name .
ls_fldval-value = <value> .
APPEND ls_fldval TO lt_fldval .
ENDLOOP .
ls_fldval-field = <components>-name .
ls_fldval-value = <value> .
APPEND ls_fldval TO lt_fldval .
ENDLOOP .
METHODS:
constructor
IMPORTING iv_navi_keys TYPE flag DEFAULT abap_on ,
free ,
hndl_toolbar_fcode
FOR EVENT function_selected OF cl_gui_toolbar
IMPORTING fcode .
ENDCLASS . "lcl_vr_appltoolbar DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_vr_appltoolbar IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_vr_appltoolbar IMPLEMENTATION .
METHOD constructor .
super->constructor( ) .
DATA:
lv_repid TYPE syrepid ,
lv_dynnr TYPE sydynnr ,
lv_text TYPE text100 ,
ls_events TYPE cntl_simple_event ,
lt_events TYPE cntl_simple_events .
lv_repid = sy-repid .
lv_dynnr = sy-dynnr .
ls_events-eventid = cl_gui_toolbar=>m_id_function_selected .
APPEND ls_events TO lt_events .
ENDMETHOD . "constructor
METHOD free .
IF r_toolbar IS BOUND .
r_toolbar->free( ) .
FREE r_toolbar .
ENDIF .
IF r_container IS BOUND .
r_container->free( ) .
FREE r_container .
ENDIF .
ENDMETHOD . "free
METHOD hndl_toolbar_fcode .
RAISE EVENT evnt_fcode EXPORTING ev_fcode = fcode .
ENDMETHOD . "hndl_toolbar_fcode
ENDCLASS . "lcl_vr_appltoolbar IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_vr_ole DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_vr_ole DEFINITION INHERITING FROM lcl_ole .
PUBLIC SECTION .
METHODS:
constructor
IMPORTING ir_container TYPE REF TO cl_gui_container
iv_document_rawdata TYPE xstring
iv_viewmode TYPE flag
EXCEPTIONS process_terminated .
ENDCLASS . "lcl_vr_ole DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_vr_ole IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_vr_ole IMPLEMENTATION .
METHOD constructor .
super->constructor(
EXPORTING ir_container = ir_container
iv_document_rawdata = iv_document_rawdata
iv_viewmode = iv_viewmode
iv_readonly = abap_on " -->> abap_off
EXCEPTIONS OTHERS = 1 ) .
IF sy-subrc NE 0 .
RAISE process_terminated .
ENDIF .
*----------------------------------------------------------------------*
* CLASS lcl_vr_navipanel DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_vr_navipanel DEFINITION INHERITING FROM lcl_root .
PUBLIC SECTION .
TYPES:
BEGIN OF ty_s_outtab ,
tabix TYPE sytabix ,
title TYPE sytitle ,
icon TYPE icon_d ,
END OF ty_s_outtab ,
ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab .
DATA:
r_container TYPE REF TO cl_gui_docking_container ,
r_grid TYPE REF TO cl_gui_alv_grid ,
t_outtab TYPE ty_t_outtab .
METHODS:
constructor
IMPORTING it_table TYPE STANDARD TABLE
EXCEPTIONS process_terminamed ,
free ,
set_selection
IMPORTING iv_tabix TYPE any .
EVENTS:
evnt_redraw
EXPORTING value(ev_tabix) TYPE sytabix .
PRIVATE SECTION .
METHODS:
hndl_grid_hotspot
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no .
DATA:
ls_fieldcat TYPE lvc_s_fcat ,
lt_fieldcat TYPE lvc_t_fcat ,
ls_layout TYPE lvc_s_layo .
FIELD-SYMBOLS:
<row> TYPE ANY ,
<outtab> TYPE ty_s_outtab .
ls_layout-sel_mode = 'A' .
ls_layout-zebra = abap_on .
ls_layout-col_opt = abap_on .
ls_layout-cwidth_opt = abap_on .
ls_layout-no_rowmark = abap_on .
ls_layout-no_toolbar = abap_on .
ls_layout-no_headers = abap_on .
ls_layout-no_hgridln = abap_on .
ls_layout-no_vgridln = abap_on .
ls_fieldcat-icon = abap_on .
ls_fieldcat-fieldname = 'ICON' .
APPEND ls_fieldcat TO lt_fieldcat .
CLEAR ls_fieldcat .
ls_fieldcat-fieldname = 'TITLE' .
ls_fieldcat-hotspot = abap_on .
APPEND ls_fieldcat TO lt_fieldcat .
r_grid->set_table_for_first_display(
EXPORTING i_default = abap_on
is_layout = ls_layout
CHANGING it_fieldcatalog = lt_fieldcat[]
it_outtab = t_outtab[]
EXCEPTIONS OTHERS = 4 ) .
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
RAISING process_terminamed .
ENDIF .
SET HANDLER hndl_grid_hotspot FOR r_grid .
ENDMETHOD . "constructor
METHOD free .
IF r_grid IS BOUND .
r_grid->free( ) .
FREE r_grid .
ENDIF .
ENDMETHOD . "free
METHOD set_selection .
DATA:
ls_rows TYPE lvc_s_row ,
lt_rows TYPE lvc_t_row .
ls_rows-index = sy-tabix .
INSERT ls_rows INTO TABLE lt_rows .
*----------------------------------------------------------------------*
* CLASS lcl_viewer DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_viewer DEFINITION INHERITING FROM lcl_root .
PUBLIC SECTION .
TYPES:
BEGIN OF ty_s_docbuffer ,
tabix TYPE sytabix ,
title TYPE sytitle ,
rawdata TYPE xstring ,
extension TYPE ty_char10 ,
callback_prog TYPE sycprog ,
callback_form TYPE sycprog ,
inplace TYPE flag ,
END OF ty_s_docbuffer ,
ty_t_docbuffer TYPE STANDARD TABLE OF ty_s_docbuffer .
DATA:
t_docbuffer TYPE ty_t_docbuffer ,
s_docbuffer TYPE ty_s_docbuffer ,
r_container TYPE REF TO cl_gui_container ,
r_excelole TYPE REF TO lcl_vr_ole ,
r_appltoolbar TYPE REF TO lcl_vr_appltoolbar ,
r_navipanel TYPE REF TO lcl_vr_navipanel ,
v_viewmode TYPE flag ,
v_initialized TYPE flag .
CONSTANTS:
BEGIN OF c_event ,
before_ole_initialization TYPE ty_char50 VALUE 'BEFORE_OLE_INITIALIZATION'
,
after_ole_initialization TYPE ty_char50 VALUE
'AFTER_OLE_INITIALIZATION' ,
function_code TYPE ty_char50 VALUE 'FUNCTION_CODE' ,
controls_init TYPE ty_char50 VALUE 'CONTROLS_INIT' ,
redraw TYPE ty_char50 VALUE 'REDRAW' ,
END OF c_event .
METHODS:
constructor
IMPORTING ir_container TYPE REF TO cl_gui_container
iv_viewmode TYPE flag
EXCEPTIONS process_terminated ,
free ,
document_add
IMPORTING iv_document_rawdata TYPE xstring
iv_document_extension TYPE any DEFAULT c_extension_xlsx
iv_document_title TYPE any OPTIONAL
iv_callback_prog TYPE any OPTIONAL
iv_callback_form TYPE any OPTIONAL
iv_inplace TYPE flag OPTIONAL ,
pbo ,
redraw
IMPORTING iv_tabix TYPE any ,
appl_sendmail ,
appl_saveas ,
appl_print ,
appl_next ,
appl_prev ,
appl_first ,
appl_last ,
init_appltoolbar ,
init_excelole ,
init_navipanel ,
call_floating ,
call_floating_form .
PRIVATE SECTION .
METHODS:
hndl_fcode_appl
FOR EVENT evnt_fcode OF lcl_vr_appltoolbar
IMPORTING ev_fcode ,
hndl_redraw
FOR EVENT evnt_redraw OF lcl_vr_navipanel
IMPORTING ev_tabix .
IF v_gui_available IS INITIAL .
MESSAGE e000(lp) WITH v_text-t125 " text: Process is flowing in OFF-line
mode
RAISING process_terminated .
ENDIF .
v_viewmode = iv_viewmode .
r_container = ir_container .
ENDMETHOD . "constructor
METHOD free .
IF r_excelole IS BOUND .
r_excelole->free( ) .
FREE r_excelole .
ENDIF .
IF r_appltoolbar IS BOUND .
r_appltoolbar->free( ) .
FREE r_appltoolbar .
ENDIF .
IF r_navipanel IS BOUND .
r_navipanel->free( ) .
FREE r_navipanel .
ENDIF .
ENDMETHOD . "free
METHOD document_add .
FIELD-SYMBOLS <docbuffer> TYPE ty_s_docbuffer .
APPEND INITIAL LINE TO t_docbuffer ASSIGNING <docbuffer> .
<docbuffer>-tabix = sy-tabix .
<docbuffer>-title = iv_document_title .
<docbuffer>-rawdata = iv_document_rawdata .
<docbuffer>-extension = iv_document_extension .
<docbuffer>-callback_prog = iv_callback_prog .
<docbuffer>-callback_form = iv_callback_form .
<docbuffer>-inplace = iv_inplace .
IF <docbuffer>-title IS INITIAL .
<docbuffer>-title = <docbuffer>-tabix .
CONCATENATE v_text-t017 " text: Form
<docbuffer>-title
INTO <docbuffer>-title SEPARATED BY space .
ENDIF .
ENDMETHOD . "document_add
METHOD pbo .
CHECK v_initialized IS INITIAL .
v_initialized = abap_on .
v_title = s_docbuffer-title .
init_appltoolbar( ) .
init_navipanel( ) .
init_excelole( ) .
IF r_navipanel IS BOUND .
r_navipanel->set_selection( 1 ) .
ENDIF .
ENDMETHOD . "pbo
METHOD call_floating .
lcl_vr_ole=>temp_directory_set( ) .
IF lcl_vr_ole=>v_temp_directory IS INITIAL .
MESSAGE i000(lp) WITH v_text-t050 . " text: The working directory is not
determined
EXIT .
ENDIF .
lcl_vr_ole=>temp_directory_clear( ) .
lv_guid = guid_create( ) .
CONCATENATE lcl_vr_ole=>v_temp_directory
lcl_vr_ole=>v_file_separator
lv_guid
s_docbuffer-extension "lcl_vr_ole=>c_extension_xlsx
INTO lv_temp_filename .
cl_gui_frontend_services=>gui_download(
EXPORTING bin_filesize = lv_document_size
filename = lv_temp_filename
filetype = 'BIN'
CHANGING data_tab = lt_document_table
EXCEPTIONS OTHERS = 24 ).
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
RETURN .
ENDIF .
cl_gui_frontend_services=>execute(
EXPORTING document = lv_temp_filename
EXCEPTIONS OTHERS = 1 ) .
IF sy-subrc NE 0 .
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
RETURN .
ENDIF .
ENDMETHOD . "call_floating_form
METHOD redraw .
READ TABLE t_docbuffer INTO s_docbuffer INDEX iv_tabix .
CHECK sy-subrc EQ 0 .
IF r_navipanel IS BOUND .
r_navipanel->set_selection( iv_tabix ) .
ENDIF .
IF r_excelole IS BOUND .
r_excelole->free( ) .
FREE r_excelole .
ENDIF .
init_excelole( ) .
v_title = s_docbuffer-title .
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = 'DUMMY'.
ENDMETHOD . "redraw
METHOD hndl_fcode_appl .
DATA lv_fcode TYPE ui_func .
lv_fcode = ev_fcode .
CASE lv_fcode .
WHEN lcl_vr_appltoolbar=>c_fcode-appl_sendmail . appl_sendmail( ) .
WHEN lcl_vr_appltoolbar=>c_fcode-appl_saveas . appl_saveas( ) .
WHEN lcl_vr_appltoolbar=>c_fcode-appl_print . appl_print( ) .
WHEN lcl_vr_appltoolbar=>c_fcode-appl_next . appl_next( ) .
WHEN lcl_vr_appltoolbar=>c_fcode-appl_prev . appl_prev( ) .
WHEN lcl_vr_appltoolbar=>c_fcode-appl_first . appl_first( ) .
WHEN lcl_vr_appltoolbar=>c_fcode-appl_last . appl_last( ) .
ENDCASE .
ENDMETHOD . "hndl_fcode_appl
METHOD hndl_redraw .
redraw( iv_tabix = ev_tabix ) .
ENDMETHOD . "hndl_redraw
METHOD appl_sendmail .
DATA:
lv_attachment_size TYPE sood-objlen ,
lv_subject TYPE so_obj_des ,
lv_document_size TYPE i ,
lt_document_table TYPE solix_tab .
DATA:
lr_send_request TYPE REF TO cl_bcs ,
lr_mail_message TYPE REF TO cl_document_bcs ,
lv_attachment_type TYPE soodk-objtp VALUE 'XLSX' .
r_excelole->r_docproxy->save_document_to_table(
CHANGING
document_size = lv_document_size
document_table = lt_document_table ) .
TRY.
lr_send_request = cl_bcs=>create_persistent( ) .
lv_subject = v_title .
lr_mail_message = cl_document_bcs=>create_document(
i_type = 'RAW'
i_subject = lv_subject ) .
lv_attachment_size = lv_document_size .
lr_mail_message->add_attachment(
i_attachment_type = lv_attachment_type
i_attachment_subject = lv_subject
i_attachment_size = lv_attachment_size
i_att_content_hex = lt_document_table ) .
lr_send_request->set_document( lr_mail_message ) .
lr_send_request->edit( i_starting_at_x = 1
i_starting_at_y = 1 ) .
CATCH cx_bcs .
ENDTRY .
COMMIT WORK .
FREE: lr_mail_message , lr_send_request .
ENDMETHOD . "appl_sendmail
METHOD appl_saveas .
r_excelole->r_docproxy->save_as(
EXPORTING prompt_user = abap_on
no_flush = abap_off ) .
ENDMETHOD . "appl_saveas
METHOD appl_print .
r_excelole->r_docproxy->print_document(
EXPORTING prompt_user = abap_on
no_flush = abap_off ) .
ENDMETHOD . "appl_print
METHOD appl_next .
DATA lv_tabix_next TYPE sytabix .
lv_tabix_next = s_docbuffer-tabix + 1 .
IF lv_tabix_prew GT 0 .
redraw( lv_tabix_prew ) .
ELSE .
MESSAGE s000(lp) WITH v_text-t135 . " text: TOP of the list is reached
ENDIF .
ENDMETHOD . "appl_prev
METHOD appl_first .
DATA lv_tabix_first TYPE sytabix VALUE 1 .
CHECK lv_tabix_first NE s_docbuffer-tabix .
redraw( lv_tabix_first ) .
ENDMETHOD . "appl_first
METHOD appl_last .
DATA lv_tabix_last TYPE sytabix .
lv_tabix_last = LINES( t_docbuffer ) .
CHECK lv_tabix_last NE s_docbuffer-tabix .
redraw( lv_tabix_last ) .
ENDMETHOD . "appl_last
METHOD init_appltoolbar .
DATA lv_navi_keys TYPE flag .
IF LINES( t_docbuffer ) GT 1 .
lv_navi_keys = abap_on .
ELSE .
lv_navi_keys = abap_off .
ENDIF .
*&---------------------------------------------------------------------*
*& Form POPUP_CTXTFIELD_CB_GUI_STATUS
*&---------------------------------------------------------------------*
FORM popup_ctxtfield_cb_gui_status . "#EC CALLED
DATA lt_excl TYPE STANDARD TABLE OF fcode .
APPEND 'TRAD' TO lt_excl .
APPEND 'TRDL' TO lt_excl .
APPEND 'TRRN' TO lt_excl .
APPEND 'TRMV' TO lt_excl .
APPEND 'TRTO' TO lt_excl .
APPEND 'TRZM' TO lt_excl .
ENDFORM . "POPUP_CTXTFIELD_CB_GUI_STATUS
*&---------------------------------------------------------------------*
*& Form POPUP_CTXTFIELD_UCOMM
*&---------------------------------------------------------------------*
FORM popup_ctxtfield_ucomm TABLES pt_nodetab "#EC CALLED
USING pv_uc TYPE any
CHANGING cv_exit TYPE flag
cv_list_refresh TYPE any .
DATA ls_nodetab TYPE seucomm .
MOVE-CORRESPONDING pt_nodetab TO ls_nodetab .
<workbench>->popup_ctxtfield_callback(
EXPORTING is_nodetab = ls_nodetab
iv_uc = pv_uc
CHANGING cv_exit = cv_exit
cv_list_refresh = cv_list_refresh ) .
ENDFORM . "POPUP_CTXTFIELD_UCOMM
*&---------------------------------------------------------------------*
*& Form POPUP_CTXTMULTI_CB_GUI_STATUS
*&---------------------------------------------------------------------*
FORM popup_ctxtmulti_cb_gui_status. "#EC CALLED
<workbench>->popup_ctxtmulti_callback(
EXPORTING is_nodetab = ls_nodetab
iv_uc = pv_uc
CHANGING cv_exit = cv_exit
cv_list_refresh = cv_list_refresh ) .
ENDFORM . "POPUP_CTXTMULTI_UCOMM
*&---------------------------------------------------------------------*
*& Form popup_context_ucomm
*&---------------------------------------------------------------------*
FORM popup_context_ucomm "#EC CALLED
TABLES pt_fields STRUCTURE sval
USING pv_code TYPE any
CHANGING cv_error STRUCTURE svale
cv_show_popup TYPE any .
ENDFORM . "popup_context_ucomm
*&---------------------------------------------------------------------*
*& Form popup_context_f4
*&---------------------------------------------------------------------*
FORM popup_context_f4 USING pv_tabname TYPE any "#EC CALLED
pv_fieldname TYPE any
pv_display TYPE any
CHANGING cv_returncode TYPE any
cv_value TYPE any .
cv_value = lv_objname .
ENDFORM . "popup_context_f4