Info Window
Формы с наведением (всплывающие формы)
10.09.2015
Формы с наведением, или всплывающие формы, - это информационные формы, содержание которых зависит от элемента управления на форме или ячейки сетки, для которых была вызвана данная форма.

Обзор всплывающих форм

Всплывающие формы помогают пользователям получить дополнительную информацию, связанную с полем формы или ячейкой таблицы, не переходя никуда с текущей формы. Элементы управлени формы или ячейки в таблице, позволяющие вызывать формы с наведением, помечаются оранжевым квадратиком в левом верхнем углу (см. рис. 1). При наведении указателя мышки на такое поле формы или ячейку в таблице появляется маленькая иконка прикрепленного документа, по нажатию на которую отображается всплывающая форма.

Пример формы с наведением
Рис. 1. Пример формы с наведением (всплывающей формы).

Настройки пользователя

Пользователи имеют возможность включать/выключать механизм всплывающих форм. Для этого необходимо вызвать окно настроек пользователя и поставить/убрать флажок в пункте "Включить формы с наведением".

Включение/выключение механизма форм с наведением
Рис. 2. Включение/выключение пользователем механизма форм с наведением.

Администрирование форм с наведением

Настройки jas.ini

Администратор имеет возможность включать/выключать механизм форм с наведением для конкретного веб-сервера. Для этого необходимо в менеджере серверов выбрать нужный веб-сервер и пройти в меню Configuration -> Web Runtime. В секции Web Runtime отметить флажок Show Popup(s).

Включение/выключение механизма форм с наведением для веб-сервера
Рис. 3. Включение/выключение механизма форм с наведением для веб-сервера.

В jas.ini данная настройка выглядит так:

[OWWEB]
SHOWPOPUP=True

Если в настройках веб-сервера (jas.ini) значение параметра InYourFaceError установлено в FALSE, формы с наведением не будут показываться, даже если ShowPopup установлено в TRUE.

Настройки форм с наведением для приложений, пользователей и ролей

Ассоциировать всплывающую форму с полем на форме или колонкой в таблице можно двумя путями: в специальных приложениях администрирования и при разработке приложения в конструкторе форм. Рекомендуется работать с назначением форм с наведением полям на форме или колонкам в таблице через приложения администратора P958973 - Работа с определениями функций и P958974 - Работа с авторизациями функций.

В приложении P958973 - Работа с определениями функций регистрируется сама всплывающая форма (форма с наведением) в виде функции с уникальным именем. Необходимо, так же, указать элемент данных, при наведении на который будет показываться данная форма, само приложение и форму. Имена функий, включенных в стандартную поставку, начинаются с JDE. При регистрации всплывающей формы собственной разработки название ее лучше начинать с другого буквосочетания. Рекомендуется, так же, добавлять в конце имени алиас элемента данных.

Приложение P958973 - Работа с определениями функций
Рис. 4. Регистрация формы с наведением в приложении P958973 - Работа с определениями функций.

В приложении P958974 - Работа с авторизациями функций осуществляется назначение (или авторизация) зарегистрированной в приложении P958973 функции. В нем можно указать в какой среде, для какого пользователя или роли, на какой форме какого приложения для какого кода продукта какая функция формы с наведением используется. В полях "Имя формы", "Имя объекта" и "Код продукта" допустимо использование значение "*ALL". Именно так и заданы функции форм с наведением, поставляющиеся с Oracle JD Edwards EnterpriseOne.

Приложение P958974 - Работа с авторизациями функций
Рис. 5. Работа с авторизациями функций.

Не смотря на то, что в приложении P958974 для поля "Код продукта" допустимо значение "*ALL", реально оно работает только начниая с версии ядра 9.1.4.1. До выхода ядра 9.1.4.1 необходимо было создавать для каждого кода продукта свою запись (именно в таком виде и поставляется система). По этому поводу существует Баг.

Для вступления сделанных изменений в силу необходимо перезайти в систему.

При добавлении/правке определения формы с наведением в приложении P958973 существует возможность запретить реакцию на наведение указателя мышки для конкретного элемента данных.

Приложение P958973. Запрет на наведение
Рис. 6. Приложение P958973. Запрет реакции на наведение.
После этого данную функцию необходимо авторизовать в приложении P958974.

Существуют случаи, когда не обойтись без "ручного" вызова формы с наведением из какого-либо приложения. Во-первых, когда форма с наведением обладает нестандартной структурой данных (параметры другого типа или их больше, чем предусмотрено для всплывающих форм), во-вторых, когда на форме существует более одного элемента управления, связанного с одним элементом данных, но несущего разные смысловые нагрузки, например элемент данных AN8 может представлять в одном месте сотрудника, в другом - клиента. Для "ручного" вызова формы с наведением используется конструктор форм:

  1. Откройте приложение в конструкторе форм.
  2. Перейдите в редактор кода события для выбранного поля формы или колонки таблицы и выберите событие Mouse Is Hovered.
  3. В этом событии вызовите системную функцию Show Popup (Web Only), которая находится в секции General.
  4. Выберите форму с наведением и передайте ей нужные параметры.
