在實(shí)際生活中,用戶常常需要在外出和無法訪問企業(yè)網(wǎng)絡(luò)的同時仍然可以收集信息。例如,消費(fèi)者研究組織可能會派遣工作人員到現(xiàn)場邀請人們填寫問卷調(diào)查,然后再將這些數(shù)據(jù)手動輸入數(shù)據(jù)庫。如果要編寫能夠在現(xiàn)場使用的自定義應(yīng)用程序來實(shí)現(xiàn)這一過程的自動化,往往需要解決諸如管理本地數(shù)據(jù)存儲并保持其與服務(wù)器數(shù)據(jù)庫同步等問題。 在本文中,我將 microsoft® office Groove™ 2007 中特有的協(xié)作功能集成到我自定義的 microsoft .NET Framework 應(yīng)用程序中,并為您介紹如何使用這些協(xié)作功能來解決上述問題。Groove 為團(tuán)隊(duì)成員之間進(jìn)行協(xié)作性數(shù)據(jù)收集和安全數(shù)據(jù)同步提供了功能豐富的客戶端,而我將使用自定義的 .NET Framework 應(yīng)用程序?qū)?shù)據(jù)連接到企業(yè)數(shù)據(jù)庫。 Groove 提供了一個供團(tuán)隊(duì)協(xié)作的環(huán)境,成員們不受他們所連接的網(wǎng)絡(luò)的影響,可以實(shí)現(xiàn)跨組織共享數(shù)據(jù)。也就是說,參與者不必位于同一網(wǎng)絡(luò)。正是由于這一點(diǎn),當(dāng)您在不請求 IT 部門協(xié)助的情況下與雇員、伙伴和客戶展開協(xié)作時,Groove 就成為您的絕佳工具。對于某些移動方案,如果用戶需要在脫機(jī)時仍能訪問和更新共享數(shù)據(jù),并且在返回連接模式時可以自動同步數(shù)據(jù),那么 Groove 也是理想的選擇。 Groove 2007 是 2007 microsoft office System Ultimate 版本和 Enterprise 版本的組成部分,但也可以作為單獨(dú)產(chǎn)品來購買。您還可以從 microsoft.com/downloads 下載安裝免費(fèi)的 Groove 試用版,還可以獲得 Groove SDK。
您可以使用 Groove 預(yù)設(shè)的文件共享和討論等功能構(gòu)建屬于自己的協(xié)作解決方案,操作非常簡單,只需使用相應(yīng)工具創(chuàng)建工作區(qū),再將工作區(qū)另存為可重用模板即可。如果您需要更大的靈活性,還可以構(gòu)建自定義應(yīng)用程序,通過基于 Web 服務(wù)的 API 充分利用 Groove 中的各項(xiàng)安全協(xié)作功能。 就本文所提到的消費(fèi)者調(diào)查應(yīng)用程序解決方案而言,使用應(yīng)用程序的調(diào)查人員會使用 Tablet PC 在商場填寫問卷。理想的解決方案應(yīng)保證用戶在脫機(jī)的同時能夠正常工作,并可以稍后對不同調(diào)查人員收集的信息進(jìn)行合并。在實(shí)踐中,調(diào)查人員最好能夠找到提供公共 Internet 連接的咖啡館,利用解決方案自動并且安全地與所有參與者同步信息。 設(shè)計(jì)解決方案的第一步需要調(diào)查協(xié)調(diào)員在 Groove 中新建一個工作區(qū)。每個工作區(qū)可以容納多種工具以滿足特定的要求,例如都可以包括用于滿足特定要求的多個工具,例如,允許參與者共享文檔的文件工具和讓人們以問答形式討論問題的討論工具。 創(chuàng)建工作區(qū)后,調(diào)查協(xié)調(diào)員要邀請所有調(diào)查人員加入工作區(qū)。邀請以通知的形式顯示給每位參與者,接到邀請后他們可以將工作區(qū)下載到其本地計(jì)算機(jī)上,F(xiàn)在,每個人都做好了協(xié)作的準(zhǔn)備,參與者對其本地工作區(qū)副本所做的任何更改(例如,添加文件或討論主題)都將在其他參與者連接到網(wǎng)絡(luò)時自動安全地傳送給他們。 Groove 2007 體系結(jié)構(gòu) 第二,所有數(shù)據(jù),無論是磁盤上的本地工作區(qū),還是所有網(wǎng)絡(luò)通信,始終是經(jīng)過加密的。這樣做的好處之一是調(diào)查人員只需通過公共 Internet 連接建立連接即可同步其更改。不需要讓所有參與者都通過虛擬專用網(wǎng)絡(luò) (VPN) 訪問企業(yè)資源,因?yàn)樽詣油揭驯患用堋? 盡管 Groove 的大部分組件是基于客戶端的,但它仍然提供了幾個服務(wù)器組件。Groove 使用中繼服務(wù)器充當(dāng)存儲和轉(zhuǎn)發(fā)服務(wù),以便客戶端可以使用標(biāo)準(zhǔn)協(xié)議跨越防火墻進(jìn)行通信;中繼服務(wù)器還可以為脫機(jī)用戶存儲工作區(qū)更新內(nèi)容的臨時加密副本。此外還設(shè)有一個管理服務(wù)器,以便管理員可以管理所有用戶的許可證和策略設(shè)置。 單個 Groove 用戶可以在安裝客戶端時創(chuàng)建自己的帳戶,客戶端將自動使用由 microsoft 托管的中繼服務(wù)器。Groove 用戶數(shù)量很多的大型企業(yè)可以選擇將 office Groove Server 2007 部署為其體系架構(gòu)的一部分,以便更好地控制許可證管理,并可以完成諸如與 Active Directory® 集成等工作。中小型企業(yè)可以購買 office Groove Enterprise 服務(wù)的訂閱,這樣他們就可以訪問管理工具的托管版本,無需部署自己的體系架構(gòu)即可實(shí)現(xiàn)集中的控制。 ![]()
在我的解決方案中,工作區(qū)必須包括調(diào)查人員需要每位接受調(diào)查的消費(fèi)者填寫的問卷表單。Groove 中有一個用于設(shè)計(jì)自定義表單的表單工具,我可以使用該工具指定表單的字段,包括數(shù)據(jù)類型、標(biāo)題和其他屬性等。然后,參與者可以將數(shù)據(jù)添加到工作區(qū)中,如圖 1 所示。 ![]() 圖 1 帶有表單工具的 Groove 工作區(qū) (單擊該圖像獲得較小視圖) ![]() 圖 1 帶有表單工具的 Groove 工作區(qū) (單擊該圖像獲得較大視圖) 為構(gòu)建自定義的解決方案,表單中還可以包含 javascript 或 VBScript,以增強(qiáng)其功能。而且,由于表單使用 DHTML 和 CSS,因此在 UI 樣式和格式方面具有一定的靈活性。如果您的組織正在使用 InfoPath® 表單,則可以不必使用 Groove 的內(nèi)置表單,利用 Groove InfoPath Forms 工具即可導(dǎo)入基于 xml 的 InfoPath 表單定義。 調(diào)查人員在將包含自定義表單的工作區(qū)下載到自己的 Tablet PC 后即可斷開連接,并可以使用表單在調(diào)查現(xiàn)場添加記錄。當(dāng)他們重新連接到網(wǎng)絡(luò)時,添加的所有記錄都將安全地與其他參與者同步。調(diào)查協(xié)調(diào)員將收到 Groove 的彈出通知,得知工作區(qū)有新的未讀數(shù)據(jù)。 當(dāng)然,從調(diào)查人員手中收集數(shù)據(jù)只是 Groove 強(qiáng)大功能的一部分。來自各個問卷的所有數(shù)據(jù)完成同步后,調(diào)查協(xié)調(diào)員需要將這些數(shù)據(jù)加載到企業(yè)的數(shù)據(jù)庫中,以進(jìn)行進(jìn)一步的分析。企業(yè)的分析人員將使用 sql Server™ 數(shù)據(jù)庫、Analysis Services 多維數(shù)據(jù)集和 excel® 商務(wù)智能功能來了解調(diào)查結(jié)果并提出一些建議。 ![]()
為了從 Groove 工作區(qū)獲取數(shù)據(jù)并將其輸入公司數(shù)據(jù)庫,調(diào)查協(xié)調(diào)員可以從 Groove 表單工具以 CSV(逗號分隔值)格式手動導(dǎo)出數(shù)據(jù),再將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中。但如果需要在有數(shù)據(jù)可用時才將調(diào)查數(shù)據(jù)加載到數(shù)據(jù)庫,而不是一次全部加載完畢,則采取手動過程很快會變得難以管理。 更好的解決方案是構(gòu)建自定義的 .NET Framework 應(yīng)用程序,使用 Groove 基于 Web 服務(wù)的 API 來讀取現(xiàn)場調(diào)查人員輸入的數(shù)據(jù)。調(diào)查協(xié)調(diào)員只需將該應(yīng)用程序安裝在自己的 PC 上,即可同時訪問 Groove 工作區(qū)和 sql Server 數(shù)據(jù)庫,因?yàn)榕c現(xiàn)場的調(diào)查人員相比,她不僅可以連接到公共 Internet,而且還可以連接到公司網(wǎng)絡(luò)(如圖 2 所示)。 ![]() 圖 2 Groove 工作區(qū)用戶和 sql Server 數(shù)據(jù)庫 (單擊該圖像獲得較小視圖) ![]() 圖 2 Groove 工作區(qū)用戶和 sql Server 數(shù)據(jù)庫 (單擊該圖像獲得較大視圖) 這種方法與將 Groove 和 Windows® SharePoint® 服務(wù) (WSS) 3.0 進(jìn)行集成的方式是相似的。團(tuán)隊(duì)可以使用 Groove 工作區(qū)進(jìn)行文檔協(xié)作,然后將完成的文檔發(fā)布到 SharePoint 文檔庫,這樣企業(yè)內(nèi)部的每個人都可以利用 SharePoint 的搜索和工作流等功能。此方法的原理是由有權(quán)同時訪問 Groove 和 SharePoint 站點(diǎn)的人將 SharePoint Files 工具添加到工作區(qū),并將其連接到 SharePoint 文檔庫。現(xiàn)在,工作區(qū)所有參與者都獲得了所有文檔的副本,并且可以提交更改,這樣一來,已連接的用戶就可以在需要時將更改同步到 SharePoint 文檔庫。 ![]()
雖然我正在開發(fā)客戶端應(yīng)用程序,但 Groove 的編程模型仍然使用 Web 服務(wù),而不是托管 API。這種編程方式讓人有些費(fèi)解,因?yàn)榭蛻舳藨?yīng)用程序正在調(diào)用實(shí)際上運(yùn)行于同一計(jì)算機(jī)上的 Web 服務(wù)。即使計(jì)算機(jī)與網(wǎng)絡(luò)斷開連接,這些服務(wù)仍然是可用的 — Groove 客戶端本身會應(yīng)答這些請求。對于更大型的企業(yè)解決方案,可以采用 Groove Server Data Bridge,這是一款基于服務(wù)器的產(chǎn)品,其編程模型是類似的,但我決定在解決方案中采用客戶端。 為了創(chuàng)建如圖 3 所示的客戶端應(yīng)用程序,我首先要在項(xiàng)目中為需要訪問的每個 Groove 服務(wù)添加 Web 引用。由于 Groove SDK 提供了每個服務(wù)的 WSDL 文件,因此我先指定了到相關(guān) .wsdl 文件的路徑,然后將 Web 引用的名稱從默認(rèn)的“Web 引用”更改為意義更為明確的名稱,再單擊“添加引用”按鈕。在此應(yīng)用程序中,我打算使用 GrooveAccounts、GrooveForms2、GrooveSpaces 和 GrooveTools 這幾個服務(wù)。 ![]() 圖 3 加載 Groove 數(shù)據(jù)到 sql Server 數(shù)據(jù)庫 (單擊該圖像獲得較小視圖) ![]() 圖 3 加載 Groove 數(shù)據(jù)到 sql Server 數(shù)據(jù)庫 (單擊該圖像獲得較大視圖) ![]()
在可以調(diào)用 Web 服務(wù)之前,我需要知道 Groove 使用哪些端口,默認(rèn)端口為 9080,但我應(yīng)當(dāng)從當(dāng)前用戶的 GrooveLocalHTTPPort 注冊表設(shè)置中對其進(jìn)行檢索。另外我還需要為每個調(diào)用提供一個稱為請求鍵的值,Web 服務(wù)將通過它對調(diào)用方進(jìn)行驗(yàn)證。我可以從 LocalRequestKey 注冊表設(shè)置中檢索此鍵值,如圖 4 所示。請求鍵會在每次 Groove 重新啟動時隨機(jī)重新生成,因此在每次調(diào)用前,應(yīng)在注冊表對其進(jìn)行檢索,以防在上一次檢索后該鍵又重新生成新的值。 另一個可用于 Web 服務(wù)身份驗(yàn)證的注冊表設(shè)置是響應(yīng)鍵。每次調(diào)用 Groove Web 服務(wù)時,收到的響應(yīng)中都會包含一個鍵,我可以對照 LocalResponseKey 注冊表設(shè)置來檢查其是否匹配。 ![]()
每個 Groove 用戶都擁有一個帳戶,用戶要在首次啟動 Groove 時配置該帳戶。帳戶作為文件存儲在用戶計(jì)算機(jī)(或多臺計(jì)算機(jī))上,其中包含諸如加密密鑰和聯(lián)系人列表的信息。每個帳戶還具有至少一個標(biāo)識,其中包含與其他 Groove 用戶共享的聯(lián)系人信息,例如電子郵件地址和電話號碼。帳戶還可以根據(jù)需要包含多個標(biāo)識,(例如)用戶可以將一個標(biāo)識用于業(yè)務(wù),而將另一個標(biāo)識用于個人用途(例如,與朋友共享文件)。 我可以使用 GrooveAccounts 服務(wù)來獲得計(jì)算機(jī)上的帳戶和標(biāo)識的列表。如圖 5 所示,使用請求鍵和端口設(shè)置好 Web 服務(wù)調(diào)用后,我就可以使用 GrooveAccounts 服務(wù)的 Read2 方法返回一個 Account2 對象的數(shù)組。每個帳戶都具有一組集合,因此我可以加載標(biāo)識列表,以便用戶可以選擇哪個標(biāo)識具有消費(fèi)者調(diào)查工作區(qū),如圖 3 所示。(大多數(shù)用戶只有一個帳戶,并且其中只有一個標(biāo)識。) ![]()
確定了正在使用的標(biāo)識后,我可以獲得足夠的信息來使用 GrooveSpaces 服務(wù)的 Read 方法獲得用戶的工作區(qū)列表。標(biāo)識對象具有 URI 屬性,該屬性對于此標(biāo)識是唯一的,并且可以用于其他大多數(shù) Groove Web 服務(wù)調(diào)用,如圖 6 所示;另外標(biāo)識對象還有 Spaces 屬性,其中包含用戶工作區(qū)的 URL。 正如前面創(chuàng)建 Groove 工作區(qū)時看到的那樣,每個工作區(qū)都可以包含多個工具,例如,文件工具、討論工具和表單工具等。當(dāng)用戶在客戶端應(yīng)用程序中選擇了某個工作區(qū)后,我可以使用 GrooveTools 服務(wù)的 Read 方法找到包含市場調(diào)查數(shù)據(jù)的表單工具。工作區(qū)只有一個表單工具,因此我只需查找名為“表單”的工具即可,但如果我想提供更加詳細(xì)的內(nèi)容,也可以列出所有類型合適的工具,讓用戶根據(jù)具體情況自己選擇。 ![]()
現(xiàn)在我的方案已經(jīng)萬事俱備,我編寫的代碼可以從注冊表檢索 Groove 設(shè)置,并且可以獲得帳戶、標(biāo)識、工作區(qū)和工具的列表,緊接著我要實(shí)現(xiàn)最初設(shè)定的要求:從 Groove 工具中提取數(shù)據(jù),并輸入 sql Server 數(shù)據(jù)庫以進(jìn)行分析。獲取數(shù)據(jù)其實(shí)非常容易,只需使用 RecordQuery 對象設(shè)置一個查詢,對我想獲取的記錄加以描述,然后將其傳遞給 GrooveForms2 服務(wù)的 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 queryGrooveForms2.Forms2RecordDataSet recordDataSet = svc.QueryRecords(query); 如果您查看 QueryRecords 返回的 Forms2RecordDataSet 對象,就會發(fā)現(xiàn)有趣的事情。Forms2RecordDataSet 包含的表單架構(gòu)和數(shù)據(jù)均為 xml 格式,因此我必須另外執(zhí)行幾步操作才能有效使用它。處理表單數(shù)據(jù)的最簡便的方法是將 Forms2RecordDataSet 對象轉(zhuǎn)換成更為熟悉的 .NET DataSet 對象。 Groove SDK 文檔中有一節(jié)內(nèi)容是專門介紹這一主題的,您也可以從本文的示例下載中找到其代碼。因此在這里我僅簡單介紹一些比較高深的問題(尤其是這些代碼只需編寫一次即可重新用于其他地方)。原則上講,您需要新建一個數(shù)據(jù)集,并使用 ReadXmlSchema 方法設(shè)置表和列定義,方法是為架構(gòu)創(chuàng)建一個字符串讀取器,并為字符串預(yù)設(shè)合適的 xml 版本聲明。架構(gòu)創(chuàng)建完畢后,即可使用 ReadXml 方法加載實(shí)際數(shù)據(jù)。 這里您需要考慮到一個與日期-時間列有關(guān)的小問題。Groove 所返回的 Forms2RecordDataSet 中的所有日期 — 時間字段均為格林威治標(biāo)準(zhǔn)時間,而在 .NET DataSet 中這些字段默認(rèn)為本地時間。我可以循環(huán)遍歷 DataSet 中使用 ReadXmlSchema 方法創(chuàng)建的所有列,并在加載數(shù)據(jù)前將其 DateTimeMode 設(shè)置為 Utc,這樣即可避免此類問題。 ![]()
現(xiàn)在,我可以循環(huán)遍歷 DataSet 并在 sql Server 數(shù)據(jù)庫中為從 Groove 表單獲得的每項(xiàng)新記錄添加新的行。由于用戶可以無限次地執(zhí)行該過程,因此我需要使用某種機(jī)制來避免將重復(fù)的記錄加載到數(shù)據(jù)庫。 Groove 表單中的每項(xiàng)記錄都有一個由系統(tǒng)生成的字段,稱為 _RecordID,這是該記錄的唯一標(biāo)識。如果加載記錄到數(shù)據(jù)庫時包含此字段,則可以利用它來檢查記錄是否已添加到數(shù)據(jù)庫,如果已經(jīng)添加,則更新現(xiàn)有的數(shù)據(jù)庫行,而不插入重復(fù)行。這樣可以確保從上次執(zhí)行該過程起至今所有已修改的問卷記錄都能在 sql Server 數(shù)據(jù)庫中得到正確的反映。 總結(jié) |
|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國
( 粵ICP備10043721號-1 )
GMT+8, 2025-7-13 08:12 , Processed in 0.067618 second(s), 16 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.