<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Sunmoonfire's artistic matrix</title><subtitle type="text">Open mind, keep it simple, and enjoy changes</subtitle><id>http://feed.cnblogs.com/blog/u/21605/rss</id><updated>2012-02-02T04:48:20Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/21605/rss"/><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2011/06/29/2093673.html</id><title type="text">SharePoint 2010 SP1</title><summary type="text">SharePoint 2010 SP1发布了。下载地址：Microsoft Office SharePoint Server 2010 Service Pack 1 (SP1)中文 英文Microsoft SharePoint Foundation 2010 Service Pack 1 (SP1)中文 英文有关更多更新的细节可以参考下面这本白皮书。Service Pack 1 (SP1) for Microsoft SharePoint Foundation 2010 and Microsoft SharePoint Server 2010 (white paper)。也可以直接点此下载该白</summary><published>2011-06-29T10:25:00Z</published><updated>2011-06-29T10:25:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2011/06/29/2093673.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2011/06/29/2093673.html"/><content type="html">&lt;p&gt;SharePoint 2010 SP1发布了。&lt;/p&gt;&#xD;
&lt;p&gt;下载地址：&lt;br /&gt;Microsoft Office SharePoint Server 2010 Service Pack 1 (SP1)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://download.microsoft.com/download/C/A/3/CA30728D-B945-42EA-B293-C4462482D590/officeserver2010sp1-kb2460045-x64-fullfile-zh-cn.exe"&gt;中文&lt;/a&gt;&amp;nbsp; &lt;a href="http://download.microsoft.com/download/9/7/3/9738F0E2-2151-435D-9665-CE0346EC3637/officeserver2010sp1-kb2460045-x64-fullfile-en-us.exe"&gt;英文&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Microsoft SharePoint Foundation 2010 Service Pack 1 (SP1)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://download.microsoft.com/download/D/2/9/D29B177A-5E27-4E2A-869C-07F25936A383/sharepointfoundation2010sp1-kb2460058-x64-fullfile-zh-cn.exe"&gt;中文&lt;/a&gt;&amp;nbsp; &lt;a href="http://download.microsoft.com/download/7/0/0/7002DFA1-831C-414A-AE71-A5D18BEF1E32/sharepointfoundation2010sp1-kb2460058-x64-fullfile-en-us.exe"&gt;英文&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有关更多更新的细节可以参考下面这本白皮书。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/download/en/details.aspx?id=26573"&gt;Service Pack 1 (SP1) for Microsoft SharePoint Foundation 2010 and Microsoft SharePoint Server 2010 (white paper)&lt;/a&gt;&amp;nbsp;。也可以直接点此&lt;a href="http://download.microsoft.com/download/F/2/3/F23F030A-011B-4E83-95CB-1EF338A6AF58/Service-Pack-1-for-SharePoint-Foundation-2010-and-SharePoint-Server-2010.docx"&gt;下载&lt;/a&gt;该白皮书。&lt;/p&gt;&#xD;
&lt;p&gt;更新的文件和版本参考如下的知识库文章。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/2532120"&gt;Technical details about the SharePoint 2010 and Office Server 2010 SP1 releases&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SharePoint爱好者们赶快下载吧。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/2093673.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2011/06/29/2093673.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2011/02/12/1950140.html</id><title type="text">SharePoint 2010的网站主题</title><summary type="text">从SharePoint 2003开始，主题就作为一种自定义SharePoint外观的重要选项。SharePoint 2003和2007中的包括一系列开箱即用的主题，可以被网站所有者通过SharePoint UI应用到SharePoint网站。网页设计师和开发人员可以创建包含自定义图片及CSS文件的自定义主题。定制SharePoint 2007主题的一个问题是，网页设计师或开发人员需要创建自定义的CSS，图片和相关的主题注册文件才能实现主题的自定义。而且需要将其部署到SharePoint Web前端服务器的本地文件系统上。这样无疑就提高了主题定制的门槛...</summary><published>2011-02-12T08:48:00Z</published><updated>2011-02-12T08:48:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2011/02/12/1950140.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2011/02/12/1950140.html"/><content type="html">&lt;p&gt;从SharePoint 2003开始，主题就作为一种自定义SharePoint外观的重要选项。SharePoint 2003和2007中的包括一系列开箱即用的主题，可以被网站所有者通过SharePoint UI应用到SharePoint网站。网页设计师和开发人员可以创建包含自定义图片及CSS文件的自定义主题。&lt;br /&gt;定制SharePoint 2007主题的一个问题是，网页设计师或开发人员需要创建自定义的CSS，图片和相关的主题注册文件才能实现主题的自定义。而且需要将其部署到SharePoint Web前端服务器的本地文件系统上。这样无疑就提高了主题定制的门槛，因为需要一定的技术知识和对物理服务器的访问权限，所以非技术人员和最终用户很难对SharePoint网站视觉设计进行灵活的修改。&lt;/p&gt;&#xD;
&lt;p&gt;SharePoint 2010也支持主题，但其工作机制已发生很大变化。Miicrosoft对整个主题框架进行大调整的目的之一就是，希望非技术用户能够方便的进行站的视觉设计，并能够通过SharePoint用户界面对主题进行定制。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用主题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;全新的主题编辑器可以在"网站设置"下"外观"里的"网站主题"下找到，页面上提供了一个列表框，可以选择某个主题。这和SharePoint 2007里的页面一样，可以看到很多熟悉的主题名称，尽管主题本身已经发生了很大的变化。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img width="690" src="http://pic002.cnblogs.com/images/2011/18046/2011021212580520.png"  /&gt;&lt;br /&gt;现在，我们可以通过SharePoint用户界面选择一个主题，然后定制其字体和颜色。SharePoint 2010主题的一大优点就是更加标准化：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&amp;nbsp;4种控制背景和文字的颜色（深色1[Dark1]，浅色1[Light1]，深色2[Dark2]，浅色2[Light2]），作为该主题的核心色调。这些颜色将作为该主题样式的主旋律，并最大程度的影响网站的整体外观。&lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;6种强调色(accent)可以使您设计的风格更加成熟，允许我们最大程度的控制激活或悬停超链接的颜色，边框的颜色，特定内容的文字颜色（如系统菜单，组标题，标题区等）。&lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;两种字体用于标题和内容元素。&lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;两种颜色用于超链接&amp;lt;hyperlinks&amp;gt;（正常[normal]的和访问过后的[followed]） &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;除了直接提供给用户选择的颜色外，主题生成器会为每种颜色自动生成5种附加色（通过亮变化和暗变化）。 每一种变化所使用的标签为（以强调文字颜色 1 [Accent 1]为例）：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;强调文字颜色 1&amp;nbsp;（用户选定的颜色）&lt;/li&gt;&#xD;
&lt;li&gt;强调文字颜色 1 &amp;ndash; 最亮 [Accent 1 -&amp;nbsp;Lightest]&lt;/li&gt;&#xD;
&lt;li&gt;强调文字颜色 1 &amp;ndash; 偏亮 [Accent 1 -&amp;nbsp;Lighter]&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;强调文字颜色 1 &amp;ndash;&amp;nbsp;中等&amp;nbsp;[Accent 1 -&amp;nbsp;Medium]&amp;nbsp;&lt;/li&gt;&#xD;
&lt;li&gt;强调文字颜色 1 &amp;ndash; 偏暗&amp;nbsp;[Accent 1 -&amp;nbsp;Darker]&amp;nbsp;&lt;/li&gt;&#xD;
&lt;li&gt;强调文字颜色 1 &amp;ndash;&amp;nbsp;最暗&amp;nbsp;[Accent 1 -&amp;nbsp;Darkest]&amp;nbsp;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;色彩和色调变化是网页设计师进行视觉设计时的常用技法，常用于边框效果，渐变等。在本文的后面部分，我将演示这些色彩是如何通过CSS文件的方式来引用的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;剖析一个主题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SharePoint 2007里的主题是一个由CSS，图片，主题信息文件组成的集合，存放在相对于SharePoint的根目录的下。在SharePoint 2010里，你仍然可以找到2007的主题，历史的原因，仍放在相同的相对目录14\Template\Themes下。&lt;/p&gt;&#xD;
&lt;p&gt;然而，真正的SharePoint 2010主题实际上存放在相对于SharePoint根目录的14\Template\Global\Lists\Themes下。格式也已经发生了很大的变化。主题现在使用Office Open XML的格式进行了打包，变成一个.THMX文件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img width="690" src="http://pic002.cnblogs.com/images/2011/18046/2011021213244346.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;THMX文件是一个包含了主题样式XML定义和图片资源的zip文件。 一个主题文件内部结构的完整描述已经超出了本文的范围，你可以参考MSDN上的文章来&amp;ldquo;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/cc964302.aspx"&gt;创建Office Open XML格式的文档主题&lt;/a&gt;&amp;rdquo;。&lt;/p&gt;&#xD;
&lt;p&gt;主题也可以通过"网站设置"下"库"下面的"主题"来查看，这种方式打开的是主题库。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;主题如何用于页面呈现&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SharePoint 2010关联到CSS的方式与SharePoint 2007大致相同，都是采用了在母版页&amp;lt;HEAD&amp;gt;部分添加控件的方式。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;SharePoint:CssLink runat="server" Version="4"/&amp;gt;&#xD;
&amp;lt;SharePoint:CssRegistration Name="/Style Library/Custom.css" After="true" runat="server" EnableCssTheming="true"/&amp;gt;&#xD;
&amp;lt;SharePoint:Theme runat="server"/&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;虽然我们一直以来都习惯通过标准的HTML&amp;lt;link&amp;gt;属性来在母版页中包含CSS样式表，但是CssLink，CssRegistration和Theme控件可以提供特殊的功能，因此这种方式在2010中继续作为一种在我们的设计中插入样式表关联的推荐方式。这里给出每个控件的简要介绍：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&amp;lt;SharePoint:CssLink&amp;gt;控件负责插入SharePoint默认的核心样式表和任何通过CssRegistration控件注册的自定义样式表。&lt;/li&gt;&#xD;
&lt;li&gt;&amp;lt;SharePoint:CssRegistration&amp;gt;控件允许注册任何自定义的CSS样式。 实际插入到页面中的&amp;lt;link&amp;gt;是通过CssLink控件完成的。&lt;/li&gt;&#xD;
&lt;li&gt;&amp;lt;SharePoint:Theme&amp;gt;控件会检查是否有主题被应用到当前站点，并负责关联到主题的样式表。&lt;br /&gt;注：由于历史的原因，本控件似乎仍然包含在SharePoint 2010母板页中。对于SharePoint 2010主题，该控件似乎不再是必需的。 &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;还是上面的例子，让我们来看看在没有应用主题时页面输出的&amp;lt;link&amp;gt;：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;link rel="stylesheet" type="text/css" href="/_layouts/2052/styles/Themable/search.css?rev=13MPCAdDiTOjeBSP8ulMLA%3D%3D"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/_layouts/2052/styles/Themable/wiki.css?rev=YwZnjCtjmh%2B5m0%2BZ4o%2Fw%2Fw%3D%3D"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/_layouts/2052/styles/Themable/corev4.css?rev=hMUVPfEXdjj0KHpLKexFuA%3D%3D"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/Style%20Library/Custom.css"/&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;在上面的例子中，我们可以看到通过CssLink控件插入了数个SharePoint自带的样式表。 同时还可以看到，我自定义的CSS也已经输出在最后一行，直接关联到样式库中存储的原始CSS文件。&lt;/p&gt;&#xD;
&lt;p&gt;在应用了一个现成的主题后，我们可以看到，SharePoint修改了输出到页面的样式表关联。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;link rel="stylesheet" type="text/css" href="/_catalogs/theme/Themed/67B9FADD/search-BBB12040.css?ctag=6"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/_catalogs/theme/Themed/67B9FADD/wiki-8D6982C.css?ctag=6"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/_catalogs/theme/Themed/67B9FADD/corev4-24A0E46F.css?ctag=6"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/_catalogs/theme/Themed/67B9FADD/Custom-37A53504.css?ctag=6"/&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;在SharePoint 2007里，应用主题后会在页面的输出中插入一个额外的样式表关联。 该主题中包含的样式将会通过CSS的层叠行为覆盖任何核心样式或自定义样式。&lt;/p&gt;&#xD;
&lt;p&gt;在SharePoint 2010中的行为已经发生了改变。 当一个主题应用时，SharePoint会实时的自动生成该主题的CSS和图片，并将它们存储在应用该主题的站点的_themes文件夹下。&lt;/p&gt;&#xD;
&lt;p&gt;如果我们用SharePoint Designer打开该网站，可以看到SharePoint创建的这个文件夹，其中包含了生成的主题文件。 文件夹名称是一个唯一的数字标识符，该数字是在应用一个新的主题时生成的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/18046/2011021214343575.png"  /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;要注意的很重要的一点是，SharePoint已经用主题化后的变体替代了所有原来的CSS关联。在SharePoint 2010里，当生成一个主题时，SharePoint利用嵌入在原先样式表中的指令来生成替换后的样式表。这种自动生成和替换只有在满足以下两个条件的情况下才会触发：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&amp;nbsp;自带的样式表是*主题化(themable)*的。这些样式表实际上可以很容易的通过引用它们的虚目录区分出来，因为它们位于_layouts/2052/styles/themeable目录中。&lt;/li&gt;&#xD;
&lt;li&gt;用于我们的自定义样式表的CSSRegistration控件需要具有 EnableCssTheming=&amp;rdquo;true&amp;rdquo; 这一属性。 &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;如果我们没有启用CSS主题化，那么SharePoint会把我的自定义样式表输出在页面最后一行，并且仍旧直接关联到样式库中原来的CSS文件。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;link rel="stylesheet" type="text/css" href="/_catalogs/theme/Themed/67B9FADD/search-BBB12040.css?ctag=6"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/_catalogs/theme/Themed/67B9FADD/wiki-8D6982C.css?ctag=6"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/_catalogs/theme/Themed/67B9FADD/corev4-24A0E46F.css?ctag=6"/&amp;gt;&#xD;
&amp;lt;link rel="stylesheet" type="text/css" href="/Style%20Library/Custom.css"/&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;em&gt;注意：并有没有硬性的规定说自定义样式表必须支持主题， 只是在SharePoint 2007基础上多了一种选择。在SharePoint 2010里，你完全可以根据所要达到的效果选择合适的方式将自定义样式表关联到母版页，并且取消用户应用主题的能力。这种情况往往会在发布网站上碰到，往往是这类网站共同的做法。网站管理员不希望用户覆盖默认的样式。&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;在自定义样式表中支持主题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在SharePoint 2007中，核心和自定义样式表不需要考虑任何与主题相关的事情。 SharePoint使用CSS的层叠能力使用主题中的CSS直接覆盖关联到母板页的核心和默认的自定义样式。&lt;/p&gt;&#xD;
&lt;p&gt;在SharePoint 2010中此行为发生了变化。现在核心样式表和任何我们开发的自定义样式表都需要包含一些标记，以便支持主题。 学习如何操作的最简单的方式就是打开现有的样式表，看看他们是如何做到这一点的：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;.ms-menutoolbar td a{&#xD;
/* [ReplaceColor(themeColor:"Hyperlink")] */ color:#0072bc;&#xD;
font-size:9pt;&#xD;
font-family:宋体;&#xD;
text-decoration:none;&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;在上面的例子中，我们看到，为了支持主题，样式表中的CSS的注释插入了一些特定的指令。通过这些特殊指令，SharePoint就可以用主题中定义的命名样式覆盖默认的样式。&lt;/p&gt;&#xD;
&lt;p&gt;下面是另外的一些例子，也是从默认样式中找到的，可以帮助我们编写自己的样式表来支持主题：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;[ReplaceColor(themeColor:"Light1")]&#xD;
 [ReplaceColor(themeColor:"Accent3-Darker")] &#xD;
 [ReplaceColor(themeColor:"Light2-Lightest")]&#xD;
 [RecolorImage(themeColor:"Light2",includeRectangle:{x:0,y:610,width:1,height:42})]&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;请注意，SharePoint现在可以在生成主题过程中自动重新着色图片(RecolorImage) - 给力啊！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;br /&gt;将SharePoint 2007的主题升级到SharePoint 2010&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;到目前为止，我还没有看到任何有关升级SharePoint 2007主题的文章。 再加上SharePoint 2010的主题支持，升级SharePoint 2007主题实际上就是把旧的完全换掉：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;可以用Office PowerPoint 2010创建自定义主题，并部署到网站的主题库中。 Todd Baginski 写过一篇&lt;a target="_blank" href="http://www.toddbaginski.com/blog/archive/2009/11/02/how-to-create-a-custom-theme-for-sharepoint-2010.aspx.aspx"&gt;如何创建SharePoint 2010自定义主题&lt;/a&gt;的文章。 如果你的自定义主题是只限于基本的文字和颜色属性的话，通过这种方式实现起来会很方便。但如果你自定义的主题中包含了一些高级的CSS技巧，那么仍需手工编写代码。&lt;/li&gt;&#xD;
&lt;li&gt;创建一个自定义母版页，直接在母版页中注册您的自定义CSS &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;br /&gt;有些人可能会抱怨说，微软似乎背离了CSS继承的Web标准的本意。但是，网站所有者、管理员和开发人员毕竟会从这种标准的提升中获得便利。 &lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointbits.com/blog/2010/1/4/how-themes-work-in-sharepoint-2010.html"&gt;How Themes work in SharePoint 2010&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1950140.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2011/02/12/1950140.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2011/01/22/1855527.html</id><title type="text">SharePoint 2010整合Silverlight 4应用 - 任务管理</title><summary type="text">在这篇博文中我们讨论了如何整合不同类型的Silverlight到SharePoint 2010。作为一个例子，我们创建了一个自定义的Silverlight应用程序，通过调用SharePoint 2010客户端对象模型来显示任务。 我们还介绍了在SharePoint中存取Silverlight XAP文件的不同方式。</summary><published>2011-01-22T15:24:00Z</published><updated>2011-01-22T15:24:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2011/01/22/1855527.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2011/01/22/1855527.html"/><content type="html">&lt;p&gt;SharePoint 2010可以与Silverlight实现紧密集成。不管是在浏览器中运行的Silverlight程序还是单独的一个Silverlight程序，都能与SharePoint 2010实现很好的整合。本文中我们将实现一个Silverlight和SharePoint高度整合的例子，通过SharePoint 2010客户端对象模型访问SharePoint任务列表。同时，我们还将学习如何通过SharePoint自带的Silverlight Web部件来宿主Silverlight应用。下图是根据我个人的理解绘制的Silverlight和SharePoint 2010应用整合示意图。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122213005386.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从上图我们可以看到，我们分别有SharePoint客户端对象模型（OM）和SharePoint Web服务两种API供 Silverlight应用程序调用。 事实上客户端对象模型和服务这两条途径，不仅仅能用在Silverlight中，还可以用于其它的客户端应用程序中。&lt;/p&gt;&#xD;
&lt;p&gt;在开始编写应用程序之前，我们首先了解一下Silverlight和SharePoint之间不同类型的集成模型。我们可以简单的通过HTML以IFrame的方式显示Silverlight应用程序，也可以将Silverlight应用程序宿主在Web部件中，还可以调用SharePoint对象模型或服务。这些方式彼此之间并没有硬性的分类界限。只是人为的通过使用规模所做的一个区分。 分类如下：&lt;/p&gt;&#xD;
&lt;p&gt;1. 无接触 ：通过无接触方式，可以直接把现有的Silverlight应用集成到SharePoint。 目的只是在SharePoint中进行显示。直接使用iframe即可。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122213090745.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.低接触 ：低接触的应用与SharePoint间的互动多了一点。但也仅仅是通过SharePoint 开箱即用的Silverlight Web部件对Silverlight应用进行装载而已。 这个应用程序本身是一个独立的应用程序，它可能会调用一些除SharePoint API以外的其他服务。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122213100574.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;之前我的一篇博文中，曾讨论过一个典型的低接触的例子。是关于&lt;a target="_blank" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/07/27/1786104.html"&gt;SharePoint2010整合Silverlight 4应用&amp;mdash;&amp;mdash;Bing地图控件&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img width="700" src="http://images.cnblogs.com/cnblogs_com/sunmoonfire/sharepoint2010/BingMap17.PNG"  /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3.高接触：高接触整合是指利用到SharePoint客户端对象模型或Web服务来读写SharePoint Server信息的应用整合。 应用程序本身可以是一个WPF应用程序，或者是像Silverlight这样的客户端应用程序，或者是ASP.NET 、JavaScript应用程序。下图为一个Silverlight客户端应用程序的高接触整合。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122213005386.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接下来，我们要实现一个Silverlight与SharePoint高接触的应用，通过Silverlight调用客户端对象模型。会对使用客户端对象模型的三种场景都进行描述：&lt;/p&gt;&#xD;
&lt;p&gt;1. 在浏览器中运行的Silverlight应用程序&lt;/p&gt;&#xD;
&lt;p&gt;2. 在浏览器外运行的（Out of Browser,简称OOB）Silverlight应用程序&lt;/p&gt;&#xD;
&lt;p&gt;3. 作为Silverlight XAP文件宿主在SharePoint Web部件中的Silverlight应用程序&lt;/p&gt;&#xD;
&lt;p&gt;首先，我们需要创建一个Silverlight应用程序， 打开Visual Studio 2010&amp;gt;&amp;ldquo;新建&amp;rdquo; &amp;gt;&amp;ldquo;项目&amp;rdquo; 。 选择Silverlight项目模板，并选择.NET Framework 4.0。将该项目命名为&amp;ldquo;SilverlightSPIntegration&amp;rdquo;。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122213593546.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;点击&amp;ldquo;确定&amp;rdquo;按钮后，会弹一个窗口要求自动创建一个Web应用程序，Silverlight应用程序将自动宿主在该Web应用程序中 。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122214001045.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下一步我们要做的就是编写Silverlight程序来调用客户端对象模型的API 。 右击Silverlight解决方案，选择&amp;ldquo;添加引用&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218115432.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里我们需要添加&amp;ldquo;Microsoft.SharePoint.Client.Silverlight.dll&amp;rdquo;和&amp;ldquo;Microsoft.SharePoint.Client.Silverlight.Runtime.dll&amp;rdquo;这两个dll。他们位于"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\ClientBin"文件夹下。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218123731.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;引用添加完成后，整个Silverlight应用程序的文件夹结构如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218125148.png" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;接下来，我们要对&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Silverlight的&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;XAML进行设计，实现SharePoint网站中的某些功能。&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;如上所述，在本例中，我们会&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;从SharePoint内置的&lt;span style="color: #000080;"&gt;任务列表中读取&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;一些数据&lt;span style="color: #000080;"&gt;&amp;nbsp;&lt;/span&gt; 。因此，我们不妨先参考一下SharePoint默认的界面。&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;打开SharePoint网站，从快速启动区中找到&amp;ldquo;任务&amp;rdquo;列表并点击它。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218135884.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;这是&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;默认&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;的SharePoint任务列表。 当然你也可以使用任意的列表，甚至是自定义列表。 只需要根据实际的设计修改对应的用户界面和代码即可。现在，为该任务列表输入一些虚拟的数据。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218144388.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;下面是我为的任务列表添加的一些虚拟数据。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218192363.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;至此，我们完成了SharePoint部分的工作。 接下来我们要创建一个自定义的UI，用Silverlight来显示这些数据。 界面比较简陋，只是为了说明两者是如何实现整合的。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;返回Visual Studio，在Silverlight解决方案中，设计一些简单的XAML界面。 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218195270.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;为了快速设置样式，我用Expression Blend对界面做了一点美化工作。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218202892.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;保存该Expression Blend项目，并在&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Visual Studio中&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;从我们的Silverlight应用程序中打开。&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;它会要求重新加载应用程序，因为内容在当前环境外被修改了。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218173133.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;以下是Silverlight用户界面的XAML代码&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;!--&#xD;
    &amp;lt;Setter Property="MinWidth" Value="150" /&amp;gt;&#xD;
    &amp;lt;Setter Property="MaxWidth" Value="150" /&amp;gt;&#xD;
    &amp;lt;Setter Property="HorizontalAlignment" Value="Left" /&amp;gt;&#xD;
--&amp;gt;&#xD;
&amp;lt;!--&#xD;
    &amp;lt;Setter Property="HorizontalAlignment" Value="Right" /&amp;gt;&#xD;
    &amp;lt;Setter Property="Foreground" Value="Orange" /&amp;gt;&#xD;
--&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;现在，我们&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;完成了界面设计。&lt;/span&gt; &lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;可以按&lt;span style="color: #000080;"&gt;&amp;ldquo;F5&amp;rdquo;&lt;/span&gt;运行一下，看看用户界面的样子。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218225882.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;上图就是我们设计的Silverlight应用程序。它托管在ASP.NET Web应用程序里。 现在就可以使用 SharePoint &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;客户端&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;对象模型来&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;从SharePoint服务器中&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;读取任务列表数据了。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;因为我们要通过类来读取列表的信息，所以首先要创建一个任务类型的类，作为任务的容器。下面是&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;任务类&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;代码。&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;public class Tasks&#xD;
{&#xD;
        public string Title { get; set; }&#xD;
        public string DueDate { get; set; }&#xD;
        public string Status { get; set; }&#xD;
        public string Priority { get; set; }&#xD;
        public double PercentComplete { get; set; }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span&gt;打开&lt;span style="color: #000080;"&gt;MainPage.XAML.CS&lt;/span&gt;文件，添加如下的命名空间&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;using Microsoft.SharePoint.Client;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;添加好命名空间后就可以调用对象模型API了。&lt;/p&gt;&#xD;
&lt;p&gt;下面的示例代码可以从特定的SharePoint站点中获取某列表实例。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;void MainPage_Loaded(object sender, RoutedEventArgs e)&#xD;
        {&#xD;
            using (ClientContext SharePointContext = new ClientContext(this.SPWebSiteURL))&#xD;
            {&#xD;
                this.query = new CamlQuery();&#xD;
                SharePointContext.Load(SharePointContext.Web);&#xD;
                this.task = SharePointContext.Web.Lists.GetByTitle("Tasks");&#xD;
                this.strQuery = @" ";&#xD;
                query.ViewXml = this.strQuery;&#xD;
                this.taskLists = this.task.GetItems(this.query);&#xD;
                SharePointContext.Load(this.taskLists);&#xD;
                SharePointContext.ExecuteQueryAsync(this.OnSiteLoadSuccess, this.OnSiteLoadFailure);&#xD;
            }&#xD;
        }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;SharePointContext.ExecuteQueryAsync方法的执行是异步的。 该方法使用两个回调函数分别处理成功和失败的返回结果。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218273417.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如上面的代码所示，如果我们的程序成功执行，它会调用OnSiteLoadSuccess，否则调用 OnSiteLoadFailure。下面是这两个函数实现代码。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;private void OnSiteLoadSuccess(object sender, ClientRequestSucceededEventArgs e)&#xD;
{&#xD;
    foreach (ListItem item in this.taskLists)&#xD;
    {&#xD;
       Tasks objTask = new Tasks();&#xD;
       objTask.Title = item["Title"].ToString();&#xD;
       objTask.DueDate = item["DueDate"].ToString();&#xD;
       objTask.Status = item["Status"].ToString();&#xD;
       objTask.Priority = item["Priority"].ToString();&#xD;
       double fraction = Convert.ToDouble(item["PercentComplete"]);&#xD;
       objTask.PercentComplete = fraction * 100;&#xD;
       this.SharePointTasks.Add(objTask);&#xD;
    }&#xD;
   AddTaskList( this.SharePointTasks);&#xD;
}&#xD;
&#xD;
private void OnSiteLoadFailure(object sender, ClientRequestFailedEventArgs e)&#xD;
{&#xD;
    MessageBox.Show(e.Message +  e.StackTrace);&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;接下来，我们需要创建一个委托来更新UI。使用Dispatcher.BeginInvoke ，以避免跨线程调用的异常。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;private void AddTaskList()&#xD;
{&#xD;
    this.Dispatcher.BeginInvoke(new UpdateSilverLightUI(this.AddItemsToLists), this.SharePointTasks);&#xD;
}&#xD;
private void AddItemsToLists(List tasks)&#xD;
{&#xD;
    foreach (Tasks t in tasks)&#xD;
    {&#xD;
        TaskList.Items.Add(t.Title);&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;现在，所有的任务已被添加到Silverlight的Task List中，然后我们要处理的ListBox的SelectionChanged事件，并&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;在不同的文本框&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;中显示相应的值。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;private void TaskList_SelectionChanged(object sender, SelectionChangedEventArgs e)&#xD;
{&#xD;
    var v = this.SharePointTasks.FirstOrDefault(item =&amp;gt; item.Title.Equals(TaskList.SelectedItem.ToString()));&#xD;
    if (v != null)&#xD;
    {&#xD;
        txtTitle.Text = v.Title;&#xD;
        txtDueDate.Text = v.DueDate;&#xD;
        txtPriority.Text = v.Priority;&#xD;
        txtStatus.Text = v.Status;&#xD;
        txtPercentage.Value = v.PercentComplete;&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;p&gt;OK，到这里所有的代码编写部分就完成了。但如果你现在尝试运行该应用程序，会得到一个跨域访问异常。因为SharePoint网站宿主在IIS中，而正在运行的应用程序却是在VS里。为了解决这个问题，你必须把clientAccessPolicy.xml文件放到SharePoint站点的根目录。&lt;br /&gt;按F5运行该应用程序。没错，所显示的Silverlight风格的任务列表和前面我们创建的SharePoint列表完全一致。可以点击List中的一个任务来显示详细信息。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218303282.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;至此，我们完成了一个在单独的网站中运行的Silverlight应用，并与SharePoint集成。你可以把这个应用宿主在任何ASP.NET Web应用程序中 。&lt;/p&gt;&#xD;
&lt;p&gt;接下来，让我们把这个Silverlight应用程序变得更有趣些，使其可以在浏览器外运行。事实上仅仅是通过VS2010自带的配置工具做一个小小的修改就OK了。&lt;/p&gt;&#xD;
&lt;p&gt;在解决方案管理器中右键点击Silverlight应用程序 &amp;gt;&amp;ldquo;属性&amp;rdquo;，然后勾选&amp;ldquo;允许在浏览器外运行应用程序&amp;rdquo; 复选框，如下图所示。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218313834.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;点击&lt;span style="color: #000080;"&gt;&lt;span style="color: #000000;"&gt;&amp;ldquo;浏览器外设置...&amp;rdquo;可以做更细的配置&lt;/span&gt;。&lt;/span&gt;&lt;/span&gt; &lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;您可以修改窗口&lt;span style="color: #000080;"&gt;&amp;nbsp;&lt;/span&gt;的高度，宽度和标题等。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218321933.png" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;完成浏览器外设置后，再运行该应用程序，你会发现它现在和Windows应用程序运行效果很相似.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218325662.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;我们已经实现了在浏览器中和在浏览器外的Silverlight应用与SharePoint 集成。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;如何将&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Silverlight应用&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;作为一个SharePoint Web部件宿主在SharePoint中呢。 其实和在一般网站中一样，&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;SharePoint也是通过&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Silverlight的XAP文件实现宿主的，之前我已经在上次讲地图控件的时候提到过。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;首先，我们在与上面的例子相同的解决方案下，新建一个SharePoint 2010项目。选择&amp;ldquo; 空白SharePoint项目 &amp;rdquo;模板。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218335957.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;为项目命名，然后单击&amp;ldquo; &lt;span style="color: #000080;"&gt;确定&lt;/span&gt; &amp;rdquo;。&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;接下来将显示如下的部署向导。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218351180.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;要求输入作为调试的SharePoint网站的位置和部署类型。 你可以使用默认的选择。 点击&amp;ldquo; 确定 &amp;rdquo;， 完成对SharePoint项目的创建。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;现在，我们需要添加一个SharePoint项&amp;mdash;&amp;mdash;模块。 模块包含一个待部署的文件，本身需要包含在一个SharePoint项目中。 要添加一个模块，可以在SharePoint项目上右击，并点击添加新项。 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218354124.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;在SharePoint 2010分类下，选择&amp;ldquo;模块&amp;rdquo;，为其命名，点击&amp;ldquo; &lt;span style="color: #000080;"&gt;添加&lt;/span&gt; &amp;rdquo;。&lt;/span&gt; &lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span  style="text-align: left; direction: ltr;"&gt;然后右击该模块，&lt;span style="color: #000080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;点击&amp;ldquo; &lt;span style="color: #000080;"&gt;属性&lt;/span&gt; &amp;rdquo;。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218360917.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;在属性窗口的&amp;ldquo; &lt;span style="color: #000080;"&gt;项目输出引用&lt;/span&gt; &amp;rdquo;选择器中，做如下图的设置。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218373795.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;请注意，你需要选择部署类型为&amp;ldquo;ElementFile&amp;rdquo;，项目名称应该是Silverlight解决方案的名称 。点击确定 。这是&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;SharePoint模块的&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&amp;ldquo;Element.XML&amp;rdquo;文件中，会添加到Silverlight的xap文件的路径。通过这种方式可以把Silverlight应用添加到SharePoint网站中，使其成为SharePoint的一部分。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;完成我们的SharePoint项目后，就可以编译部署了。 右键单击SharePoint项目，选择部署。这样就完成了部署操作。 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218383270.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;接下来，我们将其宿主到&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;SharePoint网站的&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Silverlight Web部件。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Silverlight Web部件和其他Web部件的使用一样。首先你需要打开SharePoint页面的编辑模式，转到插入，选择Web部件。 选择&amp;ldquo; 媒体与内容 &amp;rdquo;类别，选择SharePoint 自带的Silverlight Web部件。 点击添加 。 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218390517.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;你会看到一个Ajax弹出对话框，要求输入&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Silverlight &lt;span style="color: #000080;"&gt;应用程序包（XAP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt; &lt;span style="color: #000080;"&gt;）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;文件的URL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span style="color: #000080;"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;这里填写上面我们在&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;SharePoint模块&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;的Element.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&amp;nbsp;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;XML文件&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;中指定的URL。&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218394883.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;点击确定。&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;运行成功的话，Silverlight Web部件的显示如下图所示。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218404031.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;如果没有写对URL，保存后会看到如下的错误信息。 提示你可能提供的XAP文件路径有错误，请重新配置。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218413284.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;这时，你必须首先确保你提供的XAP文件路径是有效的。 如果路径有效，再检查一下相应的功能是否已经被激活（可以从网站操作&amp;gt;网站设置中找到管理功能的链接）。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;如果愿意，我们可以把SharePoint的任务列表和 Silverlight WebPart放在一个页面上。 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218421860.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样当我们在任务列表中添加一项新的任务后，新任务同时会反映在我们的Silverlight任务控件中。&lt;/p&gt;&#xD;
&lt;p&gt;如果不想这么麻烦的部署一个XAP文件，也可以简单的把XAP上传到一个文档库中。然后在Web部件中直接指定其在文档库中的路径即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218430355.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122218431453.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;当然，你还可以创建一个&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;SharePoint 2010&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;项目，包含一个&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;自定义Web部件宿主&lt;/span&gt;&lt;span onmouseout="_tipoff()" onmouseover="_tipon(this)"&gt;Silverlight应用，然后再部署该Web部件。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;希望对你有帮助！ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a target="_blank" href="http://www.codeproject.com/Articles/117267/Silverlight-Task-Control-For-SharePoint-2010-Examp.aspx"&gt;Silverlight Task Control For SharePoint 2010 - Example of Hight Touch Integration&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div  id="_mcePaste" style="position: absolute; width: 1px; height: 1px; overflow: hidden; top: 0px; left: -10000px;"&gt;﻿&lt;/div&gt;&#xD;
&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&amp;amp;displayLang=zh-cn"&gt;Microsoft Silverlight 4 Tools for Visual Studio 2010&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1855527.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2011/01/22/1855527.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2010/12/22/1855534.html</id><title type="text">在SharePoint中实现图形可视化</title><summary type="text">本文介绍了在Codeplex上看到的SPGraphviz项目。利用 SPGraphviz，你可以创建自己的图表，架构图，关系图等，并且无需编程或使用任何外部应用程序即可显示在Sharepoint中。你可以用它来显示一个组织结构，门户网站的层次结构，文件的版本历史记录的图形化表示，或项目整体框架等（可以说其应用场景唯一受限与你的想象力）。这里是一些你可以创建（摘自graphviz图库）的图形的例子：背景介绍SPGraphviz是基于开源的图表绘制库Graphviz，这个库是很久以前由 AT&amp;T公司的一批专家实现的。它本身是一个C语言的库...</summary><published>2010-12-22T02:17:00Z</published><updated>2010-12-22T02:17:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/12/22/1855534.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/12/22/1855534.html"/><content type="html">&lt;p&gt;本文介绍了在Codeplex上看到的SPGraphviz项目。&lt;a href="http://spgraphviz.codeplex.com"&gt;http://spgraphviz.codeplex.com&lt;/a&gt;。利用&lt;a href="http://spgraphviz.codeplex.com/" target="_blank"&gt;SPGraphviz&lt;/a&gt;，你可以创建自己的图表，架构图，关系图等，并且无需编程或使用任何外部应用程序即可显示在Sharepoint中。你可以用它来显示一个组织结构，门户网站的层次结构，文件的版本历史记录的图形化表示，或项目整体框架等（可以说其应用场景唯一受限与你的想象力）。这里是一些你可以创建（摘自&lt;a href="http://www.graphviz.org/Gallery.php" target="_blank"&gt;graphviz图库&lt;/a&gt;）的图形的例子：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122122280457.png" alt="" /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122122282030.png" alt="" /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122122283149.png" alt="" /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122122284154.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;背景介绍&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SPGraphviz是基于开源的图表绘制库&lt;a href="http://www.graphviz.org/" target="_blank"&gt;Graphviz&lt;/a&gt;，这个库是很久以前由AT&amp;amp;T公司的一批专家实现的。它本身是一个C语言的库，&lt;span style="color: #800000;"&gt;SPGraphviz&lt;/span&gt;使用David Brown的&lt;a href="http://implicitoperator.com/blog/2009/12/24/rendering-an-in-memory-graphviz-image-with-c.html" target="_blank"&gt;managed wrapper&lt;/a&gt;（有些小的修改）对其进行了包装，从而实现本地调用。图表本身是定义在一个普通的txt文件中的，使用DOT语言来进行描述。这是一种特定的&lt;a href="http://www.graphviz.org/pdf/dotguide.pdf" target="_blank"&gt;DSL语言&lt;/a&gt;，用于定义图表结构（节点，关系，标题）和布局（颜色，大小，方向等）。 DOT是一门相当丰富的语言，但对于简单的解决方案，你不必深入了解。例如，对于下面这样的图表：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122122300332.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这个例子显示了如何使用SPGraphviz来显示门户的层次。我们有根站点，下面有子站点（或子站点集），比如部门下有3个部门的网站，IT部，HR部，销售部。还有一个个人网站的子网站集，根据需要用户可以创建自己的站点（类似MySites）。这个图表可以用下面的DOT的定义来创建：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;digraph example {&#xD;
        size="6,6";&#xD;
        node [color=lightblue2, style=filled];&#xD;
        "Start page" -&amp;gt; "Departments";&#xD;
        "Start page" -&amp;gt; "News";&#xD;
        "Start page" -&amp;gt; "Personal sites";&#xD;
        "Departments" -&amp;gt; "IT";&#xD;
        "Departments" -&amp;gt; "HR";&#xD;
        "Departments" -&amp;gt; "Sales";&#xD;
        "Personal sites" -&amp;gt; "Alexey Sadomov";&#xD;
        "Personal sites" -&amp;gt; "...";&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这里我们定义了一个有向图(diagraph)（diagraph example{}），然后在它里面，我们指定了节点以及节点之间的关系：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;"Start page" &amp;ndash;&amp;gt; "Departments";&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;此外，我们指定一些布局设置：图像大小（&lt;span style="color: #800000;"&gt;size="6,6"&lt;/span&gt;）和节点的颜色以及填充样式（&lt;span style="color: #800000;"&gt;node[color= lightblue2，style=filled]&lt;/span&gt;）。我觉得这个例子很容易理解，你可以拿来入门，从而开始SPGraphviz的体验之旅。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;部署&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;那么，如何在Sharepoint 中使用SPGraphviz呢？它包含了一个Web部件&amp;mdash;&amp;mdash;SPGraphvizWebPart，可以基于文本文件中的DOT定义渲染一个图形。首先，你需要在服务器上安装SPGraphviz。SPGraphviz也是通过WSP包的方式发布的。详细步骤你可以参考&lt;a href="http://spgraphviz.codeplex.com/documentation"&gt;http://spgraphviz.codeplex.com/documentation&lt;/a&gt;中的部署文档，这里列出其中的重要步骤：&lt;/p&gt;&#xD;
&lt;p&gt;1.下载并在Web服务器上安装&lt;a href="http://www.graphviz.org/" target="_blank"&gt;GraphViz&lt;/a&gt;库（选择Download&amp;gt;Windows&amp;gt;Stable and developement Windows Install packages）。在安装过程中，请确保您选中向导第一步中的"Everyone"&lt;br /&gt;2.下载SPGraphviz的最新版本。目前，该版本中包含了常规的WSP包。&lt;br /&gt;3.在你的SharePoint服务器上安装SPGraphvizWebPart.wsp。以下是安装步骤：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;stsadm -o addsolution -filename SPGraphvizWebPart&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;wsp&lt;br /&gt;stsadm -o deploysolution -local -allowgac -allcontenturls -name SPGraphvizWebPart&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;wsp&lt;br /&gt;stsadm -o activatefeature -name SPGraphvizWebPart -url &lt;a href="http://example.com"&gt;http:&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;example&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;com&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;注意：为了使用SPGraphviz，你需要在所有的Web前端服务器上安装Graphviz库。安装完所有必需的组件后，你就可以使用DOT语言来定义你要显示的图形了，定义好后用SPGraphvizWebPart即可将其发布到网页中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;用例&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接下来让我们看一个例子，所使用DOT定义还是上面写的那一个。为了要在SharePoint中显示该图，你需要将这个DOT定义文本文件上传到网站集上的某个文档库中。然后，打开一个Web部件页，在页面上添加SPGraphvizWebPart（它应该位于Web部件列表中的Graphviz分组下）。最后一步，你需要修改该Web部件的属性（点击修改共享Web部件），并指定所要显示的DOT文件的URL，直接填写该文件的绝对路径（在Web部件属性编辑器的&amp;ldquo;自定义设置&amp;rdquo;组下），单击&amp;ldquo;应用&amp;rdquo;（这里有些DOT定义文件位置上的限制。默认情况下，你只能使用与安装SPGraphvizWebPart相同的主机来存放DOT定义文件。&lt;a href="http://spgraphviz.codeplex.com/documentation"&gt;http://spgraphviz.codeplex.com/documentation&lt;/a&gt;说明文档中，有如何使用外部的主机存储DOT定义的更多内容）。之后，你就可以看到一个基于该DOT定义的图形显示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122206202744.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以上我描述了非编程的方式在SharePoint中添加图形的步骤。同时，SPGraphviz也为开发人员提供了巨大的机遇。图形的定义是基于文本的形式，这意味着，开发人员可以实现自定义代码，在一些数据的基础上自动创建这样的DOT定义，再设置SPGraphvizWebPart来显示这个定义。例如，可以使用下面的例子，以可视化的方式显示门户的层次：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;class Program&#xD;
{&#xD;
    static void Main(string[] args)&#xD;
    {&#xD;
        if (args.Length != 1)&#xD;
        {&#xD;
            Console.WriteLine("Usage: GraphBuilder.exe [url]&amp;lt;SITE_COLLECTION_URL /&amp;gt;");&#xD;
            return;&#xD;
        }&#xD;
&#xD;
        Console.WriteLine("digraph sites {");&#xD;
        Console.WriteLine("node [color=lightblue2, style=filled];");&#xD;
&#xD;
        using (var site = new SPSite(args[0]))&#xD;
        {&#xD;
            using (var web = site.OpenWeb())&#xD;
            {&#xD;
                foreach (SPWeb subWeb in web.Webs)&#xD;
                {&#xD;
                    iterateSubWebs(subWeb, web.Title);&#xD;
                }&#xD;
            }&#xD;
        }&#xD;
        Console.WriteLine("}");&#xD;
    }&#xD;
&#xD;
    private static void iterateSubWebs(SPWeb web, string parentNode)&#xD;
    {&#xD;
        Console.WriteLine("\"{0}\" -&amp;gt; \"{1}\";", parentNode, web.Title);&#xD;
&#xD;
        foreach (SPWeb subWeb in web.Webs)&#xD;
        {&#xD;
            iterateSubWebs(subWeb, web.Title);&#xD;
        }&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;代码很简单&amp;mdash;&amp;mdash;通过递归遍历所有的网站，并把结果对应的节点添加到DOT定义中。为了获得图形化显示，你需要运行该程序并将输出重定向到一个文件中：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;GraphBuilder&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;exe http:&lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;example&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;com &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; graph&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;下面是在我的环境下得到的图形：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010122206240793.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如上所述，通过&lt;a href="http://spgraphviz.codeplex.com/"&gt;SPGraphviz&lt;/a&gt;我们可以实现很多有趣的应用。希望通过本文，可以使你的SharePoint站点更加丰富多彩，使你的客户更满意。也希望你能和我一起分享更多更好的关于SPGraphviz使用方面的想法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;下载链接&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你可以从&lt;a href="http://www.cnblogs.cc2/SPGraphviz/SPGraphvizWebPart.zip"&gt;Codeproject&lt;/a&gt; (&lt;a href="http://www.cnblogs.cc2/SPGraphviz/SPGraphvizWebPart_source_changeset_8015dcace5f0.zip"&gt;源代码&lt;/a&gt;) 或&lt;a href="http://spgraphviz.codeplex.com" target="_blank"&gt;http://spgraphviz.codeplex.com&lt;/a&gt;&lt;span style="font-family: Courier New;"&gt;下载到SPGraphviz的最新版本。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/sharepoint/SPGraphviz.aspx" target="_blank"&gt;SPGraphviz:Graph Visualization in SharePoint &lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者的blog &lt;a href="http://sadomovalex.blogspot.com/"&gt;http://sadomovalex.blogspot.com&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;更多关于使用&lt;code&gt;SPGraphvizWebPart的例子&lt;/code&gt;, 请参考&lt;a href="http://spgraphviz.codeplex.com/documentation"&gt;http://spgraphviz.codeplex.com/documentation&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;DOT 语言参考资料： &lt;a href="http://www.graphviz.org/pdf/dotguide.pdf"&gt;http://www.graphviz.org/pdf/dotguide.pdf&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;Graphviz： &lt;a title="http://www.graphviz.org" href="http://www.graphviz.org/"&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/18046/2011010410511095.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1855534.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/12/22/1855534.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2010/12/21/1855089.html</id><title type="text">SharePoint：扩展DVWP - 赠送部分：当“找不到匹配项”时修复Insert表单操作</title><summary type="text">Richard问了一个很棒的问题：“你是否在设置insert链接的时候遇到过无匹配项( no matching items )的模版？”是的, 我在使用DVWP时遇到过相同的问题。当列表为空时调用特定的模版，这绝对是个bug。解决的方法是在SPD的设计视图中，勾选“显示示例数据（Show sample data）” ，来告诉 SPD 模拟有数据的情况。这样至少可以允许我们处理该链接了。在实际情况下页面进行渲染时，还需要进行一点稍复杂的处理。看来我需要为这个系列写一个增篇了。 ;)I’ll do that.现在我们就开始。解开表层打开 edit 和insert 模版非常容易，只需要勾选一些...</summary><published>2010-12-20T17:08:00Z</published><updated>2010-12-20T17:08:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/12/21/1855089.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/12/21/1855089.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.topsyproxy.com/browse.php/bf584a16/a6936294/09Oi8vd3/d3LmVuZH/VzZXJzaG/FyZXBvaW/50LmNvbS/8yMDEwLz/A1LzE4L3/NoYXJlcG/9pbnQtZX/h0ZW5kaW/5nLXRoZS/1kdndwLX/BhcnQtMi/1sYXlvdX/QtZW5oYW/5jZW1lbn/QtcmVhcn/Jhbmdpbm/ctY29sdW/1ucy1pbn/NlcnQtdG/VtcGxhdG/UvY29tbW/VudC1wYW/dlLTEv/b0/#comment-97607"&gt;&lt;strong&gt;Richard问了一个很棒的问题&lt;/strong&gt;&lt;/a&gt;：&amp;ldquo;你是否在设置insert链接的时候遇到过无匹配项( &lt;em&gt;no matching items&lt;/em&gt; )的模版？&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;是的, 我在使用DVWP时遇到过相同的问题。当列表为空时调用特定的模版，这绝对是个bug。&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;解决的方法是在SPD的设计视图中，勾选&amp;ldquo;显示示例数据（Show sample data）&amp;rdquo; ，来告诉 SPD 模拟有数据的情况。这样至少可以允许我们处理该链接了。在实际情况下页面进行渲染时，还需要进行一点稍复杂的处理。看来我需要为这个系列写一个增篇了。 ;)&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;I&amp;rsquo;ll do that.&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在我们就开始。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;拨开外壳&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;打开 &lt;em&gt;edit&lt;/em&gt; 和&lt;em&gt;insert&lt;/em&gt; 模版非常容易，只需要勾选一些选框就行。然而， SharePoint Designer (SPD) 使底层的XSL发生了重大变化：添加了变量和参数，修改一些已有变量的值，添加新的模版和条件格式，等等。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;变量&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;dvt_1_automode&lt;/em&gt; 是一个变量，它告诉 DVWP 是否要绘制 &lt;em&gt;edit&lt;/em&gt; 和/或&lt;em&gt;delete&lt;/em&gt; 链接。 0 = 否; 1 = 是。打开 &lt;em&gt;edit&lt;/em&gt; 和/或 &lt;em&gt;delete&lt;/em&gt; 会将其设置为1。&lt;/p&gt;&#xD;
&lt;p&gt;如果&lt;em&gt;edit&lt;/em&gt; template 被打开，一个新的参数会创建出来：&lt;em&gt;dvt_1_form_editkey&lt;/em&gt;。如果 &lt;em&gt;insert&lt;/em&gt; 模版被打开，会创建 &lt;em&gt;dvt_1_form_insertmode&lt;/em&gt; 。 这两个参数会在点击相应的&lt;strong&gt;edit&lt;/strong&gt;或&lt;strong&gt;insert&lt;/strong&gt; 链接时通过 &lt;em&gt;ParameterBindings&lt;/em&gt; 传递给该页面。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:variable name="dvt_1_automode"&amp;gt;0&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;code &gt;&amp;hellip;变成&amp;hellip;&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code &gt;&#xD;
&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:param name="dvt_1_form_editkey" /&amp;gt;&lt;br /&gt;&amp;lt;xsl:param name="dvt_1_form_insertmode" /&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable name="dvt_1_automode"&amp;gt;1&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;code &gt;&#xD;
&lt;/code&gt;&#xD;
&lt;div &gt;&lt;code &gt;在主模版&lt;em&gt;dvt_1&lt;/em&gt;里，, 当 &lt;em&gt;dvt_RowCount&lt;/em&gt; = 0，或者&amp;nbsp;&lt;em&gt;RowLimit&lt;/em&gt; = 0时，&lt;em&gt;IsEmpty&lt;/em&gt; 变量都被修改为 true 。&lt;/code&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;code &gt;&lt;code &gt;&#xD;
&lt;/code&gt;&lt;/code&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:variable name="IsEmpty" select="$dvt_RowCount = 0" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&lt;code &gt;&lt;code &gt;&amp;hellip;变成&amp;hellip;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;code &gt;&lt;code &gt;&#xD;
&lt;/code&gt;&lt;/code&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:variable name="IsEmpty" select="$dvt_RowCount = 0 or $RowLimit = 0" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;code &gt;&lt;code &gt;&lt;code &gt;&#xD;
&lt;/code&gt;&lt;/code&gt;&lt;/code&gt;&#xD;
&lt;p &gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;设计&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;首先要通过SPD进行的一个设计上的修改是：通过清空th标记的nowrap属性来允许列头折行。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;th  nowrap="nowrap"&amp;gt;Location&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th  nowrap="nowrap"&amp;gt;Group&amp;lt;/th&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&amp;hellip;变成&amp;hellip;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;th  nowrap=""&amp;gt;Location&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th  nowrap=""&amp;gt;Group&amp;lt;/th&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;接下来的一个设计上的变更是设置一个条件，通过检验该条件来确定哪个模板会被调用。如果我们不是在插入模式中，它会调用&lt;em&gt;dvt_1.body&lt;/em&gt;，传递给它一些行用于显示。然后是&lt;em&gt;dvt_1.rowinsert&lt;/em&gt;，传递&lt;em&gt;dvt_1_form_insertmode&lt;/em&gt;，决定是渲染插入数据的表单还是只是输出一个插入链接。&lt;/p&gt;&#xD;
&lt;p &gt;然后它会传递&lt;em&gt;ShowNavigation&lt;/em&gt; 和&lt;em&gt;ShowFormActions&lt;/em&gt; 参数给&lt;em&gt;dvt_1.commandfooter&lt;/em&gt; 模版，从而添加 &lt;em&gt;X &amp;ndash; Y&lt;/em&gt; 分页链接到页脚部分。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:with-param name="ShowNavigation"&amp;gt; &lt;br /&gt;     &amp;lt;xsl:if test="not($dvt_1_form_insertmode = '1')"&amp;gt;1&amp;lt;/xsl:if&amp;gt; &lt;br /&gt; &amp;lt;/xsl:with-param&amp;gt; &lt;br /&gt; &amp;lt;xsl:with-param name="ShowFormActions"&amp;gt; &lt;br /&gt;    &amp;lt;xsl:if test="($dvt_1_automode = '0' and $dvt_1_form_insertmode)"&amp;gt;1&amp;lt;/xsl:if&amp;gt; &lt;br /&gt; &amp;lt;/xsl:with-param&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;因此，这两个参数也被添加到了&lt;em&gt;dvt_1.commandfooter&lt;/em&gt;模板，并且添加了相关的一些元素，用来在需要时显示他们。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900170711.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;新的模版&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;在默认的DVWP中， &lt;em&gt;dvt_1.body&lt;/em&gt; 模版会遍历所有返回回来的行，为每一行都调用一次&lt;em&gt;dvt_1.rowview&lt;/em&gt; 模版。&lt;/p&gt;&#xD;
&lt;p &gt;在更新后的版本中，它仍然会遍历所有的行，但是会检查每一行的&lt;em&gt;dvt_1_form_editkey&lt;/em&gt; 是否与该行的ID相匹配。如果是，&lt;em&gt;dvt_1.rowedit&lt;/em&gt; 模版会被调用，并传递该行的位置。对与剩下的所有行，会调用 &lt;em&gt;dvt_1.rowview&lt;/em&gt; 。&lt;/p&gt;&#xD;
&lt;code &gt;&#xD;
&lt;/code&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:call-template name="dvt_1.rowview" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;&amp;hellip;变为&amp;hellip;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:choose&amp;gt; &lt;br /&gt;     &amp;lt;xsl:when test="$dvt_1_form_editkey = ddwrt:EscapeDelims(string(@ID))"&amp;gt; &lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.rowedit"&amp;gt; &lt;br /&gt;             &amp;lt;xsl:with-param name="Pos" select="concat('_', position())" /&amp;gt; &lt;br /&gt;         &amp;lt;/xsl:call-template&amp;gt; &lt;br /&gt;     &amp;lt;/xsl:when&amp;gt; &lt;br /&gt;     &amp;lt;xsl:otherwise&amp;gt; &lt;br /&gt;         &amp;lt;xsl:call-template name="dvt_1.rowview" /&amp;gt; &lt;br /&gt;     &amp;lt;/xsl:otherwise&amp;gt; &lt;br /&gt; &amp;lt;/xsl:choose&amp;gt; &lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;code &gt;&lt;code &gt;&lt;code &gt;&lt;code &gt;当然，&lt;em&gt;edit 模版&lt;/em&gt;(&lt;em&gt;dvt_1.rowedit&lt;/em&gt;) 也要被添加到页面中。（有关使用edit模版的更多信息，请参考&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/19/1828339.html" target="_blank"&gt;扩展DVWP的第26部分：修改edit模版&lt;/a&gt;）因此&lt;em&gt;insert&lt;/em&gt; 模版大致如下所示： &lt;/code&gt;&#xD;
&lt;/code&gt;&lt;/code&gt;&lt;/code&gt;&#xD;
&lt;div &gt;&lt;code &gt;&lt;code &gt;&amp;hellip;becomes&amp;hellip;&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.rowinsert"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name="IsInsertMode" /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:variable name="Pos"&amp;gt;_new&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;        &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;            &amp;lt;xsl:when test="$IsInsertMode = '1'"&amp;gt;&lt;br /&gt;                &amp;lt;xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1"&amp;gt;&lt;br /&gt;                    &amp;lt;td  width="1%" nowrap="nowrap"&amp;gt;&lt;br /&gt;                        &amp;lt;xsl:call-template name="dvt_1.automode"&amp;gt;&lt;br /&gt;                            &amp;lt;xsl:with-param name="KeyField"&amp;gt;ID&amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;                            &amp;lt;xsl:with-param name="KeyValue" select="ddwrt:EscapeDelims(string(@ID))" /&amp;gt;&lt;br /&gt;                            &amp;lt;xsl:with-param name="Mode"&amp;gt;insert&amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;                        &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;                    &amp;lt;/td&amp;gt;&lt;br /&gt;                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;                &amp;lt;td &amp;gt;&lt;br /&gt;                    &amp;lt;SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="New" FieldName="YourField" {code} /&amp;gt;&lt;br /&gt;                    &amp;lt;SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="YourField" ControlMode="Edit" /&amp;gt;&lt;br /&gt;                &amp;lt;/td&amp;gt;&lt;br /&gt;                &amp;lt;td &amp;gt;&lt;br /&gt;                    //The next column&lt;br /&gt;                &amp;lt;/td&amp;gt;&lt;br /&gt;                .&lt;br /&gt;                .&lt;br /&gt;                .&lt;br /&gt;            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;                &amp;lt;td  colspan="99"&amp;gt;&lt;br /&gt;                    &amp;lt;a href="javascript: {ddwrt:GenFireServerEvent('__cancel;dvt_1_form_insertmode={1}')}"&amp;gt;insert&amp;lt;/a&amp;gt;&lt;br /&gt;                &amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;注意其中的第6行， IsInsertMode 变量决定了数据控件是否渲染，或者只是输出&lt;em&gt;insert&lt;/em&gt; 行。&lt;/p&gt;&#xD;
&lt;h3 &gt;进一步的修改&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;在 SPD里，当我们首次把DVWP添加到页面上时，会有一个链接可以让我们设置没有匹配项时所显示的文字。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900201940.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Now, how do we display the &lt;em&gt;insert&lt;/em&gt; link?&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;Option 1.&lt;/em&gt; Since the &lt;em&gt;empty&lt;/em&gt; template is being called, we could simply add the &lt;em&gt;insert&lt;/em&gt; link to that template as well. In an &lt;a href="http://www.endusersharepoint.com/STP/viewtopic.php?f=13&amp;amp;t=1699"&gt;&lt;strong&gt;STP discussion&lt;/strong&gt;&lt;/a&gt; with Richard, &lt;a href="http://www.endusersharepoint.com/category/author/guest-post/matt-bramer/"&gt;&lt;strong&gt;Matt Bramer&lt;/strong&gt;&lt;/a&gt; suggested adding the link below the &lt;em&gt;dvt_ViewEmptyText&lt;/em&gt;.&lt;/p&gt;&#xD;
&lt;div &gt;&lt;strong&gt;SPD 会链接到数据视图属性对话框&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;p &gt;当然我们也可以直接打开数据视图属性对话框，之前我们也曾用它来修改直接编辑选项。其中有一项可以设置当没有找到匹配的数据时所显示的文字，这里直接输入一些类似&amp;ldquo;该视图中没有项目&amp;rdquo;的文字即可。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;a href="http://www.topsyproxy.com/browse.php/bf584a16/a6936294/09Oi8vd3/d3LmVuZH/VzZXJzaG/FyZXBvaW/50LmNvbS/8yMDEwLz/A1LzE4L3/NoYXJlcG/9pbnQtZX/h0ZW5kaW/5nLXRoZS/1kdndwLX/BhcnQtMi/1sYXlvdX/QtZW5oYW/5jZW1lbn/QtcmVhcn/Jhbmdpbm/ctY29sdW/1ucy1pbn/NlcnQtdG/VtcGxhdG/UvY29tbW/VudC1wYW/dlLTEv/b0/#comment-97607"&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900213817.png" alt="" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;strong&gt;当通过SPD的链接打开该对话框时，会自动选中选择框并填充一些默认的文字&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;p &gt;但，这也正是会出现问题的地方。&lt;/p&gt;&#xD;
&lt;p &gt;当SPD 添加上面的文本后，它会跳过输出insert链接的 &lt;em&gt;insert&lt;/em&gt; 模版。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900223053.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;strong&gt;噢。I&lt;em&gt;nsert链接没了！&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;h3 &gt;重返核心&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;因此，让我们分析一下究竟是什么原因导致的这个问题，并试图对其进行修复。&lt;/p&gt;&#xD;
&lt;p &gt;首先，SPD并没有创建其他的变量，当&lt;em&gt;dvt_RowCount&lt;/em&gt; = 0时 &lt;em&gt;dvt_IsEmpty&lt;/em&gt; 被设为true。接下来在&lt;em&gt;dvt_1&lt;/em&gt;模版的主table外包装了一层xsl:choose块。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;table border="0" width="100%" cellpadding="2" cellspacing="0"&amp;gt;&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p &gt;&amp;hellip;变为&amp;hellip;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:variable name="dvt_IsEmpty" select="$dvt_RowCount = 0" /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;        &amp;lt;xsl:when test="$dvt_IsEmpty"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:call-template name="dvt_1.empty" /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;            &amp;lt;table border="0" width="100%" cellpadding="2" cellspacing="0"&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;换句话说，如果列表为空，主table就不会渲染；直接进入&lt;em&gt;dvt_1.empty&lt;/em&gt; 模版，它如下所示：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.empty"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:variable name="dvt_ViewEmptyText"&amp;gt;There are no items to show in this view.&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;   &amp;lt;table border="0" width="100%"&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;         &amp;lt;td &amp;gt;&lt;br /&gt;            &amp;lt;xsl:value-of select="$dvt_ViewEmptyText" /&amp;gt;&lt;br /&gt;         &amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;其中 &lt;em&gt;insert&lt;/em&gt; 模版和所有其他的东西一样都被跳过了。这的确不是我们所期望的。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;h3 &gt;修复它&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;这就是 SharePoint。里面有不止一种解决问题的方式。 &lt;/p&gt;&#xD;
&lt;p &gt;有一点是肯定的，那就是我们必须在列表为空的情况下进入insert模式，使得SharePoint渲染出insert表单来。当点击insert链接时， &lt;em&gt;dvt_1_form_insertmode &lt;/em&gt;被设为1，我们可以以此进行判断。 &lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code &gt;&#xD;
&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:when test="$dvt_IsEmpty"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code &gt;&amp;hellip;改为&amp;hellip;&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code &gt;&lt;code &gt;&#xD;
&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:when test="$dvt_IsEmpty and not($dvt_1_form_insertmode = '1')"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在，我们该如何显示&lt;em&gt;insert&lt;/em&gt; 链接呢?&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;选择 1.&lt;/em&gt; 因为 &lt;em&gt;empty&lt;/em&gt; 模版被调用，我们可以简单的把&lt;em&gt;insert&lt;/em&gt; 链接同时添加到该模版中。在与Richard的 &lt;a href="http://www.endusersharepoint.com/STP/viewtopic.php?f=13&amp;amp;t=1699"&gt;&lt;strong&gt;STP discussion&lt;/strong&gt;&lt;/a&gt; 中， &lt;a href="http://www.endusersharepoint.com/category/author/guest-post/matt-bramer/"&gt;&lt;strong&gt;Matt Bramer&lt;/strong&gt;&lt;/a&gt; 建议将该链接添加到&lt;em&gt;dvt_ViewEmptyText&lt;/em&gt;下面。&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.empty"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:variable name="dvt_ViewEmptyText"&amp;gt;There are no items to show in this view.&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;   &amp;lt;table border="0" width="100%"&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;         &amp;lt;td &amp;gt;&lt;br /&gt;            &amp;lt;xsl:value-of select="$dvt_ViewEmptyText" /&amp;gt;&lt;br /&gt;         &amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;         &amp;lt;td &amp;gt;&lt;br /&gt;            &amp;lt;a href="javascript: {ddwrt:GenFireServerEvent('__cancel;dvt_1_form_insertmode={1}')}"&amp;gt;insert&amp;lt;/a&amp;gt;&lt;br /&gt;         &amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900252979.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;strong&gt;选择 1: 在空列表信息下添加insert 链接&lt;/strong&gt;&#xD;
&lt;p&gt;&lt;em&gt;选择 2.&lt;/em&gt; 与其放在单独一行里，倒不如直接跟在&lt;em&gt;dvt_ViewEmptyText&lt;/em&gt;后面。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.empty"&amp;gt;&lt;br /&gt;   &amp;lt;xsl:variable name="dvt_ViewEmptyText"&amp;gt;There are no items to show in this view.&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;   &amp;lt;table border="0" width="100%"&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;         &amp;lt;td &amp;gt;&amp;lt;xsl:value-of select="$dvt_ViewEmptyText" /&amp;gt; Be the first to &amp;lt;a href="javascript: {ddwrt:GenFireServerEvent('__cancel;dvt_1_form_insertmode={1}')}"&amp;gt;insert a list item&amp;lt;/a&amp;gt;.&lt;br /&gt;         &amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900261664.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;strong&gt;选项 2: 把insert 链接放在空列表信息后&lt;/strong&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;em&gt;选项 3.&lt;/em&gt; 另一种使得&lt;em&gt;insert &lt;/em&gt;模版被调用的方法是将其从xsl:choose 块中移出来，使其必然运行。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;    &amp;lt;xsl:when test="$dvt_IsEmpty and not($dvt_1_form_insertmode = '1')"&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.empty" /&amp;gt;&lt;br /&gt;    &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;    &amp;lt;xsl:otherwise&amp;gt;&amp;lt;table border="0" width="100%" cellpadding="2" cellspacing="0"&amp;gt;&lt;br /&gt;        &amp;lt;tr valign="top"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1"&amp;gt;&lt;br /&gt;                &amp;lt;th  width="1%" nowrap=""&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;            &amp;lt;th  nowrap=""&amp;gt;Your Field&amp;lt;/th&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;        &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;xsl:if test="not($dvt_1_form_insertmode = '1')"&amp;gt;&amp;lt;xsl:call-template name="dvt_1.body"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="Rows" select="$Rows"/&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="FirstRow" select="1" /&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="LastRow" select="$LastRow - $FirstRow + 1" /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.rowinsert"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="IsInsertMode"&amp;gt;&lt;br /&gt;                &amp;lt;xsl:if test="$dvt_1_form_insertmode = '1'"&amp;gt;1&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;    &amp;lt;/table&amp;gt;&lt;br /&gt;    &amp;lt;xsl:call-template name="dvt_1.commandfooter"&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;    &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&amp;hellip;变成&amp;hellip;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;    &amp;lt;xsl:when test="$dvt_IsEmpty and not($dvt_1_form_insertmode = '1')"&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.empty" /&amp;gt;&lt;br /&gt;    &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;    &amp;lt;xsl:otherwise&amp;gt;&amp;lt;table border="0" width="100%" cellpadding="2" cellspacing="0"&amp;gt;&lt;br /&gt;        &amp;lt;tr valign="top"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1"&amp;gt;&lt;br /&gt;                &amp;lt;th  width="1%" nowrap=""&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;            &amp;lt;th  nowrap=""&amp;gt;Your Field&amp;lt;/th&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;        &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;xsl:if test="not($dvt_1_form_insertmode = '1')"&amp;gt;&amp;lt;xsl:call-template name="dvt_1.body"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="Rows" select="$Rows"/&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="FirstRow" select="1" /&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="LastRow" select="$LastRow - $FirstRow + 1" /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;    &amp;lt;/table&amp;gt;&lt;br /&gt;    &amp;lt;xsl:call-template name="dvt_1.commandfooter"&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;    &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;lt;table border="0" width="100%" cellpadding="2" cellspacing="0"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:call-template name="dvt_1.rowinsert"&amp;gt;&lt;br /&gt;        &amp;lt;xsl:with-param name="IsInsertMode"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:if test="$dvt_1_form_insertmode = '1'"&amp;gt;1&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;    &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;注意其中第一段代码中的第 19-23行被移到了xsl:otherwise 块的外面（对应到第二段代码中的第26-30 行）。但它们还是被包裹到table标记中，因为这些标记是包含在xsl:otherwise 中的， dvt_1.rowinsert 模版中并没有这些标记。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900281518.png" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;strong&gt;选项 3: 把模版调用移到xsl:otherwise 块外面&lt;/strong&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;em&gt;选项 4.&lt;/em&gt; 就个人而言，我喜欢显示列标题，即使该列表是空的。因此，与上面几个选项类似，我们也可以把标题行从xsl:choose 中分离出来，这样他们就会出现在每一个场景中。 （我喜欢第2种方案，所以下面的代码假设你是在&lt;em&gt;empty&lt;/em&gt;模版中处理insert&amp;nbsp;链接的输出。）&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;    &amp;lt;xsl:when test="$dvt_IsEmpty and not($dvt_1_form_insertmode = '1')"&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.empty" /&amp;gt;&lt;br /&gt;    &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;    &amp;lt;xsl:otherwise&amp;gt;&amp;lt;table border="0" width="100%" cellpadding="2" cellspacing="0"&amp;gt;&lt;br /&gt;        &amp;lt;tr valign="top"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1"&amp;gt;&lt;br /&gt;                &amp;lt;th  width="1%" nowrap=""&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;            &amp;lt;th  nowrap=""&amp;gt;Your Field&amp;lt;/th&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;        &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;xsl:if test="not($dvt_1_form_insertmode = '1')"&amp;gt;&amp;lt;xsl:call-template name="dvt_1.body"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="Rows" select="$Rows"/&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="FirstRow" select="1" /&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="LastRow" select="$LastRow - $FirstRow + 1" /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.rowinsert"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="IsInsertMode"&amp;gt;&lt;br /&gt;                &amp;lt;xsl:if test="$dvt_1_form_insertmode = '1'"&amp;gt;1&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;    &amp;lt;/table&amp;gt;&lt;br /&gt;    &amp;lt;xsl:call-template name="dvt_1.commandfooter"&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .&lt;br /&gt;    &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&amp;hellip;改为&amp;hellip;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;table border="0" width="100%" cellpadding="2" cellspacing="0"&amp;gt;&lt;br /&gt;    &amp;lt;tr valign="top"&amp;gt;&lt;br /&gt;        &amp;lt;xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1"&amp;gt;&lt;br /&gt;            &amp;lt;th  width="1%" nowrap=""&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;        &amp;lt;th  nowrap=""&amp;gt;Your Field&amp;lt;/th&amp;gt;&lt;br /&gt;        .&lt;br /&gt;        .&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;        &amp;lt;xsl:when test="$dvt_IsEmpty and not($dvt_1_form_insertmode = '1')"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:call-template name="dvt_1.empty" /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;            &amp;lt;xsl:if test="not($dvt_1_form_insertmode = '1')"&amp;gt;&amp;lt;xsl:call-template name="dvt_1.body"&amp;gt;&lt;br /&gt;                &amp;lt;xsl:with-param name="Rows" select="$Rows"/&amp;gt;&lt;br /&gt;                &amp;lt;xsl:with-param name="FirstRow" select="1" /&amp;gt;&lt;br /&gt;                &amp;lt;xsl:with-param name="LastRow" select="$LastRow - $FirstRow + 1" /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.rowinsert"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:with-param name="IsInsertMode"&amp;gt;&lt;br /&gt;                &amp;lt;xsl:if test="$dvt_1_form_insertmode = '1'"&amp;gt;1&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;        &amp;lt;xsl:call-template name="dvt_1.commandfooter"&amp;gt;&lt;br /&gt;                .&lt;br /&gt;                .&lt;br /&gt;        &amp;lt;/xsl:call-template&amp;gt;&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注意，table标记并没有包含所有xsl:choose中的内容。所以我们需要快速的串一遍整个模版的调用过程，以保证其运转过程和我们预想的一致。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;ol&gt;&#xD;
&lt;li&gt;&lt;em&gt;dvt_1.empty&lt;/em&gt; 并没有在 table 里，但现在却包进来了。所以要移除其table 标记，以使得其中的tr落入主table中。&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.empty"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:variable name="dvt_ViewEmptyText"&amp;gt;There are no items to show in this view.&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;    &amp;lt;table border="0" width="100%"&amp;gt;&lt;br /&gt;        &amp;lt;tr&amp;gt;&lt;br /&gt;            &amp;lt;td &amp;gt;&amp;lt;xsl:value-of select="$dvt_ViewEmptyText" /&amp;gt; Be the first to &amp;lt;a href="javascript: {ddwrt:GenFireServerEvent('__cancel;dvt_1_form_insertmode={1}')}"&amp;gt;insert a list item&amp;lt;/a&amp;gt;.            &amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&amp;hellip;变成&amp;hellip;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.empty"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:variable name="dvt_ViewEmptyText"&amp;gt;There are no items to show in this view.&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;        &amp;lt;td  colspan="99"&amp;gt;&amp;lt;xsl:value-of select="$dvt_ViewEmptyText" /&amp;gt; Be the first to &amp;lt;a href="javascript: {ddwrt:GenFireServerEvent('__cancel;dvt_1_form_insertmode={1}')}"&amp;gt;insert a list item&amp;lt;/a&amp;gt;.        &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;我们需要添加 &lt;span &gt;colspan&lt;/span&gt;&lt;span &gt;="99"&lt;/span&gt; 到 td 上，以确保其横跨整个由列头创建的table。&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;li&gt;&lt;em&gt;dvt_1.commandfooter&lt;/em&gt; 同样也是在table外，但现在被包进来了。所以也要做同样的修改。&lt;/li&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.commandfooter"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name="FirstRow" /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name="LastRow" /&amp;gt;&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;    &amp;lt;table cellspacing="0" cellpadding="4" border="0" width="100%"&amp;gt;&lt;br /&gt;        &amp;lt;tr&amp;gt;&lt;br /&gt;            &amp;lt;xsl:if test="$ShowFormActions = '1'"&amp;gt;&lt;br /&gt;                &amp;lt;xsl:call-template name="dvt_1.formactions" /&amp;gt;&lt;br /&gt;            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;            .&lt;br /&gt;            .        &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&amp;hellip;改为&amp;hellip;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:template name="dvt_1.commandfooter"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name="FirstRow" /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:param name="LastRow" /&amp;gt;&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;        &amp;lt;xsl:if test="$ShowFormActions = '1'"&amp;gt;&lt;br /&gt;            &amp;lt;xsl:call-template name="dvt_1.formactions" /&amp;gt;&lt;br /&gt;        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;        .&lt;br /&gt;        .    &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900310930.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;ol&gt;&lt;strong&gt;选项 4: 包含列头（也是用的选项2的方法输出的insert链接） &lt;/strong&gt;&lt;/ol&gt;&lt;ol&gt;至此，我们通过少许更改，修正了SharePoint默认的功能，使得在空列表的情况下可以显示插入链接。&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p &gt;参考资料&lt;/p&gt;&#xD;
&lt;p &gt;&lt;a href="http://www.endusersharepoint.com/2010/09/16/sharepoint-extending-the-dvwp-%e2%80%93-part-36-fixing-the-insert-form-action-when/" target="_blank"&gt;SharePoint：Extending the DVWP - Bonus:Fixing the Insert Form Action When "No Mathcing Items"&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1855089.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/12/21/1855089.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2010/11/26/1888867.html</id><title type="text">TechED 2010中国上的SharePoint讲师团</title><summary type="text">从http://teched2010.registermsg.com/content/speaker.aspx上找出来的。所有SharePoint方向的讲师。方便SharePoint爱好者们选课和参与讨论。郭晓颖于2007年加入微软中国研发集团服务器与开发工具事业部，担任开发工具部门项目经理一职。现主要从事于Visual Studio对SharePoint的工具支持 。在过去的四年中，晓颖曾参与了...</summary><published>2010-11-26T08:12:00Z</published><updated>2010-11-26T08:12:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/26/1888867.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/26/1888867.html"/><content type="html">&lt;p&gt;从&lt;a href="http://teched2010.registermsg.com/content/speaker.aspx"&gt;http://teched2010.registermsg.com/content/speaker.aspx&lt;/a&gt;上找出来的。所有SharePoint方向的讲师。方便SharePoint爱好者们选课和参与讨论。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;郭晓颖&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616062624.jpg" alt="" /&gt;&lt;br /&gt;于2007年加入微软中国研发集团服务器与开发工具事业部，担任开发工具部门项目经理一职。现主要从事于Visual Studio对SharePoint的工具支持 。在过去的四年中，晓颖曾参与了多个项目的研发工作： &amp;bull; 2007年，晓颖致力于Silverlight 2运行时（即Core CLR）的开发，并参与了Visual Studio 2008中C++类设计器的研发工作。 &amp;bull; 2008年，晓颖致力于.NET框架4.0中CLR Interop的增强，为开发人员提供更多有用的工具和API，从而提高开发人员在处理非托管及托管代码互通性时的效率。 &amp;bull; 从2009年起，晓颖参与了WCF RIA Services 1.0工具支持，以及Visual Studio 2010中和数据有关的开发工具的设计研发，如数据源窗口相关的功能等。 &amp;bull; 从2010年起，晓颖开始为下一个版本的Visual Studio设计提供SharePoint开发相关的工具，努力为SharePoint开发人员提供更好的开发体验。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;马健&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616064772.jpg" alt="" /&gt;&lt;br /&gt;天翼博雅科技发展有限公司解决方案研发部经理，微软（中国）有限公司特邀解决方案顾问，微软全球最有价值专家（MVP），微软（中国）特约资深产品开发和 技术架构培训师。参与多次 Microsoft POC 计划，并主持开发微软工作流、OBA、BPOS 等解决方案，具有丰富的技术架构和技术验证经验。目前负责 Microsoft SharePoint 产品和 Microsoft EPM 解决方案全国客户培训工作和推广计划。&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;马靖&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616070714.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以微软ASP.NET技术为基础，擅长SharePoint开发以及扩展开发，研究SharePoint本身在各个领域中的应用和解决方案，并进行不断的实践。对于SharePoint和微软各个技术的结合很感兴趣。希望能结交更多的朋友，对于SharePoint不了解的朋友可以尽情的向我发问，我将尽 力为您介绍、解决问题。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;韩梅&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616072396.jpg" alt="" /&gt;&lt;br /&gt;微软最有价值产品专家（MVP）,从2000年开始从事微软产品的课程培训工作，并同时负责为多家知名企业提供相应的技术培训和技术支持，曾协助微软完成 新一代商业软件平台发布会和明智IT等重要活动。现负责微软CIE(客户体验之旅)的培训工作，同时为微软重要客户和全国市场提供UC和 SharePoint培训服务、解决方案和技术支持。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;侯钟雷&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616081772.jpg" alt="" /&gt;&lt;br /&gt;清华大学计算机系研究生毕业,曾获得全国大学生电脑大赛一等奖。长期从事微软相关技术的研究,熟悉.net技术和相关服务器产品，主要的技术方向是协作软 件,内容管理,企业信息门户等。曾参与过多个基于微软产品的项目开发工作。精通微软SharePoint，RMS，Infopath,，CRM等软件的应用和开发,尤其擅长Office System解决方案，是微软Office专家俱乐部成员，微软资深讲师。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;纪宁&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616083352.jpg" alt="" /&gt;&lt;br /&gt;东方瑞通(北京)咨询服务有限公司讲师，微软认证讲师（软件开发方向），熟悉Windows Server、SharePoint Server、OCS以及Visual Studio系列产品，了解基于C#和C++的开发技术。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;靳涛&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616084724.jpg" alt="" /&gt;&lt;br /&gt;本科 现任神州数码（中国）有限公司 信息化管理部开发经理，专注于微软相关技术在大型企业中的应用。热衷于.NET平台开发，sharepoint，dynamic crm等在企业内部应用中的解决方案。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;涂曙光&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616090394.jpg" alt="" /&gt;&lt;br /&gt;拥有超过7年的 SharePoint 平台设计、开发与管理经验。在加入 HP 公司之前，他在微软公司以 SharePoint 产品技术专家的身份工作了5年。涂曙光拥有所有 SharePoint 相关的 MCP 认证证书，并曾经编撰或翻译过3本&lt;br /&gt;SharePoint 技术书籍。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;王兴明&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112616091634.jpg" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;连续7年获得Visual C#技术方向MVP称号，曾获得微软认证系统开发工程师（MCAD、MCSD）,微软认证讲师（MCT），2004年获得微软金牌认证讲师（开发类）。他 作为资深.NET系统架构师，对WCF分布式应用、Web应用、Biztalk、SharePoint等微软平台技术有深刻的见解和广泛的大型企业级应用经验。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如有遗漏，欢迎补充！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1888867.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/26/1888867.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2010/11/22/1884303.html</id><title type="text">一步一步开发属于自己的SharePoint 2010工作流</title><summary type="text">从Sharepoint 2007开始，工作流作为一个真正的强有力的工具内置在SharePoint中。你可以通过设计工作流，从而在网站或应用程序中添加自定义逻辑，而且不需要编写任何代码！通过工作流实现业务流程自动化所需的各种功能，从发送通知到创建任务这么简单的事都可以通过工作流完成。还有的很多可能性，许多的功能有待挖掘，可以说只是受限于你的想象力。本文将讨论如何能够非常容易地开发属于自己的SharePoint工作流...</summary><published>2010-11-22T11:38:00Z</published><updated>2010-11-22T11:38:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/22/1884303.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/22/1884303.html"/><content type="html">&lt;p&gt;从Sharepoint 2007开始，工作流作为一个真正的强有力的工具内置在SharePoint中。你可以通过设计工作流，从而在网站或应用程序中添加自定义逻辑，而且不需要编写任何代码！通过工作流实现业务流程自动化所需的各种功能，从发送通知到创建任务这么简单的事都可以通过工作流完成。还有的很多可能性，许多的功能有待挖掘，可以说只是受限于你的想象力。&lt;/p&gt;&#xD;
&lt;p&gt;本文将讨论如何能够非常容易地开发属于自己的SharePoint 2010的工作流，甚至不需要你必须懂开发，这里不会要你写任何自定义的代码，您要做的只是点点鼠标。首先我们需要一个切入点，以此触发一个工作流的启动，作为例子，我们使用当某人添加项目到列表中作为触发的条件。在我们的解决方案中，我们将开发一个工作流，该工作流基于列表中某一栏的值的选择状态，当为选中状态时，将触发工作流发送一封email，同时更新该列表项的状态。通过这个例子，我想应该能够涵盖工作流的绝大部分重要概念，如步骤，条件和操作等。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;让我们开始吧！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;首先创建一个列表，这是列表的结构。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215135144.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;解释一下每一列都是干什么用的。&lt;/p&gt;&#xD;
&lt;p&gt;标题 ，将来就是所发送的邮件的主题&lt;br /&gt;User Email - 用户电子邮件， 收件人的邮件地址&lt;br /&gt;Message To user &amp;ndash; 电子邮件中的具体信息&lt;br /&gt;Status -&amp;nbsp; 状态 ，当前列表项的状态（可选择项包括已开始 - Started, 已发送电子邮件 - Email Sent, 进行中 - Processing, 已解决 - Resolved）&lt;br /&gt;Send Email - 发送电子邮件 ，标记是否要给收件人发送电子邮件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;创建好列表后，启动Sharepoint Designer来开始创建我们的工作流。首先点击列表和库（Lists and Libraries）。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215153385.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;选择我们的列表，找到工作流部分，点击新建（New)。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215155657.png" alt="" width="700" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;向导会提示你填写工作流的名称和描述&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215163383.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;点击确定后就进入工作流设计器界面了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215170662.png" alt="" width="700" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;此时，如果你留意功能区，就会看到有一个条件按钮和一个操作按钮，还有一些其他的元素，这些都是设计工作流所用的核心元素。详细查看其中的项，有助于我们了解当前可以做的所有事情。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;工作流操作项&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112219363858.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;工作流条件项&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215185690.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在第1步里，我们选择&amp;ldquo;发送电子邮件(Email users)&amp;rdquo; 操作（这意味着，当工作流启动时，它会发送电子邮件给您所选择的特定用户）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215194666.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在，定义一下电子邮件的信息。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112215195854.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在&amp;ldquo;收件人（To）&amp;rdquo;的位置上，选择用户。在这里，我们选择存放在列表项中的的电子邮件地址。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112216582983.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们选择之前在列表中创建的&amp;ldquo;用户电子邮件（User Email）&amp;rdquo;栏。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112216584350.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在抄送（CC)的位置，我们将添加创建当前项目的用户（User who created current item）。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112216590563.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对于标题，我们会从列表的&amp;ldquo;标题（Title）&amp;rdquo;栏中取值。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112216593753.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;而对于内容部分，我们将从列表中的&amp;ldquo;发给用户的信息（Message to user）&amp;rdquo;栏，以及&amp;ldquo;修改者（Modified by）&amp;rdquo;栏进行取值。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112216595162.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;恭喜！ 至此你已经完成了你的第一个操作。现在让我们添加一个执行该操作的条件。&lt;/p&gt;&#xD;
&lt;p&gt;点击我们创建好的第一个操作的顶部。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217000743.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;新增一个一般条件，&amp;ldquo;如果任何值等于值（If any value equals value）&amp;rdquo;，意思是，如果当前项中某一列的值等于你所定义的值时，将触发一个操作。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217002753.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样，该条件就显示在你的第一个操作的顶部。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217004236.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;根据你的情况修改其中的值，因为这里我们需要当&amp;ldquo;发送电子邮件（Send Email）&amp;rdquo;字段的值为&amp;ldquo;是&amp;rdquo;时引发一个动作，所以这么定义：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217010156.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217012427.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你可能已经注意到了，前面创建的第一个操作并没有包在IF块中，所以我们需要向上移动一下它，可以通过右侧的下拉箭头，然后从中选择上移操作（Move Action Up）。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217025552.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样就把它放在IF块里面了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217031916.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接下来，我们还需要在发送完电子邮件后更新域&amp;ldquo;Status&amp;rdquo;的状态为&amp;ldquo;Email Sent&amp;rdquo;。为了实现这一功能，我们需要通过功能区的操作按钮添加另外一个操作，&amp;ldquo;设置当前项目中的域（Set Feild in Current Item）&amp;rdquo;。在此前，确保您已经点击了第一个操作的下方，以保证新的操作将来放在那里。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217033968.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;设置字段和值的属性。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217043387.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对于ELSE块，从功能区中选择&amp;ldquo;Else-If分支&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217102771.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;重复上一步骤，但这次是设置&amp;ldquo;Status&amp;rdquo;为&amp;ldquo;Processing&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217104027.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样全部工作就完成了！保存并发布您的工作流。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217105783.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接下来等待一下，系统对工作流进行验证。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217110960.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;但是我们还没有设置工作流启动的条件。可以通过点击工作流，选择我们的工作流对象，然后在摘要视图中配置工作流的启动选项。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217112321.png" alt="" width="700" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在，剩下的工作就是测试了。新建一个列表项来触发前面设计的条件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217121350.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;然后等待结果&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217123034.png" alt="" width="700" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112217132029.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;OK了！ 很容易吧，无代码！ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.codeproject.com/Article.aspx?tag=411880084957314011" target="_blank"&gt;Step by Step Guide in Developing your own Workflow in Sharepoint 2010&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1884303.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/22/1884303.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882875.html</id><title type="text">SharePoint 2010之Visio Services入门1－2－3</title><summary type="text">问题你一定已经听说过SharePoint 2010中新增加的 Visio Services 了吧，通过它用户可以在浏览器中直接查看Visio文档。 现在，就让我们开始体验一下吧！解决方案对用户来说在浏览器中显示Visio文件实际上很简单。但除非内已经完成了下面的步骤，否则相关的使用项并不是很显而易见的。一个大的前提条件，就是你必须同时具有SharePoint 2010企业版和Visio 2010，...</summary><published>2010-11-21T09:43:00Z</published><updated>2010-11-21T09:43:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882875.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882875.html"/><content type="html">&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你一定已经听说过SharePoint 2010中新增加的 Visio Services 了吧，通过它用户可以在浏览器中直接查看Visio文档。 现在，就让我们开始体验一下吧！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对用户来说在浏览器中显示Visio文件实际上很简单。但除非内已经完成了下面的步骤，否则相关的使用项并不是很显而易见的。&lt;/p&gt;&#xD;
&lt;p&gt;一个大的前提条件，就是你必须同时具有SharePoint 2010企业版和Visio 2010，才能继续下面的步骤。&lt;/p&gt;&#xD;
&lt;h3 title="no break"&gt;步骤 1 - 启用 Visio Services&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;打开&amp;nbsp;--&amp;gt; 网站操作（Site Actions） --&amp;gt;网站设置（Site Settings）.&lt;/p&gt;&#xD;
&lt;p&gt;然后点击 "管理网站功能（Manage site features）".&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023210859.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果你的SharePoint&amp;nbsp;&amp;nbsp;Server企业版网站功能（SharePoint Server Enterprise Site features）没有激活，则点击&amp;ldquo;&lt;strong&gt;激活（&lt;/strong&gt;&lt;strong&gt;Activate&lt;/strong&gt;&lt;strong&gt;）&lt;/strong&gt;&amp;rdquo;按钮。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023213424.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Here is what it should look like:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023215641.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;h3 title="no break"&gt;步骤 2 - 配置文档库&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在，导航到一个准备供用户存放发布的Visio文档的文档库，来设置其在浏览器中查看的选项。进到文档库设置页面，并点击高级设置（&lt;strong&gt;Advanced Settings&lt;/strong&gt;）。&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023222268.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;设置 &amp;ldquo;&lt;strong&gt;在浏览器中打开文档（Opening Documents in the Browser）&lt;/strong&gt;&amp;rdquo;项为&amp;ldquo;&lt;strong&gt;在浏览器中打开（Open in the browser）&lt;/strong&gt;&amp;rdquo;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023224683.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;步骤 3 - 发布一个 Visio 2010 文档&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;创建好我们的 Visio 文档后，选择文件（&lt;strong&gt;File&lt;/strong&gt;）菜单下的另存为（&lt;strong&gt;Save As&lt;/strong&gt;）。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023231251.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在&lt;strong&gt;文件名（File name）&lt;/strong&gt;文本框中，粘贴我们的文档库所在的网站的URL地址。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023233282.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;导航到该库（双击）。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023234882.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;给我们的文件起一个名字。&lt;/p&gt;&#xD;
&lt;p&gt;关键点: 在&lt;strong&gt;保存类型（Save as type）&lt;/strong&gt;下拉框中选择&lt;strong&gt;Web绘图（Web Drawing）&lt;/strong&gt;。然后按回车或点击&lt;strong&gt;保存（Save）&lt;/strong&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112023241268.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面是在我的浏览器中查看 Visio 文件的效果。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010112117421296.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;简单吧！1－2－3！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.mssharepointtips.com/tip.asp?id=1052" target="_blank"&gt;3 Easy Steps to Visio Services in SharePoint 2010&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1882875.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882875.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882972.html</id><title type="text">SharePoint：扩展DVWP - 第35部分：把所有的内容串起来</title><summary type="text">真正的标题为：我如何创建一个SharePoint 列表来替换一个原先每月在15个经理手里转一圈的Excel电子表格，通过为每一个经理创建一个Web部件页来显示一个有关雇员信息的经过过滤后的可编辑的表格，易于阅读和修改。其中会用到Tab页，网站栏，级联下拉框，DVWP，EasyTabs,表单操作工作流，PreSaveAction()，SPServices/jQuery，XSL以及CSS的知识...</summary><published>2010-11-20T17:32:00Z</published><updated>2010-11-20T17:32:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882972.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882972.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;ldquo;真正&amp;rdquo;的标题为：我如何创建一个SharePoint 列表来替换一个原先每月在15个经理手里转一圈的Excel电子表格，通过为每一个经理创建一个Web部件页来显示一个有关雇员信息的经过过滤后的可编辑的表格，易于阅读和修改。其中会用到Tab页，网站栏，级联下拉框，DVWP，EasyTabs,表单操作工作流，PreSaveAction()，SPServices/jQuery，XSL以及CSS的知识。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;终于，我们进行到扩展DVWP系列的第35部分。在过去的18周内，我们分析了工具本身，技术，进行了各种尝试，修复遇到的错误，实际上是针对同一个解决方案，最终是为了解决如下的一个简单问题：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;问题: &lt;/em&gt;&lt;/strong&gt;&lt;em&gt;&amp;ldquo;我有一个需要每个月都重新创建一次并发给15个经理的Excel 文档。每个经理都负责15个文档中之一，但是我要把所有的电子表格都发给每一个经理，并希望他们更新其中正确的部分。我也要很小心，只能在特定的字段处填写数据，并且要注意不要把之前设定好的公式给盖掉。&lt;/em&gt;&lt;em&gt;&lt;br /&gt;有没有办法通过SharePoint改善这一切？&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;我们的解决方案满足具备下列需求：&lt;/p&gt;&#xD;
&lt;p style="padding-left: 30px;"&gt;&amp;bull;&amp;nbsp;避免通过email的方式将文件传来传去&lt;br /&gt;&amp;bull;&amp;nbsp;可以使每一名经理方便的对他们自己那一部分的数据进行查看和修改&lt;br /&gt;&amp;bull;&amp;nbsp;为高层管理者提供一个试图可以查看所有区域的所有雇员&lt;br /&gt;&amp;bull;&amp;nbsp;对当前数据的修改要进行审计，支持历史记录报告。&lt;br /&gt;&amp;bull;&amp;nbsp;使常规的修改尽可能容易&lt;br /&gt;&amp;bull;&amp;nbsp;使非常规的修改尽可能变得直观&lt;br /&gt;&amp;bull;&amp;nbsp;给经理提供多样化的雇员视图，根据雇员类别进行聚合&lt;br /&gt;&amp;bull;&amp;nbsp;提供小计和总计功能&lt;/p&gt;&#xD;
&lt;p&gt;最终的效果类似下面这样：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823200984.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;完整指南&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;那个看起来很像Excel电子表格的WebPart是数据视图Web部件（DVWP），通过它我们可以在页面中显示某个区域的所有雇员，并可以直接在页面中进行编辑。因此，我们将从DVWP着手，将其扩展以满足我们的需求。&lt;br /&gt;有关该项目的所有内容都包含在其自己的子网站中，所以主页和快速启动区域都是与雇员(Full-Time Employee,简称FTE)项目相关的。所以新建页面时最容易的方法是直接创建一个和默认主页相同功能的页面（因此也包含快速启动），通过SPD可以直接基于现有的页面进行创建。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823210618.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;右击 default.aspx ，在上下文菜单中点击 New from Existing Page&lt;br /&gt;&amp;nbsp;&lt;br /&gt;我们并不需要这上面的这些webpart，但可以很方便的基于此页进行修改：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823212120.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们的新创建的web部件页是基于该站点的default.aspx页&lt;br /&gt;&amp;nbsp;&lt;br /&gt;假设我们将来会用到共享文档这个库，比如放一些希望共享的文档&amp;hellip;&amp;hellip;没关系，让我们新建一个别的文档库来存放我们新创建的页面，这里将新建一个名为Locations的文档库。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;bull;&amp;nbsp;在 Web Site 选项卡下，在窗口中右击打开上下文菜单。&lt;br /&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823221777.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在窗口中右，选择 New -&amp;gt; SharePoint Content&amp;hellip;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;bull;&amp;nbsp; 选择 Document Libraries 下的Document Library，并为新库起一个名字&lt;br /&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823231324.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;选择Document Libraries 下的Document Library，并填写一个名称&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;bull; 在你新建的文档所在选项卡下，点Save，将其保存到新建的库。&lt;br /&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823240471.jpg" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;将新建的页保存到新建的文档库，这里我起名为 LocationsMaster.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;现在，有了一个可以开始操作的页面了。在本例中，我们不需要右侧的web部件区域。与其直接删除该区域，不如删除包裹右侧区域和之间空格的外层TD。&lt;br /&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823244539.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;很简单，如上图中的步骤1-2-3&amp;hellip;噢，还有4&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;在拆分视图中，点击设计视图中的图片WebPart。将会在代码视图中选中整个webpart的HTML/XSL内容，同时还将在标记面包屑导航条上高亮该&lt;strong&gt;ImageWebPart&lt;/strong&gt;。&lt;/li&gt;&#xD;
&lt;li&gt;如果我们点击标记条中的 &lt;strong&gt;WebPartZone#Right&lt;/strong&gt;，整个web部件区域的 HTML/XSL 会被选中&amp;mdash;&amp;mdash;包括其中的webpart&amp;mdash;&amp;mdash;也会被选中，但不包括其外层的ID。&lt;/li&gt;&#xD;
&lt;li&gt;该标记左侧紧挨着的就是TD，点击该标记会选中整个TD。&lt;/li&gt;&#xD;
&lt;li&gt;同时，我们还想删除前面的一个TD，所以按住 Shift 键，并点击上面第244 行中TD标记的左侧（你的行号可能不同）来选中它。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;这是再通过 &lt;strong&gt;Delete&lt;/strong&gt; 键将所有这些都删掉。&lt;/p&gt;&#xD;
&lt;p&gt;在设计视图中，我们看到右边这块还是有一大片空白。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823253466.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;删掉右侧的Web部件区域后留下一大片空白。我们将会把它给填上。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;为了将左侧区域拉伸到右侧：&amp;nbsp;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;点击左侧区域红的某个webpart，然后&lt;/li&gt;&#xD;
&lt;li&gt;在标记面包屑导航条中点击最近的td，以便&lt;/li&gt;&#xD;
&lt;li&gt;在代码视图中定位到该td标记的顶部，这里你会&lt;/li&gt;&#xD;
&lt;li&gt;注意到宽度被设置为70%.&lt;/li&gt;&#xD;
&lt;li&gt;修改为 100% 后将收回我们的失地。同时&amp;hellip;&lt;/li&gt;&#xD;
&lt;li&gt;我们发现在这下面还有一个td，所以&lt;/li&gt;&#xD;
&lt;li&gt;删除它，这样我们的DVWP就可以填满整个区域了&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;对于 &lt;em&gt;Announcements&lt;/em&gt; 和&lt;em&gt;Calendar&lt;/em&gt;， 我们不需要删除WebPart区域，只删webpart。所以，对与每一个webpart：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;在设计视图中点击该 webpart，&lt;/li&gt;&#xD;
&lt;li&gt;鼠标悬停在标记面包屑导航条中高亮显示的标记上，&lt;/li&gt;&#xD;
&lt;li&gt;点击下箭头打开上下文菜单，然后&lt;/li&gt;&#xD;
&lt;li&gt;选择 &lt;em&gt;&lt;span style="text-decoration: underline;"&gt;R&lt;/span&gt;emove Tag&lt;/em&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823265552.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在我们就可以添加DVWP。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;添加DVWP&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在我们有了一个页面，可以作为我们DVWP的外壳。现在就开始创建我们的DVWP。&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;点击WebPart区域中的链接，以便在SPD中将其高亮选中。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823270997.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;根据链接的指示去操作&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样就可以使该WebPart区域进入可以插入WebPart的状态，以便接受DVWP。&lt;/p&gt;&#xD;
&lt;li&gt;点击 Insert -&amp;gt; SharePoint Controls -&amp;gt; Data View&lt;/li&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823290978.png" alt="" /&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;li&gt;&amp;nbsp;SPD 继续提示我们进行接下来的步骤。&lt;/li&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823345044.png" alt="" /&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在 Data Source Library 选项卡下，点击包含你所要数据的列表旁的下拉框。然后，点击 Show Data.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;bull;&amp;nbsp; SPD 将切换到 Data Source Details 选项卡，在这里我们可以选择要包含的字段。&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823363074.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注意: &lt;/strong&gt;SPD 将会根据我们在数据源详细信息面板中点选的顺序把选中的字段以从左到右的顺序铺在DVWP中。按住Ctrl键再点击可以选中多个栏，同时决定将来显示的顺序。&lt;br /&gt;&amp;bull;&amp;nbsp; 当我们有了想要的字段，就可以点击 Insert Selected Fields as&amp;hellip;&lt;br /&gt;&lt;em&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823383470.png" alt="" /&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;hellip;&amp;hellip;然后选择 Multiple Item View。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823392941.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;DVWP初始载入的状态&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;格式化DVWP&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在，页面上已经有了DVWP，接下来就可以开始对其进行自定义了，首先是通过配置界面进行修改，这样就可以最大限度的减少XSL的修改。&lt;br /&gt;对于我的项目有一点很明确的需求就是使用多个DVWP来管理数据，而不是一块一块的每次看10项。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;格式化数据视图属性：分页&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823403329.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;红框框住的链接将打开数据视图属性（&lt;strong&gt;Data View Properties&lt;/strong&gt;）对话框的分页（&lt;strong&gt;Paging&lt;/strong&gt;）选项卡。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;你也可以通过菜单将其打开： Data View -&amp;gt; Paging&amp;hellip;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823413421.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;默认情况下，分页设置为10项。我们将选择 Display all items。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;在这个窗口中，我顺便修改一些其他的设置。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;格式化数据视图属性： 列标题排序&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;允许用户在页面中进行排序是一个很好的体验，所以我们从 &lt;strong&gt;General &lt;/strong&gt;选项卡下将该项设置启用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823472915.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;默认设置是没有工具栏。我们将&amp;ldquo;对列标题启用排序和筛选&amp;rdquo; （Enable sorting and filtering on column headers）。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;格式化数据视图属性：编辑&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们允许用户可以在DVWP上进行插入，编辑和删除操作，所以让我们在&amp;ldquo;编辑&amp;rdquo;(&lt;strong&gt;Editing&lt;/strong&gt;)选项卡下将其开启。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823495994.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;所有的操作链接默认都是关闭的。我们把3个都勾选上。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823510249.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;开始的几个DVWP扩展: 直接编辑，不分页，和列标题排序/筛选。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;我花了一小会儿才在SPD中加载出数据，因为我有486 条记录。当然我不希望我的用户必须一次加载这么多的数据，所以让我们添加一些筛选和分组条件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;格式化数据视图属性：筛选&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823522629.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;筛选DVWP 可以使我们根据&lt;strong&gt;Location&lt;/strong&gt;把列表数据分成几块。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;像分页 （&lt;strong&gt;Paging&lt;/strong&gt;）一样，你也可以通过菜单打开筛选条件对话框： Data View -&amp;gt; Filter&amp;hellip;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;格式化数据视图属性：排序和分组&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们希望对现有数据进行排序和分组。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823535356.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;默认情况下是按创建时间（&lt;strong&gt;Created&lt;/strong&gt;）升序排列的。我们改成按 &lt;strong&gt;Group &lt;/strong&gt;进行分组，同时按 &lt;strong&gt;Worker&lt;/strong&gt;进行排序，均为升序。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;格式化数据视图属性：编辑列&amp;hellip;（Edit Columns&amp;hellip;）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在我们会根据&lt;strong&gt;Location &lt;/strong&gt;进行筛选并根据 &lt;strong&gt;Group&lt;/strong&gt;进行分组，所以不再需要显示这两列。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823560157.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过高亮选中列并点击&amp;lt;&amp;lt; Remove移除 &lt;strong&gt;Location &lt;/strong&gt;和 &lt;strong&gt;Group &lt;/strong&gt;列。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;格式化数据视图布局：WebPart标题，列标题，和显示格式&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在开始扩展我们的解决方案前，还有其他一些小的微调工作。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;标题&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;由于我们打算将相同的一个WebPart用于多个区域，所以需要方便的对WebPart的标题进行修改。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823585721.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这个WebPart默认的标题是所显示的列表的名称。我们将把它修改成&lt;strong&gt;Operations &lt;/strong&gt;以便反映出我们设置的筛选项。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;列标题&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在我已经有了一个载入数据的部件，HR部门决定把列标题修改成他们自己的术语：他们希望看到"Job Title" 而不是 "Position," "Employee" 而不是 "Worker," "Shift"而不是"Work Shift,"&amp;nbsp; "Effective"而不是 "EffDate."&lt;br /&gt;每个列标题都包含在一个名为dvt.headerfield的模版中，传一个显示名称。&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101823594482.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在设计视图中点击列标题，以便在代码视图中高亮对应的模版调用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在该模版（template）中， fieldtitle 和 displayname这两项是修改标题行文本时必须要改的。 (见第 245-6行)：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;xsl:call-template name="dvt.headerfield" ddwrt:atomic="1" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"&amp;gt;&lt;br /&gt;    &amp;lt;xsl:with-param name="fieldname"&amp;gt;@Positions&amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;    &amp;lt;xsl:with-param name="fieldtitle"&amp;gt;Job Title&amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;    &amp;lt;xsl:with-param name="displayname"&amp;gt;Job Title&amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;    &amp;lt;xsl:with-param name="sortable"&amp;gt;1&amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;    &amp;lt;xsl:with-param name="fieldtype"&amp;gt;x:string&amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;&amp;lt;/xsl:call-template&amp;gt; &lt;br /&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900003132.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;修改列标题后&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;显示格式&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Effective Date&lt;/strong&gt; 的时间部分实际上没有什么意义；可以看到在这里总是显示12:00 AM。让我们通过修改数据格式来将其隐藏。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900012997.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;日期格式默认是显示时间的。我们取消选中 Show Time 复选框以将其改成只显示日期。我们还可以修改日期的显示格式。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;扩展DVWP&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;至此，我们已经完成了格式化的工作，现在可以开始扩展DVWP了。&lt;br /&gt;首先要做的是&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/20/1804997.html" target="_blank"&gt;重新排列栏&lt;/a&gt;，把&lt;strong&gt;edit&lt;/strong&gt; 和&lt;strong&gt;delete&lt;/strong&gt; 链接放在页面右侧。我们必须在默认值模版，编辑模版，以及&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/22/1805955.html" target="_blank"&gt;插入模版&lt;/a&gt;上都操作一遍。 &lt;/p&gt;&#xD;
&lt;p&gt;接下来，我们&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/23/1806149.html" target="_blank"&gt;把所有的表单操作链接放在一行中&lt;/a&gt;，并&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/24/1807248.html" target="_blank"&gt;把其中的几个变成按钮的形式&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;根据我们的需要对外观进行修改后，我们将&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/26/1809112.html" target="_blank"&gt;打开这些操作链接&lt;/a&gt;，&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/27/1810141.html" target="_blank"&gt;研究一下它们的工作原理&lt;/a&gt;，添加一个&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/25/1808449.html" target="_blank"&gt;PreSaveAction()&lt;/a&gt;，&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/27/1810141.html" target="_blank"&gt;挂接一个工作流&lt;/a&gt;，&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/28/1811651.html" target="_blank"&gt;重新排列执行顺序&lt;/a&gt;，并&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/29/1812011.html" target="_blank"&gt;修复其中的错误&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;然后，我们将&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/30/1813029.html" target="_blank"&gt;传递一些工作流变量给该工作流&lt;/a&gt;，&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/08/31/1813999.html" target="_blank"&gt;通过变量传递一些信息&lt;/a&gt;，并&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/01/1814460.html" target="_blank"&gt;添加更多信息&lt;/a&gt;，&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/02/1816462.html" target="_blank"&gt;添加更多的变量&lt;/a&gt;用于&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/03/1816661.html" target="_blank"&gt;jQuery和PreSaveAction()&lt;/a&gt;，以便进行表单验证，或者进行审计记录的写入。&lt;/p&gt;&#xD;
&lt;p&gt;为了使用户输入数据或者修改数据变得更容易，我们&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/08/1820173.html" target="_blank"&gt;创建了一些网站栏&lt;/a&gt;，&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/08/1821635.html" target="_blank"&gt;加载上数据&lt;/a&gt;，并在网站栏间&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/10/1822247.html" target="_blank"&gt;创建关系列表&lt;/a&gt;（并通过&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/10/1823439.html" target="_blank"&gt;两种&lt;/a&gt;方式中的&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/10/1823372.html" target="_blank"&gt;一种&lt;/a&gt;来填充数据）。接着我们就可以把这些网站栏和关系列表加工成&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/11/1823678.html" target="_blank"&gt;级联下拉框&lt;/a&gt;（分别实现了两级和&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/11/1823836.html" target="_blank"&gt;三级联动&lt;/a&gt;）。&amp;nbsp;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有时，我们会填充大量的数据，所以设置一些默认值将对我们非常有利。比如，在我们的关系列表中，Title基本上是多余的。它只是为了告诉我们两个存在关系的栏中是什么内容的数据。我们可以让SharePoint &lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/13/1824625.html" target="_blank"&gt;利用jQuery自动填写该数据&lt;/a&gt;。或者我们也可以&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/13/1824854.html" target="_blank"&gt;引发一个工作流来做这件事情&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;现在我们的数据流转的很好了，我们可以设置一个&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/16/1826370.html" target="_blank"&gt;审计跟踪功能来捕获对该列表进行的任何修改&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;由于我们的编辑模板（&lt;em&gt;edit template&lt;/em&gt;）和我们的默认值模板（&lt;em&gt;default template&lt;/em&gt;）看起来很类似，所以用户可能会感到迷惑，不清楚自己当前处于什么状态。因此，我们需要&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/19/1828339.html" target="_blank"&gt;修改编辑模板&lt;/a&gt;，通过一些简单的图形化元素使该状态变得更加明显些。同时，我们还可以创建&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/28/1831195.html" target="_blank"&gt;另一个版本的编辑模板&lt;/a&gt;，来捕获当一个列表项删除时的信息。这个&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/30/1838848.html" target="_blank"&gt;remove模板可以被单独格式化&lt;/a&gt;，以便满足我们的需求。我们甚至可以独立于编辑模板，单独&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/09/30/1839700.html" target="_blank"&gt;修改其表单操作工作流&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;为了将大量数据展现给不同的用户时变得更直观，我们需要重用前面创建的WebPart，通过&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/10/10/1839735.html" target="_blank"&gt;Christophe Humbert的Easy Tabs&lt;/a&gt;代码以及内容编辑器（Content Editor Web Part ，简称CEWP ）添加所需数量的DVWP，来对应不同的区块，每一个只需要修改一下筛选和排序条件即可。&lt;/p&gt;&#xD;
&lt;p&gt;在保存该WebPart前，我们还应该&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/10/11/1847401.html" target="_blank"&gt;对insert模板进行一些修改以填入默认值&lt;/a&gt;。但是要注意，我们是在多个DVWP的情况下，所以需要有&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/10/13/1847699.html" target="_blank"&gt;一些特殊的考量以保证我们的默认值设置到正确的tab页&lt;/a&gt;上。&lt;/p&gt;&#xD;
&lt;p&gt;最后，为了使其看起来更棒，我们&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/10/18/1850020.html" target="_blank"&gt;格式化了一下总计和小计行的外观&lt;/a&gt;，并&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/11/1855078.html" target="_blank"&gt;用图标替换了一些表单操作链接&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;重用我们的WebPart&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们花了18周才进行到这儿。如果让你没创建一个tab页，或者一个新的Location后将每一步重做一遍显然是一件很恐怖的事情。幸运的是，我们不必这么做。我们只需要导出之前改好的WebPart并重用它即可。&lt;/p&gt;&#xD;
&lt;p&gt;我们将在浏览器中来操作。&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;点击 网站操作（&lt;strong&gt;Site Actions&lt;/strong&gt; ）-&amp;gt;编辑页面（&lt;strong&gt;Edit Page&lt;/strong&gt;）。&lt;/li&gt;&#xD;
&lt;li&gt;点击WebPart右上角菜单 编辑（&lt;strong&gt;edit&lt;/strong&gt;） -&amp;gt; 导出（&lt;strong&gt;Export&amp;hellip;&lt;/strong&gt;）&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900024265.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;将它保存到一个容易找到的地方。&lt;/p&gt;&#xD;
&lt;p&gt;然后，当我们要用到它时，我们只要：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;点击 &lt;strong&gt;Add a Web Part&lt;/strong&gt; 按钮&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900032833.png" alt="" /&gt;&lt;/li&gt;&#xD;
&lt;li&gt;点击 &lt;strong&gt;Advanced Web Part gallery and options&lt;br /&gt;&lt;/strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900040992.png" alt="" /&gt;&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900051024.png" alt="" /&gt;&lt;/li&gt;&#xD;
&lt;li&gt;点击 &lt;em&gt;Browse&amp;hellip;&lt;/em&gt; 按钮&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900052337.png" alt="" /&gt;&lt;/li&gt;&#xD;
&lt;li&gt;定位到你的WebPart并点击 &lt;strong&gt;Open&lt;br /&gt;&lt;/strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900065527.png" alt="" /&gt;&lt;/li&gt;&#xD;
&lt;li&gt;点击 &lt;strong&gt;Upload&lt;/strong&gt; 按钮&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900073854.png" alt="" /&gt;&lt;/li&gt;&#xD;
&lt;li&gt;把该WebPart拖到页面上&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900083329.png" alt="" /&gt;&lt;/li&gt;&#xD;
&lt;li&gt;为页面中的每一个tab重复该步骤&lt;/li&gt;&#xD;
&lt;li&gt;在每个tab中，为该tab调整筛选，排序和分组&lt;/li&gt;&#xD;
&lt;li&gt;最后，点击 &lt;strong&gt;Exit Edit Mode&lt;/strong&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/18046/2010101900092263.png" alt="" /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;进球了!&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;尽管我们已经到了扩展DVWP系列的尾声部分，但实际上还只是触碰了数据视图WebPart整个功能的冰山一角。DVWP更多的功能还有待于大家在将来的工作中继续挖掘。&lt;/p&gt;&#xD;
&lt;p&gt;我很荣幸献上这一系列的内容，同时也很希望能听到您关于DVWP使用方面的奇思妙想。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;赠送部分&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;最近来自社区的朋友问到如何在空白的列表中处理insert表单操作链接遇到的问题。我的解决方案将作为本系列的赠送部分附上。敬请期待！&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.endusersharepoint.com/2010/09/14/sharepoint-extending-the-dvwp-%e2%80%93-part-35-putting-it-all-together-or/" target="_blank"&gt;SharePoint:Extending the DVWP - Part 35:Putting it All Together&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1882972.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/21/1882972.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Sunmoonfire/archive/2010/11/14/1876796.html</id><title type="text">在SharePoint 2010中创建自定义字段类型</title><summary type="text">网站栏已经为一般用户和开发者提供了非常好的可重用的能力。更进一步，你可以定义一个可重用的栏定义，这将为我们带来更大的灵活性。配合Microsoft SharePoint Foundation 2010，你可以将创建自定义字段类型的门槛降得很低。下面是创建一个自定义字段类型的总体步骤。你也可以参考这个msdn How to Video 视频。创建一个自定义字段控件的过程为：1. 创建一个public...</summary><published>2010-11-14T15:15:00Z</published><updated>2010-11-14T15:15:00Z</updated><author><name>Sunmoonfire</name><uri>http://www.cnblogs.com/Sunmoonfire/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/14/1876796.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/14/1876796.html"/><content type="html">&lt;p&gt;网站栏已经为一般用户和开发者提供了非常好的可重用的能力。更进一步，你可以定义一个可重用的栏定义，这将为我们带来更大的灵活性。配合Microsoft SharePoint Foundation 2010，你可以将创建自定义字段类型的门槛降得很低。&lt;/p&gt;&#xD;
&lt;p&gt;下面是创建一个自定义字段类型的总体步骤。你也可以参考这个msdn How to Video &lt;a href="http://www.microsoft.com/resources/msdn/en-us/office/media/video/sharepoint.html?uuid=bd82a836-7ef7-4e22-8aaa-7821dcd90cda" target="_blank"&gt;视频&lt;/a&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;创建一个自定义字段控件的过程为：&lt;/p&gt;&#xD;
&lt;p&gt;1. 创建一个public 的自定义字段类型的类，并继承自某个内置的字段类型类，比如SPFieldBoolen，SPFieldChoice，或 SPFieldText。&lt;br /&gt;2. 创建两个public的构造器，接收特定的参数，并传递给相同参数的父类的构造器。&lt;/p&gt;&#xD;
&lt;p&gt;3. 创建一个XML文件，作为该字段类型的部署文件。你必须将其部署到一个指定的目录中，并且需要在场级别激活该自定义字段类型。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;创建自定义字段类&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;你必须把自定义字段类定义为public的，并且为其提供两个非默认的构造器。本例同时还展示了如何通过覆写GetValidatedString方法使用正则表达式验证字段的值。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;using System;&#xD;
using System.Collections.Generic;&#xD;
using System.Linq;&#xD;
using System.Text;&#xD;
using Microsoft.SharePoint;&#xD;
&#xD;
namespace WingtipCustomFields {&#xD;
public class ProductCode : SPFieldText {&#xD;
&#xD;
public ProductCode(SPFieldCollection fields, string fName) : base(fields, fName) { }&#xD;
public ProductCode(SPFieldCollection fields, string tName, string dName) : base(fields, tName, dName) { }&#xD;
&#xD;
public override string DefaultValue {&#xD;
get { return &amp;ldquo;P001&amp;Prime;; }&#xD;
}&#xD;
&#xD;
public override string GetValidatedString(object value) {&#xD;
&#xD;
if (!value.ToString().StartsWith(&amp;ldquo;P&amp;rdquo;))&#xD;
&#xD;
{ throw new SPFieldValidationException(&amp;ldquo;Product code must start with &amp;lsquo;P&amp;rsquo;&amp;rdquo;); }&#xD;
&#xD;
if (value.ToString().Length != 4)&#xD;
&#xD;
{ throw new SPFieldValidationException(&amp;ldquo;Product code must be 4 chars&amp;rdquo;); }&#xD;
&#xD;
// 在写入内容数据库前总是转换成大写的&#xD;
return value.ToString().ToUpper();&#xD;
}&#xD;
}}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;创建该字段类型的部署文件&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;字段类型的部署文件包含了由 Collaborative Application Markup Language (CAML) 定义的自定义字段类型。你必须以这样的格式命名该文件 fieldtypes*.xml 并将其部署到14\TEMPLATE\XML 目录下。下面的例子文件被命名为 fldtypes_WingtipCustomFields.xml。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;FieldTypes&amp;gt;&#xD;
  &amp;lt;FieldType&amp;gt;&#xD;
    &amp;lt;Field Name="TypeName"&amp;gt;ProductCode&amp;lt;/Field&amp;gt;&#xD;
    &amp;lt;Field Name="ParentType"&amp;gt;Text&amp;lt;/Field&amp;gt;&#xD;
    &amp;lt;Field Name="TypeDisplayName"&amp;gt;Product Code&amp;lt;/Field&amp;gt;&#xD;
    &amp;lt;Field Name="TypeShortDescription"&amp;gt;Wingtip Product Code&amp;lt;/Field&amp;gt;&#xD;
    &amp;lt;Field Name="UserCreatable"&amp;gt;TRUE&amp;lt;/Field&amp;gt;&#xD;
    &amp;lt;Field Name="FieldTypeClass"&amp;gt;&#xD;
      WingtipCustomFields.ProductCode,&#xD;
      $SharePoint.Project.AssemblyFullName$ &#xD;
   &amp;lt;/Field&amp;gt;&#xD;
  &amp;lt;/FieldType&amp;gt;&#xD;
&amp;lt;/FieldTypes&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&amp;nbsp;-&lt;/p&gt;&#xD;
&lt;p&gt;Microsoft Visual Studio 2010 中的SharePoint部署工具允许你使用 $SharePoint.Project.AssemblyFullName$ 占位符来表示实际的组件名称。当你编译源文件并打包成解决方案包时SharPoint会用实际的组件名称替换该占位符。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.learningsharepoint.com/2010/11/13/custom-field-type-in-sharepoint-2010/" target="_blank"&gt;Custom field type in SharePoint 2010&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Sunmoonfire/aggbug/1876796.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Sunmoonfire/archive/2010/11/14/1876796.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
