﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-SharePoint团队</title><link>http://sps.cnblogs.com</link><description>交流SharePoint相关技术。</description><language>zh-cn</language><lastBuildDate>Thu, 24 Jul 2008 18:07:07 GMT</lastBuildDate><pubDate>Thu, 24 Jul 2008 18:07:07 GMT</pubDate><ttl>60</ttl><item><title>K2 实现流程节点动态配置</title><link>http://www.cnblogs.com/wanghao-3/archive/2008/07/24/1250845.html</link><dc:creator>A   A</dc:creator><author>A   A</author><pubDate>Thu, 24 Jul 2008 12:38:00 GMT</pubDate><guid>http://www.cnblogs.com/wanghao-3/archive/2008/07/24/1250845.html</guid><description><![CDATA[<p><font face="Verdana">以前本blog有讲关于 K2 blackpearl 结合MOSS表单库实现请假流程 <br />
K2.net 2003&nbsp; </font></p>
<p><font face="Verdana">我接触K2是首先接触 k2 blcakpearl 开发过基于MOSS的流程。感觉K2 blcakpearl 非常强大，为用户提供过<br />
很多向导，很多东西都需要配置 配置就OK，或者根据他自己生成的代码修改修就OK ，K2 blcakpearl&nbsp; 还有一个更大的优点就是K2 blcakpearl&nbsp; 底层是基于WF，所以跟MS接触的更紧密。由于他都是提供很多向导 感觉操作界面没有K2。net 简洁 。让一般开发者上手不是很容易。仍然给予WF ，WCF ，WPF 但是还是有很多不够灵活的地方 。<br />
最近 又用K2。net 开发过项目。感觉k2.net 很容易上首。，也非常简单。扩展性也非常强悍。。</font></p>
<p><font face="Verdana">这个是最近实现的一个流程：<br />
流程很简单。。这个流程的重点是，用户可以在数据库灵活的配置节点。很容易禁用节点。启用节点</font></p>
<p><font face="Verdana">此流程的实现原理： 用户提交流程-〉level Activity ，来判断当前的申请人的级别来走流程。<br />
走流程的时候，来判弹审批节点是否禁用，如果禁用，在走向下一个流程节点 ，<br />
下个节点 如果没有被禁用 然后审批。审批后&nbsp; 流程再次流转到 level Activity 再次判断 流程的下级是否禁用。如果禁用 ，再次走下一级。。。来回循环。。就很容易解决流程节点动态问题<br />
流程图如下:</font></p>
<p><img height="584" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wanghao-3/bpm1.JPG" width="1184" border="0" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img height="563" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wanghao-3/bpm2.JPG" width="1161" border="0" /></p>
<p>&nbsp;</p>
<p>希望给大家一些帮助 ...</p>
<img src ="http://sps.cnblogs.comaggbug/1250845.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41284/" target="_blank">[新闻]奇虎回应:瑞星半年免费版像是一个恶意软件</a>]]></description></item><item><title>老板的几句话</title><link>http://www.cnblogs.com/shunliy/archive/2008/07/23/1249605.html</link><dc:creator>shunliy</dc:creator><author>shunliy</author><pubDate>Wed, 23 Jul 2008 07:03:00 GMT</pubDate><guid>http://www.cnblogs.com/shunliy/archive/2008/07/23/1249605.html</guid><description><![CDATA[<p>1.不过想做成为一个好的程序员，要经的起、承担的起压力的</p>
<p>2.你现在要学会，对于不好解决的问题，把问题进行分解（这是解决问题的思路），逐个解决，即使搞不定也可以找别人支援</p>
<p>3.关键你要给你自己一个要求，争取到年底有所提高，出现一些挫折没有关系，要对自己有信心，重在坚持，一定会出现好的成果</p>
<p>4.人生最需要的不是规划，而是在适当的时机掌握机会，采取行动<br />
5.完美的演出来自充分的准备<br />
6.勇于改变自己，适应不断变化的环境，机会将不断出现<br />
7.快乐及有意义的人生来自于实现自己心中的愿望，而非外在的掌声</p>
<img src ="http://sps.cnblogs.comaggbug/1249605.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41283/" target="_blank">[新闻]鲍尔默致员工信：部署09年微软5大工作重心</a>]]></description></item><item><title>SharePoint And Ajax Technology（3）：SharePoint集成Ajax</title><link>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243952.html</link><dc:creator>努力学习的小熊</dc:creator><author>努力学习的小熊</author><pubDate>Tue, 22 Jul 2008 08:22:00 GMT</pubDate><guid>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243952.html</guid><description><![CDATA[摘要: SharePoint集成Ajax&nbsp;&nbsp;<a href='http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243952.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1243952.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41282/" target="_blank">[新闻]陈一舟:Facebook也抄袭过校内 不怕打官司</a>]]></description></item><item><title>SharePoint And Ajax Technology（2）：Ajax Control Toolkit学习</title><link>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243939.html</link><dc:creator>努力学习的小熊</dc:creator><author>努力学习的小熊</author><pubDate>Tue, 22 Jul 2008 08:21:00 GMT</pubDate><guid>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243939.html</guid><description><![CDATA[摘要: Ajax Control Toolkit学习&nbsp;&nbsp;<a href='http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243939.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1243939.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41281/" target="_blank">[新闻]微软重组视窗与在线业务</a>]]></description></item><item><title>SharePoint And Ajax Technology（0）：Ajax环境安装</title><link>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243079.html</link><dc:creator>努力学习的小熊</dc:creator><author>努力学习的小熊</author><pubDate>Tue, 22 Jul 2008 08:20:00 GMT</pubDate><guid>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243079.html</guid><description><![CDATA[摘要: Ajax环境安装&nbsp;&nbsp;<a href='http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243079.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1243079.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41280/" target="_blank">[新闻]我国网民数达2.53亿超美国居世界首位</a>]]></description></item><item><title>SharePoint And Ajax Technology（1）：Ajax技术学习</title><link>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243084.html</link><dc:creator>努力学习的小熊</dc:creator><author>努力学习的小熊</author><pubDate>Tue, 22 Jul 2008 08:20:00 GMT</pubDate><guid>http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243084.html</guid><description><![CDATA[摘要: Ajax技术学习&nbsp;&nbsp;<a href='http://www.cnblogs.com/Bear-Study-Hard/archive/2008/07/22/1243084.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1243084.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41278/" target="_blank">[新闻]瑞星炮轰奇虎用阉割版杀毒软件欺骗用户</a>]]></description></item><item><title>状态机工作流的并行事件</title><link>http://www.cnblogs.com/xiaoshatian/archive/2008/07/22/1248102.html</link><dc:creator>Windie Chai（笑煞天）</dc:creator><author>Windie Chai（笑煞天）</author><pubDate>Tue, 22 Jul 2008 01:04:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoshatian/archive/2008/07/22/1248102.html</guid><description><![CDATA[<p style>
在上一篇文章《<a tabindex="-1" href="http://www.cnblogs.com/xiaoshatian/archive/2008/07/15/1242998.html">MOSS多级审批工作流【StateMachine版】</a>》中，有这样一个情景，我创建了两个任务，并且要等到这两个任务都完成后，根据其结果进行一些操作。在这一部分，我遇到一个问题，如何并行的处理这两个任务呢？
</p>
<p>&#160;</p>
<p>已知一个EventDrivenActivity不能跳转到一个以上的StateActivity中，所以我只能在同一个StateActivity中处理这两个任务。于是又引出一个问题，既然要并行的处理这两个任务，那么就得将OnTaskChangedActivity分别添加到不同的EventDrivenActivity中，那么如何在两个任务都被修改之后再进行操作呢？也就是说，如何在两个EventDrivenActivity都结束之后继续操作呢？
</p>
<p>&#160;</p>
<p>在上一篇文章中，我的方法是每一次修改任务之后，都维护一个bool值，然后在每个EventDrivenActivity的最后添加IfElseActivity来判断两个bool值是否都为TRUE，如果都为TRUE，再根据任务审批结果跳转到不同的StateActivity。
</p>
<p>这种方法固然没有问题，但终究有些繁琐，而且，如果我们修改了流程，需要使IfElseActivity中某一分支跳转到新添加的StateActivity，那么就得到逐个EventDrivenActivity内部修改。
</p>
<p>&#160;</p>
<p>其实我们完全可以把这种方法再抽象一下，为什么说状态机工作流是&#8220;事件驱动&#8221;工作流呢？是因为每一个状态都依靠事件来决定下一步的流转方向。
</p>
<p>就拿在SharePoint工作流中为用户创建任务为例，我们在StateInitializationActivity中添加CreateTaskActivity来创建任务，然后在EventDrivenActivity中添加OnTaskChangedActivity来接收任务被修改的事件，根据任务修改的结果来决定跳转到哪个StateActivity。
</p>
<p>那么CreateTaskActivity和OnTaskChangedActivity又是什么原理呢？CreateTaskActivity其实是从CallExternalMethodActivity继承而来，而OnTaskChangedActivity是从HandleExternalEventActivity继承而来，这两个活动一个用来调用宿主的方法，一个用来接收宿主的数据（如果想了解这两个活动，请参见我翻译的《WF编程 - 本地通信事件》（<a tabindex="-1" href="http://www.cnblogs.com/xiaoshatian/archive/2007/08/03/841988.html">1</a>、<a tabindex="-1" href="http://www.cnblogs.com/xiaoshatian/archive/2007/08/07/846915.html">2</a>））。</p>
<p>CreateTaskActivity调用SharePoint Service提供的的CrateTask方法来创建一个任务，当用户修改了任务时，SharePoint Service就触发OnTaskChanged事件，工作流中的OnTaskChangedActivity捕获了此事件，进行处理，使得工作流可以继续进行。</p>
<p>&#160;</p>
<p>再回来思考我们的需求，不就是希望在每一次任务修改之后都能触发一个共同的事件，在利用此事件判断是否所有任务都已经完成吗？
</p>
<p>那么参照CreateTaskActivity和OnTaskChangedActivity的方式，我们只需要这样做就可以满足要求了，在每一次任务被修改后，使用CallExternalMethodActivity调用一个方法，这个方法当然不可能是SharePoint提供的了，这需要我们自己提供，这个方法只做一件事情，就是触发一个事件。接着我们在同一个StateActivity中再添加一个新的EventDrivenActivity，在其内部添加一个HandleExternalEventActivity来接收这个事件，接着再利用IfElseActivity来判断所有任务的处理结果并执行相应的跳转。
这样做的好处是把以前每个EventDrivenActivity中的IfElseActivity独立成为一个单独的部分，利用WF的本地通信服务，我们仍然可以实现每一次修改活动，都执行IfElseActivity，但如果需要修改跳转的目标StateActivity，再也不需要逐个修改了。</p>
<p>&#160;</p>
<p>但是在这个示例中，我并没有直接用CallExternalMethodActivity和HandleExternalEventActivity活动，而是继承它们来得到两个自定义活动，为什么要这样做呢？
</p>
<p>前边提到，CallExternalMethodActivity会调用一个方法，这个方法需要我们自己提供，那么我们就要编写相应的接口和实现这个接口的服务，最重要的是，我们必须在ExternalDataExchangehangeService中添加这个服务，然而SharePoint Service并不允许我们接触Workflow Runtime，好在如果开发自定义活动的话，在活动的Execute方法中，我们可以通过ActivityExecutionContext的相关方法获得ExternalDataExchangehangeService，然后为其添加自定义服务。</p>
<p>关于WF本地通信服务的机制和开发方法，请参见我翻译的《WF编程 - 触发事件与调用方法》（<a tabindex="-1" href="http://www.cnblogs.com/xiaoshatian/archive/2007/07/13/816947.html">1</a>、<a tabindex="-1" href="http://www.cnblogs.com/xiaoshatian/archive/2007/07/16/819862.html">2</a>、<a tabindex="-1" href="http://www.cnblogs.com/xiaoshatian/archive/2007/07/16/819862.html">3</a>）。
</p>
<p>&#160;</p>
<p>这篇逻辑混乱的说明文到此结束，各位朋友倘若看的不明白，那一定是我的文笔太差，下载源码一看便能明白了。
</p>
<p><a tabindex="-1" href="http://files.cnblogs.com/xiaoshatian/StateMachineApprovalWithCustomActivity.rar">点击下载源码</a>（本例为MOSS多级审批工作流【StateMachine版】的修改版）</p>
<p>注：</p>
<ul>
    <li>请用Visual Studio 2008打开源码</li>
    <li>需要SharePoint Service支持</li>
    <li>编译之后请手工将WindStyle.WindowsWorkflow.Activities.dll添加到GAC</li>
</ul>
<img src ="http://sps.cnblogs.comaggbug/1248102.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41277/" target="_blank">[新闻]阿里巴巴正式成立台湾分公司</a>]]></description></item><item><title>WSS工作流SDK学习日记（1）—— WSS工作流介绍</title><link>http://www.cnblogs.com/mossdotnet/archive/2008/07/20/1246917.html</link><dc:creator>moss.net</dc:creator><author>moss.net</author><pubDate>Sat, 19 Jul 2008 23:48:00 GMT</pubDate><guid>http://www.cnblogs.com/mossdotnet/archive/2008/07/20/1246917.html</guid><description><![CDATA[<p style="text-indent: 21pt; line-height: 150%" align="left">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; line-height: 150%" align="left"><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">WSS</span></span><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流介绍</span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">在WSS3.0中，工作流可以添加一些商业流程到某个列表项中，这个流程可以控制列表项各个方面，包括列表项的生命周期。比如，你可以创建一个文档多级审批的简单工作流。</span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流可以满足简单或者复杂的商业需求，你可以创建工作流使得列表项在触发某些事件后自动启动用户界面进行用户的交互，比如在列表项创建或者修改的时候。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">利用WSS工作流</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WSS3.0</span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流可以实现在列表或者文档库级别。工作流可以添加在文档或者列表项上，也可以添加在内容类型上。多个工作流可以同时添加在指定的列表项上，但是同一时间一个列表项只能有某个工作流的一个实例，比如你可以同时添加审批工作流和反馈工作流在一个指定的内容类型上，但是你不能同时运行审批工作流的两个实例在同一个内容类型上。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">Sharepoint</strong></span><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流技术架构</strong></span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong></span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">你可以利用Visual Studio 2005的工作流设计器来创建工作流。每个工作流会编译成自己的动态链接库。另外，工作流通过自定义工作流表单和用户直接交互，在每个阶段收集用户的信息。</span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">在服务场中安装工作流，你需要创建工作流定义。工作流模板定义是一个XML文件包含WSS中运行工作流实例的信息，比如：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流名称，GUID和描述</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流中使用的自定义表单位置</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流程序集相关信息</span></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">每个服务器场包含一个工作流关联信息表。表中每条记录包含应用在指定内容类型，列表或者文档库的工作流相关信息。这些相关信息包括工作流是自动启动还是通过用户启动，工作流的任务和历史列表等。如果一个工作流被添加在多个内容类型或者文档库，在表中会有针对每个关联的记录。同样，如果你添加多个工作流在指定的内容类型，列表或者文档库，那么表中包含每个工作流添加的内容类型，列表或文档库信息。</span></p>
<p style="line-height: 150%" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">下图描述了WSS3.0工作流概念架构。服务场中每个添加工作流的内容类型，列表和文档库都会记录在关联表中。每个工作流有一个工作流定义。这个基于XML定义文件包含了工作流程序集信息，类名以及工作流中使用到表单位置。</span></p>
<p style="line-height: 150%" align="left">&nbsp;</p>
<p style="line-height: 150%" align="left"></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt; line-height: 150%" align="left"><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'"><img height="371" alt="" src="http://www.cnblogs.com/images/cnblogs_com/mossdotnet/snap1.jpg" width="867" border="0" /></span></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt; line-height: 150%" align="left"><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">1.1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流的阶段</span></span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">要更好地了解工作流是如何是什么以及如何在WSS3.0中被使用，我们需要讨论一下工作流在和用户交互的不同阶段。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流关联</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流被安装在服务器级别，但是站点集管理员必须把它指定到服务器的某个站点集上。</span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">网站管理员可以把工作流添加到一个列表，文档库或者是内容类型上。他们可以选择列表，文档库或者内容类型上可以使用哪些工作流，也可以通过设置工作流参数信息来自定义工作流，比如：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流的名称</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流是如何被应用到指定项目：当项目创建或者修改时候自动或手动启动工作流；哪些角色，管理员还是审批者可以启动工作流</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">如果工作流需要任务，那么需要使用哪个任务列表</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">是否使用工作流历史记录列表保存工作流历史事件</span></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">要自定义工作流信息，工作流必须提供自定义表单以便网站管理员输入自定义信息。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流初始化</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">拥有相应权限用户可以手动初始化工作流。首先用户在WSS3.0选择某个项目，在项目工作流菜单选择关联工作流。接着，用户提供自定义信息到指定工作流并初始化工作流。初始化工作流就是给指定的项目创建一个工作流实例。</span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">对于用户自定义工作流初始化设置，工作流必须提供自定义表单显示给用户。用户在表单中设置初始化信息，这些设置通过工作流引擎，运用在新的工作流实例。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流状态</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">用户可以查看某个列表项工作流的进度。在状态页面显示列表项目工作流当前状态。另外，每个列表项都有一个工作流页面，在这个页面上用户可以查看下面信息：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">当前运行在这个列表项所有工作流</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">过去运行在这个列表项所有工作流</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">这个列表项可以利用工作流</span></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">当用户为一个列表项初始化工作流后，WSS3.0为这个列表项添加一个字段。这个字段名字通过初始化工作流中设置。WSS3.0利用这个只读字段来显示当前工作流状态。WSS3.0会在每个工作流第一次运行时添加这个状态栏。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流任务完成</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流通过任务列表来显示每个阶段。当设计工作流时，工作流作者可以指定任务模式。比如，任务列表可以包含下面内容：</span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">任务标题</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">任务分配对象</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">任务状态</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">任务优先度</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">任务到期日期</span></span></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: Wingdings">l&nbsp;<span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">相关文档链接</span></span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流运行时任务就被创建，用户可以选择任务并标记完成以及输入一些可选或者必输的信息，接着工作流实例会改变工作流任务并进行到工作流的下一个状态。</span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt; line-height: 150%" align="left"><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">1.2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流宿主架构</span></span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">在WSS3.0中工作流是建立在微软工作流架构上，这是一个微软平台组件，它提供了开发平台和开发工具来开发基于工作流的应用程序。WSS3.0利用两个组件来开发工作流： Visual Studio 2005工作流设计器和工作流运行时引擎。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">Visual Studio 2005</strong></span><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流设计器</strong></span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">Visual Studio 2005</span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流设计器是Visual Studio 2005的一个插件用于开发者创建自定义工作流和工作流活动。WWF提供工作流模型允许开发者描述商业流程，工作流通过图形化部件，XML定义，代码来创建。Visual Studio 2005工作流设计器提供了一个直观的图形化设计界面使得开发者可以很方便组合预先定义的活动到自定义工作流上。工作流创建者可以像开发.net framework那样对工作流模型进行开发和扩展。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">微软工作流（WF）运行时引擎</strong></span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流运行时引擎管理工作流运行并且允许工作流在机器重启后长时间保持相关状态。运行时服务提供核心服务例如事务化和持久化到运行时引擎。WF允许任意应用程序进程或者服务作为工作流宿主运行工作流，实际上是把工作流加载到进程中。当你在WSS3.0中创建工作流，WSS3.0就是工作流的宿主。</span></p>
<p style="text-indent: 21pt; line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流运行时引擎为每个工作流提供应用程序需要的服务，例如顺序化，状态管理，跟踪以及事务支持等。工作流引擎提供状态机用于加载和卸载工作流模板和管理当前工作流运行状态。</span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">WSS3.0</span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">作为工作流运行时引擎宿主，取代包含在WF的服务，提供了自定义服务： 事务化，持久化，通知，角色，跟踪以及消息。开发者可以基于WSS3.0创建工作流解决方案。</span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">下图显示WSS3.0工作流架构。WSS在它的进程中加载WF运行时引擎并且提供必要服务的自定义实现。WSS3.0提供的一些这些机能都可以通过WSS3.0对象模型来进行开发。</span></p>
<p style="line-height: 150%" align="left">&nbsp;</p>
<p style="line-height: 150%" align="left"></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'"><img height="427" alt="" src="http://www.cnblogs.com/images/cnblogs_com/mossdotnet/snap2.jpg" width="493" border="0" /></span></strong></p>
<p style="line-height: 150%" align="left"><strong></strong>&nbsp;</p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流持久化</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">WSS3.0</span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">提供很重要的服务就是工作流持久化。工作流包含用户交互信息必须长时间保存在计算机上。在实际运用中，一个文档需要审批的工作流可能运行很多天。很明显，把工作流运行期间内容保存在内存中是不可行的，大量长时间运行的工作流数据很快会使系统崩溃。</span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">所以，取代保存在内存中做法，一旦工作流实例到达需要用户输入的时候，WSS3.0就会将工作流实例从内存中取出并持久化数据。当相应事件触发时候，比如用户输入，需要再次实例化工作流，WSS3.0会利用持久化的数据重新实例化工作流。这样在拥有大量工作流实例时候，实际上在内存中运行的只有少数几个工作流实例。</span></p>
<p style="margin: 0cm 0cm 0pt 36pt; text-indent: -36pt; line-height: 150%" align="left"><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">1.3<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 14pt; line-height: 150%; font-family: '微软雅黑','sans-serif'">工作流类型</span></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">WF</span><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">支持两种基本工作流类型。你可以在WSS3.0创建这两种工作流。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">顺序工作流</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">顺序工作流是按照顺序运行每个步骤直到最后一个工作流活动的结束。但是，顺序工作流在过程中并不是完全顺序执行，因为在过程中可以接收外部事件，包含一些并行逻辑流程等,使得顺序活动执行发生一些变化。</span></p>
<p style="line-height: 150%" align="left"><strong><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">状态机工作流</strong></span></p>
<p style="line-height: 150%" align="left"><span style="line-height: 150%; font-family: '微软雅黑','sans-serif'">状态机工作流有一系列状态，事务和活动。一个状态表示开始状态，基于事件或事务可能变成另一种状态。状态机流程有最终状态表示工作流的结束。</span></p>
<img src ="http://sps.cnblogs.comaggbug/1246917.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41276/" target="_blank">[新闻]浅析facebook的信息架构</a>]]></description></item><item><title>利用INFOPATH2007&amp;VS2005开发MOSS工作流详解</title><link>http://www.cnblogs.com/mossdotnet/archive/2008/07/19/1246597.html</link><dc:creator>moss.net</dc:creator><author>moss.net</author><pubDate>Sat, 19 Jul 2008 05:14:00 GMT</pubDate><guid>http://www.cnblogs.com/mossdotnet/archive/2008/07/19/1246597.html</guid><description><![CDATA[<p>最近学习MOSS的工作流开发，翻译MSDN的关于INFOPATH+WF开发工作流例子，这里把整体过程总结一下，发布给大家，不足之处多多指教<img src="http://www.cnblogs.com/Emoticons/msn/49_49.gif"  alt="" /></p>
<p>&nbsp;</p>
利用INFOPATH2007&amp;VS2005开发MOSS工作流(开发篇)
<p><a href="http://www.cnblogs.com/Files/mossdotnet/2.pdf">/Files/mossdotnet/2.pdf</a></p>
<p>&nbsp;</p>
<p>利用INFOPATH2007&amp;VS2005开发MOSS工作流(部署篇)</p>
<p><a href="http://www.cnblogs.com/Files/mossdotnet/1.pdf">/Files/mossdotnet/1.pdf</a></p>
<p>&nbsp;</p>
 <img src ="http://sps.cnblogs.comaggbug/1246597.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41275/" target="_blank">[新闻]Mozilla将于本周五发布Firefox 3.1第一个预览版</a>]]></description></item><item><title>《博客园精华集－－Sharepoint分册》第三轮结果</title><link>http://www.cnblogs.com/firstyi/archive/2008/07/17/1245256.html</link><dc:creator>永春</dc:creator><author>永春</author><pubDate>Thu, 17 Jul 2008 08:01:00 GMT</pubDate><guid>http://www.cnblogs.com/firstyi/archive/2008/07/17/1245256.html</guid><description><![CDATA[摘要: 《博客园精华集－－Sharepoint分册》第三轮结果<br>写在前面：<br>	Sharepoint接触的人相对比较少，筛选下来感觉精华文章不多。对于本分册我准备采用入门、使用、开发、进阶的组织方式，当然如果大家认为不够精华有违精华集的宗旨的话，也可以将本分册拿掉，把其中的精华文章合并到其他分册。<br><br>	下面是我初步筛选的结果，时间、能力有限，难免有疏漏之处，希望大家能够提出宝贵意见，如分类不正确、转载文章、质量太差等，我们将根据大家的意见在后面的工作中进行调整。<br>	另外，如果您的文章当前已经被收录，但您不想让文章进入本书，请一并提出，谢谢合作。<br><br>目录如下：&nbsp;&nbsp;<a href='http://www.cnblogs.com/firstyi/archive/2008/07/17/1245256.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1245256.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41274/" target="_blank">[新闻]瑞星将向个人用户免费1年</a>]]></description></item><item><title>续-在sharepoint中利用文档库扩展新闻应用</title><link>http://www.cnblogs.com/ttinfo/archive/2008/07/16/1243987.html</link><dc:creator>磨剑</dc:creator><author>磨剑</author><pubDate>Wed, 16 Jul 2008 01:39:00 GMT</pubDate><guid>http://www.cnblogs.com/ttinfo/archive/2008/07/16/1243987.html</guid><description><![CDATA[摘要: <p><img src="http://www.cccc-survey.com/_layouts/images/homepage.gif" align="right"/>关于《在sharepoint中利用文档库扩展新闻应用》的一些补充。</p>&nbsp;&nbsp;<a href='http://www.cnblogs.com/ttinfo/archive/2008/07/16/1243987.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1243987.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41273/" target="_blank">[新闻]中国互联网历史上最伟大的产品TOP10（二）</a>]]></description></item><item><title>MOSS多级审批工作流【StateMachine版】v1.1</title><link>http://www.cnblogs.com/xiaoshatian/archive/2008/07/15/1242998.html</link><dc:creator>Windie Chai（笑煞天）</dc:creator><author>Windie Chai（笑煞天）</author><pubDate>Tue, 15 Jul 2008 01:08:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaoshatian/archive/2008/07/15/1242998.html</guid><description><![CDATA[去年我发布过一个<a href="http://www.cnblogs.com/xiaoshatian/archive/2007/02/26/657181.html" target="_blank">MOSS多级审批工作流，采用顺序工作流模式开发</a>；<a href="http://www.cnblogs.com/xiaoshatian/archive/2007/08/01/839609.html" target="_blank">后来又做了一些改进，用ConditionedActivityGroupActivity取代了繁复的WhileActivity+IfElseActivity嵌套，但仍然是顺序工作流</a>。<br />
