検証ルール

検証ルールにより、システム管理者は以下のような望ましくないデータ変更を防ぐポリシーを設定できます:

  • Epicが最終状態にある場合、カスタム値の変更を許可しない
  • 請求済みとマークされた時間記録は変更を許可しないでください
  • 「承認済み」のカスタム値の変更を「承認者」ロールを持つユーザーのみに許可する

すべての検証ルールは、トリガー(どのデータ変更に反応するか)とフィルター(変更を保存を許可するか否か)として定義されます。

検証

トリガー

トリガーには3種類あります:

  • 作成済み
  • バリデーションルールは、ユーザーがバグや機能などの新しいエンティティを追加したときにトリガーされます
  • 更新
  • 検証ルールは、ユーザーが既存エンティティのフィールド(例:ユーザーストーリーの機能や、エピックのカスタム値である予算など)を変更した際に発動します
  • 管理者は、検証をトリガーするために変更が必要なフィールド名のリストを任意で指定できます。 変更されたフィールド名を省略すると、選択されたエンティティのいかなる変更に対しても検証がトリガーされます。
  • コレクションへのデータの追加、更新、削除は、検証ルールにおいて親エンティティの更新として扱われないため、子エンティティの観点から実行する必要がある。 例えば、既存の機能にユーザーストーリーを追加した際に反応させるには、管理者はユーザーストーリーエンティティに対してルールを設定し、変更対象フィールドを機能に設定する必要があります。
  • 変更前のフィールドの元の値を確認することも可能です

    $Previous

    DSLにおいて。
  • 削除済み
  • 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]