Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Продолжение вопросов как сделать в Апексе! / 25 сообщений из 35, страница 1 из 2
03.09.2019, 19:19
    #39856839
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
Приветствую всех!
Столкнулся со следующей проблемой.
На странице есть регион, куда должны загружаться данные о произведенных ремонтах по 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 убирать таблицу...как это правильно делается?
...
Рейтинг: 0 / 0
03.09.2019, 20:43
    #39856864
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
Да, забыл сказать, что 2 записи это для примера, на самом деле их неизвестное количество, может быть 5, 10...
...
Рейтинг: 0 / 0
04.09.2019, 09:40
    #39856958
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
Ну а в чем проблема написать цикл в pl/sql?
Раз уж вы делали это на php, вам не сложно будет просто переписать.
...
Рейтинг: 0 / 0
04.09.2019, 10:29
    #39856987
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
blkangel,

Куда в регионе их засовывать?
И опять таки, если делать "репорты", то columns создаются из запроса, но мне не нужны табличные варианты, а INTO подразумевают ITEMS куда их нужно засунуть, но я не знаю сколько их...
...
Рейтинг: 0 / 0
04.09.2019, 11:11
    #39857012
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
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
...
Рейтинг: 0 / 0
04.09.2019, 11:22
    #39857026
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
Javl,

На pl/sql можно сгенерировать страничку целиком самому. Вам же надо только регион. Быстро пример
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Begin
    sys.htp.p('<head>');
    sys.htp.p('</head>');
    sys.htp.p('<body>');
    <<a>>
    for a in (
        select id, name_org from table1
    ) loop
        sys.htp.p('<div>'||a.name_org||'');
        <<b>>
        for b in (
            select name_repair from table2 where id_table1=a.id
        ) loop
            sys.htp.p('<li>'||b.name_repair||'</li>');
        end loop b;
        sys.htp.p('</ul>');
    end loop a;
    sys.htp.p('</body>');
End;
...
Рейтинг: 0 / 0
04.09.2019, 11:37
    #39857036
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
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 полностью перерисует правую панель новым контентом
...
Рейтинг: 0 / 0
04.09.2019, 11:41
    #39857041
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
ZhV,

Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся.
...
Рейтинг: 0 / 0
04.09.2019, 11:42
    #39857043
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
Либо второй вариант без плагина, сгенерированный HTML код, вставляется с помощию JS, и она каждый раз вызывается при изменении какит то элементов
...
Рейтинг: 0 / 0
04.09.2019, 11:45
    #39857044
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
ZhV,

Спасибо за ответ!!!

На сколько это правильный метод, я не очень понимаю почему в репорт все выбирается без проблем, а чтобы просто получить текст в столбик нужно сделать столько манипуляций?
...
Рейтинг: 0 / 0
04.09.2019, 11:45
    #39857045
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
blkangelZhV,

Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся.

Не нужен плагин, все гораздо проще
Посмотрите картинку - в составе DA после SetValue стоит другая ACTION - REFRESH как раз на этот region
...
Рейтинг: 0 / 0
04.09.2019, 11:46
    #39857047
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
blkangelZhV,

Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся.

Регион обновляется один раз при загрузке страницы или я не правильно понимаю?
...
Рейтинг: 0 / 0
04.09.2019, 11:57
    #39857056
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
JavlНа сколько это правильный метод, я не очень понимаю почему в репорт все выбирается без проблем, а чтобы просто получить текст в столбик нужно сделать столько манипуляций?
Это вы никогда не видели чем занимаются люди по профессии "HTML-верстка"

JavlРегион обновляется один раз при загрузке страницы или я не правильно понимаю?
Да. Это было всегда для HTML

Чтобы регион обновился нужно либо обновить(перезагрузить) всю страницу
Либо по заданному событию (клик или смена позиции в гриде или tree => изменение item)
перезаполнить и отрефрешить заданный region

DA - грандиозный и суперэффективный инструмент APEX-а
осваивайте
...
Рейтинг: 0 / 0
04.09.2019, 12:11
    #39857065
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
JavlblkangelZhV,

Тогда вам надо плагин писать, если вы хотите чтобы Ваш регион обновлялся.

Регион обновляется один раз при загрузке страницы или я не правильно понимаю?

Как напишите.
Если мне необходимо динамически обновлять регион "свобственного производства", то я использую плагин.
...
Рейтинг: 0 / 0
04.09.2019, 12:22
    #39857078
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
blkangelJavl,

На pl/sql можно сгенерировать страничку целиком самому. Вам же надо только регион. Быстро пример
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Begin
    sys.htp.p('<head>');
    sys.htp.p('</head>');
    sys.htp.p('<body>');
    <<a>>
    for a in (
        select id, name_org from table1
    ) loop
        sys.htp.p('<div>'||a.name_org||'');
        <<b>>
        for b in (
            select name_repair from table2 where id_table1=a.id
        ) loop
            sys.htp.p('<li>'||b.name_repair||'</li>');
        end loop b;
        sys.htp.p('</ul>');
    end loop a;
    sys.htp.p('</body>');
End;



Хороший вариант, в принципе подходит, буду дорабатывать!!!
...
Рейтинг: 0 / 0
04.09.2019, 12:27
    #39857084
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
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 и т.д.?
...
Рейтинг: 0 / 0
04.09.2019, 12:35
    #39857094
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
blkangelЕсли мне необходимо динамически обновлять регион "свобственного производства", то я использую плагин.

