プロジェクト・スクリプトの例

この項では、独自のプロジェクト・スクリプトを記述する際の参考となる例をいくつか紹介します。

このトピックの内容:

例:[新規不具合]ダイアログ・ボックスのフィールドのカスタマイズ

この例では、[新規不具合]ダイアログ・ボックスのフィールド・レイアウトとその他のフィールド・プロパティをカスタマイズする方法を示します。同様のコードを作成することで、[不具合の詳細]ダイアログ・ボックスのレイアウトを整えることができます。

この例には、以下のサンプル関数が含まれます。

  • SetFieldApp 関数:フィールド名とそのプロパティをパラメータとして受け取り、フィールドにプロパティを割り当てます。

    次のコードを Bug_SharedFunction イベントに追加します。この関数は、フィールドの可視性、フィールドが必須かどうか、フィールドが表示されるべきページ(タブ)の番号、表示の順序(左から右、上から下)などのフィールドのプロパティを割り当てます。

    Copy code
    function SetFieldApp(fieldName, Vis, Req, PNo, VOrder){
        var bugfield = Bug_Fields(fieldName);
        bugfield.IsVisible = Vis;
        bugfield.IsRequired = Req;
        bugfield.PageNo = PNo;
        bugfield.ViewOrder = VOrder;
        console.log("SetFieldApp");
    }
  • FieldCust_AddDefect 関数:[不具合の追加]ダイアログ・ボックス内の各フィールドに対して SetFieldApp を呼び出し、フィールドのプロパティを設定します。一部のフィールドでは、FieldCust_AddDefect は、現在のユーザが属するユーザ・グループを確認して、それに合わせてフィールドのプロパティをカスタマイズします。FieldCust_AddDefect の呼び出しは、Bug_New イベント・プロシージャ内に配置されます。

    • Bug_New イベントに、すべてのユーザ・グループに共通のフィールドを処理する次のサンプル・コードを追加します。このコードは、特定のユーザ・グループに対してのみダイアログ・ボックス内に表示されるフィールド、ユーザごとに異なるプロパティを持つフィールドには、条件ステートメントを使用します。

      JavaScript の例:

      Copy code
      function FieldCust_AddDefect()
      {
          // 不具合のフィールドを初期化する 
          for (var i= 0; i<= Bug_Fields.Count -1; i++)
          {
              SetFieldApp(Bug_Fields.FieldById(i).FieldName, false, false, 100, 0);
          }
          var ViewNum = 0;
          var PageNum = 0;
          // すべてのユーザ・グループに共通のフィールドを設定する 
          SetFieldApp("BG_DESCRIPTION", true, false, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_SUMMARY", true, true, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_DETECTED_BY", true, true, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_DETECTION_DATE", true, true, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_DETECTION_VERSION", true, true, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_SEVERITY", true, true, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_PRIORITY", true, true, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_PROJECT", true, false, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_REPRODUCIBLE", true, false, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          SetFieldApp("BG_STATUS", true, false, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          // ユーザ・グループごとに異なるフィールドを設定する。 
          // 1 ユーザが複数のユーザ・グループに属したり、グループのいずれにも 
          // 属さないようにすることができるため、Else ステートメントは必要ない。
          if (User.IsInGroup("Developer"))
          {
             SetFieldApp("BG_PLANNED_CLOSING_VERSION", true, false, PageNum, ViewNum);
             ViewNum = ViewNum + 1;
             SetFieldApp("BG_PLANNED_FIX_TIME", true, false, PageNum, ViewNum);
             ViewNum = ViewNum + 1;
          }
        
          if (User.IsInGroup("QATester")) 
          {
             PageNum = PageNum + 1;
             SetFieldApp("BG_USER_01", true, false, PageNum, ViewNum);
             ViewNum = ViewNum + 1;
             SetFieldApp("BG_USER_02", true, false, PageNum, ViewNum);
             ViewNum = ViewNum + 1;
          }
          
          SetFieldApp("BG_ACTUAL_FIX_TIME", true, false, PageNum, ViewNum);
          ViewNum = ViewNum + 1;
          // ...
          console.log("FieldCust_AddDefect");
    • Bug_New イベント・プロシージャに FieldCust_AddDefect の呼び出しを追加して、ユーザが新規不具合を追加するときに、この関数がトリガされるようにします。

      JavaScript の例:

      Copy code
      function Bug_New() {
          FieldCust_AddDefect();
      }

先頭に戻る

例:ユーザがアクションを実行できないようにする

この例では、特定の状況下でユーザがアクションを実行できないようにする方法を示します。

このコードは、不具合ステータスが New の場合、ユーザが不具合を削除できないようにします。

ActionCanExecute イベント・プロシージャに次のコードを追加して、ユーザがアクションの実行を試みるときに、確認が実行されるようにします。

Copy code
function ActionCanExecute(actionName) {
   if (actionName === 'Defects.DeleteDefect') {
     if (Bug_Fields("BG_STATUS").Value === 'New') {
        MsgBox('Defect with New status cannot be deleted.');
        return false;
      }  
    }
    return true;
 }

先頭に戻る

例:エンティティの詳細ダイアログ・ボックスのタブ名を変更する

この例では、[新規不具合]ダイアログ・ボックスのタブ名をカスタマイズする方法を示します。この例では、タブの名前を「一般」、「環境」、「ビジネスケース」に設定します。

Defects_GetDetailsPageName イベント・プロシージャに次の JavaScript コードを追加します。このイベント・プロシージャは ALM が[新規不具合]ダイアログ・ボックスを開く前に、トリガされます。

Copy code
function GetDetailsPageName(pageName, pageNum) {
    if (ActiveDialogName === "New Bug") {
        var detailsPageName;
        switch (pageNum) {
            case 1
                detailsPageName = "一般";
                break;
            case 2
                detailsPageName = "環境";
                break;
            default
                detailsPageName = "ビジネスケース";
                break;
        }
        return detailsPageName;
    }
}

先頭に戻る

例:メモ・フィールドにテンプレートを追加する

プロジェクト・スクリプトを使用して、メモ・フィールドに標準設定・テンプレートを追加できます。この例では、ユーザ定義のメモ・フィールド BG_USER_25 にテキストを追加して、不具合が追加されたときにテンプレートを表示します。

Bug_New イベント・プロシージャに次の JavaScript コードを追加します。

Copy code
    function Bug_New() {
        Bug_Fields("BG_USER_25").Value = "<html><body><b>ステップ・バイ・ステップ・シナリオ:</b>" + "<br><br><br><b>ユーザへの影響:</b></body></html>";
        console.log("Bug_New");
    }

先頭に戻る

例:ユーザ・グループに基づいてフィールドを変更する

この例では、不具合を入力するユーザのユーザ・グループに合わせて、フィールド値を変更する方法を例示します。

この例では、ユーザ定義フィールド[BG_USER_01]は、不具合を検出したユーザが発見方法を入力できる検出モード・フィールドであるとします。取り得る値は、公式テスト非公式テストBTW です。

例では、QATester グループに属さないユーザが不具合をオープンすると、検出モード・フィールドの値が BTW に設定されます。QATester グループに属するユーザによって不具合が開かれた場合、標準設定値は公式テストに設定されます。

Bug_New イベントに次の JavaScript コードを追加して、不具合が追加されたときにトリガされるようにします。

Copy code
    function Bug_New() {
        if (!(User.IsInGroup("QATester")))
           {
             Bug_Fields("BG_USER_01").Value = "BTW";
           }
        else
        {
          Bug_Fields("BG_USER_01").Value = "公式テスト";
        }
        console.log("Bug_New");
}

先頭に戻る

例:別のフィールドに基づいてフィールドを変更する

この例では、別のフィールドに入力された値に基づいて、フィールド値を変更する方法を示します。

たとえば、カテゴリ・フィールドが UI Suggestion に設定されている場合は、ユーザ alex_qc に不具合を割り当て、カテゴリ・フィールドが Security Issue に設定されている場合は、ユーザ alice_qc に不具合を割り当てることができます。

例では、ユーザ定義フィールド[BG_USER_05]がカテゴリの格納に使用されていることを想定しています。不具合モジュールで[カテゴリ]フィールドが変更されると、[BG_RESPONSIBLE]フィールドにそれに合った値が割り当てられます。

Bug_FieldChange イベント・プロシージャに次の JavaScript コードを追加して、ユーザが不具合のフィールド値を変更するとトリガされるようにします。

Copy code
    function Bug_FieldChange(fieldName) {
        if (fieldName == "BG_USER_05") {
            switch (Bug_Fields("BG_USER_05").Value)
            {
                case "UI Suggestion"
                    Bug_Fields("BG_RESPONSIBLE").Value="alex_qc";
                    break;
                case "Security Issue"
                    Bug_Fields("BG_RESPONSIBLE").Value="alice_qc";
                    break;
                default
                    Bug_Fields("BG_RESPONSIBLE").Value="non-assigned";
            }
        }
        console.log("Bug_FieldChange");
}

先頭に戻る

例:フィールド変更時にフィールドのプロパティを変更する

この例では、別のフィールドが変更されたときにあるフィールドのプロパティを変更する方法を示します。

この例では、不具合のステータスBG_STATUSClosed(終了)に変更するときに、ユーザはフィールド[終了バージョン](BG_CLOSING_VERSION)に値を入力する必要があります。

Bug_FieldChange イベント・プロシージャに次の JavaScript コードを追加して、ステータスが Closed(終了)に変更されたときに、[終了バージョン]フィールドを必須フィールドにします。

Copy code
function Bug_FieldChange(fieldName) {
    if (fieldName == "BG_STATUS")
    {
        if (Bug_Fields("BG_STATUS").Value == "Closed")
        {
            Bug_Fields("BG_CLOSING_VERSION").IsRequired=true;
        }
        else 
        {
            Bug_Fields("BG_CLOSING_VERSION").IsRequired=false;
        }
    }
    else 
    {
        // コードをここに入力します;
    }
    console.log("Bug_FieldChange");
}

先頭に戻る

例:特定のケースでエンティティが更新可能であるかを検証する

この例では、CanPost イベント・プロシージャを使用して、すべてのフィールドの検証を実行する方法を示します。たとえば、このコード・セグメントにより、ユーザはコメントの追加なしに不具合を却下できないようにすることができます。

この例では、[コメント]フィールド(BG_DEV_COMMENTS)に説明が入力されていない場合、ユーザは不具合ステータス(BG_STATUS)を[却下]に変更できません。

Bug_CanPost イベントに次の JavaScript コードを追加して、ユーザが不具合の却下を試みるときに、確認が実行されるようにします。

Copy code
    function Bug_CanPost() {
        // 関数の戻り値を初期化して、予期しない動作を防ぐ。
        var Bug_CanPost = false;
        if (Bug_Fields("BG_STATUS").IsModified && Bug_Fields("BG_STATUS").Value == "Rejected" &&  !(Bug_Fields("BG_DEV_COMMENTS").IsModified))
        {
            Bug_CanPost = false;
            MsgBox("不具合を却下する際、コメントを入力する必要があります。");
            return Bug_CanPost;
        }  
        else
        {
            Bug_CanPost = true;
            return Bug_CanPost;
        }     
        console.log("Bug_CanPost");
}

先頭に戻る

例:フィールドを検証する

この例では、単一フィールド値を検証する方法を示します。たとえば、次のコード・セグメントは、特定グループに属するユーザが不具合の優先度を下げられないようにする方法を示します。

この例では、ユーザが QATester グループに属していて、[BG_PRIORITY]フィールドを更新する場合、[BG_PRIORITY]フィールドの新しい値を現在の値よりも低くすることはできません。

この例では、プロジェクトの[優先度]フィールド・リストが、値を昇順にソートしたときに小さい優先度が先頭になることを前提としています。たとえば、次の要素であれば、リストはこの要件を満たします。1 - 低い、2 - 普通、3 - 高い

Bug_FieldCanChange イベント・プロシージャに次の JavaScript コードを追加して、ユーザが不具合のフィールド値を変更しようとするとトリガされるようにします。

Copy code
function Bug_FieldCanChange(fieldName, newValue) {
   // 関数の戻り値を初期化して、予期しない動作を防ぐ。
   var Bug_FieldCanChange = true;
   if (User.IsInGroup("QATester") && fieldName == "BG_PRIORITY"
      {
          if (newValue < Bug_Fields("BG_PRIORITY").Value) 
             { 
                Bug_FieldCanChange = false;
                MsgBox("You do not have permission to lower " + "defect priority.");
                return Bug_FieldCanChange;
              }
              else
              {
                Bug_FieldCanChange = true;
                return Bug_FieldCanChange;
              }
      }
    else
      {
      // コードをここに入力します
      }       
    console.log("Bug_FieldCanChange");                
}

先頭に戻る

例:動的フィールド・リストを提示する

この例では、別のフィールドの値に応じて、あるフィールド内のフィールド・リストを変化させる方法を示します。

ユーザ定義関数 SW_SetLists_Environment は[Environment Specification]フィールド(BG_USER_02)の値を確認し、それに合ったフィールド・リストを[Environment Type]フィールド(BG_USER_01)に割り当てます。

この例では、フィールド・リストがプロジェクト内で定義されていることが想定されています。詳細については、フィールド・リストのカスタマイズを参照してください。

  • Bug_MoveTo イベント・プロシージャに次の JavaScript コードを追加して、ユーザが不具合モジュール内でフォーカスを変更するときに、ユーザ定義関数 SW_SetLists_Environment が呼び出されるようにします。

    Copy code
    function Bug_MoveTo() {
        SW_SetLists_Environment();
        console.log("Bug_MoveTo");
    }
  • Bug_FieldChange イベント・プロシージャに次の JavaScript コードを追加して、不具合モジュール内でユーザが[Environment Type]フィールド(BG_USER_01)の値を変更するときに、ユーザ定義関数 SW_SetLists_Environment が呼び出されるようにします。

    Copy code
    function Bug_FieldChange(fieldName) {
        if (fieldName  == "BG_USER_01")
        {
            SW_SetLists_Environment();
        }
        else
        {
            // コードをここに入力します
        }
        console.log("Bug_FieldChange");
    }
  • ユーザ定義関数 SW_SetLists_Environment は[Environment Specification]フィールド(BG_USER_02)の値を確認し、それに合ったフィールド・リストを[Environment Type]フィールド(BG_USER_01)に割り当てます。

    Copy code
    function SW_SetLists_Environment() 
    {
        var listName;
        switch (Bug_Fields("BG_USER_01").Value) 
          {
                case "Browser"
                    listName = "Browsers";
                    break;
                case "Database Type"
                    listName = "Database Type";
                    break;
                case "Operating System"
                    listName = "Platform";
                    break;
                case "Web Server"
                    listName = "Web Server";
                    break;
                default
                    listName = "Environment Specification";
            }
        Bug_Fields("BG_USER_02").List = Lists(listName);
        console.log("Set Environment List");
    }

先頭に戻る