Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle APEX Новый топик    Ответить
 LOV как в Forms для Interactive Grid  [new]
S-V-E
Member

Откуда:
Сообщений: 2
Здравствуйте!

Собственно, в APEX 5.1.2.00.09 необходим именно такой ЛОВ с таким же поведением как в Forms: чтобы показывал произвольное количество столбцов и возвращал значения в элементы грида текущей строки.

Popup LOV не подходит. К тому же заметил, что грид с большим объемом данных и несколькими такими элементами заметно тормозит. Видимо это обусловлено спецификой работы Popup LOV, когда для вывода отображаемого значения в грид он делает отдельный подзапрос (видно в отладчике). Но утверждать не берусь, потому что в Апексе я новичок.

Было бы замечательно найти готовый плагин с подобным функционалом. Может быть кто знает такой и поделится? Мои собственные поиски привели только к Super LOV. Однако с гридом он не дружит (возвращает только первую пару полей как Popup LOV), да и тормоза те же (наверняка из-за того, что он основан та том же Popup LOV).

Поэтому логичным кажется написание собственного плагина. Совсем-совсем простого, ибо, как я уже писал - в Апексе я новичок, так же как в HTML/CSS/JavaScript. Кнопочку в ячейке грида я уже нарисовал :). По ее нажатию хочу показывать модальную страницу с гридом. Регионов с гридами на странице будет столько, сколько будет нужно ЛОВов. Регионы будут с условным отображением, чтобы показывался тот, чье имя соответствует значению свойства в моем элементе. После выбора записи в "модальном" гриде она записывается в некий промежуточный объект (созданный, например, с помощью jQuery), а потом из объекта садится в элементы основного грида.

Такая вот задумка, которая по крайней мере должна помочь против тормозов. Буду рад прочитать ваши идеи. Возможно есть другие способы решения описанных здесь задач и проблем.
15 авг 17, 21:26    [20726570]     Ответить | Цитировать Сообщить модератору
 Re: LOV как в Forms для Interactive Grid  [new]
SvDev
Member

Откуда: Челябинск
Сообщений: 1945
S-V-E,

Не знаю, про какие тормоза вы говорите, всё работает быстро.
Если вас устраивает Popup Lov и плагины modal lov, разберитесь, почему тормозит.
Для этого тщательно изучите такие вещи как: apex debug, планы запросов, пагинация, без них обсуждать ваш случай смысла нет.

Если коробочные items не устраивают, тогда используйте отдельную страницу с регионом, page mode: modal и взаимодействие через dynamic actions на обоих страницах, изучите стандартные возможности DA, какие есть, для осуществления такого взаимодействия.

Написание / исправление плагинов - вопрос не для новичка, и здесь вам придётся разбираться самостоятельно.
17 авг 17, 06:28    [20729887]     Ответить | Цитировать Сообщить модератору
 Re: LOV как в Forms для Interactive Grid  [new]
S-V-E
Member

Откуда:
Сообщений: 2
SvDev
Если коробочные items не устраивают, тогда используйте отдельную страницу с регионом, page mode: modal и взаимодействие через dynamic actions на обоих страницах, изучите стандартные возможности DA, какие есть, для осуществления такого взаимодействия.


Собственно, так и делаю. На странице диалога использую DA Close Dialog с указанием возвращаемых элементов (Items to Return) и читаю их значения в DA Dialog Closed на основной странице. Но дело в том, что на этой странице может быть несколько гридов и значения нужно записывать в тот грид, который вызвал диалог. Как это определить? Как определить владельца диалога?

Диалог открываю с помощью JS-функции apex.navigation.dialog. Я решил передавать в ее параметр pTriggeringElement значение Static ID грида, чтобы потом из диалога его же вернуть и в DA Dialog Closed по нему строить условие. Но проблема в том, что я не знаю как прочитать параметр pTriggeringElement в странице диалога.

Короче, мне нужно, чтобы диалог вернул Static ID грида. Хотя может есть какой-то более простой способ решения?
23 авг 17, 11:24    [20743441]     Ответить | Цитировать Сообщить модератору
 Re: LOV как в Forms для Interactive Grid  [new]
shurikt
Member

Откуда: Казахстан
Сообщений: 244
SvDev
S-V-E,

Не знаю, про какие тормоза вы говорите, всё работает быстро.


У нас тоже грид тормозит.

Насколько мы поняли Popup LOV выполняет запросы для каждого элемента каждой строчки грида, а у нас таких ЛОВов по 8 штук в строке, т.о. для прорисовки одного грида с 25 строками делается 200 запросов, возвращающих наименования элементов из LOVов. Тут и появляются тормоза. Можно ли изменить такое поведение грида или ЛОВов?
В представлении по которому строится грид наименования уже подтягиваются, нам не надо чтоб ЛОВ их перезапрашивал их при отображении.
23 авг 17, 13:45    [20744000]     Ответить | Цитировать Сообщить модератору
 Re: LOV как в Forms для Interactive Grid  [new]
SvDev
Member

Откуда: Челябинск
Сообщений: 1945
S-V-E,

Если еще актуально,
с момента создания темы на apex-plugins.com / apex.world вышел плагин Modal LOV IG.

Отвечая на изначальный вопрос:

В Popup LOV есть такое известное свойство:
Input Field: Not Enterable, Show Display Value and Store Return Value

Если его выбрать, то апекс подставляет вместо значения столбца, значения из запроса, указанного в поле LOV (List Of Values).
Для этого апекс соединяет эти 2 запроса (автоматически дописывается подзапрос).
Соответственно стоит учитывать при написании запросов, что эти два поля будут соединяться.

Если выбрать другое значения Input Field: Enterable, Show and Store Return Value, то и подзапроса не будет.
Обычно это не вызывает проблем, но если они есть, тогда стоит обратить внимание и на другие поля:

Display Extra Values
Value Required
Show Total Row Count
Индексы, планы запросов.

Касательно apex.navigation.dialog, он не вызывается напрямую (иначе возникнут проблемы с контрольной суммой строки), вызывается, например, через apex_util.prepare_url, куда передается какие-то значения через url (в результате открывается модальное окно), эти же значения можно вернуть обратно. На вызывающей странице, как один из вариантов, если таких на один регион получается несколько DA, можно сделать один общий DA, он может вызвать другие DA c custom event (с помощью $("#region_static_id").triggerHandler("DOJOB"), - DOJOB - custom event ) и у других DA будет javascript condition, соответствующий возвращенному значению, и эти DA могут, как вариант, уже устанавливать значение соответствующего поля IG. (алгоритм приблизительный)

2shurikt,

Не так. Дописываются подзапросы к основному запросу, и этот основной запрос выполняется только один раз на каждую отрисовку страницы.
2 окт 17, 18:39    [20837179]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle APEX Ответить