Адаптация WDP приложений

Следующим курсом в рамках программы «Вечерний ABAP» для меня стал курс об основах Web Dynpro – NET310. Курс рассматривает базовые понятия WDP, такие как типы контроллеров, окна, ракурсы, базовые элементы UI, приложения и взаимодействия между всеми этими объектами. Одной из самых любопытных для меня тем была возможность изменения существующих WDP приложений.

Когда заходит речь об изменении WDP приложений, можно рассматривать эти изменения с разных точек зрения:

  • с одной стороны нам может понадобиться изменить какую-либо WDP сущность или создать новую (расширить контекст, изменить ABAP код и т.п., добавить UI элемент в ракурс, создать ракурс);
  • с другой стороны мы можем захотеть скрыть ненужные поля в рамках ракурса, прописать значения для конфигурационного контроллера, изменить прочие UI свойства, т.е. все те изменения, которые не затрагивают непосредственно изменение каких-либо базовых WDP сущностей.

В первом случае речь будет идти о расширении приложения (с помощью Enhancement Framework), во втором случае об адаптации. Далее в статье рассматриваются возможности адаптации WDP приложений. Более подробно о расширениях вы можете узнать из курса NET310 и официальной документации. Статья подразумевает, что читатель знает основы WDP.

Адаптация WDP приложений может подразделяться на три подуровня, за каждый из которых может отвечать отдельный специалист:

pict_1

Каждый следующий уровень может влиять на адаптацию, выполненную на предыдущем. Каждый предыдущий уровень может ограничивать возможности адаптации на последующих уровнях.

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

  • Уровень конфигурации. На уровне конфигурации программисты, которые разрабатывают приложение WDP, создают наборы настроек (конфигурации) для компонентов (конфигурация компонента) и приложений (конфигурация приложения). Созданные конфигурации являются объектами репозитария, они, как правило, лежат в одном пакете с приложением и переносятся с помощью транспортной системы. Конфигурации, как и приложения не зависят от манданта.
  • Уровень кастомизации. На данном уровне администраторы могут адаптировать UI элементы конкретного приложения во время его выполнения. Кастомизация для приложения всегда одна в рамках клиента (манданта) и текущей конфигурации, при этом эти настройки так же можно перенести через транспортную систему, пример объектов из такого запроса:pict_2
  • Уровень персонализации. На данном этапе пользователь WDP приложения может поменять некоторые настройки UI элементов под себя, при этом настройки сохраняются только для конкретного пользователя.

Подготовка

 

В качестве примера рассмотрим простейшее приложение WDP, которое содержит внутри себя один ракурс с текстовым полем и кнопкой. В контексте контроллера компонента объявим следующий узел:

pict_3

Где атрибуты TEXT_ONE и TEXT_TWO имеют тип STRING.

Создадим контроллер конфигурации для нашего компонента:

pict_4

Пометим его как конфигурационный контроллер:

pict_5

Конфигурационный контроллер необходим для того чтобы иметь возможность настраивать его контекст из конфигурации компонента для последующей передачи значений из его контекста в контекст контроллера компонента.

Для передачи в контроллер компонента данных из конфигурационного контроллера необходимо добавить его в качестве используемых контроллеров:

pict_6

Далее скопируем в контекст конфигурационного контроллера созданный узел TEXTS из контекста контроллера компонента, для этого можно воспользоваться мастером:

pict_7

На последующем экране необходимо выбрать контроллер компонента и узел TEXTS, таким образом, мы получим копию узла в нашем конфигурационном контроллере.

После создания узла контекста привяжем его к узлу контроллера компонента, делается это в контексте контроллера компонента:

pict_8

Следует отметить, что конфигурационный контроллер в рамках компонента может быть только один.

После создания конф. контроллера, привяжем узел TEXTS из контроллера компонента к контексту ракурса и привяжем свойство TEXT из UI элемента Caption к атрибуту TEXT_ONE:

pict_9

На текущем этапе у нас будет выводиться следующий экран:

pict_10

Далее проходя по всем уровням адаптации, будем изменять значения текста и свойства UI элементов.

Уровень конфигурации

 

На данном этапе адаптации, основными объектами с которыми мы будем работать будут:

  • Конфигурация компонента
  • Конфигурация приложения
  • Конфигурационный контроллер

Конфигурация компонента необходима для хранения значений для конфигурационного контроллера и адаптации внешнего вида у ракурсов компонента.

Чтобы создать конфигурацию компонента, можно использовать контекстное меню в SE80:

pict_11

После чего автоматически стартует WDP приложение — CONFIGURE_COMPONENT.

Приложение довольно простое, в нем необходимо задать имя конфигурации и нажать на кнопку создать:

pict_12

Далее следует указать пакет, в котором она будет сохранена, а так же транспорт через который будет осуществлен перенос (в моем случае это локальный пакет, запрос на транспорт не потребуется):

pict_13

В зависимости от версии системы следующий экран может выглядеть по-разному.  В моей версии системы (7.31) появляется экран с тремя вкладками: attributes, component-defined, web Dynpro built-in. В более старых версиях вкладки назывались: properties, explicit configuration, implicit configuration.

