powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
14 сообщений из 14, страница 1 из 1
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37663413
Rikki-Tikki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Задача такая:
в pl sql функции валидации на Tabular form column пройтись по всем строкам на форме и получить значения column-ов в этих других строках.

Как обращаться к column-ам строки, на которой находится column, для которого пишем валидацию понятно - это просто :COLUMN_NAME.

Вот нашла, что в apex 4.1 есть встроенные столбцы, среди которых есть "APEX$ROW_NUM". Может, с помощью него можно перемещаться по строкам?

Пожалуйста, помогите. В Oracle® Application Express Application Builder User's Guide
Release 4.1 для обращения к другим строкам не могу найти.
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37663676
Rikki-Tikki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
итак, в валидации на каламне мне нужно каждый раз просматривать значения этого же каламна во всех строках (а именно - считать сумму), имеющихся в данной сессии на форме.
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37664783
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rikki-Tikki,

Еще раз, если :COLUMN_NAME не подходит

SvDevДля этого предназначено apex_item api. И коллекции apex_application.g_fxx. Гуглите.
apex_application.g_fxx рекомендуется использовать совместно с apex_item api, т.к. порядок нумерации коллекций не документирован. (может поменяться в след. версиях). Но можно прямо через apex_application.g_fxx
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37664800
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rikki-Tikki,

И с чем сравнивать получившуюся сумму?

Я похожую проверку делал полностью на клиенте через javascript: пробегался по каждой колонке, подсчитывал сумму, сравнивал с рассчитанным заранее значением. Тут только нужно учитывать особенности обработки чисел с плавающей запятой в js (>>> 1.1+2.2
=3.3000000000000003) + значение, с которым идет сравнение, хранится на странице и его можно ручками править ( в моем случае некритично, иначе передавать ajax-ом и сравнивать на базе)
Рано или поздно все равно придется делать вставки js+ajax, т.к. стандартных апексовых фич становится недостаточно при возрастании сложности логики/интерфейса. Хоть написание вручную и занимает больше времени чем next-next-next в мастерах, по итогу все работает быстрее + тратиться меньше времени на отладку/поддержание кода.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function itog_graf() {
    var f_sum = 0;
    var f_val = 0;
	//в цикле проходим по всем элементам с классом myclass
    $('.myclass').each(function () {
		//умножаем на 10000000, чтобы суммировать целые числа вместо чисел с плавающей запятой
        f_val = parseFloat(this.value.replace(',', '.')) * 10000000;
		//проверка, если в элементе не число, то считаем его за 0
        if (isNaN(f_val)) {
            this.value = 0;
            f_val = 0;
        }
        f_sum = f_val + f_sum;
    });
	//получившийся резльтат записываеся в P37_ITOG
    $s('P37_ITOG', f_sum / 10000000);
	
	//дальше проверка P37_ITOG с рассчитанным ранее значением
}
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37664983
Rikki-Tikki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет SvDev, haXbat. Благодарю за отклик.
SvDev, насколько я поняла, apex_item - пакет, который позволяет создавать итемы на форме. Чем он мне поможет для обращения к уже существующим каламнам на табличной форме - не понятно. В любом случае, документацию читаю дальше.
Что смутило насчет apex_application.g_fxx:
http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21676/apex_app.htm#CHDDADIE Referencing Values Within an On Submit Process
You can reference the values posted by an HTML form using the PL/SQL variable APEX_APPLICATION.G_F01 to APEX_APPLICATION.G_F50. Because this element is an array, you can reference values directly, for example:
FOR i IN 1..APEX_APPLICATION.G_F01.COUNT LOOP
htp.p('element '||I||' has a value of '||APEX_APPLICATION.G_F01(i));
END LOOP;
То есть провернуть этот цикл из примера можно только выполнив сабмит? А мне нужно выполнять это обращение к значениям каламнов при каждом редактировании каламна (валидация).
haXbat,
haXbatИ с чем сравнивать получившуюся сумму?

Со значением из базы данных.
haXbatРано или поздно все равно придется делать вставки js+ajax, т.к. стандартных апексовых фич становится недостаточно при возрастании сложности логики/интерфейса.

