powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Кастомизация процесса Multi Row Update
25 сообщений из 42, страница 1 из 2
Кастомизация процесса Multi Row Update
    #38867949
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нашел документированных вариантов такой кастомизации "от вендора".
Варианты от кулибиных типа Update Apex Tabular form with PLSQL преподносят сюрпризы: я не могу "look for the names of the controls, e.g. "f03_0001".
Для формы выбран PK = ROWID. Есть в списке полей и реальный ID, но он "show = 0" (т.е. в html не выводится никак).
И как мне идентифицировать запись, в которой произошли изменения?
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38867956
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КурдльНе нашел документированных вариантов такой кастомизации "от вендора".
Варианты от кулибиных типа Update Apex Tabular form with PLSQL преподносят сюрпризы: я не могу "look for the names of the controls, e.g. "f03_0001".
Для формы выбран PK = ROWID. Есть в списке полей и реальный ID, но он "show = 0" (т.е. в html не выводится никак).
И как мне идентифицировать запись, в которой произошли изменения?

Уверен что никак не выводится?
Если поле hidden, это не означает что его нет, и к нему нельзя обратится в PL/SQL блоке.
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38867959
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КурдльНе нашел документированных вариантов такой кастомизации "от вендора".
Варианты от кулибиных типа Update Apex Tabular form with PLSQL преподносят сюрпризы: я не могу "look for the names of the controls, e.g. "f03_0001".
Для формы выбран PK = ROWID. Есть в списке полей и реальный ID, но он "show = 0" (т.е. в html не выводится никак).
И как мне идентифицировать запись, в которой произошли изменения?

Изначально не понял вопроса, тебе нужно именно строки в которых произошли изменения?
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38867975
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

Вообще-то хотелось бы выявить именно изменившиеся записи.

Но 2-м сортом пойдет и так.

Я нашел идентификатор в массиве: apex_application.g_frowid(i).
Но вот какая фигня - апекс не дает удалить старый процесс ApplyMRU...
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38867987
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, это решилось - надо было последовательность изменить (не дает удалить только первый процесс)
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38867997
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага! теперь ошибка
• ORA-01722: invalid number (Row 1)


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN
   FOR i IN 1 .. APEX_APPLICATION.G_FROWID.COUNT
   LOOP
      UPDATE XXX
         SET XXX_RESULT = APEX_APPLICATION.G_F02 (i)
       WHERE ROWID = APEX_APPLICATION.G_FROWID (i);
   END LOOP;
END;
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868006
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КурдльАга! теперь ошибка
• ORA-01722: invalid number (Row 1)


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
BEGIN
   FOR i IN 1 .. APEX_APPLICATION.G_FROWID.COUNT
   LOOP
      UPDATE XXX
         SET XXX_RESULT = APEX_APPLICATION.G_F02 (i)
       WHERE ROWID = APEX_APPLICATION.G_FROWID (i);
   END LOOP;
END;


ты чекбоксишь строчки?
Цикл бежит только по отмеченным записям.
у тебя примерно так должно быть.

Код: plsql
1.
2.
3.
4.
5.
6.
	for i in 1..apex_application.g_f01.count loop
		select 	
			*
		from table
		where erec_id=to_number(apex_application.g_f02(apex_application.g_f01(i)));
	end loop;
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868010
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelты чекбоксишь строчки?
Цикл бежит только по отмеченным записям.
у тебя примерно так должно быть.

Код: plsql
1.
2.
3.
4.
5.
6.
	for i in 1..apex_application.g_f01.count loop
		select 	
			*
		from table
		where erec_id=to_number(apex_application.g_f02(apex_application.g_f01(i)));
	end loop;



Не чекбоксю. Юзеру не дозволено удалять строки.
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868015
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдль,

Т.е для понимания, отмеченная галочкой строчка, она может быть ROWID=3, а в цикле она встретится на первом витке и оракл попытается сделать как то так
Код: plsql
1.
update table set field='bla bla' where rowid=1;
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868017
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдльblkangelты чекбоксишь строчки?
Цикл бежит только по отмеченным записям.
у тебя примерно так должно быть.

