検証ルール
検証ルールにより、システム管理者は以下のような望ましくないデータ変更を防ぐポリシーを設定できます:
- Epicが最終状態にある場合、カスタム値の変更を許可しない
- 請求済みとマークされた時間記録は変更を許可しないでください
- 「承認済み」のカスタム値の変更を「承認者」ロールを持つユーザーのみに許可する
すべての検証ルールは、トリガー(どのデータ変更に反応するか)とフィルター(変更を保存を許可するか否か)として定義されます。

トリガー
トリガーには3種類あります:
- 作成済み
- バリデーションルールは、ユーザーがバグや機能などの新しいエンティティを追加したときにトリガーされます
- 更新
- 検証ルールは、ユーザーが既存エンティティのフィールド(例:ユーザーストーリーの機能や、エピックのカスタム値である予算など)を変更した際に発動します
- 管理者は、検証をトリガーするために変更が必要なフィールド名のリストを任意で指定できます。 変更されたフィールド名を省略すると、選択されたエンティティのいかなる変更に対しても検証がトリガーされます。
- コレクションへのデータの追加、更新、削除は、検証ルールにおいて親エンティティの更新として扱われないため、子エンティティの観点から実行する必要がある。 例えば、既存の機能にユーザーストーリーを追加した際に反応させるには、管理者はユーザーストーリーエンティティに対してルールを設定し、変更対象フィールドを機能に設定する必要があります。
- 変更前のフィールドの元の値を確認することも可能です
DSLにおいて。$Previous - 削除済み
- Targetprocessのバージョンによって異なります。お使いのTargetprocessインストール環境ではまだ利用できない可能性があります
- 既存エンティティの削除前に検証が実行されるため、Validation DSLはエンティティとそのリレーションの状態にアクセスできます。
検証DSL
このフィルターは、 API v2 およびメトリクスで使用されているのと同じDSLであるバリデーションDSLで構成されており、バリデーション固有の拡張機能が含まれています。
バリデーションDSL式がに解決された true場合、検証は失敗したとみなされ、トランザクションはロールバックされる。
例えば、以下のDSLはエンティティが最終状態にある場合、トリガーに一致するあらゆる変更を拒否します:
EntityState.IsFinal == trueクエリ機能(フィールドアクセスおよび集計の深度レベル)は、 APIの<codeph>select< v2 /codeph>句と同様です。修正者によるフィルタリング
特殊$Author オブジェクトにより、データを変更しようとするユーザーに基づいて検証を設定できます。 特定のユーザーのみに変更を制限する場合に役立つ可能性があります:$Author.Idフィールドはユーザーの数値IDを返す$Author.IsAdminユーザーがシステム管理者として選択されているかどうかを示すブール値フラグ$Author.ScopedRole変更対象エンティティの範囲におけるユーザーの役割を表します。つまり、プロジェクトレベルまたはグローバルな役割です$Author.ScopedRole.Id,$Author.ScopedRole.Name
例えば、現在のユーザーがそのユーザーストーリーに割り当てられている場合にのみ、そのユーザーストーリーを変更できるようにする:
Assignments.Count(GeneralUser.Id == $Author.Id) == 0
変更前の値へのアクセス
更新トリガーを使用する場合、バリデーションDSLは特別な$Previous オブジェクトを使用して変更前の値にアクセスできます。 例えば、予算の増加を禁止するルールが設定される場合があります:Budget > $Previous.Budgetクエリ機能は変更済み値よりも $Previous 制限が多いことにご注意ください:- 最大2階層まで、例:
$Previous.Feature.Project.Name問題ないが、$Previous.Feature.Epic.PortfolioEpic.Name機能しない - コレクションへのアクセス不可、集計不可、例:
$Previous.Bugs.Count() > 0うまくいかない
削除された参照の検出
Targetprocessでのデータ削除は、更新操作を引き起こす可能性があります。 たとえば、リリースを削除すると、そのリリースにリンクされている機能も更新されます。それらの機能のリリース参照は に設定されますnull。 検証ルールでは、このような推移的な更新とユーザーが直接行った更新を区別する必要があるかもしれない。 バリデーションDSLには特別な IsBeingDeleted() 拡張機能があり、参照されたエンティティが同じ操作で削除されている場合に true 返します。 例えば、リリース自体を削除しない限り、機能リリースの変更を防ぐには、以下のDSLを使用できます:not $Previous.Release.IsBeingDeleted()
その他のDSL機能
$ChangedFields変更されたフィールド名のコレクションにアクセスすることを可能にする$ChangedFields.Contains("Budget")$Modification現在検証中のデータ変更タイプを表す文字列 - 作成、更新、削除- 名前に英数字以外の記号を含むカスタムフィールドは、[角括弧]構文を使用してアクセスする必要があります
[Expected Budget]またはFeature.[Total Time]