Как я могу получить значение из конкретного экземпляра элемента?

#oracle #oracleforms

#Oracle #oracleforms

Вопрос:

Я пытаюсь создать форму на основе базы данных с несколькими элементами. Когда я открываю его, он всегда будет заполнен только одной записью. И я хочу, чтобы в нем была функциональность, которая заполняла бы все поля новой созданной записи так же, как они есть в первой (выбранной из базы данных) записи. Просто скопируйте их из первой записи, вот и все.

Я пытаюсь использовать триггер WHEN-NEW-ITEM-INSTANCE и условие «:system.record_status В (‘NEW’, ‘INSERT’)», но я не знаю, как сообщить формам, что мне нужно значение из моей первой записи. Я имею в виду,

 IF :system.record_status IN ('NEW','INSERT')
THEN
  :block.item := <<here goes pointer to my first record of that item>>
END IF;
  

Итак, как я могу получить значение из конкретного экземпляра элемента?

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

Ответ №1:

Создайте фиктивный блок, невидимый для пользователей. Заполните его вашей записью по умолчанию как часть триггера WHEN-NEW-FORM-INSTANCE.

Затем в вашем фактическом блоке ДАННЫХ вы можете ссылаться на элементы в фиктивном блоке, чтобы предварительно заполнить элементы. Я бы, вероятно, предпочел использовать триггер более высокого уровня, такой как WHEN-CREATE-RECORD, вместо множества триггеров WHEN-NEW-ITEM-INSTANCE, но это зависит от того, как взаимодействует остальная часть вашего дизайна.


«Это грубое решение»

Извините, я не понял, что вы показываете пользователям запись по умолчанию. Однако, насколько я знаю, у Forms нет никакого механизма для ссылки на запись, отличную от текущей записи (полное раскрытие: я фактически не использовал Forms некоторое время, и у меня нет доступа, чтобы проверить, так ли это по-прежнему).

Что вы могли бы сделать, это:

 First_Record;
Duplicate_Record;
  

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

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

1. Это грубое решение, я мог бы использовать параметры для той же цели. Есть ли еще какие-либо варианты??

2. Только что нашел Duplicate_Record proc, спасибо. Тем не менее, это не решает проблему: он дублирует 1-ю запись на 2-ю, всегда (если мы переходим к 1-й записи раньше), поэтому у нас не может быть 3-й записи. Новая запись всегда должна быть второй. Некоторое время пытался с этим безрезультатно.

Ответ №2:

Решение APC должно работать, с одной модификацией:

First_Record;
Create_Record;
Duplicate_Record;

Duplicate_Record всегда копирует предыдущую запись в текущую запись, не обязательно в новую запись. Create_Record, очевидно, создаст эту новую запись для вас.