Oracle APEX - отображение условной подсказки

У меня есть форма с проверкой, чтобы проверить, существует ли уже введенное имя в базе данных, и при нажатии кнопки отправки я хочу продолжить вставку, если проверка прошла успешно, и если она не удалась, отобразить приглашение пользователя, и если пользователь ОК, это , затем продолжите обновление существующей записи. Я знаю, как делать одно из них за раз, но не знаю, как это сделать при определенных условиях.

Если я хочу отобразить подсказку, я могу использовать redirect to URL при нажатии кнопки и установить подсказку на все, что я хочу, но как отображать подсказку только в случае сбоя проверки?


person Coding Duchess    schedule 12.03.2020    source источник
comment
Какую обратную связь вы пытаетесь получить от пользователя? Каковы варианты того, что произойдет после того, как они предоставят вам обратную связь?   -  person Dan McGhan    schedule 12.03.2020
comment
Поэтому, если указанное имя уже существует (при вставке), мне нужно спросить пользователя, хотят ли они обновить существующую запись, и если пользователь нажимает ОК, я могу продолжить обновление существующей записи. Если запись не существует, просто вставьте   -  person Coding Duchess    schedule 12.03.2020


Ответы (2)


Основываясь на последующих комментариях, я бы порекомендовал следующее:

  1. Добавьте на страницу скрытый элемент, например P1_NAME_EXISTS. Убедитесь, что параметр Значение защищено отключен.
  2. Измените Действие кнопки отправки на Определено динамическим действием.
  3. Создайте динамическое действие для события нажатия кнопки.
  4. Сделайте первое действие действием Выполнить код PL / SQL. Заполните свойство Элементы для отправки именем элемента, значение имени которого вы хотите проверить. Затем введите код PL / SQL, необходимый, чтобы проверить, не дублируется ли имя. Установите значение P1_NAME_EXISTS на «Y» или «N» (или аналогичные логические значения) в коде PL / SQL. Затем введите имя элемента (P1_NAME_EXISTS) в свойство действия Элементы для возврата.
  5. Добавьте второе действие. Установите Действие на Выполнить код JavaScript. Введите следующий код в поле Код:

    var nameExists = $v('P1_NAME_EXISTS') === 'Y';
    
    if (!nameExists) {
      apex.page.submit('SAVE');
    } else {
      apex.page.confirm('This name already exists. Would you like to update the existing entry?', 'SAVE');
    }
    

Код JavaScript проверит значение скрытого элемента после того, как процесс PL / SQL обновит его. Если имя еще не существует, страница будет просто отправлена. Если имя уже существует, пользователю будет предложено. Страница будет отправлена ​​только в том случае, если они нажмут "ОК".

Вы можете изменить значение отправленных значений, если вам нужно заметить разницу.

person Dan McGhan    schedule 12.03.2020

Вы создаете декларативную валидацию. Если ваше условие проверки не выполняется, вы увидите ошибку, которую вы определяете, вместо нормальной обработки.

В этом случае у вас может быть проверка на основе существования строки.

Если все проверки в порядке, начнется обработка страницы.

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

Или у вас может быть ограничение для таблицы, которое не работает, когда значение уже существует, и обрабатывать это с помощью вашей функции ошибок APEX. Зачем делать предварительную проверку, если можно полагаться на ограничения БД?

person Scott    schedule 12.03.2020
comment
Я провожу предварительную проверку, потому что, если значение уже существует, мне нужно сообщить его пользователю, получить его данные и продолжить работу на основе их ввода. - person Coding Duchess; 12.03.2020
comment
Под предварительной проверкой я имел в виду в PL / SQL момент перед вставкой. Если вы говорите о немедленном ответе пользовательского интерфейса перед отправкой формы, рассмотрите ответ Дэна. - person Scott; 13.03.2020