程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 協作: 通過Web服務和Groove 2007協助團隊共同工作

協作: 通過Web服務和Groove 2007協助團隊共同工作

編輯:關於.NET

本文討論:

Groove 2007 簡介

使用 Groove 表單工具收集數據

Groove Web 服務 API

本文使用了以下技術:

Microsoft Office, .NET Framework

在實際生活中,用戶常常需要在外出和無法訪問企業網絡的同時仍然可以收集信息。例如,消費者研究組織可能會派遣工作人員到現場邀請人們填寫問卷調查,然後再將這些數據手動輸入數據庫。如果要編寫能夠在現場使用的自定義應用程序來實現這一過程的自動化,往往需要解決諸如管理本地數據存儲並保持其與服務器數據庫同步等問題。

在本文中,我將 Microsoft® Office Groove™ 2007 中特有的協作功能集成到我自定義的 Microsoft .NET Framework 應用程序中,並為您介紹如何使用這些協作功能來解決上述問題。Groove 為團隊成員之間進行協作性數據收集和安全數據同步提供了功能豐富的客戶端,而我將使用自定義的 .NET Framework 應用程序將數據連接到企業數據庫。

Groove 提供了一個供團隊協作的環境,成員們不受他們所連接的網絡的影響,可以實現跨組織共享數據。也就是說,參與者不必位於同一網絡。正是由於這一點,當您在不請求 IT 部門協助的情況下與雇員、伙伴和客戶展開協作時,Groove 就成為您的絕佳工具。對於某些移動方案,如果用戶需要在脫機時仍能訪問和更新共享數據,並且在返回連接模式時可以自動同步數據,那麼 Groove 也是理想的選擇。

Groove 2007 是 2007 Microsoft Office System Ultimate 版本和 Enterprise 版本的組成部分,但也可以作為單獨產品來購買。您還可以從 microsoft.com/downloads 下載安裝免費的 Groove 試用版,還可以獲得 Groove SDK。

使用 Groove 構建解決方案

您可以使用 Groove 預設的文件共享和討論等功能構建屬於自己的協作解決方案,操作非常簡單,只需使用相應工具創建工作區,再將工作區另存為可重用模板即可。如果您需要更大的靈活性,還可以構建自定義應用程序,通過基於 Web 服務的 API 充分利用 Groove 中的各項安全協作功能。

就本文所提到的消費者調查應用程序解決方案而言,使用應用程序的調查人員會使用 Tablet PC 在商場填寫問卷。理想的解決方案應保證用戶在脫機的同時能夠正常工作,並可以稍後對不同調查人員收集的信息進行合並。在實踐中,調查人員最好能夠找到提供公共 Internet 連接的咖啡館,利用解決方案自動並且安全地與所有參與者同步信息。

設計解決方案的第一步需要調查協調員在 Groove 中新建一個工作區。每個工作區可以容納多種工具以滿足特定的要求,例如都可以包括用於滿足特定要求的多個工具,例如,允許參與者共享文檔的文件工具和讓人們以問答形式討論問題的討論工具。

創建工作區後,調查協調員要邀請所有調查人員加入工作區。邀請以通知的形式顯示給每位參與者,接到邀請後他們可以將工作區下載到其本地計算機上。現在,每個人都做好了協作的准備,參與者對其本地工作區副本所做的任何更改(例如,添加文件或討論主題)都將在其他參與者連接到網絡時自動安全地傳送給他們。

Groove 2007 體系結構

Groove 獨特的功能得益於它極具創新性的體系結構。第一,Groove 將所有數據存儲在參與者的 PC 上,而並非中心服務器上。這意味著,無需設計安全的途徑來讓所有參與者訪問共享資源;無論是企業內部的調查人員,還是獨立的用戶,調查協調員都可以方便地創建共享工作區來邀請他們參與。

第二,所有數據,無論是磁盤上的本地工作區,還是所有網絡通信,始終是經過加密的。這樣做的好處之一是調查人員只需通過公共 Internet 連接建立連接即可同步其更改。不需要讓所有參與者都通過虛擬專用網絡 (VPN) 訪問企業資源,因為自動同步已被加密。

盡管 Groove 的大部分組件是基於客戶端的,但它仍然提供了幾個服務器組件。Groove 使用中繼服務器充當存儲和轉發服務,以便客戶端可以使用標准協議跨越防火牆進行通信;中繼服務器還可以為脫機用戶存儲工作區更新內容的臨時加密副本。此外還設有一個管理服務器,以便管理員可以管理所有用戶的許可證和策略設置。