在第二篇文章的末尾我曾写道：&#8220;审批这样的流程并不适合用顺序工作流来实现，用WF的另外一种工作流-状态机工作流会更好&#8221;，为什么这样说呢？<br />
我们已经知道，顺序工作流的执行过程是一个连续的步骤，从开始到结束，虽然我们可以利用While这样的循环活动让工作流看起来往回去执行了几步，但是这样的后果就是一张难以理解的流程图和复杂的执行逻辑。<br />
真实世界的工作流程是灵活的，往往不是一条线走到底的，中间可能包含这许多决策，每个决策都可能让流程走向另外一个方向。所以包含人类参与的工作流其实是一个决策推动的流程，把它抽象到工作流中，就成了&#8220;事件驱动工作流&#8221;，也就是状态机工作流（StateMachine Workflow）。<br />
状态机工作流由一系列状态（State）组成，每个状态中又可以包含一系列事件的处理程序。状态机工作流总是停留在一个状态中，等待必要的事件被触发，然后跳转到新的状态。<br />
那么现在再来看看这个多级审批工作流的原始流程图：<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaoshatian/85614/r_preview.PNG" border="0" />&nbsp;<br />
下面是用状态机实现后的流程图：<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaoshatian/85614/statemachine.png" border="0" />&nbsp;<br />
你会发现，状态机工作流的流程图和我们最初的流程图相当接近，无论是流程块还是之间的连线。如果再和之前用<a href="http://www.cnblogs.com/xiaoshatian/archive/2007/08/01/839609.html" target="_blank">顺序工作流实现后的流程图</a>对比一下，那么以后你在遇到人类参与的工作流时，一定不会考虑用顺序工作流实现了。<br />
<br />
下面简要的说明一下状态机工作流的开发要点：<br />
<br />
<h4>1.如何规划状态？</h4>
在MOSS的状态机工作流中，我们一般这样规划一个状态： <br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaoshatian/85614/StateActivity.png" border="0" /><br />
在状态初始（StateInitializationActivity）时创建任务（CreateTaskActivity），在状态结束（StateFinalizationActivity）时删除任务（DeleteTaskActivity）。而在初始化和结束之间，我们可以添加多个事件驱动（EventDrivenActivity），EventDrivenActivity的作用是接收并处理事件（比如任务被修改的事件，OnTaskChangedActivity），然后可以根据事件的处理结果跳转到其它状态（SetStateActivity），你可以将SetStateActivity理解为各个状态之间的连接线。 <br />
<h4>2.如何实现Task3和Task4的并发？</h4>
注意在最初的流程图中，Task3和Task4是两个并列的任务，在这个审批流程的Sequence版实现中，我们当然选择用ParallelActivity来实现并发，在StateMachine中我们仍然可以这样做，不过如果要将Task3和Task4安排成两个状态，我们就得在ParallelActivity的两个分支中都添加一个SetStateActivity并指向相应的State。<br />
但是这时候你会吃惊的发现，虽然每条分支都执行了，但只有最后一条分支中的SetStateActivity正确的执行了跳转。<br />
因为一个EventDrivenActivity只能跳转到一个StateActivity，所以我们需要其它方法来实现Task3和Task4的并发。<br />
<br />
我的方法是将Task3和Task4集成到一个状态里，先在状态初始时创建两个任务，然后添加两个几乎一模一样的EventDrivenActivity来分别处理两个任务被修改的事件，下面是这个EventDrivenActivity的子活动组成： <br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaoshatian/85614/EventDrivenActivity.png" border="0" /><br />
在处理完任务被修改的事件后，我会将此任务标记为&#8220;已完成&#8221;，并记录其审批结果；接着，利用IfElseActivity判断两个任务是否都被标记为&#8220;已完成&#8221;，如果还有任务没有完成，就不做任何操作，如果两个任务都已经完成，就再根据它们的审批结果来决定跳转到哪个状态。 <br />
<br />
<h4>3.为什么把删除任务的活动添加到了EventDrivenActivity内部而不是StateFinalizationActivity内部？</h4>
这样做是因为我想在任务被处理后马上删除它，但StateActivity总是等到执行SetStateActivity时才会执行到StateFinalizationActivity，而上面我们已经实现了两个任务都完成后才发生跳转，所以如果将DeleteTaskActivity添加到StateFinalizationActivity的话，就做不到实时删除任务了。&nbsp;<br />
<br />
<h4>4.为什么要在EventDrivenActivity内部添加IfElseActivity？</h4>
答案是为了实现直到两个任务都完成后才发生跳转。<br />
但是，这样做的后果就是我不得不在每次处理完任务之后都添加这个IfElseActivity，好在我们的流程只有两个并发的任务，如果有三个、五个甚至更多呢？这种判断方法就显得非常麻烦，而且会让流程结构变得臃肿，难道就没有更好的方法吗？希望和大家一起探讨这个问题，我也会在下一篇文章中介绍一种取代这种频繁利用IfElseActivity进行判断的方法。 <br />
<br />
OK，以上就是这个多级审批工作流（StateMachine版）的实现要点，欢迎大家共同交流探讨。<br />
源码下载：<a href="http://www.cnblogs.com/Files/xiaoshatian/StateMachineApproval.rar">点击下载</a>（Visual Studio 2008） 
 <img src ="http://sps.cnblogs.comaggbug/1242998.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41271/" target="_blank">[新闻]盖茨官方否认天价租楼看奥运 纯属地产商炒作</a>]]></description></item><item><title>我所知道的SharePoint feature（3）</title><link>http://www.cnblogs.com/jdxyw/archive/2008/07/14/1242496.html</link><dc:creator>jdxyw</dc:creator><author>jdxyw</author><pubDate>Mon, 14 Jul 2008 06:48:00 GMT</pubDate><guid>http://www.cnblogs.com/jdxyw/archive/2008/07/14/1242496.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;最近在看Andrew Connell的一篇关于timer job的文章，<font face="Verdana"><a href="http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx">http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx</a></font> 其中讲到了如何用feature来对一个新的timer job进行部署。这里使用到了如何添加feature event handler。这里就利用学习timer job 的机会，也写写如何自定义一个feature的event handler<br />
