Oracle Forms 不完全遵循我对项目背景颜色的设置
Oracle Forms doesn't completely respect my setting for the background color of an item
我不得不使用 Oracle Form Builder 10.1.2.3.0。我可以在特定项目的表单中使用的理想控件是 List Item
使用名为 Combo Box
.
的 List Style
使用此控件,我可以在 PRE-FORM
触发器中使用 set_item_property
来设置列表项的背景颜色以匹配 Canvas 颜色。
项目的默认背景颜色是白色,但这不是问题的最大部分。一个相当大的 UI 问题是选择后项目的颜色:可怕的芥末色。我更喜欢斯巴达式的东西,当然不是尖叫“嘿!看着我!”。
当我 运行 表格时,一切都很好,直到我在列表中选择一个项目。之后,所选项目的背景为芥末色。并且列表的每个弹出窗口都显示带有芥末背景的项目。
我想我可以向 Item 添加触发器来重置背景颜色,但是那没有用。我创建了以下触发器无济于事:
. WHEN-LIST-CHANGED
. POST-CHANGE
. WHEN-VALIDATE-ITEM
. WHEN-NEW-ITEM-INSTANCE
我找不到任何其他可能有用的触发器名称。
代码是否有希望强制我的 UI 偏好?
在对控件进行任何操作之前:
第一次弹出时:
在第一个弹出窗口中选择一个项目后:
第二个弹出窗口:
如果您使用的是 Oracle E-Business Suite,他们可能会在模板表单中编码该功能,我猜您可能会使用它。
如果您没有使用 EBS,那么您的表单中可能有进行此更改的代码。例如,如果您有一个 WHEN-LIST-CHANGED 触发器,其中包含一行看起来像这样的代码,您将得到您所描述的行为:
SET_ITEM_PROPERTY ('LIST1', BACKGROUND_COLOR, 'OLAF1');
如果包含该项目的 Data Block
不是数据库项目,那么您可以更改该块,使其不可更新。如果你这样做,那么芥末色就不会被使用。
看起来颜色变化(芥末色)的目的是一个视觉线索,表明尚未提交对数据库的更改。但是,如果 Data Block
不是数据库块,则不需要视觉线索,因为不可能进行任何更改。
我将 DML Data Target Type
从 Table
更改为 None
,芥末色不再出现。
我没有更改但可能也相关的其他设置是:
Database Data Block = No
Query Data Source Type = None
Insert Allowed = No
Update Allowed = No
Locking Mode = Delayed
Delete Allowed = No
Update Changed Columns Only = No
即使它是数据库项目,您也可以在其 WHEN-LIST-CHANGED
触发器中将项目的 update_allowed 属性 设置为 false,并在其 WHEN-MOUSE-CLICK
触发。这并不完美,因为如果您单击列表项的文本而不是向下箭头,那么您仍然会看到芥末酱,但至少在您完成后,芥末酱消失了。
我不得不使用 Oracle Form Builder 10.1.2.3.0。我可以在特定项目的表单中使用的理想控件是 List Item
使用名为 Combo Box
.
List Style
使用此控件,我可以在 PRE-FORM
触发器中使用 set_item_property
来设置列表项的背景颜色以匹配 Canvas 颜色。
项目的默认背景颜色是白色,但这不是问题的最大部分。一个相当大的 UI 问题是选择后项目的颜色:可怕的芥末色。我更喜欢斯巴达式的东西,当然不是尖叫“嘿!看着我!”。
当我 运行 表格时,一切都很好,直到我在列表中选择一个项目。之后,所选项目的背景为芥末色。并且列表的每个弹出窗口都显示带有芥末背景的项目。
我想我可以向 Item 添加触发器来重置背景颜色,但是那没有用。我创建了以下触发器无济于事:
. WHEN-LIST-CHANGED
. POST-CHANGE
. WHEN-VALIDATE-ITEM
. WHEN-NEW-ITEM-INSTANCE
我找不到任何其他可能有用的触发器名称。
代码是否有希望强制我的 UI 偏好?
在对控件进行任何操作之前:
第一次弹出时:
在第一个弹出窗口中选择一个项目后:
第二个弹出窗口:
如果您使用的是 Oracle E-Business Suite,他们可能会在模板表单中编码该功能,我猜您可能会使用它。
如果您没有使用 EBS,那么您的表单中可能有进行此更改的代码。例如,如果您有一个 WHEN-LIST-CHANGED 触发器,其中包含一行看起来像这样的代码,您将得到您所描述的行为:
SET_ITEM_PROPERTY ('LIST1', BACKGROUND_COLOR, 'OLAF1');
如果包含该项目的 Data Block
不是数据库项目,那么您可以更改该块,使其不可更新。如果你这样做,那么芥末色就不会被使用。
看起来颜色变化(芥末色)的目的是一个视觉线索,表明尚未提交对数据库的更改。但是,如果 Data Block
不是数据库块,则不需要视觉线索,因为不可能进行任何更改。
我将 DML Data Target Type
从 Table
更改为 None
,芥末色不再出现。
我没有更改但可能也相关的其他设置是:
Database Data Block = No
Query Data Source Type = None
Insert Allowed = No
Update Allowed = No
Locking Mode = Delayed
Delete Allowed = No
Update Changed Columns Only = No
即使它是数据库项目,您也可以在其 WHEN-LIST-CHANGED
触发器中将项目的 update_allowed 属性 设置为 false,并在其 WHEN-MOUSE-CLICK
触发。这并不完美,因为如果您单击列表项的文本而不是向下箭头,那么您仍然会看到芥末酱,但至少在您完成后,芥末酱消失了。