Я использую Oracle APEX 22.1.4 и пытаюсь программно вызвать процесс автоматической обработки строк (DML).
Я попробовал следующим образом, но это не сработало.
apex.server.process(
'SAVE_PERSON', // Specify your process name here
{
},
{
request: 'UPDATE', // Specify the DML operation (CREATE, UPDATE, DELETE, etc.)
dataType: 'text', // Ensure the response type is handled correctly
success: function(data) {
console.info('DML operation executed successfully: ' + data);
},
error: function(xhr, textStatus, errorThrown) {
console.error('Error executing DML operation:', errorThrown);
}
}
);
Может ли кто-нибудь предложить идею для достижения этой цели?
Прежде всего, чтобы иметь настраиваемый процесс на вашей странице, вам нужна либо область формы, либо интерактивная сетка:
Form - Automatic Row Processing (DML)
Process to insert, update, or delete a form region row(s).
Interactive Grid - Automatic Row Processing (DML)
Process to insert, update, or delete Interactive Grid rows.
Второй момент, который вам нужно учитывать, это синтаксис: Как следует из раздела «Помощь» на странице:
begin
case :APEX$ROW_STATUS
when 'C' then
insert into emp ( empno, ename, deptno )
values ( :P1_EMPNO, :P1_ENAME, :P1_DEPTNO )
returning rowid into :P1_ROWID;
when 'U' then
update emp
set ename = :P1_ENAME,
deptno = :P1_DEPTNO
where rowid = :P1_ROWID;
when 'D' then
delete emp
where rowid = :P1_ROWID;
end case;
end;
Вам необходимо использовать этот формат, чтобы иметь собственный код в виде DML. Пример кода, который вы используете в своем вопросе, является примером Javascript-функции обратного вызова AJAX
** Вам, конечно, необходимо изменить код и условия для вашего варианта использования. Это всего лишь простой пример того, как должен быть структурирован код PL/SQL для пользовательского DML.
Привет @cengiz sevimli, спасибо за ответ. Я пробовал этот способ, и это хуже, но все же мне нужно установить «Действие базы данных» как «Действие вставки SQL/Действие обновления SQL или Действие удаления SQL» в поведении кнопки. Я пытался использовать одну кнопку (скажем, «SAV») для обработки действий INSERT и UPDATE. Есть ли способ обработать такое действие кнопки?
если это интерактивная сетка, возможно, вы можете попробовать установить область выполнения как «все отправленные строки»
Привет @cengiz. Нет, это форма.
затем в процессе выполнения проверьте атрибут условия на стороне сервера «При нажатии кнопки» и «введите» «пару значений».
Привет @cengiz, да, я пробовал именно так. Однако при нажатии кнопки мне нужно установить действие «INSER» или «UPDATE». Мне нужно обрабатывать оба действия с помощью одной кнопки. Например, если :P3_PK_ITEM_ID имеет значение null, тогда => вызовите автоматическую обработку строк (DML) с действием INSERT DB, в противном случае вызовите автоматическую обработку строк (DML) с действием UPDATE DB при нажатии кнопки «СОХРАНИТЬ». Ваш приведенный выше код работает только при вызове через две отдельные кнопки.
afaik это невозможно в javascript. Автоматическая обработка строк привязана к форме и должна выполняться в разделе обработки жизненного цикла страницы вершины. Это может произойти только при отправке страницы, а не при вызове ajax. Возможно, это изменится в более поздних версиях Apex.