若要檢視英文版的文章,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

TFS 與 Project Server 整合的欄位對應 XML 項目參考

 

發佈時間: 2016年5月

透過自訂欄位對應,您可以定義 Visual Studio Team Foundation Server (TFS) 和 Microsoft Project Server 中的應保持同步的欄位,以及 Project Server 的狀態佇列和 Team Foundation 中應更新的欄位。

System_CAPS_note注意事項

TFS 與 Project Server 整合的欄位對應,與 Microsoft Project 的對應檔不同。 如需後者檔案的詳細資訊,請參閱Customize the Microsoft Project field mapping file

每一個裝載要與 Project Server 同步處理之 Team 專案的 Team 專案集合,均應維護一組欄位對應。 若要擷取欄位對應,可以從集合將其下載到檔案。 修改檔案之後,您可以再將其上傳到集合,將變更將套用到針對該集合所定義的所有 Team 專案。 如需如何下載或上傳欄位對應的詳細資訊,請參閱自訂 TFS 與 Project Server 之間的欄位對應

本主題內容

下列欄位必須加以對應,才可支援資料同步處理。 若已自訂用以排程工作的欄位,必須自訂欄位對應來參考您所使用的欄位。

  • System.Title 必須對應到 pjTaskName。

  • System.AssignedTo 必須對應到 pjResourceNames。

  • 您用於追蹤 Team Foundation 中工作開始的欄位,必須對應到 pjTaskStart。 此欄位的預設值為 Microsoft.VSTS.Scheduling.StartDate。

  • 您用於追蹤 Team Foundation 中已完成之工作的欄位,必須對應到 pjTaskFinish。 此欄位的預設值為 Microsoft.VSTS.Scheduling.FinishDate。

每個 TFS 欄位可以指定兩個對應。 在第一個對應中,請指定要狀態佇列中之 TFS 欄位所要更新的 Project 欄位。 在第二個對應中,請指定 Project 中會更新 TFS 中之欄位的欄位。 此外,您可以指定是否要在工作項目表單上顯示 TFS 欄位,以及更新如何參考欄位和鏡像欄位。

預設所有對應的 Project 欄位也都會加以鏡像,這表示會將其值儲存在 TFS 中。

System_CAPS_important重要事項

在大部分的組態中,因為同步處理流程會需要預設欄位對應,所以不應移除。 例如,若您的企業專案計劃對應的 Team 專案從流程範本建立,且該範本採用 Microsoft Solutions Framework (MSF) for Agile Software Development 或 Capability Maturity Model Integration (CMMI) Process Improvement,請勿移除預設對應。

但您計劃對應的 Team 專案若是使用 Visual Studio Scrum 流程範本建立,便可能需要移除部分預設對應。 若您的專案集合只包含使用 Scrum 範本所建立的 Team 專案,則在設定兩項伺服器產品時,可能會收到錯誤。 為獲致最佳結果,請將 [已完成工作] (Microsoft.VSTS.Scheduling.CompletedWork) 和 [原始評估] (Microsoft.VSTS.Scheduling.OriginalEstimate) 加入您要對應的工作項目。 此外還必須從工作類型定義中,移除 <EMPTY /> 工作流程陳述式。 如需詳細資訊,請參閱對應到從 Scrum 流程範本建立的小組專案時所需的變更

下表說明指派給 Team Foundation 之欄位的預設對應。 您可以指定更新參考欄位和鏡像欄位的方式。 您可以將 OnConflict 設定為 PSWins,以使用 Project Server 中的值覆寫 Team Foundation 中的值。 若未指定 OnConflict 屬性,則欄位會維持不同的值。 如需詳細資訊,請檢閱本主題後文的欄位項目與屬性資料表。

如需鏡像欄位和同步處理流程的詳細資訊,請參閱了解管理特定欄位更新的方式

Team Foundation 欄位

Project 欄位

在工作項目表單的 [Project Server] 索引標籤上顯示欄位 (displayTfsField)

在工作項目表單的 [Project Server] 索引標籤上顯示鏡像欄位 (displayTfsMirror)

欄位更新 (OnConflict)

標題

任務名稱

Project Server 中的值會取代 Team Foundation 中的值。

指派給

資源

Project Server 中的值會取代 Team Foundation 中的值。

剩餘工作

資源的剩餘工作 (狀態佇列)

任務的剩餘工作 (Project Server)

每個值保持不變。

已完成工作

資源的實際工作 (狀態佇列)

任務的實際工作 (Project Server)

每個值保持不變。

原始評估

基準工作

Project Server 中的值會取代 Team Foundation 中的值。

開始日期

資源開始時間 (狀態佇列)

任務開始時間 (Project Server)

Project Server 中的值會取代 Team Foundation 中的值。

結束日期

資源完成時間 (狀態佇列)

任務完成時間 (Project Server)

