Как вызвать процесс из выражения JavaScript — Oracle Apex v21.1

#javascript #oracle #process #oracle-apex #dml

Вопрос:

У меня есть форма, которая позволяет пользователям импортировать файл (большой двоичный объект), поместить комментарий и дату.

Мне пришлось создать функцию проверки, чтобы проверить, пусты ли поля, вот почему :

Проверка по умолчанию возвращает «неопределенный», когда файловый браузер пуст, а текст проверки не переводится, когда он является средством выбора даты, хотя я перевел сообщение в своих общих компонентах :

проверка не работает

  1. Поэтому я решил создать Динамическое действие с выражением JavaScript для проверки полей и отображения ошибок.
 apex.message.clearErrors();  var chkErr = 0; //declare fields var arr = [  'P28_BLOB_DOCUMENT',   'P28_COMMENTAIRE_DOCUMENT',  'P28_DATE_DOCUMENT' ]; //declare Labels var arrLabel = [  "Importer un document",  "Commentaire",  "Date d'exportation" ];  //Check NULL for (var i in arr) {  if ($v(arr[i]).length == 0) {  apex.message.showErrors([  {  type: apex.message.TYPE.ERROR,  location: ["inline", "page"],  pageItem: arr[i],  message: arrLabel[i]   " doit contenir une valeur",  unsafe: false  }  ]);  chkErr = 1;  }  }  if ( chkErr == 0 ) {   /* Custom dynamic action call when no error occurred */  apex.message.confirm("Do you want to import this document ?", function(okPressed) {  if (okPressed) {   apex.submit({request:'insertDocumentProcess'});  //apex.submit('insertDocumentProcess');   }  }); } 

Все работает, если я добавлю этот DA к своей кнопке, у меня будут свои подтверждения :

проверки работают

Now here comes the real problem, if I use the Dynamic Action on the CREATE button, the auto process «Form — Automatic Row Processing (DML)», is not executing anymore. Even tough I tried to call it using the apex.submit('insertDocumentProcess'); or apex.submit({request:'insertDocumentProcess'}); , the INSERT action is not executing on the database.

Here are all the details :

  1. The create button, with the code explained above

create button

  1. The process that is generated automatically when creating the form, that I try to call

процесс

Я что-то пропустил ? Все INSERT работало нормально, когда я не добавлял функцию проверки, так связана ли проблема с тем, как я вызываю процесс ? Или это потому, что я пытаюсь ВСТАВИТЬ ФАЙЛ БОЛЬШОГО двоичного объекта и что-то упускаю ?

Я пробовал разные варианты, когда другой окружной прокурор вызывал процесс, но это не увенчалось успехом.

У меня все еще есть сообщение об успехе процесса в конце, в котором говорится «Строка создана», но оно не отображается в базе данных. Может ли он все еще подтвердить, что я успешно вызываю процесс ?

Заранее спасибо,

Ответ №1:

Добавьте a Client-side Condition в свое динамическое действие checkErrors . Выберите JavaScript expression , чтобы проверить, проходят ли текстовые поля проверку или нет

Пример

 (  apex.item('P28_BLOB_DOCUMENT').isEmpty() ||  apex.item('P28_COMMENTAIRE_DOCUMENT').isEmpty() ||  apex.item('P28_DATE_DOCUMENT').isEmpty() )  

True action должен быть код JavaScript, который проверяет пустые поля (код, который вы опубликовали выше).

 apex.message.clearErrors();  var chkErr = 0; //declare fields var arr = [  'P28_BLOB_DOCUMENT',   'P28_COMMENTAIRE_DOCUMENT',  'P28_DATE_DOCUMENT' ]; //this is the code you pasted above  

False action должно быть действие: Submit Page и заполните опцию Request / Button Name : CREATE сообщить APEX , что вы хотите Insert или SAVE если хотите Update , это воспроизведет то же поведение, что и при обычной отправке.

введите описание изображения здесь

Дайте мне знать, если у вас возникнут вопросы.

Комментарии:

1. Работает отлично ! Большое спасибо !