&nbsp;&nbsp;&nbsp;&nbsp;与feature自身相关的event有四种安装 删除 激活 取消。我们就是利用activate的时候，来控制对job的设置，利用deactivate的时候，将指定的job删除。<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.在VS中创建一个class library的工程。在reference中加入Microsoft.sharepoint.dll,这个dll可以在<font face="Verdana">C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI</font>下找到。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div class="cnblogs_code"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;Microsoft.SharePoint;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;Microsoft.SharePoint.Administration;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;TimerJobDemo<br />
<img id="Codehighlighter1_181_1160_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_181_1160_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_181_1160_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_181_1160_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_181_1160_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_181_1160_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_181_1160_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_181_1160_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_181_1160_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_181_1160_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TimerJobDemoFeature:SPFeatureReceiver<br />
<img id="Codehighlighter1_235_1158_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_235_1158_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_235_1158_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_235_1158_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_235_1158_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_235_1158_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_235_1158_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_235_1158_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_235_1158_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_235_1158_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;FeatureInstalled(SPFeatureReceiverProperties&nbsp;properties)<br />
<img id="Codehighlighter1_331_393_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_331_393_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_331_393_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_331_393_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_331_393_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_331_393_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_331_393_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_331_393_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_331_393_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_331_393_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">throw&nbsp;new&nbsp;NotImplementedException();</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;FeatureActivated(SPFeatureReceiverProperties&nbsp;properties)<br />
<img id="Codehighlighter1_489_830_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_489_830_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_489_830_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_489_830_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_489_830_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_489_830_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_489_830_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_489_830_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_489_830_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_489_830_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">throw&nbsp;new&nbsp;NotImplementedException();</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPSite&nbsp;site&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SPSite(</span><span style="color: #800000">"</span><span style="color: #800000">http://litwaredemo</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPWeb&nbsp;rootweb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;site.RootWeb;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPList&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rootweb.Lists[</span><span style="color: #800000">"</span><span style="color: #800000">ForTimerJob</span><span style="color: #800000">"</span><span style="color: #000000">];<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPListItem&nbsp;item&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;list.Items.Add();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item[</span><span style="color: #800000">"</span><span style="color: #800000">Title</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">This&nbsp;is&nbsp;a&nbsp;test</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item.Update();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;FeatureDeactivating(SPFeatureReceiverProperties&nbsp;properties)<br />
<img id="Codehighlighter1_929_991_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_929_991_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_929_991_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_929_991_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_929_991_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_929_991_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_929_991_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_929_991_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_929_991_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_929_991_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">throw&nbsp;new&nbsp;NotImplementedException();</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;FeatureUninstalling(SPFeatureReceiverProperties&nbsp;properties)<br />
<img id="Codehighlighter1_1090_1152_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1090_1152_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1090_1152_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1090_1152_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1090_1152_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1090_1152_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1090_1152_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1090_1152_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1090_1152_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1090_1152_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">throw&nbsp;new&nbsp;NotImplementedException();</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上就是feature event handler的代码，我们可以看到，在featurereceiver中我们需要重载四个不同时期的函数，但是我们只是对其中的featureactivate进行了完整的实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.在同一个工程中新建一个文件夹，命名为TimerJobDemo，创建一个Feature.xml(具体的过程可以参看前面的两篇）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个feature的任务就是创建，并注册一个新的timer job，所以这个feature十分的简单。相比前面提到的feature，它多了两个十分主要的属性。<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div class="cnblogs_code"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">Feature&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://schemas.microsoft.com/sharepoint/"</span><span style="color: #ff0000">&nbsp;Title</span><span style="color: #0000ff">="TimerJobDemo"</span><span style="color: #ff0000">&nbsp;Id</span><span style="color: #0000ff">="2D301FC8-DB43-4d5e-93DE-8F722054F4EE"</span><span style="color: #ff0000">&nbsp;ReceiverAssembly</span><span style="color: #0000ff">="TimerJobDemo,&nbsp;Version=1.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=80614946b1f438b6"</span><span style="color: #ff0000">&nbsp;ReceiverClass</span><span style="color: #0000ff">="TimerJobDemo.TimerJobDemoFeature"</span><span style="color: #ff0000">&nbsp;Scope</span><span style="color: #0000ff">="WebApplication"</span><span style="color: #0000ff">/&gt;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;这个就是这个feature的全部内容，只有一个节点。Titile ID等属性我们前面都已经提到了，这里出现两个新的属性，就是ReceiverAssembly 和ReceiverClass。ReceiverAssembly&nbsp;指定的是FeatureReceiver所在的程序集，而ReceiverClass指定的是FeatureReceiver所在的类。在激活feature前，我们需要将已经强签名的程序集Gac。然后安装和激活feature。激活后，我们到前面代码中提到的list中，看看是不是多了一个新的item。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="133" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jdxyw/feature_3_1.JPG" width="860" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 <img src ="http://sps.cnblogs.comaggbug/1242496.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41270/" target="_blank">[新闻]2008年7月24日IT博客精选</a>]]></description></item><item><title>控制视图页面的访问权限</title><link>http://www.cnblogs.com/jianyi0115/archive/2008/07/12/1241210.html</link><dc:creator>jianyi</dc:creator><author>jianyi</author><pubDate>Fri, 11 Jul 2008 17:25:00 GMT</pubDate><guid>http://www.cnblogs.com/jianyi0115/archive/2008/07/12/1241210.html</guid><description><![CDATA[摘要: 记得有朋友问过这个问题，恰好最近也碰到了，共享一下...&nbsp;&nbsp;<a href='http://www.cnblogs.com/jianyi0115/archive/2008/07/12/1241210.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1241210.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41269/" target="_blank">[新闻]TOM在线与Joost正式组建合资公司</a>]]></description></item><item><title>SharePoint如何模拟用户</title><link>http://www.cnblogs.com/jianyi0115/archive/2008/07/08/1238233.html</link><dc:creator>jianyi</dc:creator><author>jianyi</author><pubDate>Tue, 08 Jul 2008 07:36:00 GMT</pubDate><guid>http://www.cnblogs.com/jianyi0115/archive/2008/07/08/1238233.html</guid><description><![CDATA[摘要: &nbsp;&nbsp;<a href='http://www.cnblogs.com/jianyi0115/archive/2008/07/08/1238233.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1238233.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41268/" target="_blank">[新闻]财富:谷歌副总裁称其新闻搜索值1亿美元</a>]]></description></item><item><title>多域环境下people picker查找不到用户问题的解决</title><link>http://www.cnblogs.com/jianyi0115/archive/2008/07/08/1238168.html</link><dc:creator>jianyi</dc:creator><author>jianyi</author><pubDate>Tue, 08 Jul 2008 06:28:00 GMT</pubDate><guid>http://www.cnblogs.com/jianyi0115/archive/2008/07/08/1238168.html</guid><description><![CDATA[摘要: &nbsp;&nbsp;<a href='http://www.cnblogs.com/jianyi0115/archive/2008/07/08/1238168.html'>阅读全文</a><img src ="http://sps.cnblogs.comaggbug/1238168.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41267/" target="_blank">[新闻]Ubuntu创始人呼吁开发Linux桌面软件对抗苹果</a>]]></description></item><item><title>我所知道的SharePoint feature（2）</title><link>http://www.cnblogs.com/jdxyw/archive/2008/07/08/1238014.html</link><dc:creator>jdxyw</dc:creator><author>jdxyw</author><pubDate>Tue, 08 Jul 2008 03:03:00 GMT</pubDate><guid>http://www.cnblogs.com/jdxyw/archive/2008/07/08/1238014.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;在上一次的文章中，简要的介绍了一下，如何写一个feature的过程，和写一个feature的流程，大部分的feature都是可以按照这样的流程来走的，虽然其中可能还有许多的千差万别，但这个是对功能的不同需求造成的。<br />
&nbsp;&nbsp;&nbsp; 大家在写feature的时候可能会觉的敲这么多东西进去是个很痛苦的事情，要是能够像C++ C#有个自动提示和自动完成的功能就好了。其实使用DTD一样可以在VS2008（VS2005中也是可以的）中实现自动提示和自动完成的功能。<br />
&nbsp;&nbsp;&nbsp;&nbsp;像前一篇文章所说的，建立一个feature.xml,然后在properties中选择Schemas<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<img height="566" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jdxyw/feature_2_1.JPG" width="285" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这里我们会看到一系列的Schemas，如果我们想编辑相应的XML文件，我们可以选择相应的Schemas，来减小我们的工作量、你也可以自己编写相应的schemas来完成相应的XML的编辑。红线框住的就是我们所需要的。如果你是第一次配置的话，是没有这个Schemas的。你需要自己加入。而这个Schemas在<font face="Verdana">C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML下面的wss.xsd文件。加入之后，选择使用就可以了。<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="566" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jdxyw/feature_2_3.JPG" width="859" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img height="94" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jdxyw/feature_2_4.JPG" width="893" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这时候我就可以使用这个新添加的Schemas了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height="294" alt="" src="http://www.cnblogs.com/images/cnblogs_com/jdxyw/feature_2_5.JPG" width="694" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
 <img src ="http://sps.cnblogs.comaggbug/1238014.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41266/" target="_blank">[新闻]央视国际联手微软打造数字奥运媒体平台</a>]]></description></item><item><title>MOSS &amp; SSO 系列2</title><link>http://www.cnblogs.com/pccai/archive/2008/07/03/1235018.html</link><dc:creator>pccai</dc:creator><author>pccai</author><pubDate>Thu, 03 Jul 2008 11:10:00 GMT</pubDate><guid>http://www.cnblogs.com/pccai/archive/2008/07/03/1235018.html</guid><description><![CDATA[<p>上回谈到与Exchange Server 2007邮件集成问题,最后有了新版本：<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/pccai/email2.jpg" border="0" /><br />