Код: plsql
1.
2.
3.
4.
5.
6.
	for i in 1..apex_application.g_f01.count loop
		select 	
			*
		from table
		where erec_id=to_number(apex_application.g_f02(apex_application.g_f01(i)));
	end loop;



Не чекбоксю. Юзеру не дозволено удалять строки.

Тогда у тебя проблемы :)
Тогда тебе необходимо организовывать цикл по другому полю, которое будет всегда заполнено например всегда "1". Или тут ты можешь сделать, так что при изменение записи туда единица писалась и тогда ты решишь проблему "Измененной строчки". :)
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868019
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

чекбоксов перед строками нет. Только поля данных и ячейки со статическим текстом.
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868042
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдльblkangel,

чекбоксов перед строками нет. Только поля данных и ячейки со статическим текстом.
Я говорю про скрытое "служебное поле".
Кстати говоря, ты его лучше id строки заполняй, так меньше гемороя в последствии.

а на строчке со статическим текстом, добавь в атрибут.
Код: javascript
1.
onChange='$("#"+$("input[headers="+headers+"]").attr("name")+"_"+this.id.(substr(-4))).val("1");'



Выделенное красным заменить на заголовок твоего служебного поля.
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868068
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдльblkangelты чекбоксишь строчки?
Цикл бежит только по отмеченным записям.
у тебя примерно так должно быть.

Код: plsql
1.
2.
3.
4.
5.
6.
	for i in 1..apex_application.g_f01.count loop
		select 	
			*
		from table
		where erec_id=to_number(apex_application.g_f02(apex_application.g_f01(i)));
	end loop;



Не чекбоксю. Юзеру не дозволено удалять строки.

А может просто юзверу кнопку "Удалить" скрыть?
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868157
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

А я разве не могу сравнить текущее содержание поля записи с ячейкой массива и принять решение "изменилась / не изменилась"?..
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38868563
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, я вкурил почти все премудрости кастомной MRU

Вот что не вкурил:

не срабатывает
Код: plsql
1.
FOR i IN 1 .. APEX_APPLICATION.G_F01.COUNT


также как
Код: plsql
1.
FOR i IN 1 .. APEX_APPLICATION.G_FROWID.COUNT


но в моем случае срабатывает
Код: plsql
1.
FOR i IN 1 .. APEX_APPLICATION.G_F02.COUNT


Возможно из-за того, что F01 у меня hidden

Если ни одно поле не меняется - цикл не стартует.
Но если меняется хоть одно поле в одной строке - цикл пробегает по всем записям.
В простейшем случае отрабатывает такой блок:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE
   s_Rowid        VARCHAR2 (64);
   s_New_Note     TABLE_XXX.XXX_NOTE%TYPE;
   s_New_Result   TABLE_XXX.XXX_RESULT%TYPE;
BEGIN
   FOR i IN 1 .. APEX_APPLICATION.G_F02.COUNT
   LOOP
      s_Rowid := APEX_APPLICATION.G_FROWID (i);
      s_New_Note := APEX_APPLICATION.G_F03 (i);
      s_New_Result := APEX_APPLICATION.G_F02 (i);

      UPDATE TABLE_XXX
         SET XXX_NOTE = s_New_Note, XXX_RESULT = s_New_Result
       WHERE ROWID = s_Rowid;
   END LOOP;
END;
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869066
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КурдльВ общем, я вкурил почти все премудрости кастомной MRU

Вот что не вкурил:

не срабатывает
Код: plsql
1.
FOR i IN 1 .. APEX_APPLICATION.G_F01.COUNT


также как
Код: plsql
1.
FOR i IN 1 .. APEX_APPLICATION.G_FROWID.COUNT


но в моем случае срабатывает
Код: plsql
1.
FOR i IN 1 .. APEX_APPLICATION.G_F02.COUNT


Возможно из-за того, что F01 у меня hidden

