SAPфорум.RU
https://sapboard.ru/forum/

Программа ведения настроек
https://sapboard.ru/forum/viewtopic.php?f=13&t=96224
Страница 1 из 1

Автор:  matik [ Вт, мар 27 2018, 11:35 ]
Заголовок сообщения:  Программа ведения настроек

Основная цель разработки - убрать из кода магические числа и другие "постоянные" данные из кода. И дать возможность пользователю менять "константы" в дружественном интерфейсе.
Номера счетов по определенной маске, тексты при создании документов FI или Range of BLART в различных выборках являются хорошими примерами где можно использовать ведение настроек.
Проще всего описать разработку, это что-то вроде tr. STVARV, но все параметры и опции выбора сгруппированы вместе, как и в tr. SLG1 с интерфейсом схожим с SAP Fiori который непосредственно отображается в SAP GUI через CL_GUI_HTML_VIEWER.

В самой программе настройки обычно хранятся в структурах (либо в атрибутах класса) и могут содержать такие данные, как:
    * Опции выбора (SELECT-OPTION)
    * Параметры (любое простое значение как дата, время или BUKRS)
    * Строки (тексты произвольной длины)
    * Таблицы (STANDARD, SORTED, HASHED на основе структур)
Первые 2 полностью аналогичны STVARV, в строках к примеру можно хранить шаблоны писем, а таблицы подойдут, когда нужно написать, к примеру, большой case который зависит от условия, которое может меняться, но делать таблицу БД и создавать генератор ведение обременительно.

* Создание настройки SE38
* Создание настройки SE24
* Какую транзакцию ведения выбрать?
* Описание интерфейса
* Изменение описания полей
* Сложные типы данных
* Средство поиска в ui5
* Создание настройки через интерфейс
* Экспорт и импорт данных
* Расширения
* Поиск кода с настройкой
* Инструкция по установке


Библиотека доступна по ссылке

Автор:  matik [ Вт, мар 27 2018, 11:37 ]
Заголовок сообщения:  Re: Программа ведения настроек

SE38 -> ZAQO_TEST

Чтобы создать настройку просто запустите программу в DEV.

Изображение

На основе этой описания этой структуры создастся 4 вида полей:

Изображение

  • №1 PARAMETERS
  • №2 SELECT-OPTIONS
  • №3 TABLES
  • №4 STRINGS


Сам код создания настройки желательно вызвать однократно во время **INITIALIZATION** или **START-OF-SELECTION**

Code:
    " Initials values in editor
    set_default_values(
     CHANGING
       cs_opt = ms_opt  ).

    " Or use class attributes
    GET REFERENCE OF ms_opt INTO lv_ref.           " ! Ref to data

    " Read new values
    TRY.
        zcl_aqo_option=>create(
          iv_package_id = '$TMP'               " Package  "#EC NOTEXT
          iv_option_id  = 'Main options'(op1)  " Any text < 30 symbols
          ir_data       = lv_ref               " REF #( ms_opt )
          " iv_repair     = abap_true
        ).
      CATCH zcx_aqo_exception INTO lo_error.
        MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
        RETURN.
    ENDTRY.


После этого ms_opt будет содержать данные которые внес консультант в одной из программ ведения

Автор:  matik [ Вт, мар 27 2018, 11:38 ]
Заголовок сообщения:  Re: Программа ведения настроек

SE24 -> ZCL_AQO_TESTER

Чтобы создать на основе аттрибутов класса просто нажмите F8.

Изображение

Описание полей аналогично описанию структуры

Изображение

за исключением того что аттрибуты должны быть PUBLIC и READ-ONLY
Они могут быть или:
  • Instance Attribute
  • Static Attribute

но не оба вида в одной настройке (в противном случае возникнет исключение)

Изображение

Так как READ-ONLY аттрибуты не могут быть изменены вне класса нужно добавить ZCL_AQO_OPTION в друзья.
Если вы забыли это сделать выйдет специальное напоминание во время выполнения


Сам код создания настройки желательно вызвать однократно в CONSTRUCTOR или CLASS-CONSTRUCTOR

Code:
  " Default values! For simple types use initilazation in declaration itself

  " Optional initialization
  APPEND INITIAL LINE TO me->bukrs_range ASSIGNING <ls_bukrs>.
  <ls_bukrs>-sign   = 'I'.
  <ls_bukrs>-option = 'BT'.
  <ls_bukrs>-low    = '1000'.
  <ls_bukrs>-high   = '3000'.

  SELECT * INTO TABLE me->t002_tab
  FROM t002.

  " Read new values
  TRY.
      zcl_aqo_option=>create(
        iv_package_id = '$TMP'                " Package    "#EC NOTEXT
        iv_option_id  = 'Class options'(op1)  " Any text < 30 symbols
        " Public read-only attributes is options!
        " CLASS-DATA or DATA (but not both)
        io_data       = me
        " iv_repair     = abap_true
      ).
    CATCH zcx_aqo_exception INTO lo_error.
      MESSAGE lo_error TYPE 'S' DISPLAY LIKE 'E'.
      RETURN.
  ENDTRY.