Это понятно. Но я js+ajax я полнейший ноль, к сожалению, а время поджимает. Большое спасибо за код. Скажите, пожалуйста, я могу вызвать эту js функцию из функции валидадии каламна? И куда эту функцию поместить?
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37665057
Rikki-Tikki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rikki-TikkiА мне нужно выполнять это обращение к значениям каламнов при каждом редактировании каламна (валидация).

Может, для моего случая больше подходит APEX_UTIL.GET_SESSION_STATE (p_item IN VARCHAR2) RETURN VARCHAR2, ведь мне нужны значения, которые пользователь видит в своей сессии. Только вот имени итема у меня-то нет...
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37665073
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rikki-TikkiПривет SvDev, haXbat. Благодарю за отклик.
SvDev, насколько я поняла, apex_item - пакет, который позволяет создавать итемы на форме. Чем он мне поможет для обращения к уже существующим каламнам на табличной форме - не понятно.
Он в том числе и для реализации manual tabular forms используется. Помочь может тем, что установит фиксированные переменные коллекций. Впрочем по началу советую особо не заморачиваться с ним. Проще забить.

Rikki-TikkiЧто смутило насчет apex_application.g_fxx:
http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21676/apex_app.htm#CHDDADIE Referencing Values Within an On Submit Process
You can reference the values posted by an HTML form using the PL/SQL variable APEX_APPLICATION.G_F01 to APEX_APPLICATION.G_F50. Because this element is an array, you can reference values directly, for example:
FOR i IN 1..APEX_APPLICATION.G_F01.COUNT LOOP
htp.p('element '||I||' has a value of '||APEX_APPLICATION.G_F01(i));
END LOOP;
То есть провернуть этот цикл из примера можно только выполнив сабмит? А мне нужно выполнять это обращение к значениям каламнов при каждом редактировании каламна (валидация).
Вся валидация в апексе сделана через validations, которые срабатывают на Submit. Можно отказаться от этого впользу аякса и килограммов js кода. Вперед и с песней.

