<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_文轩阁</title><subtitle type="text">生活是需要经营的</subtitle><id>http://feed.cnblogs.com/blog/u/28811/rss</id><updated>2011-11-11T03:38:55Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/28811/rss"/><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137432.html</id><title type="text">如何向列表中添加数据值（开发篇补充REST）</title><summary type="text">SharePoint 2010中增加了对ADO.NET Service的支持。我们可以通过REST的方式来添加，查询或者更新数据。这篇文章，我将尝试使用REST的方式来查询，并且添加一条记录。 准备工作：开始使用代码之前，记得要添加对 http://servername/_vti_bin/listdata.svc 服务的引用。我是引用之后，将其命名为“ListDataSR”， 一下是详细代码。（我是在控制台程序中运行这段代码的） ListDataSR.SPFLearnDataContext ctx = new ListDataSR.SPFLearnDataContext( new Uri(&amp;q</summary><published>2011-08-13T09:36:00Z</published><updated>2011-08-13T09:36:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137432.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137432.html"/><content type="html">&lt;p&gt;SharePoint 2010中增加了对ADO.NET Service的支持。我们可以通过REST的方式来添加，查询或者更新数据。这篇文章，我将尝试使用REST的方式来查询，并且添加一条记录。&lt;/p&gt;  &lt;p&gt;准备工作：开始使用代码之前，记得要添加对 &lt;a href="http://servername/_vti_bin/listdata.svc"&gt;http://servername/_vti_bin/listdata.svc&lt;/a&gt; 服务的引用。我是引用之后，将其命名为&amp;#8220;ListDataSR&amp;#8221;， 一下是详细代码。（我是在控制台程序中运行这段代码的）&lt;/p&gt;  &lt;pre &gt;ListDataSR.SPFLearnDataContext ctx = &#xD;
            &lt;span &gt;new&lt;/span&gt; ListDataSR.SPFLearnDataContext( &lt;span &gt;new&lt;/span&gt; Uri(&lt;span &gt;&amp;quot;http://servername/_vti_bin/listdata.svc&amp;quot;&lt;/span&gt;));&#xD;
&#xD;
&lt;span &gt;public&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; AddNewItem()&#xD;
{&#xD;
    ctx.Credentials = CredentialCache.DefaultCredentials;&#xD;
    ListDataSR.JobsItem newJob = &lt;span &gt;new&lt;/span&gt; JobsItem();&#xD;
    newJob.Title = &lt;span &gt;&amp;quot;SharePoint QA&amp;quot;&lt;/span&gt;;&#xD;
    newJob.JobDescription = &lt;span &gt;&amp;quot;QA in SharePoint project&amp;quot;&lt;/span&gt;;&#xD;
    newJob.CityValue = &lt;span &gt;&amp;quot;Shanghai&amp;quot;&lt;/span&gt;;&#xD;
    newJob.DueDate = DateTime.Now.AddDays(12);&#xD;
    newJob.JobRequirementId = 2;&#xD;
    newJob.ManagerId = 1;&#xD;
&#xD;
    ctx.AddToJobs(newJob);&#xD;
    ctx.SaveChanges();&#xD;
}&#xD;
&#xD;
&lt;span &gt;public&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; GetItems()&#xD;
{&#xD;
    ctx.Credentials = CredentialCache.DefaultCredentials;&#xD;
    var jobsInShanghai = from q &lt;span &gt;in&lt;/span&gt; ctx.Jobs&#xD;
                         &lt;span &gt;where&lt;/span&gt; q.CityValue ==&lt;span &gt;&amp;quot;Shanghai&amp;quot;&lt;/span&gt;&#xD;
                         select q;&#xD;
    &lt;span &gt;foreach&lt;/span&gt; (var item &lt;span &gt;in&lt;/span&gt; jobsInShanghai)&#xD;
    {&#xD;
        Console.WriteLine(&#xD;
            &lt;span &gt;&amp;quot;Job Title: {0}; Due Date{1}; City:{2}&amp;quot;&lt;/span&gt;,&#xD;
            item.Title,&#xD;
            item.DueDate,&#xD;
            item.CityValue);&#xD;
    }                       &#xD;
}&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;本系列三篇文章对自己是一个积累，总结。希望对有需要的朋友能有所帮助。&#xD;
  &lt;/p&gt; &lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2137432.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137432.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137392.html</id><title type="text">如何向列表中添加数据值（开发篇）</title><summary type="text">上一篇中，我列举了几种管理员或者一般用户添加列表项的方式。这一篇我将从开发者的角度来完成这个操作。 作为开发人员添加列表项的方式主要有如下几种：（服务器端）对象模型，客户端对象模型以及Web Service. 1. （服务器端）对象模型。这种是开发中最常见的，可以是一个控制台程序，也可以写到你的Web Part或者Event Handler里面 1: static void AddNewItem() 2: { 3: using (SPSite site = new SPSite(&amp;quot;http://server&amp;quot;)) 4: { 5: using (SPWeb web = sit</summary><published>2011-08-13T08:50:00Z</published><updated>2011-08-13T08:50:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137392.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137392.html"/><content type="html">&lt;p&gt;上一篇中，我列举了几种管理员或者一般用户添加列表项的方式。这一篇我将从开发者的角度来完成这个操作。&lt;/p&gt;  &lt;p&gt;作为开发人员添加列表项的方式主要有如下几种：（服务器端）对象模型，客户端对象模型以及Web Service.&lt;/p&gt;  &lt;p&gt;1. （服务器端）对象模型。这种是开发中最常见的，可以是一个控制台程序，也可以写到你的Web Part或者Event Handler里面&lt;/p&gt;  &lt;div &gt;   &lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;static&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; AddNewItem()&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;            &lt;span &gt;using&lt;/span&gt; (SPSite site = &lt;span &gt;new&lt;/span&gt; SPSite(&lt;span &gt;&amp;quot;http://server&amp;quot;&lt;/span&gt;))&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;            {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;                &lt;span &gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb())&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;                {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;                    SPList list = web.GetList(&lt;span &gt;&amp;quot;Lists\\Jobs&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;                    SPListItem item = list.AddItem();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  10:  &lt;/span&gt;                    item[&lt;span &gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;SharePoint Developer&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  11:  &lt;/span&gt;                    item[&lt;span &gt;&amp;quot;JobDescription&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;Good at &amp;lt;h1&amp;gt;communication&amp;lt;/h1&amp;gt;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  13:  &lt;/span&gt;                    item[&lt;span &gt;&amp;quot;City&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;Shenzhen&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  14:  &lt;/span&gt;                    &lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  15:  &lt;/span&gt;                    item[&lt;span &gt;&amp;quot;DueDate&amp;quot;&lt;/span&gt;]=DateTime.Now.AddMonths(1);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  16:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  17:  &lt;/span&gt;                    &lt;span &gt;//Lookup field&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  18:  &lt;/span&gt;                    SPFieldLookupValue JobRequirement = &lt;span &gt;new&lt;/span&gt; SPFieldLookupValue(1, &lt;span &gt;&amp;quot;SharePoint&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  19:  &lt;/span&gt;                    item[&lt;span &gt;&amp;quot;JobRequirement&amp;quot;&lt;/span&gt;] = JobRequirement;                   &lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  20:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  21:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  22:  &lt;/span&gt;                    &lt;span &gt;//People and Group Field&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  23:  &lt;/span&gt;                    SPFieldUserValue Manager = &lt;span &gt;new&lt;/span&gt; SPFieldUserValue(web, web.EnsureUser(&lt;span &gt;&amp;quot;domain\\alias&amp;quot;&lt;/span&gt;).ID, &lt;span &gt;&amp;quot;User Name&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  24:  &lt;/span&gt;                    item[&lt;span &gt;&amp;quot;Manager&amp;quot;&lt;/span&gt;] = Manager;                    &lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  25:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  26:  &lt;/span&gt;                    item.Update();    &lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  27:  &lt;/span&gt;                }&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  28:  &lt;/span&gt;            }&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  29:  &lt;/span&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;2. Web Service篇.这里需要注意的是时间类型的格式&amp;#8220;yyyy-MM-ddThh:mm:ssZ&amp;#8221;。&lt;/p&gt;&#xD;
&#xD;
&lt;div &gt;&#xD;
  &lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; AddNewItem()&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;   WSLists.Lists listsWS = &lt;span &gt;new&lt;/span&gt; Lists();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;   listsWS.Credentials = CredentialCache.DefaultCredentials;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;   listsWS.Url = &lt;span &gt;&amp;quot;http://servername/_vti_bin/lists.asmx&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;    XmlDocument doc = &lt;span &gt;new&lt;/span&gt; XmlDocument();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;    XmlElement batch = doc.CreateElement(&lt;span &gt;&amp;quot;Batch&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   9:  &lt;/span&gt;    batch.SetAttribute(&lt;span &gt;&amp;quot;OnError&amp;quot;&lt;/span&gt;, &lt;span &gt;&amp;quot;Continue&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  10:  &lt;/span&gt;    batch.SetAttribute(&lt;span &gt;&amp;quot;ListVersion&amp;quot;&lt;/span&gt;, &lt;span &gt;&amp;quot;1&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  11:  &lt;/span&gt;    batch.SetAttribute(&lt;span &gt;&amp;quot;ViewName&amp;quot;&lt;/span&gt;, &lt;span &gt;&amp;quot;{707B3736-82E4-4272-9E00-3A5163AD6ACD}&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  12:  &lt;/span&gt;    &lt;span &gt;string&lt;/span&gt; title = &lt;span &gt;&amp;quot;SharePoint Project Manager&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  13:  &lt;/span&gt;    &lt;span &gt;string&lt;/span&gt; JobDescription = &lt;span &gt;&amp;quot;PM For SharePoint&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  14:  &lt;/span&gt;    &lt;span &gt;string&lt;/span&gt; City = &lt;span &gt;&amp;quot;Beijing&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  15:  &lt;/span&gt;    &lt;span &gt;string&lt;/span&gt; DueDate = DateTime.Now.AddDays(15).ToString(&lt;span &gt;&amp;quot;yyyy-MM-ddThh:mm:ssZ&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  16:  &lt;/span&gt;    &lt;span &gt;string&lt;/span&gt; JobRequirement = &lt;span &gt;&amp;quot;1;#SharePoint&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  17:  &lt;/span&gt;    &lt;span &gt;string&lt;/span&gt; Manager = &lt;span &gt;&amp;quot;1;#Name&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  18:  &lt;/span&gt;    batch.InnerXml = &lt;span &gt;string&lt;/span&gt;.Format(&lt;span &gt;&amp;quot;&amp;lt;Method ID='1' Cmd='New'&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  19:  &lt;/span&gt;                + &lt;span &gt;&amp;quot;&amp;lt;Field Name='ID'&amp;gt;New&amp;lt;/Field&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  20:  &lt;/span&gt;                + &lt;span &gt;&amp;quot;&amp;lt;Field Name='Title'&amp;gt;{0}&amp;lt;/Field&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  21:  &lt;/span&gt;                + &lt;span &gt;&amp;quot;&amp;lt;Field Name='JobDescription'&amp;gt;{1}&amp;lt;/Field&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  22:  &lt;/span&gt;                + &lt;span &gt;&amp;quot;&amp;lt;Field Name='City'&amp;gt;{2}&amp;lt;/Field&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  23:  &lt;/span&gt;                + &lt;span &gt;&amp;quot;&amp;lt;Field Name='DueDate'&amp;gt;{3}&amp;lt;/Field&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  24:  &lt;/span&gt;                + &lt;span &gt;&amp;quot;&amp;lt;Field Name='JobRequirement'&amp;gt;{4}&amp;lt;/Field&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  25:  &lt;/span&gt;                + &lt;span &gt;&amp;quot;&amp;lt;Field Name='Manager'&amp;gt;{5}&amp;lt;/Field&amp;gt;&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  26:  &lt;/span&gt;                +&lt;span &gt;&amp;quot;&amp;lt;/Method&amp;gt;&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  27:  &lt;/span&gt;                title,JobDescription,City,DueDate,JobRequirement,Manager);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  28:  &lt;/span&gt;    XmlNode nodeResult=listsWS.UpdateListItems(&lt;span &gt;&amp;quot;da4000b2-d13e-4420-b7bf-176ab85d91ee&amp;quot;&lt;/span&gt;, batch);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  29:  &lt;/span&gt;    &lt;span &gt;return&lt;/span&gt; nodeResult.OuterXml;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  30:  &lt;/span&gt; }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3. 客户端对象模型。SharePoint提供了三种对象模型：client .Net OM, Silverlight OM 以及ECMAScript OM. 这里仅仅是一个Client .NET OM实例的一个演示。&lt;/p&gt;&#xD;
&#xD;
&lt;div &gt;&#xD;
  &lt;pre&gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; AddNewItem()&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   3:  &lt;/span&gt;    ClientContext ctx = &lt;span &gt;new&lt;/span&gt; ClientContext(&lt;span &gt;&lt;a href="http://servername"&gt;http://servername&lt;/a&gt;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;    var jobsList=ctx.Web.Lists.GetByTitle(&lt;span &gt;&amp;quot;jobs&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;    ListItemCreationInformation itemCreateInfo = &lt;span &gt;new&lt;/span&gt; ListItemCreationInformation();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   7:  &lt;/span&gt;    ListItem newItem=jobsList.AddItem(itemCreateInfo);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;    newItem[&lt;span &gt;&amp;quot;Title&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;Web architecture&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;   9:  &lt;/span&gt;    newItem[&lt;span &gt;&amp;quot;JobDescription&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;&amp;lt;font color='red'&amp;gt;architecture&amp;lt;/font&amp;gt;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  10:  &lt;/span&gt;    newItem[&lt;span &gt;&amp;quot;City&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;Shanghai&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  11:  &lt;/span&gt;    newItem[&lt;span &gt;&amp;quot;DueDate&amp;quot;&lt;/span&gt;] = DateTime.Now.AddDays(5);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  12:  &lt;/span&gt;    newItem[&lt;span &gt;&amp;quot;JobRequirement&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;3;#&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  13:  &lt;/span&gt;    newItem[&lt;span &gt;&amp;quot;Manager&amp;quot;&lt;/span&gt;] = &lt;span &gt;&amp;quot;1;#&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  14:  &lt;/span&gt;    newItem.Update();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  15:  &lt;/span&gt;    ctx.ExecuteQuery();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;  16:  &lt;/span&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt; &lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2137392.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137392.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137311.html</id><title type="text">如何向列表中添加数据值（管理员篇）</title><summary type="text">如何向列表中插入数据？这是一个很简单的问题。那么我的这两篇文章主要是对各种方法的总结，如果有朋友有不同的意见，请指正。 首先，我们来看一下列表(自定义列表，列表名称：Jobs). 列名 类型 注释 Title 单行文本  JobDescription 多行文本  City 选择项  DueDate 日期  JobRequirement Lookup类型 指向另一个列表:Skills Manager...</summary><published>2011-08-13T07:29:00Z</published><updated>2011-08-13T07:29:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137311.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137311.html"/><content type="html">&lt;p&gt;如何向列表中插入数据？这是一个很简单的问题。那么我的这两篇文章主要是对各种方法的总结，如果有朋友有不同的意见，请指正。&lt;/p&gt;  &lt;p&gt;首先，我们来看一下列表(自定义列表，列表名称：Jobs).&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="401"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="133"&gt;列名&lt;/td&gt;        &lt;td valign="top" width="133"&gt;类型&lt;/td&gt;        &lt;td valign="top" width="133"&gt;注释&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Title&lt;/td&gt;        &lt;td valign="top" width="133"&gt;单行文本&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;JobDescription&lt;/td&gt;        &lt;td valign="top" width="133"&gt;多行文本&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;City&lt;/td&gt;        &lt;td valign="top" width="133"&gt;选择项&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;DueDate&lt;/td&gt;        &lt;td valign="top" width="133"&gt;日期&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;JobRequirement&lt;/td&gt;        &lt;td valign="top" width="133"&gt;Lookup类型&lt;/td&gt;        &lt;td valign="top" width="133"&gt;指向另一个列表:Skills&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Manager&lt;/td&gt;        &lt;td valign="top" width="133"&gt;人员&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;管理员添加数据的方法我总结为三种。通过界面添加；使用Workspace 2010添加； 使用Powershell命令添加。以下是依次的详细内容或者截图：&lt;/p&gt;  &lt;p&gt;1. 界面添加：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201108/201108131528221090.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="blog-SPDataOperation-02" border="0" alt="blog-SPDataOperation-02" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201108/20110813152826138.jpg" width="408" height="302" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. 使用workspace 2010添加。（前提：你需要安装SharePoint Workspace 2010）和界面操作的效果类似。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201108/201108131528309742.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="blog-SPDataOperation-03" border="0" alt="blog-SPDataOperation-03" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201108/201108131528365767.jpg" width="404" height="228" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3.使用powershell调用.Net assembly的方式来添加。（对于其中的Lookup 列，我是直接指定Lookup ID）&lt;/p&gt;  &lt;pre &gt;[System.Reflection.Assembly]::Load(&lt;span &gt;&amp;quot;Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot;&lt;/span&gt;)&#xD;
$site=[Microsoft.SharePoint.SPSite](&lt;span &gt;&amp;quot;http://servername&amp;quot;&lt;/span&gt;)&#xD;
$web=$site.OpenWeb()&#xD;
$list=$web.Lists[&lt;span &gt;&amp;quot;Jobs&amp;quot;&lt;/span&gt;]&#xD;
$newitem=$list.items.Add()&#xD;
$newitem[&lt;span &gt;&amp;quot;Title&amp;quot;&lt;/span&gt;]=&lt;span &gt;&amp;quot;UI Developer&amp;quot;&lt;/span&gt;&#xD;
$newitem[&lt;span &gt;&amp;quot;JobDescription&amp;quot;&lt;/span&gt;]=&lt;span &gt;&amp;quot;This is a &amp;lt;b&amp;gt;FTE&amp;lt;/b&amp;gt; Job&amp;quot;&lt;/span&gt;&#xD;
$newitem[&lt;span &gt;&amp;quot;City&amp;quot;&lt;/span&gt;]= &lt;span &gt;&amp;quot;Shanghai&amp;quot;&lt;/span&gt;&#xD;
$newitem[&lt;span &gt;&amp;quot;DueDate&amp;quot;&lt;/span&gt;]= [DateTime]::Now.AddDays(10)&#xD;
$newitem[&lt;span &gt;&amp;quot;JobRequirement&amp;quot;&lt;/span&gt;]= 3&#xD;
$newitem[&lt;span &gt;&amp;quot;Manager&amp;quot;&lt;/span&gt;]= $web.EnsureUser(&lt;span &gt;&amp;quot;domain\alias&amp;quot;&lt;/span&gt;).ID&#xD;
$newitem.update()&#xD;
$web.Dispose()&#xD;
$site.Dispose() &lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;下一篇中，我将尝试调用对象模型的方式来向列表添加元素。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2137311.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/08/13/2137311.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/06/23/2087923.html</id><title type="text">在SharePoint 2010中动态加载Visio Web Part</title><summary type="text">今天跟同事讨论一个关于Visio Web Part的问题。需求大抵是这样的：在SharePoint文档库中有一系列已经发布的Visio图形，我想在页面中动态的根据一些逻辑来显示出来。我希望是通过JavaScript的代码实现。 首先第一个问题，在页面中显示Visio图形。这个比较简单，SharePoint 2010中提供了Visio Web Access这个web Part控件。你可以通过指定Web Part的属性，来轻松显示Visio图形。 第二个问题，动态显示，这个问题稍微有些难度。因为Visio Web Access中的Visio图形的地址已经提前指定好了。怎么办呢？幸运的是，在Shar</summary><published>2011-06-23T03:19:00Z</published><updated>2011-06-23T03:19:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/06/23/2087923.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/06/23/2087923.html"/><content type="html">&lt;p&gt;今天跟同事讨论一个关于Visio Web Part的问题。需求大抵是这样的：在SharePoint文档库中有一系列已经发布的Visio图形，我想在页面中动态的根据一些逻辑来显示出来。我希望是通过JavaScript的代码实现。&lt;/p&gt;  &lt;p&gt;首先第一个问题，在页面中显示Visio图形。这个比较简单，SharePoint 2010中提供了Visio Web Access这个web Part控件。你可以通过指定Web Part的属性，来轻松显示Visio图形。&lt;/p&gt;  &lt;p&gt;第二个问题，动态显示，这个问题稍微有些难度。因为Visio Web Access中的Visio图形的地址已经提前指定好了。怎么办呢？幸运的是，在SharePoint 2010中，增加了Visio Services Class Library，这是一些列封装好了的JavaScipt。其中提供了针对Visio的类，如下图：(具体参考：&lt;a title="http://msdn.microsoft.com/en-us/library/ee557781.aspx" href="http://msdn.microsoft.com/en-us/library/ee557781.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee557781.aspx&lt;/a&gt;)&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="978"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="149"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="827"&gt;         &lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="151"&gt;         &lt;p&gt;Vwa.VwaControl Class&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="825"&gt;         &lt;p&gt;Represents an instance of the Visio Web Access Web Part.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="153"&gt;         &lt;p&gt;Vwa.Page Class&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="823"&gt;         &lt;p&gt;Represents the page that is currently displayed in the rendering area of the Visio Web Access Web Part.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="155"&gt;         &lt;p&gt;Vwa.ShapeCollection Class&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="821"&gt;         &lt;p&gt;Represents the collection of Shape objects on the active page displayed in the rendering area of the Visio Web Access Web Part.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="157"&gt;         &lt;p&gt;Vwa.Shape Class&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="819"&gt;         &lt;p&gt;Represents a single Shape object on the active page displayed in the rendering area of the Visio Web Access Web Part.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;我们这里使用的是Vwa.VwaControl.openDiagram() 方法来实现动态加载Visio图形的需求。&lt;/p&gt;  &lt;p&gt;逻辑：逻辑并不复杂。就是在visio 图形加载完毕之后重新制定一个新的Visio图形的URL；&lt;/p&gt;  &lt;p&gt;技术实现：使用Visio Web Access + 内容编辑web部件。&lt;/p&gt;  &lt;p&gt;具体操作：&lt;/p&gt;  &lt;p&gt;1. 通过IE Developer来检查一下当前页面的Visio图形所在的Web Part的ID。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201106/201106231119217803.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201106/201106231119279543.png" width="635" height="176" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2.在本地的文本文件中写处理逻辑的代码，然后上传到文档库。代码如下：&lt;/p&gt;  &lt;pre &gt;&amp;lt;script type=&lt;span &gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&#xD;
Sys.Application.add_load(onApplicationLoad);&#xD;
&#xD;
var webPartElementID = &lt;span &gt;&amp;quot;WebPartWPQ2&amp;quot;&lt;/span&gt;;&#xD;
var vwaControl;&#xD;
function onApplicationLoad() {&#xD;
        &lt;span &gt;try&lt;/span&gt;{            &#xD;
                vwaControl= &lt;span &gt;new&lt;/span&gt; Vwa.VwaControl(webPartElementID)                    &#xD;
                vwaControl.addHandler(&lt;span &gt;&amp;quot;diagramcomplete&amp;quot;&lt;/span&gt;, onDiagramComplete);                  &#xD;
        }&#xD;
        &lt;span &gt;catch&lt;/span&gt;(err){&#xD;
        }&#xD;
}&#xD;
&#xD;
function onDiagramComplete() {&#xD;
        &lt;span &gt;try&lt;/span&gt;{            &#xD;
                vwaControl.openDiagram(&lt;span &gt;&amp;quot;http://servername:port/DocLibA/Drawing2.vdw&amp;quot;&lt;/span&gt;);&#xD;
                vwaControl.removeHandler(&lt;span &gt;&amp;quot;diagramcomplete&amp;quot;&lt;/span&gt;,onDiagramComplete);    &#xD;
        }&#xD;
        &lt;span &gt;catch&lt;/span&gt;(err){&#xD;
        }&#xD;
}&#xD;
&#xD;
&amp;lt;/script&amp;gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;3.页面中添加内容编辑Web部件，并且指定&amp;#8220;内容链接(Content Link)&amp;#8221;属性到刚刚上传到文档库的js文件。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;保存测试效果。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;当然我这里仅仅完成需求的一部分。剩余的部分，就是如何去处理并且形成&amp;#8220;vwaControl.openDiagram（）&amp;#8221;的参数。&lt;/p&gt; &lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2087923.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/06/23/2087923.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/06/09/2076829.html</id><title type="text">使用编程的方式来启动SharePoint的工作流</title><summary type="text">工作流是SharePoint很重要的一部分。我写的这篇文章是通过编程的方式启动工作流。一共分两个部分：启动无参数和有参数的工作流。 参考示例：http://www.sharepointkings.com/2008/09/how-to-pass-parameters-to-workflow.html 首先，通过SharePoint Designer 2010针对一个文档库设计两个工作流： Name ...</summary><published>2011-06-09T13:00:00Z</published><updated>2011-06-09T13:00:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/06/09/2076829.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/06/09/2076829.html"/><content type="html">&lt;p&gt;工作流是SharePoint很重要的一部分。我写的这篇文章是通过编程的方式启动工作流。一共分两个部分：启动无参数和有参数的工作流。&lt;/p&gt;  &lt;p&gt;参考示例：&lt;a title="http://www.sharepointkings.com/2008/09/how-to-pass-parameters-to-workflow.html" href="http://www.sharepointkings.com/2008/09/how-to-pass-parameters-to-workflow.html"&gt;http://www.sharepointkings.com/2008/09/how-to-pass-parameters-to-workflow.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;首先，通过SharePoint Designer 2010针对一个文档库设计两个工作流：&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="784"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Name&lt;/td&gt;        &lt;td valign="top" width="582"&gt;Description&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="201"&gt;MyWorkflow&lt;/td&gt;        &lt;td valign="top" width="581"&gt;没有参数&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="202"&gt;MyInitialDataWF&lt;/td&gt;        &lt;td valign="top" width="580"&gt;三个参数：YourName(string); YourAge(Int); YourDate(DateTime)&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;首先看一下无参数工作流。&lt;/p&gt;  &lt;p&gt;这个比较简单，直接使用&lt;strong&gt;SPWorkflowManager.StartWorkflow&lt;/strong&gt; Method（&lt;a title="http://msdn.microsoft.com/en-us/library/ms467505.aspx" href="http://msdn.microsoft.com/en-us/library/ms467505.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms467505.aspx&lt;/a&gt;）来启动工作流，代码如下：&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; StartWorkflow(SPWeb web)&#xD;
{&#xD;
    SPList testDocLib = web.GetList(&lt;span &gt;&amp;quot;TestDocLib&amp;quot;&lt;/span&gt;);&#xD;
    SPListItem wfItem = testDocLib.GetItemById(2);&#xD;
&#xD;
    SPWorkflowAssociationCollection wfAssociationColls = testDocLib.WorkflowAssociations;&#xD;
    CultureInfo ci=CultureInfo.CurrentCulture;&#xD;
&#xD;
    SPWorkflowAssociation spWFAss =&#xD;
        wfAssociationColls.GetAssociationByName(&lt;span &gt;&amp;quot;MyWorkflow&amp;quot;&lt;/span&gt;, ci);&#xD;
    Console.WriteLine(spWFAss.Name);&#xD;
    web.Site.WorkflowManager.StartWorkflow(wfItem, spWFAss, spWFAss.AssociationData, &lt;span &gt;true&lt;/span&gt;);         &#xD;
&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;接下来看一下启动带参数的工作流。这里唯一一个注意的地方就是这个参数是需要我们进行序列化的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;我们需要定义一个参数类：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;[Serializable()]&#xD;
    &lt;span &gt;public&lt;/span&gt; &lt;span &gt;class&lt;/span&gt; WFParameters&#xD;
    {&#xD;
        &lt;span &gt;public&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; YourName { get;set;}&#xD;
        &lt;span &gt;public&lt;/span&gt; &lt;span &gt;int&lt;/span&gt; YourAge{get;set;}&#xD;
        &lt;span &gt;public&lt;/span&gt; DateTime YourDate { get; set; }&#xD;
&#xD;
        &lt;span &gt;public&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; GetInitXmlString(WFParameters objParameters)&#xD;
        {&#xD;
            WFParameters wfData = &lt;span &gt;new&lt;/span&gt; WFParameters();&#xD;
            wfData.YourName = objParameters.YourName;&#xD;
            wfData.YourAge = objParameters.YourAge;&#xD;
            wfData.YourDate = objParameters.YourDate;&#xD;
&#xD;
            &lt;span &gt;using&lt;/span&gt; (MemoryStream stream = &lt;span &gt;new&lt;/span&gt; MemoryStream())&#xD;
            {&#xD;
                XmlSerializer serializer = &lt;span &gt;new&lt;/span&gt; XmlSerializer(&#xD;
                    &lt;span &gt;typeof&lt;/span&gt;(WFParameters));&#xD;
                serializer.Serialize(stream, wfData);&#xD;
                stream.Position = 0;&#xD;
                &lt;span &gt;byte&lt;/span&gt;[] bytes = &lt;span &gt;new&lt;/span&gt; &lt;span &gt;byte&lt;/span&gt; [stream.Length];&#xD;
                stream.Read(bytes, 0, bytes.Length);&#xD;
                &lt;span &gt;return&lt;/span&gt; Encoding.UTF8.GetString(bytes);&#xD;
            }&#xD;
        }&#xD;
&#xD;
    }&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;然后我们来传递这个参数给&lt;strong&gt;SPWorkflowAssociation.AssociationData&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;代码如下：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; StartWorkflow(SPWeb web)&#xD;
{&#xD;
    SPList testDocLib = web.GetList(&lt;span &gt;&amp;quot;TestDocLib&amp;quot;&lt;/span&gt;);&#xD;
    SPListItem wfItem = testDocLib.GetItemById(2);&#xD;
&#xD;
    SPWorkflowAssociationCollection wfAssociationColls = testDocLib.WorkflowAssociations;&#xD;
    CultureInfo ci=CultureInfo.CurrentCulture;&#xD;
&#xD;
    SPWorkflowAssociation spWFInitialAss =&#xD;
       wfAssociationColls.GetAssociationByName(&lt;span &gt;&amp;quot;MyInitialDataWF&amp;quot;&lt;/span&gt;, ci);&#xD;
&#xD;
    WFParameters objParameters = &lt;span &gt;new&lt;/span&gt; WFParameters();&#xD;
    objParameters.YourName = &lt;span &gt;&amp;quot;Jim&amp;quot;&lt;/span&gt;;&#xD;
    objParameters.YourAge = 20;&#xD;
    objParameters.YourDate = DateTime.Parse(&lt;span &gt;&amp;quot;6/1/2009&amp;quot;&lt;/span&gt;);&#xD;
    &lt;span &gt;string&lt;/span&gt; serializedParameters = objParameters.GetInitXmlString(objParameters);&#xD;
&#xD;
    Console.WriteLine(serializedParameters);&#xD;
    spWFInitialAss.AssociationData=serializedParameters;&#xD;
    web.Site.WorkflowManager.StartWorkflow(&#xD;
        wfItem, spWFInitialAss, spWFInitialAss.AssociationData, &lt;span &gt;true&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;我们如果跟踪&lt;strong&gt;SPWorkflowAssociation.AssociationData&lt;/strong&gt;这个参数，会发现是一个XML格式的字符串。如下：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&amp;lt;?xml version=&lt;span &gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;?&amp;gt;&#xD;
&amp;lt;WFParameters xmlns:xsi=&lt;span &gt;&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/span&gt; xmlns:xsd=&lt;span &gt;&amp;quot;h&#xD;
ttp://www.w3.org/2001/XMLSchema&amp;quot;&lt;/span&gt;&amp;gt;&#xD;
  &amp;lt;YourName&amp;gt;Jim&amp;lt;/YourName&amp;gt;&#xD;
  &amp;lt;YourAge&amp;gt;20&amp;lt;/YourAge&amp;gt;&#xD;
  &amp;lt;YourDate&amp;gt;2009-06-01T00:00:00&amp;lt;/YourDate&amp;gt;&#xD;
&amp;lt;/WFParameters&amp;gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;代码比较简单，没有加特别的说明。&#xD;
&#xD;
&lt;p&gt;拓展：在工作中，有时候我们会需要根据某一列的值发生变化时来启动工作流，这个时候的解决方案是通过Event Handler的方式来做逻辑的判断，然后启动工作流。这种时候，我们只需要在ItemUpdated等事件来添加以上代码。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2076829.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/06/09/2076829.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/05/17/2048496.html</id><title type="text">InfoPath 2010调用REST的一个小应用</title><summary type="text">在做InfoPath 2007相关的项目中，我们经常使用InfoPath来调用SharePoint 2007的Web Service. 那么如今SharePoint 2010支持了REST,我们可以尝试调用REST。 需求：自定义一个SharePoint 2010 列表的表单。要求在用户输入“Title”时，检查一下当前列表中是否有相同Title的Item存在，如果存在的话，禁止表单的提交。 思路：使用InfoPath 2010调用REST实现。首先通过REST去列表中查询是否有title等于当前表单填写的Item,如果有的话，返回结果，并且禁止提交。如果查询不到，则允许提交。 第一步，自定义</summary><published>2011-05-17T01:45:00Z</published><updated>2011-05-17T01:45:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/17/2048496.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/17/2048496.html"/><content type="html">&#xD;
&lt;p&gt;在做InfoPath 2007相关的项目中，我们经常使用InfoPath来调用SharePoint 2007的Web Service. 那么如今SharePoint 2010支持了REST,我们可以尝试调用REST。&lt;/p&gt;  &lt;p&gt;需求：自定义一个SharePoint 2010 列表的表单。要求在用户输入&amp;#8220;Title&amp;#8221;时，检查一下当前列表中是否有相同Title的Item存在，如果存在的话，禁止表单的提交。&lt;/p&gt;  &lt;p&gt;思路：使用InfoPath 2010调用REST实现。首先通过REST去列表中查询是否有title等于当前表单填写的Item,如果有的话，返回结果，并且禁止提交。如果查询不到，则允许提交。&lt;/p&gt;  &lt;p&gt;第一步，自定义表单。点击列表项目的&amp;#8221;自定义表单&amp;#8221;，然后对表单做一些简单的处理，如下图。（列表的列有：Title, MyDate以及Query Result，这个是记录title的REST查询的返回结果的）&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105162043309471.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105162043533124.png" width="437" height="113" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105162044392382.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/20110516204653376.png" width="433" height="110" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;第二步，添加数据源. 我们需要添加一个&amp;#8220;接收数据(Receive Data)&amp;#8221;的数据源。我现在需要查询的是列表TestList，所用REST的URL如下：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#8220;&lt;a title="http://v-wef-sp:8080/_vti_bin/listdata.svc/TestList" href="http://servername/_vti_bin/listdata.svc/TestList"&gt;http://servername/_vti_bin/listdata.svc/TestList&lt;/a&gt;&amp;#8221;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170938122592.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170938288400.png" width="635" height="238" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;第三步，对InfoPath的Rule添加逻辑。&lt;/p&gt;  &lt;p&gt;选中表单中的Title文本框，添加一个&amp;#8220;当字段的值发生变化时(&lt;strong&gt;This Field Changed&lt;/strong&gt;)&amp;#8221;使用&amp;#8220;查询数据(&lt;strong&gt;Query for Data&lt;/strong&gt;)&amp;#8221;.Rules的逻辑和调用Web Service（&lt;a title="http://www.cnblogs.com/fanwenxuan/archive/2011/03/14/1984159.html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/03/14/1984159.html"&gt;http://www.cnblogs.com/fanwenxuan/archive/2011/03/14/1984159.html&lt;/a&gt;）时的逻辑基本类似：拼接REST， 执行查询并且返回结果。&lt;/p&gt;  &lt;p&gt;拼接REST：&lt;/p&gt;  &lt;pre &gt;concat(&lt;span &gt;"http://&amp;lt;ServerName&amp;gt;/_vti_bin/listdata.svc/TestList"&lt;/span&gt;, &lt;span &gt;"?$filter=Title eq "&lt;/span&gt;, &lt;span &gt;"'"&lt;/span&gt;, Title, &lt;span &gt;"'"&lt;/span&gt;)&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
&#xD;
&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170939396444.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170940415098.png" width="857" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;执行查询：这里只需要做一个指向于Data Connection的&amp;#8220;Query for data&amp;#8221;的活动即可。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170941114926.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170942213103.png" width="726" height="179" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;返回查询结果：（我这里对返回的结果的几个属性做了拼接，并且把结果的值返回到Query Result这个文本中）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170942588235.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/20110517094333393.png" width="713" height="223" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;第四步，增加验证。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;我的验证逻辑是：如果查询没有返回结果，表示相同Title的Item不存在；如果有返回结果，表示存在相同Title的Item。对&lt;strong&gt;Title&lt;/strong&gt;的文本控件在增加一个验证（validating）的逻辑：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Condition: Qurey Result&lt;em&gt; is not blank&lt;/em&gt;.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;ScreenTip： The item has existed.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;第五步，发布表单。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;接下来，就去验证你的逻辑吧！&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105170943451887.png"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/20110517094426560.png" width="594" height="236" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注意：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1.在使用SharePoint 2010的REST的时候，首先要安装ADO.Net 3.5SP1：&lt;a title="http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=3e102d74-37bf-4c1e-9da6-5175644fe22d" href="http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=3e102d74-37bf-4c1e-9da6-5175644fe22d"&gt;http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=3e102d74-37bf-4c1e-9da6-5175644fe22d&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2.在你拼接REST时，你最好先在URL测试一下，检查是否能用。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;参考：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://blogs.msdn.com/b/infopath/archive/2010/02/11/add-a-dynamic-map-to-a-contact-form-using-rest-web-services.aspx" href="http://blogs.msdn.com/b/infopath/archive/2010/02/11/add-a-dynamic-map-to-a-contact-form-using-rest-web-services.aspx"&gt;http://blogs.msdn.com/b/infopath/archive/2010/02/11/add-a-dynamic-map-to-a-contact-form-using-rest-web-services.aspx&lt;/a&gt;&lt;/p&gt; &#xD;
&lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2048496.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/17/2048496.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/05/04/2036915.html</id><title type="text">SharePoint 2010 WSP包部署过程中究竟发生什么？</title><summary type="text">在SharePoint 2010中，我们可以使用Visual Studio 2010轻松创建WSP包来安装Web Part， Event Handler， Application Page以及其他。非常方便，但是你有没有研究过在在整个过程中SharePoint究竟做了些什么？以下是我根据http://msdn.microsoft.com/library/aa544500(office.14).as...</summary><published>2011-05-04T12:02:00Z</published><updated>2011-05-04T12:02:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/04/2036915.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/04/2036915.html"/><content type="html">&lt;p&gt;在SharePoint 2010中，我们可以使用Visual Studio 2010轻松创建WSP包来安装Web Part， Event Handler， Application Page以及其他。非常方便，但是你有没有研究过在在整个过程中SharePoint究竟做了些什么？以下是我根据&lt;a title="http://msdn.microsoft.com/library/aa544500(office.14).aspx" href="http://msdn.microsoft.com/library/aa544500(office.14).aspx"&gt;http://msdn.microsoft.com/library/aa544500(office.14).aspx&lt;/a&gt;这边官方文章翻译，以及做实验的结果。我是用的是PowerShell命令进行部署。&lt;/p&gt;  &lt;p&gt;在部署项目之前，看一下我的项目结构(这个项目主要是使用Feature的方式来部署Web part)：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105042002158856.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="SPS-SolutionDeploy-01" border="0" alt="SPS-SolutionDeploy-01" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105042002211327.jpg" width="332" height="378" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;使用VS2010打包的结果是生成一个WSP文件“SharePointWebPartProject.wsp”.&lt;/p&gt;  &lt;p&gt;第一步：向SharePoint添加解决方案包：&lt;/p&gt;  &lt;pre &gt;Add-SPSolution -LiteralPath &lt;span &gt;&amp;quot;C:\Deploy\SharePointWebPartProject.wsp&amp;quot;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;部署的结果是WSP包被部署到SharePoint的配置数据库中.（默认是SharePoint_Config）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;SQL 命令：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;select *&#xD;
from dbo.Objects&#xD;
&lt;span &gt;where&lt;/span&gt; name=&lt;span &gt;'SharePointWebPartProject.wsp'&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;如果你的输入没有错误的话，你可以查询到2条相关的记录。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;但是这个时候，数据还是仅仅存在于配置数据库中，我们还需要安装解决方案包。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;第二步：安装解决方案包：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;Install-SPSolution -Identity &lt;span &gt;&amp;quot;SharePointWebPartProject.wsp&amp;quot;&lt;/span&gt; -WebApplication http://www.contoso.com  -GACDeployment&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;那么这一步的结果是什么呢？那就是先解压WSP包，然后拷贝程序集，Ascx等文件到相应的目录下面。当然咱们部署的是Feature,你就可以在“C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES” 文件夹下面找到Feature的相关文件。在“C:\Windows\assembly”中也可以找到程序的dll.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果你是多个Web前端怎么办？是不是还需要挨个部署？当然不需要了，Timer job会帮助你搞定这一切！&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;第三步:激活Feature：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;Enable-SPFeature -Identity &lt;span &gt;&amp;quot;SharePointWebPartProject_SharePointWebPartFeature&amp;quot;&lt;/span&gt; -Url &lt;span &gt;&lt;a href="http://www.contoso.com"&gt;http://www.contoso.com&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;这里值得注意的是 Feature的名字可能和你想象的不一样。是“ProjectName_FeatureName”自动去掉中间的空格。当你使用命令行部署的时候，如果出现错误，不妨去“C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES” 看一下这个feature叫什么名字。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;那么接下来你就可以向页面添加Web Part了！&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;补充：以下是删除解决方案的一些Powershell 命令，仅供参考：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;Disable-SPFeature -Identity &lt;span &gt;&amp;quot;SharePointWebPartProject_SharePointWebPartFeature&amp;quot;&lt;/span&gt; -Url http:&lt;span &gt;//www.contoso.com -Confirm:$false&lt;/span&gt;&#xD;
&#xD;
Uninstall-SPSolution -Identity &lt;span &gt;&amp;quot;SharePointWebPartProject.wsp&amp;quot;&lt;/span&gt; -WebApplication &lt;span &gt;&amp;quot;http://www.contoso.com&amp;quot;&lt;/span&gt; -Confirm:$&lt;span &gt;false&lt;/span&gt;&#xD;
Remove-SPSolution -Identity &lt;span &gt;&amp;quot;SharePointWebPartProject.wsp&amp;quot;&lt;/span&gt; -Confirm:$false&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;参考：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://technet.microsoft.com/en-us/library/cc262995.aspx" href="http://technet.microsoft.com/en-us/library/cc262995.aspx"&gt;http://technet.microsoft.com/en-us/library/cc262995.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://msdn.microsoft.com/library/aa544500(office.14).aspx" href="http://msdn.microsoft.com/library/aa544500(office.14).aspx"&gt;http://msdn.microsoft.com/library/aa544500(office.14).aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2036915.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/04/2036915.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/05/01/2033848.html</id><title type="text">如何查看SharePoint 2010的CU版本</title><summary type="text">到目前为止，SharePoint Server 2010已经发布了多个版本的CU，具体如下(参考：http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=224)： 那么如何查看Server上的CU版本号呢？以下是几种途径，其中一些方法是错误的，或者是有一定的局限性。 1. 在SharePoint的管理中心有一个选项“查看产品和修补程序的安装状态（Check product and patch installation status）”。界面如下： 从以上截图中我们可以看到SharePoint 2010的December 2010 CU已</summary><published>2011-05-01T05:26:00Z</published><updated>2011-05-01T05:26:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/01/2033848.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/01/2033848.html"/><content type="html">&lt;p&gt;到目前为止，SharePoint Server 2010已经发布了多个版本的CU，具体如下(参考：&lt;a title="http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=224" href="http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=224"&gt;http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=224&lt;/a&gt;)：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105011326235654.jpg"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="SharePoint2010Versions" border="0" alt="SharePoint2010Versions" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105011326248064.jpg" width="613" height="639" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;那么如何查看Server上的CU版本号呢？以下是几种途径，其中一些方法是错误的，或者是有一定的局限性。&lt;/p&gt;  &lt;p&gt;1. 在SharePoint的管理中心有一个选项&amp;#8220;查看产品和修补程序的安装状态（Check product and patch installation status）&amp;#8221;。界面如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105011326248554.jpg"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="SharePoint2010Versions-01" border="0" alt="SharePoint2010Versions-01" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105011326255456.jpg" width="824" height="150" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;从以上截图中我们可以看到SharePoint 2010的December 2010 CU已经安装完毕。但事实如此吗？其实不然。当你安装完CU，即使不走一边配置向导也会是这样的结果。而在每一台server上安装完CU之后走一遍配置向导是必需的。&lt;/p&gt;  &lt;p&gt;2.通过PowerShell 读取注册表命令来获取：&lt;/p&gt;  &lt;pre &gt;(get-item &lt;span &gt;"hklm:software\microsoft\shared tools\web server extensions\14.0"&lt;/span&gt;).getvalue(&lt;span &gt;"version"&lt;/span&gt;)&lt;/pre&gt;&#xD;
&#xD;
&lt;pre &gt;这种方法是可行的。在我的实验中，如果你已经安装December CU，当你没走配置向导之前是：14.0.0.4762，走完向导之后是14.0.0.5130；&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;3.通过PowerShell来读取SharePoint对象&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;Add-PSSnapin Microsoft.SharePoint.Powershell&#xD;
$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local   &#xD;
$bv = $farm.BuildVersion.ToString()&#xD;
Write-Host $bv&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;这种方法的效果和第一种方法一下，无论是是否已经走配置向导，那么他的值都是14.0.5130.5002&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4.我们可以借助Fiddler工具来获取SharePoint 2010的CU编号。以下是其中的一个截图：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105011326259850.jpg"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="SharePoint2010Versions-02" border="0" alt="SharePoint2010Versions-02" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201105/201105011326266196.jpg" width="457" height="238" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;他的最大的局限性是只能获取到Web前端或者管理中心所在的Server的CU编号。如果Search 或者其他Service的服务器是单独安装的话，那么是没有办法获得到的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;同时，对于以上的CU编号，我也有些疑问。对于第1，3种方法，我们得出的是&lt;strong&gt;14.0.5130.5002&lt;/strong&gt;，而对于2.4种方法我们得到的却是&lt;strong&gt;14.0.0.5130&lt;/strong&gt;，相同的版本，不一样的值，这难道不奇怪吗？&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;网上查了一下，大约是SharePoint的CU还有2个名字：Version Number (&lt;strong&gt;14.0.0.5130&lt;/strong&gt;) 和 Build Number (&lt;strong&gt;14.0.5130.5002&lt;/strong&gt;)&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果你得到和我不一样的结果，欢迎指正。&lt;/p&gt;   &#xD;
 &lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2033848.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/05/01/2033848.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/04/30/2033394.html</id><title type="text">SharePoint 2010多语言包的安装</title><summary type="text">一直以来针对SharePoint 2010的多语言包的安装有一些疑问，今天就专门对此作了一些实验。 Farm环境：WFE（1）+Service(1)+Search (1)+Central Administration (1) +DB(1); 安装的都是SharePoint Server 2010 这篇文章没有描述安装过程，只是针对自己疑问的一些解答。解答或来源于官方站点，博客，或者是自己的实验所得...</summary><published>2011-04-30T06:08:00Z</published><updated>2011-04-30T06:08:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/04/30/2033394.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/04/30/2033394.html"/><content type="html">&lt;p&gt;一直以来针对SharePoint 2010的多语言包的安装有一些疑问，今天就专门对此作了一些实验。&lt;/p&gt;  &lt;p&gt;Farm环境：WFE（1）+Service(1)+Search (1)+Central Administration (1) +DB(1);&lt;/p&gt;  &lt;p&gt;安装的都是SharePoint Server 2010&lt;/p&gt;  &lt;p&gt;这篇文章没有描述安装过程，只是针对自己疑问的一些解答。解答或来源于官方站点，博客，或者是自己的实验所得。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;1. SharePoint Server 2010 安装多语言包的时候，不必提前安装SharePoint Foundation 2010的语言包。 （SharePoint Server 2007 安装多语言包的时候，需要提前安装WSS 3.0的语言包）；&lt;/p&gt;  &lt;p&gt;2. 话虽然这样说，不过Microsoft的一些专家还是建议提前安装SharePoint foundation 2010的语言包；&lt;/p&gt;  &lt;p&gt;3. 官方上说语言包安装在 Web Server上面，实际上需要你安装在所有的SharePoint Server上面， 不包括DB（数据库）服务器；&lt;/p&gt;  &lt;p&gt;4. 只有在所有的Server上都安装结束之后，才能走配置向导，而且走一遍即可。&lt;/p&gt;  &lt;p&gt;5. 如何验证语言包是否安装成功？以及导入和导出翻译功能？&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;如果想要更深层次的研究，请参考以下博客：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/b/patrick_heyde/archive/2010/05/31/sharepoint-2010-language-pack-how-to-install-amp-be-aware-of"&gt;http://blogs.technet.com/b/patrick_heyde/archive/2010/05/31/sharepoint-2010-language-pack-how-to-install-amp-be-aware-of&lt;/a&gt;-their-limits.aspx&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/sowmyancs/archive/2010/09/12/install-language-packs-for-sharepoint-server-2010.aspx"&gt;http://blogs.msdn.com/b/sowmyancs/archive/2010/09/12/install-language-packs-for-sharepoint-server-2010.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/2033394.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/04/30/2033394.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/fanwenxuan/archive/2011/03/20/1989260.html</id><title type="text">在SharePoint 2010中使用Linq时候，请注意特殊字符</title><summary type="text">SharePoint 2010 增加了对LINQ的支持，增强了开发的能力。那么其中好事有一些晓得细节需要我们注意的。 例子：有一个自定义列表“Citys”， 其中包含一个”选项”类型的字段“GDP”，它包含如下的两个选项： 那么你有没有尝试过如何去使用LINQ获得这列的值，我们来看一下： 首先使用SPMetal工具生成实体类，我们在实体类中找到“GDP”这个字段： internal enum GDP : int { None = 0, Invalid = 1, [Microsoft.SharePoint.Linq.ChoiceAttribute(Value = &amp;quot;5 per user</summary><published>2011-03-20T02:28:00Z</published><updated>2011-03-20T02:28:00Z</updated><author><name>范文轩</name><uri>http://www.cnblogs.com/fanwenxuan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/fanwenxuan/archive/2011/03/20/1989260.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/fanwenxuan/archive/2011/03/20/1989260.html"/><content type="html">&lt;p&gt;SharePoint 2010 增加了对LINQ的支持，增强了开发的能力。那么其中好事有一些晓得细节需要我们注意的。&lt;/p&gt;  &lt;p&gt;例子：有一个自定义列表&amp;#8220;Citys&amp;#8221;， 其中包含一个&amp;#8221;选项&amp;#8221;类型的字段&amp;#8220;GDP&amp;#8221;，它包含如下的两个选项：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201103/201103201028144634.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/fanwenxuan/201103/201103201028157600.png" width="511" height="186" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;那么你有没有尝试过如何去使用LINQ获得这列的值，我们来看一下：&lt;/p&gt;  &lt;p&gt;首先使用SPMetal工具生成实体类，我们在实体类中找到&amp;#8220;GDP&amp;#8221;这个字段：&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;internal&lt;/span&gt; &lt;span &gt;enum&lt;/span&gt; GDP : &lt;span &gt;int&lt;/span&gt;&#xD;
    {&#xD;
        None = 0,&#xD;
        Invalid = 1,&#xD;
        [Microsoft.SharePoint.Linq.ChoiceAttribute(Value = &lt;span &gt;&amp;quot;5 per user/month&amp;quot;&lt;/span&gt;)]&#xD;
        _5PerUserMonth = 2,&#xD;
        [Microsoft.SharePoint.Linq.ChoiceAttribute(Value = &lt;span &gt;&amp;quot;10 per company/month&amp;quot;&lt;/span&gt;)]&#xD;
        _10PerCompanyMonth = 4,&#xD;
    }&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;如果这个时候，你直接使用&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;item.GDP.Value&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;来获得这列的值，那么你得到的肯定是&amp;#8220;_5PerUserMonth&amp;#8221; 或者 &amp;#8220;_10PerCompanyMonth&amp;#8221; , 而没有办法得到他真正的值。谁叫C#的变量命名规则不让使用&amp;#8220;空格&amp;#8221;或者&amp;#8220;/&amp;#8221;等呢。这个时候我们需要利用发射来获取到里面的值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; GetGDP()&#xD;
{&#xD;
    var ctx =&#xD;
       &lt;span &gt;new&lt;/span&gt; CityDataContext(WebUrl);&#xD;
    var cityList = from c &lt;span &gt;in&lt;/span&gt; ctx.Citys&#xD;
                   select c;&#xD;
    &lt;span &gt;foreach&lt;/span&gt; (var item &lt;span &gt;in&lt;/span&gt; cityList)&#xD;
    {&#xD;
        Console.WriteLine(stringValueOf(item.GDP));&#xD;
    }&#xD;
    &#xD;
}&#xD;
&#xD;
&lt;span &gt;public&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; stringValueOf(Enum &lt;span &gt;value&lt;/span&gt;)&#xD;
{&#xD;
    FieldInfo fi = &lt;span &gt;value&lt;/span&gt;.GetType().GetField(&lt;span &gt;value&lt;/span&gt;.ToString());&#xD;
    Microsoft.SharePoint.Linq.ChoiceAttribute[] attributes =&#xD;
        (Microsoft.SharePoint.Linq.ChoiceAttribute[])fi.GetCustomAttributes(&#xD;
        &lt;span &gt;typeof&lt;/span&gt;(Microsoft.SharePoint.Linq.ChoiceAttribute),&lt;span &gt;false&lt;/span&gt;);&#xD;
    &lt;span &gt;if&lt;/span&gt; (attributes.Length &amp;gt; 0)&#xD;
    {&#xD;
        &lt;span &gt;return&lt;/span&gt; attributes[0].Value;&#xD;
    }&#xD;
    &lt;span &gt;else&lt;/span&gt;&#xD;
    {&#xD;
        &lt;span &gt;return&lt;/span&gt; &lt;span &gt;value&lt;/span&gt;.ToString();&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;pre &gt;如果列表中的其他列里面也存有这样的值，那么你使用的时候还真的要注意了。&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt; &lt;img src="http://www.cnblogs.com/fanwenxuan/aggbug/1989260.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/fanwenxuan/archive/2011/03/20/1989260.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
