字段值更改时的 TFS 2018 捕获日期

TFS 2018 capture date when field value changed

我正在工作项中添加一个字段,我想在一个单独的字段中捕获更改该字段的日期和时间。我有它的工作,排序。当用户将下拉列表值更改为 Yes 时,下方会打开一个字段,用于记录值更改为 Yes 的时间。当用户保存工作时间时,系统会将保存时间添加到该字段。我可以回到那个工作项,我可以看到它的价值。但是,如果我更新任何其他信息并保存工作项,时间戳将再次更新为刚刚保存 WIT 的时间。我想要的工作流程是仅在设置该字段时设置时间。我还有一个规则,如果值从是更改为否,该字段将清空该字段。

这是相关字段的字段定义部分。

      <FIELD name="Blocked" refname="Microsoft.VSTS.CMMI.Blocked" type="String" reportable="dimension" >
        <ALLOWEDVALUES expanditems="true">
          <LISTITEM value="Yes" />
          <LISTITEM value="No" />
        </ALLOWEDVALUES>
        <DEFAULT from="value" value="No"/>
      </FIELD>  
      <FIELD name="Date Blocked" refname="XXX.DateBlocked" type="DateTime" reportable="detail" >
        <WHEN field="Microsoft.VSTS.CMMI.Blocked" value="Yes">
          <SERVERDEFAULT from="clock" />
        </WHEN>
        <WHEN field="Microsoft.VSTS.CMMI.Blocked" value="No">
          <READONLY/>
          <EMPTY/>
        </WHEN>
        <HELPTEXT>The is the toole tip</HELPTEXT>
      </FIELD>

But if I update any other information and save the workitem the time stamp is updated again to when the WIT was just saved

这是因为当您更新其他信息并保存工作项时。以下规则中的条件仍然是 true。这样Date Blocked字段会再次更新。

<WHEN field="Microsoft.VSTS.CMMI.Blocked" value="Yes">
          <SERVERDEFAULT from="clock" />
</WHEN>

您可以通过添加另一个条件 WHENNOTCHANGED 来解决此问题。见下文:

<FIELD name="Date Blocked" refname="XXX.DateBlocked" type="DateTime" reportable="detail" >
        <WHENNOTCHANGED field="Microsoft.VSTS.CMMI.Blocked">  
           <READONLY />  
       </WHENNOTCHANGED> 
        <WHEN field="Microsoft.VSTS.CMMI.Blocked" value="Yes">
          <SERVERDEFAULT from="clock" />
        </WHEN>
        <WHEN field="Microsoft.VSTS.CMMI.Blocked" value="No">
          <READONLY/>
          <EMPTY/>
        </WHEN>
        <HELPTEXT>The is the toole tip</HELPTEXT>
      </FIELD>

通过添加 <WHENNOTCHANGED field="Microsoft.VSTS.CMMI.Blocked">Date Blocked 将变为只读,并且如果在更新其他信息时未更新 Blocked 则无法更改