SPGraphviz是一个强大的工具,它允许用户在SharePoint中创建和展示各种图形化图表,而无需编写代码或使用外部应用程序。无论是组织架构图、门户网站层级、文件版本历史还是逆向工程图,SPGraphviz都能轻松实现。本文将详细介绍SPGraphviz的背景、安装、使用案例以及如何为开发者提供便利。
SPGraphviz基于开源图形渲染库Graphviz实现,该库由AT&T公司的专家在多年前开发。Graphviz是一个C语言库,而SPGraphviz使用了David Brown开发的托管包装器(稍作修改)来调用原生函数。图表定义在常规的.txt文件中,使用DOT语言。DOT是一种特定的领域特定语言(DSL),允许定义图表结构(节点、关系、标题)和布局(颜色、大小、方向等)。尽管DOT语言功能丰富,但对于简单的解决方案,并不需要深入了解它。例如,以下是一个展示门户层级的图表示例:
digraph example {
size="6,6";
node [color=lightblue2, style=filled];
"Start page" -> "Departments";
"Start page" -> "News";
"Start page" -> "Personal sites";
"Departments" -> "IT";
"Departments" -> "HR";
"Departments" -> "Sales";
"Personal sites" -> "Alexey Sadomov";
"Personal sites" -> "...";
}
在这个示例中,定义了一个有向图(digraph example),并指定了节点及其之间的关系。还指定了一些布局设置:图像大小(size="6,6")和节点颜色及填充样式(node [color=lightblue2, style=filled])。这个示例非常直观,可以作为使用SPGraphviz的起点。
要在SharePoint中使用SPGraphviz,它包含一个特殊的Web部件SPGraphvizWebPart,可以根据文本文件中的DOT定义渲染图表。首先,需要在服务器上安装SPGraphviz。它作为一个常规的wsp包发布。按照以下步骤进行安装:
stsadm -o addsolution -filename SPGraphvizWebPart.wsp
stsadm -o deploysolution -local -allowgac -allcontenturls -name SPGraphvizWebPart.wsp
stsadm -o activatefeature -name SPGraphvizWebPart -url http://example.com
请注意,为了使用SPGraphviz,还需要在Web服务器上安装Graphviz。假设已经安装了所有必要的组件。现在可以使用DOT语言定义图表,并使用SPGraphvizWebPart在发布页面上展示它。
以之前展示的DOT定义为例。要在SharePoint中展示图表,需要将包含DOT定义的文本文件上传到站点集合中的某个文档库。之后,转到某个发布页面并添加SPGraphvizWebPart(它应该位于Web部件列表中的Graphviz组下)。最后一步是转到Web部件属性(修改共享Web部件),在“Dot文件URL”属性中指定上传的文件的绝对URL(在Web部件属性编辑器的自定义设置类别下),然后点击应用(对于可以作为DOT定义存储位置的主机有限制。默认情况下,只能使用安装了SPGraphvizWebPart的同一主机。有关如何使用外部主机存储DOT定义的说明,请参见http://spgraphviz.codeplex.com/documentation)。之后,应该能够看到一个基于文本定义的图表的图形表示:
描述了一个非编程图表创建的用例。但SPGraphviz也为开发者带来了巨大的机会。请意识到图表定义是以文本形式制作的。这意味着开发者可以实施自定义代码,根据某些数据自动创建这样的DOT定义,然后设置SPGraphvizWebPart来展示这个定义。例如,以下示例可用于可视化门户层级:
class Program {
static void Main(string[] args) {
if (args.Length != 1) {
Console.WriteLine("Usage: GraphBuilder.exe [url]");
return;
}
Console.WriteLine("digraph sites {");
Console.WriteLine("node [color=lightblue2, style=filled];");
using (var site = new SPSite(args[0])) {
using (var web = site.OpenWeb()) {
foreach (SPWeb subWeb in web.Webs) {
iterateSubWebs(subWeb, web.Title);
}
}
}
Console.WriteLine("}");
}
private static void iterateSubWebs(SPWeb web, string parentNode) {
Console.WriteLine("\"{0}\" -> \"{1}\";", parentNode, web.Title);
foreach (SPWeb subWeb in web.Webs) {
iterateSubWebs(subWeb, web.Title);
}
}
}
这个程序相当简单——它递归地遍历所有站点,并将相应的节点添加到结果DOT定义中。要获取图表,需要运行这个程序并将输出重定向到文件:
GraphBuilder.exe http://example.com > graph.txt
这是一个使用OTB Collaboration Portal站点模板创建的站点上运行此程序的示例。正如看到的,使用SPGraphviz可以实现许多有趣的用例。希望这个项目能使SharePoint站点更具吸引力,并让客户满意。请继续关注并分享在实际生活中使用SPGraphviz的想法。就像另一个开源项目Camlex.NET一样,总是对反馈持开放态度,并希望它对使用SharePoint的工作有所帮助。