TFSの作業項目を作っているとどうしてもたくさんの項目を定義してしまいがちです。
本質的には必要最低限まで数を絞り込むのがベストですが、
それでも数が多い場合・・・今度はあっちの値をコピーできるところはコピーしてしまえ
というようにできるだけ入力補助をしてあげようという発想になるはずです。
そこで、作業項目にはCOPYという機能が用意されています。
たとえば、あるフィールドを2つ定義してみましょう。
<FIELD name=”フィールド1” refname=”libaty.field1” type=”String”>
</FIELD>
<FIELD name=”フィールド2” refname=”libaty.field2” type=”String”>
</FIELD>
ここでフィールド1の内容をフィールド2にコピーしたい場合、フィールド2を以下のように変えます。
<FIELD name=”フィールド2” refname=”libaty.field2” type=”String”>
<COPY from=”field” field=”libaty.field1” />
</FIELD>
このようにすると、作業項目を編集し、保存したタイミングでフィールド2の内容は
常にフィールド1の内容がコピーされている状態となります。
ところでこのCOPY機能、実にいろいろな条件をつけることができます。たとえば
・指定したフィールドの値が変更されたとき
・指定したフィールドの値が特定の値のとき
・作業項目がある状態の時
・作業項目の状態が遷移するとき
値が変わったらというのは割と多いケースだと思うので例にとってみましょう。
フィールド1の内容が変わった場合、フィールド2にフィールド1の内容をコピーする、としてみます。
この場合、フィールド2は以下のようにかわります。
<FIELD name=”フィールド2” refname=”libaty.field2” type=”String”>
<WHENCHANGED field=”libaty.field1”>
<COPY from=”field” field=”libaty.field1” />
</WHENCHANGED>
</FIELD>
ただし、これには気をつけなければならないことが2つあります。
1つは値が変わったらという条件が発動するタイミングです。たとえばフィールド1が
キーボードからの任意入力を受け付けている場合、最初の1文字目が入力されたタイミングです。
つまりキーストロークに反応しています。
2つ目はコピーされる値です。1つ目がなぜ注意点かというとキーストロークに反応するということは
フィールド1の値がまた確定していない可能性があるということです。
このため、フィールド1の内容が変更されたとき、フィールド2にコピーされるのは
変更される前のフィールド1の内容となります。変更後の値がコピーされるわけではない
というところを注意する必要があります。
まとめると、
・確定した後の値をコピーしたい場合には、一番最初に示した通り単純にコピー機能を利用する。
・変更されるときにもとの値を保存しておくような場合には、WHENCHANGEDを利用して
値が変更されるときにコピー機能を利用する。
となります。