Project Server 中的值會取代 Team Foundation 中的值。

若您將更多 Project 欄位加入對應,可以在 Team Foundation 中的工作項目表單之 [Project Server] 索引標籤上加以顯示。 如需此索引標籤的詳細資訊,請參閱加入至 TFS 以支援資料同步處理的 Project Server 欄位

您可以使用 field 元素,在 Team Foundation 中指定要同步處理的參考欄位。 所有的 field 元素都包含在 mappingFilepersistablesMicrosoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping 容器元素中。

System_CAPS_important重要事項

將欄位從 TFS 對應到 Project Server 時,請務必符合這些欄位的資料類型。 否則,當您嘗試上傳欄位對應時,可能會出現下列錯誤:

[索引 (以零為起始) 必須大於或等於零,並且小於引數清單的大小]。

如需詳細資訊,請參閱在 TFS 與 Project Server 整合中對應 Project Server 欄位的限制

下列範例示範 XML 項目的巢狀結構。 若要檢視預設對應,請參閱本主題後文的預設對應檔

<mappingFile>
   <persistables>
      <Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping>
         <field tfsName="System.Title" tfsMirrorName="Mirror.System.Title" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin">
            <tfsToTarget>
               <target provider="ProjectServerStatusQueue" name="pjTaskName" />
            </tfsToTarget>
            <targetToTfs>
               <target provider="ProjectServerPublished" name="pjTaskName" />
            </targetToTfs>
         </targetToTfs>
      </field>

         . . .

    </Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping>
  </persistables>
</mappingFile>

下列語法定義 field 項目的屬性:

<field tfsName="FieldName" tfsMirrorName="FieldMirrorName" displayTfsField="true | false" displayTfsMirror=" true | false" onConflict="PSWin">

下列語法定義 target 項目的屬性:

<target provider="ProviderName" name="ProjectFieldName" />

若要指定欄位名稱,請在易記的名稱連字前加上 "pj" 字首。 例如,Status Manager 的欄位名稱為 pjStatusManager,而 Custom 01 的欄位名稱為 pjCustom01。

下表說明 field 項目的子項目和屬性。 請將 Team Foundation 欄位對應到您要在狀態同步處理期間更新其值的 Project 資源欄位。 請將 Team Foundation 欄位對應到發行同步處理期間,值會更新 Team Foundation Server 的 Project 工作鑭位。 此外,您對應的欄位單元必須符合所建立的準則。 如需詳細資訊,請參閱在 TFS 與 Project Server 整合中對應 Project Server 欄位的限制

項目

屬性

描述

field

在 Team Foundation 中指定要對應的欄位及其對應方式。

tfsName

在 Team Foundation 中指定要同步處理之欄位的參考名稱。 您必須指定一個 Team 專案集合中所定義的欄位。 執行 witadmin listfields 命令可列出集合中的所有欄位。 如需詳細資訊,請參閱管理工作項目欄位 [witadmin]

tfsMirrorName

必要項。 在 Team Foundation Server 中指定用於儲存 [Project Server] 欄位值的參考名稱。 您可以在該參考名稱前面加上 "Mirror" 字首。例如,您可以指定 Mirror.System.Title 代表 System.Title。

System_CAPS_note注意事項

您指定的鏡像欄位會自動建立。 您無須將該鏡像欄位加入工作項目的類型定義。

displayTfsField

選擇項。 此屬性預設會設定為 true 若此屬性設定為 true,該欄位便會顯示在 Team Foundation 中,工作項目表單的 [Project Server] 索引標籤上。 若此屬性設定為 false,該欄位便不會顯示在表單上。 預設只有 [已完成工作] 和 [剩餘工作] 欄位會顯示在表單上。

displayTfsMirror

選擇項。 此屬性預設會設定為 true 若此屬性設定為 true,該欄位便會顯示在 Team Foundation 中,工作項目表單的 [Project Server] 索引標籤上。 若此屬性設定為 false,該欄位便不會顯示在表單上。

onConflict

選擇項。 指定同步處理引擎更新參考欄位的方式。 唯一的有效值是 PSWin

若此屬性設定為 PSWin,當目前從 Project Server 發行的值與鏡像中的值不同時,將會更新參考欄位的值。

若未定義此屬性,表示繼續維持兩種腳本。 換言之,Project 中的值可能會與 Team Foundation 中的值不同。 預設 Project 中的值一律會取代 [標題]、[指派給]、[開始日期] 和 [結束日期] 等欄位的值。 預設只有 [已完成工作] 和 [剩餘工作] 欄位會維持兩種腳本。 如需詳細資訊,請參閱包含時數之欄位的更新

tfsToTarget

指定 Team Foundation 要更新的 Project 欄位名稱。

target

指定要從 Team Foundation 接收更新的目標。

provider

指定更新提供者的名稱。 對於 tfsToTarget,唯一的有效值是 ProjectServerStatusQueue

