本文章是由機器翻譯。

Office 增益集

在 Office 2010 中存取 SharePoint 資料的三種解決方案

Donovan Follette

下載範例程式碼

數以百萬的人會使用 Microsoft Office 用戶端應用程式中支援日常工作的通訊、 灌木 crunch 數字的資料、 製作文件、 傳送簡報並進行商務決策。在不斷增加數字,許多互動 Microsoft SharePoint 入口網站,供共同作業,而是用來存取共用的資料和服務的平台。

在企業中的一些開發人員有不還採取有機會在 Office 應用程式中建置自訂功能的優點,可以提供一個完美的功能整合的使用者直接存取熟悉的產能應用程式內的 SharePoint 資料的經驗。改善使用者產能的方式所查看的企業,直接在 Office 應用程式中提供 SharePoint 資料是要考慮的重要選項。

SharePoint 2010 版本,有新的方法可用來存取 SharePoint 資料,並顯示 Office 使用者的數字。這些範圍從幾乎無碼解決方案進行可能透過 SharePoint 工作區 2010 (之前稱為 Groove),SharePoint 和 Outlook、 新的 SharePoint REST API 和新的用戶端物件模型之間的直接同步處理。只在 Microsoft Office SharePoint 伺服器 (MOSS) 2007年,可以在 SharePoint 2010 也使用了廣泛的陣列的 Web 服務。

這個本文我們描述幾個無程式碼解決方案,並告訴您如何建立幾個更複雜的解決方案,SharePoint 2010 中使用這些新的功能。

外部資料來源

let’s 啟動藉由 SharePoint 清單型別,您可以採用快速地觀看作為資料來源。

一個特別有用的資料來源是外部的清單便會透過線條的商務 (LOB) 系統的連線所擷取的資料。MOSS 2007 可讓您連線到使用商務資料目錄 (BDC),提供唯讀存取後端系統的 LOB 資料。SharePoint 2010 提供商務連線服務 (BCS),這是一個進化的 BDC 支援您的 LOB 資料的完整讀取/寫入存取。

您為什麼要將 LOB 資料送回 SharePoint?請考慮具有只有有限的組織中的人員可以直接存取的客戶關係管理 (CRM) 系統的使用案例。但是,有 ’s 客戶資料表在資料庫中,就好像使用可以用許多其他人的姓名和地址資料。在現實生活中您可能得到與複製此資訊從各種未經授權的來源,並貼到他們的 Office 文件的使用者。它會從授權的 CRM 系統中存取此客戶資料,並將它在 SharePoint 中公開為 Office 用戶端可以存取的外部清單會更好。

SharePoint 設計工具 2010年是用於設定 LOB 系統的存取,並讓其資料的 SharePoint 的外部清單中可用的工具。有一些執行這項操作所需的步驟。

第一個步驟是建立一個新外部內容類型 (ECT)。ECT 包含中繼資料描述,例如欄位和 CRUD SharePoint 會使用與它互動的方法的後端資料的結構。一旦建立 [ECT 可產生外部的清單從它在 SharePoint 中任何站台。外部的清單看起來,並像 SharePoint,但外部清單資料中的任何其他標準清單並不會儲存在 SharePoint 中的作用。而是,它擷取透過 ECT,當使用者來存取。

SharePoint 設計工具包含預設連線到外部資料來源包括 SQL Server、 Windows 通訊基礎 (WCF) 和 Microsoft.NET Framework 的支援。因此,您可以輕易地連線到任何 SQL Server 資料庫的資料表或檢視,WCF 服務或 Web 服務建立一個 ECT。自訂的.NET 解決方案可以是建立在 Visual Studio 2010 使用新的 SharePoint 2010 商務資料連線模型專案範本。

這篇文章供 SQL Server 資料來源型別用來建立資料庫資料表的 ECT。然後在 ECT 用來建立外部的清單。圖 1 會顯示產生 「 客戶從 CRM 」 ECT 之後完成 SharePoint 設計工具中的設定。

圖 1 的 存取外部的 CRM 資料的 ECT 組態

有幾件事,此呼叫。請先,注意外部內容的類型資訊面板中 Office 項目類型] 屬性值設定給連絡人。設定過程可以將外部資料欄位對應到相對應的 Office 項目類型和連絡人一樣。這 isn’t 一的需求,但因為 CRM 資料庫中的 [名稱] 和 [地址] 資料可以被對應至 「 Outlook 連絡人的完美,這項指定的選擇。您可以稍後在 Outlook 中使用這個組態選項的結果。

