0

我正在使用 Siebel 7.8。我要求根据条件使字段只读,但仅适用于某些小程序。

这些是我已经丢弃的一些选项:

  • Applet 用户属性Read Only Field n:这将是执行此操作的理想方法,但恐怕它仅在 Siebel 8.x 中可用。显然,Siebel 7.8 仅在 applet 类为 时才支持它CSSFrameListQuoteItem,而我的情况并非如此。(如果我在这里错了,请纠正我——我在书架和支持网站上都没有找到关于这个用户属性的任何官方信息)。

  • BC 用户属性Field Read Only Field:它会使该字段在任何地方都是只读的,这是不可接受的。我知道我可以制作一个 buscomp 的副本,添加用户属性,并在我的小程序中使用它,但我真的真的真的不想克隆它。

  • BC 用户属性Field Read Only Field,取决于活动视图:好的,这个可以工作。我会添加一个带有类似表达式的计算字段IIf([MyConditionsForReadOnly]='Y' AND GetProfileAttr('ActiveViewName')='MyView', "Y", "N"),并将其用作只读标志。但是,我的小程序所在的视图列表很长......我可能忘记添加这些视图之一。此外,我们应该记住每次添加包含这些小程序之一的新视图时更新计算字段 - 不是很实用,不是吗?

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

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

而且我的想法很新鲜。我错过了什么吗?有没有一种干净的方法来实现这个要求?

4

2 回答 2

1

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

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

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

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

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

于 2014-02-19T12:40:51.103 回答
0

我终于设法做到了,而没有过多地弄乱应用程序。

我的一个假设是错误的:您可以在脚本中检索活动小程序的名称......这不能用服务器脚本来完成,但可以用浏览器脚本来完成。

这是我放在我的 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 中,但至少它不依赖于视图。

于 2014-02-13T12:25:44.270 回答