如何在不运行新查询的情况下刷新Siebel中的数据?

时间:2016-10-27 14:33:38

标签: siebel

我需要在Siebel中刷新applet,而不再执行当前查询。这有可能吗?

我的applet有一个调用业务服务的自定义按钮。此服务执行一些操作,然后更新BC数据(使用BC的新实例 - 数据更改将不会在屏幕上显示)。一旦完成,我需要刷新applet,不仅要显示新数据,还要根据新数据启用或禁用我的自定义按钮。

到目前为止,我知道在Siebel中刷新数据的4种方法,但它们都不能完全符合我的需要:

  • RefreshBusComp。它重新加载整个BC并再次执行当前查询。如果不再符合查询条件,这可能导致当前记录“消失”。

  • RefreshRecord。它仅重新加载当前记录,在这种情况下更好。仅重新评估字段只读条件。但是,小程序PreCanInvoke事件不会再次触发,这意味着我的自定义按钮不会更新其启用/禁用状态。

  • 自己执行新查询。

  • 使用FINS Teller UI Navigation service方法RefreshCurrentApplet(未经Siebel记录......显然)。我认为这可能是答案,但它似乎与RefreshBusComp完全一样......它再次执行当前查询。

Siebel 7.8中还有其他选项吗?

(如果不直接使用Siebel以外的Javascript访问HTML控件,请...我不想弄得一团糟。)

澄清:我不在乎Siebel是否必须再次查询数据库。我认为它必须。但是一个简单的select ... where row_id = '1-23456';就足够了,我不需要重新加载BC中的所有数据,只需要当前记录。

我不能再允许执行的是当前的BC级查询,该查询可能已经或可能没有被用户细化。为什么?这是一个例子:

  1. 用户执行以下查询以过滤数据:[Status]='Pending'。然后他选择其中一条记录,然后点击我的自定义按钮。
  2. 该按钮调用业务服务,该服务执行某些操作并将记录状态更改为“完成”。
  3. 如果我再次执行当前查询(即RefreshBusCompFINS Teller UI Navigation),它将重新加载状态为待定的所有记录。我的记录现在有另一个状态,因此它将从applet中消失。这就是我必须避免的。

3 个答案:

答案 0 :(得分:2)

Siebel将在刷新期间再次运行上次运行查询,它没有选择将所选记录保留在UI中。您在此处有一个独特的要求,您希望通过用户定义的查询显示当前选定的记录。你将使用一些脚本。

Get the row id of the current record.
Get the current searchspec. Function GetSearchExpr.
Concatenate a ' OR Id = "current rowid"' to the current search spec.
Run the new query.

如果当前searchspec为“[Status] ='Pending'”,则新的searchspec应为“([Status] ='Pending')或Id ='0-1234'”。这应该将修改后的记录保留在UI中,即使它的状态发生了变化。

编辑:我怀疑GetSearchExpr方法在Siebel 7.8中不起作用,但我刚检查过,它是documented

答案 1 :(得分:1)

扩展Ranjith的答案,这将是applet服务器脚本代码,使其工作:

var bc = this.BusComp();
var currentId = bc.GetFieldValue("Id");

// Redefine the current query to ensure it doesn't exclude the current record
var expr = "(" + bc.GetSearchExpr() + ") OR [Id]='" + currentId + "'";

// Execute the expanded query
bc.ClearToQuery();
bc.SetSearchExpr(expr);
bc.ExecuteQuery(ForwardBackward);

// Position the cursor in the record we were
var isRecord = bc.FirstRecord();
while (isRecord && (bc.GetFieldValue("Id") != currentId)) {
    isRecord = bc.NextRecord();
}

答案 2 :(得分:0)

  

然后更新BC数据(使用BC的新实例 - 数据更改将不会在屏幕上显示)。一旦结束,我需要刷新小程序

您是否尝试为其中一个字段设置ImmediatePost = TRUE,您的BC正在改变?从理论上讲,它会触发刷新,但我不确定,它是否可以从当前上下文或现在的不同BC中发挥作用,但这只是一个想法。