單個 Groove 用戶可以在安裝客戶端時創建自己的帳戶,客戶端將自動使用由 Microsoft 托管的中繼服務器。Groove 用戶數量很多的大型企業可以選擇將 Office Groove Server 2007 部署為其體系架構的一部分,以便更好地控制許可證管理,並可以完成諸如與 Active Directory® 集成等工作。中小型企業可以購買 Office Groove Enterprise 服務的訂閱,這樣他們就可以訪問管理工具的托管版本,無需部署自己的體系架構即可實現集中的控制。

使用 Groove 表單工具收集數據

在我的解決方案中,工作區必須包括調查人員需要每位接受調查的消費者填寫的問卷表單。Groove 中有一個用於設計自定義表單的表單工具,我可以使用該工具指定表單的字段,包括數據類型、標題和其他屬性等。然後,參與者可以將數據添加到工作區中,如圖 1 所示。

圖 1 帶有表單工具的 Groove 工作區

為構建自定義的解決方案,表單中還可以包含 JavaScript 或 VBScript,以增強其功能。而且,由於表單使用 DHTML 和 CSS,因此在 UI 樣式和格式方面具有一定的靈活性。如果您的組織正在使用 InfoPath® 表單,則可以不必使用 Groove 的內置表單,利用 Groove InfoPath Forms 工具即可導入基於 XML 的 InfoPath 表單定義。

調查人員在將包含自定義表單的工作區下載到自己的 Tablet PC 後即可斷開連接,並可以使用表單在調查現場添加記錄。當他們重新連接到網絡時,添加的所有記錄都將安全地與其他參與者同步。調查協調員將收到 Groove 的彈出通知,得知工作區有新的未讀數據。

當然,從調查人員手中收集數據只是 Groove 強大功能的一部分。來自各個問卷的所有數據完成同步後,調查協調員需要將這些數據加載到企業的數據庫中,以進行進一步的分析。企業的分析人員將使用 SQL Server™ 數據庫、Analysis Services 多維數據集和 Excel® 商務智能功能來了解調查結果並提出一些建議。

從應用程序訪問 Groove 數據

為了從 Groove 工作區獲取數據並將其輸入公司數據庫,調查協調員可以從 Groove 表單工具以 CSV(逗號分隔值)格式手動導出數據,再將數據導入數據庫中。但如果需要在有數據可用時才將調查數據加載到數據庫,而不是一次全部加載完畢,則采取手動過程很快會變得難以管理。

更好的解決方案是構建自定義的 .NET Framework 應用程序,使用 Groove 基於 Web 服務的 API 來讀取現場調查人員輸入的數據。調查協調員只需將該應用程序安裝在自己的 PC 上,即可同時訪問 Groove 工作區和 SQL Server 數據庫,因為與現場的調查人員相比,她不僅可以連接到公共 Internet,而且還可以連接到公司網絡(如圖 2 所示)。

圖 2 Groove 工作區用戶和 SQL Server 數據庫

這種方法與將 Groove 和 Windows® SharePoint® 服務 (WSS) 3.0 進行集成的方式是相似的。團隊可以使用 Groove 工作區進行文檔協作,然後將完成的文檔發布到 SharePoint 文檔庫,這樣企業內部的每個人都可以利用 SharePoint 的搜索和工作流等功能。此方法的原理是由有權同時訪問 Groove 和 SharePoint 站點的人將 SharePoint Files 工具添加到工作區,並將其連接到 SharePoint 文檔庫。現在,工作區所有參與者都獲得了所有文檔的副本,並且可以提交更改,這樣一來,已連接的用戶就可以在需要時將更改同步到 SharePoint 文檔庫。

使用 Groove Web 服務 API

雖然我正在開發客戶端應用程序,但 Groove 的編程模型仍然使用 Web 服務,而不是托管 API。這種編程方式讓人有些費解,因為客戶端應用程序正在調用實際上運行於同一計算機上的 Web 服務。即使計算機與網絡斷開連接,這些服務仍然是可用的 — Groove 客戶端本身會應答這些請求。對於更大型的企業解決方案,可以采用 Groove Server Data Bridge,這是一款基於服務器的產品,其編程模型是類似的,但我決定在解決方案中采用客戶端。

