|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Приветствую всех! Столкнулся со следующей проблемой. На странице есть регион, куда должны загружаться данные о произведенных ремонтах по ID из таблицы Клиент Мне не нужны различные табличные варианты (Classic report, Interactive gride) по этому, не знаю правильно или нет, выбрал PL/SQL Dynamic content. К примеру у клиента с ID = 1 в таблице Remont есть 2 связанные записи и я хочу чтобы записи отображались так: Сначала одна, а потом другая --Запись № 1--- 01.09.2019 ремонт двигателя --Запись № 2--- 02.09.2019 Ремонт зеркала В php я делал массивы, которые вместе с табличкой шли в цикле т.е. Запись 1 выбрала данные, потом пошли данные для записи 2, как это правильно сделать в Апексе не могу понять, INTO нельзя т.к. там одно значение? Может Classic report а потом css убирать таблицу...как это правильно делается? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 19:19 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Да, забыл сказать, что 2 записи это для примера, на самом деле их неизвестное количество, может быть 5, 10... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 20:43 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Ну а в чем проблема написать цикл в pl/sql? Раз уж вы делали это на php, вам не сложно будет просто переписать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 09:40 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangel, Куда в регионе их засовывать? И опять таки, если делать "репорты", то columns создаются из запроса, но мне не нужны табличные варианты, а INTO подразумевают ITEMS куда их нужно засунуть, но я не знаю сколько их... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 10:29 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Javl, СТоит потратить время на изучение классиков APEX-а Denes Kubicek - ApEx Demo Applications https://apex.oracle.com/pls/otn/f?p=31517 https://apex.oracle.com/pls/otn/f?p=193000 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:11 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Javl, На pl/sql можно сгенерировать страничку целиком самому. Вам же надо только регион. Быстро пример Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:22 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangel, Это сработает только один раз - при загрузке/рефреше страницы Мой вариант подходит под условие задачи больше Допустим 1) в левой панели есть region с грид (master) с набором id и names, а в правой панели (slave) просто region - как бы подробности по сабжу 2) одна из колонок грида помечается как ссылка javascript:$s('P1_SELECTED_ID','#ID#'); 3) клик по этой колонке вызывает изменение item P1_SELECTED_ID на заданное значение ID 4) по изменению P1_SELECTED_ID срабатывает DA, которую я привел 5) SetValue в составе DA полностью перерисует правую панель новым контентом ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:37 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhV, Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:41 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Либо второй вариант без плагина, сгенерированный HTML код, вставляется с помощию JS, и она каждый раз вызывается при изменении какит то элементов ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:42 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhV, Спасибо за ответ!!! На сколько это правильный метод, я не очень понимаю почему в репорт все выбирается без проблем, а чтобы просто получить текст в столбик нужно сделать столько манипуляций? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:45 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangelZhV, Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся. Не нужен плагин, все гораздо проще Посмотрите картинку - в составе DA после SetValue стоит другая ACTION - REFRESH как раз на этот region ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:45 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangelZhV, Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся. Регион обновляется один раз при загрузке страницы или я не правильно понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:46 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
JavlНа сколько это правильный метод, я не очень понимаю почему в репорт все выбирается без проблем, а чтобы просто получить текст в столбик нужно сделать столько манипуляций? Это вы никогда не видели чем занимаются люди по профессии "HTML-верстка" JavlРегион обновляется один раз при загрузке страницы или я не правильно понимаю? Да. Это было всегда для HTML Чтобы регион обновился нужно либо обновить(перезагрузить) всю страницу Либо по заданному событию (клик или смена позиции в гриде или tree => изменение item) перезаполнить и отрефрешить заданный region DA - грандиозный и суперэффективный инструмент APEX-а осваивайте ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 11:57 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
JavlblkangelZhV, Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся. Регион обновляется один раз при загрузке страницы или я не правильно понимаю? Как напишите. Если мне необходимо динамически обновлять регион "свобственного производства", то я использую плагин. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:11 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangelJavl, На pl/sql можно сгенерировать страничку целиком самому. Вам же надо только регион. Быстро пример Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Хороший вариант, в принципе подходит, буду дорабатывать!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:22 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhVJavl, СТоит потратить время на изучение классиков APEX-а Denes Kubicek - ApEx Demo Applications https://apex.oracle.com/pls/otn/f?p=31517 https://apex.oracle.com/pls/otn/f?p=193000 В приведенном Вами примере мне не совсем понятно items P1_SEL_ADDR сначала записываются данные записи 1, а потом записи 2 и т.д.? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:27 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangelЕсли мне необходимо динамически обновлять регион "свобственного производства", то я использую плагин. Хозяин-барин Но если бы я сидел на code-review - я бы такой код "зарубил" Зачем использовать костыли если есть штатные инструменты APEX-а Кто-нибудь проверял ваш плагин на работоспосообность в разных ОС и броузерах? Сохранит ли этот плагин работоспособность при обновлении версии APEX-а? Очень многие плагины, писаные по APEX4, после 5-ки "свалились" Насчет стабильности APEX-ого рефреша я почему-то уверен Насчет вашего примера с использованием sys.htp.p я бы сначала собрал весь HTML-контент в одну varchar2(32000) (! только не забывать, что первод строки в html - это '<br>')) а затем бы все выдал одной sys.htp.p() Быстрее будет - каждая команда вывода включает кучу функций/событий в html-engine , и лучше делать это один раз ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:35 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhVblkangelЕсли мне необходимо динамически обновлять регион "свобственного производства", то я использую плагин. Хозяин-барин Но если бы я сидел на code-review - я бы такой код "зарубил" Зачем использовать костыли если есть штатные инструменты APEX-а Кто-нибудь проверял ваш плагин на работоспосообность в разных ОС и броузерах? Сохранит ли этот плагин работоспособность при обновлении версии APEX-а? Очень многие плагины, писаные по APEX4, после 5-ки "свалились" Конечно, и не один плагин был написан ZhVНасчет вашего примера с использованием sys.htp.p я бы сначала собрал весь HTML-контент в одну varchar2(32000) (! только не забывать, что первод строки в html - это '<br>')) а затем бы все выдал одной sys.htp.p() Быстрее будет - каждая команда вывода включает кучу функций/событий в html-engine , и лучше делать это один раз Тогда уже надо собирать в CLOB, так как html разметка может не ограничится varchar2, и выплевыввать в цикле по АКЦЕНТИРУЮ по 8192, а не по 32к. Пример: Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:49 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Javl В приведенном Вами примере мне не совсем понятно items P1_SEL_ADDR сначала записываются данные записи 1, а потом записи 2 и т.д.? В P1_SEL_ADDR записывается текст адреса из той строки(row) грида, на которой я кликнул По клику срабатывает event и правая панель (подбор адреса ФИАС по степени совпадения) полностью переририсовывется Вот так это выглядит ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:54 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangel ... Тогда уже надо собирать в CLOB, так как html разметка может не ограничится varchar2, и выплевыввать в цикле по АКЦЕНТИРУЮ по 8192, а не по 32к. ... Да нормально выводится 32k Это между прочим довольно много Может быть 8k - это было в старых версиях Вот встроенный просмотрщик XML в модальном регионе - как раз сделан по методе - 32к за один раз в htp.p ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:08 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Это как раз в новых версиях, так как появились кодировки с размером в 4 байта, и если Вы хотите, как вы говорите, чтобы работало везде, надо использовать 8192. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:10 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
А как известно, лентяи переделывают трижды :) Один раз сделал и забыл. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:11 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
blkangelЭто как раз в новых версиях, так как появились кодировки с размером в 4 байта, и если Вы хотите, как вы говорите, чтобы работало везде, надо использовать 8192. :) APEX на web-side выступает "клиентом" по отношению к своей же базе и подчиняется законам HTML Кодировки хранения в БД никакого отношения к отображению в броузере не имеют. Кодировка всех страниц APEX-приложения задается глобально в APEX-template, как правило utf-8 Кодировку текущей страницы легко узнать "Исходный код" Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ладно. Я заканчиваю с компараторством Надеюсь топик стартер получил нужные ответы ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:30 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhVJavlВ приведенном Вами примере мне не совсем понятно items P1_SEL_ADDR сначала записываются данные записи 1, а потом записи 2 и т.д.? В P1_SEL_ADDR записывается текст адреса из той строки(row) грида, на которой я кликнул По клику срабатывает event и правая панель (подбор адреса ФИАС по степени совпадения) полностью переририсовывется Вот так это выглядит В Вашем примере по клику открывается одна запись, у меня их может быть N количество. Я изначально сделал с курсором, но items принимают только одно значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:37 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
JavlВ Вашем примере по клику открывается одна запись, у меня их может быть N количество. Я изначально сделал с курсором, но items принимают только одно значение. Мой пример - по моей задаче. Ваш пример можно было бы решить похоже Слева - клиенты со своими ФИО и ID (марка машины?) По клику на заданной строке левого грида выбирается id клиента (причем буквально P1_SELECTED_ID=1234) и по этому id в скрипте DA делается выборка и генерится HTML-контент Этот контент отображается справа - все записи по ремонту У вас другие идеи? Ну все в ваших руках. Вам решать и делать Но (ИМХО) освоение новых технологий способом изобретения "особого собственного пути" - очень неэффективно У APEX-а довольно много sample. Еще можно сходить к Кубичеку - посмотреть, поучиться Лучше взять готовые работающие примеры и попытаться адаптировать к своим задачам, (можно просто тупо копировать страницы из сэмплов в свое приложение) чем придумывать свои, которые могут быть заведомо неработоспособны ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:57 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhVJavlВ Вашем примере по клику открывается одна запись, у меня их может быть N количество. Я изначально сделал с курсором, но items принимают только одно значение. Мой пример - по моей задаче. Ваш пример можно было бы решить похоже Слева - клиенты со своими ФИО и ID (марка машины?) По клику на заданной строке левого грида выбирается id клиента (причем буквально P1_SELECTED_ID=1234) и по этому id в скрипте DA делается выборка и генерится HTML-контент Этот контент отображается справа - все записи по ремонту У вас другие идеи? Ну все в ваших руках. Вам решать и делать Но (ИМХО) освоение новых технологий способом изобретения "особого собственного пути" - очень неэффективно У APEX-а довольно много sample. Еще можно сходить к Кубичеку - посмотреть, поучиться Лучше взять готовые работающие примеры и попытаться адаптировать к своим задачам, (можно просто тупо копировать страницы из сэмплов в свое приложение) чем придумывать свои, которые могут быть заведомо неработоспособны Так я не изобретаю, а наоборот спрашиваю т.к. уверен, что в Апексе это все предусмотрено и не нужно изобретать велосипед! Тогда еще раз вернемся к моим проблемам: Есть Table1 это Клиенты: ID, F, I O Table2 ремонтные работы ID, ID_T1 (связанное поле), dat_rab, vid_rab На странице есть регион, который уже выбрал из table1 ID в P1_ID и F,I,O Во втором регионе я делаю выборку из table2 по значению P1_ID Если бы я сделал репорт в любом виде select dat_rab, vid_rab from table2 where ID_T1 = :P1_ID то все отлично, в таблицу попадают две строки: 01.09.2019 ремонт двигателя 02.09.2019 Ремонт зеркала Но мне нужна не таблица и я выбрал PL/SQL Dynamic content Возникает вопрос как это сделать, исходя из Вашего примера? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 14:10 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Javl.... Возникает вопрос как это сделать, исходя из Вашего примера? По отношению к моему примеру 1) убрать грид справа 2) регион хидера расширить вниз (допустим 750 пикселей) у него есть опция , которая задст высоту "Custom Attributes" : style="height:750px;margin:0;overflow:hidden;" (можно назвать по другому - это уже не хидер а боди) 3) как в моем примере 11:11 создать DA и PL/SQL ACTION на этот самый регион то ли хидера то ли боди 4) в теле функции PL/SQL ACTION открыть курсор по запросу 5) на каждую запись создавать "одноместный" html-фрагмент со всемы нужными тэгами - болд,колор,шрифт,отступы 6) все "одноместные" фрагменты саккумулировать в одну большую v_big varchar2(32000) не забывая добавлять '<BR>' 7) после выхода из цикла весь varchar2 выдать в html-машину sys.htp.p(v_big) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 14:46 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhVJavl.... Возникает вопрос как это сделать, исходя из Вашего примера? По отношению к моему примеру 1) убрать грид справа 2) регион хидера расширить вниз (допустим 750 пикселей) у него есть опция , которая задст высоту "Custom Attributes" : style="height:750px;margin:0;overflow:hidden;" (можно назвать по другому - это уже не хидер а боди) 3) как в моем примере 11:11 создать DA и PL/SQL ACTION на этот самый регион то ли хидера то ли боди 4) в теле функции PL/SQL ACTION открыть курсор по запросу 5) на каждую запись создавать "одноместный" html-фрагмент со всемы нужными тэгами - болд,колор,шрифт,отступы 6) все "одноместные" фрагменты саккумулировать в одну большую v_big varchar2(32000) не забывая добавлять '<BR>' 7) после выхода из цикла весь varchar2 выдать в html-машину sys.htp.p(v_big) Спасибо!!!!!!!!! 1. varchar2(32000) не слишком много, у меня в регионах текст, фото в отдельном регионе и это отдельная песня 2. Почему вы считаете, что так лучше/быстрее, чем просто loop, как предложил blkangel ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 14:53 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Стоп. Дискуссия насчет htp.p меня слишком увлекла В данном случае пункт 7 отменяется вообще Просто возврат созданной строки Код: plsql 1. 2. 3.
Насчет 32000 ... а че жалеть то - лучше с запасом ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 14:58 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhVСтоп. Дискуссия насчет htp.p меня слишком увлекла В данном случае пункт 7 отменяется вообще Просто возврат созданной строки Код: plsql 1. 2. 3.
Насчет 32000 ... а че жалеть то - лучше с запасом А куда он ее выведет, тогда в ITEMS и все опять к одному... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 15:04 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
32к - это достаточно много , мне до сих пор хватало Картинки нипричем - они в любом случае задаются ссылками 'img src=' Если мало - ну тогда попробуйте CLOB Здесь приведены 2 принципиально разных способа формирования региона с помощью "прямой/ручной" html-разметки 1) обьявить регион динамическим и заполнить его анонимной pl/sql ПРОЦЕДУРОЙ , которая с помощью htp.p разметит регион но делается это только 1 раз при загрузке или полном обновлении страницы 2) создать DA , которая по заданному событию с помощью анонимной pl-sql ФУНКЦИИ выгрузит в указанный вами регион весь требуемый контент сколько раз произойдет событие (клики на гриде) столько раз и будет перестроен регион ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 15:09 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
Javl А куда он ее выведет, тогда в ITEMS и все опять к одному... Еще раз посмотрите на картинку 11:11 там внизу - "Affected Elements" Это целиком region c заданным именем ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 15:13 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhV32к - это достаточно много , мне до сих пор хватало Картинки нипричем - они в любом случае задаются ссылками 'img src=' Если мало - ну тогда попробуйте CLOB Здесь приведены 2 принципиально разных способа формирования региона с помощью "прямой/ручной" html-разметки 1) обьявить регион динамическим и заполнить его анонимной pl/sql ПРОЦЕДУРОЙ , которая с помощью htp.p разметит регион но делается это только 1 раз при загрузке или полном обновлении страницы 2) создать DA , которая по заданному событию с помощью анонимной pl-sql ФУНКЦИИ выгрузит в указанный вами регион весь требуемый контент сколько раз произойдет событие (клики на гриде) столько раз и будет перестроен регион Меня интересовала разница 1 и 2 метода в плане самой PL/SQL процедуры формирование htp.p и loop, аналог того, что я делал на PHP и курсор, в который загружаются данные и делается html разметка... В любом случае спасибо Вам обоим за ликбез!!! Тем более еще кое-что почерпнул из Вашей дискуссии. Мне нужно получить данные при загрузке страницы один раз, но на будущее я запомню второй вариант т.к. он 100% пригодится! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 15:18 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
А вот, еще важно сообщить "необстрелянному" В той же картинке видна опция "Escape special chars" При создании DA она всегда выставляется по умолчанию в "Yes" Надо выключить Иначе APEX проигнорит ВСЮ вашу html разметку и выдаст просто неформатированный текст ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 15:25 |
|
Продолжение вопросов как сделать в Апексе!
|
|||
---|---|---|---|
#18+
ZhVА вот, еще важно сообщить "необстрелянному" В той же картинке видна опция "Escape special chars" При создании DA она всегда выставляется по умолчанию в "Yes" Надо выключить Иначе APEX проигнорит ВСЮ вашу html разметку и выдаст просто неформатированный текст Спасибо огромное!!!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 16:05 |
|
|
start [/forum/topic.php?all=1&fid=50&tid=1873992]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 289ms |
total: | 536ms |
0 / 0 |