Хозяин-барин
Но если бы я сидел на code-review - я бы такой код "зарубил"
Зачем использовать костыли если есть штатные инструменты APEX-а

Кто-нибудь проверял ваш плагин на работоспосообность в разных ОС и броузерах?
Сохранит ли этот плагин работоспособность при обновлении версии APEX-а?
Очень многие плагины, писаные по APEX4, после 5-ки "свалились"

Насчет стабильности APEX-ого рефреша я почему-то уверен

Насчет вашего примера с использованием sys.htp.p
я бы сначала собрал весь HTML-контент в одну varchar2(32000)
(! только не забывать, что первод строки в html - это '<br>'))
а затем бы все выдал одной sys.htp.p()
Быстрее будет - каждая команда вывода включает кучу функций/событий в html-engine , и лучше делать это один раз
...
Рейтинг: 0 / 0
04.09.2019, 12:49
    #39857109
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
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.
for j in 1..ceil(dbms_lob.getlength(l_clob)/8192) loop
    sys.htp.prn(dbms_lob.substr(l_clob,8192,j*8192-(8192-1)));
end loop;
...
Рейтинг: 0 / 0
04.09.2019, 12:54
    #39857115
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
Javl
В приведенном Вами примере мне не совсем понятно items P1_SEL_ADDR сначала записываются данные записи 1, а потом записи 2 и т.д.?

В P1_SEL_ADDR записывается текст адреса из той строки(row) грида, на которой я кликнул
По клику срабатывает event и правая панель (подбор адреса ФИАС по степени совпадения) полностью переририсовывется
Вот так это выглядит
...
Рейтинг: 0 / 0
04.09.2019, 13:08
    #39857128
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
blkangel
...
Тогда уже надо собирать в CLOB, так как html разметка может не ограничится varchar2, и выплевыввать в цикле по АКЦЕНТИРУЮ по 8192, а не по 32к.
...

Да нормально выводится 32k
Это между прочим довольно много
Может быть 8k - это было в старых версиях

Вот встроенный просмотрщик XML в модальном регионе -
как раз сделан по методе - 32к за один раз в htp.p
...
Рейтинг: 0 / 0
04.09.2019, 13:10
    #39857129
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
Это как раз в новых версиях, так как появились кодировки с размером в 4 байта, и если Вы хотите, как вы говорите, чтобы работало везде, надо использовать 8192.
...
Рейтинг: 0 / 0
04.09.2019, 13:11
    #39857131
blkangel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
А как известно, лентяи переделывают трижды :) Один раз сделал и забыл.
...
Рейтинг: 0 / 0
04.09.2019, 13:30
    #39857151
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
blkangelЭто как раз в новых версиях, так как появились кодировки с размером в 4 байта, и если Вы хотите, как вы говорите, чтобы работало везде, надо использовать 8192.
:)
APEX на web-side выступает "клиентом" по отношению к своей же базе и подчиняется законам HTML
Кодировки хранения в БД никакого отношения к отображению в броузере не имеют.
Кодировка всех страниц APEX-приложения задается глобально в APEX-template, как правило utf-8

Кодировку текущей страницы легко узнать "Исходный код"
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="ru" xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
  <title>Продолжение вопросов как сделать в Апексе! / Oracle APEX / Sql.ru</title>
  <meta http-equiv="Content-Type" content="text/html;charset=windows-1251" />
  <link title="Sql.ru Forum search" type="application/opensearchdescription+xml"  rel="search" href="https://www.sql.ru/forum/provider.xml"/>
  <link rel="stylesheet" type="text/css" href="/css/actualforum2.min.css?v=4" media="screen" />



Ладно. Я заканчиваю с компараторством
Надеюсь топик стартер получил нужные ответы
...
Рейтинг: 0 / 0
04.09.2019, 13:37
    #39857156
Javl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
ZhVJavlВ приведенном Вами примере мне не совсем понятно items P1_SEL_ADDR сначала записываются данные записи 1, а потом записи 2 и т.д.?

В P1_SEL_ADDR записывается текст адреса из той строки(row) грида, на которой я кликнул
По клику срабатывает event и правая панель (подбор адреса ФИАС по степени совпадения) полностью переририсовывется
Вот так это выглядит
В Вашем примере по клику открывается одна запись, у меня их может быть N количество.
Я изначально сделал с курсором, но items принимают только одно значение.
...
Рейтинг: 0 / 0
04.09.2019, 13:57
    #39857175
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Продолжение вопросов как сделать в Апексе!
JavlВ Вашем примере по клику открывается одна запись, у меня их может быть N количество.
Я изначально сделал с курсором, но items принимают только одно значение.

Мой пример - по моей задаче.

Ваш пример можно было бы решить похоже
Слева - клиенты со своими ФИО и ID (марка машины?)
По клику на заданной строке левого грида выбирается id клиента (причем буквально P1_SELECTED_ID=1234)
и по этому id в скрипте DA делается выборка и генерится HTML-контент
Этот контент отображается справа - все записи по ремонту

У вас другие идеи?
Ну все в ваших руках. Вам решать и делать

Но (ИМХО) освоение новых технологий способом изобретения "особого собственного пути" - очень неэффективно
У APEX-а довольно много sample. Еще можно сходить к Кубичеку - посмотреть, поучиться
Лучше взять готовые работающие примеры и попытаться адаптировать к своим задачам,
(можно просто тупо копировать страницы из сэмплов в свое приложение)
чем придумывать свои, которые могут быть заведомо неработоспособны
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Продолжение вопросов как сделать в Апексе! / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]