2007年8月27日,星期一

将自定义帮助页面添加到SharePoint很复杂!

我一直在想一阵的是如何扩展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.为每个模块创建自定义列表,其中每个新项将包含单个帮助内容模块的各个部分。这样可以提供更好的用户导航体验,因为一旦显示了搜索结果,用户只需单击直接显示搜索到的文档的链接,而无需打开整个文档。

克里斯·奥'Brien说过...

西曼塔

嗯,我知道您要去那里,但这并不是我一直在寻找的解决方案。我想我正在寻找与现有帮助框架正确集成的东西,而不是推出自己的解决方案。

谢谢你的主意。

克里斯。

匿名 said...

克里斯,你好

我也被同样的事情发现,发现了一些有趣的东西。即使我们删除\ 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.

克里斯·奥'Brien说过...

穆鲁根

很好的调查工作!当我开始调查时,我实际上注意到了您的论坛帖子。

我想知道是否可以在Reflector中检查SPHelpMerge?有空的时候我会去看看。

同时,如果您找到解决方案,我很想听听!

干杯,

克里斯。

邢永伟说过...

克里斯你好
我想修改SharePoint Server 2007的帮助系统。但是我发现您编写的内容无法正常工作。您是否找到修改默认帮助系统的方法?

谢谢!

穆尔德

克里斯·奥'Brien说过...

嗨,Mulder,

恐怕我没有机会再对此进行深入研究,因此我没有解决方案来修改现有的帮助框架。

我对您发现的行不通感到困惑(因为我在本文中未提出解决方案),但是如果您指的是“修改'系统'页面”(无济于事)页),我在本文前面提到的位,您可以找到与该文章链接的代码示例(安全地在SharePoint中修改“系统”页面。这些样本肯定有效。

HTH,

克里斯。

邢永伟说过...

克里斯你好

谢谢!

穆尔德

匿名 said...

克里斯,你好

我想到了 :)。我们必须使用HCInstal.exe安装.cab文件,其中包含xml,htm,cs,jif和其他帮助内容。安装后,12hive \ HCCab \ 1033文件夹中的文件仅用于进一步更新。 尼克·斯旺指出,该帮助请求来自CA的文档库。

我在Codeproject.com上写过一篇文章 将自定义帮助页面集成到SharePoint 2007帮助系统

这解释了我所有的发现。

希望对您有所帮助。

干杯,
Murugan G.

克里斯·奥'Brien说过...

嗨Murugan,

因此,四个月后,我们有了答案!令人印象深刻的东西,做得好。下次我需要添加自定义帮助页面时,我一定会检查您的过程。

感谢您的文章和链接!

克里斯。

匿名 said...

克里斯,您好,我们的环境中有法语包。我已经创建了一个法国网站的标准模板之一。当我单击帮助图标时,我找不到包含以下内容的内容div"Introduction", "商业情报"等等,您能告诉我哪个文件会丢失吗?语言包是否应该重新安装?会影响现有的网站吗?

克里斯·奥'Brien说过...

@匿名,

对不起,我不知道。建议在论坛上发帖。

克里斯。