После этого аттрибуты ME->* будут содержать данные которые внес консультант в одной из программ ведения

Автор:  matik [ Вт, мар 27 2018, 11:39 ]
Заголовок сообщения:  Re: Программа ведения настроек

"Новый" sapui5 интерфейс

Изображение

№1 Левая часть экрана предназначена для:
  • поиска
  • сортировки
  • фильтрации
  • группировки
  • и создания новой настройки

№2 Правая часть экрана выходит после выбора конкретной настройки.
В правом верхнем углу находятся кнопки:
  • переход в полноэкранный режим
  • закрытие правой части экрана
  • отправить e-mail об ошибке


Также под названием настройки можно заметить:
  • размер настройки в Kb
  • описание настройки
    --- можно отредактировать кликнув по ссылке

№3 В нижней части находится:
  • переключение на технический режим
  • кнопки выгрузки и загрузки в файл
  • количество полей настройки
  • 2 поля: Описание и значение


Если переключится на технический режим

Изображение

№1 Кнопки удаления и добавления полей

№2 Технические поля:
  • описание поля
  • можно ли редактировать данное поле в продуктиве
  • тип поля или связка ТАБЛИЦА-ПОЛЕ для средства поиска


№3 В самом низу:
  • скопировать настройку в другой мандант (без запуска SCC1)
  • положить настройку в запрос
  • удалить настройку
    настройки в пакетах начинающихся на **$** можно удалить без запроса
  • сохранить настройку
    будет активна после внесения изменений

"Старый" интерфейс

На селективном экране нужно выбрать пару пакет - id c помощью средства поиска.
Для создания новой настройки нужно указать не существующий **id**

Изображение

Если мандант закрыт на изменение сразу попадаем на экран ведения настроек

Изображение

№1 Кнопки сохранения и навигации

№2 Ведение parameters и select-options

№3 Таблицы и memo тексты отображены лишь кнопками для вызова диалога

Если мандант открыт на изменение (DEV) сначала будут отображены технические параметры настройки

Изображение

№1 Слева на право:
  • переход на экран ведения значений
  • положить настройку в запрос
  • скопировать настройку в другой мандант (без запуска SCC1)
  • удалить настройку
    настройки в пакетах начинающихся на **$** можно удалить без запроса
  • поиск кода из которой была создана настройка

№2 Описание настройки

№3 Кнопки удаления и создания поля в настройки

№4 Технические поля:
  • описание поля
  • можно ли редактировать данное поле в продуктиве
  • тип поля или связка ТАБЛИЦА-ПОЛЕ для средства поиска

№5 Быстрый переход в диалог ведения значения для таблиц и memo текстов

Автор:  matik [ Вт, мар 27 2018, 11:40 ]
Заголовок сообщения:  Re: Программа ведения настроек

Какую транзакцию выбрать?

На данный момент есть 6 транзакций, которые можно разделить на 2 группы:
  • EDITOR - Для редактирования настроек
  • VIEWER - Для просмотра настроек (В продуктиве часто оставляют лишь эту возможность)

Если мандант открыт на изменение ZCL_AQO_HELPER=>IS_DEV_MANDT( ) все поля в настройки открыты на изменение в EDITOR .
В других системах лишь поля помеченные как Editable in prod могут редактироваться.

Изображение

Изображение

1. ZAQO_BSP_EDITOR / ZAQO_BSP_VIEWER

Основная рекомендуемая транзакция на основе BSP приложения.
Запускает браузер по умолчанию (желательно Chrome)

Можно выслать url настройки консультанту
Изображение

2. ZAQO_EDITOR / ZAQO_VIEWER

