アクション検証フック例

アクション検証フックは、一連の関連フィールド値が有効かどうかなど、フィールド レベルでの検証が困難な条件を確認します。フィールド レベルの検証フックは、フィールドが変更されると直ちに実行されます。一方、アクション検証フックは、ユーザーがレコードの編集を完了してデータベースへのコミット準備ができるまで実行されません。

次の例では、ユーザーが、指定のプロジェクトに対して正しいクライアント オペレーティング システム (OS) 値を入力したことを確認します。プロジェクトに指定されたオペレーティング システムがサポートされていない場合、このフックは検証エラー メッセージを生成し、戻します。

VBScript

Function defect_Validation(actionname, actiontype)

    ' actionname As String

    ' actiontype As Long

    ' defect_Validation As String

    ' action = teststate

    set sessionObj = GetSession

    ' Get the client OS platform the user indicated.

    platform = GetFieldValue("client_os").GetValue()

    ' Get the project name the user indicated. This information

    ' is stored on a referenced, stateless record.

    projectName = GetFieldValue("project.name").GetValue()

    ' Check the project name against the OS type. If the given project 

    ' is not targeted for that platform, return a validation error.

    If projectName = "Gemini" Then

      If platform <> "NT" Then

         defect_Validation = "That project only supports NT."

      End If

    ElseIf projectName = "Aquarius" Then

      If platform <> "Unix" Then

         defect_Validation = "That project only supports Unix."

      End If

    End If

End Function 

Perl

sub defect_Validation {

    my($actionname, $actiontype) = @_;

    my $result;

    # $actionname as string scalar
    # $actiontype as long scalar
    # $result as string scalar
    # action = teststate

    # Returns a non-empty string explaining why the action
    # can not commit with the current values.
    # Or, if it is valid, returns an empty string value.

    my ($session,

      $platform,

      $projectRecordID,

      $projectRecord,

      $projectName,

    );

    $session = $entity->GetSession();

    # Get the client OS indicated by the user.

    $platform = $entity->GetFieldValue("client_os")->GetValue();

    # Get the project name the user indicated. This information

    # is stored on a referenced, stateless record.

    $projectName = $entity->GetFieldValue("project.name")->GetValue();

    # Check the project name against the OS type. If the

    #  given project is not targeted for that platform,

    #  return a validation error.

    if ($projectName eq "Gemini") {

      if ($platform != "NT") {

        $result = "That project only supports NT.";

      } 

    } elsif ($projectName eq "Aquarius") {

      if ($platform != "Unix"){

        $result = "That project only supports Unix.";

      } 

    }

    return $result;

} 

フィードバック