WSS或者MOSS的文档库中通常都通过Send To菜单来提供将文档下载或者邮件发送,你可以通过Download a Copy菜单项来打开/下载一份文档,但又的时候我们可能不想提供这样的方法,那如何来修改定制Send To菜单呢?

 

 SharePoint默认安装路径C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033目录下,有一个CORE.js,在这里你可以找到所有对于这个Context menu的定义。CreateMenu函数负责了对这个Context Menu的创建。 

CreateMenu函数最终还会调用一些列的子函数来创建特定菜单的内容,而在最后它会调用CreateMenuEx函数来对像Meeting列表,Doc列表,Version等菜单项生成。

 

在上边的代码片段中我们可以看到针对ctx.listBaseType==1的文档列表调用了AddDocLibMenuItems函数来进行附加处理生成针对文档库的特定处理菜单项。而在这个函数中你最终会发现一个AddSendSubMenu这个函数,它做什么呢?顾名思义,就是产生SendTo菜单的。我们首先把这个函数的内容全部清空,只剩下函数声明,看看发生了什么?

 

你已经看不到Send To这个菜单项了,如果想移除Download  a Copy那看来就得在这里边做文章了。

if (currentItemFSObjType !=1 &&

                ctx.listBaseType==1 &&

                (serverFileRedirect==null || serverFileRedirect==""

                   || HasRights(0x0, 0x20)))

{

                if (ctx.listTemplate !=109 &&

                                ctx.listTemplate !=119)

                                AddWorkspaceMenuItem(sm, ctx);

                strAction="STSNavigate('"+         ctx.HttpRoot+ "/_layouts/download.aspx?"+ "SourceUrl="+ currentItemEscapedFileUrl+        

                                "&Source="+GetSource()+"&FldUrl="+escapeProperly(ctx.SendToLocationUrl)+"')";

                menuOption=CAMOpt(sm, L_DownloadACopy_Text, strAction, "");

                menuOption.id="ID_DownloadACopy";

}

这里可以很清晰地看到是用上边的几句话生成了SendTo菜单。Ok,可以开始修改了,像它内置的一样,我们用ctx.listName或者ctx.listTemplate来可以限定针对 不同文档库类型或者特定文档列表的生成。比如我们对于一个自己定义的文档库不需要生成Send ToDownload a Copy菜单,可以这么写:

if (currentItemFSObjType !=1 &&

                ctx.listBaseType==1 && ctx.listName != "{A72CF38B-F456-496F-8ED3-FE2122CDE4FF}" &&

                (serverFileRedirect==null || serverFileRedirect==""

                   || HasRights(0x0, 0x20)))

{

                if (ctx.listTemplate !=109 &&

                                ctx.listTemplate !=119)

                                AddWorkspaceMenuItem(sm, ctx);

                strAction="STSNavigate('"+         ctx.HttpRoot+ "/_layouts/download.aspx?"+ "SourceUrl="+ currentItemEscapedFileUrl+        

                                "&Source="+GetSource()+"&FldUrl="+escapeProperly(ctx.SendToLocationUrl)+"')";

                menuOption=CAMOpt(sm, L_DownloadACopy_Text, strAction, "");

                menuOption.id="ID_DownloadACopy";

}

结果正如预料的一样,Download a Copy菜单项消失。 通过这样的方法你还可以添加自己的菜单项,并导航到你自己写的Feature中来处理。

CORE.js里便定义了一系列在客户端操作时生成的交互菜单,路径,甚至于导入导出操作等等,有些时候我们不妨通过改变CORE.js来轻松的实现一些小的功能。当然,因为这属于系统本身的库,我们还是建议大多数情况下不要更改。

posted on 2008-12-08 18:08  Allan.  阅读(1745)  评论(3编辑  收藏  举报