Если ни одно поле не меняется - цикл не стартует.
Но если меняется хоть одно поле в одной строке - цикл пробегает по всем записям.
В простейшем случае отрабатывает такой блок:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE
   s_Rowid        VARCHAR2 (64);
   s_New_Note     TABLE_XXX.XXX_NOTE%TYPE;
   s_New_Result   TABLE_XXX.XXX_RESULT%TYPE;
BEGIN
   FOR i IN 1 .. APEX_APPLICATION.G_F02.COUNT
   LOOP
      s_Rowid := APEX_APPLICATION.G_FROWID (i);
      s_New_Note := APEX_APPLICATION.G_F03 (i);
      s_New_Result := APEX_APPLICATION.G_F02 (i);

      UPDATE TABLE_XXX
         SET XXX_NOTE = s_New_Note, XXX_RESULT = s_New_Result
       WHERE ROWID = s_Rowid;
   END LOOP;
END;



Мне сложно сказать, не видя структуру табуляра, запроса и т.д.
Добавь в начале процедуры вот это, и картина станет более понятной.
Код: plsql
1.
2.
3.
raise_application_error(-20000, 'to_char(APEX_APPLICATION.G_F02.COUNT)='||to_char(APEX_APPLICATION.G_F02.COUNT)||', to_char(APEX_APPLICATION.G_F02(1))='||to_char(APEX_APPLICATION.G_F02(1));
raise_application_error(-20001, 'to_char(APEX_APPLICATION.G_FROWID.COUNT)='||to_char(APEX_APPLICATION.G_FROWID.COUNT)||', to_char(APEX_APPLICATION.G_F02(1))='||to_char(APEX_APPLICATION.G_FROWID(1));
raise_application_error(-20002, 'to_char(APEX_APPLICATION.G_F01.COUNT)='||to_char(APEX_APPLICATION.G_F01.COUNT)||', to_char(APEX_APPLICATION.G_F01(1))='||to_char(APEX_APPLICATION.G_F01(1));
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869068
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдль,

Строчки поочередно включай :)
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869070
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдльblkangel,

А я разве не могу сравнить текущее содержание поля записи с ячейкой массива и принять решение "изменилась / не изменилась"?..
Можешь, но это лишнее обращение к БД.
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869090
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги!
Спасибо за дельные советы.
Но я оценил "за" и "против" и предпочел перенести логику в триггер.
(Задача была заполнить одно поле данными, получившимися в результате замысловатого анализа других полей).
Я не могу позволить себе длительные изыскания "лучшей практики" :)
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869094
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КурдльКоллеги!
Спасибо за дельные советы.
Но я оценил "за" и "против" и предпочел перенести логику в триггер.
(Задача была заполнить одно поле данными, получившимися в результате замысловатого анализа других полей).
Я не могу позволить себе длительные изыскания "лучшей практики" :)

Может тогда не триггер? А вычисляемое поле?
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869097
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курдль,

В любом случае, это уже вопрос не Апекса :)
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869107
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльНо я оценил "за" и "против" и предпочел перенести логику в триггер.
+1
тоже переношу максимально в триггер, чтобы клиент был как можно тоньше.
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869177
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelМожет тогда не триггер? А вычисляемое поле?
А что, у табулярной формы есть вычисляемое и сохраняемое поле?!!
Тогда я - лох! :)
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869271
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КурдльblkangelМожет тогда не триггер? А вычисляемое поле?
А что, у табулярной формы есть вычисляемое и сохраняемое поле?!!
Тогда я - лох! :)
Вычисляемое поле есть в БД (11g)
А в табуляре ты его выводить можешь просто.
Ты же его не меняешь? А если меняешь, тогда триггер зачем не понимаю.
...
Рейтинг: 0 / 0
Кастомизация процесса Multi Row Update
    #38869285
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelВычисляемое поле есть в БД (11g)
угу.
Опплевался от предыдущего программиста.
Нет поддержки при бэкапе.
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Кастомизация процесса Multi Row Update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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