注意第二,到外部的內容類型作業面板中已啟用此 ECT 完整 CRUD 方法。這是因為在 「 組態精靈 」 中所做的選擇。但是,肯定可能有限制為唯讀的 LOB 系統作業的商務原因。在這種情況下您可以設定組態時只需選取讀取清單] 及 [讀取項目] 作業。這些是只有兩個建立一個 ECT 所需的作業。

一旦建立 [ECT,它 ’s 簡單的步驟,來建立外部的清單。藉由建立新的外部清單從 SharePoint 或 SharePoint 設計工具中,您可以執行這項操作。

SharePoint 一般清單

不用的說,您可以採用標準 SharePoint 清單以顯示商務資料。比方就說說出您的部門管理訓練課程內容。您維護兩個 SharePoint 清單:課程類別] 與 [課程]。這些清單包含其他小組成員的員工都使用來建立客戶的對應、 褶頁冊或廣告活動的課程資訊。因此資料由一個小的小組維護,但公司必須隨時可供使用很多人。

SharePoint 2010 具有新功能,查詢,表單清單之間的關聯性。當其中一個清單上建立新的資料行,會使資料行對應型別時,然後指出站台內的另一個清單當作來源。SharePoint 支援單一值的查詢,以一對多關聯性或多對多關聯性的多重值的查閱。如果您所選擇 SharePoint 也會維護支援受限制或重疊顯示刪除清單之間的參考完整性。這會提供一些如何設定和使用 SharePoint 清單中的選項。

回到我們的範例中,您可以輕鬆地建立課程清單查詢欄名為源自課程類別] 清單中 的 圖 2 所示的類別。

圖 2 使用來源課程類別資料的查閱清單

帶到 Office 的 SharePoint 清單資料

因此就目前我們看過如何呈現外部的資料,如 SharePoint 列出在 SharePoint 2010 使用新 BCS 功能。使用者可以存取透過瀏覽器在一部電腦或一個的行動裝置上的資料,但使用者可能會喜歡完整的 Office 用戶端應用程式的豐富的體驗。let’s 現在變成我們注意到有兩種方式在用戶端上使用 SharePoint 清單資料。第一次,我們看看如何存取資料,而不需撰寫任何程式碼,藉由採用 SharePoint 工作區和 Outlook。

開發我們的範例 CRM 方案時, 有兩個連線和匯出 SharePoint 功能區,如外部的客戶清單中的按鈕:SharePoint 工作區,並連線到 Outlook 的同步 (請參閱 的 圖 3)。如果用戶端電腦上安裝了 SharePoint 工作區 2010年,SharePoint 工作區的同步處理可讓您只要按一下同步清單和文件庫至用戶端。使用者是否線上或離線,就在 SharePoint 工作區中,使用者可以使用本機的快取的複本的內容。當使用者處於離線狀態,並修改清單中的項目或文件,並將它儲存在本機時,清單項目或文件會與同步 SharePoint 自動當使用者再次回到線上。

圖 3 連接和匯出選項在 SharePoint 功能區

