TFS 2018 WebLayout扩展强制所有贡献从扩展到显示

时间:2018-06-05 21:38:53

标签: tfs tfs2018

我们正在将本地TFS2015移至TFS2018U1,我正在使用新的WebLayout定义。

我们有一些高度定制的工作项类型来跟踪我们的大型项目,这是Epic级别上方的自定义工作项类型。这些WIT中的状态引擎很复杂,因此我想在显示工作流的工作项中显示一个图表。只需嵌入CDATA< img>没有给我足够的控制来调整包含图像的大小,所以我写了一个简单的扩展,让我更多地控制这个显示。扩展的内容运作正常;我的问题是工作项WebLayout中的意外行为。

我们有三种项目类型,所以我的扩展在vss-extension.json中有三个贡献(名称已被更改):

"contributions": [
    {
        "id": "projects.type1.workflow-group",
        "type": "ms.vss-work-web.work-item-form-group",
        "targets": [
            "ms.vss-work-web.work-item-form"
        ],
        "properties": {
            "name": "Project Type 1 Workflow",
            "uri": "project-type-1-workflow-group.html",
            "height": 800
        }
    }, {
        "id": "projects.type2.workflow-group",
        "type": "ms.vss-work-web.work-item-form-group",
        "targets": [
            "ms.vss-work-web.work-item-form"
        ],
        "properties": {
            "name": "Project Type 2 Workflow",
            "uri": "project-type-2-workflow-group.html",
            "height": 800
        }        
    }, {
        "id": "projects.type3.workflow-group",
        "type": "ms.vss-work-web.work-item-form-group",
        "targets": [
            "ms.vss-work-web.work-item-form"
        ],
        "properties": {
            "name": "Project Type 3 Workflow",
            "uri": "project-type-3-workflow-group.html",
            "height": 800
        }
    }

我的三个不同的工作项类型定义然后分别调用其中一个扩展名:

<WebLayout>
  <Extensions>
    <Extension Id="MyAccount.web-layout" />
  </Extensions>
  <Page Label="Page1">
    ...
  </Page>
  <Page Label="Page2">
    ...
  </Page>
  <Page Label="Page3">
    <Section>
      ...
    </Section>
    <Section>
      <GroupContribution Id="MyAccount.web-layout.projects.project1.workflow-group" Label="Workflow" />
    </Section>
  </Page>
...
</WebLayout>

我的问题是两个未使用的扩展贡献被注入到每个工作项类型中。例如,当我查看项目类型1工作项时,我看到项目类型1工作流/图像我想要它,但其他两个工作流/图像被注入WebLayout的第一页,尽管工作项类型定义不参考它们;当我导入工作项类型定义时,它们不存在,当我将它们导出时,它们会神奇地出现。

当我从TFS导出工作项类型定义时,有两个GroupContribution标记注入到第一页的第二部分(第一部分是System.Description,它也是由TFS注入的,这是一个单独的问题):

        <GroupContribution Label="Project Type 2 Workflow" Id="MyAccount.web-layout.projects.project2.workflow-group" />
        <GroupContribution Label="Project Type 3 Workflow" Id="MyAccount.web-layout.projects.project3.workflow-group" />

我不想为我想要使用的每个GroupContribution构建单独的扩展;我可以创建一个单独的GroupContribution,动态地确定要显示的图像,但如果我想开始添加其他GroupContribution(或PageContribution等)内容,我担心我会遇到同样的问题。

如何使用具有多个贡献的扩展,而不使MS / TFS将未使用的扩展注入我的Web布局的随机部分?

1 个答案:

答案 0 :(得分:1)

似乎当工作项类型定义引用扩展时,该扩展中的所有贡献都将出现在WebLayout中,无论它们是否在WebLayout定义中明确使用。但是,您可以明确引用您不想查看/使用的那些,并隐藏它们:

<WebLayout>
  <Extensions>
    <Extension Id="MyAccount.web-layout" />
  </Extensions>
  <Page Label="Page1">
    ...
  </Page>
  <Page Label="Page2">
    ...
  </Page>
  <Page Label="Page3">
    <Section>
      ...
    </Section>
    <Section>
      <GroupContribution Id="MyAccount.web-layout.projects.project1.workflow-group" Label="Workflow" />          
      <GroupContribution Id="MyAccount.web-layout.projects.project2.workflow-group" Label="Workflow" Visible="false" />         
      <GroupContribution Id="MyAccount.web-layout.projects.project3.workflow-group" Label="Workflow" Visible="false" />
    </Section>
  </Page>
...
</WebLayout>