在某些小程序中使Siebel字段只读



我正在使用Siebel 7.8。我有一个重新验证,根据条件使字段只读,但仅适用于某些小程序。

以下是我已经放弃的一些选项:

  • Applet用户属性只读字段n:这将是实现此功能的理想方法,但恐怕它仅在Siebel 8.x中可用。显然,Siebel 7.8仅在小程序类为CSSFrameListQuoteItem时才支持它,而我的情况并非如此。(如果我错了,请纠正我——我在书架和支持网站上都没有找到关于这个用户属性的任何官方信息)。

  • BC用户属性字段只读字段:它会使字段处处只读,这是不可接受的。我知道我可以复制buscomp,添加用户属性,并在我的小程序中使用它,但我真的很真的不想克隆它。

  • BC用户属性字段只读字段,取决于活动视图:好的,这个可以工作。我会添加一个带有IIf([MyConditionsForReadOnly]='Y' AND GetProfileAttr('ActiveViewName')='MyView', "Y", "N")这样的表达式的计算字段,并将其用作只读标志然而,我的小程序所在的视图列表相当长。。。我可能忘了加一个这样的wiews。此外,我们应该记住,每次添加包括其中一个小程序的新视图时,都要更新计算字段——这不是很实用,不是吗?

  • 服务器脚本。我可以取消对PreSetFieldValue的操作,但同样,我应该根据活动视图名称而不是小程序的名称来执行操作。(我可以检索触发BC事件的小程序的名称吗?我认为这是不可能的…)

  • 浏览器脚本,可能在小程序的控制级别?不,谢谢。。。

我刚刚没什么想法。我是不是错过了什么?有没有一个干净的方法来执行这个要求?

我看到您决定弹出一个错误,而不是将字段设置为只读。

我想分享几年前我做的一些事情,让一个字段只读,不确定这是否是最好的解决方案。您可以使用切换小程序。

您可以有两个小程序,一个是字段只读的,另一个是可编辑的。然后使用条件在它们之间切换。该字段将是只读的,不需要编写脚本。

另一种选择是,如果你的小程序是表单小程序,你可以用浏览器脚本将字段变成只读。

使用FindControl或FindActiveControl并使用.readOnly=true

我终于做到了,没有给应用程序带来太多麻烦。

我的一个假设是错误的:您可以在脚本中检索活动小程序的名称。。。服务器脚本无法做到这一点,但浏览器脚本可以做到。

这是我放在buscomp浏览器脚本上的一段代码:

function BusComp_PreSetFieldValue (fieldName, value)
{
// ...
var currentApplet = TheApplication().ActiveApplet().Name();
if ((fieldName == "MyField") && (currentApplet == "MyApplet1") && otherConditions) {
alert("You can't do that!");
return "CancelOperation";
}
return "ContinueOperation";
}

它工作得很好。我更喜欢基于小程序的解决方案,而不是将代码放在BC中,但至少它不依赖于视图。

最新更新