3

我正在尝试创建基于多项目数据库的表单。当我打开它时,它总是只填充一条记录。我想要其中的功能,它将填充新创建记录的所有字段,就像它们在第一个(从数据库中选择)记录中一样。只需从第一条记录中复制它们,就是这样。

我正在尝试使用 WHEN-NEW-ITEM-INSTANCE 触发器和“:system.record_status IN ('NEW','INSERT')”条件,但我不知道如何告诉表单,我需要来自我的第一张唱片。我是说,

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

那么,我如何从特定的项目实例中获取价值?

提前致谢。

4

2 回答 2

2

创建一个虚拟块,对用户不可见。作为 WHEN-NEW-FORM-INSTANCE 触发器的一部分,使用您的默认记录填充它。

然后在您的实际 DATA 块中,您可以引用虚拟块中的项目来预填充这些项目。我可能会选择使用更高级别的触发器,例如 WHEN-CREATE-RECORD,而不是使用大量的 WHEN-NEW-ITEM-INSTANCE 触发器,但这取决于您的设计的其余部分如何结合在一起。


“这是一个粗略的解决方案”

抱歉,我没有意识到您正在向用户显示默认记录。但是,据我所知,Forms 没有任何机制来引用当前记录以外的记录(完全披露:我已经有一段时间没有真正使用过 Forms,我也无权测试这是否仍然是案子)。

你可以做的是:

First_Record;
Duplicate_Record;

这也有一个缺点,因为用户可能会发现导航跳转令人困惑。

于 2011-05-18T11:07:18.410 回答
0

APC 的解决方案应该可以工作,只需进行一项修改:

First_Record;
Create_Record;
Duplicate_Record;

Duplicate_Record 总是将先前的记录复制到当前记录,而不一定复制到新记录。显然,Create_Record 将为您创建新记录。

于 2011-09-12T22:03:55.050 回答