2013-03-01 3 views
1

Я пытаюсь помешать пользователям свернуть страницу создания новой продукции. На странице создания у меня есть текстовое поле: product_name и числовое поле: product_quantity.Проверка на обнаружение текста в числовом поле

В настоящее время, когда они входят в текст в поле product_quantity и нажмите кнопку «Сохранить», они получают следующее сообщение об ошибке: проверки обработок

Ошибки.

ORA-01722: неправильный номер

Я исследовал ошибку, однако я думал в Apex, если вы выбрали числовое поле, он обнаружит бы вошел ли пользователь текст или числовые символы?

Есть ли способ отображения сообщения проверки, если пользователь ввел текст, он кричит, иначе он позволяет пользователю сохранить новую запись?

UPDATE

Я знаю, почему его происходит, но не знаю, как ее решить.

Я воссоздал свою страницу, и она сработала. Затем я добавил две части проверки в моей обработке страниц, и когда я затем попробую, я получу ошибку в своем начальном сообщении. Если я отключу их, он снова будет работать. В валидации используется NOT EXISTS, чтобы определить, существует ли уже введенное значение в таблице до их добавления.

Если проверяется только подтверждение, было ли введено числовое значение. Я остановил проверку, посмотрев на связанный элемент, и выключил кнопку «при нажатии», но все равно не радость.

select 1 from MY_TABLE where column_name = :P6_TEXT_FIELD 

Есть ли способ запустить проверку в текстовом поле (проверка, заключал ли его текст) до проверки я созданный при обработке страницы?

+0

Интересно, если вы случайно удалили проверку. Не могли бы вы попытаться воссоздать страницу и посмотреть, не исчезла ли проблема? –

+0

Является ли поле определяемым как текстовое поле или числовое поле? Являются ли числа введенными с '.' Или ','? – Tom

+0

@Tom Это текстовое поле, но я сказал себе, что столбец базы данных является числовым, а введенные значения являются числовыми, поэтому технически поле должно быть числовым. Числовая проверка корректно работает на поле на другой странице. Вот почему я потерял это. Попытайтесь, что Мэтью предлагает завтра. – Blob

ответ

0

Это то, что есть при проверке: все они выполняются и не замыкаются. На самом деле вы можете увидеть это, когда вы отлаживаете страницу.
В случае числового поля вы увидите, что оно не проходит проверку числа. Но это не останавливает проверку. Таким образом, будет проведена вторая проверка, которая использует представленное значение, но, очевидно, не будет работать, если вы введете текст, например.


Для этого есть некоторые обходные пути. Например, вы можете изменить ваш NOT-EXISTS проверки на функцию PLSQL возвращает сообщение об ошибке и выполнить что-то вроде этого (пример):

DECLARE 
    v_test_nbr NUMBER; 
    v_check_exists NUMBER; 
BEGIN 
    BEGIN 
    v_test_nbr := to_number(:P6_TEXT_FIELD); 
    EXCEPTION 
    WHEN OTHERS THEN 
    -- or catch 1722 (invalid number) and 6502 (char to number conversion error) 
    v_test_nbr := NULL; 
    END; 

    IF v_test_nbr IS NOT NULL 
    THEN 
    -- if v_test_nbr is not null then the field should be numerically valid 
    -- if it isn't then this code would be skipped and this validation 
    -- will not throw an error. 
    -- However, the previous validation will still fail when text is entered, 
    -- so this shouldn't matter. 
    BEGIN 
     SELECT 1 
     INTO v_check_exists 
     FROM my_table 
     WHERE column_name = :P6_TEXT_FIELD; 
    EXCEPTION 
    WHEN no_data_found THEN 
     v_check_exists := 0; 
    END; 

    IF v_check_exists = 1 
    THEN 
     RETURN 'A record with this key already exists';  
    END IF; 
    END IF; 

    RETURN NULL; 
END; 

ОДНАКО - в этом случае, если вы хотите проверить для дублированных записей лучший вариант может существовать, если вы хотя бы на версии 4.1. Если в вашей таблице указаны правильные ограничения, тогда у вас будет уникальный ключ, определенный в поле, в котором вы выполняете функцию not-exists. Это означает, что если вы не получили бы эту проверку в поле, вы получили бы ошибку ora-00001 DUP_VAL_ON_INDEX.
Затем вы можете использовать обработку ошибок, предоставляемую apex, чтобы поймать эту ошибку и создать удобное для пользователя сообщение.
Вы можете найти пример того, как использовать и реализовать это на блоге Patrick Wolf из верхушечной команды разработчиков:
apex-4-1-error-handling-improvements-part-1/
apex-4-1-error-handling-improvements-part-2/