name

指定要以 Team Foundation 中的值更新的 Project 欄位名稱。 您只能對應 Project Server 中的內建或企業自訂欄位。 如需可用欄位的清單,請參閱在 TFS 與 Project Server 整合中對應 Project Server 欄位的限制

targetToTfs

指定欄位對應,以將 Project Server 中的更新同步處理到 Team Foundation Server。

target

指定要從 Project Server 接收更新的目標。

provider

指定更新提供者的名稱。 對於 targetToTfs,唯一的有效值是 ProjectServerPublished

name

指定 Project 中要更新 Team Foundation 中之欄位的欄位名稱。 您只能對應內建或企業自訂欄位。 如需可用欄位的清單,請參閱在 TFS 與 Project Server 整合中對應 Project Server 欄位的限制

transforms

選擇項。 transform 元素的容器元素。

transform

transformType

指定要套用到欄位的轉換類型。 對於 targetToTfs,您只能指定 transformType,而且僅適用於數值欄位類型。 唯一的有效值是 ClearValueIfParent

當同步處理引擎在工作項目下偵測到與 Project Server 同步處理的階層時,會執行工作和指派彙總,以傳送至 Project Server。 transformType 若設定為 ClearValueIfParent,同步處理引擎會清除 Team Foundation Server 中之父工作項目上的工作欄位,以避免標準 Team Foundation Server 報表中的資料不正確。

下列程式碼列出當您執行 TfsAdmin ProjectServer /UploadFieldMappings 命令並指定 /useDefaultFieldMappings 選項時所定義的預設欄位對應。 您可以將這些對應下載到檔案,然後在其中加入元素,或是修改所列欄位的屬性。

如需可以在加入要參與資料同步處理之類型時,加入工作項目類型之所有欄位的清單,請參閱加入至 TFS 以支援資料同步處理的 Project Server 欄位

<mappingFile>
  <persistables>
    <Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping>
      <field tfsName="System.Title" tfsMirrorName="Mirror.System.Title" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin">
        <tfsToTarget>
          <target provider="ProjectServerStatusQueue" name="pjTaskName" />
        </tfsToTarget>
        <targetToTfs>
          <target provider="ProjectServerPublished" name="pjTaskName" />
        </targetToTfs>
      </field>
      <field tfsName="System.AssignedTo" tfsMirrorName="Mirror.System.AssignedTo" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin">
        <tfsToTarget>
          <target provider="ProjectServerStatusQueue" name="pjTaskResourceNames" />
        </tfsToTarget>
        <targetToTfs>
          <target provider="ProjectServerPublished" name="pjTaskResourceNames" />
        </targetToTfs>
      </field>
      <field tfsName="Microsoft.VSTS.Scheduling.CompletedWork" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.CompletedWork" displayTfsField="true" displayTfsMirror="true">
        <tfsToTarget>
          <target provider="ProjectServerStatusQueue" name="pjResourceActualWork" />
        </tfsToTarget>
        <targetToTfs>
          <target provider="ProjectServerPublished" name="pjTaskActualWork" />
            <transforms>
               <transform transformType="clearValueIfParent">
            </transforms>
        </targetToTfs>
      </field>
      <field tfsName="Microsoft.VSTS.Scheduling.RemainingWork" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.RemainingWork" displayTfsField="true" displayTfsMirror="true">
        <tfsToTarget>
          <target provider="ProjectServerStatusQueue" name="pjResourceRemainingWork" />
        </tfsToTarget>
        <targetToTfs>
          <target provider="ProjectServerPublished" name="pjTaskRemainingWork" />
            <transforms>
               <transform transformType="clearValueIfParent">
            </transforms>
        </targetToTfs>
      </field>
      <field tfsName="Microsoft.VSTS.Scheduling.OriginalEstimate" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.OriginalEstimate" displayTfsField="false" displayTfsMirror="true" onConflict="PSWin">
        <targetToTfs>
          <target provider="ProjectServerPublished" name="pjTaskBaselineWork" />
        </targetToTfs>
      </field>
      <field tfsName="Microsoft.VSTS.Scheduling.StartDate" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.StartDate" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin">
        <tfsToTarget>
          <target provider="ProjectServerStatusQueue" name="pjResourceStart" />
        </tfsToTarget>
        <targetToTfs>
          <target provider="ProjectServerPublished" name="pjTaskStart" />
        </targetToTfs>
      </field>
      <field tfsName="Microsoft.VSTS.Scheduling.FinishDate" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.FinishDate" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin">
        <tfsToTarget>
          <target provider="ProjectServerStatusQueue" name="pjResourceFinish" />
        </tfsToTarget>
        <targetToTfs>
          <target provider="ProjectServerPublished" name="pjTaskFinish" />
        </targetToTfs>
      </field>
    </Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping>
  </persistables>
</mappingFile>
顯示: