我一直在想一阵的是如何扩展SharePoint帮助系统。前阵子我写过 如何在SharePoint中修改“系统”页面 通过有效地添加新页面-我使用的示例是:
- 自定义的回收站页面,其中仅显示当前用户删除的项目
- 一个自定义的“中央管理”页面,其中包含特定于我的虚拟组织的管理员的消息
当实现这样的自定义时,我认为能够添加自定义帮助以伴随新功能会很有用。因此,今天我着手研究SharePoint帮助系统,以了解如何执行此操作。不幸的是,到目前为止,我的回答是这很困难,而且我还没有弄清所有问题!但是,我想详细说明我发现的内容,希望它对某人仍然有用,或者知道的人可以发表评论或链接并完成拼图。
因此,明确地说,我在谈论如何添加自定义 应用 帮助页面-与WSS和MOSS SDK参考的2 .chm文件无关。在站点或中央管理页面中,应用程序帮助页面从顶部栏中的帮助图标链接到:
如您所料,此图标(及其后面的链接)由页面的母版页提供。单击该链接将调用一个名为TopHelpButtonClick()的JavaScript函数。 core.js 打开帮助窗口-在大多数页面上都会传递“ NavBarHelpHome”参数,尽管值得注意的是,这些页面链接到除 默认 帮助页面会覆盖此值。由于所有页面都说中央管理器共享相同的母版页(并且JS调用位于母版页中,而不是实际页面中),因此core.js中的代码将检查该页面本身是否指定了替代。因此,各个页面可以使用以下脚本块覆盖母版页中指定的帮助位置:
<脚本 类型="文字/ javascript" 语言="的JavaScript">
变种 navBarHelpOverrideKey = “ OSSCentralAdmin”;
</脚本>
然后,Core.js将使用此替代参数而不是'NavBarHelpHome'构建链接,这意味着页面可以轻松链接到自定义页面,而不是默认页面。为了链接到自定义帮助页面,您的页面将需要覆盖此值。
此处使用的值链接到存储在C:\ Program Files \ Common Files \ 微软 Shared \ Web服务器扩展\ 12 \ TEMPLATE \ XML \ HELP中的一组映射文件中的值。对于上面显示的值,我们发现映射文件之一“ OssSearchAdmin_HelpKeymap.xml”包含以下内容:
<帮助图>
<键>OSSCentralAdmin</键>
<collectionId>MS.SEARCH.ADMIN。清单</collectionId>
<contextId>MS.SEARCH.ADMIN.OSSCentralAdmin</contextId>
</帮助图>
此目录中的映射文件集都包含相似的条目,即,每个页面都有一个对应的条目,用于指定默认帮助页面的替代。由于这些文件似乎没有遵循任何命名约定,因此我敢冒险将任何具有正确架构的XML文件放入此处,帮助系统将其选中。当找到这些引用指向的内容时,事情变得很有趣!使用Visual Studio“在文件中查找”在“ 12”目录中进行的初始搜索不会产生任何结果,但是与大多数其他情况一样,值得进一步研究。在\\ 12 \ HCCab \ 1033 \目录中是一组.cab文件,这些文件存储SharePoint帮助系统中使用的帮助文件。在上面的示例中,“ MS.Search.Admin.HC.cab”文件是被引用的文件。在内部,我们看到许多文件,其中一个名为“ MS.SEARCH.ADMIN。清单.xml”,您会注意到该文件的值是 <collectionId> 在上面的映射中。一个.cab文件的内容如下:
到目前为止,快速回顾了一下-我们发现了如何覆盖显示的初始帮助页面,以及指定的键如何链接到打包为“ HCCab \”中cab文件的一组帮助文件。<localeId>' directory.
清单文件显然是.cab中文件的索引如何链接的关键。顺便说一句,对于那些熟悉构建SharePoint解决方案包的人来说,这里使用的架构与那里使用的“ manifest.xml”文件完全无关。 查看这些清单文件中的一个文件的内容,让我印象深刻的第一件事是它看起来像系统生成的文件-一方面 父/子和链接关系很多 这将是复杂的 手工记录。摘录如下:
<?XML文件 版="1.0"?>
<救命Collection>
<名称>SearchCentralAdmin</名称>
<ID>MS.SEARCH.ADMIN。清单</ID>
<更改日期>2006-10-13 21:53:57Z</更改日期>
<创建日期>2006-10-13 21:53:57Z</创建日期>
<作者>微软</作者>
<版>11.0.9413.2</版>
<lcid>1033</lcid>
<默认HelpItem>搜索管理员HA10175815</默认HelpItem>
<品牌形象 />
<rootCategory>搜索管理员MSCH10176169</rootCategory>
<反馈 节目="假" />
<救命Items>
<救命Item>
<ID>MS.ADARCH.ADMIN.HA10047848</ID>
<父母>
<父母 排序="4" 主="真正">搜索引擎管理员CH10176336</父母>
<父母 排序="4" 主="真正">搜索引擎管理员CH10176336</父母>
</父母>
<relatedItemsPointingToMe>
<项目 排序="1">MS.ADARCH.ADMIN.HA10047848</项目>
<项目 排序="1">MS.SEARCH.ADMIN.ManageSearchService</项目>
<项目 排序="1">MS.SEARCH.ADMIN.SearchServerSettings</项目>
</relatedItemsPointingToMe>
</救命Item>
<救命Item>
<ID>搜索引擎管理员HA10047852</ID>
<父母>
<父母 排序="6" 主="真正">搜索管理员AD CH10176338</父母>
</父母>
<relatedItemsPointingToMe>
<项目 排序="1">MS.SEARCH.ADMIN.LogSummary</项目>
<项目 排序="1">MS.SEARCH.ADMIN.LogViewer</项目>
</relatedItemsPointingToMe>
</救命Item>
但是,要检查的一件事是在 <默认HelpItem> 确实是最初加载的页面 帮助窗口打开时。就是这样!
我不禁想到,已经使用了帮助文件生成器,可能有必要使用相同的方法来添加自定义帮助页面。 当我开始钻研时,我主要希望找到一些由 nDoc 要么 沙堡 某处,但似乎确实使用了一些我不熟悉的东西。 Robohelp也许?
如果有人能对此有所启示,我很想听听。同时,我注意到其他人通过传递自定义参数然后修改core.js来拦截该问题并打开一个完全自定义的帮助窗口,而不是直接插入现有的帮助系统,从而找到了解决该问题的替代方法。 Ragav Jagannathan关于他的方法的帖子可以在这里找到- http://ragavj.blogspot.com/2007/04/custom-help-window-can-be-opened-by.html。正如Ragav正确指出的那样,自定义core.js文件不受支持,因此在沿这条路线走之前,您应该仔细考虑。
[更新- 尼克·斯旺 MSN要我指出 在Central Admin网站上有一个文档库,其中包含帮助文件。有趣的是,这是存储在文件系统上HCCab文件夹中的同一组文件!很难从IIS日志中得知实际上已提取了哪些文件集,因为 它们似乎是通过动态加载的 '/_layouts/helpContent.aspx'和'/_layouts/help.aspx' pages. Interesting!]
11条评论:
克里斯,嗨,
1.创建一个空白站点。
2.编辑站点的主页。
3.在网站的主页上,有两个Web部件区域(左和右)。
4.在左侧Web部件区域上,添加两个Web部件控件。
5.从“添加Web部件”对话框中,选择SearchBox Web部件。
6.默认情况下,此Web部件显示一个下拉列表和一个文本框控件。
7.如果要排除下拉列表,请更改以下属性-范围下拉列表–下拉模式-选择此项(不显示“范围下拉”)。
8.在“添加Web部件”对话框中,选择“页面查看器Web部件” Web部件。
9.修改页面查看器Web部件’■将属性链接到您的(HelpIndex)文件。
10.此帮助索引文件包含帮助模块名称的列表。
11.每个帮助模块名称都将其链接到相关的(_layouts / html文件夹中的.htm文件)。
12.This Tempalte.htm(Hotel Bookings_template.HTM /
13.Invitations_template.HTM /旅行协助_template.HTM
14.Hometemplate.HTM /CoreRegistration_template.HTM)文件包含一个
(HTML框架)在内部打开帮助内容文件(HomepageTOC.mht / CoreRegistration.mht / Hotel Bookings.mht / Invitations.mht / Travel Assistance.mht)。
15.这些(.mht)文件是MS word帮助用户手册文件,另存为单个
网页(.mht)格式。
16.为此站点创建一个共享服务提供商,并为其启用搜索设置。
17.如果要显示搜索结果,应创建一个文档库并上载这些用户手册,以显示帮助模块文档的链接。
18.为每个模块创建自定义列表,其中每个新项将包含单个帮助内容模块的各个部分。这样可以提供更好的用户导航体验,因为一旦显示了搜索结果,用户只需单击直接显示搜索到的文档的链接,而无需打开整个文档。
西曼塔
嗯,我知道您要去那里,但这并不是我一直在寻找的解决方案。我想我正在寻找与现有帮助框架正确集成的东西,而不是推出自己的解决方案。
谢谢你的主意。
克里斯。
克里斯,你好
我也被同样的事情发现,发现了一些有趣的东西。即使我们删除\ 12 \ HCCab \ 1033 \中的.cab文件,帮助系统也会起作用。因此,这些文件不是从cab文件中获取的。
有一种类型Microsoft.Sharepoint.Help.SPhelpMerge,它允许合并/取消合并一个或多个HC组文件。我尝试使用以下代码合并这些帮助文件:
//我保存了.metadata文件和3个类别的3个元数据文件的位置
字符串mypath = @“ C:\ SampleHelp \ ABC.XYZ.HC”
MergeHC成果结果;
结果= 救命merge.InstallOneHelpCollection(mypath,“ ABC.XYZ”,1033,
false,false,true,true,false);
结果返回为MergeHCOutcome.MergeSuccess。
但是,当我请求它时,我没有得到我的自定义帮助。我收到以下错误:
无法显示帮助。
技术细节:找不到HC。 (abc.xyz.manifest,1033)。
There is no documentation for this SPHelpMerge class, so I feel very difficult to understand its behavior. I also opened a thread in the forum here http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1966496&SiteID=1
我希望我们能尽快缩小这个问题。
Murugan G.
穆鲁根
很好的调查工作!当我开始调查时,我实际上注意到了您的论坛帖子。
我想知道是否可以在Reflector中检查SPHelpMerge?有空的时候我会去看看。
同时,如果您找到解决方案,我很想听听!
干杯,
克里斯。
克里斯你好
我想修改SharePoint Server 2007的帮助系统。但是我发现您编写的内容无法正常工作。您是否找到修改默认帮助系统的方法?
谢谢!
穆尔德
嗨,Mulder,
恐怕我没有机会再对此进行深入研究,因此我没有解决方案来修改现有的帮助框架。
我对您发现的行不通感到困惑(因为我在本文中未提出解决方案),但是如果您指的是“修改'系统'页面”(无济于事)页),我在本文前面提到的位,您可以找到与该文章链接的代码示例(安全地在SharePoint中修改“系统”页面。这些样本肯定有效。
HTH,
克里斯。
克里斯你好
谢谢!
穆尔德
克里斯,你好
我想到了 :)。我们必须使用HCInstal.exe安装.cab文件,其中包含xml,htm,cs,jif和其他帮助内容。安装后,12hive \ HCCab \ 1033文件夹中的文件仅用于进一步更新。 尼克·斯旺指出,该帮助请求来自CA的文档库。
我在Codeproject.com上写过一篇文章 将自定义帮助页面集成到SharePoint 2007帮助系统
这解释了我所有的发现。
希望对您有所帮助。
干杯,
Murugan G.
嗨Murugan,
因此,四个月后,我们有了答案!令人印象深刻的东西,做得好。下次我需要添加自定义帮助页面时,我一定会检查您的过程。
感谢您的文章和链接!
克里斯。
克里斯,您好,我们的环境中有法语包。我已经创建了一个法国网站的标准模板之一。当我单击帮助图标时,我找不到包含以下内容的内容div"Introduction", "商业情报"等等,您能告诉我哪个文件会丢失吗?语言包是否应该重新安装?会影响现有的网站吗?
@匿名,
对不起,我不知道。建议在论坛上发帖。
克里斯。
发表评论