Запускает Internet Explorer внутри SAP GUI.
Для работы танзакции нужен интернет (в отличии от BSP загружает sapui5 библиотеку с https://sapui5.hana.ondemand.com)

Также может проваливаться в код (место создания настройки)
Изображение

и описания полей (SE11)

Изображение

3. ZAQO_EDITOR_OLD / ZAQO_VIEWER_OLD

Имеет следующие ограничения:
  • Не умеет отображать таблицу таблиц или range внутри таблицы (в разработке)
  • Выгружать (и загружать) настройку во внешний файл (к примеру из продуктива в DEV) (в разработке)
  • Checkbox, combobox и datetime поля не доступны
  • Отображать предыдущие значения поля

К плюсам можно отнести:
  • Привычный интерфейс (к SAPUI5 нужно привыкнуть)
  • Удобно работать с простыми таблицами в ALV (В UI5 можно выгрузить/загрузить таблицу в CSV для редактирования в Excel)
  • В field catalog полей и вложенных таблицы можно перемещать поля
    Изображение
  • Работа с range более удобная
    Изображение

Автор:  Kengur [ Вт, апр 03 2018, 14:56 ]
Заголовок сообщения:  Re: Программа ведения настроек

Несколько раз прочитал вики но не увидел как в итоге считать эти настройки из mr_opt и подпихнуть например в свой sel-opt.

Автор:  matik [ Ср, апр 04 2018, 08:08 ]
Заголовок сообщения:  Re: Программа ведения настроек

Сложные типы данных

Range или таблица внутри другой таблицы
Настройка может содержать поля с типом таблица (**Standard|Sorted|Hashed**).\
В свою очередь поля этой таблицы в свою очередь могут быть таблицами или range.


Объявление в коде
Изображение

  • В ZAQO_BSP_EDITOR | ZAQO_EDITOR при редактировании таблицы отображается кнопка с количеством записей
    Изображение

    поля ALT_LAND_TEXT
    Изображение
  • В ZAQO_EDITOR_OLD
    отображаются лишь данные плоских таблиц

    Изображение

    или сразу тут
    Изображение

Редактирование сложных таблиц в "старом интерфейсе" находится (в разработке), на данный в таблице можно редактировать memo поля

Автор:  Stepan [ Ср, янв 16 2019, 08:26 ]
Заголовок сообщения:  Re: Программа ведения настроек

Спасибо за интересный функционал и реализацию :wink:
При тестировании возник следующий момент -
указание нетипизованного параметра в программе приводит к дампу CX_SY_STRUCT_COMP_TYPE в транзакциях ZAQO_EDIT / ZAQO_EDIT_OLD
чтение настроек из программы при этом проходит корректно
Видимо ссылка на тип словаря обязательна, но от дампа в случае ошибки трудно избавиться. Приходится вручную удалять через delete() и помогает не сразу ))
Отсюда пожелания - отловить catch в транзакциях настройки. Плюс сделать возможность удаления объекта настройки из транзакций без его раскрытия, приводящего к дампу

Автор:  matik [ Ср, янв 16 2019, 14:15 ]
Заголовок сообщения:  Re: Программа ведения настроек

Добрый день
спасибо за отзыв

можете выслать использование настроек? (описание класса или структуры)
все типы могут описаны локально (структуры, таблицы и range)
но с предварительным описанием через TYPES (не DATA)

удалять всю настройку не обязательно
можно скормить новую структуру и вызвать save c этим параметрам
Изображение

    А так задумок довольно много (надеюсь приступить к ним в ближайшем будущем)
  • Использование listbox когда СП меленький
  • Настройка таблица с полями в виде таблиц
  • Проверки при редактировании настроек
  • Создавать настройки не из кода (а в самой транзакции, к примеру консультантом)
  • Версионность (чтобы понять, что изменилось и на кого катить бочку)
  • Выгрузка настройки в файл и обратно (к примеру, из прода в тест)
  • Убрать хранения из кластеров (версионность будет проще реализовать)
    Думаю о представлении иерархии в BOBF (Пакет->Настройка->Версия->Отдельные поля)
    Но слетит обратная совместимость
  • И главное доработать SAPUI5 (ZAQO_EDIT)
    -чтобы оно запускалось в виде BSP приложения (а не в сапгуй)
    -Использовать прочие рекомендации от САП (К примеру, New Master Detail template )
    -Сделать нормальные СП (сейчас это facepalm)
    -Использовать odata аннотации для смарт контролов (table & field)

Автор:  Stepan [ Ср, янв 16 2019, 14:48 ]
Заголовок сообщения:  Re: Программа ведения настроек