為了創建如圖 3 所示的客戶端應用程序,我首先要在項目中為需要訪問的每個 Groove 服務添加 Web 引用。由於 Groove SDK 提供了每個服務的 WSDL 文件,因此我先指定了到相關 .wsdl 文件的路徑,然後將 Web 引用的名稱從默認的“Web 引用”更改為意義更為明確的名稱,再單擊“添加引用”按鈕。在此應用程序中,我打算使用 GrooveAccounts、GrooveForms2、GrooveSpaces 和 GrooveTools 這幾個服務。

圖 3 加載 Groove 數據到 SQL Server 數據庫

Groove Web 服務的注冊表設置

在可以調用 Web 服務之前,我需要知道 Groove 使用哪些端口,默認端口為 9080,但我應當從當前用戶的 GrooveLocalHTTPPort 注冊表設置中對其進行檢索。另外我還需要為每個調用提供一個稱為請求鍵的值,Web 服務將通過它對調用方進行驗證。我可以從 LocalRequestKey 注冊表設置中檢索此鍵值,如圖 4 所示。請求鍵會在每次 Groove 重新啟動時隨機重新生成,因此在每次調用前,應在注冊表對其進行檢索,以防在上一次檢索後該鍵又重新生成新的值。

Figure 4 Groove Web 服務的注冊表設置

using (RegistryKey grooveSettingsRegKey = Registry.CurrentUser.OpenSubKey(
  “Software\\Microsoft\\Office\\12.0\\Groove”))
{
  // Get the URL for web services including the port
  string grooveHost = string.Format(“http://localhost:{0}”,
    grooveSettingsRegKey.GetValue(“GrooveLocalHTTPPort”, 9080));
  // Get the LocalRequestKey for authentication
  string localRequestKey = (string)grooveSettingsRegKey.OpenSubKey(
    “WebServices”).GetValue(“LocalRequestKey”);
  ...
}

另一個可用於 Web 服務身份驗證的注冊表設置是響應鍵。每次調用 Groove Web 服務時,收到的響應中都會包含一個鍵,我可以對照 LocalResponseKey 注冊表設置來檢查其是否匹配。

帳戶和標識

每個 Groove 用戶都擁有一個帳戶,用戶要在首次啟動 Groove 時配置該帳戶。帳戶作為文件存儲在用戶計算機(或多台計算機)上,其中包含諸如加密密鑰和聯系人列表的信息。每個帳戶還具有至少一個標識,其中包含與其他 Groove 用戶共享的聯系人信息,例如電子郵件地址和電話號碼。帳戶還可以根據需要包含多個標識,(例如)用戶可以將一個標識用於業務,而將另一個標識用於個人用途(例如,與朋友共享文件)。

我可以使用 GrooveAccounts 服務來獲得計算機上的帳戶和標識的列表。如圖 5 所示,使用請求鍵和端口設置好 Web 服務調用後,我就可以使用 GrooveAccounts 服務的 Read2 方法返回一個 Account2 對象的數組。每個帳戶都具有一組集合,因此我可以加載標識列表,以便用戶可以選擇哪個標識具有消費者調查工作區,如圖 3 所示。(大多數用戶只有一個帳戶,並且其中只有一個標識。)

Figure 5 列出所有 Groove 帳戶

/ Set up the web service call for GrooveAccounts
GrooveAccounts.GrooveAccounts svc = new GrooveAccounts.GrooveAccounts();
svc.GrooveRequestHeaderValue = new GrooveAccounts.GrooveRequestHeader();
svc.GrooveRequestHeaderValue.GrooveRequestKey = localRequestKey;
svc.Url = grooveHost + “/GWS/Groove/2.0/Accounts/”;
// Get a list of all the accounts
GrooveAccounts.Account2[] accounts = svc.Read2();
// Display all identities
foreach (GrooveAccounts.Account2 account in accounts)
  foreach (GrooveAccounts.Identity2 identity in account.Identities)
    Console.WriteLine(account.Name + “, “ + identity.Name);

獲取工作區和工具的列表

確定了正在使用的標識後,我可以獲得足夠的信息來使用 GrooveSpaces 服務的 Read 方法獲得用戶的工作區列表。標識對象具有 URI 屬性,該屬性對於此標識是唯一的,並且可以用於其他大多數 Groove Web 服務調用,如圖 6 所示;另外標識對象還有 Spaces 屬性,其中包含用戶工作區的 URL。

Figure 6 列出所有 Groove 工作區