Вызов функции Show Popup (Web Only) в обработчике события Mouse Is Hovered
Рис. 7. Вызов функции Show Popup (Web Only) в обработчике события Mouse Is Hovered.

Создание форм с наведением (разработка)

Формы с наведением или всплывающие формы, по сути своей, являются формами сообщений (Message Forms), в свойсвтах которых установлен флажок "Pop-up Form" (см. рис. 8).

Перевод обычной формы сообщений в форму с наведением
Рис. 8. Перевод обычной формы сообщений в форму с наведением.

После того, как отмечен флажок "Pop-up Form", все кнопки на ней становятся невидимыми, а форма выступает в качестве простого контейнера для элементов управления. Однако набор этих элементов не велик: Lablel, Text Block, Group Box и Image. Поэтому информативная часть всех, поставляемых с системой форм с наведением, создается "вручную" методом генерации HTML содержимого (см. ниже фрагмент кода обработчика события Dialog is Initialized формы с наведением W41700C приложения P41700).

0059 Convert Math_Numeric To String
        VA evt_mnUTCTimeWithSeconds_AN8 -> BF mnMathNumeric01
        VA evt_UniqueNumber_DL01 <- BF szString
0060 VA evt_szHTMLString_A030 = "<table cellpadding=0 cellspacing=0 width=375px> <tbody> <tr> <td> <TABLE id="
0061 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_1t cellpadding=0 cellspacing=0 style='z-index:100;position:relative;margin-right: -35px;cursor:pointer'><tbody><TR onclick='showContent("))
0062 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],",7,1,3)'><TD><img id="))
0063 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_1s src = '/jde/share/images/tab_start_a.png' /></TD> <TD id="))
0064 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_1m background = '/jde/share/images/tab_mid_a.png' align='center' valign='center' width=75> <a id="))
0065 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_1a class='popup_a' href='#' onclick='showContent("))
0066 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],",7,1,3)'>"))
0067 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],[TV Main])
0068 VA evt_szTempHTMLString_A030 = "</a></td> <TD style='z-index:50;position:relative' ><img id="
0069 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_1e src='/jde/share/images/tab_end_a.png' width=37 height=19/></TD> </TR></tbody></TABLE><td><TABLE id="))
0070 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_2t cellpadding=0 cellspacing=0 style='margin-right: -35px;z-index:0;position:relative;cursor:pointer'> <tbody><TR onclick='showContent("))
0071 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],",7,2,3)'><TD><img id="))
0072 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_2s src ='/jde/share/images/tab_start_n.png'/></TD><TD id="))
0073 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_2m background = '/jde/share/images/tab_mid_n.png' align='center' valign='center' width=93> <a id="))
0074 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_2a class='popup_b' href='#' onclick='showContent("))
0075 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],",7,2,3)'>"))
0076 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],[VA evt_szTempHTMLString_A030])
0077 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],[TV Process])
0078 VA evt_szTempHTMLString_A030 = "</a></td> <TD style='z-index:50;position:relative' ><img id="
0079 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_2e src='/jde/share/images/tab_end_n.png' width=37 height=19/></TD> </TR></tbody></TABLE><td><TABLE id="))
0080 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_3t cellpadding=0 cellspacing=0 style='margin-right: -20px;z-index:0;position:relative;cursor:pointer'> <tbody><TR onclick='showContent("))
0081 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],",7,3,3)'><TD><img id="))
0082 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_3s src ='/jde/share/images/tab_start_n.png'/></TD><TD id="))
0083 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_3m background = '/jde/share/images/tab_mid_n.png' align='center' valign='center' width=83 > <a id="))
0084 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_3a class='popup_b' href='#' onclick='showContent("))
0085 VA evt_szTempHTMLString_A030 = concat([VA evt_szTempHTMLString_A030],concat([VA evt_UniqueNumber_DL01],",7,3,3)'>"))
0086 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],[VA evt_szTempHTMLString_A030])
0087 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],[TV Sales Code])
0088 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],"</a></td> <TD style='z-index:50;position:relative' ><img id=")
0089 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_3e src= '/jde/share/images/tab_end_n.png' width=37 height=19/></TD></TR></tbody> </TABLE></td></tr></tbody></table>"))
0090 // Main Tab Contents
0091 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],"<div style='border: 2px solid #C2DFFF; WIDTH: 375px; HEIGHT: 100px;'><div id='")
0092 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],concat([VA evt_UniqueNumber_DL01],"_7_1'> <table width=100% height=70%><tbody>"))
0093 // Stock Type
...
0199 // Sales Code 5
0200 Retrieve DD Base Row/Column Heading For Languages
        "SRP5" -> BF szDataItem
        VA evt_szDDName_ALPH <- BF szDescriptionRow
        SL LanguagePreference -> BF szLanguagePreference
