TFS 2018工作项字段值变更时间捕获规则配置优化咨询
解决TFS工作项字段时间戳仅在特定变更时更新的问题
你已经搭建了基础的字段规则,但当前方案的核心问题在于:只要Blocked值是Yes,每次保存工作项都会触发<SERVERDEFAULT>更新时间戳,导致其他字段修改时时间被意外覆盖。我们需要调整规则逻辑,精准控制时间戳的记录和清空时机。
修正后的字段定义代码
<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" > <!-- 仅当Blocked从非Yes改为Yes时,记录当前时间 --> <WHENCHANGED field="Microsoft.VSTS.CMMI.Blocked" value="Yes"> <SERVERDEFAULT from="clock" /> </WHENCHANGED> <!-- 当Blocked从Yes改为No时,清空时间字段 --> <WHENCHANGED field="Microsoft.VSTS.CMMI.Blocked" value="No"> <EMPTY /> </WHENCHANGED> <!-- Blocked保持Yes且未被修改时,时间字段设为只读,防止其他操作覆盖 --> <WHEN field="Microsoft.VSTS.CMMI.Blocked" value="Yes"> <WHENNOTCHANGED field="Microsoft.VSTS.CMMI.Blocked"> <READONLY /> </WHENNOTCHANGED> </WHEN> <!-- Blocked为No时,字段保持只读且为空 --> <WHEN field="Microsoft.VSTS.CMMI.Blocked" value="No"> <READONLY /> <EMPTY /> </WHEN> <HELPTEXT>The is the tooltip</HELPTEXT> </FIELD>
关键规则说明
<WHENCHANGED>触发精准时间记录:只有当Blocked字段的值被主动修改为Yes时,才会调用服务器时钟写入当前时间,彻底避免了其他字段更新导致的误覆盖。- 状态变更时自动清空:当
Blocked从Yes切换到No时,自动清空Date Blocked字段,无需手动操作。 - 只读保护已记录时间:如果
Blocked已经是Yes且本次保存没有修改这个字段,Date Blocked会被设为只读,确保之前记录的时间不会被其他操作改动。 - No状态下的字段锁定:当
Blocked为No时,字段既只读又强制为空,防止无效数据录入。
调整后就能完全匹配你的需求:仅在Blocked设为Yes时记录时间,改回No时自动清空,其他字段更新不会影响已有的时间戳。
内容的提问来源于stack exchange,提问作者Pat Delaney
相关产品推荐
相关产品推荐