private void LoadSpaces(GrooveAccounts.Identity2 identity)
{
  // Set up the web service call for GrooveSpaces
  GrooveSpaces.GrooveSpaces svc = new GrooveSpaces.GrooveSpaces();
  svc.GrooveRequestHeaderValue =
    new GrooveSpaces.GrooveRequestHeader();
  svc.GrooveRequestHeaderValue.GrooveRequestKey = 
    GrooveSettings.RequestKey;
  svc.GrooveRequestHeaderValue.GrooveIdentityURL = identity.URI;
  svc.Url = GrooveSettings.GrooveHost + identity.Spaces;
  // Get the list of spaces
  _spaces = svc.Read(“”);
  // Load the list into a combobox
  comboWorkspaces.DisplayMember = “Name”;
  comboWorkspaces.DataSource = _spaces;
}

正如前面創建 Groove 工作區時看到的那樣,每個工作區都可以包含多個工具,例如,文件工具、討論工具和表單工具等。當用戶在客戶端應用程序中選擇了某個工作區後,我可以使用 GrooveTools 服務的 Read 方法找到包含市場調查數據的表單工具。工作區只有一個表單工具,因此我只需查找名為“表單”的工具即可,但如果我想提供更加詳細的內容,也可以列出所有類型合適的工具,讓用戶根據具體情況自己選擇。

從 Groove 表單提取數據

現在我的方案已經萬事俱備,我編寫的代碼可以從注冊表檢索 Groove 設置,並且可以獲得帳戶、標識、工作區和工具的列表,緊接著我要實現最初設定的要求:從 Groove 工具中提取數據,並輸入 SQL Server 數據庫以進行分析。獲取數據其實非常容易,只需使用 RecordQuery 對象設置一個查詢,對我想獲取的記錄加以描述,然後將其傳遞給 GrooveForms2 服務的 QueryRecords 方法,如下所示:

// Query ALL records in the ALL view:
GrooveForms2.RecordQuery query = new GrooveForms2.RecordQuery();
query.ViewURI = “”;
query.UnreadRecordsOnly = false;
query.QueryMetadataOnly = false;
query.IncludeFileAttachmentContent = false;
// Issue the query
GrooveForms2.Forms2RecordDataSet recordDataSet =
svc.QueryRecords(query);

如果您查看 QueryRecords 返回的 Forms2RecordDataSet 對象,就會發現有趣的事情。Forms2RecordDataSet 包含的表單架構和數據均為 XML 格式,因此我必須另外執行幾步操作才能有效使用它。處理表單數據的最簡便的方法是將 Forms2RecordDataSet 對象轉換成更為熟悉的 .NET DataSet 對象。

Groove SDK 文檔中有一節內容是專門介紹這一主題的,您也可以從本文的示例下載中找到其代碼。因此在這裡我僅簡單介紹一些比較高深的問題(尤其是這些代碼只需編寫一次即可重新用於其他地方)。原則上講,您需要新建一個數據集,並使用 ReadXmlSchema 方法設置表和列定義,方法是為架構創建一個字符串讀取器,並為字符串預設合適的 XML 版本聲明。架構創建完畢後,即可使用 ReadXml 方法加載實際數據。

這裡您需要考慮到一個與日期-時間列有關的小問題。Groove 所返回的 Forms2RecordDataSet 中的所有日期 — 時間字段均為格林威治標准時間,而在 .NET DataSet 中這些字段默認為本地時間。我可以循環遍歷 DataSet 中使用 ReadXmlSchema 方法創建的所有列,並在加載數據前將其 DateTimeMode 設置為 Utc,這樣即可避免此類問題。

加載表單數據到數據庫

現在,我可以循環遍歷 DataSet 並在 SQL Server 數據庫中為從 Groove 表單獲得的每項新記錄添加新的行。由於用戶可以無限次地執行該過程,因此我需要使用某種機制來避免將重復的記錄加載到數據庫。

Groove 表單中的每項記錄都有一個由系統生成的字段,稱為 _RecordID,這是該記錄的唯一標識。如果加載記錄到數據庫時包含此字段,則可以利用它來檢查記錄是否已添加到數據庫,如果已經添加,則更新現有的數據庫行,而不插入重復行。這樣可以確保從上次執行該過程起至今所有已修改的問卷記錄都能在 SQL Server 數據庫中得到正確的反映。

總結

如果您需要為分散的團隊構建協作解決方案,但從頭開發不僅造價高昂,而且難度很大,那麼 Groove 將為您提供一個非常理想的環境。不管您是喜歡使用諸如文件共享和表單的預設工具,還是要建立全新的基於 API 的應用程序,Groove 都是一個功能強大的工具。

下載本文中所用的代碼:http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/Groove2007_05.exe

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved