使Siebel字段仅在某些applet中读取

时间:2014-02-12 12:18:59

标签: siebel

我正在使用Siebel 7.8。我只是根据条件对字段进行读取,但仅限于某些小程序。

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

  • Applet用户属性只读字段n :这将是理想的做法,但我担心它只能在Siebel 8中使用。 X。显然,如果applet类为CSSFrameListQuoteItem,Siebel 7.8仅支持它,这不是我的情况。 (如果我在这里错了,请纠正我 - 我没有在这个用户财产中找到任何官方信息,无论是在书架还是支持网站上。)

  • BC用户属性字段只读字段 :它会使字段只在任何地方读取,这是不可接受的。我知道我可以制作buscomp的副本,添加用户属性,并在我的applet中使用它,但我真的真的不想克隆它。

  • BC用户属性字段只读字段,具体取决于活动视图:好的,这个可以使用。我将添加一个带有IIf([MyConditionsForReadOnly]='Y' AND GetProfileAttr('ActiveViewName')='MyView', "Y", "N")表达式的计算字段,并将其用作只读标志。 然而,我的applet所在的视图列表很长...我可能忘记添加其中一个wiews。此外,我们应该记得每次添加包含其中一个applet的新视图时更新计算字段 - 不是很实用,不是吗?

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

你可以有两个applet,一个是只读字段,另一个是可编辑的。然后使用条件在它们之间切换。 该字段为只读字段,无需编写脚本。

另一种选择,如果您的applet是表单小程序,您可以使用浏览器脚本来将该字段设置为只读。

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

答案 1 :(得分:0)

我终于设法做到了,没有弄乱太多的应用程序。

我对自己的一次出现是错误的:你可以在脚本中检索活动applet的名称......它只是无法用服务器脚本完成,但是可以使用浏览器脚本

这是我在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";
}

完美无缺。我更喜欢基于applet的解决方案,而不是将我的代码放在BC中,但至少它不依赖于视图。