禁止在多行块 Oracle Forms 中输入值
Disallow entering value in multiple row block Oracle Forms
我的 table 看起来像这样:
+-------------------+
|Name |
+-------------------+
|Name1 |
|Name2 |
|Name3 |
|Name4 |
|Name1Jr |
|Name2Jr |
|Name3Jr |
|Name4Jr |
+-------------------+
我的多行块看起来像:
我想要的是如果块中不存在名称,则不允许输入以 Jr 结尾的名称。像这样:
如果我输入值 Name1 和 Name2:
然后它将允许我输入 Name1Jr 和 Name2Jr,但不允许输入 LOV 中但尚未在块中的带有 Jr 的名称:
注意:我正在为此列使用值列表。谢谢!
我可以想到两个选项。
第一个依赖于table内容。当您使用值列表 (LOV) 时,它可能看起来像这样(假设 table 名称是 TEST,由 CTE 表示):您 UNION
当前名称 fabricated "nameJr" 值(DECODE
是为了避免 "Name3JrJr" 的情况):
SQL> with test (col) as
2 (select 'Name1' from dual union
3 select 'Name3' from dual union
4 select 'Name3Jr' from dual
5 )
6 select col from test
7 union
8 select col || decode(substr(col, -2), 'Jr', null, 'Jr') from test
9 order by col;
COL
---------
Name1
Name1Jr
Name3
Name3Jr
SQL>
表单项的 "Validate from List" 属性 应设置为 "Yes",以便表单拒绝 LOV 中不存在的值。
但是,如果您输入的名称在 table 中不存在怎么办?例如,"Name2"?在WHEN-VALIDATE-ITEM
触发器中使用SET_ITEM_PROPERTY
并将VALIDATE_FROM_LIST
属性修改为PROPERTY_FALSE
。在 WHEN-CREATE-RECORD
触发器中将其设置回 TRUE
。
此外,您必须接受新添加的 "Name2" 值并将其显示在 LOV 中。如何? POST
您所做的更改(不要 COMMIT
,只需 POST
)。在哪里?由于这是一个受限过程,请尝试 KEY-NEXT-ITEM
和 WHEN-NEW-RECORD-INSTANCE
触发器。
第二个选项 将动态创建 LOV,其值将是当前显示在块中的值。您将使用内置的 CREATE_GROUP
以及 ADD_GROUP_ROW
,后者会将块值添加到记录组中(它是 LOV 的来源)。 WHEN-NEW-RECORD-INSTANCE
可能是您的选择,因为它允许受限制的程序,您应该 "scroll" 循环使用 NEXT_RECORD
(至于 是 限制).在表单帮助中阅读 CREATE_GROUP;它包含一个如何使用它的例子。此外,如有必要,请点击指向其他示例的链接。
我的 table 看起来像这样:
+-------------------+
|Name |
+-------------------+
|Name1 |
|Name2 |
|Name3 |
|Name4 |
|Name1Jr |
|Name2Jr |
|Name3Jr |
|Name4Jr |
+-------------------+
我的多行块看起来像:
我想要的是如果块中不存在名称,则不允许输入以 Jr 结尾的名称。像这样:
如果我输入值 Name1 和 Name2:
然后它将允许我输入 Name1Jr 和 Name2Jr,但不允许输入 LOV 中但尚未在块中的带有 Jr 的名称:
注意:我正在为此列使用值列表。谢谢!
我可以想到两个选项。
第一个依赖于table内容。当您使用值列表 (LOV) 时,它可能看起来像这样(假设 table 名称是 TEST,由 CTE 表示):您 UNION
当前名称 fabricated "nameJr" 值(DECODE
是为了避免 "Name3JrJr" 的情况):
SQL> with test (col) as
2 (select 'Name1' from dual union
3 select 'Name3' from dual union
4 select 'Name3Jr' from dual
5 )
6 select col from test
7 union
8 select col || decode(substr(col, -2), 'Jr', null, 'Jr') from test
9 order by col;
COL
---------
Name1
Name1Jr
Name3
Name3Jr
SQL>
表单项的 "Validate from List" 属性 应设置为 "Yes",以便表单拒绝 LOV 中不存在的值。
但是,如果您输入的名称在 table 中不存在怎么办?例如,"Name2"?在WHEN-VALIDATE-ITEM
触发器中使用SET_ITEM_PROPERTY
并将VALIDATE_FROM_LIST
属性修改为PROPERTY_FALSE
。在 WHEN-CREATE-RECORD
触发器中将其设置回 TRUE
。
此外,您必须接受新添加的 "Name2" 值并将其显示在 LOV 中。如何? POST
您所做的更改(不要 COMMIT
,只需 POST
)。在哪里?由于这是一个受限过程,请尝试 KEY-NEXT-ITEM
和 WHEN-NEW-RECORD-INSTANCE
触发器。
第二个选项 将动态创建 LOV,其值将是当前显示在块中的值。您将使用内置的 CREATE_GROUP
以及 ADD_GROUP_ROW
,后者会将块值添加到记录组中(它是 LOV 的来源)。 WHEN-NEW-RECORD-INSTANCE
可能是您的选择,因为它允许受限制的程序,您应该 "scroll" 循环使用 NEXT_RECORD
(至于 是 限制).在表单帮助中阅读 CREATE_GROUP;它包含一个如何使用它的例子。此外,如有必要,请点击指向其他示例的链接。