不少情况下需要当视图是只读时(就是在职责的视图中将视图的只读的勾打上),按钮不可点击,我这里介绍两种方法:
方法一:在你使用的Application的Application_PreNavigate事件中撰写类似如下代码,也就是当要导航到的视图是只读视图时,设置名称为IsViewReadOnly的ProfileAttr的属性为Y,否则设置为N。
function Application_PreNavigate (DestViewName, DestBusObjName)
{
if(TheApplication().InvokeMethod("IsViewReadOnly",DestViewName) == "TRUE" )
{
TheApplication().SetProfileAttr("IsViewReadOnly","Y");
}
else
{
TheApplication().SetProfileAttr("IsViewReadOnly","N");
}
return (ContinueOperation);
}
然后在按钮执行事件的CanInvokeMethod 的值中加入这样一行:AND GetProfileAttr("IsViewReadOnly") = "N" 即可实现啦,比如设置成这样:
Status = LookupValue("FS_ORDER_STATUS", "200") AND [Control Status] = LookupValue("ZTE_AGREE_CON", "1") AND [Info Id] IS NULL AND GetProfileAttr("IsViewReadOnly") = "N"
方法二:通过在Applet的 WebApplet_PreCanInvokeMethod 事件中撰写类似如下的代码:
function WebApplet_PreCanInvokeMethod (MethodName, &CanInvoke)
{
if(MethodName =="CustomMethod1" || MethodName =="CustomMethod2")
{
//当视图只读时,自定义按钮不可用
if (TheApplication().InvokeMethod("IsViewReadOnly", TheApplication().ActiveViewName()) == "TRUE")
{
CanInvoke = "FALSE";
return (CancelOperation);
}
}
return (ContinueOperation);
}
两个方法各有千秋,第一种方法,撰写代码少,撰写一次代码,其余都是配置User Property来实现,每个需要控制按钮的CanInvokeMethod都要修改一下。第二种方法是每个要做控制的Applet的WebApplet_PreCanInvokeMethod的都需要撰写代码。个人倾向于第一种,配置多,代码少嘛,而且这个名为IsViewReadOnly 的Profile Attr还可以在别的地方重用。
评论