在Oracle Forms 10g中动态设置“从项目复制值”的值

问题描述

说我创建了一个BLOCK2作为BLOCK1的副本。 BLOCK3是BLOCK1的详细信息块,我也想将其重用于BLOCK2。 BLOCK3.FOREIGN_KEY使用“从项目复制值”属性将其值引用到BLOCK1.PRIMARY_KEY。 如何动态设置“从项目中复制值”属性以引用调用块的主键?

我尝试清除BLOCK3.FOREIGN_KEY的“从项目复制值”,并从调用BLOCK3的按钮中设置其值,但它不起作用。

解决方法

如果我对您的理解正确,则要显示BLOCK3(详细信息)数据,具体取决于其主数据是BLOCK1还是BLOCK2

如果是这样,请删除您到目前为止一直在使用的属性。您必须-以某种方式-让Forms知道哪个块是源。一种选择是在BLOCK1BLOCK2的每一个中使用按钮,这会将参数设置为所需的值。他们的WHEN-BUTTON-PRESSED(WBP)触发器将是

:parameter.caller := 'block1';  -- block2 for BLOCK2's WBP trigger    
go_block('block3');
execute_query;

然后创建PRE-QUERY BLOCK3块级触发器并将其设置为

:block3.foreign_key_item := decode(:parameter.caller,'block1',:block1.id,'block2',:block2.id);