<br />
&nbsp;任务当然是从工作流引擎那边抓的，顺便也会用到SSO的，那边是表单验证嘛，这年头用域的不多啊。。。<br />
<br />
<strong>OWA 2007</strong><br />
</p>
<div class="cnblogs_code"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.WebControls.WebParts;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.UI.HtmlControls;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;Microsoft.SharePoint.Portal.SingleSignon;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;Microsoft.SharePoint.Portal;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;OWASSOWebPart<br />
<img id="Codehighlighter1_251_1428_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_251_1428_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_251_1428_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_251_1428_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_251_1428_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_251_1428_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_251_1428_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_251_1428_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_251_1428_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_251_1428_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;OWASSOWebPart&nbsp;:&nbsp;WebPart<br />
<img id="Codehighlighter1_298_1426_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_298_1426_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_298_1426_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_298_1426_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_298_1426_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_298_1426_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_298_1426_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_298_1426_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_298_1426_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_298_1426_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Render(System.Web.UI.HtmlTextWriter&nbsp;writer)<br />
<img id="Codehighlighter1_384_1420_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_384_1420_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_384_1420_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_384_1420_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_384_1420_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_384_1420_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_384_1420_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_384_1420_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_384_1420_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_384_1420_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strSSOLogonFormUrl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SingleSignonLocator.GetCredentialEntryUrl(</span><span style="color: #800000">"</span><span style="color: #800000">OWA</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
<img id="Codehighlighter1_504_1047_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_504_1047_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_504_1047_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_504_1047_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_504_1047_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_504_1047_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_504_1047_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_504_1047_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_504_1047_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_504_1047_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.Write(</span><span style="color: #800000">"</span><span style="color: #800000">If&nbsp;your&nbsp;login&nbsp;fails,&nbsp;please&nbsp;&lt;a&nbsp;href=\</span><span style="color: #800000">""</span><span style="color: #800000">&nbsp;+&nbsp;strSSOLogonFormUrl&nbsp;+&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">&gt;Update&nbsp;your&nbsp;credentials&lt;/a&gt;&nbsp;with&nbsp;your&nbsp;new&nbsp;password.&lt;br/&gt;</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;rgGetCredentialData&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Credentials.GetCredentials(</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">OWA</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ref</span><span style="color: #000000">&nbsp;rgGetCredentialData);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;src&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">/_layouts/OWARedirect.htm?l=</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;rgGetCredentialData[</span><span style="color: #800080">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">&amp;p=</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;rgGetCredentialData[</span><span style="color: #800080">1</span><span style="color: #000000">];<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.Write(</span><span style="color: #800000">"</span><span style="color: #800000">&lt;iframe&nbsp;frameborder=\</span><span style="color: #800000">"</span><span style="color: #800080">0</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;width=\</span><span style="color: #800000">"</span><span style="color: #800080">800</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;height=\</span><span style="color: #800000">"</span><span style="color: #800080">600</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">&nbsp;src=\</span><span style="color: #800000">""</span><span style="color: #800000">&nbsp;+&nbsp;src&nbsp;+&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">/&gt;</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(SingleSignonException&nbsp;ssoe)<br />
<img id="Codehighlighter1_1107_1410_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1107_1410_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1107_1410_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1107_1410_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1107_1410_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1107_1410_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1107_1410_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1107_1410_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1107_1410_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1107_1410_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(SSOReturnCodes.SSO_E_CREDS_NOT_FOUND&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;ssoe.LastErrorCode)<br />
<img id="Codehighlighter1_1205_1291_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1205_1291_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1205_1291_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1205_1291_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1205_1291_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1205_1291_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1205_1291_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1205_1291_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1205_1291_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1205_1291_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context.Response.Redirect(strSSOLogonFormUrl);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img id="Codehighlighter1_1329_1396_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1329_1396_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1329_1396_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1329_1396_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1329_1396_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1329_1396_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1329_1396_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1329_1396_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1329_1396_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1329_1396_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.Write(ssoe.Message);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
替代那个MOSS自带的WebPart,如果你的OWA采用Form方式验证的话，基本上那个WebPart没有任何作用！<br />
再在_layouts下建个html重定向文件：<br />
<div class="cnblogs_code"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.0&nbsp;Transitional//EN"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">http-equiv</span><span style="color: #0000ff">="Content-Type"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="text/html;&nbsp;CHARSET=utf-8"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Robots"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="NOINDEX,&nbsp;NOFOLLOW"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Microsoft&nbsp;Exchange&nbsp;-&nbsp;Outlook&nbsp;Web&nbsp;Access</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_301_1153_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_301_1153_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_301_1153_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_301_1153_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_301_1153_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_301_1153_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_301_1153_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_301_1153_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #0000ff">&gt;</span><span id="Codehighlighter1_301_1153_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_301_1153_Open_Text"><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;!--</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img id="Codehighlighter1_358_801_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_358_801_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_358_801_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_358_801_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_358_801_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_358_801_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_358_801_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_358_801_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;getParameter(queryString,&nbsp;parameterName)&nbsp;</span><span id="Codehighlighter1_358_801_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_358_801_Open_Text"><span style="color: #000000; background-color: #f5f5f5">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;parameterName&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;parameterName&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
<img id="Codehighlighter1_437_799_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_437_799_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_437_799_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_437_799_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_437_799_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_437_799_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_437_799_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_437_799_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;(queryString.length&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">)&nbsp;</span><span id="Codehighlighter1_437_799_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_437_799_Open_Text"><span style="color: #000000; background-color: #f5f5f5">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;queryString.indexOf(parameterName);<br />
<img id="Codehighlighter1_516_770_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_516_770_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_516_770_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_516_770_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_516_770_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_516_770_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_516_770_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_516_770_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;(begin&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">!=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">-</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">)&nbsp;</span><span id="Codehighlighter1_516_770_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_516_770_Open_Text"><span style="color: #000000; background-color: #f5f5f5">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;parameterName.length;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;queryString.indexOf(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&amp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,&nbsp;begin);<br />
<img id="Codehighlighter1_639_696_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_639_696_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_639_696_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_639_696_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_639_696_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_639_696_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_639_696_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_639_696_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;(end&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">==</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">-</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">)&nbsp;</span><span id="Codehighlighter1_639_696_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_639_696_Open_Text"><span style="color: #000000; background-color: #f5f5f5">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;queryString.length;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">return</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;unescape(queryString.substring(begin,&nbsp;end));<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">return</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">null</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_824_1143_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_824_1143_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_824_1143_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_824_1143_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_824_1143_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_824_1143_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_824_1143_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_824_1143_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #0000ff; background-color: #f5f5f5">function</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;SetParams()&nbsp;</span><span id="Codehighlighter1_824_1143_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_824_1143_Open_Text"><span style="color: #000000; background-color: #f5f5f5">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;queryString&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;window.location.search.substring(</span><span style="color: #000000; background-color: #f5f5f5">1</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;logonForm.username.value&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;getParameter(queryString,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">l</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;logonForm.password.value&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;getParameter(queryString,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">p</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">alert(getParameter(queryString,&nbsp;"l"));</span><span style="color: #008000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5">//</span><span style="color: #008000; background-color: #f5f5f5">alert(getParameter(queryString,&nbsp;"p"));</span><span style="color: #008000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;window.document.logonForm.submit();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">--&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body&nbsp;</span><span style="color: #ff0000">onload</span><span style="color: #0000ff">="SetParams();"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Please&nbsp;wait<img alt="" src="http://www.cnblogs.com/Images/dot.gif" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="https://moss.demo.fr/owa/auth/owaauth.dll"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="POST"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="logonForm"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autocomplete</span><span style="color: #0000ff">="off"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="hidden"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="destination"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="https://moss.demo.fr/owa/"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="hidden"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="flags"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="hidden"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="forcedownlevel"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="rdoPblc"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="hidden"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="trusted"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="username"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="username"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="hidden"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="hidden"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
部署后即可测试了！附件给出owa 2003 和 2007的代码源文件！<br />
<a href="http://www.cnblogs.com/Files/pccai/OWASSOWebPart.zip">此处下载</a> <br />
<img src ="http://sps.cnblogs.comaggbug/1235018.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41265/" target="_blank">[新闻]Google在线百科工具Knol今日正式上线</a>]]></description></item><item><title>MOSS &amp; SSO 系列1</title><link>http://www.cnblogs.com/pccai/archive/2008/07/03/1235013.html</link><dc:creator>pccai</dc:creator><author>pccai</author><pubDate>Thu, 03 Jul 2008 10:53:00 GMT</pubDate><guid>http://www.cnblogs.com/pccai/archive/2008/07/03/1235013.html</guid><description><![CDATA[最近写了几个SSO的WebParts,发现了些问题，于是提出共参：<br />
<strong>Step1: 引用相关的DLL<br />
</strong><font face="Verdana">&nbsp;&nbsp; using Microsoft.SharePoint.Portal.SingleSignon;<br />
&nbsp;&nbsp;&nbsp;using Microsoft.SharePoint.Portal;<br />
</font>或者你可以直接这么做：编辑当前项目的Web.config的&lt;assemblies&gt;&lt;/assemblies&gt;<br />
加入：<font face="Verdana"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;add assembly="Microsoft.SharePoint.Portal.SingleSignon, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;add assembly="Microsoft.SharePoint.Portal.SingleSignon.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;add assembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/&gt;<br />
<br />
</font><strong>Step2: 配置MOSS上的SSO<br />
</strong>&nbsp;&nbsp;&nbsp; （简单，暂且不表）注意多半要在数据库登录帐户中添加：NT AUTHORITY\ANONYMOUS LOGON 给个可以创建数据库和管理权限的即可！<img style="width: 783px; height: 560px" height="560" alt="" src="http://www.cnblogs.com/images/cnblogs_com/pccai/SSO2.jpg" width="783" border="0" /><br />
<br />
<strong>Step3:Coding...<br />
</strong><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2种写法都可以，暂不明白？&nbsp;<br />
&nbsp;&nbsp;&nbsp;
<fieldset><legend>写法1</legend>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSSOLogonFormUrl = SingleSignonLocator.GetCredentialEntryUrl("DEMOSSO");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] rgGetCredentialData = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Credentials.GetCredentials(1, "DEMOSSO", ref rgGetCredentialData);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strName = rgGetCredentialData[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string strPwd = rgGetCredentialData[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......</fieldset><br />
<fieldset><legend>写法2</legend>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Verdana">IntPtr pUserName = IntPtr.Zero;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr pPassword = IntPtr.Zero;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISsoProvider isso = SsoProviderFactory.GetSsoProvider();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SsoCredentials myCreds = isso.GetCredentials("DEMOSSO");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pUserName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.UserName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pPassword = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.Password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string uName = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pUserName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string uPwd = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPassword);</font></fieldset><br />
END:&nbsp;<br />
&nbsp;<font face="Verdana">&nbsp; catch (SingleSignonException ssoe)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (SSOReturnCodes.SSO_E_CREDS_NOT_FOUND == ssoe.LastErrorCode)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context.Response.Redirect(strSSOLogonFormUrl);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Redirect(strSSOLogonFormUrl);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</font><br />
&nbsp;<strong>Step4:读Exchange Server 2007 的新邮件<br />
&nbsp; </strong>
<fieldset><legend>引用WebServices先：</legend><font face="Verdana">ICredentials creds = new NetworkCredential(userNaem, rgGetCredentialData[1], "demo");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ICredentials creds = CredentialCache.DefaultNetworkCredentials;//("mailadmin", "Pass!word", "demo")</font>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exchangeServer.Credentials = creds;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exchangeServer.Url = @"https://mlc.demo.cn/ews/exchange.asmx";</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; folderIDArray[0] = new DistinguishedFolderIdType();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; folderIDArray[0].Id = DistinguishedFolderIdNameType.inbox;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PathToUnindexedFieldType ptuftDisplayName = new PathToUnindexedFieldType();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PathToExtendedFieldType pteftComment = new PathToExtendedFieldType();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pteftComment.PropertyTag = "0x3004"; // PR_COMMENT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pteftComment.PropertyType = MapiPropertyTypeType.String;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetFolderType myfoldertype = new GetFolderType();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myfoldertype.FolderIds = folderIDArray;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myfoldertype.FolderShape = new FolderResponseShapeType();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myfoldertype.FolderShape.AdditionalProperties = new BasePathToElementType[2];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nb