上善若水
愿倾其毕生之功,高扬.NET旗帜
说起来也只是对工具栏默认事情的重载,首先要认识一下,业务对象的工具栏事件是如何形成的?正如标题所示,这里提到了两类按钮,一种是业务对象的,一种是流程的,下面对他们在WEB如何生成说明一下。
业务对象:
var toolMenu = new mw.controls.ContextMenu();
if ("F" =="F")
{
    var acceptMenu 
= new mw.controls.MenuItem("签收","accept",$mappath("~/icons/Accept.gif"));                      
    acceptMenu.onClick.addHandler(acceptOnClick);                 
    toolMenu.appendItem(acceptMenu);
}


var cancelAcceptMenu 
= new mw.controls.MenuItem("取消签收","cancelAccept",$mappath("~/icons/cancelAccept.gif"));                      
cancelAcceptMenu.onClick.addHandler(cancelAcceptOnClick);                 
toolMenu.appendItem(cancelAcceptMenu);
var deleteMenu 
= new mw.controls.MenuItem("删除","delete",$mappath("~/icons/delete.gif"));                      
deleteMenu.onClick.addHandler(deleteOnClick);                 
toolMenu.appendItem(deleteMenu);
var terminateMenu 
= new mw.controls.MenuItem("中止","terminate",$mappath("~/icons/terminate.gif"));                      
terminateMenu.onClick.addHandler(terminateOnClick);                 
toolMenu.appendItem(terminateMenu);
var jumpMenu 
= new mw.controls.MenuItem("跳转","jump",$mappath("~/icons/Jump.gif"));                      
jumpMenu.onClick.addHandler(jumpOnClick);                 
toolMenu.appendItem(jumpMenu);
var remarkMenu 
= new mw.controls.MenuItem("备注","remark",$mappath("~/icons/Remark.gif"));                      
remarkMenu.onClick.addHandler(remarkOnClick);                 
toolMenu.appendItem(remarkMenu);

toolMenu.onHide.addHandler(function()
{
    bdDetailModule.toolBar.items[
"more"].setChecked(false);        
}
);
流程对象:
with (bdDetailModule.toolBar)
{
    appendItem(
null"|");
    appendItem(
"send""发送", $mappath("~/icons/send.gif")).onClick.addHandler(sendOnClick);
    
if (1 >0)
        appendItem(
"sendBack""回退", $mappath("~/icons/SendBack.gif")).onClick.addHandler(sendBackOnClick);
    
if ("F" =="T")
        appendItem(
"accept""签收", $mappath("~/icons/Accept.gif")).onClick.addHandler(acceptOnClick);   
    appendItem(
null"|");
    appendItem(
"viewChart""查看流程图", $mappath("~/icons/Graphic.gif")).onClick.addHandler(viewChartOnClick);
    appendItem(
"log""查看日志", $mappath("~/icons/Log.gif")).onClick.addHandler(viewLogOnClick);
    appendItem(
null"|");
    appendItem(
"more","其他操作",$mappath("~/icons/tool.gif")).onClick.addHandler(
    function(sender,args)
    
{
        sender.setChecked(
true);
        toolMenu.setIgnoreClick(
true);
        toolMenu.popup($left(sender.container), $top(sender.container) 
+ $height(sender.container));  
    }
);
}

从前面的形成过程,我们可以看出两者在引用机制上的不一样。现在就自定义事件的步骤作如下说明:
(1)       因为要在脚本在皮肤中生效,所以必须在application.js中写脚本,这样必须配置应用的周知标志,一般是按照包的顺序命名
(2)       引用空间$import("mw.businesslogic.BusinessDataManagerClass");
(3)       最好在Application_onStart事件中判断bdDetailModule的存在,结构如下:

function Application_onStart()
{
    
if(typeof(bdDetailModule)!="undefined")
    
{    
}

}

(4)   通过三种方式实现
//加载BaseDetailModule的默认事件

bdDetailModule.onLoad.addHandler(function()
         
{

                 }
);

//通过直接引用变量加载事件

//判断deleteMenu是否存在,因为这里可能在业务对象中不存在删除按钮
if(window.deleteMenu)
{
    deleteMenu.onClick.insertHandler(
0,function()
                   
{

                                   }
);
}

//通过位置索引加载事件

if(bdDetailModule.toolBar.items[9].text == "发送")
{
     bdDetailModule.toolBar.items[
9].onClick.insertHandler(0,function()
            
{
            }
);
}

这里要可以通过var objID = bdDetailModule.activeBDDetailModule.objID获取当前流程的业务对象ID

posted on 2007-08-28 16:42  小兔快跑  阅读(149)  评论(0)    收藏  举报