3

我已将部门批准添加到标准 CMMI 模板要求工作项。我想限制 System.State 字段,以便只有在所有部门批准都设置为“是”时才能将其从建议更改为活动。
需要批准的工作项

我已尝试对 Requirement.xml 进行以下更改

<FIELD name="State" refname="System.State" type="String" reportable="dimension">
  <WHEN field="Approval.Marketing" value="No">
    <READONLY />
  </WHEN>
  <WHEN field="Approval.Quality" value="No">
    <READONLY />
  </WHEN>
  <WHEN field="Approval.RD" value="No">
    <READONLY />
   </WHEN>
   <WHEN field="Approval.System" value="No">
     <READONLY />
   </WHEN>
   <WHEN field="Approval.ProgManagement" value="No">
     <READONLY />
   </WHEN>
</FIELD>

如果任何批准字段设置为“否”,这就是我想要的,这会导致 State 字段变为 READONLY。但是,在创建新需求时会导致问题,因为最初的批准都是“否”,因此由于 READONLY 条件,没有设置 State 的初始“Proposed”默认值。我想要做的是将逻辑添加到上面的 WHEN 条件中,以将它们条件 System.State="Proposed" 相结合。我尝试嵌套 WHEN 子句,例如

<FIELD name="State" refname="System.State" type="String" reportable="dimension">
  <WHEN field="System.State" value="Proposed">
    <WHEN field="Approval.Marketing" value="No">
      <READONLY />
    </WHEN>
         . . .
  </WHEN>
</FIELD>

但这会在导入时出现错误,即WHEN子句不能包含WHEN。当任何 Approval 字段设置为“No”时,如何禁止将 State 从Proposed更改为Active

4

1 回答 1

0

我花了一些时间弄清楚是否可以想出一个可行的变体,因为您无法像其他字段那样为 System.State 设置默认值。在我想出一些可行的东西之前,我可能经历了 50 种左右的变化。当然,它并不理想,但它会在初始创建后解决您的问题。

您可以在每个过渡状态中添加您的 when 子句。对于我的示例,我正在使用优先级字段并执行以下操作:

<State value="Proposed">
  <FIELDS>
    <FIELD refname="Microsoft.VSTS.Common.ResolvedDate">
      <EMPTY />
    </FIELD>
    ...
    <FIELD refname="System.State">
      <WHEN field="Microsoft.VSTS.Common.Priority" value="2">
        <READONLY />
      </WHEN>
    </FIELD>
  </FIELDS>
</State>

当然,您必须将您的条款添加到其他状态:活动、关闭和已解决。

一旦你这样做,创建一个新的需求。创建新需求时,您有两种选择:

您可以将所有选项设置为是,将状态设置为建议并保存。然后返回并将它们设置为否并保存。

或者

将您的自定义字段全部更改为默认为是。创建需求并保存。编辑它,将所有值切换为否,保存。

无论您选择哪种方式,一旦这个最初的障碍随着需求的创建而结束。它会按照您的意愿行事。换句话说,如果任何值都不是,那么它将使状态为只读。

鉴于 System.State 字段的限制,这是我能想到的最好的方法。

于 2011-06-30T01:49:54.510 回答