На закладке Component-Defined можно задать значения для контекста конфигурационного контроллера:

pict_14

Запустив наше приложение с такой конфигурацией, мы бы уже увидели измененный экран:

pict_15

Однако для того чтобы запустить приложение с конфигурацией компонента, необходимо создать конфигурацию приложения, об этом будет рассказано чуть позже.

Галочка Final (Окон.) обозначает то, что на последующих уровнях настройки контекст не должен изменяться. Предположим у нас в приложении есть дополнительная инициализация после того как значения из контекста конфигурационного контроллера будут перенесены в контекст контроллера компонента. Для этого мы можем в событии инициализации контроллера компонента (WDDOINIT) добавить следующий код:

В случае установки галочки «final» в конфигурации напротив какого-либо атрибута, код по его изменению будет приводить к особой ситуации CX_WD_CONTEXT.

На вкладке Web Dynpro Built-In находятся настройки к привязке к UI элементам (в дереве отражены все ракурсы компонента), например таким образом можно изменить текст еще раз:

pict_16

В результате получим:

pict_17

Вместо непосредственно текста можно прописать ссылку из OTR репозитария.

Галочка Final по аналогии с такой же на закладе Component-Defined обозначает, что на последующих уровнях адаптации, это значение не должно меняться.

С помощью кнопки «Reset» можно сбросить измененное значение на начальное.

Для компонента можно создать неограниченное количество конфигураций.

Создав конфигурацию компонента её нужно каким-то образом запустить. Для этого, создается конфигурация приложения, опять воспользуемся контекстным меню (с узла WDP приложения) из SE80:

pict_18

Создадим новую конфигурацию приложения:

pict_19

Укажем пакет и описание:

pict_20

В зависимости от версии системы следующий экран может отличаться.

На вкладке structure укажем, с какой конфигурацией компонента будет запускаться наша конфигурация приложения:

pict_21

Кроме присваивания конфигурации компонента, в конфигурации приложения можно так же настроить параметры приложения – те самые, что настраиваются на закладке Parameters, когда вы редактируете WDP приложение в SE80:pict_22

Делается это на вкладке Application Parameters:

pict_23

В параметрах так же можно задать пользовательские параметры, определенные в Startup Inbound Plug.

С помощью кнопки «Test» можно запустить приложение с обрабатываемой конфигурацией.

Вообще сам запуск WDP приложения с конфигурацией может быть осуществлен либо динамически, либо статически. При динамическом запуске в URL к приложению необходимо добавить указание на имя конфигурации, в нашем  случае: sap-wd-configId=ZAPP_CONFIG. При статическом запуске ID конфигурации указывается в параметрах приложения:

pict_24

После чего запуск приложения всегда будет осуществляться с указанной конфигурацией приложения. Для приложения WDP можно создать сколько угодно конфигураций приложения.

Уровень кастомизации

 

На уровне кастомизации, администраторы могут адаптировать UI элементы WDP приложения для текущей конфигурации компонента в рамках клиента. Если приложение запущено без конфигурации, адаптация происходит непосредственно для него. Для каждой конфигурации компонента может быть выполнена и сохранена только одна настройка кастомизации.

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

pict_25

В данном случае была произведена кастомизация приложения без конфигурации и приложения с конфигурацией ZCOMP_CONFIG.

Для того чтобы начать производить кастомизацию, необходимо добавить к URL следующий параметр: SAP-CONFIG-MODE=X. В результате чего, в контекстном меню появится следующий пункт:

pict_26

Нажав на пункт меню, откроется окно изменений кастомизации:

pict_27

Диалог аналогичен рассматриваемому ранее диалогу на закладке Web Dynpro Built-In в конфигурации компонента.  Напомню, если в конфигурации компонента выставлена галочка «Final», изменить значение в кастомизации не получится:

pict_28

Галочка Final (или окон.) в данном же диалоге означает, что на уровне персонализации пользователь не сможет переопределить свойство UI элемента.

Уровень персонализации

 

На этапе персонализации пользователь может изменить те настройки пользовательского интерфейса, которые ему не запретили изменять на предыдущих уровнях адаптации (флаг Окон. Final). Данный шаг является самым ограниченным в плане адаптации, т.к. далеко не все может быть изменено пользователем (В основном пользователь может скрывать не нужные ему элементы, менять позиции столбцов в таблицах и т.п.). Персонализация может быть запрещена путем настройки параметра приложения:

pict_29

В связи с тем, что настройки персонализации не отображаются в транзакции SE80, может возникнуть проблема с их поиском и определением. К счастью для нас существует специальное WDP приложение, где мы можем посмотреть их, а так же все конфигурации к компоненту WD_ANALYZE_CONFIG_USER:

pict_30

При просмотре персонализации мы можем понять, какие свойства UI элементов были изменены:

pict_31

Уровень глобальных настроек

 

Кроме перечисленных уровней адаптации, администраторы могут так же задавать глобальные параметры для WDP приложений в рамках текущего манданта. Делается это путём запуска приложения WD_GLOBAL_SETTING:

pict_32