詳細プロジェクト・スクリプトの記述
この項では、詳細プロジェクト・スクリプトを使用する必要がある場合とその使用方法について説明します。
このトピックの内容:
詳細プロジェクト・スクリプトの概要
バックエンドでプロジェクト・データを処理するには、詳細プロジェクト・スクリプトを定義します。詳細プロジェクト・スクリプトは、エンティティの作成、更新、削除といったプロジェクト固有のニーズに合わせてプロジェクト・ユーザの権限を操作するのに役立ちます。また、詳細プロジェクト・スクリプトによって、ALM REST API を使用するアプリケーション間のデータ整合性と動作の一貫性も確保されます。
詳細プロジェクト・スクリプトがトリガされるタイミング
詳細プロジェクト・スクリプトは、ユーザが Web クライアントのユーザ・インタフェースでアクションを完了した後にデータベースに送信される要求によってトリガされます。
詳細プロジェクト・スクリプトは、イベントによってトリガされるプロジェクト・スクリプトの後に有効になり、すべてが期待どおりに動作することを保証する補助的なメカニズムとして機能します。
たとえば、ユーザが Web クライアントのユーザ・インタフェースで[新規不具合]をクリックすると、Bug_New イベントがトリガされます。ALM は、Bug_New イベントに記述されたプロジェクト・スクリプトをリッスンし、それに応じて[新規不具合]ダイアログ・ボックスがカスタマイズされます。ユーザが不具合を送信すると、不具合の作成要求がバックエンドに送信され、Bug_Create 要求がトリガされます。ALM は、Bug_Create 要求に記述されたスクリプトに基づいて不具合データを処理します。
詳細プロジェクト・スクリプトが適用される場所
標準設定では、詳細プロジェクト・スクリプトは Web クライアントにのみ適用されます。ALM REST API を使用するすべてのアプリケーションに詳細プロジェクト・スクリプトを適用する場合は、CLIENT_TYPES_BYPASS_REST_WF サイト・パラメータを None に変更します。このパラメータの詳細については、「ALM サイト・パラメータ」を参照してください。
詳細プロジェクト・スクリプトのユース・ケース
詳細プロジェクト・スクリプトが役に立つユース・ケースをいくつか紹介します。
ユース・ケース 1:アプリケーション間の一貫した検証
ユーザが不具合を作成したときにすべてのユーザ・グループに対して[検出リリース]フィールド(BG_DETECTED_IN_REL)を要求するプロジェクト・スクリプトがすでに定義されているとします。
function SetFieldApp(fieldName, Req){
var bugfield = Bug_Fields(fieldName);
bugfield.IsRequired = Req;
console.log("SetFieldApp");
}
function FieldCust_AddDefect()
{
for (var i= 0; i<= Bug_Fields.Count -1; i++)
{
SetFieldApp(Bug_Fields.FieldById(i).FieldName, false, false, 100, 0);
}
SetFieldApp("BG_DETECTED_IN_REL", true);
}
ユーザが Web クライアントのユーザ・インタフェースから不具合を作成している場合、上記のスクリプトは正常に動作します。
しかし、ユーザが ALM REST API を使用する別のアプリケーション(Excel アドインなど)から不具合を作成している場合は、[検出リリース]フィールドが入力されていなくても、不具合を送信できます。新しい不具合の作成方法に関係なく、新しい不具合の[検出リリース]フィールドに常に値が入力されるようにするには、詳細プロジェクト・スクリプトを作成して検証を拡張する必要があります。
詳細プロジェクト・スクリプトは次のようになります。
function setFieldProperties(fieldName, Req){
var bugfield = Bug_Fields(fieldName);
bugfield.IsRequired = Req;
}
function Bug_Create(){
setFieldProperties("BG_DETECTED_IN_REL", true);
}
ユース・ケース 2:ユーザ権限管理のカスタマイズ
[重要度]フィールドの値が[高い]、[非常に高い]、または[緊急]に設定されている場合に、不具合の[優先度]フィールドに[緊急]を自動的に入力するように、次のプロジェクト・スクリプトがすでに定義されているとします。
function Bug_FieldChange(fieldName){
if(fieldName === 'BG_SEVERITY'){
var severity = Bug_Fields("BG_SEVERITY").Value ;
if(severity === '3-High'||severity === '4-Very High'||severity === '5-Urgent'){
Bug_Fields("BG_PRIORITY").Value = '5-Urgent';
}
}
}
上記のスクリプトは、[優先度]フィールドを編集する権限を持つユーザに対しては正常に機能します。
しかし、この権限がユーザ・グループにない場合、ユーザ・グループのユーザが[重要度]フィールドを[高い]、[非常に高い]、または[緊急]に設定しても、[優先度]フィールドは自動入力されません。したがって、次の両方の条件を満たしたい場合は、詳細プロジェクト・スクリプトを作成する必要があります。
-
引き続き、ユーザ・グループが Web クライアントの[優先度]フィールドを編集することを許可しない。
-
[優先度]フィールドに対するユーザの編集権限に関係なく、[重要度]フィールドが特定の値に設定されている場合、それに応じて[優先度]フィールドを更新する。
詳細プロジェクト・スクリプトは次のようになります。
function Bug_Update(){
var severity = Bug_Fields("BG_SEVERITY").Value ;
if(severity === '3-High'||severity === '4-Very High'||severity === '5-Urgent'){
Bug_Fields("BG_PRIORITY").Value = '5-Urgent';
}
}
詳細プロジェクト・スクリプトを記述する前に
詳細プロジェクト・スクリプトを記述する前に、要求とオブジェクトについて理解しておく必要があります。
要求がデータベースに送信されたときにコードが呼び出されるように、コードを適切な要求内に配置します。
次の表で、要求がトリガされるタイミング、および要求の編集によって達成される内容について説明します。
要求 | 説明 |
---|---|
<エンティティ>_Create |
この要求は、エンティティが ALM データベースに追加されるときにトリガされます。 たとえば、Req_Create 要求は、新しい要件がデータベースに追加されるときにトリガされます。Bug_Create 要求は、新しい不具合がデータベースに追加されるときにトリガされます。 |
<エンティティ>_Update |
この要求は、エンティティが ALM データベースで更新されるときにトリガされます。 たとえば、Req_Update 要求は、新しい要件に対する更新が ALM データベースに追加されるときにトリガされます。Bug_Update 要求は、既存の不具合に対する更新が ALM データベースに追加されるときにトリガされます。 |
<エンティティ>_Delete |
この要求は、エンティティが ALM データベースから削除されるときにトリガされます。 たとえば、Req_Delete 要求は、既存の要件が ALM データベースから削除されるときにトリガされます。Bug_Delete 要求は、既存の不具合が ALM データベースから削除されるときにトリガされます。 |
SharedFunction |
複数の要求で使用できるコードを SharedFunction 内に記述します。 |
詳細プロジェクト・スクリプトのオブジェクト
スクリプトは、フィールド情報やユーザ情報など、関連するオブジェクトから取得した情報に基づいてカスタマイズを実行します。
詳細については、オブジェクトを参照してください。
詳細プロジェクト・スクリプトの記述
詳細プロジェクト・スクリプトを記述するには、REST 要求によってトリガされる要求に JavaScript コードを追加します。たとえば、データベースがエンティティを追加する要求を受信すると、Create 要求がトリガされます。
要求のスクリプトを記述するには、次の手順を実行します。
-
Web クライアントのバナーから、[設定
]>[ワークフロー]を選択します。
-
[スクリプトエディタ]タブで、プロジェクト・スクリプト・ツリーの[ワークフロースクリプト]>[詳細プロジェクトスクリプト]ノードで、目的のモジュールを展開し、コードをトリガするタイミングに応じて、コードを追加する要求を選択します。
-
エンティティを作成する要求の場合は、<エンティティ>_Create 要求を選択します。
-
エンティティを更新する要求の場合は、<エンティティ>_Update 要求を選択します。
-
エンティティを削除する要求の場合は、<エンティティ>_Delete 要求を選択します。
-
同じモジュール内の他の要求で使用可能なコードを記述するには、<モジュール>_SharedFunction 要求を選択します。
-
複数のモジュールの要求で使用可能なコードを記述するには、[共通スクリプト]>[SharedFunction]要求を選択します。
要求の詳細な説明については、詳細プロジェクト・スクリプトの要求を参照してください。
-
-
要求に JavaScript コードを追加します。
参考情報として、詳細プロジェクト・スクリプトの記述を参照してください。
注: スクリプト内の日付には、 YYYY-MM-DD 形式を使用します。
-
[保存]をクリックします。
参照情報: