国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      非集成工具的集成體系結構的制作方法

      文檔序號:6539411閱讀:170來源:國知局

      專利名稱::非集成工具的集成體系結構的制作方法
      技術領域
      :本發(fā)明涉及應用程序接口及其使用。
      背景技術
      :傳統(tǒng)上,存在獨立的軟件工具,然而當它們在一起使用時,能夠提供更凝聚且更改進的用戶體驗。這樣的環(huán)境向第三方銷售商和其他人提供了一種手段,以提供增強應用程序和文檔開發(fā)的工具。需要的是一種允許訪問非集成工具的特征的鏈接體系結構。
      發(fā)明內容以下內容提出了本發(fā)明的簡化概述,以提供對本發(fā)明的某些概念的基本理解。本概述并非本發(fā)明的廣泛綜述。它并不意味著標識本發(fā)明的關鍵/決定性元素,或描繪本發(fā)明的范圍。其唯一的目的是以簡化的形式提出本發(fā)明的某些概念,作為對以后提出的更詳細描述的序言。在其一個方面,此處所揭示并要求保護的本發(fā)明包括便于非集成應用程序、服務或工具的集成的體系結構。所揭示的集成服務(IS)是一種允許松耦合并個別地構建的工具通過技術和約定的組合來提供簡單數據集成的輕便體系結構。由此,它提供了由常用存儲庫提供的某些核心益處,而無需該存儲庫本身。例如,IS包括源控制和缺陷跟蹤,其每一個是用所記住的不同原理來單獨設計的。通過引入一種標準方式來標識由每一工具變得公用的主要項目(如,其人為因素),能夠使缺陷、實例指向源控制(反之亦然),而任何工具都不需要持有與另一個相似的知識。此外,第三方可用其自己的專用鏈接向IS引入新的工具,以啟用輕便數據集成,而無需對IS工具作出任何修改。所揭示的是用于啟用未被構建成集成的工具之間的集成的一組應用編程接口(API)和約定。這一解決方案向參與者提供了作出小成本和低承諾的存儲庫的大部分益處。它提供了用于開發(fā)工具的基于服務器的合伙者集成和客戶機集成的體系結構。作為支持,提供了一種系統(tǒng),它包括展現(xiàn)一個或多個全異應用程序的人為因素的人為因素提供者,和展現(xiàn)與到該人為因素提供者的人為因素的鏈路相關聯(lián)的引用的人為因素消費者。一個鏈接組件有利于鏈接提供者人為因素和消費者引用。在本發(fā)明的另一方面,提供了一高速緩存人為因素和人為因素緩存的鏈接高速緩存,以及鏈接。在本發(fā)明的又一方面,提供了一種便于呈現(xiàn)人為因素間引用的用戶界面。在本發(fā)明的再一方面,提供了一種至少便于高速緩存與每一工具的同步的鏈接管理器。在本發(fā)明的另一方面,提供了一種廣義人為因素提供者(GAP),其中,來自一人為因素提供者和消費者的所有方法由該GAP實現(xiàn)。廣義人為因素方案格式的人為因素被推入GAP數據庫中。為實現(xiàn)上述和相關目的,此處結合以下描述和附圖描述了本發(fā)明的某些說明性方面。然而,這些方面僅表明了可在其中采用本發(fā)明的原理的多種方法中的幾種,本發(fā)明旨在包括所有這樣的方面及其等效方面。當結合附圖考慮以下本發(fā)明的詳細描述時,可以清楚本發(fā)明的其它優(yōu)點和新穎特征。圖1示出了本發(fā)明的一個系統(tǒng)。圖2示出了依照本發(fā)明的過程的流程圖。圖3示出了消費者和提供者的鏈接方案,以及引用和被引用的人為因素關聯(lián)。圖4示出了便于呈現(xiàn)人為因素依賴性的用戶界面(UI)。圖5示出了依照本發(fā)明的GAPAPI的一種實現(xiàn)的框圖。圖6示出了準備非集成工具以使用GAP的一種實現(xiàn)的流程圖。圖7示出了用于GAP和高速緩存的廣義人為因素數據庫方案(GADS)。圖8示出了依照本發(fā)明實現(xiàn)GAP的一種方法的流程圖。圖9示出了依照本發(fā)明實現(xiàn)GAP適配程序的一種方法的流程圖。圖10示出了依照本發(fā)明便于訪問非集成工具的系統(tǒng)。圖11示出了依照本發(fā)明的高速緩存的一種實現(xiàn)的過程的流程圖。圖12示出了可用于執(zhí)行所揭示的體系結構的計算機的框圖。圖13示出了依照本發(fā)明的示例性計算環(huán)境的示意性框圖。具體實施例方式現(xiàn)在參考附圖來描述本發(fā)明,貫穿附圖,相同的標號用于指相同的元素。在以下描述中,為解釋目的,陳述了眾多具體細節(jié),以提供對本發(fā)明的完整了解。然而,很明顯,本發(fā)明可以不用這些具體細節(jié)來實施。在其它實例中,以框圖形式示出了眾所周知的結構和設備,以便于描述本發(fā)明。如本申請中所使用的,術語“組件”和“系統(tǒng)”指的是計算機相關的實體,無論是硬件、硬件和軟件的組合、軟件還是執(zhí)行中的軟件。例如,組件可以是,但不限于,運行在處理器上的進程、處理器、對象、可執(zhí)行碼、執(zhí)行線程、程序和/或計算機。作為說明,運行在服務器上的應用程序和服務器都可以是組件。一個或多個組件可駐留在進程和/或執(zhí)行線程中,并且組件可位于一個計算機上和/或在兩個或多個計算機之間分布。如此處所使用的,術語“推斷”或“推導”一般指從一組通過事件和/或數據捕捉的觀察中推出或推斷系統(tǒng)、環(huán)境和/或用戶的狀態(tài)的過程。例如,推斷可用于標識特定的上下文或行動,或可生成狀態(tài)的概率分布。推斷可以是概率性的一即,基于數據和事件的考慮的感興趣的狀態(tài)的概率分布的計算。推斷也可以指用于從一組事件和/或數據組成更高級事件的技術。這類推斷導致從一組觀察的事件和/或儲存的事件數據構造新的事件或行動,無論事件是否在相鄰的時間上相關,也無論事件是否來自一個或若干個事件和數據源。定義以下術語貫穿整個描述使用,此處提供了其定義以幫助理解本發(fā)明的各方面。人為因素工具公用地展示的任何數據項,使得其它工具可持有指向它的指針。每一人為因素必需是一種人為因素類型。每一人為因素必需由唯一且不變的人為因素標識符來標識。例如源文件foo.cs、工作項125、來自構建20041205.3的測試結果。人為因素消費者非正式地而言,展示它所持有的對由人為因素提供者主持的人為因素的引用的工具或服務。更正式地而言,展示它所持有的對由人為因素提供者主持的人為因素的引用的服務。例如,C的工作項(其本身是人為因素)可持有對P的變化設置的引用,該變化設置是當工作項被處理時所登記的。在這一情況下,C是人為因素消費者,而P是人為因素提供者。人為因素消費者必須提供某些標準行為。注意,由于在定義中鏈接是在兩個人為因素之間的,因此人為因素消費者必須也是人為因素提供者。人為因素標識符特定人為因素的唯一、不變標識符的對象化版本(ArtifactUri)。人為因素標識符中的屬性符合URI規(guī)則。人為因素提供者非正式地而言,一種工具或服務主持并展現(xiàn)人為因素消費者可鏈接到其上的人為因素。更正式地而言,它是展現(xiàn)人為因素的服務。例如,C通過web服務展現(xiàn)類型缺陷、要求和任務的人為因素,令其成為人為因素提供者。人為因素提供者必須提供某些標準行為。注意,由于在定義中鏈接是在兩個人為因素之間的,因此許多人為因素提供者也可以是人為因素消費者。人為因素代理由廣義人為因素提供者(GAP)儲存的人為因素,它表示儲存在啟用了非集成服務的存儲中的數據。人為因素類型工具公共地展現(xiàn)的數據的類型。特定人為因素類型的人為因素具有與該類型的其它人為因素的公用鏈接類型集。示例包括但不限于,源文件、缺陷、要求、測試結果和構建。人為因素URI符合格式良好的特定規(guī)則的統(tǒng)一資源標識符。集成服務(IS)Uri的同義詞。集成服務(IS)允許通過技術和約定的組合對松耦合且單獨構建的非集成工具的簡單數據集成的所揭示的輕便體系結構。尚未由IS體系結構啟用的任何服務或工具被稱為“非IS”或也被稱為非集成。IS名字空間對應于啟用IS的產品和人為因素的集合的名字空間,它可以被認為是“邏輯服務器”,其中,其物理元素可以分散跨越多個物理服務器。工具在安裝時向IS名字空間注冊它們本身,并且所有的工具都可通過IS位置表來訪問。每一人為因素由一個IS名字空間擁有。ISUri符合格式良好的IS專用規(guī)則的統(tǒng)一資源標識符。ArtifactUri的同義詞。外部標識符在ISGAP的上下文中是有意義的。指某標識符未啟用IS的工具將通過之引用人為因素。廣義人為因素提供商ISGAP是提供了IS的設備,它啟用了人為因素代理的構造,以向未完全啟用IS的工具告知人為因素處理行為。廣義人為因素方案(GAS)用于描述人為因素集合的公用方案。每一人為因素包括其擴展的屬性和它所持有的到其它人為因素的鏈接。廣義鏈接方案(GLS)用于描述鏈接的集合的公用方案。每一鏈接包括其引用和被引用的ArtifactUri,以及其鏈接類型。入站(inbound)鏈接來自被引用的人為因素(即,被指向的人為因素)的觀點的鏈接。到引用人為因素的入站鏈接可以使用用于人為因素消費者實現(xiàn)的標準GetReferencingArtifacts方法來發(fā)現(xiàn)。鏈接由人為因素消費者持有的指向人為因素的人為因素標識符。鏈接是二元的,并正好涉及兩個人為因素,即引用人為因素和被引用的人為因素。當工具(人為因素消費者)持有對一個不同的人為因素的人為因素標識符時,形成鏈接。每一鏈接必須是一種鏈接類型。注意,格式良好的鏈接在兩個人為因素之間,即在引用人為因素和被引用的人為因素之間。人為因素和非人為因素之間的指針不是鏈接。例如在構建20041205.4中發(fā)現(xiàn)了程序錯誤125,其中,“程序錯誤”和“構建”是人為因素類型,而“在……中發(fā)現(xiàn)”是鏈接類型。鏈接類型描述該類型的鏈接的目的??蓪⑷藶橐蛩氐娜藶橐蛩仡愋图s束到可構造哪些有效鏈接。每一鏈接包括兩個讀數(或角色),每一個來自每一(出站和入站)方向。例如在構建20041205.4中發(fā)現(xiàn)程序錯誤125,相應于構建20041205.4而被展示的程序錯誤125。松耦合在鏈接的上下文中,不需要人為因素提供者知道任何人為因素消費者的行為質量。例如,當人為因素提供者使用IS跨服務(cross-service)反轉查詢工具發(fā)出引用反轉查詢時,IS依照對所有人為因素公用的方案返回一組引用。出站鏈接來自引用人為因素(即,指向某一其它人為因素的人為因素)的觀點的鏈接。到被引用的人為因素的出站鏈接由人為因素提供者實現(xiàn)所需的標準GetArtifacts方法返回。引用反轉(也稱為反轉查詢)一般而言,引用反轉是發(fā)現(xiàn)什么項目持有指向(引用)特定項目的指針的過程。在IS中,它是發(fā)現(xiàn)哪些引用人為因素持有到特定被引用者的鏈路的過程。被引用的人為因素用于鏈接的上下文中。被引用的人為因素是引用人為因素所指向的鏈接的一側。被引用的人為因素總是由人為因素提供者主持。引用(或參考)人為因素用于鏈接的上下文中。引用人為因素是持有對被引用的人為因素的引用的鏈接的一側。它由人為因素消費者主持。緊耦合在鏈接的上下文中,需要人為因素消費者知道關于人為因素提供者的特定知識的行為質量。例如,如果提供者提供一種專用的引用反轉方法(可能包括特殊的過濾器或傳遞回主題消費者特別感興趣的特定信息)并且消費者利用其優(yōu)勢,則該交互被稱為是緊耦合的。工具專用Id(TSId)格式良好的ISUri的最終部分。工具實例、人為因素類型和工具專用Id的組合必須在IS名字空間中是唯一的。此外,TSId必須是不變的。現(xiàn)在參考圖1,示出了本發(fā)明的系統(tǒng)100。為本描述的目的,僅提供了兩種非集成工具(或服務,但是在后文總稱為工具)第一工具102和第二工具104。然而,可以理解,可以有任意數量的非集成工具可用,它們被啟用以通過采用依照本發(fā)明的一個或多個接口來交互。在本實現(xiàn)中,第一工具102是指定的提供者,而第二工具是消費者。由于兩個工具(102和104)都是非集成工具,因此本發(fā)明的接口便于展示這些工具(102和104)的數據,如可以用集成工具所完成的。所展示的數據是人為因素以及到這些人為因素的引用的形式。作為支持,人為因素提供者接口106(例如,以應用編程接口API的形式)用便于展示第一工具102的一個或多個人為因素108(表示為人為因素1、人為因素2、……、人為因素N)的第一工具102來實現(xiàn)。第二工具104將被指定為人為因素108的消費者。依照本發(fā)明,提供了展示可引用第一工具102的一個或多個人為因素108的第二工具104的一個或多個引用112(表示為引用1、引用2、……、引用M)的人為因素消費者接口110。第一工具102的人為因素108通過鏈接組件114與第二工具104的引用112相關聯(lián)。這一鏈接組件可以是消費者接口110的一部分;然而,這并非所需。鏈接組件114定義了一種鏈接,它包括指向人為因素108的至少一個的人為因素標識符。鏈接是一種鏈接類型,并且是二元的,其中它涉及兩個人為因素引用人為因素和被引用的人為因素。由此,所揭示的體系結構包括用于啟用先前未被構建成集成的工具之間的集成的一組API和約定。這提供了工具的基于服務器的合伙者集成和客戶機集成的基礎,并可方便構建第三方生態(tài)系統(tǒng)(ecosystem)的基礎?,F(xiàn)在參考圖2,示出了依照本發(fā)明的過程的流程圖。盡管為了簡化解釋的目的,此處例如以流程圖形式示出的一個或多個方法被示出和描述為一系列動作,然而可以理解和明白,本發(fā)明不由動作的順序所限制,因為依照本發(fā)明,某些動作可以用不同的順序和/或與來自此處所示出和描述的其它動作一起發(fā)生。例如,本領域的技術人員可理解和明白,方法可以替換地被表示為諸如狀態(tài)圖中的一系列相關的狀態(tài)或事件。此外,并非需要所有示出的動作來實現(xiàn)依照本發(fā)明的方法。在200,非集成工具可被使用,但仍不可用作集成工具。在204,人為因素提供者API與工具之一一起使用,以展示其人為因素以供公共使用。在206,在另一工具上采用人為因素消費者API來展示與該人為因素相關聯(lián)的引用。在208,將引用鏈接到人為因素,令工具集成。過程然后到達停止塊。現(xiàn)在參考圖3,示出了消費者和提供者的鏈接方案300,以及引用和被引用的人為因素關聯(lián)。認為因素提供者302可創(chuàng)建并展現(xiàn)多種不同類型的URI(統(tǒng)一資源標識符),用于至少支持以下實體松耦合的基于服務器的交互、松耦合的客戶機、高速緩存和緊耦合交互,它們都按與調用者的合約支持任一人為因素專用功能。如圖所示,提供者302創(chuàng)建被引用的人為因素的URI,它便于展示人為因素專用數據。人為因素消費者304持有到被引用的人為因素的鏈接、以及到引用人為因素的URI,它展現(xiàn)了人為因素專用數據。與該鏈接在一起的是鏈接類型。到被引用的人為因素的URI支持松耦合的交互和緊耦合的交互,其中,后者支持與調用者的合約的任一人為因素的專用功能。從消費者304到提供者302建立鏈接306,以向消費者304展示人為因素數據。注意,鏈接的使用既不局限于所揭示的URI表示的結構,也不局限于該URI,一般而言,它只是任一類型的鏈接機制。現(xiàn)在參考圖4,示出了便于呈現(xiàn)人為因素依賴性的用戶界面(UI)400。UI400可用于顯示來自己注冊的鏈接定義的鏈接類型信息402、來自己注冊的人為因素定義的人為因素類型信息404、來自GetArtifact的人為因素名字信息406、以及來自GetArtifact的最后一次修改的信息408。本發(fā)明的主要元素包括以下內容。持久數據包括人為因素元數據、鏈接實例和人為因素/鏈接實例高速緩存信息。對于人為因素元數據,為參與鏈接服務,每一人為因素提供者注冊它所提供的每一人為因素的人為因素類型,并注冊那些人為因素的每一個可主持的鏈接類型。對于鏈接實例(廣義人為因素提供者數據庫),對于其中很難或不方便本地儲存鏈接的那些工具,所揭示的鏈接體系結構包括一種“廣義人為因素提供者”實現(xiàn)。高速緩存便于高速緩存人為因素及其鏈接,以優(yōu)化查詢性能。公用格式和方案包括人為因素ID、廣義人為因素方案(GAS)、廣義人為因素數據庫方案(GADS)。人為因素ID是不變且唯一的構造關鍵字。它通過由人為因素提供者提供的服務來展示,并被具體化為URI。GAS是一種公用且簡寫的形式,其中,任一人為因素連同其出站鏈接一起可通過廣義請求來返回。GADS啟用了以廣義人為因素方案形式呈現(xiàn)的人為因素和鏈接的儲存。它被用作廣義人為因素提供者和人為因素/鏈接高速緩存的方案。本發(fā)明的體系結構也包括用于啟用了鏈接的人為因素提供者的API和約定。該API由參與集成的每一工具或服務實現(xiàn)。GetArtifacts(獲取人為因素)方法基于人為因素ID的串返回1:m個廣義人為因素方案格式的人為因素。通過約定,每一GetArtifact實現(xiàn)向返回符合廣義人為因素方案的人為因素的鏈接高速緩存管理器(以及該環(huán)境中的其它工具)引發(fā)Artifactchanged(人為因素改變)事件。SynchronizeArtifactCache(同步人為因素高速緩存)方法通過引發(fā)類似于ArtifactChanged的事件向高速緩存同步地報告人為因素。該體系結構也包括用于啟用了鏈接的人為因素消費者的API。該API必須由參與鏈接并持有到其它人為因素的鏈接的每一工具或服務來實現(xiàn)。GetReferencedArtifacts(獲取被引用的人為因素)方法返回指向提供的一組廣義人為因素方案格式的人為因素ID的人為因素列表。還提供了用于鏈接管理器的API。GetArtifacts方法返回可能來自多個提供者的廣義人為因素方案格式的一組人為因素。如果啟用了人為因素/鏈接高速緩存,則從其導出答復,否則就忽略,在后一情況下,提供者單獨地查詢并且總計它們的響應。GetReferencedArtifacts方法返回可能來自多個提供者的人為因素列表,它們指向所提供的一組廣義人為因素方案格式的人為因素ID。SynchronizeArtifactCache方法調用每一工具的SynchronizeArtifactCache方法,用于全高速緩存同步。該體系結構提供了用于廣義人為因素提供者(GAP)的API。來自人為因素提供者API的所有方法由GAP實現(xiàn)。來自人為因素消費者API的所有方法由GAP實現(xiàn)。UpdateArtifactData(更新人為因素數據)方法將廣義人為因素方案格式的人為因素推入GAP數據庫中。GetArtifactsByExternalID(按照外部ID獲取人為因素)方法啟用了按照標識符的GAP數據庫查詢,該標識符可能不符合ArtifactID,但是可由底層的工具理解。提供了一種可再次主持(re-hostable)的UI,用于顯示人為因素間的引用。格式良好的ISURI人為因素標識符由格式良好的ISUri構成。每一ISUri由人為因素提供者形成。盡管構成格式良好的Uri的某些元素是從IS環(huán)境中導出的,然而其它的由該工具本身提供。以下討論標識Uri的每一元素,并解釋了其值是如何導出的。以下是格式良好的ISUri的一個示例http//&lt;ISNamespace&gt;/vset/&lt;tooltype&gt;.&lt;toolinstance&gt;/{&lt;artifacttype&gt;/}&lt;tool-specificid&gt;-http是由于Uri可以出現(xiàn)在IDE(集成開發(fā)環(huán)境)之外而出現(xiàn)的常量。如果它的確出現(xiàn),則它將依照下文在“外部可尋址性”中描述的規(guī)則來處理。-每一IS邏輯服務器定義一個名字空間。&lt;ISNamespace&gt;僅是服務器的名字,如“Server22”。-vest是令ISUri能夠將串識別為ISUri的常量。-&lt;tooltype&gt;標識了由負責維護和回答關于人為因素的問題的工具(即,人為因素提供者)支持的工具接口。這令調用工具(持有鏈接的工具)能夠基于由該工具提供的接口作出關于如何處理人為因素的決策。例如vsbug、vsversionstore等。tooltype(工具類型)標識了API并由該工具指定。-&lt;toolinstance&gt;描述了負責所標識的人為因素的人為因素提供者的具體實例。組合&lt;tooltype&gt;&lt;toolinstance&gt;在IS名字空間中是唯一的。例如,tooltype實例由IS在安裝時分配,并儲存在工具中。-&lt;artifacttype&gt;(可任選)是由工具維護的人為因素的類型。如果類型是不變的(即,人為因素的類型在其生命周期內不能改變),則工具僅提供人為因素類型。人為因素類型由工具在安裝時注冊。-&lt;tool-specificid&gt;是對人為因素實例的不變引用。tool-specificid(工具專用id)由工具創(chuàng)建并維護。示例指向儲存在H中的文件的Urihttp//Server08/vset/vsversionstore.2/file/b4e3216指向C中的要求記錄的Urihttp//Server08/vset/vsbug.1/req/345編碼/解碼人為因素URI實用程序功能為鼓勵URI格式化的一致,IS提供了一對實用程序功能,以基于結構對它們進行編碼和解碼。stringEncodeUri(ArtifactIdartifactId)EnodeUri(編碼Uri)采用了類型ArtifactID的結構,并產生符合以下URL規(guī)則的串。ArtifactID.ToolInstance(以toolType.toolInstance的形式)和ArtifactID.ArtifactType的非空值由調用者提供。如果ArtifactID.ServerNamespace=null,則當前活動的名字空間的名字用于URI的ISNamespace部分。在大多數情況下,工具提供了ArtifactID.ToolSpecificID的非空值。如果ArtifactID.ToolSepcificID=null,則EncodeUri將串“&lt;?&gt;”插入到工具專用id中。該串在向廣義人為因素提供者添加人為因素時具有特殊的意義;否則,可以避免其使用。ArtifactIdDecodeUri(stringartifactUri)DecodeUri采用符合ISUri規(guī)則的串,并返回類型ArtifactId的結構。例如以下摘錄的代碼示出了使用EncodeUri方法構建人為因素ID以及轉換到格式良好的ISUri。所得的URI是http//IS001/vset/Work%20Item%20%Tracking.1/defect/5291DecodeUri反向工作。publicvoidEncodeUriExample(){ISServerProxyIS=newISServerProxy();ArtifactIdartId=newArtifactId();artId.ServerNamespace=null;artId.ToolInstance=″WorkItems.1″;artId.ArtifactType=″defect″;artId.ToolSpecificId=″5291″;stringUri=IS.EncodeUri(artId);}松耦合和緊耦合在IS鏈接環(huán)境中,工具使用鏈接來啟用松耦合行為。它們也可提供專用的接口和交互,它們通過緊耦合的行為提供了高級專用集成。其每一個在適當的上下文中都是有效的。松耦合提供以下優(yōu)點。它很容易將新的人為因素類型添加到一組人為因素中,而不會干擾預先存在的應用程序。這對第三方集成尤其有用。可能總計結果來提供用于變化類型人為因素的完整的“何處使用”圖。人為因素處理程序(提供者和消費者)可徹底改變行為,并且只要它們繼續(xù)使用廣義鏈接接口,所有松耦合的行為都可以繼續(xù)工作。提供緊耦合行為的工具利用了符合鏈接服務的鏈接,但是它們不利用廣義鏈接接口。相反,人為因素消費者利用了由人為因素提供者提供了特定接口。這些行為可用于提供跨工具的行為,它對參與的工具是非常專用的。當對被引用的人為因素提供者未知的引用人為因素中存在指向被引用的人為因素的指針時,可以使用松耦合。例如—第三方測試情況管理工具被引入到該套件中。它啟用了IS并由此提供了例如構建對缺陷的鏈接的機制。缺陷不需要知道這一引用人為因素的新類型,以在反轉查詢中顯示關于它的信息。當引用人為因素指向它不了解的被引用的人為因素類型時,以及當對被引用的人為因素可用的行為不被引用人為因素影響時,也可使用松耦合。例如—在IDE中,當用戶希望看見哪些工作項目與構建相關聯(lián)時,在構建的反轉查詢UI中返回工作項目的列表。同樣地,當用戶希望看見哪些工作項目被特定的變化設置影響時,在變化設置的反向查詢UI中返回工作項目的列表。在任一情況下,用戶應當能夠雙擊任一工作項目,并且會顯示該窗口的文檔窗口。無論引用人為因素是構建的還是變化設置的,期望的行為都是相同的;由此,行為不受引用人為因素的影響(在這兩個情況下)。松耦合的交互通過(a)遵循IS約定,以及(b)實現(xiàn)標準接口的人為因素提供者和消費者來啟用。工具如何參與鏈接提供人為因素的每一工具是人為因素提供者。人為因素提供者注冊其人為因素類型,并實現(xiàn)令松耦合工具能夠讀取這些人為因素的一組接口。人為因素提供者責任在“人為因素提供者義務”中有詳細描述。也包含到其它人為因素的鏈接的人為因素提供者是人為因素消費者。人為因素消費者具有提供者之外的某些附加義務。它注冊鏈接類型,并提供標準方法來答復查詢和反向查詢。人為因素消費者責任在“人為因素消費者義務”中有詳細描述。最后,IS本身提供了用于注冊、發(fā)現(xiàn)和跨服務鏈接查詢的若干設備,在“ISAPI”中有詳細描述。人為因素提供者義務主持人為因素的任何工具是人為因素提供者。人為因素提供者具有以下責任,其中一些是可任選的,另一些是強制的。在注冊時,每一人為因素提供者向IS注冊其主持的每一人為因素類型、注冊它可引發(fā)的任何事件(包括人為因素改變事件)、注冊其提供者web服務接口的URL、提供可對它所擁有的每一人為因素返回ISUri的web服務接口、提供可用于檢索它所擁有的每一人為因素類型的實例的GetArtifacts方法、可包括人為因素的Uri作為返回人為因素實例的每一方法中的返回值、當它所擁有的人為因素以促使該人為因素的GetArtifacts方法執(zhí)行返回不同結果的方式被創(chuàng)建、刪除或改變時引發(fā)事件、提供對它所提供的每一人為因素類型處理外部可尋址性的方法、以及可實現(xiàn)響應于對它所擁有的人為因素的IDE內請求的客戶機API(ExecuteDefaultAction(執(zhí)行默認行動)、GetAllowableActions(獲取可允許的行動)、ExecuteAction(執(zhí)行行動))。IS和其它可使用它來提供人為因素消費者和提供者之間的未耦合的訪問。人為因素類型注冊人為因素類型和鏈接類型的注冊在安裝時發(fā)生。每一工具準備一符合IS注冊服務XML(可擴充標記語言)方案的XML文檔。以下信息對每一人為因素類型是必需的負責該類型的人為因素的提供者;人為因素類型名稱(不可定位);以及人為因素類型標簽(可定位)。以下信息對每一鏈接類型是必需的引用人為因素的人為因素類型名稱;鏈接類型名稱(不可定位);鏈接類型標簽(可定位);反向鏈接類型標簽(可定位);以及可任選地被引用人為因素類型數組。對于鏈接類型標簽,前向和反向用于提供任一方向上的讀數,如manbitesdog、dogisbittenbyman。如果被引用的人為因素類型為空,則鏈接的被引用的一端無類型。即,該類型的鏈接可指向任何人為因素。被引用的人為因素類型數組中的每一元素指示被引用的人為因素類型服務和被引用的人為因素類型名稱兩者。提供者服務器API-IToolServerLinking人為因素提供者提供了GetArtifacts方法來檢索它所擁有的每一人為因素類型的實例。GetArtifacts方法采用Uri數組作為輸入。返回值是符合廣義人為因素顯示方案(GAS)的對象數組。Artifact[]GetArtifacts(string[]ArtifactUriList)GetArtifacts可采用ISUri形式的人為因素Id的數組。提供者負責為以GAS格式標識的每一人為因素Id返回一人為因素實例。例如給定以下內容名為“IS001”的IS名字空間,以及向IS001注冊的名為“WorkItems.1”的缺陷跟蹤工具;以及兩個工作項目Defect(缺陷)152和Requirement(要求)153。最后,構想名為ArtifactUri[]的數組,它具有這兩種元素http//IS001/vset/WorkItems.1/Defect/152和http//IS001/vset/WorkItems.1/Req/153這一調用之后MyArtifacts的值為Artifact[]MyArtifacts=workItemTool.GetArtifacts(ArtifactUri[])一旦被串行化,它看上去類似于以下XML文檔&lt;?xmlversion=″1.0″encoding=″utf-8″?&gt;&lt;Artifactsxmlns=″http//www.company.com/Tool/GenericArtifactSchema.xsd″&gt;&lt;Artifact&gt;&lt;Uri&gt;http//IS001/vset/WorkItems.1/Defect/152&lt;/Uri&gt;&lt;ProviderName&gt;MSWorkItemTracking&lt;/ProviderName&gt;&lt;Title&gt;152(Open)&lt;/Title&gt;&lt;Type&gt;Defect&lt;/Type&gt;&lt;LastChangedOn&gt;2003-10-24T20:47:58.170&lt;/LastChangedOn&gt;&lt;LastChangedBy&gt;dminium&lt;/LastChangedBy&gt;&lt;ExtendedAttributes&gt;&lt;ExtendedAttribute&gt;&lt;Name&gt;Status&lt;/Name&gt;&lt;Value&gt;Open&lt;/Value&gt;&lt;/ExtendedAttribute&gt;&lt;ExtendedAttribute&gt;&lt;Name&gt;AssignedTo&lt;/Name&gt;&lt;Value&gt;AllenClark(allclark)&lt;/Value&gt;&lt;/ExtendedAttribute&gt;&lt;/ExtendedAttributes&gt;&lt;Links&gt;&lt;Link&gt;&lt;LinkType&gt;dependson&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/WorkItems.1/Defect/173&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;LinkType&gt;foundin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/Builds.1/Build/2003.11.15&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;LinkType&gt;checkedin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/Hat.1/ChangeSet/987Urt5B&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;/Links&gt;&lt;/Artifact&gt;&lt;Artifact&gt;&lt;Uri&gt;http//IS001/vset/WorkItems.1/Req/153&lt;/Uri&gt;&lt;ProviderName&gt;WorkItemTracking&lt;/ProviderName&gt;&lt;Title&gt;153(InWork)&lt;/Title&gt;&lt;Type&gt;Requirement&lt;/Type&gt;&lt;LastChangedOn&gt;2003-10-27T20:36:52.170&lt;/LastChangedOn&gt;&lt;LastChangedBy&gt;eeykholt&lt;/LastChangedBy&gt;&lt;ExtendedAttributes&gt;&lt;ExtendedAttribute&gt;&lt;Name&gt;Status&lt;/Name&gt;&lt;Value&gt;InWork&lt;/Value&gt;&lt;/ExtendedAttribute&gt;&lt;ExtendedAttribute&gt;&lt;Name&gt;AssignedTo&lt;/Name&gt;&lt;Value&gt;RajSelvaraj(naselvar)&lt;/Value&gt;&lt;/ExtendedAttribute&gt;&lt;/ExtendedAttributes&gt;&lt;Links&gt;&lt;Link&gt;&lt;LinkType&gt;authoredin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/Teamhare/ReqDoc/38976FBA&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;LinkType&gt;dependson&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/WorkItems.1/Defect/173&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;/Links&gt;&lt;/Artifact&gt;&lt;/Artifacts&gt;SynchronizeArtifactCache方法SynchronizeArtifactCache方法用于當被破壞時重建人為因素高速緩存。voidSynchronizeArtifactCache()SynchronizeArtifactCache方法由IS調用,以啟動對由人為因素消費者持有的前向鏈接的完整組的通知。人為因素消費者必須對其每一人為因素引發(fā)一CacheArtifact事件(多個人為因素可以被包裝到單個事件中)。IS傾聽這些事件,并使用結果來填充可用于解析簡單查詢的鏈接高速緩存,而無需調用消費者的GetArtifacts或GetReferencingArtifacts方法。voidSynchronizeArtitactCache(DateTimefrom,DateTimeto)SynchronizeArtifactCache可由日期范圍來約束。在這一情況下,作為包含,人為因素消費者僅有義務對來回之間修改的人為因素簽發(fā)CacheArtifact事件。對于由人為因素提供者持有的每一人為因素,SynchronizeArtifactCache方法將人為因素及其出站鏈接(如果有的話)包裝成一XML文檔(符合GAS方案)。注意,這一格式化需要與GetArtifacts所使用的完全一樣的邏輯。該方法也引發(fā)CacheArtifact事件,將符合GAS的XML文檔傳遞到IS。當提供者完成其高速緩存活動之后,它簽發(fā)一EndCacheLoad(結束高速緩存加載)事件。注意,GAS文檔可持有多個人為因素。由此,提供者具有一下子將若干人為因素傳遞到高速緩存的選項。IS通常通過響應于ArtifactChanged事件來更新其高速緩存)—該事件與其它工具預訂的事件相同。然而,IS也傾聽CacheArtifact事件,這些事件不是其它工具和服務所預訂的。提供者客戶機API-IToolClientLinking存在人為因素提供者客戶機API,以處理IDE內的松耦合交互。例如,構想這樣一種情形,其中,工具顯示其Id在作為GetArtifacts調用的結果返回的鏈接集合中的人為因素的列表。用戶希望顯示這些(任意)人為因素中的一個。如果人為因素提供者實現(xiàn)此處所描述的ExecuteDefaultAction方法,則列表的持有者可調用該行動(很可能是顯示該人為因素的導航行動),而不需要該人為因素或人為因素類型的任何知識。ExecuteDefaultAction方法該方法可由人為因素提供者作為其提供者客戶機的一部分來提供。它作為提供者客戶機安裝的一部分被安裝,并可被探索。boolExecuteDefaultAction(stringartifactUri)ExecuteDefaultAction采用單個人為因素URI作為輸入。提供者客戶機負責執(zhí)行對人為因素合適的任何默認行為。如果默認行動的執(zhí)行成功,則返回真。ExecuteDefaultAction通常不被直接調用。相反,它通過IS客戶機的ExecuteDefaultAction方法來調用。ArtifactChanged事件當以促使該人為因素的GetArtifacts方法執(zhí)行返回不同結果的方式創(chuàng)建、刪除或改變人為因素時,人為因素提供者必須引發(fā)ArtifactChanged事件。當人為因素改變時,提供者使用FireAsyncEvent(觸發(fā)異步事件)方法向IS事件引發(fā)異步ArtifactChanged事件。該ArtifactChanged事件類型作為IS的一部分在注冊期間被自動安裝。它包括符合GAS方案的XMl文檔。由于GAS包括人為因素的前向鏈接,ArtifactChanged用于向傾聽者通知鏈接變化以及其它人為因素變化。只要添加、改變或刪除了人為因素,就引發(fā)ArtifactChanged事件。GAS方案包括Artifact元素上的屬性,它令調用者能夠指示它所包含的人為因素是否被添加、改變或刪除。以下示出了單個ArtifactChanged事件中報告的兩個變化Defect(缺陷)152被添加,Requirement(要求)153被刪除。&lt;?xmlversion=″1.0″encoding=″utf-8″?&gt;&lt;Artifactsxmlns=″http//www.company.com/Tool/GenericArtifactSchema.xsd″&gt;&lt;ArtifactChangeType=″Add″&gt;&lt;Uri&gt;http//IS001/vset/WorkItems.1/Defect/152&lt;/Uri&gt;&lt;ProviderName&gt;MSWorkItemTracking&lt;/ProviderName&gt;&lt;Title&gt;152(Resolved)&lt;/Title&gt;&lt;Type&gt;Defect&lt;/Type&gt;&lt;LastChangedOn&gt;2003-10-24T20:47:58.170&lt;/LastChangedOn&gt;&lt;LastChangedBy&gt;dminium&lt;/LastChangedBy&gt;&lt;ExtendedAttributes&gt;&lt;ExtendedAttribute&gt;&lt;Name&gt;Status&lt;/Name&gt;&lt;Value&gt;Resolved&lt;/Value&gt;&lt;/ExtendedAttribute&gt;&lt;ExtendedAttribute&gt;&lt;Name&gt;AssignedTo&lt;/Name&gt;&lt;Value&gt;PeanutsMcFadden(nuts)&lt;/Value&gt;&lt;/ExtendedAttribute&gt;&lt;/ExtendedAttributes&gt;&lt;Links&gt;&lt;Link&gt;&lt;LinkType&gt;dependson&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/WorkItems.1/Defect/173&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;LinkType&gt;foundin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/Builds.1/Build/2003.11.15&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;LinkType&gt;checkedin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/Hatteras.1/ChangeSet/987Urt5B&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;/Links&gt;&lt;/Artifact&gt;&lt;ArtifactChangeType=″Delete″&gt;&lt;Uri&gt;http//IS001/vset/WorkItems.1/Defect/23&lt;/Uri&gt;&lt;/Artifact&gt;&lt;/Artifacts&gt;任何工具可以注冊到廣義ArtifactChanged事件。另外,人為因素/鏈接高速緩存傾聽這些事件,并使用它們來更新其自身。外部可尋址性人為因素提供者提供了一種對它所提供的每一人為因素處理外部可尋址性的方法。構想用戶將IS人為因素的URI放入到一段電子郵件中。電子郵件的接收者對該URI不能作出任何行動,除非它是外部可尋址的。如果是,則瀏覽器可得出對其作出什么行動。示例例如,構想儲存在版本存儲中以下位置的源文件\\VSServer8\FinProj\Acctg\WebUI\taccts.cs它由以下URI表示http//VSServer8/vset/vsversionstore.2/file/b4e3216現(xiàn)在考慮向用戶發(fā)送指示tacct程序剛失敗(其中,“tacct”是超鏈接,在其后是ISUri)的電子郵件。當用戶選擇該超鏈接時,他正確地期望將產生與該URI相關聯(lián)的內容的某一表示。在這一情況下,它可以是某一元數據以及關于該文件的描述性信息(以幫助喚起他的記憶)。這是可能的,因為每一人為因素提供者可令那些人為因素外部可尋址。它通過在安裝時提供可處理它所管理的人為因素的類型的頁面來實現(xiàn)這一目標。該頁面儲存在IS服務器上眾所周知的虛擬目錄中,并對其工具實例命名。頁面可以非常簡單,以調用簡單的XSL變換來產生只讀頁面?;蛘?,它可以非常復雜,以提供到完全膨脹的(full-blown)應用程序的網關。IS提供了ISAPI(因特網服務器應用程序接口)過濾器,它將URI轉換成URL,用于定向到正確的目錄,并令頁面能夠將人為因素類型和標記處理為普通參數。示例這一收到的Urihttp//Server8/vset/vsversionstore.2/file/b4e3216由ISAPI過濾器轉換成以下URLhttp//Server8/vsversionstore.2aspx?artifactType=file&amp;id=b4e3216其中,“artasp”是儲存了ASP頁面的Server8上的文件夾。人為因素消費者義務在注冊時,每一人為因素消費者向IS注冊它所持有的的每一鏈接類型、注冊其消費者web服務接口的URL、預訂它可響應的任何事件(包括人為因素改變事件)、提供可響應“你指向我嗎?”查詢的GetReferncingArtifacts方法、并可響應ArtifactChanged事件;用于刪除應當被刪除的引用人為因素鏈接。對于變化,引用人為因素可檢查會導致鏈接被無效的情況。消費者服務器API人為因素消費者必須提供能夠響應于“你指向我嗎?”查詢的GetReferencingArtifacts方法。GetReferencingArtifacts采用URI數組作為輸入。返回值是符合廣義人為因素數據庫方案(GAS)的Artifact(人為因素)對象。以下是該方法的特征Artifact[]GetReferencingArtifacts(string[]artifactUriList)這一版本的GetReferencingArtifacts采用被引用的人為因素Id的數組。消費者負責返回它所擁有的指向所包括的被引用的人為因素的任一個的所有引用人為因素的列表,作為GAS兼容的Artifact對象。Artifact[]GetReferencingArtifacts(string[]artifactUriList,LinkFilter[]linkFilterList)這一版本的GetReferencingArtifacts采用被引用的人為因素Id的數組和鏈接過濾器的數組。鏈接過濾器可用于按照提供人為因素的工具類型、人為因素類型或鏈接類型來限制返回的人為因素。ArtifactChanged事件處理程序如此處所描述的,每次當人為因素本質上改變時,人為因素提供者引發(fā)ArtifactChanged(人為因素改變)事件。每一人為因素消費者可通過注冊ArtifactChanged事件處理程序來傾聽這些ArtifactChanged事件。每一消費者的ArtifactChanged事件處理程序檢查該事件以確定它是否持有感興趣的人為因素。如果它的確持有,則消費者的事件處理程序然后可響應于該變化。通常這一響應采用以下形式之一-如果消費者僅持有指向該人為因素的指針,則它通常僅對刪除情況下的ArtifactChanged感興趣。消費者移除到刪除的人為因素的任何鏈接。-在某些情況下,可能有需要被引用的人為因素處于使引用人為因素能夠持有到它的鏈接的特定狀態(tài)的特定政策信息。如果是這樣,則消費者可確保在改變之后,被引用的人為因素仍處于正確的狀態(tài);否則,消費者移除該鏈接。人為因素/鏈接高速緩存使用ArtifactChanged事件來保持為最新。ISAPI以下API由IS中的各種元素直接提供。服務器API-EncodeUri/DecodeUri實用程序方法。GetArtifacts方法GetArtifacts方法采用URI數組作為輸入。返回值是符合GAS的對象。從邏輯觀點來看,GetArtifacts的IS版本調用向其請求人為因素的每一人為因素提供者的GetArtifacts方法。具體地,查詢相對于人為因素/鏈接高速緩存來執(zhí)行,除非直接參數=真。該方法的特征如下Artifact[]GetArtifacts(string[]artifactUriList)GetArtifacts采用ISUri形式的人為因素Id的數組。提供者負責向以GAS格式表示的每一人為因素Id返回一人為因素實例。這一版本的GetArtifacts相對于IS人為因素/鏈接高速緩存來運行。Artifact[]GetArtifacts(string[]artifactUriList,booldirect)這一版本的GetArtifacts完全與上述形式一樣運作,除調用者可提供直接參數的值之外。當直接參數=真時,結果集直接從作出調用的個別提供者的GetArtifacts方法構建,而不是檢索人為因素/鏈接高速緩存。這提供了最新的數據,而沒有昂貴的總計查詢。GetReferencingArtifacts方法IS跨服務反向查詢GetReferencingArtifacts(獲取引用人為因素)作為分類的查詢總計器運行。從邏輯觀點來看,從IS請求的跨服務反向查詢相對于所有的啟用了IS的工具來運行鏈接反向查詢,這些工具能夠向查詢貢獻信息、總計來自所有響應者的結果、并向用戶發(fā)送回單個結果集(以XML文檔的形式)。從物理觀點來看,IS跨服務反向查詢可以實際上相對于IS人為因素/鏈接高速緩存來執(zhí)行。Artifact[]GetReferencingArtifacts(string[]artifactUriList)這一版本的GetReferencingArtifacts采用被引用的人為因素Id的數組。咨詢每一潛在的人為因素消費者(基于注冊信息)來構建人為因素的完整列表。每一消費者負責返回它所擁有的指向所包括的被引用的人為因素的任一個的所有引用人為因素的列表,作為GAS兼容的Artifact(人為因素)對象。IS然后合并這些列表,并向客戶機返回單個Artifact數組。Artifact[]GetReferencingArtifacts(string[]artifactUriList,LinkFilter[]linkFilterList)這一版本的GetReferencingArtifacts與前一版本相同,除它采用附加的鏈接過濾器數組之外。鏈接過濾器可用于按照提供人為因素的工具類型、人為因素類型或鏈接類型來限制返回的人為因素。Artifact[]GetReferencingArtifacts(string[]artifactUri,booldirect)這一版本的GetReferencingArtifacts完全與第一種形式相同地運作,除調用者可提供直接參數的值之外。當直接參數=真時,直接從作出調用的個別提供者的GetReferencingArtifacts方法構建結果集,而非利用人為因素/鏈接高速緩存。這提供了最新的數據,而沒有昂貴的總計查詢。Artifact[]GetReferencingArtifacts(string[]artifactUriList,booldirect,LinkFilter[]linkFilterList)這一版本的GetReferencingArtifacts與第二種形式完全相同地運作,除調用者可提供直接參數的值之外。當直接參數=真時,從作出調用的個別提供者的GetReferencingArtifacts方法直接構建結果集,而非利用人為因素/鏈接高速緩存。這提供了最新的數據,而沒有昂貴的總計查詢。鏈接助手方法-ILinkingIS鏈接助手方法后處理Artifact(人為因素)對象的數組,其中在每一人為因素內出站(引用)鏈接被嵌套,以產生符合GLS的鏈接的平面列表。ExtractLinks(提取鏈接)返回在符合可任選用戶提供的過濾器的Artifact對象數組內找到的所有鏈接的平面列表。第三種形式的Extractlinks完全一樣,但是僅用于其被引用的Id通過字符串數組傳遞的鏈接。以該方式,ExtractLinks可以與GetReferencingArtifacts配對,以創(chuàng)建那些僅僅指向感興趣的人為因素Id的鏈接的平面、經過濾的列表。Link[]ExtractLinks(Artifact[]artifactList)給定一Artifact對象數組,其中每一鏈接用其引用人為因素來包裝,ExtractLinkds產生符合GLS的Link(鏈接)數組內的鏈接的平面列表。Link[]ExtractLinks(Artifact[]artifactList,LinkFilter[]linkFilterList)在這一形式的ExtractLinks中,僅當它符合linkFilterList(鏈接過濾器列表)中的過濾器時,鏈接才被包括在內。Link[]ExtractLinks(Artifact[]artifactList,LinkFilter[]linkFilterList,string[]artifactUriList)在這一形式中,僅那些其被引用的URI包括在ArtifactUri字符串數組中的鏈接被返回。如果不需要任何鏈接類型過濾,則LinkFilterList可以為空。ExtractLinks示例1產生鏈接的平面列表獲取導致Artifact數組的人為因素。然后從該Artifact對象數組中提取鏈接的平面列表。ISServerProxyIS=newISServerProxy();string[]artifactUris=newstring[]{″http//IS001/vset/workitems.1/defect/152″,″http//IS001/vset/WorkItems.1/Req/153″};Artifact[]artifacts=IS.GetArtifacts(artifactUris);Link[]links=IS.ExtractLinks(artifacts);從ExtractLinks返回的鏈接對象對應于以下的XML方案。&lt;?xmlversion=″1.0″encoding=″utf-8″?&gt;&lt;Linksxmlns=″http//tempuri.org/ISGenericLinkSchema.xsd″&gt;&lt;Link&gt;&lt;ReferringUri&gt;http//IS001/vset/WorkItems.1/Defect/152&lt;/ReferringUri&gt;&lt;LinkType&gt;dependson&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/WorkItems.1/Defect/173&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;ReferringUri&gt;http//IS001/vset/WorkItems.1/Defect/152&lt;/ReferringUri&gt;&lt;LinkType&gt;foundin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/Builds.1/Build/2003.11.15&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;ReferringUri&gt;http//IS001/vset/WorkItems.1/Defect/152&lt;/ReferringUri&gt;&lt;LinkType&gt;checkedin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/Hatteras.1/ChangeSet/987Urt5B&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;ReferringUri&gt;http//IS001/vset/WorkItems.1/Req/153&lt;/ReferringUri&gt;&lt;LinkType&gt;authoredin&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/eLeadSharePoint/ReqDoc/38976FBA&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;ReferringUri&gt;http//IS001/vset/WorkItems.1/Req/153&lt;/ReferringUri&gt;&lt;LinkType&gt;dependson&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/WorkItems.1/Defect/173&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;/Links&gt;ExtractLinks示例2產生指向特定缺陷的鏈接列表。假定Defect(缺陷)163僅從Defect152和Requirement(要求)153引用。在這一情況下,Defect173的GetReferencingArtifacts將返回完全一樣的Artifact數組。在這一示例中,ExtractLinks用于僅返回實際上指回Defect173的鏈接。ISServerProxyIS=newISServerProxy();string[]artifactUris=newstring[1]{″http//IS001/vset/wotkitems.1/defect/173″};Artifact[]artifacts=IS.GetReferencingArtifacts(artifactUris);Link[]links=IS.ExtractLinks(artifacts,null,artifactUris);ThelinksobjectreturnedfromExtractLinks(nowfilteredbythesamesetofartifactUrisasGetReferencingArtifacts)isshowninFigure5.&lt;?xmlversion=″1.0″encoding=″utf-8″?&gt;&lt;Linksxmlns=″http//tempuri.org/ISGenericLinkSchema.xsd″&gt;&lt;Link&gt;&lt;ReferringUri&gt;http//IS001/vset/WorkItems.1/Defect/152&lt;/ReferringUri&gt;&lt;LinkType&gt;dependson&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/WorkItems.1/Defect/173&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;Link&gt;&lt;ReferringUri&gt;http//IS001/vset/WorkItems.1/Req/153&lt;/ReferringUri&gt;&lt;LinkType&gt;dependson&lt;/LinkType&gt;&lt;ReferencedUri&gt;http//IS001/vset/WorkItems.1/Defect/173&lt;/ReferencedUri&gt;&lt;/Link&gt;&lt;/Links&gt;SynchronizeArtifactCache該方法被調用以促使對人為因素/鏈接高速緩存的后臺更新。voidSynchronizeArtifactCache()SynchronizeArtifactCache方法促使IS通過調用每一人為因素提供者的SynchronizeArtifactCache方法來同步人為因素高速緩存。voidSynchronizeArtifactCache(DateTimefrom,DateTimeto)SynchronizeArtifactCache可由日期范圍來約束。在這一情況下,包含性地,每一人為因素消費者僅負責對來回修改的人為因素簽發(fā)CacheArtifact(高速緩存人為因素)事件。客戶機API-IClientLinking關于鏈接的IS客戶機API由單個方法構成。這一方法的功能是調用工具的默認行動來顯示人為因素。ExecuteDefaultActionboolExecuteDefaultAction(stringartifactUri)ExecuteDefaultAction(執(zhí)行默認行動)采用單個人為因素Id作為輸入??蛻魴C基于人為因素類型和注冊的機制確定要執(zhí)行什么行動,用于如下地處理默認行動。如果人為因素類型與已注冊的提供者客戶機相關聯(lián),則提供者客戶機的ExecuteDefaultAction被調用。否則,ArtifactId被傳遞到IS服務器,用于使用外部可尋址的機制來解析。如果成功,這導致在IDE內部打開一個頁面。如果不成功,則用戶將看到http404錯誤。廣義人為因素提供者現(xiàn)在參考圖5,示出了依照本發(fā)明的GAPAPI的一種實現(xiàn)的框圖。GAP本質上是提供標準人為因素提供者和消費者方法的數據庫應用程序。提供了一個或多個啟用IS的工具500和未啟用IS的工具502,其某些內容期望作為集成工具來訪問。為便于與啟用IS的工具500交互,采用具有與其相關聯(lián)的GAP數據庫506的GAP504。GAP數據庫506以后文中相對于圖7描述的廣義人為因素數據庫方案(GADS)的格式來結構化。為與未啟用IS的工具交互,可書寫一GAP適配程序508,使得具有對原始工具502的最小中斷,工具數據可作為IS人為因素來展示,并持有到IS人為因素的鏈接。GAP特別地旨在解決不可能或不方便直接滿足持有人為因素的工具中的人為因素提供者/消費者義務的情況。例如,一個團隊希望鏈接到儲存在共享服務器中的文檔并從其鏈接出來,令它們作為正式的人為因素。不幸的是,共享服務器不實現(xiàn)啟用IS的API,并由此,不向其人為因素提供IS兼容的URI或提供需要的方法(如,GetArtifacts/GetReferencingArtifacts)。使用GAP,該團隊能夠為共享文檔構造一“人為因素代理”。代理可由其它人為因素引用,并能夠持有到其它人為因素的鏈接,都代表它所表示的真實的共享文檔。GAP也旨在解決其中在源代碼或文件系統(tǒng)中人為因素容器被作為文件來保留的情況。在這一情況下,負責創(chuàng)建人為因素的工具在其持續(xù)性上沒有發(fā)言權,且由此不能堅持源控制和文件系統(tǒng)能夠識別且儲存來自人為因素的鏈接。例如,一個工具希望持有模型和從該模型生成的源代碼之間的鏈接,其中模型作為源代碼儲存。使用GAP,該工具可構建人為因素代理來持有那些鏈接。此外,可構建額外的人為因素代理來表示文件內部的人為因素,如源文件中的方法或工具模型中的XMLweb服務?,F(xiàn)在參考圖6,示出了準備非集成工具來使用GAP的一種實現(xiàn)的流程圖。在600,接收一個或多個非集成工具。在602,在注冊時準備一個或多個非集成工具,用于依照本發(fā)明,使用GAP來展示人為因素和引用。在604,注冊工具類型來擔當映射到GAP服務的每一GAP管理的人為因素的提供者。對于包括自管理和GAP管理的人為因素的提供者,其每一個的工具類型必須是截然不同的。在606,對于每一GAP管理的人為因素,定義其人為因素類型和出站鏈接類型(如果有的話)。過程然后到達停止塊?,F(xiàn)在參考圖7,示出了用于GAP和高速緩存的廣義人為因素數據庫方案(GADS)700。GADS700包括人為因素(Artifact)元素702,它只包含一個可顯示的人為因素,由以下子元素構成返回的人為因素的URI;人為因素標題(Title),它是返回的人為因素類型的本地化友好名;最后一次改變的日期和時間(LastChangedOn),如果可用的話;改變該人為因素的最后一個人的用戶Id(LastChangedBy),如果可用的話;外部ID(ExternalID),該元素被保留由以供IS廣義人為因素提供者使用,并包含令IS及其代理能夠訪問沒有直接人為因素提供者的項的信息;以及可任選的比特屬性同步標志(SyncFlag),它在高速緩存中使用,并保留實例專用同步狀態(tài)。GADS700也包括人為因素元素702的鏈接(Link)子元素704,它包含以下內容引用鏈接URI(ReferringURI)、鏈接類型(LinkType)、以及被引用的鏈接URI(ReferencedURI)。人為因素元素702的擴展屬性(ExtendedAttributes)子元素706包含描述提供者能夠提供的可任選人為因素專用屬性的名字/值對的集合。現(xiàn)在參考圖8,示出了依照本發(fā)明實現(xiàn)GAP的一種方法的流程圖。在800,提供者為展示的每一人為因素注冊人為因素類型。在802,提供者為它持有的每一人為因素注冊鏈接類型。在804,確定注冊信息是否可被本地或本機地儲存。如果不是,則過程流到806,采用GAP。在808,相對于GAP數據庫處理數據。在810,非集成工具現(xiàn)在能夠與啟用IS的工具接口。過程然后到達停止塊。然而,如果注冊信息可被本機地儲存,則過程從804流到812,不采用GAP來處理。過程然后到停止塊?,F(xiàn)在參考圖9,示出了依照本發(fā)明實現(xiàn)GAP適配程序的一種方法的流程圖。當修改人為因素時,在GAP數據庫中對每一人為因素有一記錄。為構造適配程序,必須可能檢測到儲存在底層工具中的人為因素數據的變化。在900,向工具添加要被表示為人為因素的項。在902,為該人為因素創(chuàng)建URI。當要被表示為人為因素的項被添加到工具時,工具適配程序通過使用GAP的UpdateArtifactData(更新人為因素數據)方法在GAP中創(chuàng)建對應的人為因素記錄,如904所示的。該記錄將該人為因素URI映射到對工具已知的標識符(稱為其外部Id)。例如,儲存在文件共享中的文檔的外部Id可以是其文件夾的層次和文件名。人為因素記錄符合GAS,因為它包括例如人為因素的URI、標題、外部Id和擴展屬性。在906,系統(tǒng)操作來檢測該工具的人為因素的修改。在908,系統(tǒng)確定是否出現(xiàn)了修改。如果否,則過程流回906,以繼續(xù)監(jiān)控修改。如果是,則過程流到910,對項“改變”,工具適配程序通過使用GAP的UpdateArtifactData方法注明修改。注意,重要的是在改變和刪除/添加之間區(qū)分,以維護至和自GAP人為因素的鏈接的完整性。在912,如果修改是“添加/刪除”,則適配程序向/從GAP數據庫中添加/刪除對應的記錄。當涉及人為因素的項被刪除時,工具適配程序通過使用GAP的UpdateArtifactData方法從GAP中刪除對應的記錄。當來自人為因素的鏈接要被創(chuàng)建或修改時,使用UpdateArtifactData方法。在914,處理鏈接創(chuàng)建和修改。過程然后到達停止塊。為處理外部可尋址性,定義并注冊人為因素處理程序。GAPAPI由于它既是人為因素提供者又是人為因素消費者,因此GAPAPI向標準服務器人為因素提供者和消費者的每一個提供了方法和行為(即,IToolServerLinking接口中的所有方法)。此外,它提供了以下方法以使能夠維護它所持有的人為因素數據。boolUpdateArtifactData(Artifact[]artifacts)調用者填充Artifact數組對象,并調用UpdateArtifactData來更新GAP數據庫。Artifact數據包括保留在GAP數據中的完整人為因素描述,包括擴展屬性和鏈接。每一人為因素必須具有其ChangeType(改變類型)屬性(添加、改變、刪除)的有效值。在添加時如果人為因素的Uri的&lt;tool-specificid&gt;被設為特殊值“&lt;?&gt;”,則GAP生成唯一的ID,并替換其Artifact.Uri屬性中的相關聯(lián)的Uri。否則,直接使用&lt;tool-specificid&gt;的值。當其關鍵字為收到的Artifact.Uri值的記錄在GAP中已經存在而試圖添加人為因素時,會引發(fā)錯誤。在改變或刪除時,其關鍵字為收到的Artifact.Uri值的記錄必須在數據庫中存在,否則引發(fā)錯誤。Artifact[]GetArtifactsByExternalId(string[]externalId)該方法用于基于GAP的人為因素URI所匹配的外部Id返回的GAS兼容的人為因素。注意,Artifact數組包括URI和外部Id,因此使用標準GetArtifacts方法來確定給定URI時的外部Id;該方法使得在給定外部Id時能夠確定URI。現(xiàn)在參考圖10,示出了依照本發(fā)明便于訪問非集成工具的系統(tǒng)1000。系統(tǒng)1000示出了若干非集成工具的使用,即第一工具1002、第二工具1004和第三工具1006。第一工具1002需要GAP1008的實現(xiàn)被啟用作為對啟用IS的工具1010的人為因素提供者。作為其支持,創(chuàng)建工具專用適配程序1012,它便于向啟用的工具1010展示一個或多個人為因素。鏈接和引用可以被儲存在依照GADS的GAP數據庫506中。第二工具1004在本機接口的頂部集成了提供者啟用API1014,該接口公共地展示其人為因素。第三工具1006在展示對第二工具1004的提供者人為因素和第一工具1002的人為因素的引用的本機接口的頂部集成了消費者啟用API1016。系統(tǒng)1000還包括一人為因素/鏈接高速緩存1018,它依照本發(fā)明高速緩存了人為因素和鏈接信息。鏈接管理器1020管理高速緩存1018。高速緩存1018至少與第一、第二和第三工具(1002、1004和1006)接口,以便于至少高速緩存人為因素和鏈接信息,以及此處所描述的其它信息。本發(fā)明(如,結合選擇)可采用基于如分類器1022(可任選)的格式的方案的各種人工智能,用于實現(xiàn)本發(fā)明的各種自動過程。此處所描述的實現(xiàn)一般只處理一個中繼段,即,直接與另一工具接口的一個工具。分類器1022可用于促進更復雜的查詢,可導出超出一個中繼段的鏈接描述。分類器是將輸入屬性矢量x=(x1,x2,x3,x4,x5)映射到輸入屬性屬于類的置信度的函數,即f(x)=confidence(class)。這一分類可采用基于概率和/或統(tǒng)計的分析(如,分解成分析效用和成本),以預測或推斷用戶希望自動執(zhí)行的行動。支持矢量機(SVM)是可采用的分類器的一個實例。SVM通過在可能輸入的空間中找出超表面來運作,其中超表面試圖將觸發(fā)準則從非觸發(fā)事件中分離出來。直觀上,這令對接近但不等同于訓練數據的測試數據的分類是正確的。其它有向和無向的分類方法包括,如單純貝葉斯、貝葉斯網絡、決策樹,也可采用提供不同的獨立性方案的概率分類模型。此處所使用的分類也包括用于開發(fā)優(yōu)先級模型的統(tǒng)計回歸。如從本發(fā)明中可以容易理解的,本發(fā)明可采用明確訓練(如,通過廣義訓練數據)或隱含訓練(如,通過觀察用戶行為、接收外來信息)的分類器。例如,SVM通過分類器構造器和特征選擇模塊中的學習或訓練階段來配置。由此,分類器可用于自動執(zhí)行若干功能,包括但不限于,例如,依照約定準則確定展示什么人為因素、可以應用什么優(yōu)先級來展示人為因素、什么工具應當在其它工具前展示、基于數據類型、用戶和數據位置可展示什么人為因素。人為因素/鏈接高速緩存人為因素/鏈接高速緩存是一種集中式的存儲,其中它們所持有的人為因素和鏈接被復制以能夠進行高性能的查詢訪問。通過將簡要的人為因素和鏈接數據收集在一起成為單個數據庫,可更有效地處理跨服務的引用反向?,F(xiàn)在參考圖11,示出了依照本發(fā)明實現(xiàn)高速緩存的過程的流程圖。在1100,使用高速緩存來儲存人為因素/鏈接關系。在1102,依照GAS格式化這些關系。在1104,響應于由人為因素提供者引發(fā)的ArtifactChanged事件對高速緩存作出更新。IS高速緩存管理器預訂ARtifactChanged并使用該事件對象—符合GAS的對象—來更新其本身。由于高速緩存是與實際人為因素更新同步地更新的,它可簡單地與底層存儲不同步。然而,等待時間較短,且對于大多數應用都是可接受的。當需要零等待事件時,工具可繞過高速緩存,并直接通過其標準GetArtifacts/GetReferencingArtifacts方法向工具作出請求。高速緩存儲存在符合廣義人為因素數據庫方案的數據庫中。高速緩存與GAP數據庫不同,因為GAP數據庫是映射信息和鏈接的主副本,而高速緩存不是任何內容的主副本,并且是完全可以重新創(chuàng)建的。再次參考圖11,在1106,確定高速緩存是否已與底層數據同步。在該事件中,作為網絡或系統(tǒng)故障的結果,在高速緩存和底層數據永久地不同步的情況下,IS提供了一種管理性的SynchronizeArtifactCache(同步人為因素高速緩存)實用程序,它與每一人為因素提供者進行校準以恢復高速緩存。該實用程序調用每一人為因素提供者的SynchronizeArtifactCache方法。如果不需要同步,則過程從1106流到1104以更新高速緩存。如果需要同步,則過程從1106流到1108以調用同步。高速緩存同步如下地運作。IS的SynchronizeArtifactCache實用程序被調用(編程上或通過管理功能)。如果高速緩存同步已在進行中,則提供一警告;然而,警告可以被忽略。在IS管理數據庫中,設置“全局同步在進行中”狀態(tài)。在1110,要被同步的每一高速緩存的人為因素(基于日期范圍)用“要被高速緩存”標志來作標記。在1112,聯(lián)系具有已被標記的人為因素的每一提供者。調用人為因素提供者的SynchronizeArtifactCache方法,并設置管理數據庫中的狀態(tài)“&lt;tool-instance&gt;同步正在進行”。在1114,人為因素提供者的SynchronizeArtifactCache方法對每一候選人為因素(或對一組候選人為因素)簽發(fā)一CacheArtifact事件。在1116,將簽發(fā)了事件并作了標記的人為因素上傳到高速緩存。當人為因素提供者對所有的候選人為因素簽發(fā)了CacheArtifact事件時,它用其自己的工具實例作為參數觸發(fā)一EndCacheLoad(結束高速緩存加載)事件。IS高速緩存管理器傾聽ArtifactChanged和CacheArtifact事件。這兩個事件以同樣的方式來處理包括在事件的Artifacts參數中的每一人為因素被放置在高速緩存中。在1118,如果高速緩存中存在具有相同的URI的人為因素,則它被替換。否則,它被添加。注意,所替換或添加的條目的“要被高速緩存”標志未被設置。IS高速緩存管理器傾聽EndCacheLoad事件。當被接收時,在1120,執(zhí)行高速緩存清除,使得高速緩存中由EndCacheLoad指定的工具實例的被標記為“要被高速緩存”的所有人為因素被刪除。這移除了其對應的人為因素已被從其主持儲中刪除的高速緩存項。IS關閉“&lt;tool-instance&gt;同步正在進行”狀態(tài)。當最后一個提供者的“&lt;tool-instance&gt;同步正在進行”狀態(tài)被關閉時,“全局同步正在進行”狀態(tài)被關閉。過程然后到達停止塊。API引用本節(jié)包括在本文檔的別處對方法詳細描述的引用而定義的所有方法特征。另外,由IS提供的方法的過載(overload)由消息限定器(MessageQualifier)來實現(xiàn)。通過ASP.Net中的預訂,過載方法的MessageName(消息名)屬性通過將消息名和消息限定器串接來形成,如下文所示的。這些消息名對服務的消費者是不可見的。以下代碼表示對方法名(在本情況中為GetArtifacts)默認的消息名。publicArtifactIDGetArtifacts(string[]ArtifactUri){/*獲取人為因素;如果可能的話使用高速緩存*/}在下文中,消息名被明確地指定。通過約定,它通過將消息名與消息限定器串接形成特征表來形成。在這一情況下,消息限定器是Direct(直接),因此消息名是GetArtifactsDirect(直接獲取人為因素)。publicArtifactIDGetArtifacts(string[]ArtifactUri){/*直接從人為因素提供者獲取人為因素*/}方案和數據類型廣義人為因素方案(GAS)和人為因素類GAS是定義可顯示人為因素的廣義格式的XMl方案。該方案如下,其后為其每一元素的解釋。當GAS符合文檔被解串行化(deserialize)成對象時,對象采用“人為因素類”中所示的格式。注意,在API中,Artifacts對象從不出現(xiàn);相反,使用了Artifact對象數組。&lt;?xmlversion=″1.0″encoding=″utf-8″?&gt;&lt;xsschematargetNamespace=″http//www.company.com/Tool/GenericArtifactSchema.xsd″elementFormDefault=″qualified″xmlns=″http//www.company.com/Tool/GenericArtifactSchema.xsd″xmlnsmstns=″http//www.company.com/Tool/GenericArtifactSchema.xsd″xmlnsxs=″http//www.w3.org/2001/xMLSchema″&gt;&lt;!--BydeclaringISUriasimpletypewecanaddvalidationlater.--&gt;&lt;xssimpleTypename=″ISUri″&gt;&lt;xsrestrictionbase=″xsstring″/&gt;&lt;/xssimpleType&gt;&lt;!--EnumerationforusageinArtifsctChangedevent.--&gt;&lt;xssimpleTypename=″ChangeType″&gt;&lt;xsrestrictionbase=″xsstring″&gt;&lt;xsenumerationvalue=″Add″/&gt;&lt;xsenumerationvalue=″Change″/&gt;&lt;xsenumerationvalue=″Delete″/&gt;&lt;xsenumerationvalue=″NoChange″/&gt;&lt;/xsrestriction&gt;&lt;/xssimpleType&gt;&lt;xselamentname=″Artifacts″&gt;&lt;xscomplexType&gt;&lt;xssequence&gt;&lt;xselementname=″Artifact″type=″Artifact″minOccurs=″1″maxOccurs=″unbounded″/&gt;&lt;/xssequence&gt;&lt;/xscomplexType&gt;&lt;/xselement&gt;&lt;xscomplexTypename=″Artifact″&gt;&lt;xssequence&gt;&lt;xselementname=″Uri″type=″ISUri″/&gt;&lt;xssequenceminOccurs=″0″maxOccurs=″1″&gt;&lt;xselementname=″ArtifactTitle″type=″xsstring″/&gt;&lt;xselementname=″ArtifactTypeName″type=″xsstring″/&gt;&lt;xselementname=″LastChangedOn″type=″xsdateTime″/&gt;&lt;xselementname=″LastChangedBy″type=″xsstring″/&gt;&lt;xselementname=″ExternalId″type=″xsstring″minOccurs=″0″maxOccurs=″1″/&gt;&lt;xselementname=″ExtendedAttributes″minOccurs=″0″maxOccurs=″1″&gt;&lt;xscomplexType&gt;&lt;xssequence&gt;&lt;xselementname=″ExtendedAttribute″type=″ExtendedAttribute″minOccurs=″0″maxOccurs=″unbounded″/&gt;&lt;/xssequence&gt;&lt;/xscomplexType&gt;&lt;/xselement&gt;&lt;xselementname=″OutboundLinks″minOccurs=″0″maxOccurs=″1″&gt;&lt;xscomplexType&gt;&lt;xssequence&gt;&lt;xselementname=″OutboundLink″type=″OutboundLink″minOccurs=″0″maxOccurs=″unbounded″/&gt;&lt;/xssequence&gt;&lt;/xscomplexType&gt;&lt;/xselement&gt;&lt;/xssequence&gt;&lt;/xssequence&gt;&lt;xsattributename=″ChangeType″type=″ChangeType″default=″NoChange″use=″optional″/&gt;&lt;/xscomplexType&gt;&lt;xscomplexTypename=″ExtendedAttribute″&gt;&lt;xssequence&gt;&lt;xselementname=″Name″type=″xsstring″/&gt;&lt;xselementname=″Value″type=″xsstring″/&gt;&lt;xselementname=″FormatString″type=″xsstring″minOccurs=″0″/&gt;&lt;/xssequence&gt;&lt;/xscomplexType&gt;&lt;xscomplexTypename=″OutboundLink″&gt;&lt;xssequence&gt;&lt;xselementname=″LinkType″type=″xsstring″/&gt;&lt;xselementname=″ReferencedUri″type=″ISUri″/&gt;&lt;/xssequence&gt;&lt;/xscomplexType&gt;&lt;/xsschema&gt;元素人為因素包含1:m個人為因素元素,其每一個描述了廣義IS人為因素。對每一個收到的ArtifactId的一個人為因素元素將出現(xiàn)在人為因素元素中。元素Artifact僅包含一個可顯示的人為因素,由以下子元素構成Uri返回的人為因素的Uri。-ArtifactTitle返回的人為因素的本地化的友好名。-ArtifactTypeName返回的人為因素類型的本地化的友好名。-LastChangedOn最后一次改變的日期和時間(如果有的話)。-LastChangedBy改變該人為因素的最后一個人的userId(如果有的話)。-ExternalId該元素被保留,由IS廣義人為因素提供者使用。它包含令IS及其代理能夠訪問沒有直接人為因素提供者的項的信息。-ExtendedArrtibutes描述提供者可提供的可任選人為因素專用屬性的名字/值對的集合。-OutboundLinks描述來自該人為因素的出站鏈接的鏈接類型/引用Uri對的集合。-ChangeType是人為因素元素上可任選的屬性,僅在ArtifactChanged事件的上下文中有意義。Artifacts類//--------------------------------------------------------------------//&lt;autogenerated&gt;//該代碼由工具生成//運行時間版本1.1////對此文件的改變會導致不正確的行為,//并且如果重新生成代碼會被丟失.//&lt;/autogenerated&gt;//--------------------------------------------------------------------////該源代碼由xsd自動生成,版本=1.1//usingSystem.Xml.Serialization;[System.Xml.Serialization.XmlTypeAttribute(Namespace=″http//www.company.com/Tool/GenericArtifactSchema.xsd″)][System.Xml.Serialization.XmlRootAttribute(Namespace=″http//www.company.com/Tool/GenericArtifactSchema.xsd″,IsNullable=false)]publicclassArtifacts{[System.Xml.Serialization.XmlElementAttribute(″Artifact″)]publicArtifact[]Artifact;}[System.Xml.Serialization.XmlTypeAttribute(Namespace=″http//www.company.com/Tool/GenericArtifactSchema.xsd″)]publicclassArtifact{publicstringUri;publicstringArtifactTitle;publicstringArtifactTypeName;publicSystem.DateTimeLastChangedOn;publicstringLastChangedBy;publicstringExternalID;[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]publicExtendedAttribute[]ExtendedAttributes;[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]publicOutboundLink[]OutboundLinks;[System.Xml.Serialization.XmlAttributeAttribute()]publicChangeTypeChangeType=ChangeType.NoChange;}[System.Xml.Serialization.XmlTypeAttribute(Namespace=″http//www.company.com/Tool/GenericArtifactSchema.xsd″)]publicclassExtendedAttribute{publicstringName;publicstringValue;publicstringFormatString;}[System.Xml.Serialization.XmlTypeAttribute(Namespace=″http//www.company.com/Tool/GenericArtifactSchema.xsd″)]publicclassoutboundLink{publicstringLinkType;publicstringReferencedUri;}[System.Xml.Serialization.XmlTypeAttribute(Namespace=″http//www.company.com/Tool/GenericArtifactSchema.xsd″)]publicenumChangeType{Add,Change,Delete,NoChange,}廣義鏈接方案(GLS)和鏈接類GLS是定義人為因素鏈接的廣義格式的XML方案。它由ExtractLinks方法返回。該方案如下,隨后是其每一元素的解釋。當將GLS符合文檔解串行化成對象時,對象采用“鏈接類”一節(jié)下所示出的形式。&lt;?xmlversion=″1.0″encoding=″utf-8″?&gt;&lt;xsschemaid=″ISGenericLinkSchema″targetNamespace=″http//tempuri.org/ISGenericLinkSchema.xsd″elementFormDefault=″qualified″xmlns=″http//tempuri.org/ISGenericLinkSchema.xsd″xmlnsmstns=″http//tempuri.org/ISGenericLinkSchema.xsd″xmlnsxs=″http//www.w3.org/2001/XMLSchema″&gt;&lt;xselementname=″Links″&gt;&lt;xscomplexType&gt;&lt;xssequence&gt;&lt;xselementname=″Link″type=″Link″minOccurs=″1″maxOccurs=″unbounded″/&gt;&lt;/xssequence&gt;&lt;/xscomplexType&gt;&lt;/xselement&gt;&lt;xscomplexTypename=″Link″&gt;&lt;xssequence&gt;&lt;xselementname=″ReferringUri″type=″xsstring″/&gt;&lt;xselementname=″LinkType″type=″xsstring″/&gt;&lt;xselementname=″ReferencedUri″type=″xsstring″/&gt;&lt;/xssequence&gt;&lt;/xscomplexType&gt;&lt;/xsschema&gt;元素鏈接包含1:m個鏈接元素,其每一個描述了兩個IS人為因素之間的鏈接。元素Link描述兩個人為因素之間的一個鏈接-ReferringUri引用(消費者)人為因素的Uri。-LinkType鏈接的類型。-ReferencedUri被引用的(提供者)人為因素的Uri。Link類//--------------------------------------------------------------------//&lt;autogenerated&gt;//該代碼由工具生成。//運行時間版本1.1////對該文件作出改變將導致不正確的行為,//并且如果重新生成代碼則會丟失。//&lt;/autogenerated&gt;//-------------------------------------------------------------------////該源代碼由xsd自動生成,版本=1.1//usingSystem.Xml.Serialization;[System.Xml.Serialization.XmlTypeAttribute(Namespace=″http//tempuri.org/ISGenericLinkSchema.xsd″)][System.Xml.Serialization.XmlRootAttribute(Namespace=″http//tempuri.org/ISGenericLinkSchema.xsd″,IsNullable=false)]publicclassLinks{[System.Xml.Serialization.XmlElementAttribute(″Link″)]publicLink[]Link;}[System.Xml.Serialization.XmlTypeAttribute(Namespace=″http//tempuri.org/ISGenericLinkSchema.xsd″)]publicclassLink{publicstringReferringUri;publicstringLinkType;publicstringReferencedUri;}LinkFilter類LinkFilter類在查詢方法中用于過濾結果。每一人為因素消費者必須考慮其GetReferencingArtifacts實現(xiàn)中的過濾器。publicclassLinkFilter{publicenumfilterType{ToolInstance,ArtifactType,LinkType}publicfilterTypeType;publicstring[]Values;}ArtifactId類ArtifactId類用于收集用于使用EncodeUri和DecodeUri方法形成人為因素的Uri的數據。publicclassArtifactId{publicstringVisualStudioServerNamespace;publicstringTool;publicstringArtifactType;publicstringToolSpecificId;}廣義人為因素數據庫方案以下是用于廣義人為因素提供者和人為因素/鏈接高速緩存的廣義人為因素數據庫方案的描述。本質上,它是GAS方案的數據庫實現(xiàn),有以下例外提供者名字和人為因素類型不存在。當讀取人為因素實例時它們被自動從URI中導出,并當寫入人為因素實例時它們被忽略??扇芜x的比特屬性“SyncFlag(同步標志)”僅在高速緩存中使用,并保留實例專用同步狀態(tài)。示例計算系統(tǒng)現(xiàn)在參考圖12,示出了用于執(zhí)行所揭示的體系結構的計算機的框圖。為提供本發(fā)明的各方面的附加環(huán)境,圖12及以下討論旨在提供可在其中實現(xiàn)本發(fā)明的各方面的合適的計算環(huán)境1200的簡要、通用描述。盡管上文在可運行在一個或多個計算機上的計算機可執(zhí)行指令的通用上下文中描述了本發(fā)明,然而本領域的技術人員將認識到,本發(fā)明也可結合程序模塊來實現(xiàn)和/或被實現(xiàn)為硬件和軟件的組合。一般而言,程序模塊包括例程、程序、組件、數據結構等等,執(zhí)行特定的任務或實現(xiàn)特定的抽象數據類型。此外,本領域的技術人員可以理解,本發(fā)明的方法可以用其它計算機系統(tǒng)配置來實施,包括單處理器或多處理器計算機系統(tǒng)、小型機、大型機、以及個人計算機、手持式計算設備、基于微處理器或可編程消費者電子產品等等,其每一個都可操作地耦合至一個或多個相關聯(lián)的設備。所示出的本發(fā)明的步驟也可在分布式計算環(huán)境中實施,其中某些任務由通過通信網絡連接的遠程處理設備來執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設備中。計算機通常包括各種計算機可讀介質。計算機可讀介質可以是可由計算機訪問的任一可用介質,包括易失和非易失介質、可移動和不可移動介質。作為示例而非局限,計算機可讀介質包括計算機存儲介質和通信介質。計算機存儲介質包括以用于儲存諸如計算機可讀指令、數據結構、程序模塊或其它數據等信息的任一方法或技術實現(xiàn)的易失和非易失,可移動和不可移動介質。計算機存儲介質包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲器技術、CD-ROM、數字視頻盤(DVD)或其它光盤存儲、磁盒、磁帶、磁盤存儲或其它磁存儲設備、或可以用來儲存所期望的信息并可由計算機110訪問的任一其它介質。通信介質通常在諸如載波或其它傳輸機制的已調制數據信號中包含計算機可讀指令、數據結構、程序模塊或其它數據,并包括任一信息傳送介質。術語“已調制數據信號”指以對信號中的信息進行編碼的方式設置或改變其一個或多個特征的信號。作為示例而非局限,通信介質包括有線介質,如有線網絡或直接連線連接,以及無線介質,如聲學、RF、紅外和其它無線介質。上述任一的組合也應當包括在計算機可讀介質的范圍之內。再次參考圖12,示出了用于實現(xiàn)本發(fā)明的各方面的示例性環(huán)境1200,包括計算機1202,計算機1202包括處理單元1204、系統(tǒng)存儲器1206和系統(tǒng)總線1208。系統(tǒng)總線1208將包括但不限于系統(tǒng)存儲器1206的系統(tǒng)組件耦合至處理單元1204。處理單元1204可以是各種可購買的處理器中的任一種。雙微處理器和其它多處理器體系結構也可用作處理單元1204。系統(tǒng)總線1208可以是若干類型總線結構中的任一種,它們可進一步互連到存儲器總線(有或沒有存儲器控制器)、外圍總線、以及使用各種可購買的總線體系結構的任一種的局部總線。系統(tǒng)存儲器1206包括只讀存儲器(ROM)1210和隨機存取存儲器(RAM)1212。基本輸入/輸出系統(tǒng)(BIOS)儲存在諸如ROM、EPROM、EEPROM等的非易失存儲器1210中,其中,BIOS包含如在啟動時幫助在計算機1202內的元件間傳遞信息的例程。RAM1212也可包括用于高速緩存數據的高速RAM,如靜態(tài)RAM。計算機1202還包括內部硬盤驅動器(HDD)1214(如,EIDE、SATA),其中,內部硬盤驅動器1214也可被配置成外部地用于合適的機殼(未示出);磁性軟盤驅動器(FDD)1216(如,用于對可移動磁盤1218進行讀寫)以及光盤驅動器1220(如用于讀取CD-ROM盤1222或對諸如DVD等其它高容量光學介質進行讀寫)。硬盤驅動器1214、磁盤驅動器1216和光盤驅動器1220可以分別通過硬盤驅動器接口1224、磁盤驅動器接口1226和光驅接口1228連接到系統(tǒng)總線1208。用于外部驅動器實現(xiàn)的接口1224包括通用串行總線(USB)和IEEE1394接口技術中的至少一個或兩者。驅動器及其相關聯(lián)的計算機可讀介質提供了數據、數據結構、計算機可執(zhí)行指令等的非易失存儲。對于計算機1202,驅動器和介質容納以合適的數據格式的任何數據的存儲。盡管上述計算機可讀介質的描述指的是HDD、可移動磁盤和可移動光學介質,如CD或DVD,然而本領域的技術人員可以理解,可計算機可讀的其它類型的介質,如zip驅動器、磁帶盒、閃存卡、盒式磁帶等,也可用于示例性操作環(huán)境,此外,任何這樣的介質可包含用于執(zhí)行本發(fā)明的方法的計算機可執(zhí)行指令。若干程序模塊可儲存在驅動器和RAM1212中,包括操作系統(tǒng)1230、一個或多個應用程序1232、其它程序模塊1234和程序數據1236。操作系統(tǒng)、應用程序、模塊和/或數據的所有或部分可以高速緩存在RAM1212中??梢岳斫?,本發(fā)明可以用可購買的操作系統(tǒng)或操作系統(tǒng)的組合來實現(xiàn)。用戶可通過一個或多個有線/無線輸入設備,如鍵盤1238和定位設備(如鼠標1240)向計算機1202輸入命令和信息。其它輸入設備(未示出)可包括麥克風、IR遙控器、操縱桿、游戲墊、觸針筆、觸摸屏等等。這些和其它輸入設備通常通過耦合至系統(tǒng)總線1208的輸入設備接口1242耦合至處理單元1204,但也可以通過其它接口連接,如并行端口、IEEE1394、串行端口、游戲端口、USB端口、IR接口等等。監(jiān)視器1244或其它類型的顯示設備也通過接口,如視頻適配器1246連接到系統(tǒng)總線1208。除監(jiān)視器1244以外,計算機通常包括其它外圍輸出設備(未示出),如揚聲器、打印機等等。計算機1202可在使用通過有線和/或無線通信到一個或多個遠程計算機,如遠程計算機1248的邏輯連接的網絡化環(huán)境中操作。遠程計算機1248可以是工作站、服務器計算機、路由器、個人計算機、便攜式計算機、基于微處理器的娛樂設備、對等設備或其它公用網絡節(jié)點,并通常包括許多或所有上文相對于計算機1202所描述的元件,盡管為簡明的目的,僅示出了存儲器存儲設備1250。所描述的邏輯連接包括到局域網(LAN)1252和/或較大的網絡,如廣域網(WAN)1254的有線/無線連接。這類LAN和WAN網絡環(huán)境常見于辦公室、公司,并促進了企業(yè)范圍計算機網絡,如內聯(lián)網,所有這些網絡可連接到全球通信網絡,如因特網。當在LAN網絡環(huán)境中使用時,計算機1202通過有線和/或無線通信網絡接口或適配器1256連接到局域網1252。適配器1256可便于到LAN1252的有線或無線通信,它也可包括布置在其上的無線接入點,用于與無線適配器1256通信。當在WAN網絡環(huán)境中使用時,計算機1202可包括調制解調器1258,或連接到LAN上的通信服務器,或具有用于通過WAN1254,如通過因特網建立通信的其它裝置。調制解調器1258可以是內置或外置的,并且可以是有線或無線設備,它通過串行端口接口1242連接到系統(tǒng)總線1208。在網絡化環(huán)境中,相對于計算機1202描述的程序模塊或其部分可以儲存在遠程存儲器/存儲設備1250中??梢岳斫猓境龅木W絡連接是示例性的,也可以使用在計算機之間建立通信鏈路的其它裝置。計算機1202可用于與操作上布置在無線通信中的任何無線設備或實體通信,如打印機、掃描儀、臺式和/或便攜式計算機、便攜式數據助理、通信衛(wèi)星、與無線可檢測標簽相關聯(lián)的任一設備或位置(如,公用電話亭、報亭、休息室)、以及電話。這至少包括Wi-Fi和BluetoothTM(藍牙)無線技術。由此,通信可以是如常規(guī)網絡一樣的預定義結構,或簡單地是至少兩個設備之間的特別(adhoc)通信。Wi-Fi或無線保真允許從家里的沙發(fā)、酒店房間中的床或工作的會議室連接到因特網,而不需要電線。Wi-Fi是類似于蜂窩電話的無線技術,它令如計算機等設備能夠在室內和室外發(fā)送和接收信息;在基站范圍內的任何地方。Wi-Fi網絡使用被稱為IEEE802.11(a、b、g等)的無線電技術,來提供安全、可靠、快速的無線連接。Wi-Fi網絡可用于將計算機彼此連接、連接到因特網、以及連接到有線網絡(使用IEEE802.3或以太網)。Wi-Fi網絡在未許可的2.4和5GHz無線電頻帶中操作,它具有11Mbps(802.11b)或54Mbps(802.11a)的數據速率,或具有包含兩個頻帶(雙頻帶)的產品。因此網絡可提供類似于許多辦公室中使用的基本10BastT有線以太網的真實世界性能。參考圖13,示出了依照本發(fā)明的示例性計算環(huán)境1300的示意性框圖。系統(tǒng)1300包括一個或多個客戶機1302??蛻魴C1302可以是硬件和/或軟件(如,線程、進程、計算裝置)。例如,客戶機1302也可通過采用本發(fā)明以容納cookie和/或相關聯(lián)的上下文信息。系統(tǒng)1300也包括一個或多個服務器1304。服務器1304也可以是硬件和/或軟件(如,線程、進程、計算裝置)。例如,服務器1304可容納線程,以通過使用本發(fā)明執(zhí)行變換??蛻魴C1302和服務器1304之間的一個可能的通信可以是適用于在兩個或多個計算機進程之間傳輸的數據分組的形式。例如,數據分組可包括cookie和/或相關聯(lián)的上下文信息。系統(tǒng)1300包括可用于便于在客戶機1302和服務器1304之間通信的通信框架1306(如,諸如因特網等全球通信網絡)。通信可通過有線(包括光纖)和/或無線技術來促進??蛻魴C1302操作上連接至可用于儲存對客戶機1302本地的信息(如cookie和/或相關聯(lián)的上下文信息)的一個或多個客戶機數據存儲1308。類似地,服務器1304操作上連接至可用于儲存對服務器1304本地的信息的一個或多個服務器數據存儲1310。上文所描述的包括本發(fā)明的示例。當然,不可能為了描述本發(fā)明而描述組件或方法的所有可構想的組合,但是本領域的普通技術人員可以認識到,本發(fā)明的許多其它組合和置換都是可能的。因此,本發(fā)明旨在包含落入所附權利要求書的精神和范圍之內的所有這樣的改變、修改和變化。此外,在詳細描述或權利要求書中使用了術語“包括”的意義上,這類術語是包含性的,這與術語“包含”在權利要求書中作為過渡詞時所解釋的“包含”相類似。權利要求1.一種便于非集成應用程序的接口的系統(tǒng),其特征在于,包括一人為因素提供者,它展示所述應用程序的第一個的人為因素;以及一人為因素消費者,它展示所述應用程序的第二個的人為因素,其引用是到由所述人為因素提供者持有的人為因素的至少一個的鏈接。2.如權利要求1所述的系統(tǒng),其特征在于,所述鏈接是統(tǒng)一資源定位符(URI)。3.如權利要求1所述的系統(tǒng),其特征在于,所述人為因素提供者和所述人為因素消費者是與所述各自的應用程序接口的應用程序接口(API)。4.如權利要求1所述的系統(tǒng),其特征在于,它還包括一鏈接組件,它將所述引用與所述對應的人為因素鏈接。5.如權利要求4所述的系統(tǒng),其特征在于,所述鏈接組件是由所述人為因素消費者持有的、指向人為因素的人為因素標識符。6.如權利要求4所述的系統(tǒng),其特征在于,所述鏈接組件是二元的,并與一引用人為因素和一被引用的人為因素相關聯(lián)。7.如權利要求4所述的系統(tǒng),其特征在于,所述提供者和消費者的至少一個是工具或服務。8.如權利要求1所述的系統(tǒng),其特征在于,所述人為因素提供者注冊它所提供的每一人為因素的人為因素類型,并注冊每一人為因素可持有的對應鏈接類型。9.如權利要求1所述的系統(tǒng),其特征在于,它還包括一廣義人為因素提供者(GAP),它與工具接口,以便于儲存和展示人為因素和人為因素鏈接兩者。10.如權利要求9所述的系統(tǒng),其特征在于,它還包括一GAP適配程序,它提供所述GAP和非集成應用程序之間的接口。11.如權利要求1所述的系統(tǒng),其特征在于,它還包括一高速緩存,它儲存所述人為因素和相關聯(lián)的人為因素鏈接。12.如權利要求1所述的系統(tǒng),其特征在于,它還包括一用戶界面,它便于呈現(xiàn)人為因素間的引用。13.一種其上儲存了用于實現(xiàn)權利要求1所述的系統(tǒng)的計算機可執(zhí)行指令的計算機可讀介質。14.一種采用權利要求1所述的系統(tǒng)的計算機。15.一種采用權利要求1所述的服務器。16.一種便于非集成應用程序的接口的系統(tǒng),其特征在于,包括一人為因素提供者,它是展示所述應用程序的第一個的人為因素的工具或服務;一人為因素消費者,它是展示所述應用程序的第二個的人為因素的工具或服務;以及一鏈接,它由所述人為因素消費者持有,指向所述人為因素。17.如權利要求16所述的系統(tǒng),其特征在于,所述鏈接是一人為因素標識符,它是不變且唯一的構造關鍵字。18.如權利要求16所述的系統(tǒng),其特征在于,它還包括一鏈接管理器,它通過更新和清除高速緩存內容來管理高速緩存。19.如權利要求16所述的系統(tǒng),其特征在于,所述人為因素提供者和人為因素消費者是松耦合和緊耦合中的至少一個。20.如權利要求16所述的系統(tǒng),其特征在于,它還包括一分類器,它基于涉及所述人為因素消費者、人為因素提供者和非集成應用程序中的至少一個的參數來作出推論。21.如權利要求16所述的系統(tǒng),其特征在于,所述人為因素提供者創(chuàng)建并展現(xiàn)下列中的至少一個的URI松耦合的基于服務器的交互、松耦合的客戶機、高速緩存和緊耦合交互,它們都按與調用者的合約支持人為因素專用功能。22.如權利要求16所述的系統(tǒng),其特征在于,所述人為因素消費者持有所述鏈接,其中鏈接是到所述被引用的人為因素的URI。23.一種具有計算機可執(zhí)行指令的計算機可讀介質,所述計算機可執(zhí)行指令用于執(zhí)行便于在非集成應用程序之間的接口的方法,其特征在于,所述方法包括提供一與第一非集成應用程序通信的人為因素提供者;使用所述人為因素提供者展示所述第一應用程序的人為因素;提供與第二非集成應用程序通信的人為因素消費者;使用所述人為因素消費者展示所述第二應用程序的引用;以及用一人為因素標識符將所述引用鏈接到所述人為因素。24.如權利要求23所述的方法,其特征在于,它還包括以下動作注冊所述人為因素的人為因素類型;以及注冊所述人為因素持有的鏈接類型。25.如權利要求23所述的方法,其特征在于,它還包括向用戶呈現(xiàn)所述人為因素的依賴性信息,所述信息包括鏈接類型、人為因素類型、人為因素名稱和修改日期中的至少一個。26.如權利要求23所述的方法,其特征在于,所述人為因素消費者和人為因素提供者的至少一個是web服務。27.如權利要求23所述的方法,其特征在于,它還包括生成一表示儲存在非集成應用程序中的數據的人為因素代理。28.如權利要求23所述的方法,其特征在于,所述人為因素表示源文件、缺陷、要求、測試結果和構建中的至少一個。29.如權利要求23所述的方法,其特征在于,所述鏈接動作包括一鏈接,它包括引用URI、被引用的URI和鏈接類型。30.如權利要求23所述的方法,其特征在于,它還包括發(fā)現(xiàn)哪些引用人為因素持有到特定被引用的人為因素的鏈接。31.如權利要求23所述的方法,其特征在于,它還包括當所述人為因素被創(chuàng)建、刪除和改變中的至少一種時,引發(fā)一事件。32.如權利要求23所述的方法,其特征在于,它還包括由所述人為因素提供者提供對所述人為因素的外部可尋址性。33.如權利要求23所述的方法,其特征在于,它還包括提供一廣義API,它既是人為因素提供者又是所述人為因素消費者。34.一種便于非集成應用程序的接口的系統(tǒng),其特征在于,包括用于展示第一應用程序的人為因素的裝置;用于展示第二應用程序的引用的裝置;用于用一人為因素標識符將所述引用鏈接到所述人為因素的裝置;以及用于用高速緩存裝置來高速緩存所述人為因素和所述人為因素標識符的裝置。35.如權利要求34所述的系統(tǒng),其特征在于,它還包括用于將所述高速緩存裝置與所述人為因素的來源和所述人為因素標識符的來源同步的裝置。36.如權利要求34所述的系統(tǒng),其特征在于,它還包括以XML定義所述人為因素和人為因素標識符的裝置。37.如權利要求34所述的系統(tǒng),其特征在于,它還包括用于過濾查詢的裝置。全文摘要一種便于連接非集成應用程序的體系結構。所揭示的體系結構包括一組API和約定,用于啟用先前未被構建成集成的工具之間的集成。這為基于服務器的合伙者集成和工具的客戶機集成提供了基礎,并可促進構建第三方生態(tài)系統(tǒng)的基礎。作為其支持,一人為因素提供者API展示了第一應用程序的人為因素,而一人為因素消費者API展示了第二應用程序的引用,其中,引用與到人為因素提供者的至少一個人為因素的鏈接相關聯(lián)。文檔編號G06F9/44GK1667575SQ20051005509公開日2005年9月14日申請日期2005年3月11日優(yōu)先權日2004年3月12日發(fā)明者D·W·米尼姆,O·哈夫佐古拉瑞,X·付申請人:微軟公司
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1