Как я могу запретить пользователю создавать более одной записи за раз в многострочном блоке?

У меня есть форма с многострочным блоком на основе таблицы. Требование состоит в том, что пользователь может ввести только 1 строку в блок за раз и зафиксировать ее. Им не должно быть позволено создать вторую строку до фиксации первой.

Я попытался использовать триггер WHEN-CREATE-RECORD следующим образом:

if :system.block_status = 'CHANGED' then
    alert('Can only create one record at a time');
end if;

Однако это не позволяет мне создавать новую запись даже после внесения изменений.


person Shaz    schedule 09.01.2012    source источник


Ответы (1)


Одним из способов было бы перебрать все записи и, если вторая запись не равна нулю, предупредить пользователя.

DECLARE
    n_index NUMBER := 0;
BEGIN
    Go_block('block_name');

    first_record;

    WHILE :SYSTEM.last_record != 'TRUE' LOOP
        next_record;

        IF :block_name.item_name IS NOT NULL THEN --replace item_name with one which the user will enter all the time
          n_index := n_index + 1;
        END IF;

        IF n_index > 0 THEN
          Alert('Only one record can be created at a time!');
        END IF;
    END LOOP;
END; 
person Sathyajith Bhat    schedule 10.01.2012
comment
Спасибо. Где бы я это сделал? например пользователь может создать новую строку, просто щелкнув мышью под последней записью (или я могу предотвратить это?) - person Shaz; 10.01.2012
comment
вы можете сделать это на when-create-record или when-validate-record - посмотрите, что вам подходит @Shaz - person Sathyajith Bhat; 10.01.2012
comment
@SathyajithBhat @Shaz Я полагаю, что триггеры when-create-record или when-validate-record не могут поддерживать строки go_block или next_record (потому что они являются ограниченными процедурами), поэтому это решение для зацикливания точно не сработает при создании новой записи. - person Flardryn; 12.09.2019