【发布时间】:2017-03-10 07:15:17
【问题描述】:
我需要在 Siebel 中刷新小程序,而无需再次执行当前查询。这可能吗?
我的小程序有一个调用业务服务的自定义按钮。该服务执行一些操作,然后更新 BC 数据(使用 BC 的新实例 - 数据更改不会在屏幕上可见)。一切结束后,我需要刷新小程序,不仅要显示新数据,还要根据新数据启用或禁用我的自定义按钮。
到目前为止,我知道在 Siebel 中刷新数据的 4 种方法,但没有一种方法完全符合我的需要:
RefreshBusComp。它重新加载整个 BC 并再次执行当前查询。如果它不再满足查询条件,这可能导致当前记录“消失”。
RefreshRecord。它只重新加载当前记录,在这种情况下更好。字段只读条件也被重新评估。但是,小程序
PreCanInvoke事件不会再次触发,这意味着我的自定义按钮不会更新其启用/禁用状态。自己执行一个新查询。
使用
FINS Teller UI Navigationservice,方法RefreshCurrentApplet(Siebel 没有记录...显然)。我认为这可能是答案,但它的工作方式似乎与RefreshBusComp完全一样......它再次执行当前查询。
Siebel 7.8 中还有其他选项吗?
(请不要在 Siebel 外部使用 Javascript 直接访问 HTML 控件……我不想弄得一团糟)。
澄清:我不在乎 Siebel 是否必须再次查询数据库。我认为它必须这样做。但是一个简单的select ... where row_id = '1-23456';就足够了,我不需要重新加载BC中的所有数据,只需要当前记录。
我不能允许再次执行的是当前的 BC 级查询,它可能已被用户细化,也可能未被用户细化。为什么?这是一个例子:
- 用户执行以下查询来过滤数据:
[Status]='Pending'。然后他选择其中一条记录,然后单击我的自定义按钮。 - 该按钮调用业务服务,该服务执行一些操作并将记录状态更改为“完成”。
- 如果我再次执行当前查询(即
RefreshBusComp或FINS Teller UI Navigation),它将重新加载所有状态为待处理的记录。我的记录现在有另一个状态,所以它会从小程序中消失。这是我必须避免的。
【问题讨论】:
-
由于您所做的更改是在 BC 的另一个实例中进行的,您是否不必让第一个实例运行查询以将该数据带入小程序?我认为查询是非常需要的,没有它,引用它们的字段值、MVL 和计算字段将不会被刷新。问题是运行查询通常会将光标重置到小程序中的第一条记录。但是,FINS UI BS 在同一记录中保留了该上下文。所以光标不会再次跳转到第一条记录,所以应该比较理想。
-
是的,Siebel 将不得不再次查询数据库,但一个简单的
select ... where row_id = '1-xxx';就足够了(我猜RefreshRecord就是这样做的)。我不关心数据库查询,我不能允许执行当前用户定义的查询。最大的问题不是光标位置。例如,用户可能已经根据[Status]='Pending'过滤了数据,而我的BS 将记录状态更改为另一个值。如果再次执行整个查询,记录就会消失。
标签: siebel