Если вас не устраивает сабмит, то js вроде того что предлагает haXbat единственные вариант.
Ничего сложного там нет, нужны лишь небольшие навыки в работе с HTML технологиями.
Другое дело за 5 минут не изучишь это да.
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37665082
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevВся валидация в апексе сделана через validations, которые срабатывают на Submit.
Хотя теоретически можно ведь плагины написать. Которые существенно упростят процесс js валидации. Я пока этим не заморачивался
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #37665184
Rikki-Tikki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SvDevВся валидация в апексе сделана через validations, которые срабатывают на Submit. Можно отказаться от этого впользу аякса и килограммов js кода.
В моем случае выполнение валидации до сабмита не критично, так что, если я правильно вас понимаю, мне будет быстрее разобраться и применить "PL/SQL variable APEX_APPLICATION.G_F01 to APEX_APPLICATION.G_F50" в pl sql коде апексовой валидации, чем с нуля разбираться в javascript.
Таким образом, я сделаю валидацию на уровне страницы, которая будет считать сумму и сравнивать со значением из БД, а при нарушении валидации после сабмита формы пользователь увидит сообщение вроде "сумма такого-то столбца превышает такое-то число".
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #38328707
Фотография maxandsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получилось у меня Js-ом значения прочитать :-( кто знает как???

haXbatRikki-Tikki,

И с чем сравнивать получившуюся сумму?

Я похожую проверку делал полностью на клиенте через javascript: пробегался по каждой колонке, подсчитывал сумму, сравнивал с рассчитанным заранее значением. Тут только нужно учитывать особенности обработки чисел с плавающей запятой в js (>>> 1.1+2.2
=3.3000000000000003) + значение, с которым идет сравнение, хранится на странице и его можно ручками править ( в моем случае некритично, иначе передавать ajax-ом и сравнивать на базе)
Рано или поздно все равно придется делать вставки js+ajax, т.к. стандартных апексовых фич становится недостаточно при возрастании сложности логики/интерфейса. Хоть написание вручную и занимает больше времени чем next-next-next в мастерах, по итогу все работает быстрее + тратиться меньше времени на отладку/поддержание кода.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function itog_graf() {
    var f_sum = 0;
    var f_val = 0;
	//в цикле проходим по всем элементам с классом myclass
    $('.myclass').each(function () {
		//умножаем на 10000000, чтобы суммировать целые числа вместо чисел с плавающей запятой
        f_val = parseFloat(this.value.replace(',', '.')) * 10000000;
		//проверка, если в элементе не число, то считаем его за 0
        if (isNaN(f_val)) {
            this.value = 0;
            f_val = 0;
        }
        f_sum = f_val + f_sum;
    });
	//получившийся резльтат записываеся в P37_ITOG
    $s('P37_ITOG', f_sum / 10000000);
	
	//дальше проверка P37_ITOG с рассчитанным ранее значением
}
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #38329854
Фотография maxandsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В итоге вот что получилось :

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
//==============================================================================
// Функция подсчета итоговой оценки в баллах для оценочного листа
//==============================================================================
function calculateTotal()
{
   var ret = 0;
   var tmp = '';   

   for (var i=1; i<34;i++)
   	 {
         tmp = html_GetElement('f05_'+i).value;
         if (tmp == undefined) {tmp = ''};
   	     ret = ret + Number(tmp);
      };
   
   $s('P3_APPR_SUM_VAL', ret);

    
}
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #38329859
Фотография maxandsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на Report навешен DA OnChange и с помощью APEX_ITEM сделан SELECT_LIST_FROM_QUERY
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #38333732
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rikki-TikkiВ моем случае выполнение валидации до сабмита не критично, так что, если я правильно вас понимаю, мне будет быстрее разобраться и применить "PL/SQL variable APEX_APPLICATION.G_F01 to APEX_APPLICATION.G_F50" в pl sql коде апексовой валидации

P.S. На всякий случай поясняю:
Между сообщениями интервал более 1 года.
G_F тут больше не к месту

делается 2-мя validations, например PL/SQL Function Returning Boolean и Function Returning Error Text
(или тоже самое через page processes + APEX_ERROR.ADD_ERROR)

Первый привязываем к табличной форме с Execution Scope: All Submitted Rows (чтобы всегда выполнялся тот же TRUNCATE_COLLECTION)
Тут проходим для каждой строки и собираем данные в коллекцию, (в примере 3 столбца, ID, COL1_N, COL2_C):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
declare
  l_collection_name varchar2(255) := 'VALIDATION_1_PAGE_10';
begin
  if not apex_collection.collection_exists(p_collection_name => l_collection_name) then
  
    apex_collection.create_collection(p_collection_name => l_collection_name);
  end if;  

  if :APEX$ROW_NUM = 1 then 
    
    APEX_COLLECTION.TRUNCATE_COLLECTION(l_collection_name); 
  end if;

  apex_collection.add_member( p_collection_name => l_collection_name
                            , p_n001 => :ID
                            , p_n002 => :APEX$ROW_NUM
                            , p_c001 => :APEX$ROW_STATUS
                            ...
                            , p_n005 => :COL1_N
                            , p_c005 => :COL2_C );

  return true;
end;



второй - общий, уровня страницы, где собственно сам процесс валидации
(в примере ограничение по столбцу COL1_N, сумма всех строк меньше 100)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
declare
  l_cnt number;
  l_collection_name varchar2(255) := 'VALIDATION_1_PAGE_10';
begin

  -- суммируем старые значения с новыми
  select sum(decode(a.collection_name, null, t.COL1_N, a.n005 )) 
    into l_cnt
  from apex_collections a full join table1 t 
    on a.n001 = t.id 
   and a.collection_name = 'VALIDATION_1_PAGE_10' 
  ;

  if l_cnt > 100 then
   
    return 'Превышена максимальная сумма';
  end if;
    
  return null;
end;



G_F плох тем, что после апгрейда индексы опять могут сместиться,
да и не дело, когда из-за порядка следования столбцов ломается код.
...
Рейтинг: 0 / 0
Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
    #38334201
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevG_F плох тем, что после апгрейда индексы опять могут сместиться

Для 5.0 в Statement of Direction одним из направлений для развития указано изменение табличных форм. Хотят ввести "более лучшую" реализацию, которая будет позволять создавать сразу несколько табличных форм на странице декларативно. Подозреваю, что будут самостоятельно с APEX_COLLECTIONS синхронизировать табличные формы. Или что-то аналогичное введут.

В общем, вероятность изменения индексов или механизма работы с ними очень большая.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Apex 4.1 Tabular form Обращение к column -ам из других строк таблицы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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