В качестве теста использую ZADO_TEST
Code:
  BEGIN OF ts_main_opt,
         code1 type c, " <- поле без ссылки , типизации
         edit_mask    TYPE editmask,             " CHAR
         bukrs        TYPE bukrs,                " CHAR
         pack_blocked TYPE xsdboolean,           " ABAP_BOOL swd_blocks
         msg_count    TYPE syst-tabix,           " INT4
         due_date     TYPE syst-datum,           " D
         due_time     TYPE syst-uzeit,           " T
    " datetime      TYPE xsddatetime_local, " datetime NO component in OLD UI
         sum           TYPE bscurr,              " P with sign
         allowed_bukrs TYPE RANGE OF bukrs,      " Range
         blocked_bukrs TYPE RANGE OF bukrs,      " Range
         some_numbers  TYPE RANGE OF syst-tabix,
         alt_land_text TYPE SORTED TABLE OF ts_alt_land WITH UNIQUE KEY land1,
         t002_tab      TYPE STANDARD TABLE OF t002 WITH DEFAULT KEY,
         some_text     TYPE string,
*        one_field      TYPE STANDARD TABLE OF char30 WITH DEFAULT KEY,  " Table_line is not structure
  END OF ts_main_opt.

Дальше запуск программы без инициализации нового поля.
После этого собственно сразу дамп в настройках при открытии объекта
Чтение через read() без проблем

p.s наоборот очень понравилась реализация SAPUI+Viewer. уходить в чистый браузер порой совсем не интересно, теряются возможности интеграции ))

Автор:  matik [ Ср, янв 16 2019, 19:27 ]
Заголовок сообщения:  Re: Программа ведения настроек

пожалуйста обновитесь


если описание в классе, так ругается
Изображение

вроде так аналогично
Code:
code1 TYPE c LENGTH 1, " <- поле без ссылки , типизации


добавлен класс исключений
Изображение

немного переделал код
редактор запустился, но типа не видно (можно выделить запись и нажать на минус)
все же лучше указать тип из словаря (CHAR1)
Изображение

Автор:  s2k [ Ср, сен 11 2019, 17:03 ]
Заголовок сообщения:  Re: Программа ведения настроек

Добрый день!
Сегодня французский коллега попросил протестировать эту программу.

Разработка очень понравилась, но я столкнулся с таким поведением:
1. В тестовой программе добавил в структуру параметров новое поле. Запустил, программа корректно обновила хранимые параметры, в редакторе ZAQO_BSP_EDITOR всё доступно.
2. Удалил в коде один из параметров. При запуске выдает ошибку - "Declared in editor only" для этого параметра.
3. Попытался удалить в редакторе отсутствующее в коде значение. Нажимаю шестеренку, выделяю строку, нажимаю "-" над таблицей. Ничего не происходит.
4. ZAQO_EDITOR при выборе набора параметров выдает ошибку "Declared in editor only" для каждого из параметров, ничего не отображает.
5. ZAQO_EDITOR_OLD не находит параметров, предлагает "Create a new option".

Как понять, почему не удаляет параметр в ZAQO_BSP_EDITOR?
Спасибо!

Автор:  matik [ Чт, сен 12 2019, 09:18 ]
Заголовок сообщения:  Re: Программа ведения настроек

Добрый день

Цитата:
3. Попытался удалить в редакторе отсутствующее в коде значение. Нажимаю шестеренку, выделяю строку, нажимаю "-" над таблицей. Ничего не происходит.

вроде все правильно
после этого должна быть активна кнопка сохранения
нажать Save, подтвердить сохранение и параметр должен удалиться навсегда


в старом редакторе тут кнопка

Изображение

после удаления также нужно нажать на Save
там еще есть проверки на сохранение (проверка на знак числа)


Изображение


Цитата:
добавил в структуру параметров новое поле

есть нюанс с таблицами таблиц
при добавлении нового поля во вложенную таблицу
желательно перечитать описание полей запустив код с флагом IV_REPAIR = abap_true (попробуйте запустить так)
если изменился тип поля с Parameter на Select-Option (или Table :? ) желательно удалить поле из редактора и вновь запустить создание настройки

да и не забыть перенести настройку из DEV в другой мандант
можно положить в запрос и перенести через SCC1 (но спец кнопкой быстрее)

Автор:  matik [ Чт, сен 12 2019, 09:27 ]
Заголовок сообщения:  Re: Программа ведения настроек

* только что проврил новый интерфейсна sapui5

записал себе в bug
https://github.com/bizhuka/aqo/issues

ui5 почти не тестировал, конусльтантам превычнее в ZAQO_EDITOR_OLD
там удалил и создал поля
вроде работает

Автор:  s2k [ Чт, сен 12 2019, 10:03 ]
Заголовок сообщения:  Re: Программа ведения настроек

Добрый день!

Понял свой косяк - запускал ZAQO_EDITOR_OLD через SE38, а там зашиты проверки на имя транзакции.
Если запускать транзакцию ZAQO_EDITOR_OLD - работает, поле удалил.

Продолжаю тестирование, спасибо!

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/