0201 Get UDC
        "SRP5" -> BF szDataDictionaryItem
        "41" -> BF szSystemCode
        "S5" -> BF szRecordTypeCode
        VA evt_szSalesReportCode5_SRP5 -> BF szUserDefinedCode
        SL LanguagePreference -> BF szLanguagePreference
        VA evt_szUDCDescription_DL01 <- BF szDescription001
        "1" -> BF cSuppressErrorMessage
0202 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],"<tr><td class='popup_ttlen'>")
0203 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],[VA evt_szDDName_ALPH])
0204 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],"</td><td class='popup_tdtan'>")
0205 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],[VA evt_szUDCDescription_DL01])
0206 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],"</td></tr>")
0207 //
0208 VA evt_szHTMLString_A030 = concat([VA evt_szHTMLString_A030],"</tbody></table></div></div>")
0209 Add Segment(FC Information, VA evt_szHTMLString_A030, <Default,Default,0,Default>, <No>, VA evt_iSegmentID_INT01)

Кроме упомянутой выше системной функции Show Popup (Web Only), применяющейся для вызова формы с наведением, существуют еще три системных функции, применяющиеся со всплывающими формами: [Grid] Get Hovered Row (Web Only) - возвращает строку таблицы, над которой произошло событие наведения, [General] Get Collaborate (Web Only) - генерирует HTML-блок, содержащий список контактов с адресами электронной почты для данного AN8 и [General] Set VCard - генерирует ссылку на vCard.

Структура данных формы

Для того, чтобы форма с наведением могла вызываться автоматически (при соответствующих настройках в административных приложениях P958973 и P958974), необходимо создать для нее структуру данных для передачи входных параметров, удовлетворяющую следующему условию: первые два параметра должны быть строковыми и обладать достаточной длиной для принятия соответствующих значений. В первый параметр помещается алиас элемента данных, связанный с элементом управления на форме или колонкой в таблице, для которых определено событие наведения; во второй параметр структуры данных формы помещается значение этого поля формы или ячейки таблицы (см. рис. 9).

Пример структуры данных формы с наведением
Рис. 9. Пример структуры данных формы с наведением.

Элементы пользовательского интерфейса

Как уже говорилось выше, информация на форме с наведением создается путем генерации HTML-блока в обработчике события Dialog is Initialized формы. В принципе, существует несколько стандартных приемов, облегчающих формирование этого HTML-блока. Рассмотрим их подробнее. На рис. 10 представлен пользователський интерфейс всплывающей формы.

Пользователський интерфейс всплывающей формы
Рис. 10. Пользовательcкий интерфейс всплывающей формы.
Вкладки

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

  • Вкладки позволяют выводить информацию более структурировано, в большем объеме, при чем не увеличивая размер формы.
  • Сначала формируются ярлыки вкладок, используя специальные изображения для начала ярлыка (начальные изображение), фона середины ярлыка (среднее изображение) и окончания ярлыка (конечное изображение).
  • Вкладки бывают активные и неактивные. Для формирования ярлыков активных и неактивных вкладок используются отдельные наборы изображений.
  • Тело вкладки содержится в теге <div>. Если вкладка неактивна, то в стиле тега <div> прописывается атрибут display: none.
  • Для переключения активных вкладок используется функция javascript showContent().
  • Для получения детальной информации о формировании HTML-блока со вкладками изучите код соответствующего обработчика события.

Изображения

Для отображения на форме с наведением необходимого изображения, связанного с сотрудником, товаром, поставщиком и т. д., следуйте следующим правилами:

  • Всплывающие формы поддерживают вывод изображений в режимме выполнения.
  • На этапе проектирования на форму необходимо положить элемент управления Image.
  • Для отображения соответствующего изображения используйте системную функцию [General] Set Default MOImage. Это изображение должно быть прикреплено к записи в соответствующей таблице в качестве медиа-объекта. Кроме того, выводится изображение, помеченное как изображение по-умолчанию (к записи в таблице можно прикрепить неограниченное количество изображений).

Витиная карточка (vCard)

На форме с наведением можно разместить ссылку на визитную карточку в формате vCard для дальнейшего прикрепления к сообщению электронной почты. Для этого воспользуйтесь системной функцией [General] Set VCard.

Стандартные формы с наведением

Система поставляется с несколькими готовыми всплывающими формами:

  • Информация из Адресной книги (P01700)
  • Информация о клиенте (P03B700)
  • Информация о сотруднике (P080100)
  • Информация о поставщике (P04700)
  • Информация о номенклатуре (товаре, услуге, продукции, сырье и т. д.) (P41700)