這是不正確的程式碼需要的解決方案。資料是由在 的 [圖 4] 所示的 SharePoint 工作區用戶端應用程式中存取。與完整 CRUD 方法定義在 [ECT,因為 SharePoint 工作區中的 [客戶] 資料所做的任何變更將會更新 CRM 資料庫中。

圖 4 存取外部 SharePoint 工作區中的清單資料

因為我們 ECT 設定組態時對應連絡人 Office 的項目類型的 CRM 資料庫欄位,SharePoint 可以為原生的連絡人項目就到 Outlook 提供我們外部的清單資料。藉由按一下 [Outlook 功能區上的按鈕來連線 SharePoint 會同步處理這個外部的清單,直接到 Outlook。一次,沒有程式碼需要,與 SharePoint 降落在 Office 用戶端的資料。

使用 REST API

例如透過 SharePoint 工作區] 及 [Outlook 清單連線啟用無程式碼] 方案是一種很棒的但有一些需要更多自訂解決方案的使用者經驗。若要容納這些,我們需要提供存取 Office 應用程式,讓我們來進一步仍然方案的方式中的清單資料。

可能是其中一個最簡單的方法,開發人員存取 SharePoint 清單和文件庫的資料是透過新的 REST API (listdata.svc)。大部分的資料,在 SharePoint 中被公開為 RESTful 端點。標準 SharePoint 服務的位置是 _vti_bin,所以如果您只需輸入您的瀏覽器 URL 至您的網站,並附加 /_vti_bin.listdata.svc,您將取得回標準 ATOM 服務將告訴您,在網站上的使用集合的文件 (請參閱 的 圖 5)。

圖 5 的 ATOM 服務文件

請注意 [課程] 和 [CourseCategory 清單會出現。由進一步將 /Course 附加至的 URL、 可以擷取清單中的所有課程,或您可以藉由附加一個數字來都擷取任何一個特定的課程。比方就說,這會傳回第三個課程:

http://intranet.contoso.com/sites/SPC/_vti_bin/listdata.svc/Course(3)

您可以藉由附加下列屬性篩選器執行更進階的查詢:

?$filter=startswith(propertyname,'value')

但是,’s 重要這裡是一個可傳回與它們相關聯的 CourseCategory 資料課程進階的查詢。 藉由附加到網站 URL 的下列,您可以擷取課程和 CourseCategory 的單一內容中結合的結構:

/_vti_bin.listdata.svc/Course?$expand=Category

您看到這是 Word 增益集在下一節中實作。

建置 Word 增益集

一旦您知道如何運用 REST API 來取得資料的存取權時,您可以出現在用戶端應用程式中的資料其中的使用者具有豐富的製作經驗。 這個例如我們建置 Word 增益集,並向使用者顯示此資料,以有意義的方式。 這個應用程式會具有下拉式清單的課程] 類別,載入含有類別的選取項目] 和 [課程相關的文字插入 Word 文件的按鈕對應的課程的清單方塊。

在 Visual 的 Studio 2010 建立一個新 Office 2010 Word 增益集專案在 C# 中。

現在新增新的服務資料來源。 在精靈的 [加入服務參考] 面板上輸入您的 SharePoint 網站的 URL,並附加 /_vti_bin/listdata.svc。 例如:

http://intranet.contoso.com/_vti_bin/listdata.svc

輸入 URL 後, 按一下 [Go]。 這會擷取在 SharePoint 網站的中繼資料。 當您按一下 [確定 WCF 資料服務會使用 Entity Framework 就為您產生強型別的類別。 這完全抽象化資料來源是 SharePoint 或提供資料透過開啟的資料通訊協定的 OData 產生者的事實。 從這一點,您只需處理資料以熟悉的.NET 類別。

的使用者介面,您將建立在頂端、 底部、 左邊或右邊的應用程式提供可停駐的 Office 應用程式的使用者介面的自訂工作窗格。 工作窗格可以讓 Windows Form 控制項加入至它們包括 Windows Presentation Foundation (WPF) 使用者控制項將能用在這裡。

使用 [加入新項目] 對話方塊的專案中新增 WPF 使用者控制項,並命名為 [CoursePicker。 當設計工具開啟時,方格項目取代 XAML 程式碼片段 的 [圖 6] 所示。 這只是新增下拉式方塊、 按鈕和清單方塊,並設定某些屬性。 稍後您將新增一些事件。

圖 6 的 Word 增益集 UI 標記

<StackPanel>

  <ComboBox 

    Name="cboCategoryLookup" Width="180" Margin="5" 

    HorizontalAlignment="Center" IsEditable="False" 

    ItemsSource="{Binding}"    

    DisplayMemberPath="CategoryName" 

    SelectedValuePath="CategoryName" />

  <Button Name="button1" 

    Content="Insert Course Information" Margin="5" />

  <ListBox Name="courseListBox" ItemsSource="{Binding}">

    <ListBox.ItemTemplate>

      <DataTemplate>

        <StackPanel>

          <StackPanel Orientation="Horizontal">

            <TextBlock Text="{Binding Path=CourseID}" 

              FontWeight="Bold" />

            <TextBlock Text=": " FontWeight="Bold" />

            <TextBlock Text="{Binding Path=Name}" />

          </StackPanel>

          <TextBlock Text="{Binding Path=Description}" 

            Margin="5 0 0 0" />

        </StackPanel>

      </DataTemplate>

    </ListBox.ItemTemplate>

  </ListBox>

</StackPanel>

開啟 CoursePicker.xaml.cs 檔案。 立即接在的命名空間新增兩個使用陳述式一個用於服務參考、 ServiceReference1,另一個則用於 System.Net:

namespace Conf_DS {

    using ServiceReference1;

    using System.Net;

CoursePicker] 類別中第一個的順序的商務是具現化資料的內容物件。 這裡,您傳遞 URL 中您一次附加的 _vti_bin/listdata.svc 指定的網站:

public partial class CoursePicker : UserControl {

  Office2010DemoDataContext dc = new Office2010DemoDataContext(

    new Uri("http://intranet.contoso.com/sites/spc/_vti_bin/listdata.svc"));

接下來您有快取擷取的課程] 項目,並儲存至伺服器的來回的清單類別層級變數:

List<CourseItem> courses = null;

擷取該課程的程式碼和資料位於 [OnInitialized CourseCategory 覆寫的方法。 先,您將指定要傳遞給伺服器登入認證。 然後課程類別是透過資料內容物件擷取,並繫結至類別下拉式方塊。 最後,使用 [展開] 選項課程會傳回與它們相關聯的類別和載入課程的清單物件。 這將會快取在本機的較佳的效能課程:

protected override void OnInitialized(EventArgs e) {

    dc.Credentials = CredentialCache.  

  DefaultCredentials;



    // Load Category dropdown list

    cboCategoryLookup.DataContext =  

      dc.CourseCategory;

    cboCategoryLookup.SelectedIndex = 0;



    // To cache data locally for courses 

    // Expand to retrieve the Category as well.

    courses = dc.Course.Expand("Category").ToList();



    base.OnInitialized(e);

  }

現在您需要加入一些事件。 回到 CoursePicker 設計工具,並連按兩下 [建立按鈕] 按鈕按一下事件。 接下來,按一下 [下拉式方塊,並在內容功能表中,按一下 [事件] 索引標籤,然後按兩下 [SelectionChanged 事件。 加入程式碼至 SelectionChanged 的事件處理常式,讓它看起來就像這樣:

private void cboCategoryLookup_SelectionChanged(

  object sender, SelectionChangedEventArgs e) {



  courseListBox.DataContext = from c in courses

    where c.Category.CategoryName == cboCategoryLookup.SelectedValue.ToString()

    orderby c.CourseID

    select c;

}

這裡,簡單的 LINQ 查詢會搜尋課程清單物件 (使用 [展開] 選項擷取的資料載入一個) 以尋找有符合在下拉式方塊中選取課程類別名稱的類別名稱的所有課程。 它也命令提供全新的使用者經驗的結果。

最後,將程式碼加入至按鈕事件處理常式,將選取的清單方塊項目轉換成 CourseItem 物件。  然後您可以採取各種要呈現給使用者,並將它們放在文件中的插入點位置的資料元素:

private void button1_Click(

  object sender, RoutedEventArgs e) {



  CourseItem course = (CourseItem)courseListBox.SelectedItem;

  Globals.ThisAddIn.Application.Selection.InsertAfter(

    String.Format("{0}: {1} \n{2}\n", course.CourseID, 

    course.Name, course.Description));

}

以及,在 ’s — 非常簡單的程式碼來存取 SharePoint 透過 WCF 資料服務中的資料。

現在開啟 ThisAddIn.cs 檔案。 這是主要進入點的所有增益集的 Office。 您在這裡新增具現化的工作窗格中的程式碼:

private void ThisAddIn_Startup(object sender, System.EventArgs e) {



  UserControl wpfHost = new UserControl();

  ElementHost host = new ElementHost();

  host.Dock = DockStyle.Fill;

  host.Child = new CoursePicker();

  wpfHost.Controls.Add(host);

  CustomTaskPanes.Add(wpfHost, "Training Courses").Visible = true;

}

CoursePicker WPF 使用者控制項 can’t 直接加入至自訂工作窗格的物件集合。它必須裝載 ElementHost 控制項提供 WPF 控制項和 Windows Form 控制項之間的橋接器中。請注意 CoursePicker 物件會新增為 ElementHost 物件的子系,然後 ElementHost 物件會加入至自訂工作窗格的物件集合。Office 應用程式可以有安裝多個自訂工作窗格及可用在任何指定時間的使用者,所以此增益集的 [工作] 窗格將只會在集合中的第一個。圖 7 顯示已完成的增益集。

圖 7 的 Word 增益集工作在

與資料出現在 Office 應用程式中,您可以採取進一步的方案,藉由新增 Word 的 API 進行互動的程式碼。就例如您可以加入程式碼,以便當使用者選取 [課程資訊是插入和格式化文件中。Office 應用程式 API 是豐富,並可讓您新增更多的功能,您可以讓使用者更具生產力的自訂方案。接下來,我們看看這樣的範例,以連接至用戶端 SharePoint 物件模型的 Word 內容控制項。

使用 [用戶端物件模型

使用 REST API 來存取資料是幾個選項可供您使用。比方就說也有三個新的 API 可供跨管理的.NET 應用程式] 及 [Silverlight 用戶端 JavaScript 提供一致的程式設計模型的 SharePoint 2010。這些三個用戶端物件模型互動 SharePoint 使用伺服器物件模型功能的子集,並基本上是交互操作與 SharePoint 網站集合層級和以下:Web、 清單、 listitems、 內容類型、 欄位及外部的清單。如果您 ’re 熟悉伺服器物件模型,會熟悉用戶端物件模型。

若要示範使用用戶端物件模型,我們使用外部的清單包含 CRM 客戶建置一個文件層級 Word 增益集動作窗格與客戶的載入位置。這是您需要使用用戶端物件模型,因為清單資料服務 doesn’t 提供存取外部的清單的情況。在此的範例使用者可以選取的客戶,並插入引號文件範本中的內容控制項中他的姓名和地址資訊。

前一個課程] 與 [類別範例是應用程式層級增益集。一個應用程式層級 Word 增益集將會存在每次啟動 Word 時。文件層級增益集但是繫結至文件,以及特定類型的文件開啟時,只會載入。在這種情況下外部的客戶清單將只會呈現給使用者時使用的引號的文件。

在 [Visual 的 Studio 開始建立新的 Word 2010 文件專案。在精靈中,您需要選取預設的文件] 或 [已經儲存的文件。在我的情況下,我會使用引號的文件,我已儲存。Visual Studio 內開啟的文件,Word 就會變成文件設計工具。

您可以使用 [工具箱] 將控制項直接在文件表面上的一樣 Windows Form 應用程式。您在這裡新增名稱及位址資訊的 Word 內容控制項。在執行階段的使用者 ’s 客戶選取範圍中的資料會植入這些內容的控制項。

若要在文件中加入內容控制項,選取您想要換行中內容的控制項在文件上的文字。然後拖曳一個 RichTextContentControl 從 Word 控制項,在 [工具箱] 中,並把它放在選取的文字上。然後提供控制項和屬性中的文字值的名稱。讓您的文件的看起來像是 的 圖 8,請執行這項客戶和公司名稱、 地址、 縣市和客戶識別碼。

圖 8 建立報價單文

由於用戶端物件模型並不提供強型別的資料從伺服器,您必須將客戶類別加入專案中。客戶類別會用來對應 [用戶端物件模型所傳回的資料:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace CSOM_Quote {

  public class Customer     {

    public string CustomerID { get; set; }

    public string CompanyName { get; set; }

    public string ContactName { get; set; }

    public string Address { get; set; }

    public string City { get; set; }

  }

}

若要使用 [用戶端物件模型,您需要參考 Microsoft.SharePoint.Client 及 Microsoft.SharePoint.Client.Runtime。

與先前的範例資料擷取所需 OnIntitialized 覆寫方法中的位置。 有幾個對 WCF 資料服務與用戶端物件模型撰寫的程式碼之間的主要差異。 第一次,用戶端物件模型所預期您已熟悉 SharePoint 和它的結構。 與 WCF 資料服務,抽象化離開,而您處理資料而已。 第二個,使用 [用戶端] 物件模型傳回的資料是不強型別。 您 ’re 負責取得資料,您可以使用 LINQ 查詢和資料繫結的物件。

[圖 9] 所示的資料存取程式碼。 用戶端內容是中央的物件。 將建立新的執行個體,用戶端內容的網站 URL。 然後您可以開始建立 SharePoint 物件使用下列步驟:

  1. 建立網站
  2. 建立集合的站台清單
  3. 取得具有特定名稱的清單
  4. 取得清單中的所有項目
  5. 載入內容中的查詢
  6. 執行查詢

圖 9 CRM 增益集資料存取程式碼

protected override void OnInitialized(EventArgs e) {

  SPClientOM.ClientContext context =  new ClientContext("http://intranet.contoso.com/sites/spc");

  SPClientOM.Web site = context.Web;

  SPClientOM.ListCollection lists = site.Lists;

  var theBCSList = lists.GetByTitle("Customers");

  SPClientOM.CamlQuery cq = new SPClientOM.CamlQuery();

  IQueryable<SPClientOM.ListItem> bcsListItems =  theBCSList.GetItems(cq);

  bcsList = context.LoadQuery(bcsListItems);

  context.ExecuteQuery();



  var bcsCustomerData = 

    from cust in bcsList

    select new Customer {

      CustomerID = cust.FieldValues.ElementAt(1).Value.ToString(),

      ContactName = cust.FieldValues.ElementAt(2).Value.ToString() 

        + " " 

        + cust.FieldValues.ElementAt(3).Value.ToString(),

      CompanyName = cust.FieldValues.ElementAt(4).Value.ToString(),



      Address = cust.FieldValues.ElementAt(5).Value.ToString(),

      City = cust.FieldValues.ElementAt(6).Value.ToString(),  };



  foreach (var x in bcsCustomerData)  {

    Customer tempCustomer = new Customer();

    tempCustomer.CustomerID = x.CustomerID;

    tempCustomer.CompanyName = x.CompanyName;

    tempCustomer.ContactName = x.ContactName;

    tempCustomer.Address = x.Address;

    tempCustomer.City = x.City;



    customers.Add(tempCustomer);

  }



  customerListBox.DataContext = customers;

  base.OnInitialized(e);

}

在呼叫 ExecuteQuery 方法之前所有先前的陳述式會排入佇列,然後只傳送至伺服器時執行稱為查詢。 ’re 的頻寬和裝載的控制項在此的方式。 一旦查詢會傳回其結果,其餘的程式碼會對應到可以繫結到客戶清單方塊控制項的客戶清單物件的資料。

這個範例也使用 WPF 使用者控制項。 因為 XAML 與前一個範例相似所以它 isn’t 這裡所示。 但是,具現化文件層級動作窗格中,而不是應用程式層級的工作窗格中的程式碼是有點不同,您可以在這裡看到:

public partial class ThisDocument {

  private CustomersCRM CustomerActionPane =  new CustomersCRM();



  private void ThisDocument_Startup(object sender, System.EventArgs e) {

    ElementHost host = new ElementHost();

    host.Dock = DockStyle.Fill;

    host.Child = new CustomerPicker();

    CustomerActionPane.Controls.Add(host);

    this.ActionsPane.Controls.Add(CustomerActionPane);

  }

...

請注意客戶選擇器 WPF 使用者控制項加入至 ElementHost,ElementHost 物件加入客戶執行窗格控制項集合,和客戶執行窗格然後加入動作窗格的控制項集合。

最後一個步驟是要新增按鈕按一下事件,來填入 Word 內容控制項適當的名稱與地址的資訊,如 的 [圖 10] 所示。

圖 10 加入按鈕按一下 Word 內容控制項的事件

private void button1_Click(

  object sender, RoutedEventArgs e) {

  Customer customer = (Customer)customerListBox.SelectedItem;



  Globals.ThisDocument.wccContactName.Text = customer.ContactName;

  Globals.ThisDocument.wccCompanyName.Text = customer.CompanyName;

  Globals.ThisDocument.wccAddress.Text = customer.Address;

  Globals.ThisDocument.wccCity.Text = customer.City;

  Globals.ThisDocument.wccCustomerID.Text = customer.CustomerID;

}

先,您轉換到客戶物件的選取清單方塊項目。然後從客戶物件的資料用來填入內容的控制項。結果會看起來像 的 圖 11

圖 11 的 CRM 增益集在 Word 內

社會服務為 Web 服務

到目前為止您看過幾種方法,您可以從 Office 用戶端應用程式存取 SharePoint 資料。最後我們查看的技巧使用 Web 服務。SharePoint 提供為主要的方式從遠端存取 SharePoint 資料的 Web 服務。幾乎所有的功能,在 SharePoint 伺服器存取在 SharePoint 2010 提供的 Web 服務。不同於其他資料技術的一些您看到,例如 REST] 及 [用戶端] 物件模型 Web 服務涵蓋同時存取資料和存取管理功能。

所有您喜歡的 Web 服務是仍在例如 Lists.asmx 和 Search.asmx 服務的那裡。SharePoint Web 服務實作為 ASP.NET Web 服務 (.asmx 副檔名和大部分的 SharePoint 2010 中新的服務也會在以 ASMX 服務寫入。這主要是做是有最大的相容性,與其他的產品和工具。

新的焦點的 SharePoint Web 服務是社會服務。所有共享應用程式的中心是使用者。SharePoint 有可讓您存取所有使用者設定檔資訊的 UserProfileService。UserProfileService 包含標準的屬性,例如名稱和地址,但也包含其他屬性,例如嗜好、 技術、 學校及同事。同事 (或朋友因為它們呼叫其他公用共享站台) 是在 SharePoint 社交結構的主要功能。

共享應用程式的另一個重點是人認為他們所遇到的內容有關。SharePoint 具有可讓使用者將 [標籤]、 [比率] 及 [資料]、 [文件] 及 [瀏覽網站中的網頁上的註解的 SocialDataService。

在第三個共享的重點 SharePoint 會發佈活動後,您的同事所產生的活動訂閱。SharePoint 提供一個 ActivityFeed 和 API 來發佈為摘要的活動。

因為這 isn’t 發行項上新的共享功能在 SharePoint 中,我們 won’t 這些,移到更多的詳細資料,但它們並提供一些重要的內容,如本文稍後的範例。SharePoint 開發人員中心 或 「 的 管理與 Microsoft Office SharePoint Server 2007 的共享網路 」 白皮書,如需詳細資訊,請參閱。

擴充 Outlook 與 Web 服務

我們看過如何 SharePoint 和 Office 提供的選項很多您決定最佳的 Office 應用程式使用的存取資料時。另一種方式,包括使用 SharePoint Web 服務。在此的範例中,我們建立新的 Outlook 功能區,讓您將所有您的 SharePoint 同事拉到 Outlook 連絡人的項目。就像您 ’re 習慣看到與 Microsoft Exchange 所提供的連絡人,您 ’re 甚至能夠呈現使用者 ’s 基本資料圖片到 Outlook。

開始在 Visual Studio 2010 中建立一個新 Outlook 增益集。我們撰寫在 C# 中,但是如果您喜歡,您可以使用 Visual Basic。在先前的版本 Visual Basic 有稍微的優點與支援的功能,例如選擇性的參數,但 C# 現在支援這些,太。

功能區提供一致且容易的方法,與所有 Office 應用程式互動。Outlook 2010 現在包含主畫面的功能的區。在此的範例中,您新增一個新的功能區。Visual Studio 2010 方便使用視覺化的功能區設計工具建立 Office 色帶。您只可以將控制項從工具箱拖曳左邊,並把它們放到設計介面上。

在此的範例只需要設定] 索引標籤和群組標籤等的一些屬性。接下來加入至介面上的按鈕控制項。一旦新增到功能區群組的按鈕可以將大小設定為大,並設定按鈕的影像。您的功能區看起來會類似於 的 圖 12

圖 12 建立新的 Outlook 功能區

執行最後的動作是設定來決定何時顯示功能區屬性。預設情況下,功能區會顯示在郵件的檔案總管。這是開啟郵件項目時,您看到的視窗。在這個範例中,您想要顯示在 [主畫面上的功能區。選取功能區和設定 Microsoft.Outlook.Explorer RibbonType 屬性。您可以看到有許多功能區可能出現的位置,包括郵件和連絡人探索隊的地方。

接下來,您建立程式碼後置的功能區按鈕上按兩下滑鼠按一下事件處理常式。這是用以建立 Outlook 連絡人的事件。

您現在 ’re 準備好要加入程式碼,在 Outlook 中建立連絡人。Visual Studio 2010 可讓這容易執行。我更簡單的方法便是問題分成多個較小的部份。先,您可以建立 「 Outlook 」 增益集,然後建立功能區。在每個步驟之後確定您按下 F5 編譯和執行您的應用程式。現在,您可以建立使用硬式編碼的值與 Outlook 連絡人。確認此運作之後,您可以新增 SharePoint 會呼叫的程式碼。一次,在每個步驟檢查所有項目正常運作移到下一個步驟之前。

圖 13 示範程式碼,以建立新的硬式編碼連絡人。這會建立新的 ContactItem 物件使用 CreateItem 方法。然後您可以設定 [ContactItem 屬性和呼叫 Save 方法,以認可變更。

圖 13 的 現成的程式碼建立連絡人

Outlook.ContactItem newContact = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olContactItem);



newContact.FirstName = "Paul";

newContact.LastName = "Stubbs";

newContact.Email1Address = "pstubbs@microsoft.com";

newContact.CompanyName = "Microsoft";

newContact.JobTitle = "Technical Evangelist";

newContact.CustomerID = "123456";

newContact.PrimaryTelephoneNumber = "(425)555-0111";

newContact.MailingAddressStreet = "1 Microsoft Way";

newContact.MailingAddressCity = "Redmond";

newContact.MailingAddressState = "WA";

newContact.AddPicture(@"C:\me.png");

newContact.Save();

只是非常困難的部分是設定連絡人圖片的方式是呼叫會在磁碟上的圖片的路徑的 [AddPicture] 方法。 這是有問題的因為您想要從 SharePoint 提取影像。 您看到如何執行這項操作在下一節。 一旦您確認程式碼的運作方式與連絡人建立在 Outlook 中,您 ’re 準備呼叫 SharePoint,加入真實的連絡人。

採用使用者設定檔的服務

UserProfileService 是 SharePoint Web 服務,您可以使用它來存取包括一份您的同事,然後他們的設定檔資訊的設定檔資訊。 若要將這項服務啟動加入至您的專案參考。 因為這是 Web 服務,並不是 WCF 服務,您需要按一下 [新增服務] 對話方塊中的 [進階] 索引標籤,然後按一下 [加入 Web 服務] 按鈕。 這是從 Visual Studio 2005 開啟您記住舊的加入 Web 服務] 對話方塊。

加入參考後,您可以新增程式碼來擷取您的同事:

// Instantiate the Web service.

UserProfileService userProfileService = new UserProfileService();



// Use the current user log-on credentials.

userProfileService.Credentials = System.Net.CredentialCache.DefaultCredentials;

這個程式碼會建立服務的執行個體,並將您目前的憑證傳遞給服務。 接下來,呼叫傳遞使用者想要擷取的同事的 GetUserColleagues 方法。 這會傳回 ContactData 物件的陣列:

ContactData[] contacts = userProfileService.GetUserColleagues("contoso\\danj");

我們現在可以循環的所有 ContactData 物件代表使用者 ’s 同事在 SharePoint 中的設定檔資料。 我們可以藉由呼叫傳回一個陣列,其中包含每個同事的機碼和值配對 PropertyData 的 [GetUserProfileByName] 方法擷取擴充的屬性:

// Add each Colleague as an Outlook Contact

foreach (ContactData contact in contacts) {

  // Get the users detailed Properties

  PropertyData[] properties = userProfileService.GetUserProfileByName(contact.AccountName);



  // Create a new Outlook Contact

  Outlook.ContactItem newContact = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olContactItem);

現在我們將轉換的索引鍵/值組至連絡人的屬性:

// Set the Contact Properties

newContact.FullName = contact.Name;

newContact.FirstName = properties[2].Values[0].Value.ToString();

newContact.LastName = properties[4].Values[0].Value.ToString();

newContact.Email1Address = properties[41].Values[0].Value.ToString();

...

最後,我們抓取連絡人的相片,並儲存新的連絡人:

// Download the users profile image from SharePoint

SetContactImage(properties, newContact);



newContact.Save();

謎題的最後的部分從 SharePoint 擷取連絡人 ’s 圖片。 擴充屬性的其中一個包含的使用者 ’s 基本資料圖片縮圖的路徑。 您必須下載這張圖片到磁碟上的暫存檔案,以便 Outlook API 可以將它加入至 ContactItem 物件:

private static void SetContactImage(

  PropertyData[] properties, 

  Outlook.ContactItem newContact){



  // Download image to a temp file

  string userid = properties[16].Values[0].Value.ToString();

  string imageUrl = properties[15].Values[0].Value.ToString();

  string tempImage = string.Format(@"C:\{0}.jpg", userid);

  WebClient Client = new WebClient();

  Client.Credentials = CredentialCache.DefaultCredentials;

  Client.DownloadFile(imageUrl, tempImage);

  newContact.AddPicture(tempImage);

}

’s 它 !現在您有功能的 Outlook 增益集區呼叫 SharePoint 以拉到 Outlook 連絡人的共享資料。您在執行應用程式時請參閱 ContactItem,以包括使用者 ’s 設定檔資訊和圖像的 SharePoint 資料填入。

總結

現在您看到資料從 SharePoint 進入 Office 用戶端是多麼簡單。我們顯示各種無程式碼解決方案到高度適應性的解決方案使用 C# 或 Visual Basic 的選項。

採用 WCF 資料服務來存取 SharePoint 清單資料 ’s 快速且輕鬆地實作的.NET 開發人員提供常見的模式。用戶端物件模型提供方法來存取外部的 SharePoint 列出並開啟的機會將 LOB 資料帶到 Office 的世界。而最後,SharePoint Web 服務可讓資料,最有彈性的存取,但也需要更多在撰寫程式碼和測試方面的承諾。

它讓很好的經驗,在瀏覽器中進行 [使用者清單為可用在 SharePoint 中資料是很重要的步驟。把它一個步驟進一步,您可以運用各種不同的資料,然後將資料送回使用者熟悉的 Office 應用程式的存取選項。Visual Studio 2010 可讓所有的這更容易建置、 偵錯和部署。您可以看到這些代表部份新和重要開發功能,您可以充分善用與新的產品版本。

更訓練,範例和資訊可以找到線上 Office 和程式開發人員 SharePoint 中心。

Donovan Follette  正在 Microsoft 技術的 evangelist 技術包括 Active Directory、 輕量型目錄服務和 Active Directory 聯盟服務使用。他現在著重於 Office 開發和建置與 SharePoint 2010 整合式的解決方案。請造訪他的部落格,在 blogs.msdn.com/b/donovanf/

Paul Stubbs 是 Microsoft 技術 evangelist,人員著重於資訊工作者開發社群的 SharePoint] 和 [Office]、 [Silverlight] 和 [Web 2.0 社交網路。他撰寫關於 Office、 SharePoint 與 Silverlight 的解決方案開發的三個書籍。讀取他的部落格,在 blogs.msdn.com/b/pstubbs/

*多虧了要檢閱這份文件的下列的技術專家:*John Durant