随笔 - 58  文章 - 0  评论 - 277  阅读 - 46万 

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   Allan.  阅读(1745)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示