JP5238138B2 - ワークアイテムトラッキングシステム用のワークアイテムルール - Google Patents

ワークアイテムトラッキングシステム用のワークアイテムルール Download PDF

Info

Publication number
JP5238138B2
JP5238138B2 JP2006086542A JP2006086542A JP5238138B2 JP 5238138 B2 JP5238138 B2 JP 5238138B2 JP 2006086542 A JP2006086542 A JP 2006086542A JP 2006086542 A JP2006086542 A JP 2006086542A JP 5238138 B2 JP5238138 B2 JP 5238138B2
Authority
JP
Japan
Prior art keywords
work item
field
rule
rules
user
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006086542A
Other languages
English (en)
Other versions
JP2006277745A5 (ja
JP2006277745A (ja
Inventor
アイ.ベル アラステア
ディリップ ゴーシュ アミト
エー.フィリップ マリーン
タリウス トーマス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006277745A publication Critical patent/JP2006277745A/ja
Publication of JP2006277745A5 publication Critical patent/JP2006277745A5/ja
Application granted granted Critical
Publication of JP5238138B2 publication Critical patent/JP5238138B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • FMECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
    • F25REFRIGERATION OR COOLING; COMBINED HEATING AND REFRIGERATION SYSTEMS; HEAT PUMP SYSTEMS; MANUFACTURE OR STORAGE OF ICE; LIQUEFACTION SOLIDIFICATION OF GASES
    • F25BREFRIGERATION MACHINES, PLANTS OR SYSTEMS; COMBINED HEATING AND REFRIGERATION SYSTEMS; HEAT PUMP SYSTEMS
    • F25B21/00Machines, plants or systems, using electric or magnetic effects
    • F25B21/02Machines, plants or systems, using electric or magnetic effects using Peltier effect; using Nernst-Ettinghausen effect
    • AHUMAN NECESSITIES
    • A47FURNITURE; DOMESTIC ARTICLES OR APPLIANCES; COFFEE MILLS; SPICE MILLS; SUCTION CLEANERS IN GENERAL
    • A47JKITCHEN EQUIPMENT; COFFEE MILLS; SPICE MILLS; APPARATUS FOR MAKING BEVERAGES
    • A47J47/00Kitchen containers, stands or the like, not provided for in other groups of this subclass; Cutting-boards, e.g. for bread
    • A47J47/14Carriers for prepared human food
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • G06Q10/063Operations research, analysis or management
    • G06Q10/0631Resource planning, allocation, distributing or scheduling for enterprises or organisations
    • G06Q10/06311Scheduling, planning or task assignment for a person or group
    • G06Q10/063114Status monitoring or status determination for a person or group
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • G06Q10/063Operations research, analysis or management
    • G06Q10/0631Resource planning, allocation, distributing or scheduling for enterprises or organisations
    • G06Q10/06316Sequencing of tasks or work
    • FMECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
    • F25REFRIGERATION OR COOLING; COMBINED HEATING AND REFRIGERATION SYSTEMS; HEAT PUMP SYSTEMS; MANUFACTURE OR STORAGE OF ICE; LIQUEFACTION SOLIDIFICATION OF GASES
    • F25BREFRIGERATION MACHINES, PLANTS OR SYSTEMS; COMBINED HEATING AND REFRIGERATION SYSTEMS; HEAT PUMP SYSTEMS
    • F25B2321/00Details of machines, plants or systems, using electric or magnetic effects
    • F25B2321/02Details of machines, plants or systems, using electric or magnetic effects using Peltier effects; using Nernst-Ettinghausen effects
    • F25B2321/023Mounting details thereof

Landscapes

  • Business, Economics & Management (AREA)
  • Human Resources & Organizations (AREA)
  • Engineering & Computer Science (AREA)
  • Strategic Management (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Economics (AREA)
  • Physics & Mathematics (AREA)
  • Tourism & Hospitality (AREA)
  • General Business, Economics & Management (AREA)
  • Marketing (AREA)
  • Operations Research (AREA)
  • Quality & Reliability (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Educational Administration (AREA)
  • Development Economics (AREA)
  • Game Theory and Decision Science (AREA)
  • Data Mining & Analysis (AREA)
  • Food Science & Technology (AREA)
  • Mechanical Engineering (AREA)
  • Thermal Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Stored Programmes (AREA)

Description

本発明は、ワークアイテムトラッキングシステム用のワークアイテムルールに関する。
ワークアイテムトラッキングシステム(work item tracking system)はしばしば、現在のビジネスの世界、特にソフトウェア開発環境で使用される。ワークアイテムトラッキングシステムは通常、ユーザが、作業の単位を表す1つまたは複数のワークアイテムを定義し、作業の単位を表すワークアイテムを更新することによって、作業の単位の進行を追跡することを可能にする。作業の単位は、1人または複数の人によって実行される仕事、ソフトウェアアプリケーションのバグフィックス(すなわち、ソフトウェア欠陥の訂正)または改善/追加などのソフトウェア関連ワークアイテム、プロジェクト、別のタイプのワークアイテム、あるいは前述のものの任意の組合せを含むがこれに制限されない様々なタイプのいずれかとすることができる。本明細書で使用する「ワークアイテム」は、作業の単位を表し、定義するソフトウェア抽象化(例えば、オブジェクト、クラス、レコード、アレイ、他のタイプの抽象化、または前述のものの適当な組合せ)である。「ワークアイテムトラッキングシステム」または「WITS」は、(ユーザによる)手動のおよび(システムにおける他のイベントに応答するシステムによる)おそらくは自動の、ワークアイテムの作成および変更を可能にすることによって作業単位の追跡を可能にするシステムである。
一部のワークアイテムトラッキングシステムは、異なるユーザに異なるアクセス特権を与えるように、および/または異なるユーザがワークアイテムに対して異なるアクションを実行できるように、ハードコードされている。例えば、(例えば、第1の開発チームからの)第1のソフトウェア開発者が第1のワークアイテムにアクセスし、これを変更することを許可し、(例えば、第2の開発チームからの)第2のソフトウェア開発者が第1のワークアイテムにアクセスすることは許可するが、変更することは許可せず(例えば、読み取り専用)、(例えば、第3の開発チームからの)第3のソフトウェア開発者が第1のワークアイテムにアクセスすることを完全に拒否する、とすることができる。これらのアクセスおよび変更の「ルール」は、別々に識別可能な別個のソフトウェアエンティティではなく、その定義および機能性は、ワークアイテムへのアクセスおよび操作を制御するコードの中に埋め込まれている(すなわち、ハードコードされている)。したがって、これらは、容易に使用可能(すなわち、再利用可能)ではなく、他のエンティティ(すなわち、プログラムおよびアプリケーション)による代替の解釈の対象ではない。
さらに、これらのルールは、ユーザに対して閉ざされており(公開されていない)、ユーザによる作成または変更の対象ではない。コードは、プログラマが変更しなければならない。時とともに、会社の従業員、企業構造、ビジネスゴール、プロダクト、および会社の他の態様が変化する。そのような変化に応答して、ワークアイテムのアクセスルールおよび変更ルールを変更する(例えば、1つまたは複数のルールを追加し、削除し、および/または変更する)ことが望ましい場合がある。しかし、上で説明したように、この変更はプログラマによって行われなければならない。したがって、管理者(または変更を望む他の人)は自分自身でその変更を行うことができず、必要な変更をプログラマに説明しなければならない。さらに、管理者はコードに対してプログラマによって行われた実際の変更を(コードの形を除いて)容易に見ることができず、そのような変更の結果を経験することしかできない。変更が所望の結果をもたらさない場合、管理者はプログラマのところに行き、問題を説明しなければならず、その後、このプロセスが繰り返される。このプロセスは、アクセスルールおよび/または変更ルールに対する変更を実装するために管理者とプログラマの間の対話を必要とし、ビジネスリソースの非効率的な使用である。いくつかの文献に、上述のような従来技術に関連した技術内容が開示されている(例えば、非特許文献1および2参照)。また、米国特許出願第11/089,613号明細書に、本発明に関連する内容が含まれている可能性がある。
[online]、2005年3月25日、インターネット <URL : http://lab.msdn.microsoft.com/teamsystem/> [online]、2005年3月25日、インターネット <URL : http://blogs.msdn.com/team_foundation/>
従来のワークアイテムトラッキングシステムには、上述したような種々の問題があり、さらなる改善が望まれている。本発明は、上記従来技術の問題点を解決することを課題とする。
本明細書で説明されるのは、ワークアイテムトラッキングシステムで使用されるワークアイテムルールである。本明細書で使用される「ワークアイテムルール」または「WIR」は、ワークアイテムに影響するアクションを少なくともある度合まで統制するルールを定義する、識別可能な別個のソフトウェア抽象化(例えば、オブジェクト、クラス、レコード、アレイ、他のタイプの抽象化、または前述のものの適当な組合せ)である。ワークアイテムルールは、複数のソフトウェアエンティティによってアクセス可能、使用可能、および解釈の対象とすることができる。さらに、ワークアイテムルールを、例えばユーザインタフェース(例えば、XMLエディタまたはGUI)を介するユーザへの公開によって、ユーザ(すなわち、プログラマだけではなく)による作成および変更の対象になるように構成することができる。したがって、ユーザは、ワークアイテムへのアクセスおよび/またはその変更を制御するビジネスルール抽象化を作成し、変更することを可能にされうる。
ワークアイテムルールは、抽象化を識別できる識別子、および/または名前を指定することができ、条件およびその条件が満足された場合に行われるアクションを指定するかこれらを示すことができる。そのような条件は、ユーザまたはユーザのグループ、ワークアイテムの内容(例えば、フィールド、ワークフロー、遷移、状態など)、ワークアイテムの1つまたは複数のプロパティ(例えば、タイプまたは他のメタデータ)、ビジネスプロダクトまたはその態様、ワークアイテムに関連する他の情報、または前述のものの適当な組合せのいずれかに対応するものとすることができる。
いくつかの実施形態で、認可されたユーザ(例えば管理者)がワークアイテムルールを作成し、および/または変更することを可能にするユーザインタフェース(例えば、XMLエディタまたはGUI)が提供される。
本発明のいくつかの実施形態で、ワークアイテムトラッキングシステムは、論理階層、例えばツリー様配置でワークアイテムルールを編成することができる。ワークアイテムの論理階層の編成は、例えばビジネスプロダクトまたは会社構造など、別のエンティティの編成構造に対応するものとすることができる。階層内のワークアイテムの間で関係を定義することができる。例えば、階層の第2のレベルのワークアイテムが、階層の第1のレベルの1つまたは複数のワークアイテムとの親関係を有することができる。したがって、第1のレベルのワークアイテムの1つについて定義されたワークアイテムルールを、第2のレベルのワークアイテムについて定義されたワークアイテムルールによってオーバーライド(override)することができる。いくつかの実施形態で、否定の判定をもたらすワークアイテムルールは、論理階層内の位置に関わりなく、肯定の判定をもたらす別のワークアイテムルールをオーバーライドする。
本発明のいくつかの実施形態で、第1のワークアイテムルールに影響する第1のユーザアクションに応答して、第1のユーザおよび/または第1のワークアイテムに対応する1つまたは複数のワークアイテムルールを判定することができる。次に、その1つまたは複数のワークアイテムルールを解釈することができ、その解釈に基づいてユーザアクションに応答することができる。
本発明のいくつかの実施形態で、ワークアイテムルールを、マルチティア(multi−tier)の形で実施することができる。例えば、ワークアイテムトラッキングシステムを、少なくともクライアントワークアイテムルールエンジンおよびサーバワークアイテムルールエンジンを含む複数のティアに渡って分散させることができる。クライアントワークアイテムルールエンジンは、ユーザがワークアイテムにアクセスし、および/またはこれを変更することを可能にするユーザインタフェースを提供することができる。ユーザがワークアイテムにアクセスするかこれを変更することに応答して、クライアントワークアイテムルールエンジンは、1つまたは複数の対応するワークアイテムルールを解釈することができ、その後に、サーバワークアイテムルールエンジンが、同一のまたは類似する1つまたは複数のワークアイテムルールを(例えば、サーバワークアイテムルールエンジンが自由に使える、より新しいデータを有する可能性があるという事実に起因して)おそらくは異なる形で解釈することができる。
次の説明から明瞭になるように、ワークアイテムルールは、プログラマの助けなしで、ビジネスエンティティの変化するビジネスニーズに適合するように比較的簡単に変更できるので、既知のワークアイテムトラッキングシステムの柔軟性を拡張する。さらに、以下に説明するワークアイテムルールを実施するシステムおよび方法は、ワークアイテムのセキュリティとワークアイテムの内容の保全性維持との緻密な統合を可能にする。
本発明の実施形態で、ワークアイテムトラッキングシステムの1つまたは複数のワークアイテムに影響するユーザアクションが統制される。ワークアイテムトラッキングシステムの第1のワークアイテムに影響する第1のユーザアクションに応答して、第1のユーザおよび/または第1のワークアイテムに対応する1つまたは複数のワークアイテムルールを判定する。その1つまたは複数の判定されたワークアイテムルールを解釈し、そのワークアイテムルールの解釈に基づいて第1のユーザアクションに応答する。
この実施形態の一態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、前記第1のユーザまたは前記第1のユーザが属するユーザのグループに対応し、解釈することは、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含む。
この実施形態のもう1つの態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの内容に対応し、解釈することは、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含む。
この実施形態のもう1つの態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの1つまたは複数のプロパティに対応し、解釈することは、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含む。
この実施形態のもう1つの態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、プロダクトの少なくとも1つの態様に対応し、解釈することは、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含む。
この実施形態のさらにもう1つの態様で、ユーザが1つまたは複数のワークアイテムルールを定義することを可能にするユーザインタフェースが提供される。
この実施形態のもう1つの態様で、前記ワークアイテムトラッキングシステムは、論理階層に編成された複数のワークアイテムルールを備え、前記複数のワークアイテムは、前記1つまたは複数のワークアイテムを備える。第1のワークアイテムは、前記階層の第1のレベルに対応し、第2のワークアイテムは、前記第1のレベルに優先する前記階層の第2のレベルに対応する。判定することは、前記第1のワークアイテムに対応する第1のワークアイテムルールを判定することと、前記第2のワークアイテムに対応する第2のワークアイテムルールを判定することとをさらに含み、解釈することは、前記第1および第2のワークアイテムルールを解釈することと、前記第1のレベルに優先する前記階層の前記第2のレベルに少なくとも部分的に基づいて、前記第1のワークアイテムルールの前記解釈を前記第2のワークアイテムルールの前記解釈によってオーバーライドすることとを含む。
この実施形態のもう1つの態様で、前記ワークアイテムトラッキングシステムは、少なくとも第1のネットワーク要素および1つまたは複数の通信媒体によって前記第1のネットワーク要素に接続された第2のネットワーク要素に渡って分散される。前記第1のネットワーク要素は第1のモジュールを備え、前記第2のネットワーク要素は第2のモジュールを備える。前記第1のモジュールは、前記第1のワークアイテムに影響するユーザアクションを指定するユーザからの入力を受け取る。前記判定すること、解釈すること、および応答することは、前記第1のモジュールによって実行される。前記第2のモジュールは、前記1つまたは複数の判定されたワークアイテムルールを解釈する。
本発明のもう1つの実施形態で、コンピュータプログラム製品が提供される。前記製品は、コンピュータ読み取り可能な記録媒体と、前記コンピュータ読み取り可能な記録媒体に保管され、コンピュータによって実行された結果として、上述した本発明の実施形態の方法および/または上述したその1つまたは複数の態様を実行するように前記コンピュータに指示する命令を定義するコンピュータ可読信号とを備える。前記コンピュータ可読信号は、マークアップ言語に従って前記命令のうちの1つまたは複数を定義することができる。
本発明のもう1つの実施形態で、ワークアイテムトラッキングシステムの1つまたは複数のワークアイテムに影響するユーザアクションを統制するシステムが提供される。前記システムは、前記ワークアイテムトラッキングシステムの第1のワークアイテムに影響する第1のユーザアクションに応答して、前記第1のユーザおよび/または前記第1のワークアイテムに対応する1つまたは複数のワークアイテムルールを判定し、前記1つまたは複数の判定されたワークアイテムルールを解釈し、前記解釈に基づいて前記ユーザアクションに応答する、第1のワークアイテムルールエンジンを備える。
この実施形態の一態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、前記第1のユーザまたは前記第1のユーザが属するユーザのグループに対応する。前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作する。
この実施形態のもう1つの態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの内容に対応し、前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作する。
この実施形態のもう1つの態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの1つまたは複数のプロパティに対応し、前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作する。
この実施形態のさらにもう1つの態様で、前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、プロダクトの少なくとも1つの態様に対応し、前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作する。
この実施形態のもう1つの態様で、ユーザが1つまたは複数のワークアイテムルールを定義することを可能にするユーザインタフェースが提供される。
この実施形態のもう1つの態様で、前記ワークアイテムトラッキングシステムは、論理階層に編成された複数のワークアイテムルールを備え、前記複数のワークアイテムは、前記1つまたは複数のワークアイテムを備える。第1のワークアイテムは、前記階層の第1のレベルに対応し、第2のワークアイテムは、前記第1のレベルに優先する前記階層の第2のレベルに対応する。前記第1のワークアイテムルールエンジンは、前記第1のワークアイテムに対応する第1のワークアイテムルールを判定し、前記第2のワークアイテムに対応する第2のワークアイテムルールを判定するように動作する。前記第1のワークアイテムルールエンジンは、前記第1および第2のワークアイテムルールを解釈し、前記第1のレベルに優先する前記階層の前記第2のレベルに少なくとも部分的に基づいて、前記第2のワークアイテムルールの前記解釈による前記第1のワークアイテムルールの前記解釈のオーバーライドを制御するように動作する。
この実施形態のもう1つの態様で、前記第1のワークアイテムルールエンジンは、第1のネットワーク要素に常駐し、前記第1のワークアイテムルールエンジンは、前記第1のユーザアクションを指定するユーザからの入力を受け取るように動作する。前記システムは、1つまたは複数の通信媒体によって前記第1のネットワーク要素に接続された第2のネットワーク要素に常駐する第2のワークアイテムルールエンジンをさらに備え、前記第2のワークアイテムルールエンジンは、前記1つまたは複数の判定されたワークアイテムルールが前記第1のモジュールによって適用されるのとは異なって、前記1つまたは複数の判定されたワークアイテムルールを解釈するように動作する。
本発明の他の利益、新規の特徴、および目的ならびに本発明の態様および実施形態は、添付図面とともに検討されるときに、本発明の態様および実施形態を含む以下の本発明の詳細な説明から明白になるだろう。添付図面は、概略的であり、実寸通りに描かれていることを意図されたものではない。図面では、様々な図面に示された同一のまたはほぼ同一の構成要素のそれぞれが、単一の符号によって表される。図を明瞭にするために、当業者が本発明を理解できるようにするために図示が必要でない場合には、すべての構成要素がすべての図面で符号を付けられているわけではなく、本発明の各実施形態または各態様のすべての構成要素が図示されているわけでもない。
本発明によれば、柔軟なワークアイテムトラッキングシステムを実現することができる効果を奏する。
以下、図面を参照して本発明を適用できる実施形態を詳細に説明する。
本発明のいくつかの実施形態を、本件特許出願人から入手できるMicrosoft Team Systemテクノロジ(非特許文献1)および/またはMicrosoft Team Foundationテクノロジ(非特許文献2)に従って実装することができる。さらに、本発明のいくつかの実施形態を、Microsoft(登録商標)Visual Studio(登録商標)2005(MVS 2005)を含む本件特許出願人から入手可能なMicrosoft(登録商標)Visual Studio(登録商標)(MVS)の諸バージョンによって提供されるワークアイテムトラッキングシステムおよびワークアイテムルールテクノロジ(その一部を付録I〜IIIで詳細に説明する)に従って実装することができる。設計文書;ビジネスルールの説明および使用と題する付録Iでは、ビジネスルールの実施形態と、それをどのように使用できるかを説明する。ワークアイテムタイプ定義言語(Work Item Type Definition Language)と題する付録IIでは、ワークアイテムタイプ定義言語の実施形態を説明する。ワークアイテムタイプルール ― カスタマシナリオと題する付録IIIでは、ワークアイテムタイプルールを使用できるシナリオの例を説明する。付録I〜IIIの内容全体が、参照によって組み込まれている。Microsoft Team Systemテクノロジ、Team Foundationテクノロジ、MVSテクノロジ、および付録I〜IIIに記載のテクノロジは、本発明の実施形態を実装するのに使用できるテクノロジの例にすぎず、本発明の範囲を制限することを意図されていないことを理解されたい。他のテクノロジ、例えば上記テクノロジの変形を使用することができ、これらが本発明の範囲に含まれることが意図されている。
本発明の上記および他の実施形態の機能および利益は、以下で説明する例からより十分に理解されるだろう。次に述べる例では、より良い理解を容易にし、本発明の利益を例示することが意図されているが、本発明の範囲全体を例証するものではない。
この説明であれ請求項であれ、ここで使用される単語「備える」、「含む」、「有する」などは、制限なし、すなわち、含むがそれに制限されないことを意味すると理解されなければならない。
実施例
図1は、ワークアイテムトラッキングシステム(WITS)のワークアイテムルール(WIR)を実施するためのシステム100の例を示すブロック図である。システム100は、ワークアイテムトラッキングシステムのワークアイテムルールを実施するシステムの例示的な実施形態にすぎず、本発明の範囲を制限することを意図されたものではない。そのようなシステムの多数の他の実施形態、例えばシステム100の変形形態が可能であり、本発明の範囲に含まれることが意図されている。例えば、主にWIRに関する図100に示されたいくつかの要素は、多少はWITS要素内に統合されたものとして図示されている。しかし、WIR要素は、実際にはWITS要素と別々の別個の要素とすることができる。
システム100は、次のものを含むことができる:1つまたは複数のWITSクライアント(例えば、WITSクライアント102、104、および106);1つまたは複数のWITSサーバ(例えば、WITSサーバ120);それぞれを、例えばデータベース(例えば、オブジェクト指向データベース、リレーショナルデータベース、ファイルシステム、別のタイプのデータベース、または前述の任意の組合せ)などの、様々なタイプのデータソースのいずれかとすることができる1つまたは複数のデータソース(例えば、データソース126);ネットワーク118、他のネットワーク要素、または前述のものの任意の組合せ。
本明細書で使用される「ネットワーク」は、要素間で通信を交換できる伝送媒体の1つまたは複数のセグメントによって相互接続された2つまたはそれ以上のネットワーク要素のグループである。各セグメントは、金属および/または光ファイバから作られた1つまたは複数の電気的または光学的なワイヤまたはケーブル、(例えば、搬送波を介する無線伝送を使用する)空気、またはこれらの伝送媒体の任意の組合せを含む、複数のタイプの伝送媒体のいずれかとすることができる。本明細書で使用される「複数」は、2つまたはそれ以上を意味する。ネットワークを、単一のワイヤ、無線接続、または他のタイプのセグメントによって接続された2つのネットワーク要素のように単純なものとすることができることを理解されたい。さらに、ネットワークが本明細書の図面で図内の要素に接続されて図示されている場合、接続された要素自体がネットワークの一部と考えられることを理解されたい。
WITSクライアント102、104、および106のそれぞれは、例えば諸ユーザデバイスなどの複数のタイプのデバイスのいずれかとすることができる。ユーザデバイスに、ワークステーション;パーソナルコンピュータ(例えば、PC);ラップトップコンピュータ、ノートブックコンピュータ;電話機(例えば、陸上回線(landline)電話機または携帯電話機);ポケットベル;Blackberry(商標)ブランドのデバイス、PCSデバイス、携帯情報端末(PDA)、双方向ラジオ(例えば、「ウォーキートーキー」)、他のタイプのユーザデバイス、および前述のものの任意の適当な組合せが含まれるが、これらに制限はされない。
WITSクライアント(例えば、WITSクライアント106)は、ワークアイテムタイプインタフェース(WIT IF)108、ワークアイテムインタフェース110、セキュリティインタフェース112、クライアントワークアイテムルール(WIR)エンジン114およびWIRキャッシュ116のいずれも含むことができる。
WITインタフェース108は、例えば付録IIに記載のように、ユーザがワークアイテムタイプ定義を作成し、および/または変更することを可能にするユーザインタフェースとすることができる。本明細書で使用される「ユーザインタフェース」は、ユーザがアプリケーションの実行中にアプリケーションとインタフェースすることを可能にするアプリケーションまたはアプリケーションの一部(すなわち、コンピュータ可読命令のセット)である。ユーザインタフェースに、例えばコンピュータスクリーンまたは他の手段を介して視覚的に、スピーカまたは他の手段を介して聴覚的に、およびゲームコントローラまたは他の手段を介して手動でなど、アプリケーションがアプリケーションの実行中にユーザにどのように情報を出力するかを定義するコードを含めることができる。そのようなユーザインタフェースに、ユーザがアプリケーションの実行中にどのように情報を入力できるかを定義するコードも含めることができ、例えば、マイクロホンを使用して聴覚的に、またはキーボード、マウス、ゲームコントローラ、タッチスクリーン、もしくは他の手段を使用して手動で、または他の手段で行うことができる。
ユーザインタフェースは、情報をどのようにしてユーザに視覚的に提示する(すなわち表示する)かを定義し、ユーザがどのようにして情報のビジュアルプレゼンテーション(すなわちディスプレイ)をナビゲートしてビジュアルプレゼンテーションの文脈で情報を入力できるかを定義することができる。ユーザインタフェースは、アプリケーションの実行中に情報のビジュアルプレゼンテーションを制御することができ、ユーザがビジュアルプレゼンテーションをナビゲートしてビジュアルプレゼンテーションの文脈で情報を入力することを可能にする。ユーザインタフェースのタイプは、ユーザがコマンドをタイプするコマンド駆動(command−driven)インタフェース、ユーザがメニューから情報を選択するメニュー駆動インタフェース、およびその組合せから、通常はコンピュータのグラフィックス能力を利用し、ナビゲートするのがより柔軟、直観的、簡単であり、コマンド駆動およびメニュー駆動のビジュアルユーザインタフェースより魅力的な「ルックアンドフィール(look−and−feel)」を有するGUIまでの範囲に渡る。本明細書で使用されるときに、ユーザインタフェースまたはGUIによって提示される情報のビジュアルプレゼンテーションを、それぞれ「ユーザインタフェースディスプレイ」または「GUIディスプレイ」と称する。
WITインタフェース108は、ユーザがXMLファイルを手動で作成することを可能にするか、ユーザがワークアイテムタイプを定義できるようにする、より洗練されたユーザインタフェース(例えば、GUI)を提供することができる。
しばらく図1からそれるが、図2に、XML(extensible markup language)フォーマットでのワークアイテムタイプ定義200の例を示す。定義200は、単にワークアイテムタイプ定義の例示的な実施形態であり、本発明の範囲を制限することを意図されたものではない。例えば定義200の変形形態など、そのような定義の多数の他の実施形態のいずれであっても可能であり、本発明の範囲に含まれることが意図されている。例えば、定義200はXML形式で記述されているが、様々な他の適当なフォーマットのいずれであっても使用することができる。
定義200は、例えばバグ(bug)、特徴(feature)、要件(requirement)、またはタスク(task)など、様々なタイプのワークアイテムのいずれでも定義することができ、名前フィールド(name field)202;記述セクション(description section)206;フィールドセクション(fields section)210;ワークフローセクション(workflow section)212;フォームセクション(form section)214;他のセクションおよびフィールド;またはこれらの任意の適当な組合せのいずれでも含むことができる。
名前フィールド202は、指定される値がチームプロジェクト(以下でより詳細に説明する)内で一意になるように構成されうる。名前の例に、バグ、特徴、要件、タスク、および他の名前を含めることができる。
記述セクション206は、ランタイムにワークアイテムタイプの概要が必要な時に使用することができるヘルプテキストを指定することができる。例えば図2では、記述セクション206で、「bug work item types are used to track defects within a code(bugワークアイテムタイプはコード内の欠陥を追跡するのに使用される)」が指定されている。
フォームセクション214は、関連するフィールドがどのように表示され、エンドユーザによってどのように操作されるかを指定することができる。
フィールドセクション210は、ワークアイテムタイプに関連するセットのフィールドを指定する。いくつかの実施形態で、どのワークアイテムタイプも、ワークアイテムトラッキングシステムが正しく動作するようにするのに必要なコアフィールドのセットを備えることができる。他のフィールドは、特定のワークアイテムタイプ用にカスタマイズすることができる。いくつかの実施形態で、ワークアイテムタイプ定義の他所(例えば、フォームセクション214またはワークフローセクション212)で参照されるすべてのフィールドは、コア必須フィールドを除いて、まずフィールドセクション210で宣言されなければならない。フィールドは、次の情報を有することができる:名前(name)、参照名(reference name)、タイプ(type)、ヘルプテキスト(help text)、および挙動(behavior)または制約(constraint)のセット。明示的にリストされる非コアフィールドは、暗黙のうちに、このワークアイテムタイプのすべてのインスタンス(例えば、ワークアイテム)について、空(empty)であり、読み取り専用とすることができる。
いくつかの実施形態で、フィールドルールのスコープ(scope)を、特定のユーザまたはユーザのグループに制限することができる。属性「for」および「not」を追加して、このスコープ指定をサポートすることができる。これらの属性は、それらを特定のグループに固有または特定のグループ以外の全員に固有にするためにタグで使用することができる。そのような「拒絶(deny)」を指定するフィールドルールは、「認可(grant)」を指定するルールに優先するものとすることができる(以下で詳細に説明し、付録IIで示すように、あるワークアイテムタイプ定義内の複数のルールが、1人または複数のユーザ、ユーザのグループ、ユーザのドメイン、全ユーザなどを指定することができる)。
図3に、ユーザのグループにスコープ指定されたフィールドルールを定義するワークアイテムタイプ定義のフィールドセクション300の例を示す。図3のフィールドセクション300は、「title」という名前のフィールド(302)が、読み取り専用フィールドであり、[Project]\Testersのメンバを除く全員にアクセスを提供することを指定している。フィールド304の「not」が「for」に置換された場合には、このルールは、Titleフィールドが、同一のメンバについてアクセス可能な読み取り専用であるが、ほかの誰からもアクセス不能であることを指定する。
図4は、ワークアイテムタイプ定義のワークフローセクション400の例を示す図である。ワークフローセクションは、有効な状態(state)、正しい遷移(transition)、および遷移の正しい理由(reason)を記述することができる。理由は、なぜユーザがある状態から別の状態に変更しようとしているかを識別することができる。いくつかの実施形態で、ただ1つの遷移がナッシング(nothing)(すなわち、「」)から名前付き状態への遷移を定義でき、それによって、新しいワークアイテムの初期状態が識別される。さらに、どの遷移も、デフォルト理由フィールド420内でデフォルト理由を1つだけ定義することができる。ワークアイテムの最小のワークフローに、1つの状態、1つの遷移、および1つのデフォルト理由のみを含めることができる。
ワークフローセクション400は、1つまたは複数の許容可能な状態404および406を定義する状態セクション402と、そのワークアイテムタイプの1つまたは複数の許容可能な遷移を定義する遷移セクション408を備えることができる。遷移セクション408内で、1つまたは複数の遷移、例えば遷移410および416を定義することができる。遷移410は、ナッシングから「active(アクティブ)」への初期遷移を定義し、ここで、理由セクション412は、デフォルト理由は値(value)が新しい(new)ときであることを示す、デフォルト理由414だけを備える。遷移416は、「Active」から「Complete(完了)」への遷移を指定している。遷移416には、理由セクション418に理由420および422が含まれている。理由420は、「deferred(延期)」というデフォルト理由であり、理由422は、「no plans to fix(修正の予定なし)」という理由を指定している。
いくつかの実施形態で、2つの状態の間のすべての正しい遷移を指定しなければならず、遷移が1つも指定されていない場合には、デフォルトは、この遷移を実行することを許可しない。さらに、2つの属性「for」および「not」を、ワークフローの遷移セクションでオプションとして使用して、誰が遷移の実行を許可されるかを洗練することができる。「拒絶」は、「許可(allow)」に優先するものとすることができる。これらの属性のいずれも指定されていない場合、誰もがこの遷移を行うことを許可されうる(具体的には、そのワークアイテムを変更できる人全員)。
図5は、遷移ルール500の例である。この遷移ルールは、「resolved(解決済み)」から「complete(完了)」への遷移を、新しいテスタ(例えば、チームに参加したばかりのテスタ)を除くプロジェクトテスタ全員に制限する。遷移ルールは、個々のユーザアイデンティティを指定することもできる。
フィールドセクション、フィールドルール、ワークフローセクション、遷移、および遷移ルールを含むワークアイテムタイプ定義の他の例は、付録IIでより詳細に説明される。
ワークアイテムトラッキングシステムの諸態様を、論理階層、例えばツリー様配置で編成することができる。論理階層の編成は、例えばビジネスプロダクトまたは会社構造など、別のエンティティの編成構造に対応するものとすることができる。論理階層は複数のレベルを備えることができ、最上位レベルは階層のルート(例えば、木の幹)である。階層のルートは、次に高いレベルに1つまたは複数の子ノードを有することができ、次に高いレベルのこれらのノードのそれぞれが、次に高いレベルに1つまたは複数の子ノードを有することができ、以下同様である。
図1に戻ると、WITインタフェース108は、図2〜5に示されたようなワークフローアイテムタイプ定義をユーザが入力することを可能にすることができるが、ユーザが論理階層の特定のノード(例えば、ルートノード、またはより下のレベルのノードのいずれか)のワークアイテムタイプを定義することを可能にするように構成されうる。その結果、特定のワークアイテムタイプから作成される(すなわち、インスタンス化される)ワークアイテムは、この階層に関してそのワークアイテムタイプ自体と同一のスコープを有することができ、そのスコープは、このタイプが定義されたノードに対応する。すなわち、ワークアイテムタイプ定義およびそれに含まれるルールのスコープを、ワークアイテムトラッキングシステムの論理階層の特定のノードに制限することができる。以下でより詳細に説明する図6に、そのような論理階層、具体的にはプロダクトツリー602の例を示す。
セキュリティインタフェース112は、ユーザが1つまたは複数のセキュリティベースのワークアイテムルールを指定することを可能にするユーザインタフェースを提供することができ、ユーザがそのようなルールのスコープを論理階層(例えば、プロダクトツリー)内のノードに制限することを可能にすることができる。これらのルールは、特定のワークアイテムタイプと独立に定義することができる。WITインタフェース108も、セキュリティに関してルールを定義することを可能にするが、ワークアイテムタイプのスコープ内でそれを行うことを理解されたい。
図6は、ユーザがプロダクトツリーのノードを選択することを可能にするために、ユーザに提供できるユーザインタフェースディスプレイ600の例を示すスクリーンショットである。いくつかのワークアイテムトラッキングシステムで、プロダクトツリーは、最初の(すなわち、最高の)レベルのルートノードを有することができ、これは、プロダクト全体および/またはMVS「ソリューション」に対応するものとすることができる。このプロダクトツリーの第2のレベルの各ノードは、プロダクトおよび/またはソリューション内の1プロジェクトに対応するものとすることができ、プロジェクトノードの各子ノードは、その親プロジェクトのサブコンポーネント(例えば、プロダクトの特徴、またはプロダクトの他の態様)に対応するものとすることができる。
ツリー部分602は、「Project Model Hierarchy」という名前のプロジェクトノード604を先頭とするプロダクトツリーの、第2のレベルのプロジェクトを表すことができ、プロジェクトノード604は、2つの子ノード606(「node 1」)および608(「node 2」)を有する。ノード606は、2つの子ノード610(「Node 1_Child 1」)およびノード612(「Node 1_Child 2」)を備える。ディスプレイ600は、ユーザがツリー部分602(およびおそらくはこのツリーの残り)をナビゲートし、ノードのうちの1つ、例えばノード606を選択することを可能にするように構成されうる。セキュリティベースのワークアイテムルールを定義するために、permissions(アクセス権)ボタン614を、階層602のノード(例えば、ノード606)を選択した後に1つまたは複数のセキュリティベースのルールを定義するというユーザの意図をユーザが示すことを可能にするように構成することができる。ユーザがpermissionsボタン614を選択することに応答して、図7のディスプレイ700を表示することができる。
図7は、ユーザが1つまたは複数のセキュリティベースのワークアイテムルールを指定することを可能にするユーザインタフェースディスプレイ700の例を示すスクリーンショットである。ディスプレイ700は、ユーザおよびグループ選択ウィンドウ702、ユーザおよびグループ追加パネル704、アクセス権ウィンドウ706、他のコンポーネント、およびそれらの任意の適当な組合せのいずれでも含むことができる。
選択ウィンドウ702は、ユーザが、セキュリティベースのワークアイテムルールを定義する対象であるユーザおよび/またはユーザのグループを選択することを可能にすることができる。例えば、ディスプレイ700では、ユーザ「REDMOND\amitgh」が選択されている。
追加パネル704を、ユーザが、選択ウィンドウ702に追加されるユーザおよびユーザのグループを検索し、選択することを可能にするように構成し、したがってそれらのものをセキュリティベースのルールについて選択できるようにすることができる。いくつかの実施形態で、パネル704は、例えばWindows(登録商標)のユーザもしくはグループおよび/またはTeam Foundation Serverのユーザもしくはグループなどの、ユーザおよびグループの1つまたは複数のソースを検索することを可能にされうる。
アクセス権ウィンドウ706は、ユーザが、ウィンドウ702で選択されたユーザおよびグループに対して、1つまたは複数のセキュリティベースのワークアイテムルールを指定することを可能にする。例えば、ユーザは、ユーザまたはグループによる特定のアクションが許可されるか拒絶されるかを指定することを可能にされうる。例えば、ウィンドウ706に示されているように、ユーザは、ユーザまたはグループが、(とりわけ)現在選択されているノードのワークアイテムを編集し、および/または現在選択されているノードのワークアイテムを表示することを許可または拒絶されることを指定することを可能にされうる。アクセス権ウィンドウ706は、例えばユーザが選択されたノード自体を編集すること(708)を許可することなど、ユーザが、ワークアイテムルールに必ずしも関連しないアクセス権を定義することを可能にするように構成されることもできる。
図8は、ユーザが1つまたは複数のセキュリティベースのワークアイテムルールを指定することを可能にするユーザインタフェースディスプレイ700’の例を示すスクリーンショットである。ディスプレイ700’に、ユーザおよびグループ選択ウィンドウ702、ユーザおよびグループ追加パネル704、アクセス権ウィンドウ806、他のコンポーネント、およびそれらの任意の適当な組合せのどれでも含めることができる。ディスプレイ700’は、根本的にはディスプレイ700と同一であるが、ユーザが、ディスプレイ700’のウィンドウ806でより多くのアクセス権を指定していることが異なる。具体的に言うと、ユーザは、ウィンドウ702で選択されたユーザ(「REDMOND\amitgh」)が、このノードのワークアイテムの編集を許可されない(すなわち、拒絶される)(809)が、このノードのワークアイテムを表示することを許可される(811)ことを指定している。
ディスプレイ600を、ワークアイテムタイプと独立のセキュリティベースのワークアイテムルールの定義に関して説明したが、これまたは類似するディスプレイが、それについて1つまたは複数のワークアイテムタイプが定義されるノードをユーザが選択できるエントリポイントとして働くことができる。すなわち、ディスプレイ600または類似するディスプレイは、プロダクトツリーのノードを指定するナビゲーションツールとして働くことができ、それについて1つまたは複数のワークアイテムタイプルールのスコープが指定される。
したがって、上で説明したように、WITインタフェース108は、特定のワークアイテムタイプにスコープを制限された1つまたは複数のワークアイテムルールをユーザが定義することを可能にするように構成されることができ、その特定のワークアイテムタイプは、おそらくプロダクトツリーなどの論理階層の特定のノードにスコープを制限されうる。また、セキュリティインタフェース112は、セキュリティベースである(すなわち、ユーザまたはユーザのグループに固有の)1つまたは複数のワークアイテムルールをユーザが定義することを可能にするように構成されることができ、そのワークアイテムルールは、おそらくプロダクトツリーなどの論理階層の特定のノードにスコープを制限されうる特定のワークアイテムタイプと独立である。これらのタイプのルールの両方を、ワークアイテムに影響する(例えば、ワークアイテムにアクセスし、および/またはこれを変更する)ユーザアクションに応答して実施することができる。ユーザは、これから説明するワークアイテムインタフェース110によって、ワークアイテムに影響するユーザアクションを行うことを可能にされうる。
図9は、ワークアイテムを作成し、および/または変更するためのユーザインタフェースディスプレイ900の例を示すスクリーンショットである。ディスプレイ900は、ワークアイテムルールにアクセスし、および/またはこれを変更するユーザインタフェースディスプレイの単なる例であり、本発明の範囲を制限することを意図されたものではない。例えばディスプレイ900の変形形態など、様々な他のディスプレイのいずれでも使用することができ、本発明の範囲に含まれることが意図されている。
ディスプレイ900は、作成される「bug」というワークアイテムタイプの例を示すことができる。このワークアイテムは、フォルダタブ902によって示されているように、名前「new bug」を有することができる。さらに、このワークアイテムは、割り当て(assignment)フィールド904、優先順位(priority)フィールド906、状態(state)フィールド908、および理由(reason)フィールド910によってそれぞれ示されるように、ユーザ「amitgh」に割り当てられ、「2」の優先順位を有し、「new」なので「active」状態であるものとすることができる。ユーザは、記述ウィンドウ914に「test edit(テスト編集)」という説明を入力し、ワークアイテムを保存するように指示し終えたものとすることができる。しかし、このユーザは、タイトルフィールド912にタイトルを入力しなかったので、エラーメッセージ(例えば、「Save failed. The value for field 'title' must NOT be emptied.」(保存失敗。フィールド「title」の値を空にすることはできません。))を、エラーメッセージウィンドウ916でユーザに表示することができる。ユーザがフィールド912に値を入力せずにワークアイテム「new bug」の保存を試みることに応答してそのようなエラーメッセージを表示することは、例えばWIRエンジン114(以下でより詳細に説明する)による、1つまたは複数のワークアイテムルールの実施の結果とすることができる。例えば、ワークアイテムタイプルールが、例えば上で図2〜5に関して説明したように、ユーザ「amitgh」、このユーザが属するグループ、または全ユーザについて、タイトルフィールド912に値が必要であることを指定しているものとすることができる。
図1に戻ると、クライアントWIRエンジン114は、ワークアイテムに影響するユーザアクションに応答してワークアイテムルール(ワークアイテムタイプルールおよび/またはセキュリティベースのルールを含む)を実施するように構成されうる。例えば、エンジン114は、影響されるワークアイテムに対応する1つまたは複数のワークアイテムルールを判定し、判定された1つまたは複数のワークアイテムルールを解釈し、その解釈に基づいてユーザアクションに応答するように構成されうる。
影響されるワークアイテムに対応する1つまたは複数のワークアイテムルールの判定は、そのワークアイテムにアクセスし、および/またはこれを変更しているユーザ、そのワークアイテムが対応する論理階層(例えば、プロダクトツリー)のノード、およびそのワークアイテムのワークアイテムタイプに対応するすべてのワークアイテムルールを識別することを含むことができる。これらのルールを、WIRキャッシュ116に保管することができ、WIRキャッシュ116は、システム100に関連するワークアイテムルールのすべてをキャッシングすることができる。WIRキャッシュ116のソースは、データソース126のWIR情報130とすることができる。システム100の任意のWITSクライアント上でワークアイテムインタフェース(例えば、インタフェース108)、セキュリティインタフェース(例えば、112)、または他の手段(例えば、必要なルールまたはコアルールに関するプログラマのシステム管理者によって)を介して定義されたワークアイテムルールは、データソース126などの1つまたは複数の集中位置に(例えば、WIR情報130として)保管されうる。これらのWIRルールを、そのようなWITSクライアントの1つまたは複数でキャッシングすることができる。
判定された1つまたは複数のワークアイテムルールの解釈は、判定されたルールをある形で組み合わせることを含むことができる。例えば、ディスプレイ600のツリー部分602を参照すると、セキュリティベースのルールおよびワークアイテムタイプルールを定義し、したがって、ノード604、606、608、610、および/または612を含むツリー部分602の様々なレベルでスコープを指定することができる。クライアントWIRエンジン114は、ユーザ、ノード、およびワークアイテムタイプの識別を入力として使用して、これらの入力(およびおそらくは他の情報)に基づいて判定されたルールのすべてを評価し、この評価に基づいて、ユーザアクションが許可されるかまたはユーザアクションの少なくとも一部が拒絶されるかを判定することができる。
このルールの評価または解釈は、様々な形のいずれかで実行することができる。例えば、いくつかの実施形態で、論理階層の所与のノード(例えば、ツリーノード)について定義されたルールは、その論理階層の下位ノードについて定義された競合するルールに優先する。いくつかの実施形態で、特定のユーザアクションに適用可能な複数のルールについて、肯定(例えば、アクションを許可する)と解釈される複数のルールの個数に関わりなく、または肯定と解釈されたルールが否定と解釈されたルールより論理階層内で上位であるという事実に関わりなく、ユーザアクションを拒絶するためには1つのルールが否定(例えば、アクションを拒絶する)と解釈されればよい。
例えば、プロダクトツリー部分602を参照して、次のシナリオを検討されたい。
1.ユーザ1が、グループAのメンバである。
2.第1のセキュリティベースのルールは、グループAのユーザがプロジェクトノード604のワークアイテムを編集することを許可されることを指定する。
3.第2のセキュリティルールは、ユーザ1がノード606のワークアイテムを編集することを許可されない(すなわち、拒絶される)ことを指定する。
4.プロジェクトノード604のノード606の下で、ユーザ1が、タイプ「bug」の第1のワークアイテムの優先順位フィールドの値に対する変更を保存することを試みる。
このシナリオについて、第1および第2のセキュリティベースのルールが、クライアントWIRエンジン114によって判定されると仮定する。第1のセキュリティルールが、ノードツリー内の位置に起因して第2のセキュリティベースのルールより高い優先権を与えられる場合、第1と第2のセキュリティベースのルールの間のこの競合は、第1のセキュリティルールが第2のセキュリティルールをオーバーライドすることによって解決される。したがって、ユーザ1は、第1のセキュリティルールによって、優先順位フィールドの値を変更することを許可される。その代わりに、エンジン114が、ノードツリー内の位置に関わりなく、任意の拒絶が認可をオーバーライドするように構成されている場合には、第2のセキュリティベースのルールが適用される。したがって、ユーザ1は、第2のセキュリティベースのルールによって、ノード606のワークアイテムの編集を許可されないので、優先順位フィールドを変更することを許可されない。
第2のセキュリティベースのルールは存在しないが、ワークアイテムタイプルールが、ノード606のタイプ「bug」のワークアイテムについてグループAのユーザは優先順位フィールドを編集することを許可されないことを指定する、第2のシナリオを検討されたい。第1のセキュリティルールが、プロダクトツリー内のその位置に起因して、優先権を与えられる場合に、第1のシナリオと同一の結果が達成され、ユーザ1は、優先順位フィールドの編集を許可される。逆に、任意の拒絶がアクセスのすべての認可をオーバーライドする場合には、ワークアイテムタイプルールは、ユーザ1がグループAのメンバなので、ユーザ1が優先順位フィールドを編集することを許可されないことを命ずる。
ユーザアクションの拒絶としての1つまたは複数のルールの解釈のいずれかに応答して、そのユーザアクションを拒絶することができ、例えばディスプレイ900に関して上で説明したメッセージウィンドウ916のメッセージに似たメッセージなどのメッセージを、ユーザに表示することができる。さらに、クライアントWIRエンジン114は、例えば、ユーザに役立つメッセージを表示すること、フィールドに対して許可される値のリストを提供することなどによって、許可されるユーザアクションをユーザが実行するのを助けるように構成されうる。
エンジン114による1つまたは複数の判定されたルールの解釈がユーザアクションが許可されることである場合、エンジン114は、このトランザクションをWIRクライアント/サーバインタフェース122に通信することができる。インタフェース122は、サーバWIRエンジン124と、異なるWITSクライアント(例えば、WITSクライアント102、104、および106)の1つまたは複数のクライアントWIRエンジンとの間のインタフェースとしての役割を果たす(例えば、通信を調整する)ことができる。インタフェース122は、クライアントWIRエンジン114から受け取ったトランザクションをサーバWIRエンジン124に適当な形に変換し、変換されたトランザクションをエンジン124に送ることができる。
WIRエンジン124は、データソース126に保管されたWIR情報130に対するすべての内容書き込みを検証するように構成されることができ、また影響されるワークアイテムに対応するワークアイテムルールの第2の判定および解釈を実行することができる。トランザクションの受け取りに応答して、エンジン124は、WIR情報130を使用して、ワークアイテムに対応する1つまたは複数のワークアイテムルール(例えば、セキュリティベースのルールおよび/またはワークアイテムタイプルール)を判定することができ、これらのワークアイテムルールは、1つまたは複数の表の各行が特定のルールを表す表形式で保管されうる。ルールは、他の形でも(例えば、オブジェクト指向データベース内のオブジェクトとして)保管されうる。
エンジン124は、判定されたルールからビュー(例えば、SQLビュー)を構成し、構成されたビューに基づいてルールを解釈するように構成されうる。例えば、サーバWIR124は、判定されたルールから生成された複数のSQLステートメントを連結し、この連結されたSQLステートメントを実行することによって、1つまたは複数の判定されたルールを解釈するように構成されうる。
サーバWIRエンジン124がユーザアクションは許可されないと判定した場合、サーバWIRエンジン124は、トランザクションをロールバック(roll back)し、そのトランザクションを開始したクライアントWIRエンジンに拒絶およびロールバックを通信することができる。
クライアントWIRエンジン114およびサーバWIRエンジン124の両方でのワークアイテムルールの判定および解釈は、制限されたユーザのアクションが許可されないことを保証するためのある種の冗長性を提供することができる。これは、特にワークアイテムトラッキングシステムのコア要件に違反するユーザアクションを防ぐことによって、システム保全性を維持するのを助ける可能性がある。さらに、WIR情報130は、クライアントWIRエンジンによって使用されるWIRキャッシュ(例えば、ワークキャッシュ116)内の情報より新しい可能性がある。というのは、ユーザアクションが行われたWITSクライアントにまだ伝搬されていないワークアイテムルール更新が、WITSサーバによって他のWITSクライアントから受け取られている場合があるからである。したがって、サーバWIRエンジン124によって実行される判定および解釈は、クライアントWIRエンジンによって行われる判定よりも新しいシステム100の状態を反映している場合がある。
システム100およびそのコンポーネントは、ソフトウェア(例えば、C、C#、C++、Java(登録商標)、またはこれらの組合せ)、ハードウェア(例えば、1つまたは複数の特定用途向け集積回路)、ファームウェア(例えば、電子的にプログラムされたメモリ)、またはこれらの任意の組合せを含む様々なテクノロジのいずれかを使用して実装することができる。システム100のコンポーネントのうちの1つまたは複数は、単一のデバイス(例えば、1台のコンピュータ)に常駐することができ、または、1つまたは複数のコンポーネントは、別々の別個のデバイスに常駐することができる。さらに、各コンポーネントを複数のデバイスに渡って分散させることができ、1つまたは複数のデバイスを相互接続することができる。
さらに、システム100の1つまたは複数のコンポーネントを備える1つまたは複数のデバイスのそれぞれで、コンポーネントのそれぞれが、そのシステムの1つまたは複数の位置に常駐することができる。例えば、これらのシステムのコンポーネントの異なる部分が、デバイス上のメモリの異なる領域(例えば、RAM、ROM、ディスクなど)に常駐することができる。そのような1つまたは複数のデバイスのそれぞれは、他のコンポーネントの中でも、1つまたは複数のプロセッサ、メモリシステム、ディスクストレージシステム、1つまたは複数のネットワークインタフェース、および様々なコンポーネントを相互接続する1つまたは複数のバスまたは他の内部通信リンクとすることができる。システム100およびそのコンポーネントを、以下で図11および12に関して説明するようなコンピュータシステムを使用して実装することができる。
図10は、ワークアイテムトラッキングシステムでワークアイテムルールを実施する方法1000の例を示す流れ図である。方法1000は、単に、ワークアイテムトラッキングシステムのワークアイテムルールを実施する方法の例示的な実施形態であり、本発明の範囲を制限することを意図されたものではない。例えば方法1000の変形形態など、そのような方法の多数の他の実施形態のいずれであっても可能であり、本発明の範囲に含まれることが意図されている。方法1000およびその動作(act)は、上で図1に関して説明したシステム100およびその部分を使用して実施することができる。
動作1002で、1つまたは複数のセキュリティベースのルールおよび/または1つまたは複数のワークアイテムタイプルールを含む、1つまたは複数のワークアイテムルールを作成することができる。動作1002は、図1のシステム100に関して上で説明したWITインタフェースおよび/またはセキュリティインタフェースによって実行することができる。
動作1004で、第1のワークアイテムに影響する第1のユーザアクションの表示を受け取ることができる。例えば、図1に関して上で説明したように、クライアントWIRエンジン(例えば、エンジン114)が、ワークアイテムインタフェース(例えば、インタフェース110)から第1のユーザアクションの表示を受け取ることができる。
動作1006で、第1のワークアイテムに対応する1つまたは複数のワークアイテムルールを判定することができ、動作1008で、これらの1つまたは複数のワークアイテムルールを解釈することができる。動作1006および1008は、システム100に関して上で説明したように実行されることができる。システム100に関して説明したように、動作1006および1008は、クライアントWIRエンジン(例えば、エンジン114)およびサーバWIRエンジン(例えば、エンジン124)の両方によって実行されることができる。いくつかの実施形態で、これらの動作が、これらのクライアントエンジンおよびサーバエンジンによって、わずかに異なる形で実行される場合がある。上で説明したように、サーバは、ワークアイテムルールの判定および解釈で、クライアントエンジンより新しいデータソースからのデータを使用することができ、クライアントエンジンと異なるテクノロジ(例えば、Microsoft SQLテクノロジ)を使用することができる。さらに、クライアントWIRエンジンは、アクションを単純に拒絶するのではなく、例えば許容される値および/またはユーザが実行できるアクションをリストすることによって、許可されるユーザアクションをユーザが実行するのを助けることができる。対照的に、解釈に対するサーバWIRエンジンの応答は、単に、アクションを拒絶することおよび/またはユーザアクションをカプセル化したトランザクションをロールバックすることとすることができる。
動作1010で、解釈に基づいて第1のユーザアクションに応答することができる。例えば、図1に関して上で説明したように、ユーザアクションを、クライアントWIRエンジンによって拒絶と解釈されたので拒絶するか、クライアントWIRエンジンによって許可と解釈されたがサーバWIRエンジンによって拒絶と解釈されたので拒絶するか、クライアントおよびサーバのWIRエンジンによって許可と解釈されたので許可することができる。
方法1000は、追加アクションを含むことができる。さらに、方法1000の一部として実行される動作の順序は、図10に示された順序に制限されない。というのは、動作を他の順序で実行することができ、および/または1つもしくは複数の動作を少なくとも部分的に直列にまたは並列に実行できるからである。
方法1000およびその動作、ならびにこの方法およびこれらの動作の様々な実施形態および変形形態は、個別にまたは組み合わせて、例えば不揮発性記録媒体、集積回路メモリ要素、またはその組合せなどの、1つまたは複数のコンピュータ読み取り可能な記録媒体に有形に具体化されるコンピュータ可読信号によって定義することができる。コンピュータ読み取り可能な記録媒体は、コンピュータによってアクセスできる任意の使用可能な媒体とすることができる。制限ではなく例として、コンピュータ読み取り可能な記録媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を保管するための任意の方法またはテクノロジで実装された、揮発性および不揮発性、リムーバブルおよび非リムーバブルの媒体を含む。コンピュータ記憶媒体に、RAM、ROM、EEPROM、フラッシュメモリ、および他のメモリテクノロジ、CD−ROM、デジタル多用途ディスク(DVD)、または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、または他の磁気ストレージデバイス、他のタイプの揮発性および不揮発性のメモリ、所望の情報を保管するのに使用でき、コンピュータによってアクセスできる他のすべての媒体、および前述の任意の適当な組合せが含まれるが、これに制限はされない。
通信媒体は、通常、搬送波または他のトランスポート機構などの変調されたデータ信号内に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを具体化し、通信媒体には、すべての情報配布媒体が含まれる。用語「変調されたデータ信号」は、信号内に情報を符号化する形でその特性の1つまたは複数を設定または変更された信号を意味する。制限ではなく例として、通信媒体に、有線ネットワークまたは直接配線接続などの有線媒体、音響、RF、赤外線、および他の無線媒体などの無線媒体、他のタイプの通信媒体、および前述のものの任意の適当な組合せが含まれる。
1つまたは複数のコンピュータ読み取り可能な記録媒体に具体化されたコンピュータ可読信号は、例えば、1つまたは複数のプログラムの一部として、コンピュータによる実行の結果として、そのコンピュータに、本明細書に記載の機能のうちの1つまたは複数(例えば、方法1000またはその動作)および/または様々な実施形態、その変形形態、および組合せを実行させる命令を定義することができる。そのような命令は、例えば、Java(登録商標)、J#、Visual Basic、C、C#、またはC++、Fortran、Pascal、Eiffel、Basic、COBOLなどの、複数のプログラミング言語のいずれかまたはこれらの様々な組合せのいずれかで記述することができる。そのような命令が具体化されたコンピュータ読み取り可能な記録媒体は、本明細書に記載のシステム100および1100のコンポーネントのうちの1つまたは複数に常駐することができ、そのようなコンポーネントのうちの1つまたは複数に渡って分散させることができ、それらの間で移行中とすることができる。
コンピュータ読み取り可能な記録媒体は、トランスポート可能とすることができ、それに保管された命令を任意のコンピュータシステムリソースにロードして、本明細書に記載の本発明の諸態様を実施することができる。さらに、上で説明したコンピュータ読み取り可能な記録媒体に保管された命令が、ホストコンピュータで動作するアプリケーションプログラムの一部として具体化された命令に制限されないことを理解されたい。そうではなく、この命令は、本発明の上で説明した諸態様を実施するようにプロセッサをプログラムするのに使用することができる任意のタイプのコンピュータコード(例えば、ソフトウェアまたはマイクロコード)として具体化することができる。
本明細書に記載の機能を実行する、例えば図1、11、および12に関して説明されるコンピュータシステムなどの、コンピュータシステムの単一のコンポーネントまたは複数のコンポーネントの集合のいずれも、一般に、そのような機能を制御する1つまたは複数のコントローラと考えることができることを理解されたい。1つまたは複数のコントローラは、専用のハードウェアおよび/またはファームウェアを用いて、上に記載の機能または前述のものの任意の適当な組合せを実行するようにマイクロコードまたはソフトウェアを使用してプログラムされたプロセッサを使用して、多数の形で実装することができる。
本発明による様々な実施形態は、1つまたは複数のコンピュータシステムで実施されることができる。これらのコンピュータシステムは、例えば、Intel PENTIUM(登録商標)タイププロセッサ、Motorola PowerPC、Sun UltraSPARC、Hewlett−Packard PA−RISCプロセッサ、AMD(Advanced Micro Devices)社から入手可能な様々なプロセッサのいずれか、または任意の他のタイプのプロセッサに基づくものなどの、汎用コンピュータとすることができる。任意のタイプのコンピュータシステムのうちの1つまたは複数を使用して、本発明の様々な実施形態を実施できることを理解されたい。
本発明の一実施形態による汎用コンピュータシステムは、上で説明した機能のうちの1つまたは複数を実行するように構成されている。このシステムが他の機能を実行できることと、本発明がいずれかの特定の機能または機能のセットを有することに制限されないこととを理解されたい。
例えば、本発明の様々な態様を、図11に示されたものなどの汎用コンピュータシステム1100で実行される特殊化されたソフトウェアとして実装することができる。コンピュータシステム1100は、ディスクドライブ、メモリ、またはデータを保管する他のデバイスなどの、1つまたは複数のメモリデバイス1104に接続されたプロセッサ1103を含むことができる。メモリ1104は、通常、コンピュータシステム1100の動作中にプログラムおよびデータを保管するのに使用される。コンピュータシステム1100のコンポーネントを、相互接続機構1105によって結合することができ、相互接続機構1105は、1つまたは複数のバス(例えば、同一のマシン内で一体化されたコンポーネントの間)および/またはネットワーク(例えば、別々の別個のマシンに常駐するコンポーネントの間)を含むことができる。相互接続機構1105は、通信(例えば、データ、命令)をシステム1100のシステムコンポーネントの間で交換できるようにする。コンピュータシステム1100は、例えば、キーボード、マウス、トラックボール、マイクロホン、タッチスクリーンなどの1つまたは複数の入力デバイス1102、および、例えば印刷デバイス、ディスプレイスクリーン、スピーカなどの、1つまたは複数の出力デバイス1101も含む。さらに、コンピュータシステム1100は、コンピュータシステム1100を通信ネットワークに接続する(相互接続機構1105に加えてまたはこれの代わりに)1つまたは複数のインタフェース(図示せず)を含むことができる。
図12に詳細に示されるストレージシステム1106は、通常、コンピュータによって読み取り可能かつ書き込み可能な不揮発性記録媒体1201を含み、この不揮発性記録媒体1201に、プロセッサによって実行されるプログラムを定義する信号が保管され、あるいは、そのプログラムによって処理される情報が保管される。この媒体は、例えば、ディスクまたはフラッシュメモリとすることができる。通常、動作時に、プロセッサはデータを不揮発性記録媒体1201から別のメモリ1202に読み取らせ、これによって、プロセッサによる情報への媒体1201より高速のアクセスを可能にする。このメモリ1202は、通常は、ダイナミックランダムアクセスメモリ(DRAM)またはスタティックメモリ(SRAM)などの揮発性ランダムアクセスメモリである。これは、図示のようにストレージシステム1106に置くか、図示されていないメモリシステム1204に置くことができる。プロセッサ1103は、一般に、集積回路メモリ1104および1202内のデータを操作し、次に、処理が完了した後にそのデータを媒体1201にコピーする。媒体1201と集積回路メモリ要素1104および1202との間のデータ移動を管理する様々な機構が既知であり、本発明はそれに制限されない。本発明は、特定のメモリシステム1104またはストレージシステム1106に制限されない。
コンピュータシステムは、例えば特定用途向け集積回路(ASIC)などの、特別にプログラムされた特殊目的ハードウェアを含むことができる。本発明の諸態様は、ソフトウェア、ハードウェアもしくはファームウェア、またはその任意の組合せで実装することができる。さらに、そのような方法、動作、システム、システム要素、およびそのコンポーネントは、上で説明したコンピュータシステムの一部としてまたは独立のコンポーネントとして実装することができる。
コンピュータシステム1100は、例として、本発明の様々な態様を実践できるコンピュータシステムの1タイプとして図示されているが、本発明の諸態様が、図11に示されたコンピュータシステムで実装されることに制限されないことを理解されたい。本発明の様々な態様は、図11に示されたものと異なるアーキテクチャまたはコンポーネントを有する1つまたは複数のコンピュータで実践することができる。
コンピュータシステム1100は、高水準コンピュータプログラミング言語を使用してプログラム可能な汎用コンピュータシステムとすることができる。コンピュータシステム1100は、特別にプログラムされた特殊目的ハードウェアを使用して実装することもできる。コンピュータシステム1100内で、プロセッサ1103は、通常、Intel Corporationから入手可能な周知のPentium(登録商標)クラスプロセッサなどの市販プロセッサである。多数の他のプロセッサが使用可能である。そのようなプロセッサは、通常、オペレーティングシステムを実行し、オペレーティングシステムは、例えば、本件特許出願人から入手可能なWindows(登録商標)95、Windows(登録商標)98、Windows(登録商標) NT(登録商標)、Windows(登録商標)2000(Windows(登録商標)ME)、またはWindows(登録商標)XPオペレーティングシステム、Apple Computer社から入手可能なMAC OS System X、Sun Microsystems社から入手可能なSolaris Operating System、様々なソースから入手可能なLinux、または様々なソースから入手可能なUNIX(登録商標)などとすることができる。様々な他のオペレーティングシステムのいずれであっても、使用することができる。
プロセッサおよびオペレーティングシステムが、一緒に、高水準プログラミング言語のアプリケーションプログラムが記述されるコンピュータプラットフォームを定義する。本発明が特定のコンピュータシステムプラットフォーム、プロセッサ、オペレーティングシステム、またはネットワークに制限されないことを理解されたい。また、本発明が特定のプログラミング言語またはコンピュータシステムに制限されないこと、および他の適当なプログラミング言語および他の適当なコンピュータシステムも使用できることは、当業者に明白であるだろう。
コンピュータシステムの1つまたは複数の部分を、通信ネットワークに結合された1つまたは複数のコンピュータシステム(図示せず)に渡って分散させることができる。これらのコンピュータシステムも、汎用コンピュータシステムとすることができる。例えば、本発明の様々な態様を、1つまたは複数のクライアントコンピュータにサービスを提供するように構成された1つまたは複数のコンピュータシステム(例えば、サーバ)、または分散システムの一部として全体的なタスクを実行するように構成された1つまたは複数のコンピュータシステムの間で分散させることができる。例えば、本発明の様々な態様を、本発明の様々な実施形態に従って様々な機能を実行する1つまたは複数のサーバシステムの間で分散されたコンポーネントを含むクライアント−サーバシステムで実行することができる。これらのコンポーネントは、通信プロトコル(例えば、TCP/IP)を使用して通信ネットワーク(例えば、インターネット)上で通信する実行可能コード、中間(intermediate)(例えば、IL)コード、または解釈済み(interpreted)(例えば、Java(登録商標))コードとすることができる。
本発明が特定のシステムまたはシステムのグループで実行されることに制限されないこと、および本発明が特定の分散アーキテクチャ、ネットワーク、または通信プロトコルに制限されないことを理解されたい。
本発明の様々な実施形態を、SmallTalk、Java(登録商標)、J#(Jシャープ)、C++、Ada、またはC#(Cシャープ)などのオブジェクト指向プログラミング言語を使用してプログラムすることができる。他のオブジェクト指向プログラミング言語も使用することができる。あるいは、機能プログラミング言語、スクリプトプログラミング言語、および/または論理プログラミング言語を使用することができる。本発明の様々な態様を、非プログラム式(non−programmed)環境(例えば、ブラウザプログラムのウィンドウで表示された時に、グラフィカルユーザインタフェース(GUI)の諸態様をレンダリングするか他の機能を実行する、HTML、XML、または他のフォーマットで作成された文書)で実装することができる。本発明の様々な態様を、プログラム式要素または非プログラム式要素、あるいはその任意の組合せとして実装することができる。さらに、本発明の様々な実施形態を、本件特許出願人から入手可能なMicrosoft(登録商標).NETテクノロジを使用して実装することができる。
本発明のいくつかの例示的な実施形態を説明したので、前述したものは単に例示的であって制限的ではなく、例としてのみ提示されたことが、当業者には明白であるだろう。多数の修正形態および他の例示的実施形態が、当技術分野の通常の技量を有するものの範囲内であり、本発明の範囲に含まれることが企図されている。具体的には、本明細書で提示された例の多くが、方法動作またはシステム要素の特定の組合せを用いるが、これらの動作およびこれらの要素を異なる形で組み合わせて、同一の目的を達成できることを理解されたい。一実施形態に関してのみ説明された動作、要素、および特徴は、他の実施形態における類似する役割から除外されることを意図されていない。さらに、請求項に記載の1つまたは複数の特定の機能を実行する手段の範囲の制限に関して、手段は、記載された機能を実行するための、本明細書で開示された手段に制限されることを意図されているのではなく、記載された機能を実行する、現在既知のまたは後に開発される任意の同等の手段を範囲に含むことが意図されている。
「第1の」、「第2の」、「第3の」などの順序を示す単語を請求項要素を限定するために請求項において使用すること自体は、別の請求項要素に対するある請求項要素の優先、優位、または順序、あるいは方法の動作が実行される時間的順序を暗示するのではなく、単に、ある名前を有するある請求項要素を(順序を示す単語の使用を除いて)同一の名前を有する別の要素から区別し、請求項要素を区別するための符号として使用されている。
付録I
設計文書
ビジネスルールの説明および使用
目次
要約
設計目標および正当化
設計
ルールの評価
個々のルール
アイテム
フィールド
ツリーノード
定数および定数のセット
セキュリティおよび修飾(qualification)の実施のバイパス
admin onlyサブツリー
クライアントサイドルール評価エンジンの実装および制限
パフォーマンスアイテム
プログラム化可能性
ルールを操作し使用するストアドプロシージャ
ルールを操作するストアドプロシージャ
プロダクトツリーを操作するストアドプロシージャ
プロダクトフィールドを操作するストアドプロシージャ
プロダクトルールを作成するSQLのサンプル
ルールのサンプル
ノーダッシュ(no−dash)ドメインユーザに対する全アイテムについてのリスト読み取りアクセス権の許可
リストの1つへのノードタイプの制約
エリアタイプノードはサブエリアタイプノードまたはコンポーネントタイプノードを子として有することができる
「Redmond\pstest」のメンバは、ノード12をルートとするプロダクトツリーの枝の「Folder」タイプでないノードを作成することができない
タイトルは、全員の必須フィールドである
誰もが、かれらがオープンしたすべてのアイテムを読むことができる
Warはダイナミックリストである
Closed Dateは、状態がクローズドでない時について空でなければならない
「Redmond\markradp」配布リストのすべてのドメインユーザは、どこでも何でも行うことができる
(要約)
ルールは、Team Foundation Serverのワークアイテムトラッキングのランタイムコンフィギュレーションの主要なソースである。ルールは、フィールドによって提供される柔軟性を拡張して、プロジェクトまたはサーバの寿命の間、管理者の未知のおよび変化するビジネスニーズを記述し、実施する。単一の機構が、これらのニーズに使用され、サーバの内容のセキュリティおよび保全性をカバーする。ルールは、クライアント、中間(Mid)、およびデータという、このアーキテクチャのすべてのティアの間で共有できるビジネスルールの定義を提供する。これらのルールは、宣言的(規定的でなく)であり、したがって、各ティアがその特定の環境に適当であるようにこれらのルールを解釈することができる。
BRIEは、Product Studio Applicationの一部として始まり、進化してTeam Foundation Serverのワークアイテムトラッキングの一部になった。
(設計目標および正当化)
目標は、
1)ワークアイテムトラッキングシステムで必要なビジネスルールを記述でき、
2)各プロダクトフィーチャの管理を委任できると同時に、より高いレベルの判断がより低いレベルで逆転またはバイパスされることを防ぐようにするためにプロダクトツリーを活用でき、
3)プロダクトツリーおよびドメイングループ/ユーザに基づくセキュリティセッティングを提供でき、
4)将来の要件を自然な形で追加できるのに十分にオープンエンデッドとすることができ、
5)許容不能に低速でないとすることができる
豊富なセットのプリミティブを提供することであった。
(設計)
セキュリティおよびビジネスルールの実施は、中間ティアとデータティアとの間で共有される協力的努力である。それぞれが、非常に重要な態様について他方に頼り、どちらもが、単独では完全に効果的ではない。
誰が何をするかの短い概要を次に示す。
1)中間ティアは、W2000統合認証を使用してドメインアカウントを識別する。
2)中間ティアは、この情報を使用して、データ読み取りにどのデータティアプリミティブを使用するかを判断する。
3)データ変更(挿入/更新)について、中間ティアは、
a)データティアプリミティブを使用してドメインユーザの内部IDを見つけ、
b)この内部IDを、それが変更するすべての行に保管し、
c)データティアプリミティブを呼び出して、それが行ったばかりの変更をオーソライズし、
d)何かが不首尾になった場合にトランザクションをロールバックする。
4)データティアは、セキュリティ環境を反映するドメインユーザごとのパーソナライズされたSQLビューを作成し、組み合わせることによって、「オーソライゼーション」プリミティブを提供する責任を負う。セキュリティ環境は、
a)アクティブディレクトリからインポートされ、データベース内にキャッシングされたドメインアカウント情報と、
b)現在のルール(「セキュリティ」、アイテム内容、および管理者データ内容をカバーする)
からなる。
5)低優先順位バックグラウンドタスクとして(クライアントクエリおよび更新などの有用なタスクのために大量のCPUを保存するために)、データティアは、
a)アクティブディレクトリからのユーザおよびグループメンバの情報を検証し、そのキャッシュを更新し、
b)セキュリティ環境の変更を組み込むために個々のドメインユーザのSQLビューを更新する。
ルールの評価
擬似コードでは、あるアイテムのプロダクトルール評価が、
1.セキュリティプリンシパル(これを行う人)に適用されるすべてのルールを識別し、
2.セキュリティ対象(そのアイテムがあるプロダクトツリー内のノード)に適用されるすべてのルールを識別し、
3.そのアイテムの内容を使用してルールを評価する。
動作を拒絶するルールのいずれかが真と評価されるか、動作を許可するルールのすべてが真と評価されない場合に、その動作は拒否される。
1つの拒絶の理由が、任意の個数の許可する理由より高い地位を占める。これが、許可/拒絶システムの標準である。
アイテムに対する変更のすべてが、すべてのフィールドに関するルールの再評価を引き起こすことに留意することが重要である。あるフィールドに対する変更によって他のフィールドが影響を受けるかどうかを判定する最も簡単な形は、他のすべてのフィールドの許可される値および提案される値のリストを再生成することである。これは、「ジャストインタイム(just−in−time)」で行うことができる。
SQL Server内で、ルールは、セキュリティプリンシパルに関するすべてのルールを(明示的にまたはセキュリティプリンシパルの直接のまたは間接のメンバシップのゆえにのいずれかで)識別することによって評価される。各適用可能なルールが、SQLビューに一緒にバンドリングされるSQL式として解釈される。セキュリティプリンシパルが動作を実際に実行する時に、そのプリンシパルの「パーソナルビュー」が、動作が拒絶されるすなわち許可されないかどうかを検出するのに使用される。その場合には、この動作をラップしたトランザクションが、ロールバックされる。これが機能するために、中間ティアは厳密なガイドラインに従わなければならない。
中間ティアオブジェクトは、信頼されるコンピューティングベースの一部である。しかし、中間ティアがどのように動作するかに対する前提を実施しようとする複数のデバッグトリガがある。これには、次が含まれる。
A)中間ティアは、同一の変更者IDおよびその変更の変更日付をすべての行に記録することによって、データベース変更をグループ化する。変更日付は、最初の変更が行われる前にとられた、SQL ServerのUTCシステムクロック時刻である。変更者IDは、その変更がそれのためであるドメインアカウントのコンスタントID(constant ID)である。0の変更者IDは、アプリケーションが開始した変更である。UTCは、「Universal Time Co−ordinated」(協定世界時)である。これは、ほとんどの形でGMTタイムゾーンの同義語であるが、UTCには「夏時間」がない。
B)読み取りは、特定のドメインアカウント用にパーソナライズされたSQLビューを介して行われる。中間ティアは、ドメインアカウントの名前に基づいてビューを選択する。ビューが存在しない場合には、中間ティアが実行するSQLバッチが、構文エラーを生成する。この場合に、中間ティアエラーパスが、ストアドプロシージャを呼び出して、欠けているパーソナルビューを再ビルドし、SQL selectを再試行する。
C)変更は、シリアライズ可能なトランザクション内で特定の順序で行われる。中間ティアは、最初からコミットまでのすべてを行うSQLバッチを生成する。このトランザクションがストアドプロシージャによってロールバックされた場合に、そのSQLバッチは、さらなるデータベース変更を行わずにリターンしなければならない。SQL Serverによるエラーの送出は、SQLバッチが終了(terminate)したことを意味しない場合がある。必要な順序(テーブル上のデバッグビルドトリガによって可能な限り実施される)は、次の通りである。
1)シリアライズ可能なトランザクションを開始する
2)セキュリティプリンシパルに関連するパーソナルビューを再ビルドする
3)すべての種類のアイテム変更(すなわち、依存リンク要求、撤回、受け入れ、および拒絶と、複製作成およびクリアと、関連するセットの追加および除去を含む)を行う
4)アイテム変更をオーソライズする
5)フィールド属性変更を行う
6)フィールド使用変更を行う
7)フィールド変更(属性および使用)をオーソライズする
8)ツリー変更を行う
9)ツリー変更をオーソライズする
10)新しいルール定数を追加する
11)ルールセット変更を行う
12)ルール変更を行う
13)<必要に応じて他のメタデータ変更を追加する>
14)ルール変更をオーソライズする
15)アイテム変更を適用する
16)フィールド変更を適用する
17)ツリー変更を適用して、展開されたツリーテーブルを再ビルドする
18)ルール変更を適用する
a.古い展開されたセットテーブルを用いる再ビルドのためにパーソナルビューをマークする
b.展開されたセットテーブルを再ビルドする
c.新しい展開されたセットテーブルを用いる再ビルドのためにパーソナルビューをマークする
d.古いパーソナル読み取りビューを除去して、中間ティアに、使用の時点でこれらを再ビルドさせる
個々のルール
プロダクトルールは、そのオブジェクトを指定しない。同一のプロダクトルールを、多数のオブジェクト、例えば、アイテムまたは管理者データに適用することができ、同一のプロダクトルールは、次からなる。
1)条件。条件は、論理If−Then(別名インプライズ(implies))式である。
2)スコープ
3)使用フラグのセット
条件は、真または偽と評価される論理If−Then(別名インプライズ(implies))式のエンコーディングである。部分式のそれぞれに、1つの「プロダクトフィールド」、1つの「ルール定数」、および1つの演算子が含まれる。評価は、オブジェクトの「プロダクトフィールド」の値に対して行われるが、定数は、ストリングである。演算子は、フラグの組合せによって判定される。ルールは、Reverseフラグにオンをセットすることによって、「If」部分と「Then」部分を逆転することができる。これによって、ルールのうちでより表現力のあるThen部分を、If部分であるかのように使用することが可能になる。その場合に、ルールは、「Then−If」(逆インプライズ)になる。条件の「Then」部分は、フィールドのドロップダウンのポピュレーション(population)を駆動するのに使用される。フィールドドロップダウンに影響するために、ルールは、条件に対する「Then」部分を有しなければならない。
演算子は、フィールドの値と
1)ストリングへの数値IDのマッピングからとられた単純なストリング
2)定数セット式の結果である定数
3)ルールが評価されている環境に依存する値をとる特別な定数
との間の比較に使用することができる。
使用可能な演算子は、次の通りである。
1.フィールド値と定数の間のストリング同等性。これは、定数が特別でない限り、演算子フラグをセットしない演算子である。
2.パターンが定数の展開からのストリングである場合のストリングパターンマッチ。値が真と評価されるために、値は、パターンのうちの1つだけに一致しなければならない。パターンマッチは、「In」セット演算子についてのみサポートされる。
3.特別な定数に出会った時には、必ず、特別なケースの処理にエスケープする。
4.fThenConstLargeTextフラグがセットされている時には、ThenConstIDと等しいPropIDを有するTree Propertiesテーブル内の行の大きいテキスト値を使用する。
コメント:TreePropertiesテーブルは、特定のTreeID(ノード)のいくつかのプロパティを表す(TreeId、PropId、Name、Value)エントリのセットを有する。ProjectによるPresentation Formsのスコープ指定は、Project(TreeIdによって表される)のPresentation FormをTreePropertiesテーブルにValueとして保管することによって行われる。フィールド「Value」は、テキストフィールドである(したがって、大きいテキストを保管することができる)。上の(4)で説明した演算子は、TreePropertiesテーブルからのPropIDを「Work Item Form ID」フィールドに関連付けるのに使用される。ThenConstIDの値が、TreePropertiesテーブルから選択されなければならない大きいテキスト値であることを示すために、ルールでfThenConstLargeTextフラグをセットしなければならない。
定数セット展開は、次の形で動作する。2つのフラググループが、セットが展開される時にどのノードがとられるかを定義する。
・ Leafグループ
○ fThenLeaf − 葉定数をとることを指示する
○ fThenInterior − 内側定数(別名、セット名)をとることを指示する
・ Depthグループ
○ fThenOneLevel − 展開される定数の直接の子ノードをとることを指示する
○ fThenTwoPlus − 間接的な子ノードをとることを指示する
展開されたセットに含まれる定数について、グループのそれぞれで少なくとも1つのフラグがセットされなければならない。
現在のデータベース実装は、上で述べたフラグの次の組合せだけをサポートする。
・ 定数のセットの直接メンバ(fThenLeaf=1、fThenInterior=1、fThenOneLevel=1、fThenTwoPlus=0)。これをMember演算子と呼ぶ。
・ ネストされたセットの名前を除く定数のセットの直接のおよび間接のメンバ、すなわちルート以外の、セットの展開からの葉ノードまたは外側ノードの、それぞれのストリング(fThenLeaf=1、fThenInterior=0、fThenOneLevel=1、fThenTwoPlus=1)。これをin演算子と呼ぶ。
・ すべてのネストされたセットの名前を含む定数のセットの直接のおよび間接のメンバ、すなわちルート以外の展開からの内側ノードおよび外側ノード(fThenLeaf=1、fThenInterior=1、fThenOneLevel=1、fThenTwoPlus=1)。これを「In With Set Names」演算子と呼ぶ。
各演算子を否定(negate)することができる。整数フィールドおよび日時フィールドは、評価のためにストリングに変換される。整数は、10進数としてフォーマットされる。日時は、ISO 8601(XMLで使用されるフォーマットすなわち、空白なしのyyyy−mm−ddThh:mm:ss:mmm)としてフォーマットされる。ルールで使用される多数の別個の整数および日時はなく、これらをストリング定数として保管することは、自然に、整数のセット、例えば1、2、5を収容する。セット演算に関して、ルール内の定数は、定数のセットの名前である。セットに、無制限の深さまで、ネストされたメンバとして他のセットを含めることができる。ネストされたセットの名前は、そのセットの名前がセットのメンバとして明示的に追加された場合を除いて、セットメンバとしてカウントされない。セット演算およびパターンマッチ演算は、「Then」部分式に制限される。「If」演算子は、特別なケースとして処理されるか、値(予測可能な形でストリングに変換された)と定数IDのストリングとの間の単純なストリング同等性である。
必ず真である縮退部分式は、「Not a Field」フィールドと「Not a Constant」別名「Unknown Domain Account」定数との間の部分式によって定義される。定数がセットに含まれるという評価とそれが含まれないという評価の間でセットメンバシップを評価する時に、区別が行われる。定数がセットに含まれると評価された時には、そのセットに、空の値およびターゲットオブジェクト内のフィールドの既存の値が暗黙のうちに含まれる。定数が除外されていると評価された時には、セットに追加される暗黙のメンバはない。
「Then」式の演算子フラグを考えるもう1つの形は、ツリーのルートであるルール内の定数としてである。その「メンバ」は、そのルートの子である。ツリーのすべての外側ノード、別名葉ノードは、セットに「含まれる」。ツリーのすべてのノード(外側または内側)は、「セット名を有するセットに含まれる」。ルートノードのストリングは、それ自体に子葉ノードとして明示的に含まれない限り、必ず外部にある。これによって、ルートノードのこのストリングが、すべての演算子の結果に、または何もない時に追加される。
ルールは、出所に基づいてフィールドを区別することはしない。フィールドの値が、エンドユーザまたはサーバのどちらによってセットされたかは問題でない。ルールは、参照されるすべてのフィールドがターゲットに含まれる場合に限って適用可能である。あるフィールドの値を、ルールが評価される時に判定できない(例えば、値がサーバによって後でセットされ、ルールがクライアント側で評価されている)場合に、そのフィールドは、ターゲットオブジェクトについて使用不能と考えられる。
スコープは、ルールが適用されるサーフェイス(surface)エリアの次元を制限する。ルールを適用するために、スコープのすべてがターゲットに適用されなければならない。1つの次元は、かかわるドメインユーザである。他の次元は、ターゲットアイテムの別個の態様である。ルールのスコープは、特定のドメインユーザか、デポ(depot)データベースにキャッシングされたドメイングループもしくは電子メール配布リストの全メンバに制限することができる。ドメインユーザの特定のセットを使用することもできる。
また、ルールのスコープは、「Root Tree ID」および「Tree ID」を使用して、プロジェクト内またはサブプロジェクト内のアイテムに適用されるように指定される。「Tree ID」は、ツリー内の単一のノードまたは特定のノードをルートとするサブツリーとすることができる。「flow down」フラグは、ルールが単一のノードに制限されている時には0である。「flow down」フラグが非0である時には、ルールは、ツリー内の子孫ノードによって継承されているかのように振る舞う。ほとんどのルールが、このフラグをオンにされている。「flow around」フラグがオンの時に、ルールは、「Tree ID」のノードまたはサブツリー以外の、「Root Tree ID」によって示されるプロジェクトまたはサブプロジェクト内のすべての場所に適用される。
ルールは、フィールドスコープ指定用の4つのスロットを有する。各スロットは、Field IDと、比較されるターゲットアイテムのフィールドの前の値および現在の値のうちの一方または両方とを有する。特別なケースとして、空の値をフィールドの前の値に使用して、値を有しないことからのフィールドの遷移をターゲットにすることができる。
使用フラグは、ルールが動作を許可または拒絶しなければならない時を示す。すべての動作が、「アイテム読み取り」、「アイテム書き込み」、および「管理者変更」という広義の分類に割り当てられる。関連するアイテムのセットへのアイテムの追加またはそれからのアイテムの除去は、追加されるアイテムまたはセットに含まれる他のアイテムに対する書き込みとは考えられない。ファイルのアタッチまたはリンクあるいはアイテム内のいずれかのフィールドの値の変更が、アイテム書き込みの一部である。新しいアイテムの作成は、アイテム書き込みと考えられる。アイテムを移動するために、セキュリティプリンシパルは、古い位置と新しい位置の両方に対する書き込みアクセス権を必要とする。条件が真と評価される時に変更アクションのアクセス権を拒絶するルールは、オブジェクトの修飾を定義する宣言的な形を提供する(修飾は、その結果が「良」として適格でないオブジェクト変更を拒否することである)。
クライアントとサーバの両方で評価されるこれらの必須ルール以外に、クライアント側だけで評価される他のルールがある。「提案」フラグをセットされているルールは、ユーザがターゲットで選択するのに「好ましい」値を定義する。「デフォルト」フラグをセットされているルールは、ユーザのために事前に選択される値を定義する。値(または値のリスト)は、ルールのThen Const IDからとられる。提案またはデフォルトの対象であるフィールドは、「Then Field ID」である。適用される(Then式が真と仮定される場合に真と評価される)すべてのルールの提案される値またはデフォルト値が組み合わされて、クライアントで提案されるか事前に選択される値の単一のリストがもたらされる。類似する機能性をHelpテキストルールに使用して、文脈応答型ヘルプテキストを計算する。
次の定数は、プロダクトルール条件に使用された時に「特別な」解釈を与えられる。
○ 「Empty Value」
○ 「Was Empty Value」
○ 「Same As Old Value」
○ 「Name Of Security Principal」
○ 「Old Value Plus 1」
○ 「Value from a different field」
○ 「Server’s date/time stamp」
○ 「Client’s date/time stamp」
○ 「Old value from a different field」
これらの名前の大半は、自己説明的であるが、いくつかは、包括的サポートを保証するのに十分に一般的でないあるカスタマの特別な状況に対処するために任意であり、例えば「Name of Security Principal」は、フィールドが、アクセス権を必要とするドメインアカウント名の値を有する時にアクセス権を許可/拒絶するのに使用される。
ルール自体が、ルールのターゲットである。プロダクトルールの使用フラグを変更することは、そのルールのスコープ内のすべてのツリーノードに対する管理者アクセス権を必要とする。あるルールは、編集可能でなく、「in−the−box」で供給され、ランタイムに変更することができない。
Areテーブルに埋め込まれたフィールドは、ヌルまたは0の長さである時に、バージョンについて空と考えられる。長いテキストヘルパテーブル内のフィールドは、長さが0もしくはヌルである時、またはそのバージョンについて行が存在しない時に、空である。
Product Studioアプリケーションは、管理者が直接に使用するかより大きいセットに含めることができる複数のセットも維持する。これには、次が含まれる。
□ ドメインアカウント − AD(Eleadコンポーネント)のプロキシを介して公開された、現在有効であることがわかっているすべての電子メールニックネーム
□ ドメインユーザ − ユーザであることがわかっているドメインアカウントのサブセット
□ ドメイングループ − グループまたは配布リストであることがわかっているドメインアカウントのサブセット
アイテム
鍵になる概念は、「アイテム」である。これは、ほとんどのルールのターゲットである。アイテムは、Areテーブル内の1つの行であり、このAreテーブルは、すべての「単一の値を有する」フィールド、すなわちコア、共通、およびカスタムについて、1つの列を有する。この行は、アイテムの最新バージョンである。Wereテーブルがあり、このWereテーブルは、Areテーブルと同一のレイアウトに加えて「Revised Date」列を有する。あるアイテムが更新される時に、Areテーブルの行の古い内容が、Items Areテーブル行の新しい内容のUTC変更日付と共にWereテーブルに挿入される。AreテーブルおよびWereテーブルを一緒にすることによって、アイテムの「単一の値を有する」フィールドのすべてのバージョンの完全なヒストリができる。ほとんどのクエリは、Items Areテーブルだけを用いる。これらのテーブルのほかに、複数の「拡張」テーブルがある。「単一の値を有する」フィールドでないすべてのItemフィールドの値は、これらのテーブルのうちの1つに送られる。Words、Files、Related Items、およびKeywordsの拡張テーブルがある(1つのフィールドに、一時に複数の値をセットすることができる)。拡張テーブルの各行は、特定のタイムスパンの間「有効」である。このタイムスパンは、拡張がその瞬間に「有効」である場合に、遠い将来に達する場合がある。この形で、各拡張テーブルが、すべてのItemsの最新バージョンおよび置換されたバージョンの両方を有する。ルールは、Itemsの最新バージョンおよび以前のバージョンに関する。
フィールド
アイテムは、個々のフィールドからなる。各フィールドは、「フレンドリ名」、整数ID、およびフィールドストレージタイプを有する。「ストレージタイプ」のハードコードされたパレットがある。各フィールドは、これらのタイプのうちの1つである必要があるが、多数の別個のフィールドが同一のタイプを有することができる。
ストレージタイプは、次の通りである。
Date time。これらは、Areテーブルに埋め込まれる。例は、「Opened Date」または「Closed Date」である。
Integer。これらは、Areテーブルに埋め込まれる。例は、「Beta ID」である。
Double。これらは、Areテーブルに埋め込まれる。例は、「Percentage completed」であり、これは、値25.25をとることができる。
Keyword。これらは、Areテーブルに埋め込まれる。例は、「Status」または「Assigned To」である。これらは、一時に1つの値だけを選択できるラジオボックス機能性に使用される。
Words。これらは、長いテキストである。これらは、ヘルパテーブルに保管される。例は、「Description」または「Repro Steps」である。
Multi−valued keyword。これらは、ヘルパテーブルに保管される。例は、「Processor」または「OS」である。これらは、一時に多数の値を選択できるチェックボックス機能性に使用される。これらは、現在はCurrituckに使用されていない。
Files。これらは、ヘルパテーブルに保管される、例は、「Attachment」または「Linked File」である。
Areテーブルに保管されたフィールドとヘルパテーブルに保管されたフィールドの間の区別は、後者のフィールドがアイテムのバージョンごとに複数の値を有することができることである。しかし、すべてのフィールドのすべての値が、アイテムのすべてのバージョンについて使用可能であり、したがって、単純なフィールドを、プレゼンテーションレイヤによって多数の値を有するように見せることができ、例えば、表示される説明は、一緒に連結された各アイテムバージョンからの浅い説明の値の連結である。
各ストレージタイプは、それ自体のニュアンス(変化する量の実施を伴う)を有する。すべてのキーワード(ラジオ機能性とチェックボックス機能性の両方に関する)フィールドが、255の最大長を有する。フィールドは、タイプを変更することができないが、タイプの中での些細な調整を行うことができ、例えば、キーワードの最大長を後で増やすことができる。ファイルは、パスとディスプレイ名の両方を有することができる。フィールドは、すべてのオブジェクトでは使用できない場合があり、デポ管理者は、新しいフィールドを導入することができる。同一のフィールドが、多数のオブジェクトに現れることができる。
ツリーノード
プロダクトツリーは、単一辺を有するグラフである。これは、プロダクトツリーがノードからなることを意味する。各ノードは、その親にもどる1つのリンクを有する。ノードは、整数IDによって識別される。ノードは、ルートノードを除いてそれ自体にリンクされず、ルートノードは、それ自体の親として働く。各ノードは、タイプおよび名前を有する。ノード名は、テーブル内で一意ではないが、兄弟ノードの間では一意に保たれる。すべてのアイテムが、1つのツリーノードに「置かれる」。ツリーノードは、削除済みまたはadmin onlyとしてマークすることができる。削除済みノードは、アイテムを有することができず、その下のすべてのノードが、アイテムを有することができない。ツリーノードがadmin onlyであるか、admin onlyであるノードの下にある場合には、そのツリー位置でアイテムを作成するか変更するために、書き込みアクセス権のほかに管理者アクセス権が必要である。
ツリーノードは、ルールのターゲットにすることができる。具体的に言うと、ルールは、ツリーノードの「タイプ」属性を制御するのに使用される。管理者は、プロダクトルールを定義して、親ノードタイプの子ノードのタイプを制御することができる。プロダクトノードの「in−the−box」タイプおよびそれらの間の関係も、ノードレベルタイプの間の暗黙の順序付けによって判定される。各ノードタイプは、それ自体で別個のフィールドタイプを有するフィールドになり、他のフィールドのように使用中または使用中でないとしてマークすることができる。ノードタイプの相対的「サイズ」(すなわち、どのノードタイプがノードタイプTの子孫として受け入れ可能であるか)は、ノードタイプフィールドに割り当てられる数にエンコードされる。
定数および定数のセット
定数は、絶対にルールの対象ではない。定数は、ルールによって内部的に使用される整数idにストリングを関連付けるだけのために存在する。しかし、定数は、プロダクトデポの将来のバージョンをマルチリンガルにするためのフックを与える。
セットは、ルールの対象にすることができる。具体的に言うと、プロダクトルールによって参照されるセットのメンバの変更は、効果的にそのルールを変更することになる。セットの変更は、そのセットを直接にまたは間接に参照するすべてのルールを変更するために管理者アクセス権を必要とする。セットは、無制限の範囲までネストすることができる。特別な定数は、定数のセットのメンバにすることができない。
複数のセットが、アクティブディレクトリからのドメイン情報をキャッシングするのに使用される。そのメンバがすべてのドメインアカウントの名前である定数である1つのセットと、ドメインユーザの名前である定数のセットであるもう1つのセットがある。他のセットは、ドメインユーザを「ノーダッシュ」(フルタイム従業員)および「ダッシュ」(それ以外の全員)に分割する。定数が、ドメイングループまたは配布リストの名前である場合に、そのメンバシップは、「ベストエフォート」でアクティブディレクトリと同期化される。最小限でも、メンバシップは、朝までに同期化される。
管理者アクセス権は、計算フィールド「Changed Set」が保護される定数であるという条件のもとで管理者アクセス権を許可または拒絶することによって、定数またはその直接もしくは間接のメンバのストリングを変更するために必要とされることができる。「Changed Set」フィールドは、プロダクトルールの外では使用不能である。この機構は、重要な「in−the−box」セットのメンバを変更する能力を、管理者アクセス権を有する人によってのみ変更できる他のセットのメンバに制限するのに使用される。所定のアクセス権を有する「in−the−box」セットは、次の通りである。
・ 「Administrators」 − ルートノードおよびその下に対する管理を許可する
・ 「Users」 − ルートノードおよびその下に対する読み取り/書き込みを許可する
・ 「Guests」 − ルートノードおよびその下に対する読み取りを許可する
セキュリティおよび修飾(qualification)の実施のバイパス
時々、書き込み(セキュリティと修飾の両方)の通常のオーソライゼーションを「バイパス」することができる必要がある。これをCurrituckで行う形は、まだ未知である。1つの手法は、ユーザを「Write All」グループに追加するか、これから除去することを可能にすることであろう。このグループのメンバは、その書込動作についてセキュリティを実施されない。これは、そのメンバが読み取りセキュリティを実施されない既存の「Read All」を補足するものである。
admin onlyサブツリー
プロダクトツリーの一部を、そのサブツリーのルートノードのフラグをセットすることによって、「admin only」モードにすることができる。admin onlyモードの時に、このサブツリー内の書込動作は、書き込みアクセス権に加えて、「admin only」サブツリー全体に対する管理者アクセス権を必要とする。
クライアントサイドルール評価エンジンの実装および制限
目標は、多くのコンテキストで使用できる、異なるタイプのオブジェクト(アイテム、ケースなど)用のエンジンを作成することであった。BRIEインタフェースは、コールバックベースであり、したがって、実際のデータを得るために、BRIEは、その呼出し側をコールバックする。これによって、BRIE呼出し側が、データをどのように取り出すかに関する柔軟な手法を使用することが可能になり、BRIEがそのフィールドの値を必要とするルールに出会った時にオンデマンドで行うことができ、あるいは、呼出し側が、あるフィールドの値を取り出すことができないかそうしないことを望む場合にルール処理をスキップすることを選択することができる。
BRIEは、現在の管理者キャッシュ状態によってパラメータ化される。すべてのルールおよび付随する管理者データが、管理者キャッシュから取り出される。キャッシュが変更された後には、BRIEを再初期化しなければならない。
主要な機能性は、単一のエントリポイント(「AccessCheck」)に集中化されており、このエントリポイントは、セキュリティプリンシパルアクセストークン(プリンシパルを含むグループのセット+プリンシパルに適用されるルールのセット)、アクセスを検査されるオブジェクト、必要なアクセスマスク(読み取り、書き込み、管理者)をとる。出力は、アクセスが許可されたかどうかのフラグと、オプションとして有効なアクセスマスクである。
AccessCheckは、次の情報も出力することができる。
・ フィールドプロパティ − どの種類のルールがフィールドについて存在するかを示すフラグのセット。BRIEは、フィールドプロパティを次のカテゴリに副分割する。
○ Forbidden − フィールド値がこのカテゴリのルールのどれかに一致する場合に、アクセスが拒絶される
○ Required − フィールド値がこのカテゴリのどのルールにも一致しない場合に、アクセスが拒絶される
○ Allowed − フィールド値がこのカテゴリのルールと一致する場合に、アクセスが許可される(他のルールによって拒絶される場合がある)
○ Suggested − 提案として働くルールに関するフラグのマスク
○ Not suggested − 否定の提案として働くルールに関するフラグのマスク
・ 値リスト/フォーマット − 上で説明したフィールドプロパティカテゴリに対応する、オプションの定数/フォーマットリスト
AccessCheckアルゴリズムは、次のように動作する。
・ オブジェクト(アイテム、ツリーノードなど)から、プリンシパルがそれへのアクセスを要求したツリー位置を見つける。
・ 対象のタイプidを見つける。
・ admin−onlyフラグを有する場合に、要求されたアクセスに書き込みアクセスが含まれるならば、古い/新しいツリー位置をチェックする。
・ パーソンアクセストークンについて、セキュリティプリンシパルに適用されるすべてのルールを列挙する。
・ ルールごとに、次の条件のいずれかが満足されない場合に、そのルールをスキップする。
○ ルールのアクセス権利のどれもが、要求されたアクセスマスクに含まれない場合。
○ ルールで言及されたフィールドが、チェックされるオブジェクトタイプで使用されていない場合。
○ ルールの階層位置が提要されない場合に、そのルールをスキップする。
○ ルールで使用されているフィールドをオブジェクトから読み取る。ルールで言及されたフィールドのいずれかが欠けている場合には、そのルールをスキップする。
○ ルールを評価する。ルールがアクセスを拒絶し、呼出し側が有効なアクセスマスクを望まないかフィールドプロパティの計算を望まない場合には、即座にリターンする。そうでない場合には、ルールアクセスマスクをグローバル許可アクセスマスクまたはグローバル拒絶アクセスマスクに追加する。
○ いくつかのルール特殊化について、ルールのthen部分であるフィールドを、強制的に要求された値にする(「値を強制的に空にする」、「値を強制的にFROZENにする」、「値を強制的にREADONLYにする」など)。
○ すべてのルールを評価した後に、要求されたアクセスマスクに対してグローバル許可/拒絶マスクをチェックする。
特定のルールの評価は、次のように行われる。
・ フィールドプロパティが要求された場合に、ルール評価アルゴリズムは、ルールに望まれる結果を渡される。所望の結果は、アクセスフラグから演繹される。所望の結果およびルール式フラグ(fUnless、fThenNot)に基づいて、このアルゴリズムは、ルールのターゲットカテゴリ(forbidden、required、allowed、suggested、not suggested)を選択する。
・ ルールを評価する。If部分を計算する。If部分が真である場合には、Then部分を計算する。「If部分」は、2つの式すなわち、「If1」および「If2」の組合せである。欠けているどちらかの部分式は、部分式の成功と解釈される。両方の部分式が真と評価される場合に、「If部分」が真と評価されるという。
結果はIf=>Thenである。次の式アルゴリズムが使用可能である。
○ パターンマッチ
○ セットメンバシップ(Set membership)
○ 同等性
○ 特別な式(CodeDefect特別定数などのハックを置くための拡張可能な場所)。
・ このアルゴリズムは、出会ったルールのタイプに関するフラグをセットする。フラグの例は、次の通りである。
○ 値が空であるかどうかをチェックするルール
○ 値が前と同一であるかどうかをチェックするルール
○ リストメンバシップをチェックするルール
○ パターンマッチをチェックするルール
○ リストメンバシップをチェックし、空のおよび古い値をとるルール
○ パターンマッチをチェックし、古い値をとるルール
○ ドメインユーザをとるルール
○ ドメイングループをとるルール
○ フィールドにデフォルトをセットするルール
○ 値をフィールドにコピーするルール
・ ルールが、望まれない結果に評価される場合には、フィールド状況フラグが、計算されたばかりのルールフラグと論理和をとられる。
・ 要求された場合に、値/フォーマットリストを作成する。
すべてのルールを評価した後に、特別な「外部」カテゴリを計算する。外部カテゴリは、値/フォーマット+UI消費に関するプロパティを含むことが意図されている。外部カテゴリは、要求されたカテゴリが空白でない場合に要求されたカテゴリと等しく、そうでない場合にはallowedカテゴリおよびsuggestedカテゴリの和集合である。次に、forbiddenカテゴリおよびnot suggestedカテゴリが、外部フィールドプロパティカテゴリから除かれる。
BRIEは、無条件ルールという概念も有する。これは、If部分を0にされ、Then部分が特別な「セキュリティプリンシパル」定数を有するか、やはり0にされているルールである。BRIEは、オブジェクトに関する無条件アクセスチェックを行うことができる。無条件アクセスチェックは、通常のアクセスチェックと並列に行うこともできる。無条件アクセスチェックは、オブジェクトの内容変更を考慮せずにオブジェクトに関するアクセス権を計算するのに使用される。セキュリティ例外(Assigned ToおよびOpened By)は、この機構を使用してサポートされる。BRIEは、特定のオブジェクトタイプおよび特定のアクセスマスクに関して無条件アクセスチェックを行うためにどのフィールドが必要であるかを知らせることができるメソッドを公開する。BRIE呼出し側は、ルールを評価する時にこれらのフィールドを供給する責任を負う。
BRIEは、ルール評価プロセスを容易にする少数のヘルパメソッドを提供する。
・ アクセストークンのビルド。AccessCheckメソッドは、BRIE呼出し側がアクセストークンを使用してセキュリティプリンシパルを識別することを必要とする。BRIEは、アクセストークンをビルドし、BRIE呼出し側は、アクセスがチェックされる時にそれを渡す責任を負う。アクセストークンを有することの主な理由は、冗長な計算の必要をなくすことである。アクセストークンには、セキュリティプリンシパルが属する定数セットのセットと、セキュリティプリンシパルに適用されるルールのセットが含まれる。
・ クエリビルダ用の提案される値の計算(FieldInfoAllowedValues)。非常に単純なアルゴリズムが、それを行うのに使用される。用いられる、問題とされているフィールドを有するすべてのルールが処理される。fIfNotが0の時に、If部分からのすべての値がとられる。fThenNot^fUnless^DenyWriteが偽の時に、ThenPart部分からのすべての値がとられる。ツリーノードタイプも計算される。特別に処理されるフィールドは、ツリーフィールド、Node Name、Node Type、およびPerson Nameである。
・ デフォルト値:「アイテム」の状態を与えられれば、brieは、そのアイテムのフィールドのデフォルト値を計算することができる。
・ 計算フィールドの無効化。フィールドIdを与えられれば、BRIEは、計算フィールドのどれが変化のゆえに影響を受けるかを知らせることができる。
・ 計算フィールドの計算。BRIEは、次の計算フィールドの値を計算することができる。
○ ツリータイプフィールド
○ Node Name
○ Node Type
○ Tree Path
○ Person Name
また、BRIEは、いくつかの読み取り専用フィールド(依存性関連フィールド、Regressions)を計算することができない。これらの計算フィールドは、アイテムが保存された後に、中間ティアによって返される。
(パフォーマンスアイテム)
最大の問題は、暗黙のセットメンバシップを識別し、どのノードがプロダクトツリー内の他のどのノードの下にあるかを識別するハウスキーピングにある。これは、ドメイングループおよび配布リストに関するメンバシップ情報を同期化するコストと、アクティブディレクトリに対するすべてのドメインアカウントの継続する存在によって倍加される。より小さい懸念が、個々のドメインユーザについてSQLビューを生成するコストと、それが古くなった(それがもはやルールおよびセットメンバシップを反映しないので)時の識別である。多数のビューを担持することに対するコストはほとんどないが、これらのビューを使用して、データベース変更をロールバックしなければならない時を検出すること、または読み取りに関してパーソナルビューを介してユーザselectをフィルタリングすることに関するコストがある。
いくつかの現在のルールエンコーディングの説明
1.Assigned to例外を実装するルール(なくなる可能性がある)
Grant Write TO Authenticated Accounts under\(a TF Server) within sub-tree\(a TF Server) WHEN (Assigned To is *Special Constant* -10020)
このルールのエンコーディングは、次の通りである。
((dbo.StringInString (I.[Person Name],W.[Assigned To]) = 1
and
dbo.EmailIsVerified (W.[Assigned To],W.[Changed Date]) = 1
and
W.AreaID is not null
and
W.AreaID=I.AreaID))
これは、次をエンコードしている:変更を行う人(I.[Person Name]によって表される)が、bugが割り当てられているグループと同一またはそのグループのメンバであり、[Assigned to]フィールドの値が有効な値であり、アイテムのツリー位置が有効であり、アイテムのツリー位置が変更されていない場合に、書き込みを許可する。
管理者更新についてバックエンドで使用される楽観的なロックに関する説明
Adminテーブルのタイムスタンプ列(Rulesなど)は、楽観的ロックを行うのに使用される。ロックを保持するのではなく、我々は、動作のセットの始めにDBのタイムスタンプを保管する。
我々は、トランザクションの分離レベルに「読み取りコミット済み(read committed)」をセットするが、これは、ある行からあるデータを読み取った後に、いくつかの他のトランザクションが到着し、そのデータを編集した可能性があることを意味する(「再現不能読み取り問題」)。これに対して保護するために、我々は、下で説明する楽観的ロックを行う。
我々は、我々が更新しようとしている行が、その動作を開始した後に変更されているかどうかを判断したい時に、その行のタイムスタンプ列が、我々が保管したものより大きい値を有するかどうかを調べるためにチェックする。
そうである場合に、その行は、我々が最後にそれを読み取った後に更新されており(ある他のトランザクションによって)、我々は、変更を元に戻さなければならない。そうでない場合には、その行に対する変更を行うことができる。例えば、RebuildPersonsViews sprocを参照されたい。
(プログラム化可能性)
ルールを操作し使用するためのストアドプロシージャ
/*---------------------------------------------------------------------------
// 名前: AuthorizeItemChanges
//
// 特定の日付に変更されたアイテムが、アイテム内容ルールに違反していないことを
// チェックする。いずれかのアイテムがいずれかのルールを破壊している場合には、
// トランザクションをロールバックする。このプロシージャは、シリアライズ可能な
// トランザクション内で実行されると期待され、したがって、結果は、同一のUTC // クロック時刻にアイテムを追加または変更する他のトランザクションによって影響 // されなくなる。
//--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: AuthorizeRuleChanges
//
// 特定の瞬間のセキュリティプリンシパルによるすべてのルール変更がどのルールに
// も違反していないことをチェックする。ルールによって参照される定数セットのメ
// ンバの変更は、ルールに対する変更としてカウントされる。Setsテーブルのト // リガは、RuleSet変更によって影響を受けるルールのChangerIDお // よびChangedDateを変更することによって、これを実装する。定数ID // のストリングは、更新または削除することができず、したがって、ルールに対する // 類似する変更を引き起こさない。
/---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: AuthorizeTreeChanges
//
// 特定の瞬間のセキュリティプリンシパルによるすべてのルール変更がどのルールに
// も違反していないことをチェックする。ルールによって参照される定数セットのメ
// ンバの変更は、ルールに対する変更としてカウントされる。Setsテーブルのト // リガは、RuleSet変更によって影響を受けるルールのChangerIDお // よびChangedDateを変更することによって、これを実装する。定数ID // のストリングは、更新または削除することができず、したがって、ルールに対する // 類似する変更を引き起こさない。
/---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: AuthorizeFieldChanges
//
// 特定の瞬間のセキュリティプリンシパルによるすべてのルール変更がどのルールに
// も違反していないことをチェックする。これは、プロダクトフォームに対する変更
// もチェックする。
//--------------------------------------------------------------------------*/
ルールを操作するストアドプロシージャ
/*---------------------------------------------------------------------------
// 名前: AddConstant
//
// 定数をデポに導入するのに使用されるストアドプロシージャ。定数がドメイン
// アカウントである場合には、アクティブディレクトリと同期化される、すなわちそ
// のセットメンバシップが、アクティブディレクトリからとられる。
//--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: ChangeRuleSet
//
// 既存の定数をセット/リストに追加する。
//
// セキュリティ違反または他の保全性違反の際に、トランザクションがロールバック
// される。トランザクションがロールバックされる場合には、SQLエラー266が
// 送出される。
//--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: LookupRule
//
// 条件の特定のセットを有するルールを追加する/見つける。ルールの個数は、最小
// 限に保たれ、したがって、新しいルールは、必要な条件を有する既存ルールがない
// 場合に限って追加される。
//--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: ChangeRule
//
// 既存ルールのフラグを変更する。冗長なデータベース更新は行わない。
// 入力引数値としてヌルを使用することによって、すべてのアクセス権フラグを未変
// 更のままにすることができる。
// ルールは、削除されず、すべてのフラグが0の場合には関連しない。
// セキュリティ違反または他の保全性保全性違反の際に、トランザクションがロール // バックされる。
// トランザクションがロールバックされる場合には、SQLエラー266が送出され // る。
//--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: ApplyRuleChanges
//
// 変更がオーソライズされた後、およびツリー変更が適用された後だが、ルール変更
// が適用される前に呼び出す。これによって、セキュリティプリンシパルによって所
// 与の時に行われたSetsに対する変更に従って、ExplodedSets(遷 // 移的セットメンバシップ)に行が追加され、除去される。
//--------------------------------------------------------------------------*/
プロダクトツリーを操作するストアドプロシージャ
/*---------------------------------------------------------------------------
// 名前: ChangeTree
// 既存ノードを変更するか、新規ノードをプロダクトツリーに追加する。冗長なデー
// タベース更新または挿入は行わない。入力引数値としてヌルを使用することによっ
// て、すべての列を未変更のままにすることができる。
// 新規ノードは、ヌルのTreeIDが入力として渡された場合に追加される。
// セキュリティ違反または他の保全性保全性違反の際に、トランザクションがロール // バックされる。
// トランザクションがロールバックされる場合には、SQLエラー266が送出され // る。
//--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: ApplyTreeChanges
//
// プロダクトツリーに対する変更に基づいて、ツリーパステーブルに対する増分変更
// を行う。プロダクトツリーに対する変更の共通のケースは、サブツリー全体を伴う
// 些細な変更のためである。
//--------------------------------------------------------------------------*/
プロダクトフィールドを操作するストアドプロシージャ
/*---------------------------------------------------------------------------
// 名前: ChangeField
//
// 既存フィールドを変更するか新規カスタムフィールドを追加する。
// セキュリティ違反または他の保全性保全性違反の際に、トランザクションがロール // バックされる。
// トランザクションがロールバックされる場合には、SQLエラー266が送出され // る。
//--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
// 名前: ApplyFieldChanges
//
// 「短く狭い」フィールドが使用されるようになる時に、AreテーブルおよびWe
// reテーブルを変更する。これらは、Product Studio UIの結果
// ペインに表示できるフィールドである。すべての未使用のデータベース列をフィル
// タアウトするこれらのテーブルに対するビューが、必要な場合に再ビルドされる。
// これらのビューは、保護されたアイテムの読み取りに使用されるパーソナルビュー
// の基礎である。
//--------------------------------------------------------------------------*/
プロダクトルールを作成するSQLのサンプル
Figure 0005238138
Figure 0005238138
Figure 0005238138
Figure 0005238138
ルールのサンプル
次のサンプルルールでは、ビジネスシナリオと、プロダクトルールがそれにどのように対処するかを説明する。「Decoded Rules」ビューに現れるルールおよびそれが依存する定数のセットのすべてのストリングが、リストされる。(形式張った)英語の解釈と共にすべてのルールを見るには、
Select ForDisplay from dbo.DecodedRules
を行う。
名前付きセット「Okay Status」(ネストされたセットの名前ではなく)のストリングを見るには、
select * from dbo.ExplodeSet ('Okay Status')
を行う。
名前付きセット「Okay Status」の直接のメンバ(ネストされたセットの名前を含む)のストリングを見るには、
select * from dbo.ListSet ('Okay Status')
を行う。
ドメイングループまたは配布リストの名前、例えば「redmond\markradp」は、セットの名前として機能する。そのメンバも見るためには、Explode Set UDFを使用する。
ストリングの定数IDを見つけるためには、
select ConstID from dbo.Constants where String = 'redmond\tomtal'
を行う。
注:IDとして使用される数は、固定されていない。異なるデポが、まったく異なるストリング、フィールド、またはツリーノードに同一の数を使用することができる。
ノーダッシュドメインユーザに対する全アイテムについてのリスト読み取りアクセス権の許可
(Editable) Grant Read FOR No Dash Domain Users TO Everywhere WHEN Always
Figure 0005238138
リストの1つへのノードタイプの制約
Deny Admin FOR Domain Accounts TO Everywhere UNLESS Node Type ID NOT is Product => Node Type ID in Child Node Types
Figure 0005238138
エリアタイプノードはサブエリアタイプノードまたはコンポーネントタイプノードを子として有することができる
Deny Admin FOR Domain Accounts TO Everywhere UNLESS Parent Node Type ID is Area => Node Type ID in Area
Figure 0005238138
Component
SubArea
「Redmond\pstest」のメンバは、ノード12をルートとするプロダクトツリーの枝の「Folder」タイプでないノードを作成することができない
Deny Admin TO REDMOND\pstest FOR X (a Folder and under) UNLESS Node Type ID is Folder
Figure 0005238138
タイトルは、全員の必須フィールドである
Deny Write FOR Domain Accounts TO Everywhere WHEN Title in Empty value
Figure 0005238138
誰もが、彼がオープンしたすべてのアイテムを読むことができる
(Editable) Grant Read FOR Domain Accounts TO Everywhere WHEN Opened By in Name of domain account doing this
Figure 0005238138
Warはダイナミックリストである
(Editable) Suggestion FOR Domain Accounts TO Everywhere (Unused) WHEN WAR NOT in Okay WAR
Figure 0005238138
Closed Dateは、状態がクローズドでない時について空でなければならない
Deny Write FOR Domain Accounts TO Everywhere UNLESS Status NOT is Closed => Closed Date in Empty value
Figure 0005238138
「Redmond\markradp」配布リストのすべてのドメインユーザは、どこでも何でも行うことができる
(Editable) Grant Read Grant Write Grant Admin FOR REDMOND\markradp TO Everywhere WHEN Always
Figure 0005238138
付録II
ワークアイテムタイプ定義言語
(要約)
この文書は、ワークアイテムタイプ定義(WITD)言語を定義する。
ワークアイテムタイプは、XMLファイルの手による作成によって、またはワークアイテムタイプエディタを使用してのいずれかで定義される。
(範囲)
この文書は、ワークアイテムタイプ定義言語を定義する。この文書は、この言語をどのように使用するかは定義しない。使用法については、ワークアイテムタイプルールおよびカスタマシナリオ仕様書を参照されたい。
(関連文書)
ワークアイテムタイプ
・ ワークアイテムタイプに関する詳細
ワークアイテムタイプルールおよびカスタマシナリオ
・ ワークアイテムタイプ定義言語を使用するためのカスタマ中心のシナリオ
ポートフォリオプロジェクト管理
・ ワークアイテムタイプの管理に関する詳細
Whidbey Bug
・ インハウス使用に関するワークアイテムタイプ定義(ドッグフーディング)
(目次)
要約
範囲
関連文書
目次
シナリオ
ワークアイテムタイプの概要
高水準WITD構造
フィールド
<FIELD>定義
フィールド名
フィールド参照名
フィールドタイプ
フィールドレポーティング
フィールドヘルプテキスト
フィールドルール
フィールド制約
フィールドリスト
フィールドリストアイテム
グローバルリスト
フィールドリストタイプ
リストアイテム展開

組合せでのリストタイプの使用
正しい値の判定
ピックリスト値判定
複数リストの指定
フィールドデフォルト
フィールド条件
<WHEN*>ルール、<DEFAULT>ルール、および<COPY>ルールの期待される挙動
条件フィールドルール属性
ユーザおよびグループの参照
ワークフロー
概要
遷移セキュリティ
状態、遷移、または理由によるフィールドルールのスコープ指定
状態遷移アクション(状態遷移の自動化)
適切な状態遷移の識別
遷移の自動化
遷移アクションの詳細
自動遷移エラーチェックおよびWIT作成者の考慮
ルール評価順序
特別なルール制約
ナンセンスなルール
問題のあるルール
フォーム
<Layout>、<Group>、および<Column>
コントロール
すべての要素
サンプル
WITDローカライゼーションおよびグローバライゼーション
V1カットリスト
フィールドタイプ
フィールドルール
フィールドインデクシング
indexed
(シナリオ)
WITD言語は、次のシナリオをサポートすることが期待される。
新しいチームプロジェクト
カスタマが、新しいチームプロジェクト(TP)を作成することを望む。カスタマは、チームプロジェクト作成ウィザードを介してこれを行う。TP作成の一部として、カスタマは、「方法論(methodology)」(例えば、MSF Agile)を選択する。各「方法論」は、ワークアイテムタイプのセットを識別する。終了した時に、TPに、その方法論によって定義されたデータベース内のワークアイテムタイプのセットが含まれ、ユーザは、これらのタイプの新しいワークアイテムインスタンスを作成することができる。
サードパーティワークアイテムタイプ
パートナが、カスタマがVisual Studio Team Systemツールを用いてSEI−CMMプロセスでより高いレベルを達成するのを助けることを望む。あるいは、システムインテグレータが、彼らが奨励する開発方法論をVisual Studio Team Systemツールを用いて自動化できると判断する。パートナは、WITD言語でワークアイテムタイプのセットを設計する。パートナ/システムインテグレータは、これらのWITD XMLファイルをウェブを介して、CDで、その他の方法でカスタマに配布する。
これらの方法論を購入したカスタマは、Team Foundation Serverでチームプロジェクトの一部としてこれらのワークアイテムタイプをパッケージ化する。
Team Foundation Server間でのワークアイテムタイプの移動
AdventureWorks社の部署Aは、しばらくVisual Studio Team Systemを使用してきた。彼らは、カスタマイズされたワークアイテムタイプを使用している複数のチームプロジェクトを有する。彼らは、彼らがプロジェクトに関する問題を追跡するのに使用する新しいワークアイテムタイプも作成済みである。別の部署、部署Bで、新しいTeam Foundation Serverがセットアップされた。部署Bは、良いことが部署Aで起きていることを聞き、やはりIssueワークアイテムタイプを使用すると判断した。部署Aのチームプロジェクト管理者が、XMLファイルとしてIssueをエクスポートする。部署BのTP管理者は、自分のチームプロジェクトにIssueワークアイテムタイプをインポートする。
(ワークアイテムタイプの概要)
次が、WITD言語の主要な設計目標である。
・ 将来の機能性に対処するために拡張可能
・ 単純 − 基本言語は、理解と作成が単純でなければならない
・ 人間可読 − ユーザは、単純なWITDをタイプし、特定の設計ツールに頼らずにそれらを働かせることができなければならない。
ワークアイテムタイプは、次の高水準アイテムからなる。
名前:これは、チームプロジェクト内で一意でなければならない。例に、bug、feature、requirement、taskが含まれる。
記述:これは、ランタイムにプロジェクト内のワークアイテムタイプの概要が必要な時に使用できるヘルプテキストである。
フィールドのリスト:これは、ワークアイテムタイプのフィールドの関連するセットを定義する。フィールド定義は、Team Foundation Serverにグローバルである。すべてのワークアイテムタイプに、Team Foundationワークアイテムトラッキングに必要なコアフィールドのセットが含まれる。
ワークフロー:これは、有効な状態および正しい遷移のセットと、誰がこれらの遷移を実行することを許可されるかを定義する。
フィールドルールのセット:これは、ワークアイテムがその状態遷移図を通って移動する時のフィールドおよびフィールド値に対する制約を定義する。
フォーム:これは、関連するフィールドがエンドユーザによってどのように表示され、操作されるかを定義する。
オプションとして、グローバルリストのセット:複数のフィールドに再利用できる値の名前付きリスト(例えば、found on OSフィールド、fixed on OSフィールド、supported on OSフィールドに使用されるオペレーティングシステム)。
ワークアイテムタイプは、チームプロジェクトにスコープを指定される。グローバルワークアイテムは存在しない。
(高水準WITD構造)
下は、ワークアイテムタイプ定義(WITD)の高水準構造である。
Figure 0005238138
<WITD application=’work item type editor’ version=’1.0’>
ワークアイテムタイプ定義は、タグ<WITD>によって囲まれる。後のリリースで、XMLスキーマが変更される可能性がある。アップデートは、後方互換である。
<WORKITEMTYPE name=’bug’>
ワークアイテムタイプ名は、所与のチームプロジェクト内で一意でなければならない。この名前は、ランタイムに使用される。例えば、ユーザが、bug、task、risk、またはissueを選択する。
<DESCRIPTION>
記述は、ランタイムにプロジェクトのワークアイテムタイプの概要が必要な時に使用できるヘルプテキストである。例えば、aが、リスクと問題の間の相違を理解することを望む。
この文書の残りでは、<GLOBALLISTS>セクション、<FIELDS>セクション、および<WORKFLOW>セクションを詳細に扱う。<FORM>セクションは、現在はWork Item Type Form XMLで扱われている。
(フィールド)
所与のワークアイテムタイプに関連する関連フィールドは、XMLの<FIELDS>セクションで定義される。定義(<FORM>内および<WORKFLOW>内など)セクションの他の場所で参照されるすべてのフィールドは、コアフィールドを除いて、まず<FIELDS>セクションで宣言されなければならない。
フィールドは、次の情報を有する:名前、参照名、タイプ、ヘルプテキスト、および挙動または制約のセット。明示的にリストされない非コアフィールドは、このワークアイテムタイプのすべてのインスタンスについて暗黙のうちに空であり、読み取り専用である。
Figure 0005238138
<FIELD>定義
フィールドは、名前、参照名、およびタイプによって定義される。フィールドは、様々なレポートする挙動(reporting behavior)を用いてセットすることもできる。
Figure 0005238138
フィールド名
フィールド名は、Team Foundation Serverのフィールドに関する一意のユーザ可視のハンドルである。これは、所与のTFS内のすべてのチームプロジェクトおよびワークアイテムタイプにまたがる一貫性を奨励するためのものである。フィールド名は、クエリを作成するかワークアイテムタイプエディタ内で作業する時に使用される。ワークフロー内またはWITDのフォームセクションで参照されるすべてのフィールドが、<FIELDS>セクション内でそのフィールドを定義する<FIELD>要素を有しなければならない。
フィールドは、TFS管理者によって、例えば「Title」から「Headline」に名前を変更することができる。フィールドの名前を変更することができるので、インテグレーションが名前によってフィールドを参照することは、良い考えではない。したがって、インテグレーションおよびフィールドの内部表現は、フィールド名自体に依存するのではなく、フィールド参照名を使用しなければならない。
フィールド名は、42ユニコード文字の長さにすることができる。許容されるユニコード文字カテゴリは、次の通りである。
・ 小文字{Ll}
・ 大文字{Lu}
・ 題字{Lt}
・ 他の文字{Lo}
・ 数字{Nd}
・ スペース{Zs}
我々は、ベータ2の後で次を許可することを検討する可能性がある
句読点コネクタの単一の出現{Pc}
句読点ダッシュの単一の出現{Pd}
モディファイヤ(modifier)文字{Lm}
ユニコードサロゲート(surrogate){Cs}
フィールド名は、前後のスペースをトリミングされる。
フィールド参照名
WITD言語およびWIQL(ワークアイテムクエリ言語)の重要な目的は、これらの定義をTFSの間でポータブルにすることである。サードパーティインテグレーションがあるフィールドを見つけられ、参照できることも重要である。フィールド名は変更される可能性があるので、これらはこの目的には良くない。
フィールドIDがこの目的に最適と考えられるかもしれないが、カスタムフィールドをエンドユーザが追加することができるので、我々は、あるTFSから別のTFSへのフィールドID一意性を保証することができない。
したがって、我々は、フィールド参照名という概念を導入しようとしている。フィールド参照名は、.NETフレームワークの名前空間が一意であるのと同一の形でグローバルに一意である。
したがって、フィールド参照名は、全世界で一意であり、名前を変更することができない。したがって、フィールド名「Title」が「Header」に変更された場合に、参照名は同一のままになる。
.NET名前空間の伝統と調和して、我々は、我々自身の使用のために2つの名前空間すなわちSystemおよびMicrosoftを定義する。System名前空間には、Team Foundationシステム機能に必須のすべてのコアフィールドが含まれる。Microsoft名前空間は、Microsoftによって定義されるout−of−the−boxワークアイテムタイプのすべての必要なフィールドを定義するのに使用される。カスタマおよびパートナは、カスタマワークアイテムタイプ用の彼ら自身のフィールド名前空間を作成することができる。
Systemの例に、次が含まれる。
System.Id
System.Title
System.CreatedBy
System.CreationDate
System.ChangedBy
System.ChangedDate
System.State
System.Reason
Microsoftの例に、次が含まれる。
Microsoft.Common.Status
Microsoft.Common.Priority
Microsoft.Scheduling.Duration
Microsoft.Scheduling.PercentComplete
Microsoft.Testing.TestCaseName
カスタマおよびパートナは、彼ら自身のワークアイテムタイプをサポートするために、彼ら自身の名前空間を定義することもできる。
Accenture.Common.Severity
Accenture.Common.Phase
Accenture.RiskManagement.RiskType
Accenture.RiskManagement.Resolution

EDS.Common.BusinessPriority
EDS.Bug.FoundInPhase
EDS.Bug.FixInPhase
TFSは、カスタマが彼ら自身のSystem.XフィールドまたはMicrosoft.Xフィールドを作成することを防がない。しかし、そうしないことが強く推奨され、そうすることは、TFS機能性を妨げる可能性がある。
フィールド参照名は、255文字の長さにすることができる。許容される文字は、次の通りである。
・ 英語小文字a〜z
・ 英語大文字A〜Z
・ 数字0〜9
・ ピリオド「.」
・ ハイフンの単一の出現「−」
・ アンダースコアの単一の出現「_」
フィールド参照名は、前後のピリオド「.」をトリミングされる。フィールド参照名には、少なくとも1つの「.」が含まれなければならない。
WITDのすべてのルール要素およびフォーム要素は、定義のポータビリティを最大にするために、参照名によってフィールドを参照しなければならない。
フィールドタイプ
フィールドのタイプは、ユーザがそのフィールドに保管することを期待するデータの種類およびサイズを定義する。フィールドは、TFSごとに1つのタイプだけを有することができる。これは、組織がプロジェクトおよびワークアイテムタイプに渡って共通のフィールドを使用することを奨励するためである。
正しいフィールドタイプは、次の通りである。
・ String
ワンライナ(one−liner)および短いストリングフィールドに使用される。クエリフィルタおよび結果リストで自由に使用される。255ユニコード文字まで。
・ Integer
整数値に使用される。クエリフィルタおよび結果リストで自由に使用される。32ビット符号付き整数。
・ Double
浮動小数点値に使用される。クエリフィルタおよび結果リストで自由に使用される。
・ DateTime
保管された時間の特定の瞬間をUTCで表し、ローカル時間帯に合わせて調整される必要がある。
・ PlainText
記述などに使用される長いテキストフィールド。
・ HTML
記述などに使用される長いテキストフィールド。これは、HTMLに強く型付けされている点がPlainTextフィールドと異なる。このフィールドは、情報のより豊かな表示を可能にする。
さらに、次のフィールドタイプは、ある種のコアフィールドだけについてサポートされる。これらのフィールドタイプをカスタマフィールドに使用することはできない。
・ TreePath
CSS領域またはイテレーションパスを保管するのに使用されるストリングフィールド。このフィールドタイプは、コアフィールドSystem.AreaPathまたはSystem.IterationPathだけについてサポートされる。
・ History
会話スレッドおよびリビジョンヒストリを表示するのに使用される長いテキストフィールド。このフィールドタイプは、コアフィールドSystem.Historyだけについてサポートされる。
フィールドレポーティング
一部のフィールド値は、レポート目的に特に有用である。WITDは、ユーザがこれらのフィールドの特別な属性を指定することを可能にする。この属性は、オプションである。属性が指定されていない場合に、そのフィールドデータは、データウェアハウスにエクスポートされない。
レポート可能属性を有するフィールドは、データウェアハウスにエクスポートされ、レポートに含まれることができる。レポート可能属性は、次の3つの値のうちの1つをとる。
1.dimension
integerフィールド、stringフィールド、またはdatetimeフィールドだけに使用される。データは、ウェアハウスおよびキューブに送られ、したがって、レポートのフィルタリングに使用することができる。formula属性を指定する必要はないが、指定された場合に、formula属性は値「none」だけをとることができる。
Figure 0005238138
2.detail(ジャンクまたは縮退(degenerate)ディメンション)
integerフィールド、doubleフィールド、stringフィールド、またはdatetimeフィールドだけに使用される。データは、ウェアハウスには送られるが、キューブには送られない。formula属性を指定してはならない。
Figure 0005238138
3.measure
integerフィールドおよびdoubleフィールドだけに使用される。集約(aggregation)は、formula属性によって定義される。formula属性が指定されていない場合のデフォルト集約は、sumである。
Figure 0005238138
formula属性は、ユーザが、measureをどのように集約するかを選択することを可能にする。そのフィールドのreportable属性が指定されていない場合には、formulaフィールドは無視される。formula属性は、次の7つの可能な値を有する。
sum
count
distinctcount
avg
min
max
reportableセッティングは、TFS全体に渡ってグローバルである。あるフィールドについて異なるセッティングを有するワークアイテムタイプの再プロビジョニングは、そのフィールドのreportable値を変更しない。
WIT作成者は、いつでも、reporting属性を指定しないことによって、フィールドのレポートを使用不可にすることを許可される。その場合に、ユーザはこの属性を再指定することによって、フィールドのレポートを再び使用可能にすることができる(しかし、オリジナルセッティングから値を変更することはできない)。
これは、使用不可にされたときに、もはやフィールドがアダプタによってデータウェアハウスにコピーされないことを意味する。データウェアハウスは、(前に使用可能にされていた場合に)古い値を含み、レポートは、(おそらくは一貫性のないデータを有する)そのフィールドを参照することができる。
これによって、管理者が、フィールドが絶対的に必要ではないときのアダプタの不必要な使用を防ぐことが可能になる。
コアフィールドは、システムによってreporting属性をセットされ、変更することはできない。
フィールドヘルプテキスト
フィールドは、ユーザがフィールドに入力しなければならないものに関してユーザを案内するのにランタイムに使用されるヘルプテキストも有する。フィールドヘルプテキストは、オプションである。フィールド名およびタイプと異なって、フィールドヘルプテキストは、TP内の所与のワークアイテムタイプにスコープを指定される。これによって、各TPが、任意の所与のワークアイテムタイプに対する任意の所与のフィールドの使用に関する、それ自体のガイドラインを定義することが可能になる。
フィールドヘルプテキストは、255文字の長さにすることができる。
Figure 0005238138
注:グローバルヘルプテキストはなく、WITDがあるフィールドのヘルプテキストを提供しない場合には、使用可能なヘルプテキストはない。これには、コアフィールドが含まれる。
フィールドルール
フィールドルールは、フィールドの挙動および制約を定義し、<FIELD></FIELD>ブロックの中にリストされる追加要素である。
例えば、フィールドが必要な場合に、XMLは次のようになる。
Figure 0005238138
注:フィールドルールのスコープは、特定のチームプロジェクトのワークアイテムタイプに制限される。グローバルルールまたはグローバルワークアイテムタイプという概念はない。
フィールドルールは、次のサブセクションにグループ化されている。
・ 制約
・ リスト
・ デフォルト
・ 条件
フィールド制約
フィールド制約は、フィールド値の要件を定義する。
注:フィールド制約のうちのいくつかは、ここで説明するグローバルコンテキストで意味をなさない。この仕様書の後の部分で、フィールドルールのスコープを、ある状態、状態遷移、および理由に制限する方法を扱う。
<REQUIRED />
このフィールドは、空でないことが要求される。すべてのフィールドタイプを、REQUIREDとしてマークすることができる。
<READONLY />
このフィールドを変更することはできない。
<EMPTY />
このフィールド値は、コミット時にクリアされ、ユーザは、値を入力することを許可されない。主に状態遷移中に使用される。
<FROZEN />
フィールドがコミットの後に値を得たならば、もはや変更することはできない。しかし、<EMPTY/>制約を使用してクリアし、その後にもう一度書き込むことはできる。主に状態遷移中に使用される。
<CANNOTLOSEVALUE/>
フィールドが値を得たならば、クリアすることも空にすることもできない。
<NOTSAMEAS field=”MyCorp.Foo”/>
このフィールド値は、フィールド「Foo」の値と同一の値を有することができない。例えば、2つのフィールドを同時に空にすることができず、あるいは、「code reviewer」フィールド値を「assigned to」フィールド値と同一にすることができない。これは、類似するタイプのフィールドに使用されなければならない。これは、PlainTextフィールドまたはHTMLフィールドについてはサポートされない。
<VALIDUSER />
このフィールド値は、TFS Everyoneのメンバである有効なメンバでなければならない。
注:<REQUIRED/>ルールが指定されていない場合に、このフィールドは、空の値を受け入れる。Stringフィールドタイプに使用される。
注:このバージョンについて、ワークアイテムフィールドは、異なるドメインのユーザアイデンティティを区別しない。したがって、「redmond\jsmith」および「tokyo\jsmith」は、<VALIDUSER />ルールを用いてフィールドに入力された時に、同一ユーザとして扱われる。しかしドメインは、Team Foundationの他の場所のユーザアイデンティティは区別する。
<VALIDDATE mustbe=”after now”/>
日付フィールドを検証する。mustbe値は、「after now」または「not after now」のいずれかにすることができる。「after now」は、現在時刻の後である。「not after now」は、フィールド値が現在時刻またはそれ以前であることを要求する。DateTimeフィールドタイプに使用される。
<ALLOWEXISTINGVALUE/>
フィールドが既に値を有するが、許容される値のリスト(下を参照されたい)で表された値でない場合に、そのままであることを可能にする。代替のデフォルト挙動は、編集時にユーザがそのフィールドに対する最新の許容される値に従うことを強制することである。この要素は、「for」属性または「not」属性を受け入れることができない。
この要素は、同一ブロック内の要素に対する変更効果だけを有する。詳細には、この挙動は、ルールの異なるスコープ指定について次の通りである。
フィールド定義
ルールがフィールド定義にスコープを指定されている場合には、いつでもそのフィールドに適用される。したがって、既存の値がコミットされたならば、ワークアイテムがどの状態であり、どの条件ルールを適用できるかに無関係に、将来のリビジョンでその値が許容される。
条件ルール
このルールが、フィールド条件の下でスコープを指定されている場合、親フィールド条件が満たされるときに、既存の値をコミットすることだけが許容される。
状態
ルールが状態の下でスコープを指定されている場合、ワークアイテムが親状態であるときまたはワークアイテムがその状態に遷移するときに、既存の値が許容される。これは、それらの遷移にスコープを指定されているすべての理由に適用される。
遷移
ルールが遷移の下でスコープを指定されている場合、ワークアイテムが親遷移を行うときに、既存の値が許容される。これは、遷移にスコープを指定されているすべての理由に適用される。
理由
ルールが理由の下でスコープを指定されている場合、ワークアイテムが指定された理由で親遷移を行うときに、既存の値が許容される。
<MATCH pattern=”<pattern>”/>
ストリングだけについて基本パターンマッチングを実施する。<pattern>は、マッチパターンに置換されなければならない。有効な値は、「A」、「N」、「X」であり、他のすべての値は、リテラルと解釈される。「A」は、アルファベット文字を表す。「N」は、数字文字を表す。「X」は、アルファベットまたは数字のいずれかを表す。これは、ストリングタイプフィールドだけについてサポートされる。
例:
リリース番号
ANN.NN.NN 妥当 R01.03.04またはV05.08.99
非妥当 1.3.4またはV5.8.99またはv1.3
ある柔軟なid
XXX−XXX 妥当 001−abcまたはa00−b02
非妥当 1−abcまたは001.abc
優先順位
PN 妥当 P1またはP5またはP9
非妥当 1またはP10
マッチタグは、大文字小文字の区別がないので、「PN」はP1およびp1にマッチする。マッチタグは、空白値をサポートする。
複数の<MATCH>要素を指定することができる。1つの要素だけが成功した場合に、そのフィールドは正しい値を有する。
フィールドリスト
フィールドリストは、フィールドのピックリストを管理するのに使用される。ピックリストには、許容される値、提案される値、および禁止される値という3タイプがある。フィールドリストは、Stringフィールドタイプ、Integerフィールドタイプ、およびDoubleフィールドタイプに使用することができる。
フィールドリストアイテム
フィールドリストは、個々のアイテムから構成される。リストには、少なくとも1つのアイテムが含まれなければならない。<LISTITEM value=””>要素は、リスト内のアイテムを指定するのに使用される。指定される値は、単なるストリングとすることができ、あるいは、ユーザまたはグループを指定することができる。この値は、空にすることができない。
Figure 0005238138
さらに、1つまたは複数の<GLOBALLIST>要素を含めることによって、リストアイテムを共有することができる。
リストアイテムは、TFSのロケールに基づくアルファベット順でソートされる。
グローバルリスト
ワークアイテムタイプを定義するときに、いくつかのフィールドが同一のセットの値を共有していることに気がつく。しばしば、この共有は、複数のワークアイテムタイプに渡り、複数のチームプロジェクトに渡る場合もある。これらのリストの一部が、頻繁に変更される場合がある(例えば、ナイトリビルドのビルド番号)。
管理者が多数の場所で頻繁にこれらのリストを更新することを要求することは、理想的ではない。グローバルリストは、この問題に対処する。
グローバルリストは、グローバルに(TFS全体で)保管され、使用される<LISTITEM>の単なるセットである。これらのリストを、「Operating System」、「Found in Build」、「Fixed in Build」などのフィールドに使用することができる。
グローバルリストは、名前を有する。これらの名前は、TFS全体にまたがって一意でなければならない。グローバルリストを、ワークアイテムタイプ定義の一部として定義し、管理するか、OMを介してプログラマチックに維持することができる。グローバルリスト名に「\」文字を含めることはできない。
ユーザは、手作業およびプログラマチックの両方で次を行うことができる。
・ リストを作成する
・ リスト値を追加する
・ リスト値を除去する
・ TFS内のグローバルリストのリストを得る
・ リストの内容を得る
グローバルリストを作成し、管理する方法に関する情報については、Authoring Work Item Type Labを参照されたい。
外部データソースおよびグローバルリスト
グローバルリストは、あるサードパーティシステムからリストを導出しなければならない場合にも使用される。例えば、ある会社が、別々のカスタマデータベースを維持していると仮定する。カスタマによって発見されたバグが入力された時に、彼らは、カスタマの名前を有する必要がある「Found By Customer」フィールドを有する。このバージョンについて、カスタマ名リストを入手するためにランタイムにカスタマデータベースのダイナミッククエリを可能にするプログラマチックアクセスが、サポートされていない。ダイナミック機能の近似は、OMに対するコードを記述して、カスタマリストがカスタマデータベース内で変更された時に必ずグローバルリストを更新することである。
プロジェクト管理者およびTFS管理者は、グローバルリストの内容を変更することができる。
グローバルリストをインポートすると、まだ存在しない場合にはグローバルリストが作成される。更新は、単に、リストが存在する場合に値のリストを更新する。WITのフィールドのいずれかがグローバルリストを参照する場合に、そのグローバルリストは、その内容と共に、エクスポートされるXMLの一部になる。
フィールドリストタイプ
<ALLOWEDVALUES>
ドロップダウンとして提示される値の列挙されたリスト。ユーザは、これらの値のうちの1つを選択しなければならない。
<SUGGESTEDVALUES>
ドロップダウンとして提示される値の列挙されたリスト。ユーザは、これらの値のうちのどの1つでも選択することができる。ユーザは、提案の1つでない彼ら自身の値を入力することもできる。
<PROHIBITEDVALUES>
ユーザは、フィールドに禁止される値が含まれる場合に、ワークアイテムを保存することができない。禁止される値は、通常、値が前に許容されたがもはや有効でない時に使用される。
Figure 0005238138
リストアイテム展開
リストタイプ要素<ALLOWEDVALUES>、<SUGGESTEDVALUES>、<PROHIBITEDVALUES>は、2つのオプション属性expanditemsおよびfilteritemsを有する。
expanditems=true/false、デフォルトはtrue
expanditemsにtrueがセットされている時に、グループまたはグローバルリストを表すリストアイテムは、再帰的に展開される。すなわち、グループはそのサブグループを展開され、サブグループのサブグループが展開される。展開の後に、グループを表していたリストアイテムに、リストアイテム値としてグループとユーザの両方が含まれる。expanditemsにfalseがセットされている場合には、グループまたはグローバルリストの展開は実行されない。
filteritems=”excludegroups”
この属性/値の対が現れた時に、すべてのリストアイテムが評価され、すべてのグループが除去される。これは、グループなしのユーザのリストだけが欲しい時に使用される。
注:他のフィルタが将来に提供される可能性がある。

[Project]\Business Analystsは、ビジネスアナリストユーザ、jsmith、bbob、およびdmillerのチームプロジェクトグループである。
Redmond\MyTeamは、3つのサブグループ、Development、Test、およびPMを有するグループである。各サブグループは、それぞれ、1つのユーザ「devuser」、「testuser」、および「pmuser」を有する。Redmond\MyTeamは、1つのユーザ「juser」も有する。
Redmond\MyReportsは、ユーザ「userone」、「usertwo」、および「userthree」と、「userfour」および「userfive」を有する1つのサブグループMyRemotesとを有するグループである。
BoolValuesは、2つのエントリ「true」および「false」を有するグローバルリストである。
例1
展開がオンでグループをフィルタアウトされた状態における、ストリング値、グローバルリスト、およびグループ。
Figure 0005238138
このフィールドのピックリストは、次の値を示す。
string、true、false、jsmith、bbob、dmiller
例2
グループフィルタリングは実行されない。
Figure 0005238138
このフィールドのピックリストは、次の値を示す。
string、true、false、juser、juser2、devuser、testuser、pmuser、Development、Test、PM
例3
リストアイテム展開は実行されない。
Figure 0005238138
このフィールドのピックリストは、次の値を示す。
string、MyTeam、MyReports
注:グローバルリスト名および内容は、表示されない。
例4
グループを除外し、展開なし。
Figure 0005238138
このフィールドのピックリストは、次の値を示す。
string
注:MyTeamは、除外され、展開されないグループであり、BoolValuesは、グローバルリストであり、したがって、展開も表示もされない。
組合せでのリストタイプの使用
単一のフィールドについて複数のタイプのリストを指定することが可能である。このセクションでは、アイテムの結果のリストを判定する方法を定義する。
下の詳細について、ALLOWEDVALUESリストのすべての値が、セットAとして識別される。PROHIBITEDVALUESリストのすべての値が、セットPとして識別される。SUGGESTEDVALUESのすべての値が、セットSとして識別される。
正しい値の判定
あるフィールドについて許容される正しい値は、{セットA}から{セットP}を引くことによって得られる。{セットA}がエントリを有しない場合には、{セットA}は、すべての可能な値と考えられる(すなわち、許容される値が定義されておらず、したがって、{セットP}で具体的に識別される値以外のすべてが許容される)。{セットS}は、フィールドの正しい値の判定では役割を演じない。
ピックリスト値判定
{セットS}AND{セットA}がエントリを有しない場合
結果:空のリスト
{セットS}がエントリを有し、{セットA}がエントリを有しない場合
結果:{セットS}から{セットP}を引くことによって得られる値
{セットS}AND{セットA}がエントリを有する場合
結果:
a.{セットA}と{セットS}の交わりをとって{中間セットI}を得、
b.{中間セットI}から{セットP}を引く
ことによって得られる値のリスト
{セットS}がエントリを有しないが、{セットA}がエントリを有する場合
結果:{セットA}から{セットP}を引くことによって得られる値のリスト
複数リストの指定
所与の時点に複数の<ALLOWEDVALUE>(例えば、WIT <ALLOWEDVALUE>セットと状態固有)を指定した場合に、これらの複数のセットの交わりが、最終的な{セットA}として採用される。
複数の<PROHIBITEDVALUES>または<SUGGESTEDVALUES>を指定した場合には、これらのそれぞれの和集合が、それぞれ最終的な{セットS}または{セットP}として採用される。
フィールドデフォルト
フィールドデフォルトは、フィールド値を自動的に書き込む方法を扱うルールである。3タイプの要素、<DEFAULT>、<COPY>、および<SERVERDEFAULT>がある。
<DEFAULT>
ユーザが新しいワークアイテムを作成するかワークアイテムを編集する時に、<DEFAULT>要素は、フィールドが空の場合にフィールド値を書き込む。フィールドが既に値を有する場合には、デフォルトルールは無視される。
<COPY>
ユーザが新しいワークアイテムを作成するかワークアイテムを編集する時に、<COPY>
<SERVERDEFAULT>
編集の始めに値を書き込む<DEFAULT>および<COPY>と異なって、<SERVERDEFAULT>ルールは、ワークアイテムがデータベースにコミットされる時に値を書き込む。これは、保存時にバックグラウンドで行われ、ユーザはその値をオーバーライドすることができない。フィールドは、フォーム上で読み取り専用のように見える。このルールは、セキュア監査証跡(audit trail)をサポートするために、「Last Changed By」および「Last Changed On」などのフィールドに使用される。
これらのタグのそれぞれが、値のソースを識別するfrom=”<fromtype>”の形になる。<fromtype>に応じて、他の属性を続けることができる。
有効なfromtypeは、次の通りである。
・ value
指定されたストリング定数からの値をとる。value=”xxx”属性を必要とする。<COPY>ルールおよび<DEFAULT>ルールだけに使用される。
・ field
指定されたフィールドからの値をとる。コピーされる値は、最後に成功裡にコミットされたリビジョンからのターゲットフィールドの値である。field=”xxx”属性を必要とする。デフォルトで、指定されたfromフィールドが空の場合に、何も行わない。<COPY>ルールおよび<DEFAULT>ルールだけに使用される。
・ clock
値として現在の日時を使用する。追加属性は不要である。DateTimeフィールドに使用される。<COPY>ルールおよび<DEFAULT>ルールについて、この値は、ローカルマシンクロック時刻から取られる。<SERVERDEFAULT>について、この値は、コミット時のサーバクロックから与えられる。
・ currentuser
値として現在のユーザの短いユーザ名を使用する。追加属性は不要である。ストリングフィールドに使用される。
デフォルト優先順位の指定の例を示す。
Figure 0005238138
Statusフィールドをクリアする例を示す。
Figure 0005238138
ワークアイテムを最後に変更した人のユーザ名を保存する例を示す。
Figure 0005238138
現在日付をデフォルトとするが、ユーザがそれを変更することを許可する例を示す。
Figure 0005238138
注:「Won’t Fix」などのアポストロフィを含む値について、XMLで二重引用符を使用する必要がある。例を示す。
Figure 0005238138
フィールド条件
依存ピックリストに使用され、詳細なセキュリティ挙動またはカスタマ挙動を提供するのに使用される追加の句がある。
<WHEN field=”xxx”value=”yyy”>
この要素内のすべてが、フィールドxxxが値yyyを有する間に適用可能である。
注意:value属性は、大文字小文字の区別がないので、xxxが「ABC」を保持し、value=”abc”である場合に、これらはマッチする。
依存ピックリストの例を示す。
Figure 0005238138
バグがカスタマによって報告され、カスタマ深刻度が入力されなければならない時の必要性の変化の例を示す。そうでない場合には、カスタマ深刻度は不要である。
Figure 0005238138
<WHENNOT>
この要素内のすべてが、フィールドxxxが値を有するがその値がyyyでない間に適用可能である。
Figure 0005238138
<WHENCHANGED field=”xxx”>
この要素内のすべてが、フィールドxxxがユーザによって変更済みである時に適用可能である。
Figure 0005238138
<WHEN*>ルール、<DEFAULT>ルール、および<COPY>ルールの期待される挙動
このセクションでは、<DEFAULT>ルール、<COPY>ルール、および<WHEN*>ルールを使用する時に期待される挙動および相互作用の概要を示す。
1)ユーザが、新しいワークアイテムを作成するか既存ワークアイテムを編集することをジェスチャで表す。
2)フィールドデフォルトを書き込む。すべてのフィールドについて、<WHEN*>ルールの外にあるすべての<DEFAULT>ルールを使用する。
3)フィールド値をコピーする。すべてのフィールドについて、<WHEN*>ルールの外にあるすべての<COPY>ルールを使用する。
4)最初にマッチする<WHEN>ルールを有するすべてのフィールドについて、まず内側の<DEFAULT>ルール、次に内側の<COPY>ルールを行う。
5)最初にマッチする<WHENNOT>ルールを有するすべてのフィールドについて、まず内側の<DEFAULT>ルール、次に内側の<COPY>ルールを行う。
必ず、<WHENNOT>ルールの前に<WHEN>ルールを処理する。
6)#1以降に値を変更され、<WHENCHANGED>ルールを有するすべてのフィールドについて、まず内側の<DEFAULT>ルール、次に内側の<COPY>ルールを行う。
7)ユーザに編集を開始させる。
8)ユーザが、フィールド値を変更し、そのフィールドのほかの部分に移動する。
9)新しい値にマッチする、そのフィールドのすべての<WHEN>ルールを発火させる。
10)新しい値にマッチする、そのフィールドのすべての<WHENNOT>ルールを発火させる。
11)新しい値にマッチする、そのフィールドのすべての<WHENCHANGED>ルールを発火させる。
12)編集能力をユーザに返す。
13)ユーザが、データベースに変更を保存することをジェスチャで表す。
14)すべてのフィールドについて、<WHEN>ルールまたは<WHENNOT>ルールの下で直接にまたは間接にのいずれかでそのフィールドについて定義された<SERVERDEFAULT>動作を実行する。
条件フィールドルール属性
時々、フィールドルールのスコープを、特定のグループまたはユーザに制限したくなる。属性「for」および「not」を追加して、これをサポートすることができる。これらは、タグを単一のBISグループに固有または単一のBISグループに含まれない全員に固有にするために、複数のタグで使用される。拒絶は、許可に優先する。
for属性およびnot属性は、オプションであり、空の値を有してはならない。
注:このバージョンでは、フィールドルールのスコープを特定のユーザに制限することはサポートされない。
少数の例を示す。
Figure 0005238138
注:複数のグループが望まれる場合には、使用したいグループのセットを含むスーパーTFSグループを作成する必要がある。
ユーザおよびグループの参照
フィールドリストアイテム、条件フィールドルール属性、および遷移セキュリティなどの複数のルールが、ユーザおよびグループを参照する。WITD言語は、ユーザおよびグループを参照する次のトークンをサポートする。
[Global]
このトークンは、サーバスコープ付きのTFSグループを参照するのに使用される。
Figure 0005238138
[Project]
このトークンは、チームプロジェクトスコープ付きのTFSグループを参照するのに使用される。
Figure 0005238138
ドメイン
ドメイン修飾子は、ドメインユーザまたはグループを参照するのに使用される。いくつかのルールが、グループだけをサポートし、ドメインユーザの参照をサポートしないことに留意されたい。
Figure 0005238138
すべてのユーザおよびグループが、上のトークンのうちの1つによって修飾されなければならない。例えば、次のXMLは、指定されたグループが有効なトークンによって修飾されていないので、無効である。
Figure 0005238138
(ワークフロー)
概要
WITDのワークフローセクションでは、有効な状態、正しい遷移、および遷移の正しい理由を記述する。理由は、なぜユーザがある状態から別の状態に変更しようとしているかを識別する。
ワークフローセクションは、次のように見える。
Figure 0005238138
ナッシング(すなわち、「」)から名前付き状態への1つの遷移だけを定義しなければならない。これは、新しいワークアイテムの初期状態を識別する。すべての遷移が、<DEFAULTREASON>要素を用いて指定される1つのデフォルト理由だけを定義しなければならない。
ワークアイテムの最小のワークフローには、1つの状態、1つの推移、および1つのデフォルト理由が含まれなければならない。下は、ユーザが定義できる最小のワークフローである。
Figure 0005238138
注:状態名および理由は、大文字小文字の区別がない。
遷移セキュリティ
2つの状態の間のすべての正しい遷移を指定しなければならない。遷移が指定されていない場合に、デフォルトは、その遷移の実行を許可しないことである。
さらに、2つの属性「for」および「not」をオプションとしてワークフローの遷移要素内で使用して、誰が遷移の実行を許可されるかを洗練することができる。拒絶は、許可に優先する。これらの属性の両方が指定されていない場合には、誰もがこの遷移を実行することを許可される(具体的には、ワークアイテムを変更できるすべての人)。
推移の完了を、チームに参加したばかりの新しいテスタを除くすべてのプロジェクトテスタに制限するルールの例を示す。個々のユーザアイデンティティを指定することも可能である。
Figure 0005238138
注:複数のグループは、親グループを作成し、その親グループを使用することによってのみサポートされる。
状態、遷移、または理由によるフィールドルールのスコープ指定
これまでに我々が定義したフィールドルールは、フィールド名、そのタイプ、ヘルプテキスト、およびワークアイテムタイプ全体の挙動を識別する。すなわち、bugの状態に無関係なフィールドの挙動である。例えば、1つのフィールドが、何であっても必ず必要である。
フィールドルールのスコープは、ある状態、遷移、または理由にも制限することができる。所与のフィールドに適用される完全なセットのルールは、4つのサブセットすなわち、ワークアイテムタイプ固有、状態固有、遷移固有、および理由固有からの加法的なセットである。
ワークアイテムタイプ全体のルールは、ワークアイテムがその状態モデルのどこにあるかに無関係に適用される。例えば、<REQUIRED/>ルールは、次のチェックを行う。
"MyField Value" != NULL
状態固有ルールのスコープは、ワークアイテムインスタンスがある状態であるときに、そのワークアイテムインスタンスに制限される。したがって、チェックは次のようになる。
State field value == "MyState" && "MyField Value" != NULL
遷移固有ルールのスコープは、ある遷移を受けつつあるワークアイテムに制限される。このルールに関するチェックは、より複雑である。
State field value == "ToState" &&
"Previous State Before Edit/New" == "FromState"
&& "MyField Value" != NULL
理由固有ルールのスコープは、特定の遷移に対する特定の理由に制限される。これに関するチェックは、最も複雑である。
Reason field = "MyReason" &&
State field value == "ToState" &&
"Previous State Before Edit/New" == "FromState"
&& "MyField Value" != NULL
スコープ付きフィールドルールは、<STATE>要素、<TRANSITION>要素、および<REASON>要素の中で<FIELDS>要素および<FIELD>要素を使用することによって行われる。
注:ワークフロー内のフィールドをリストするときには、フィールド参照名だけを指定しなければならない。
下の例では、次のルールを定義している:bugがアクティブ状態であるときに、カスタマ深刻度フィールドの変更を許可してはならない。
Figure 0005238138
状態遷移アクション(状態遷移の自動化)
カスタマおよびパートナは、チームシステム内のどこかで発生したイベントまたはチームシステム自体の外(例えば、コールトラッキングツール(call tracking tool))で発生したイベントに基づいて、ワークアイテムを状態から状態に自動的に遷移させることを望む場合がある。他のシステム(我々自身のシステムを含む)によるワークアイテムの自動遷移をサポートするために、我々は、ワークアイテムタイプモデルおよびOMを拡張しつつある。例によってこれらの拡張に目を向けよう。
あるツールが、ユーザが変化をチェックした後に、あるワークアイテムを「resolved」に自動的に遷移させることを望む。しかし、インテグレーションプロバイダとして、ユーザは、WIT作成者が「resolved」として宣言した状態がどれであるかを知らない。この状態は、Resolved、Closed、Completed、Ready For Test、Include In Buildなどである可能性がある。1つのオプションは、すべてのWIT作成者に、明示的に「Resolved」と命名された状態を含めることを要求することである。しかし、これは、あまりに拘束的であり、状態のローカライゼーションを許容しないのでI18Nの展望から非常に悪い。そうではなく、インテグレータは、ワークアイテムに関する自動遷移を誘導するアクション(例えば、「checkIn」、「complete」)を彼らのシステムで宣言する。次に、WIT作成者が、適当な推移に対してこのアクションを宣言する。
適切な状態遷移の識別
例えば、Team Foundationバージョンコントロールシステムは、チェックイン時のワークアイテムの自動遷移をサポートする必要がある。「microsoft.vsts.actions.checkIn」アクションが定義されている。WIT作成者が、開発者が変更を行っている時のための「Working」という状態と、欠陥が開発者によってナイトリビルドの準備ができたと宣言された時を識別する「Ready To Build」というもう1つの状態とを有する「Defect」ワークアイテムを定義すると仮定する。作成者は、次を宣言することによって、チェックイン動作中にワークアイテムを状態「Working」から「Ready To Build」に自動的に遷移させることができる。
Figure 0005238138
遷移の自動化
インテグレータにとって、アクションの定義は第1のステップにすぎない。ツールは、そのアクションを実行している時に、遷移を行わなければならない。例えば、Team Foundationバージョンコントロールシステムが、チェックイン動作を実行しており、自動遷移を実行することを望むと仮定する。バージョンコントロールシステムは、OM呼出しを介してワークアイテムトラッキングシステムに問い合わせて、関連するワークアイテムを遷移させるべき正しい「To」状態を見つける。
nextState =
workiteminstance.GetNextState("microsoft.vsts.actions.checkin");
ワークアイテムインスタンスの現在の状態が、指定されたアクションのアクションエントリを有する場合に、そのインスタンスは「To」状態を返す。そうでない場合には、戻り値はNullである。
遷移アクションは、自動遷移を実行することを望むパートナ/インテグレータのためのヘルパ機能である。インテグレーションが次のステージに達したならば、そこから彼らが行うことは、彼ら次第である。例えば、どの遷移アクションが特定の状態遷移を発生させたかに関する保持される記録はなく、遷移の通常のReasonだけが記録される。この種類のトラッキングが望まれる場合には、WIT作成者が、特定の値を正しい理由として識別し、自動化が、この値を遷移中にReasonフィールドにセットすることが推奨される。
遷移アクションの詳細
アクションは、オプションである。インテグレーションは、Null戻り値を優雅に処理しなければならない。すなわち、a)エラーにせず、b)アクション「xyz」を探していたが見つからなかったので自動遷移しなかったことのトレース/ログを残し、このアクションを追加させるためにWIT作成者に連絡する。
各WITについて、アクションは、「From State/Action」対ごとに一意でなければならない。すなわち、WIT作成者は、同一のアクションについて複数の「To」状態を指定することができない。
しかし、複数の自動遷移インテグレーションを可能にするために、同一の遷移での複数のアクションがサポートされている。例を示す。
Figure 0005238138
アクション名は、ローカライズ可能ではない。
アクション名は、フィールド参照名と同一の基準名前空間規約に従わなければならない。これによって、ベンダ/カスタマの間でのアクション名衝突が防がれる。しかし、これは、ツールによって実施されない。
Microsoft VSTSは、「Microsoft.VSTS.Actions.<your action>」を使用する。
自動遷移エラーチェックおよびWIT作成者の考慮
インテグレータが試みる可能性がある2タイプの自動遷移がある。第1は、あるユーザジェスチャに起因して発生する自動遷移であり、第2は、不在自動化(例えば、ナイトリビルド)として発生する自動遷移である。第1の場合に、ユーザが、起こる可能性があるすべてのルール関連問題を扱い、インテグレーションの知らない新しく必要なフィールドをWIT作成者が追加できるという事実をサポートしなければならないと仮定することができる。これを行うために、自動遷移を行った後に、ルール違反についてWITをチェックする必要があり、ルール違反が見つかった場合には、ユーザが解決するためのフォームを表示する必要がある。
第2の場合には、これらの問題を解決するユーザがいないので、これらの問題のいずれであっても扱うことができない。この場合には、インテグレーションは、優雅にエラーになり、自動遷移が試みられたことおよびそれがエラーになった理由の表示をエラーログに残さなければならない。
もちろん、理想的なケースは、ユーザ介入なしで自動遷移が行われる場合である。WIT作成者は、これをサポートするために少数のことを行うことができる。第1に、WIT作者は、必ずデフォルト理由を指定することができる。この形で、インテグレータおよびエンドユーザの両方が、遷移の理由を指定する必要がなくなる。第2は、遷移のすべての必要なフィールドのデフォルト値があることを確認することである。この形で、すべての適当な情報が、自動的に書き込まれる。
(ルール評価順序)
一般に、ルールは、ルールのスコープを反映した順序で実行される。例えば、あるルールのスコープが、特に現在の状態に制限されている場合に、そのルールは、グローバルなスコープを有するルールの前に呼び出される。下の例では、ワークアイテムタイプが、フィールドStatusに対するグローバル<COPY>ルールと、状態「Active」にスコープを指定された<COPY>ルールを有する。この場合に、ワークアイテムが「Active」状態に入る時に、値「Active」が、まずフィールドStatusにコピーされる。次に、これが、フィールドStatusへの空白ストリングのグローバルコピーによって上書きされる。
Figure 0005238138
具体的に言うと、ワークフロースコープに基づく実行の順序は、次の通りである。
1.理由があるSTATE TRANSITION
2.STATE TRANSITION
3.STATE
4.STATEスコープなし
上に示した各スコープの中で、ルールは、さらに、条件内のスコープによって順序付けられる。この順序は、次の通りである。
1.WHEN句
2.WHENNOT句
3.WHEN/WHENNOT句なし
最後に、上の条件スコープのそれぞれの中で、個々のルールが次のように順序付けられる。
1.<DEFAULT>ルール
2.<COPY>ルール
3.<SERVERDEFAULT>ルールを除く他のすべてのルール。<SERVERDEFAULT>ルールは、ワークアイテムが保存される時に限って評価される。
ルールは、新しいワークアイテムが作成される時、既存ワークアイテムが開かれる時、およびユーザがルールをトリガする可能性があるフィールドを変更する時に評価される。ユーザがワークアイテムの保存を試みる時に、すべてのルールがルール衝突を見つけるために評価される。衝突がある場合には、保存が防がれる。
(特別なルール制約)
このセクションでは、プロビジョニングされ使用される時に問題を生じる可能性がある特別なケースのルールおよびルール組合せを扱う。これらは、3つのカテゴリすなわち、意味なし、問題あり、不正に分類される。最初の2つを下で述べる。不正なルール組合せとは、システムに関する深刻な問題を引き起こすルール組合せである。これらをプロビジョングすることは、システムによって防がれる。
カスタマが様々なルールに関する面倒を起こす可能性がある形のリスト全体を列挙することは不可能であるが、一般的なシナリオをリストする。WITを作成する時には、プロダクション環境で適用する前に、分離されたシステムでそのWITをしっかりテストすることが、常に最善である。
ナンセンスなルール
ナンセンスなルールとは、明らかに誤っている、または意味がないルールである。このタイプのルールは、システムをクラッシュさせてはならず、予測不能な形で振る舞ってはならない。
1.同一のフィールドでの<READONLY/>ルールと<REQUIRED/>ルールの両方の使用
2.<REQUIRED/>ルールと<EMPTY/>ルールの両方の使用
3.非日付フィールドへの「クロック」からのデフォルトまたはコピー
4.非ストリングフィールドへの「currentuser」からのデフォルトまたはコピー
5.非ストリングフィールドでの<VALIDUSER>の使用
6.非日付フィールドでの<VALIDDATE>の使用
7.異なるタイプのフィールドでの<NOTSAMEAS>要素の使用
8.<LISTITEMS>での整数フィールドに対するストリング値の指定
9.タイプintegerのフィールドに対する<GROUPITEM>アイテムまたは<USERLIST>アイテムの指定
問題のあるルール
問題のあるルールとは、意味があるように見えるが、悪いか予測不能なシステム挙動をもたらすルールである。
このカテゴリに含まれるルールに、次が含まれる。
<WHENCHANGED>ルールを<DEFAULT>句および<COPY>句と共に使用する複数のフィールドでの隠れた無限ループ。
無限ループを引き起こす、同一フィールドに関するある状態での<ALLOWEDVALUES>の使用および別の状態での<SUGGESTEDVALUES>の使用
(フォーム)
UI要素の内容および配置は、WITDの<FORM>セクションによって制御される。各ワークアイテムタイプは、1つのフォームだけを有しなければならない。このフォーム全体が、すべてのタブ、フィールド、およびグループを含めて記述される。
目的は、1つのフォーム定義から、Visual Studioで、ホスティングされるウィンドウズ(登録商標)フォームコントロールで、およびWSSウェブパーツで、ワークアイテムフォームを正しくレイアウトできることである。1回設計し、どこでも使用することが、その哲学である。
<Layout>、<Group>、および<Column>
トップレベルに、WITDの<FORM>セクションへの3つの要素がある。
<LAYOUT>
この親要素に、ワークアイテムタイプフォームのすべてのレイアウト情報が含まれる。子要素は、このフォーム上にグループ、カラム、およびコントロールを配置する。
<GROUP>
子要素は、フォーム上の同一グループに含まれる。グループは、ボーダーおよびオプションのラベルによって画定される。隣接するグループは、垂直にスタックされる。
<COLUMN>
すべての子要素を同一カラム内に保ち、フォームを水平に分割する。カラムは、<GROUP>の中に現れなければならない。<COLUMN>要素内の<GROUP>要素は、ネストされたグループ化を作成するのに使用することができる。デフォルトで、カラムは<GROUP>を均等に分割する。オプションのPercentWidth属性を使用して、カラム幅を変更することができる。
下のXMLでは、2行のグループと各グループ内の2つのカラムを有するフォームが定義されている。
Figure 0005238138
コントロール
コントロールは、フォームにフィールドまたは他の情報をレンダリングするのに使用される。各<CONTROL>要素が、Type属性およびオプションのラベルを有する。
Type属性は、下で述べる複数のコントロールタイプを指定するのに使用される。
・ FieldControl
・ TFStructureControl
・ WorkItemLogControl
・ LinksControl
・ AttachmentsControl
Label属性は、コントロールのとなりに表示されるテキストを指定する。関連するLabelPosition属性は、ラベルがコントロールに対してどこに表示されるかを指定する。
FieldControl
このコントロールは、フォームにフィールドを表示するのに使用される。フィールドコントロールは、参照名によってフィールドを参照しなければならない。
Figure 0005238138
TFStructureControl
このコントロールは、Area PathフィールドおよびIteration Pathフィールドをツリーで表示する。ツリーは、展開でき縮小できる階層ノードを表示する。
Figure 0005238138
WorkItemLogControl
ワークアイテムのヒストリフィールドおよび会話フィールドをレンダリングする。ワークアイテムに対するヒストリカルリビジョンに関する詳細を、このコントロールを使用して展開し、縮小することができる。
Figure 0005238138
LinksControl
このワークアイテムから他のワークアイテムへのリンクを表示する。ユーザは、このコントロールを使用して、リンクを開き、編集し、追加し、除去することができる。
Figure 0005238138
AttachmentsControl
ワークアイテムに関するファイルアタッチメントを表示する。ユーザは、このコントロールを使用して、ファイルアタッチメントを開き、追加し、除去することができる。
Figure 0005238138
すべての要素
次のテーブルに、<FORM>セクションの許容可能な要素および属性のすべての詳細を示す。上で述べた要素ならびに他の要素が含まれる。
Figure 0005238138
Figure 0005238138
Figure 0005238138
Figure 0005238138
Figure 0005238138
Figure 0005238138
Figure 0005238138
サンプル
WITDのサンプルフォームを示す。
Figure 0005238138
Figure 0005238138
Figure 0005238138
(WITDローカライゼーションおよびグローバライゼーション)
一般に、エンドユーザから可視のWITDのすべての要素をローカライズすることができ、その結果、これらが、ユーザのネイティブ言語で表示されるようになる。これには、様々な要素の状態の名前、理由の名前、遷移の名前、「label」属性の名前、および「name」属性の名前と、エンドユーザに示されることを意図されたワークアイテムタイプ記述およびフィールドヘルプテキストなどの情報が含まれ、これらのすべてがユニコード文字をサポートする。これに関する唯一の例外は、フィールドのフレンドリ名(friendly name)であり、これは、フィールド名のセクションで述べたように、ユニコード文字の小さいサブセットに制限されている。
XML定義自体は、ローカライズ可能でない。したがって、<WORKITEMTYPEまたは<FIELDなどのタグは、英語でなければならない。さらに、<VALIDDATE mustbe=“after now”/>の「after now」値または<Control Type=”AttachmentsControl”/>の「AttachmentsControl」値などの固定された属性値は、まったく同一の言葉で英語で使用されなければならない。最後に、フィールド参照名は、英語文字だけをサポートし(フィールド参照名を参照されたい)、これらの名前は、プログラム的使用を意図され、一般に、UIに表示されない。
WITDのローカライズ可能な要素の例を、下に示す。
<WORKITEMTYPE name=”bug”>
name属性の値をローカライズすることができる。
<DESCRIPTION> Work item descriptive text here</DESCRIPTION>
ワークアイテムタイプ記述をローカライズすることができる。
<FIELD refname=”System.Title” name=”Title” type=”String”>
フィールド参照名およびタイプは、ローカライズ可能ではない。フィールド「name」属性の値は、ローカライズすることができる。しかし、フィールドについてユーザが選択した名前が、所与のTFSのすべてのクライアントで使用されることを銘記されたい。また、ユーザが、ワークアイテムタイプクエリを作成する時にフィールド名を見ることを想起されたい。
<HELPTEXT>This is a work item for bugs</HELPTEXT>
フィールドのヘルプテキストは、ローカライズすることができる。これは、ワークアイテムタイプごとであり、ワークアイテムタイプはチームプロジェクトごとである。
<LISTITEM value=”My Value”>
どのストリング値でもローカライズすることができる。
<STATE value=”Active”/>
<STATE value=”Complete”/>
<TRANSITION from=”Active”to=”Complete”>
<REASON value=”No Plans to Fix”/>
状態名および理由名をローカライズすることができる。
<CONTROL FieldName=”Found In Build” Label=”Found In” LabelPosition=”Top”>
フォームを定義する時に、フォーム上のグループ、タブ、およびフィールドにラベルを付けることができる。これらのすべてを、ローカライズすることができる。
したがって、あるプロジェクトで、フォーム上でフランス語の名前を使用されるbug_french.XMLを定義し、別のプロジェクトで、フィールドの同一のセットを使用し、したがって、クロスプロジェクトクエリをサポートするbug_english.XMLを定義することが可能である。しかし、クエリを作成する時に、ユーザが、フレンドリフィールド名だけにアクセスし、これは1つの言語にすることしかできないことに留意されたい。
(V1カットリスト)
このセクションの項目は、V1の仕様から除去されたが、後のリリースについて検討される可能性がある。
多値フィールド
ユーザがアイテムを複数選択できるリストフィールド。
状態アイコン/グリフ
UIに表示される各状態に使用されるアイコンを指定する。
グローバルリスト
Delete − 深い洞察力がある管理者のためにこれを文書化する必要がある可能性がある
Sort
Add to front
Add to back
Add after
フィールドタイプ
・ Boolean
我々は、フォームにチェックボックスとして表示されるBooleanフィールドタイプをサポートすることができる。しかし、これは現在、ProductStudioでよく使われてはおらず、ワークアラウンドがあり(0および1の値を有する整数フィールド)、我々は、V1についてはこれを検討しない。
・ DateOnly
年月日を表す。特定の瞬間ではなく、したがって、特定のタイムゾーンに結び付けられていない。
・ Day
このタイプのフィールドは、有効な曜日をとる(例えば、Tuesday)。
・ Month
このタイプのフィールドは、有効な月をとる(例えば、February)。
・ Year
このタイプのフィールドは、有効な年をとる(例えば、2004)。
フィールドルール
<MIN/>/<MAX/>ルール
Stringフィールドタイプ
ストリングフィールドタイプの最小の文字および最大の文字をセットする
Integer/Doubleフィールドタイプ
整数フィールドタイプまたは浮動小数点フィールドタイプの最小値および最大値をセットする
<GRAYOUT/>
フォームは、フィールドが読み取り専用であることを示すが、そのフィールドは、それでもOMを介して書き込み可能である。<READONLY>要素と異なって、すべてのCurrituckクライアントが、このルールを尊重する責任を負う。
Double Validationルール
小数点以下の桁数を示すなど、double値を検証するルール
Double Displayオプション
通貨、丸めなど、doubleをフォーマットするためのフィールドディスプレイコントロールに関するオプション
ダイナミックリスト
ユーザが、フィールドに値をタイプすることができ、そのフィールドの許容される値のリストにそれを自動的に追加させることができるリスト。
フィールドインデクシング
いくつかのフィールド値は、クエリ作成またはレポート作成に特に重要である。WITDは、ユーザが、フィールドに関する2つの特別な属性を指定することを可能にする。両方がオプションである。単一のフィールドに、両方の属性を含めることができる。
indexed
この属性を有するフィールドは、クエリ性能を改善するインデックスをビルドされる。この属性は、控え目に、ワークアイテムタイプのうちで重要なフィールドだけに使用されたい。インデクシングは、タイプString、Integer、またはDateTimeのフィールドだけに使用することができる。
Figure 0005238138
付録III
ワークアイテムタイプルール − カスタマシナリオ
生産的。統合。拡張可能。
1 要約
2 概要および範囲
3 ユーザがフィールド値を書き込むことを要求する
4 フィールド値をオートポピュレート(autopopulate)する
5 フィールド値の編集を制限する
6 柔軟なピックリストの管理
7 厳密なピックリストの管理
8 フィールド値へのユーザの割り当て
9 2レベル依存ピックリスト
10 2レベル依存ピックリスト(状態および理由)
11 3レベル依存ピックリスト
12 状態モデルの拡張
13 Integerフィールド値を検証する
14 Stringフィールド値を検証する
15 DateTimeフィールド値を検証する
16 インデクシングを使用するクエリ性能の改善
17 レポートにカスタムフィールド値を含める
18 監査証跡を実施する
19 ユーザ/グループによるトランザクションを許可しない
20 終盤でコードレビューを要求する
21 リストシナリオを通知する
22 複製リンクを要求する
1 要約
この仕様書では、ワークアイテムタイプを作成する時にカスタマが実装することを望む重要なシナリオを説明する。
2 概要および範囲
この文書の目的は、ワークアイテムタイプビジネスロジックを作成する時の重要なカスタマシナリオを識別し、そのサポートを保証することである。この文書では、カスタマが達成を試みているものを指定し、可能なXMLルールコンストラクトを識別し、実装/実施されるべき所望のユーザインタフェースおよびOM/BRIE挙動を定義する。この文書は、ワークアイテムタイプ作成文書化に直面するカスタマの基礎としても働く。
この文書では、カスタマがワークアイテムタイプへの適用を試みる可能性が高いすべての可能なシナリオを列挙することは試みない。この文書では、ワークアイテムタイプ定義言語でカスタマが使用可能なすべてのルールを扱うこともしない。
各シナリオは、それ自体のセクションで定義されている。灰色のセクションは、M3.3マイルストーンから削除された。
この文書は、ワークアイテムタイプ定義言語仕様書に対する補足仕様書である。
3 ユーザがフィールド値を書き込むことを要求する
ワークアイテムタイプ作成者は、ユーザが、ある時に、フィールドのセットの値を入力することを保証することを望む。言い換えると、識別されたフィールドを空のままにすることはできない。
3.1 XMLサンプル
ユーザは、ワークアイテムのタイトルを入力しなければならない。
Figure 0005238138
3.2 ユーザインタフェースハンドリング
ユーザインタフェースの全体的な目標は、ユーザが、すべての値に正しい値を有するかどうかを視覚的にすばやく判定することを簡単にすることである。これを達成するために、必要なフィールドが現在値を有していない時に、そのフィールドを何らかの形で強調表示しなければならない。これは、バックグラウンドカラー、フィールドラベルカラー、および/またはアスタリスクとすることができる。アクセシビリティ要件も、この設計で考慮に入れなければならない。
必要なフィールドがタブにあり、そのタブが現在選択されていない場合には、タブのなんらかのインジケータが、そのタブに書き込まれる必要がある、必要なフィールドがあることを示さなければならない。
ユーザが値を書き込んだ時に、強調表示をなくさなければならない。このようにして、ユーザは、ワークアイテムを保存する要件を満たした時をすばやく判定することができる。
3.3 OM/BRIEハンドリング
誰かが、まだ空である必要なフィールドを有するワークアイテムの保存を試みた時に、バックエンドは、意味のあるエラーを作らなければならない。OMは、代替ユーザインタフェースの開発者がどのフィールドが値を必要とするかをすばやく判定し、したがって、ユーザのために意味のあるエラーメッセージを作ることができる方法を提供しなければならない。
ユーザが、空である複数の必要なフィールドを有するワークアイテムの保存を試みた時、エラーメッセージは、1フィールドずつエラーを提示することと対比して、書き込まれる必要があるすべてのフィールドを示さなければならない。
3.4 ルールスコープハンドリング
必要性は、加法的である。例えば、ワークアイテムタイプについて<REQUIRED/>ルールが定義されている場合に、そのフィールドは、状態、遷移、または理由にかかわりなく、必ず必要である。<REQUIRED/>ルールが所与の状態に関する場合に、そのフィールドは、ワークアイテムがその状態である時またはその状態に入る時に、遷移または理由にかかわりなく必要である。
3.5 シナリオ
3.5.1 「Title」フィールドは、必ず値を有する必要がある
必ず、ワークアイテムに関して説明を入力する必要がある。
Figure 0005238138
3.5.2 「Investigating」状態である時には、「Assigned To」フィールドが必要である
いくつかのワークアイテムは、「Submitted」状態または「New」状態で生じる。そこから、これらのワークアイテムは別のアクティブ状態に移動する。この例では、そのアクティブ状態が「Investigating」になる。ワークアイテムが「Investigating」状態である時には、それは誰かに割り当てられなければならない。
Figure 0005238138
3.5.3 「Closed」状態に推移する時には、「Reviewed By」フィールドが必要である
ワークアイテムを閉じるためには(理由にかかわりなく)、そのワークアイテムが誰かによってレビューされていなければならない。
Figure 0005238138
3.5.4 理由「Duplicate」のために「Resolved」状態に遷移する時には、「Duplicate ID」フィールドが必要である
だれかが、複製であるという理由のためにワークアイテムを解決している場合には、Duplicate IDフィールドに入力された複製idが存在しなければならない。他のすべての状態または理由について、このフィールドを空のままにすることができる。
Figure 0005238138
3.5.5 「Source」フィールドが値「From Customer」を有する時には、「Customer Priority」フィールドが必要である
このワークアイテムは、ソースを識別するフィールドを有する。ソースがカスタマからである場合には、カスタマ優先順位フィールドが書き込まれていなければならない。
Figure 0005238138
4 フィールド値をオートポピュレート(autopopulate)する
ワークアイテム入力を単純にするために、カスタマができる限り多くのフィールドにオートポピュレートすることを試みている。これをサポートする4つのルール、<DEFAULT>、<COPY>、<SERVERDEFAULT>、および<EMPTY>がある。
4.1 XMLサンプル
デフォルト優先順位に、P3をセットする。
Figure 0005238138
現在のユーザ名を、ワークアイテムをレビューした人を示すフィールドにコピーするが、その値を変更できるようにする。
Figure 0005238138
コミット時に現在のユーザ名および日付をフィールドにコピーする。これらのフィールドは、GUIでは変更可能でない。というのは、ユーザが変更をコミットした時に、値がサーバで上書きされるからである。
Figure 0005238138
コミット時にフィールドの値をクリアする。フィールドは、クリアされ、GUIで変更可能ではない。というのは、ユーザが入力したすべての値が失われるからである。通常、このルールは、遷移中に使用される。例えば、bugをもう一度開く時にReviewed byフィールドをクリアしたい場合である(ClosedからActiveへの遷移)。
Figure 0005238138
4.2 ユーザインタフェースハンドリング
デフォルトルールは、あるフィールドが空の場合にそのフィールドに値を置く。フィールドが既に値を有する場合には、デフォルトルールは無視されなければならない。コピールールは、フィールドの前の値に関わりなくフィールドに値を置く。デフォルトルールおよびコピールールの両方が、フィールドが読み取り専用または必要であるかどうかに関して何かを暗示してはならない。
デフォルトルールは、コピー挙動を駆動するフィールドにデフォルト値を挿入できるようにするために、コピールールの前に処理されなければならない。ユーザが新しいワークアイテムを作成する時、または既存ワークアイテムの編集を開始する時は、次の順序に従わなければならない。
− WHEN句の外のすべてのデフォルトルールを処理しなければならない
− WHEN句の外のすべてのコピールールを処理しなければならない
− WHEN、WHENNOT、WHENCHANGEDの順番で、WHEN句の中のすべてのデフォルトルールおよびその次にコピールールを処理する
− 必要に応じて3レベルまで繰り返す
− 制御をユーザに渡す
未解決の問題:実際にはこれはどのように働くのか?
SERVERDEFAULTルールおよびEMPTYルールは、コミットの後にサーバサイドで動作する。フィールドは、GUIでは読み取り専用にしなければならない。というのは、これらのフィールドにユーザが置いたすべての値が、コミット時に失われるからである。
4.3 OM/BRIEハンドリング
OM/BRIEは、上で説明したようにGUIを駆動するためにルールを処理しなければならない。
また、OM/BRIEは、フィールドの内容を検証し、WIT作成者が誤ってデフォルトルールにおいた不正な値を把握しなければならない。デフォルト値が不正である次の例を検討されたい。
Figure 0005238138
バックエンドは、ユーザがSERVERDEFAULTルールおよびEMPTYルールに関するワークアイテムを保存する時に、サーバクロック時刻または現在のユーザを置くか、フィールドをクリアする。
4.4 ルールスコープハンドリング
加法的である、REQUIREDルールと異なって、デフォルトルールおよびコピールールは、スコープが洗練された時にオーバーライドされなければならない。したがって、ワークアイテムタイプのデフォルト/コピールールは、状態固有デフォルト/コピールールによってオーバーライドされ、状態固有デフォルト/コピールールは、遷移固有デフォルト/コピールールによってオーバーライドされ、遷移固有デフォルト/コピールールは、理由固有デフォルト/コピールールによってオーバーライドされる。
デフォルトおよびコピーは、すべてのフィールドタイプについてサポートされる。
未解決の問題:これを達成できるか?
4.5 シナリオ
4.5.1 優先順位フィールドのデフォルトをP3値にする
私は、許容される優先順位値のセットを有するが、P3のユーザのためにデフォルトが書き込まれることを望む。
4.5.2 深刻度フィールドがS1の場合に優先順位フィールドにP1をコピーする
私は、ビジネス優先順位およびカスタマ報告深刻度を定義したワークアイテムタイプを有する。カスタマ報告深刻度がS1の場合に、デフォルトで、ビジネス優先順位をP1にしなければならない。
未解決の問題:<SERVERDEFAULT from=’field’ value=’P1’/>が必要である。これをカットできるか?
4.5.3 「Discovered On」フィールドのデフォルトを現在時刻にするが、ユーザがこの値を変更できるようにする
私は、ワークアイテムが発見された日付を追跡したい。これは、そのワークアイテムがシステムに入力された日付の前である場合がある。しかし、ほとんどの場合に、これは、そのワークアイテムが入力された日付であり、したがって、「Discovered On」フィールドのデフォルトを現在時刻にするが、必要な場合に、ユーザがこの値を変更できるようにする。
未解決の問題:このシナリオに必要な<COPY from=’clock’/>をカットできるか?
4.5.4 ユーザがワークアイテムを保存する時に、「Last Saved On」フィールドにサーバクロック時刻をコピーする
ユーザがワークアイテムを保存する時に、必ず「Last Saved On」フィールドの値を強制的にサーバクロック時刻にする。
4.5.5 「Assigned」状態である時に、「Assigned To」フィールドのデフォルトを現在のユーザにする
ワークアイテムがまだ誰にも割り当てられていない場合に、Assigned状態である時に現在のユーザをデフォルトにする。
4.5.6 理由「No Repro」を有するワークアイテムを解決する時に、「Reviewed By」フィールドが「Assigned To」と同一の値を有しなければならない
開発者が、再現できないワークアイテムを解決する時、そのワークアイテムに割り当てられた人の値をreviewed byフィールドに書き込む。
5 フィールド値の編集を制限する
カスタマが、あるフィールドに対する変更を行うことを許可される人を制御することを望む。彼らは、<READONLY/>ルールを使用してこれを行うことができる。さらに、for属性およびnot属性の使用を使用して、これらのルールの適用可能性のスコープを個人のサブセットに制限することができる。
5.1 XMLサンプル
この例では、カスタマは、グループTriageMembersのメンバだけがTriageフィールドの値を変更することを許可されることを望む。
Figure 0005238138
5.2 ユーザインタフェースハンドリング
このフィールドは、灰色のバックグラウンドを有しなければならず、ユーザが、値を編集できてはならない。
5.3 OM/BRIEハンドリング
<READONLY>フィールドへの書き込みのすべての試みが、OM/BRIEによってブロックされなければならない。これに関する例外は、バックエンドで動作する<SERVERDEFAULT>要素および<EMPTY>要素である。
5.4 ルールスコープハンドリング
<READONLY>は加法的である。これには、for制約およびnot制約が含まれる。
5.5 シナリオ
5.5.1 グローバルREADONLY
期待される結果フィールドは、常に、GUIとOMの両方から読み取り専用である。
5.5.2 状態固有READONLY
期待される結果フィールドは、状態フィールド=’some state’の時に読み取り専用である。
5.5.3 遷移固有READONLY
期待される結果フィールドは、オリジナルの状態フィールド値=’from state’であり、新しい状態フィールド値=’to state’の時に、GUIとOMの両方から読み取り専用である。
5.5.4 理由固有READONLY
期待される結果フィールドは、オリジナルの状態フィールド値=’from state’であり、新しい状態フィールド値=’to state’であり、理由フィールド値=’some reason’の時に、GUIとOMの両方から読み取り専用である。
5.5.5 グローバルGRAYOUT
期待される結果フィールドは、GUIではグレイアウトされるが、OMからは変更可能である。
5.5.6 状態固有GRAYOUT
期待される結果フィールドは、状態フィールド=’some state’の時に、GUIではグレイアウトされるが、OMからは変更可能である。
5.5.7 遷移固有GRAYOUT
期待される結果フィールドは、オリジナルの状態フィールド値=’from state’であり、新しい状態フィールド値=’to state’の時に、GUIではグレイアウトされるが、OMからは変更可能である。
5.5.8 理由固有GRAYOUT
期待される結果フィールドは、オリジナルの状態フィールド値=’from state’であり、新しい状態フィールド値=’to state’であり、理由フィールド値=’some reason’の時に、GUIではグレイアウトされるが、OMからは変更可能である。
5.5.9 forを伴う4x
forを使用して5.5.1から5.5.4までを繰り返す。期待される挙動、フィールドは、グループに含まれるか具体的に指定されたユーザについて読み取り専用であるが、他のユーザについては読み取り専用でない。
5.5.10 notを伴う4x
notを使用して5.5.1から5.5.4までを繰り返す。期待される挙動、フィールドは、グループに含まれないか具体的に指定されていないユーザについて読み取り専用であるが、このグループのユーザについては読み取り専用でない。
5.5.11 forgroupおよびnotgroupの両方を伴う8x
forgroupコンストラクトおよびnotgroupコンストラクトを使用して5.5.1から5.5.8までを繰り返す。
6 柔軟なピックリストの管理
カスタマが、ユーザが選択できる推奨される値のセットを伴うフィールドを有することを望む。しかし、彼らは、ユーザが彼ら自身の値を入力するのを制約することを望んでいない。
6.1 XMLサンプル
カスタマは、バグが見つかったビルドを追跡することを望む。彼らは、ナイトリビルドのリストを有するが、開発者がローカルビルド番号も入力できるようにすることを望む。
Figure 0005238138
6.2 ユーザインタフェースハンドリング
ユーザに、彼らが提案される値の1つを選択できるようにするドロップダウンを提示しなければならない。ユーザは、手で値を入力することもできる。フィールドについて不正である値は絶対にない(フィールドが<REQUIRED/>要素も有する場合を除く。この場合には、NULL値が不正である)。
1つの提案される値がある場合に、それを事前にポピュレートしなければならない(デフォルトルールがあるかのように)。ユーザは、もちろん、値を変更することができる。
未解決の問題:この最後の段落はサポートされるか?
6.3 OM/BRIEハンドリング
柔軟なピックリストに関する特定のOM/BRIEハンドリング実施はない。
6.4 ルールスコープハンドリング
提案される値ルールは、提案される値セットの和集合を用いて作成される。同等の値をOMによってリストから除去し、ユーザに複数だが等しいオプションが提示されないようにしなければならない。ワークアイテムタイプ作成者が理由ごとに特定のリストを望む場合には、彼らは、理由レベルでのみ、提案される値を指定することができる。
6.5 シナリオ
上のXMLサンプルを参照されたい。
7 厳密なピックリストの管理
カスタマが、所与のフィールドの正しい値のリストを厳密に管理することを望む。ユーザは、所与のリストから正しい値だけを選択することができる。
7.1 XMLサンプル
詳細については下のシナリオを参照されたい。
7.2 ユーザインタフェースハンドリング
ユーザに、そこから選択すべき正しい値の最新のリストを提供するドロップダウンを提示しなければならない。値がフィールドに既に存在し、その値が禁止される値のリストに含まれるか、禁止される値のルールおよび既存の値を許可するルールの両方がない場合には、そのフィールドを強調表示して、ユーザが変更を行う必要があることを示さなければならない。値がフィールドに既に存在し、allowexistingvaluesルールがある場合には、何も強調表示してはならない。
7.3 OM/BRIEハンドリング
バックエンドは、最新のルールのセットに基づいて、常にフィールドが正しい値を有することを実施しなければならない。例外は、フィールドが正しい前の値(編集の前)を有し AND 許容される値のルールがある場合に、バックエンドが、コミットを受け入れなければならず、フィールドの値を無変更のままにしなければならないことである。
7.4 ルールスコープハンドリング
許容される値リストルールは、許容される値の交わりを用いて作成され、これには、禁止される値が含まれる。ワークアイテムタイプ作成者が、特定の理由レベルルールを指定することを望む場合には、彼らは、理由レベルだけに値リストを置くことによってこれを行うことができる。
未解決の問題:禁止される値は和集合か交わりか?
7.5 シナリオ
7.5.1 デフォルトを有する正しい値のリストの管理
ワークアイテムタイプ作成者が、Emergency、Major、Minor、またはVeryMinorのいずれかの値を有する欠陥の深刻度を示すために深刻度フィールドを望む。デフォルト値は、「Minor」である。
Figure 0005238138
7.5.2 延期された必要な更新を用いる、前に正しかった値の除去
その後、彼らは、VeryMinorが実際にはそれほど有用でないと判断する。かれらは、これを許容される値のリストから除去することを望み、編集される時に既存レコードからこれを除去することを望む。次のXMLに、この変更を示す。値が単純に除去されており、ワークアイテムが編集される時に、必ず、「VeryMinor」値を有する以前のワークアイテムが、変更される必要があることに留意されたい。
Figure 0005238138
7.5.3 更新を必要としない、前に正しかった値の除去
その後、その会社が、エンジニアリングからの大量のフィードバックの後に、既存の「VeryMinor」値を「Minor」に変更することが意味をなさないと判断する。これらの値を、前のままにしておくことが、よりよい。ワークアイテムタイプ作成者は、次の変更を行う。
Figure 0005238138
7.5.4 複数のフィールドが同一であるリストの管理
複数のフィールドが同一のリストを必要とすることがありえる。例えば、found on operating systemフィールドとfixed on operating systemフィールドを有すると仮定する。その両方が、必要なオペレーティングシステムのリストを有する。次のXMLは、このリストを一ヵ所に保持し、管理するのに使用される。デフォルト値が、found on operating systemフィールドからであることに留意されたい。
Figure 0005238138
7.5.5 値が別のシステムに保管されるリストの管理
我々がサポートしたいもう1つのリストシナリオは、カスタマが、Currituckの外部に保管されたデータを有するCurrituckリストを自動的に最新状態に保つ能力である。これは、グローバルリスト(上と同様)を作成することによって行われる。しかし、開発者が我々のOMを使用して、
・ リスト値を追加し(前に、後に、インデックスの前に挿入)、
・ リスト値を除去し、
・ リスト内の値の個数を入手し、
・ リストに対して反復し、
・ リストをソートする
ことを可能にするOMインタフェースが必要である。
ここでの主要な例は、ビルドidのリストである。XMLは、次のように単純にリストを定義する(このXMLで少なくとも1つのアイテムを指定しなければならないことに留意されたい)。
Figure 0005238138
8 フィールド値へのユーザの割り当て
ユーザが、ワークアイテムを割り当てることを望む。しかし、割り当ては、多くの意味を持つ可能性がある。例えば、時々、バグが、そのバグがサブミットされたエリアに基づいてあるユーザにデフォルトで暗黙のうちに割り当てられることが望まれる。もう1つの例は、バグを、レビューされるグループに割り当てることである(TriageTeamに割り当てるなど)。もう1つの場合に、作成者は、ユーザが、システムの全ユーザのサブシステムから、明示的な割り当てを行うことを望む。このセクションでは、これらの様々なシナリオの概要を示す。
8.1 XMLサンプル
XMLサンプルは、下でシナリオごとに概要を示す。
8.2 ユーザインタフェースハンドリング
V1には、タイプ「user/group」のフィールドはなく、「string」だけがある。それでも、ワークアイテムタイプ作成者は、ユーザ割り当てを検証する3つの手段を有する。
3つの手段とは、<VALIDUSER/>ルール、<VALIDUSER group=’group’/>、ルール、および<ALLOWEDVALUES>/<PROHIBITEDVALUES>ルールである。
<VALIDUSER/>
有効ユーザルールは、入力されたユーザidがシステムの正しいユーザであるかどうかの検証に使用される。そうでない場合には、そのフィールドを、無効な値を有するものとして強調表示しなければならない。グループを伴うVALIDUSERコンストラクトは、入力されたユーザがそのグループに含まれることを保証しなければならない。
<ALLOWEDVALUES>/<PROHIBITEDVALUES>挙動は、下でシナリオごとに説明する。
8.3 OM/BRIEハンドリング
V1には、タイプ「user/group」のフィールドはなく、「string」だけがあるので、OM/BRIEは、適当なルール(上を参照されたい)を実装するだけでよい。
8.4 ルールスコープハンドリング
<VALIDUSER/>ルールは、加法的なので、フィールドが、スコープのすべての下位レベルで有効なユーザIdを要求するようにする。
8.5 シナリオ
8.5.1 現在のユーザをフィールドに割り当てる
新しいワークアイテムが作成される時に、そのワークアイテムを作成するユーザが、デフォルトでフィールドに割り当てられる。許容される値のリストがなく、このフィールドが<VALIDUSER/>ルールを有するので、TFSで定義されたすべてのユーザが、割当可能であり、このフィールドのピックリストから使用可能でなければならない。さらに、ユーザは、手でユーザIdをタイプすることができる。GUI強調表示が、ユーザが有効な選択を行うのを助ける。OM/BRIEは、有効なユーザIdが入力されることを保証する。
Figure 0005238138
未解決の問題:正確には、有効なユーザとは何か? Currituckデータベース内のユーザか、BIS内のユーザか?
8.5.2 特定のグループからのユーザをフィールドに割り当てる
このプロジェクトでワークアイテムに割り当てられるユーザは、プロジェクトチームのメンバでなければならない。すべてのプロジェクトチームメンバが、(BISまたはWindows(登録商標)の)グループ「MyProjectMembers」の一部である。assigned toフィールドのデフォルトは、現在のユーザである。ドロップダウンは、MyProjectMembersのメンバであるすべてのサブグループのメンバを含むように拡張されたMyProjectMembersの全ユーザのリストでなければならない。例えば、MyProjectMembersが、3つのサブグループ、Developers、Testers、およびProgramManagersだけを有する場合に、この3つのサブグループは表示されないが、この3つのサブグループの全メンバのリストが表示される。
currentuserがこのグループのメンバでない場合、またはユーザがこのグループのメンバでないユーザidを手で入力した場合に、GUIは、フィールドを強調表示し、無効な値を示さなければならない。バックエンドは、<VALIDUSER value=’MyProjectMembers’/>ルールに起因して、このフィールドに、示されたグループからの有効なユーザが含まれることを検証しなければならない。
Figure 0005238138
8.5.3 ユーザ、グループ、または値に割り当てる
この場合に、ワークアイテムを、ユーザ、グループ、または特定の値に割り当てることができる。この例について、このプロジェクトに割り当てられたユーザ(bob、shirley、dave、brian、およびmax)のフラットリストであるグループ「MyProjectMembers」がある。サブグループ「Development、Test、Documentation、ProgramManagement」を有し、このレベルでユーザを有しないグループ「MyProjectGroups」もある。さらに、バグを、まったくグループではない「Triage」に割り当てることを望むことができる。
Figure 0005238138
この例では、ドロップダウン値は、次のようになる
Triage、bob、Shirley、dave、brian、max、Development、Test、Documentation
未解決の問題:これらが値、ユーザ、またはグループであることの表示をGUIでユーザに与える必要はあるか?
このフィールドに有効なユーザでない値を含めることができるので、有効ユーザルールはない。
8.5.4 エリアに基づくユーザの割り当て
しばしば、会社は、バグが報告されているエリア、コンポーネント、またはアプリケーションに基づいて、入ってくるバグにデフォルトプロジェクトリーダーを割り当てることを望む。エリアパスを与えられて、これを達成できなければならない。
この例では、カスタマが、次のルールを実施することを望む。
・ Currituckワークアイテムタイプ定義言語のバグを「brianwh」に自動的に割り当てる。
・ Currituckリンキングサブシステムのバグを「lingbao」に自動的に割り当てる。
・ それ以外の場合に、バグを「bryanmac」に割り当てる。
・ サブミットする側がプロジェクトチームのメンバ(事情がよりよく分かっていると仮定する)でない限り、サブミットする側がこの割当をオーバーライドすることを許可してはならない。
・ 入力が有効なユーザであることを保証する。
・ 入ってきたバグが未割り当てになることは絶対に許容してはならない。
Figure 0005238138
9 2レベル依存ピックリスト
ユーザは、2つのフィールドを有し、一方が他方に依存する。すなわち、一方のフィールドで許容される値が、第1のフィールドの値に依存する。この例では、2つのフィールド、PlatformおよびVersionを使用し、Platformは基本オペレーティングシステムであり、Versionはそのオペレーティングシステムのバージョンを表す。
9.1 XMLサンプル
次が、2レベル依存ピックリストシナリオの基本的なXMLである。追加のXMLまたは変更を、下でシナリオごとに示す。また、Platformの値がUnknownの場合にVersionフィールドをクリアするルールに留意されたい。
Figure 0005238138
9.2 ユーザインタフェースハンドリング
望まれる挙動を、下でシナリオごとに説明する。
9.3 OM/BRIEハンドリング
OM/BRIEハンドリングは、主に、セクション3の必要なフィールドおよびセクション7の厳密なピックリストの管理と同一の正しい値を実施することである。
9.4 ルールスコープハンドリング
この例は、状態、遷移、または理由にスコープを制限されない。
9.5 シナリオ
9.5.1 新しいワークアイテム、デフォルトをとる
ユーザが、新しいワークアイテムを作成し、その後、保存する。期待される結果は、フィールドPlatformにデフォルト値Windows(登録商標)が割り当てられ、フィールドVersionにデフォルト値XPが割り当てられることである。
9.5.2 新しいワークアイテム、Versionを変更する
ユーザは、「Windows(登録商標)」というデフォルト値を受け入れる。次に、ユーザは、「Version」フィールドのドロップダウンを選択する。これには、値「95、98、W2K、XP」が含まれる。ユーザは、95を選択し、保存する。
9.5.3 新しいワークアイテム、プラットフォームを変更する(デフォルトあり)
ユーザが、新しいワークアイテムを作成する。「Windows(登録商標)」および「XP」というデフォルト値が、プラットフォームフィールドおよびバージョンフィールドに置かれる。次に、ユーザは、フィールド「Platform」のドロップダウンを選択する。ユーザは、値「Windows(登録商標)」、「Unix(登録商標)」、「Linux」、および「Unknown」を得る。ユーザは、「Unix(登録商標)」を選択する。この時に、フィールド「Version」が強調表示される。というのは、不正な値「XP」が含まれるからである。ユーザは、これを見、バージョンフィールドのドロップダウンを選択し、選択肢「SunOS,HP−UX,AIX,and Solaris」を見る。ユーザは、「Solaris」を選択する。バージョンフィールドの強調表示がなくなる。ユーザは、保存する。
9.5.4 既存ワークアイテム、プラットフォームを変更し、変更を元に戻し、保存する
ユーザは、プラットフォーム値が「Windows(登録商標)」であり、バージョンが「XP」である既存ワークアイテムを開く。ユーザは、プラットフォームフィールドのドロップダウンを選択し、「Unix(登録商標)」を選ぶ。「XP」という値を有するバージョンフィールドが、不正なので強調表示される。ユーザは、プラットフォームドロップダウンを選択し、これを「Windows(登録商標)」に変更し、バージョンフィールドが、もはや強調表示されなくなる。
9.5.5 Unknownに変更し、保存する
ユーザは、既存ワークアイテムまたは新しいワークアイテムを開く。プラットフォームフィールドは、「Windows(登録商標)」であり、バージョンフィールドは、「XP」である。ユーザは、プラットフォームのドロップダウンを選択し、「Unknown」に変更する。バージョンフィールドは、GUIでは、クリアされた読み取り専用である。
9.5.6 PlatformをUnknownに変更し、Linuxに変更し、保存する
ユーザは、既存ワークアイテムまたは新しいワークアイテムを開く。プラットフォームフィールドは、「Windows(登録商標)」であり、バージョンフィールドは、「XP」である。ユーザは、プラットフォームのドロップダウンを選択し、「Unknown」に変更する。バージョンフィールドは、クリアされる。ユーザは、プラットフォームが「Linux」であることを思い出す。ユーザは、プラットフォームフィールドについてこの選択を行う。バージョンフィールドのデフォルトは、値「RedHat」である。
10 2レベル依存ピックリスト(状態および理由)
ワークアイテムタイプのワークフローでは、ワークアイテムが通過する状態、遷移、および理由を定義する。これは、XMLの<WORKFLOW>セクションで定義される。しかし、ユーザが状態モデルを操作する場所である2つのコアフィールド、State(System.State)およびReason(System.Reason)がある。これらのフィールドは、デフォルトを有する2レベル依存ピックリストのように振る舞う。
10.1 XMLサンプル
Figure 0005238138
10.2 ユーザインタフェースハンドリング
望まれる挙動を、下でシナリオごとに説明する。この2つのフィールドの挙動は、2レベル依存ピックリストに似ているが、いくつかの相違があり、これらの相違を、下でシナリオごとに太字で強調する。
10.3 OM/BRIEハンドリング
OM/BRIEハンドリングは、主に、セクション3の必要なフィールドおよびセクション7の厳密なピックリストの管理と同一の正しい値を実施することである。
10.4 ルールスコープハンドリング
理由は、遷移にスコープを制限され、遷移は、状態対にスコープを制限される。
10.5 シナリオ
10.5.1 新しいワークアイテム、保存する
ユーザは、新しいワークアイテムを作成する。Stateに「NEW」がセットされ、Reasonに「New」がセットされる。
10.5.2 新しいワークアイテム、Reasonを変更し、保存する
ユーザは、新しいワークアイテムを作成する。Stateに「NEW」がセットされ、Reasonに「New」がセットされる。ユーザは、理由のドロップダウンを選択し、「Found By Customer」を選び、保存する。
10.5.3 新しいワークアイテム、Stateを変更する
ユーザは、新しいワークアイテムを作成する。Stateに「NEW」がセットされ、Reasonに「New」がセットされる。ユーザは、状態の変更を試みるが、できない。というのは、これが、新しいワークアイテムの唯一の正しい状態であるからである。
10.5.4 Stateを変更し、デフォルトのReasonになる
ユーザは、状態値が「NEW」であり、理由に「New」がセットされた既存ワークアイテムを開く。ユーザは、Stateのドロップダウンを選択し、このドロップダウンは、「NEW」、「ASSIGNED」、または「CLOSED」を提供する。ユーザは、「ASSIGNED」を選択し、理由フィールドが、デフォルトの「Triaged」になる。
10.5.5 Stateを変更し、変更を元に戻し、保存する
ユーザは、状態値が「NEW」であり、理由に「New」がセットされた既存ワークアイテムを開く。ユーザは、Stateのドロップダウンを選択し、このドロップダウンは、「NEW」、「ASSIGNED」、または「CLOSED」を提供する。ユーザは、「ASSIGNED」を選択し、理由フィールドが、デフォルトの「Triaged」になる。次に、ユーザは、考えを変え、状態フィールドをもう一度選択し、「NEW」に変更する。理由フィールドが強調表示されて、もはや有効な値が含まれないことを示す。ユーザは、理由フィールドをリセットするか、変更を保存せずにそのワークアイテムを閉じることができる。
11 3レベル依存ピックリスト
多くのカスタマは、Nレベルピックリストを望む。このシナリオでは、セクション9の2レベルピックリストに基づいて作られる3レベルピックリストの例の概要を示す。この例では、我々は、前の例からのPlatformフィールドおよびVersionフィールドを有するが、オペレーティングシステムが有する可能性のあるすべてのパッチを示す第3のレベル「Patch」を追加する。
11.1 XMLサンプル
このXMLサンプルでは、Patchフィールドを定義する。PlatformフィールドおよびVersionフィールドは、セクション9.1で説明した。
Figure 0005238138
Figure 0005238138
11.2 ユーザインタフェースハンドリング
この例および上の3レベルピックリストに関して留意すべき2つのことがある。第1に、プラットフォームフィールドがUnknownの場合に、Versionフィールドと同様にPatchフィールドをクリアする。第2に、ユーザが、Platform=LinuxおよびVersion=Otherを選択した場合に、ユーザが、明示的に許可される値のリストではなく、自由形式テキストを入力できるようにする。
11.3 OM/BRIEハンドリング
バックエンドは、単に、通常の必要な値および許容される値の実施を行う。
11.4 ルールスコープハンドリング
この例について、状態、遷移、および理由によってスコープを指定された異なるルールを有することは、意味をなさない。私は、これがあてはまるシナリオを想像することができないが、それがあると確信している。このケースでの我々の推奨は、フィールドの明瞭な分離のためである。したがって、フィールドCがフィールドBの値に依存し、フィールドBがフィールドAの値に依存し、フィールドCが理由にも依存する場合に、我々は、フィールドAおよびBをグローバル<FIELDS>セクションで定義するように薦める。特定の理由の下の<WORKFLOW>セクションでフィールドCの<WHEN>を定義されたい。
この形で、依存ピックリストの唯一の完全な定義がある。すなわち、フィールドCは、あるグローバルに許容される値および理由セクションで許容される値の異なるセットを有しない。これは、ルールが現在のシステムの加法的な挙動であるということになる。
11.5 シナリオ
11.5.1 新しいワークアイテム、デフォルトをとる
ユーザが、新しいワークアイテムを作成し、その後、保存する。期待される結果は、フィールドPlatformにデフォルト値Windows(登録商標)が割り当てられ、フィールドVersionにデフォルト値XPが割り当てられ、フィールドPatchにデフォルト値「None」が割り当てられることである。
11.5.2 新しいワークアイテム、Patchを変更する
ユーザが、新しいワークアイテムを作成する。ユーザは、「Windows(登録商標)」および「XP」というデフォルト値を受け入れる。次に、ユーザは、「Patch」フィールドのドロップダウンを選択する。これには、値「None」および「SP1」が含まれる。ユーザは、「SP1」を選択し、保存する。
11.5.3 新しいワークアイテム、Platformを変更し、Versionを変更し、Patchを変更する
ユーザが、新しいワークアイテムを作成する。「Windows(登録商標)」、「XP」、および「None」というデフォルト値が、プラットフォームフィールド、バージョンフィールド、およびパッチフィールドに置かれる。次に、ユーザが、「Platform」のドロップダウンを選択する。ユーザは、値「Windows(登録商標)」、「Unix(登録商標)」、「Linux」、および「Unknown」を得る。ユーザは、「Unix(登録商標)」を選択する。この時に、フィールド「Version」が、不正な値「XP」含むので強調表示される。パッチフィールドは、「None」という正しい値を含むので、強調表示されない。ユーザは、バージョンフィールドのドロップダウンを選択し、選択肢「SunOS,HP−UX,AIX,and Solaris」を見る。ユーザは、「Solaris」を選択する。バージョンフィールドの強調表示がなくなる。次に、ユーザは、Patchドロップダウンを選択し、「None」または「.01」を得る。ユーザは、「.01」を選択し、保存する。
11.5.4 既存ワークアイテム、Platformを変更し、変更を元に戻し、保存する
ユーザは、プラットフォーム値が「Windows(登録商標)」であり、バージョンが「XP」であり、パッチが「SP1」である既存ワークアイテムを開く。ユーザは、プラットフォームフィールドのドロップダウンを選択し、「Unix(登録商標)」を選ぶ。バージョンフィールドおよびパッチフィールドが、不正なので強調表示される。ユーザは、プラットフォームドロップダウンを選択し、これを「Windows(登録商標)」に変更し、バージョンフィールドおよびパッチフィールドが、もはや強調表示されなくなる。
11.5.5 Unknownに変更し、保存する
ユーザは、既存ワークアイテムまたは新しいワークアイテムを開く。プラットフォームフィールドは「Windows(登録商標)」であり、バージョンフィールドは「XP」であり、パッチフィールドは「None」である。ユーザは、プラットフォームのドロップダウンを選択し、「Unknown」に変更する。バージョンフィールドおよびパッチフィールドがクリアされる。
11.5.6 PlatformをUnknownに変更し、Linuxに変更し、保存する
ユーザは、既存ワークアイテムまたは新しいワークアイテムを開く。プラットフォームフィールドは、当初は「Windows(登録商標)」であり、バージョンフィールドは「XP」であり、パッチフィールドは「SP1」である。ユーザは、プラットフォームのドロップダウンを選択し、「Unknown」に変更する。バージョンフィールドは、クリアされる。ユーザは、プラットフォームが「Linux」であることを思い出す。ユーザは、プラットフォームフィールドについてこの選択を行う。バージョンフィールドのデフォルトは、値「RedHat」であり、パッチフィールドのデフォルトは、「None」である。
11.5.7 Linux、Other、Patchを入力し、保存する
ユーザは、新しいワークアイテムを開く。プラットフォーム、バージョン、およびパッチのデフォルトは、「Windows(登録商標)」、「XP」、および「None」である。ユーザは、プラットフォームに「Linux」を選択する。バージョンフィールドが無効として強調表示される(XPを有する)。ユーザは、バージョンに「Other」を選択する。パッチフィールドは、「None」のままになる。ユーザは、「None」を選択し、このフィールドをクリアする。ユーザは、パッチフィールドに「BL5」を入力し、保存する。
12 状態モデルの拡張
ユーザは、状態フィールドに結び付けられた「Sub−State」フィールドを作成することによって、out−of−the−boxワークフローを拡張することを望む。Sub−stateは、ワークアイテムが所与の状態である間の状況を示し、State変化がある時に必ずクリアされなければならない。
12.1 XMLサンプル
Figure 0005238138
12.2 ユーザインタフェースハンドリング
状態が変化した時に、必ず「SubState」フィールド値をクリアする。状態ごとに、許容される値のドロップダウンリストが、ユーザがそれから選択するのに使用可能である。
12.3 OM/BRIEハンドリング
<REQUIRED/>ルールがないので、ワークアイテムをSubState値なしで保存することができる。所与の状態である時に、値は、許容される値のリストのうちの1つまたは空でなければならない。
12.4 ルールスコープハンドリング
状態が何になろうとしているかにかかわりなく、状態が変化する時に、必ずクリア動作が行われる。
12.5 シナリオ
12.5.1 Sub−Stateの割り当て
ユーザは、既存ワークアイテムを開く。状態は、「ACTIVE」であり、サブ状態フィールドは、空である。ユーザは、サブ状態フィールドのドロップダウンを選択し、「Blocked」、「Investigating」、および「Fixing」という選択肢を得る。ユーザは、「Fixing」を選択し、ワークアイテムを保存する。
12.5.2 Stateの変更およびSub−Stateを空のままにすること
ユーザは、既存ワークアイテムを開く。状態は、「ACTIVE」であり、サブ状態フィールドは、「Fixing」である。ユーザは、状態を「ACTIVE」から「RESOLVED」に変更する。サブ状態フィールドがクリアされる。ユーザは、ワークアイテムを保存する。
12.5.3 無効な状態
ユーザは、既存ワークアイテムを開く。状態は、「ACTIVE」であり、サブ状態フィールドは、空である。ユーザは、サブ状態値「On Hold」をタイプする。フィールドが、無効として強調表示される。ユーザは、サブ状態フィールドのドロップダウンを選択し、「Blocked」を選択し、ワークアイテムを保存する。
13 Integerフィールド値を検証する
カスタマは、フィールドに整数値を望むが、正しいエントリを制限することを望む。
13.1 XMLサンプル
次の例では、カスタマが、優先順位を1と5の間の整数値にすることを望む。
Figure 0005238138
13.2 ユーザインタフェースハンドリング
ユーザは、優先順位フィールドに手で値を入力する。これが最小/最大ルールを満足しない場合に、そのフィールドを強調表示して、その値が不正であることをユーザに示さなければならない。ユーザは、そのフィールド上で移動(hover)して、ヘルプテキスト(有用でなければならない)を得ることができる。ユーザが問題を訂正したならば、強調表示が除去される。
13.3 OM/BRIEハンドリング
バックエンドは、値が最小/最大制約を満足しない場合にエラーにならなければならない。
13.4 ルールスコープハンドリング
ルールは、加法的であり、したがって、有効な範囲は、制約の交わりである。したがって、例えば、グローバル制約が<MIN value=’5’>であり、状態固有制約が<MAX value=’20’>であり、遷移固有制約が<MIN value=’8’/>であり、理由固有制約が<MAX value=’10’>である場合に、所与の状態のワークアイテムについて、特定の遷移中に、この理由を与えられれば、正しい値は8〜10の範囲内になる。
有効フィールドおよび無効フィールドについては、下のシナリオを参照されたい。
13.5 シナリオ
13.5.1 Minのみ
<MIN value=’−5’/>を検討されたい。正しい値は、−5以上である。
13.5.2 Maxのみ
<MAX value=’100’を検討されたい。正しい値は、100以下である。
13.5.3 MinおよびMax、有効
<MIN value=’1’/> <MAX value=’5’/>を検討されたい。正しい値は、両端を含めて1〜5である。
13.5.4 MinおよびMax、端
<MIN value=’5’/> <MAX value=’5’/>を検討されたい。このフィールドは唯一の正しい値を有し、その値は5である。この場合に、UIは、フィールドにまだ値がない場合に、フィールド値を5というデフォルトにしなければならない。
13.5.5 MinおよびMax、無効
<MIN value=’10’/> <MAX value=’5’/>を検討されたい。正しい値はない。インポータは、この状態を把握し、ワークアイテムタイプのプロビジョニングに失敗しなければならない。
13.5.6 スコープ付きのMinのみ、有効
ある最小値ルールが、状態に関わりなくフィールドについて指定され、状態固有であるもう1つの最小値ルールが指定されていると考えられたい。次のケースおよび結果のそれぞれが、(フィールドレベル/状態レベル)最小値について処理されなければならない。
・ 10/5(より小さいmin)
○ 正しい値は10以上である。ルールは、加法的であり、より制限的であり、したがって、ここではグローバルルールが優先される。
・ 10/20(より大きいmin)
○ 状態固有である時を除いて、正しい値は10以上である。状態固有である時には、このフィールドは20以上でなければならない。
13.5.7 スコープ付きのMaxのみ
ある最大値ルールが、状態に関わりなくフィールドについて指定され、状態固有であるもう1つの最大値ルールが指定されていると考えられたい。次のケースおよび結果のそれぞれが、(フィールドレベル/状態レベル)最大値について処理されなければならない。
・ 10/5(より小さいmax)
○ 状態固有の時を除いて、正しい値は、10以下である。状態固有の時には、このフィールドは5以下でなければならない。
・ 10/20(より大きいmax)
○ 正しい値は、10以下である。ルールは、加法的であり、より制限的であり、したがって、ここではグローバルルールが優先される。
13.5.8 スコープ付きのMin/Max
最小値ルールと最大値ルールの両方が、状態に関わりなくフィールドについて指定され、状態固有であるもう1つの最小値/最大値ルールが指定されていると考えられたい。次のケースおよび結果のそれぞれが、(最小−最大グローバルレベル/最小−最大状態レベル)について処理されなければならない。
・ 10−20/5−8(内側)
○ 正しい値は、10〜20であり、状態固有の正しい値は、5〜8である。
・ 10−20/5−25(外側)
○ 正しい値は、10〜20であり、状態固有の正しい値は、同一の10〜20である。
・ 10−20/5−15(下側スパン)
○ 正しい値は、10〜20であり、状態固有の正しい値は、10〜15である。
・ 10−20/15−25(上側スパン)
○ 正しい値は、10〜20であり、状態固有の正しい値は、15〜20である。
・ 10−20/10−30(同一のmin、より大きいmax)
○ 正しい値は、10〜20であり、状態固有の正しい値は、同一の10〜20である。
・ 10−20/10−15(同一のmin、より小さいmax)
○ 正しい値は、10〜20であり、状態固有の正しい値は、10〜15である。
・ 10−20/5−20(より小さいmin、同一のmax)
○ 正しい値は、10〜20であり、状態固有の正しい値は、5〜20である。
・ 10−20/15−20(より大きいmin、同一のmax)
○ 正しい値は、10〜20であり、状態固有の正しい値は、15〜20である。
13.5.9 スコープ付きのMin/Max、無効
次のシナリオは、無効であり、インポータは、これらを把握し、プロビジョニング中にエラーにならなければならない。
・ 10−20/1−5
・ 10−20/25−30
○ 両方が、グローバルには正しいが、状態固有の正しい値がない。
14 Stringフィールド値を検証する
時々、<ALLOWEDVALUES>を使用して行われるように、ストリングフィールドの値の明示的なリストを指定するのではなく、ワークアイテムタイプ作成者が、ストリングエントリへのある規則を実施することを望む。これのよい例が、ビルドidまたはバージョンidである。これは、<MATCH>句を使用して行われる。
マッチングは、すべての可能なidを列挙したくない場合に、数を含むidを指定するために行うこともできる。
ストリング検証が、必ず大文字小文字を区別しないことに留意されたい。
14.1 XMLサンプル
Figure 0005238138
14.2 ユーザインタフェースハンドリング
理想的には、ユーザインタフェースは、無効なストリング値が入力された場合に強調表示する。しかし、私は、これがP2であると考える。最高の優先順位は、ユーザがフィールド上で移動(hover)した場合にフィールドのヘルプテキストを表示することである。我々は、フィールドのフォーマット要件がヘルプテキストで表示されることを推奨する。
14.3 OM/BRIEハンドリング
バックエンドは、フィールドの値が<MATCH>ストリングに従うことを検証しなければならない。無効であるフィールドおよびマッチストリングを含むフィールド(ユーザがヘルプテキストをミスタイプした場合)の両方について、エラーをユーザに報告しなければならない。
14.4 ルールスコープハンドリング
<DEFAULT>ルールと同様に、<MATCH>は、互いにオーバーライドしなければならず、加法的ではない。
14.5 シナリオ
有効な組合せと無効な組合せの両方および複数のマッチストリングをテストしなければならない。
15 DateTimeフィールド値を検証する
カスタマは、ユーザが日付または日時を入力することを望むが、入力された値が正しいことを保証することを望む。これは、<VALIDDATE>コンストラクトを使用して行われる。
15.1 XMLサンプル
カスタマが作成を試みる可能性があるサンプルのワークアイテムタイプ定義を説明する。
<VALIDDATE mustbe=’after now’/>
日付フィールドを検証する。Mustbe値は、「after now」または「not after now」のいずれかとすることができる。「after now」は、現在時刻の後である。「not after now」は、フィールド値が現在時刻またはそれ以前であることを要求する。DateTimeフィールドタイプに使用される。
15.2 ユーザインタフェースハンドリング
望まれるUIハンドリングを、下でシナリオごとに説明する。
15.3 OM/BRIEハンドリング
望まれるOM/BRIEハンドリングを、下でシナリオごとに説明する。
15.4 ルールスコープハンドリング
<VALIDDATE>ルールは、加法的である。「after now」ルールと「not after now」ルールの両方を有することは、不正である。このケースは、プロビジョニング時に把握されなければならない。
15.5 シナリオ
15.5.1 現在時刻をデフォルトとし、ユーザが後の時刻にオーバーライドできるようにする
ユーザは、タスクが完了のためにスケジューリングされた時に、フィールドが時刻を保持することを望む。ユーザは、正しいフォーマットの考え方をユーザに与えるために現在時刻をデフォルトにすることを望むが、ユーザがその値をオーバーライドできるようにすることを望む。ユーザは、入力される時刻が現在または将来であることを保証することを望む。最後に、タスクが完了した場合に、ユーザは、ヒストリック監査のためにその値を読み取り専用にすることを望む。
Figure 0005238138
ユーザは、新しいワークアイテムを作成し、Estimated Dateフィールドは、将来の値を含まなければならない。
ユーザは、タスクをもう一度開き、推定日時フィールドは、まだ編集可能である。ユーザは、Stateフィールドのドロップダウンを選択し、その値をCompleteに変更する。Estimated Dateフィールドが、編集不能に変化する。
15.5.2 日付を将来にすることが絶対にできない
ユーザは、バグがクローズされた日付を保持するフィールドを有することを望む。ユーザは、ユーザがバグを保存する時にこれが書き込まれることを望み、ユーザがこのフィールドを直接に変更できることを望まない。ユーザは、CLOSED状態でない限りこのフィールドが空のままになり、CLOSED状態ではこのフィールドがREQUIREDになることを望む。ユーザは、OMを介するすべての変更が、このフィールドに将来の日付を絶対に置かないことを保証することも望む。次のXMLは、ワークアイテムタイプ作成者がこの問題にどのようにアプローチするかである。
Figure 0005238138
ユーザは、新しいバグをサブミットし、Fixed Onフィールドは、空であり、編集不能である。ユーザは、バグを開き、状態をRESOLVEDからCLOSEDに変更する。フィールドFixed Onは、現在時を書き込まれ、編集不能である。ユーザは、会議のために中断する。1時間後に、ユーザは、変更を保存する。Fixed Onフィールドの古い時刻は、バグ変更がコミットされている時のサーバ時刻に更新される。
16 インデクシングを使用するクエリ性能の改善
ワークアイテムタイプ作成者は、新しいフィールドCustomerIDを追加しており、彼は、このフィールドがクエリに激しく使用されることを知っている。彼は、これに関するクエリ性能が非常によいことを保証することを望む。
16.1 XMLサンプル
Figure 0005238138
16.2 ユーザインタフェースハンドリング
エンドユーザUI変更は不要である。ワークアイテムタイプエディタは、ユーザが、フィールドがインデックス付きであるか否かを調べることを可能にする。
および、その値を変更することを可能にする?
16.3 OM/BRIEハンドリング
フィールドは、インデクシングされる。
16.4 ルールスコープハンドリング
適用可能ではない。
16.5 シナリオ
我々は、これが性能を改善することを検証しなければならない。例えば、10000個のレコードを作成する。クリアキャッシュおよびロードされたキャッシュを用いてクエリ性能をテストする。ワークアイテムタイプエディタを使用して、インデクシングされる主フィールドを変更する。クエリを再実行する。期待される挙動は、クリアキャッシュに関する性能を大きく改善する。キャッシングされたデータに関して、性能改善はわずかであるか、ない。
17 レポートにカスタムフィールド値を含める
ワークアイテムタイプ作成者は、新しいフィールドCustomerIDを追加しており、彼は、このフィールドがレポートに激しく使用されることを知っている。彼は、カスタマidデータがデータウェアハウスで使用可能であることを保証することを望む。
17.1 XMLサンプル
Figure 0005238138
17.2 ユーザインタフェースハンドリング
エンドユーザインタフェース変更は不要である。Rosettaレポートライタは、このフィールドがウェアハウスに送られたならば、このフィールドをレポートでの使用に使用可能にしなければならない。ワークアイテムタイプエディタは、作成者が、フィールドがレポート可能であるか否かを調べることを可能にしなければならない。
17.3 OM/BRIEハンドリング
このフィールドの値を有するすべてのワークアイテムを、適当に定義された間隔でウェアハウスに送らなければならない。
17.4 ルールスコープハンドリング
適用可能ではない。
17.5 シナリオ
カスタムフィールドを有する新しいワークアイテムタイプをプロビジョニングする。いくつかのワークアイテムを作成する。Rosettaに移り、そのカスタムフィールドを使用するレポートを作成する。レポートを実行して、それが動作することを検証する。
18 監査証跡を実施する
Currituckを使用して、ユーザは、ワークアイテムタイプに関する彼らの状態を定義することができる。状態名に対する制約がないことに留意することが重要である。我々は、ワークアイテムのリビジョンごとに変更されたもののフル監査証跡に似た、ワークアイテムタイプの監査のいくつかのコアレベルを提供し、Created On値、Created By値、Last Modified On値、およびLast Modified By値を追跡する。
カスタマは、ヒストリログ(すなわち、会話コントロール)から、状態への出入りの情報を得ることができるが、カスタマは、ワークアイテムが最後にいつ特定の状態に入ったまたは出たかならびに誰がその状態に入ったまたは出たかに関するクエリを実行できることを望む場合がある。カスタマは、この情報がユーザ変更可能ではなくなり、セキュア監査証跡を有することも望む。これは、彼ら自身の状態に関するResolved OnおよびResolved By(Resolvedから出る)またはActivated OnおよびActivated By(Activeに入る)などのクエリをサポートする。次のサンプルで、Resolved On状態およびResolved By状態に関してこれをどのように行うかを識別する。
18.1 XMLサンプル
Figure 0005238138
18.2 ユーザインタフェースハンドリング
これらのルールは、ワークアイテムがActiveであり、Resolved OnフィールドおよびResolved Byフィールドが空である時を示す。これらのフィールドは、UIでは読み取り専用に見え、値を有しない。
ワークアイテムがResolvedである時に、これらのフィールドはREQUIREDであり(空にしてはならない)、最初の更新時のサーバ時刻および現在ユーザにセットされ、フリーズされる。REQUIREDは、フィールドが値を有することを保証する。SERVERDEFAULTによって、このワークアイテムがResolved状態で初めて保存される時に、これにサーバ時刻およびユーザがセットされる。FROZENは、Resolved On値およびResolved By値が、セットされた後に変更されないことを保証する。
このワークアイテムがクローズされた時、これらのフィールドはREQUIRED(値を有しなければならない)であり、FROZEN(誰もその値を変更できない)である。
このワークアイテムが再アクティブ化された(Active状態に遷移した)時には、これらのフィールドはクリアされる。
18.3 OM/BRIEハンドリング
このシナリオは、より複雑であり、複数のルール、<EMPTY/>、<FROZEN/>、<SERVERDEFAULT>、および<REQUIRED/>の調整を示す。これらのルールは、ユーザがカスタム状態を監査することを可能にするために、共同して働かなければならない。
18.4 ルールスコープハンドリング
適用可能ではない。
18.5 シナリオ
上を参照されたい。
19 ユーザ/グループによるトランザクションを許可しない
カスタマは、遷移にセキュリティを適用し、一部のユーザおよびグループがある遷移を行うことを許可され、それ以外のものが同一のことを行うことを拒絶されることを望む。
19.1 XMLサンプル
Figure 0005238138
19.2 ユーザインタフェースハンドリング
V1について、特別なユーザインタフェースハンドリングはない。V1bar以降に進むと、我々は、ユーザがその遷移を行うアクセス権を有しないことを我々が知っている場合に状態フィールドのドロップダウンリストから状態値を除去する。
19.3 OM/BRIEハンドリング
バックエンドは、ワークアイテムタイプの保存を許可する前に、ユーザが状態遷移を行うアクセス権を有することを保証しなければならない。ユーザがアクセスを拒絶される場合に、バックエンドは、UIを介してレポートし、エラーにならなければならない。例えば、「You do not have permission to transition the work item from Resolved to Complete state」(ワークアイテムをResolved状態からComplete状態に遷移させるアクセス権がありません)。
19.4 ルールスコープハンドリング
適用可能ではない。これらのコンストラクトは、遷移だけについて有効である。
19.5 シナリオ
19.5.1 AllTestersのメンバ
ユーザは、遷移を実行することを許可される。
19.5.2 NewTestersのメンバ
ユーザは、遷移を実行することを許可されない。
19.5.3 AllTestersとNewTestersの両方のメンバ
ユーザは、遷移を実行することを許可されない。拒絶が優先する。
19.5.4 AllTestersおよびNewTestersのどちらのメンバでもないメンバ
ユーザは、遷移を実行することを許可されない。任意のALLOW/DENYコンストラクトが、暗黙の「このワークアイテムへのアクセスを有する誰もが、遷移を許可される」を制限する。
19.5.5 あるユーザだけを許可する
特定のユーザを、これらのルールについて指定することができるが、遷移ごとに1つの<ALLOW>または<DENY>だけを設けることができる。
未解決の問題:このステートメントを検証せよ。
20 終盤でコードレビューを要求する
ワークアイテムタイプ作成者は、開発プロジェクトが終盤である時に、すべてのバグが、割り当てられたユーザ以外の誰かによってコードレビューされなければならないという会社ポリシを実施することを試みている。彼らは、このプロセスを誰もが回避しないことを保証することも望む。
私は、我々が有しないこのルールを実装するために3つのことを必要とする
フィールド値を現在のユーザと比較するWHEN句:<WHEN field="fieldname" value=currentuser>
フィールドが特定の値でない時に遷移を停止する句:<ALLOWWHEN field="fieldname" value="somevalue">
<ALLOWWHEN>ルールをバイパスする方法
このすべてから、私は、我々がこのシナリオを再訪し、これを最もよくサポートする方法を調べる必要があると考える。
20.1 XMLサンプル
Figure 0005238138
20.2 ユーザインタフェースハンドリング
下で説明する。
20.3 OM/BRIEハンドリング
下で説明する。
20.4 ルールスコープハンドリング
適用可能ではない。
20.5 シナリオ
20.5.1 プロジェクトが終盤に入る
プロジェクトが終盤に入った時に、ワークアイテムタイプ作成者は、コードレビューを実行せずにResolvedに遷移することを効果的に停止させるルール<ALLOWWHEN>を追加する。
20.5.2 バグがBobによって修正される
Bobは、割り当てられたバグを修正する。Bobは、彼らが終盤にいることの電子メールを読む暇がなく、したがって、誰にもコードレビューを要求しなかった。Bobは、Stateを選択し、その値を「Active」から「Resolved」に変更する。通常通り、終盤の前に、Reviewedフィールドには「notdone」がセットされ、Review Notesは空である。この両方のフィールドが、読み取り専用である。
Bobは、保存を選択する。バックエンドは、エラー「Unable to transition from Active to Resolved, the field "Reviewed" must have the value "passed"」(ActiveからResolvedに遷移できません。フィールド「Reviewed」は値「passed」を有しなければなりません)を報告する。Bobは、プロジェクトが終盤であることと、自分の変更をコードレビューさせる必要があることとを知る。
OK、私の夢では、Bobは、ワークアイテムを右クリックし、「Send to...」を選択し、これによって、このバグへのURLを含む電子メールメッセージが作成される。Bobは、コードレビューするようにSamに求めるテキストをタイプする。
20.5.3 バグが、Samによってレビューされる
Samは、バグのところに行き、linksタブを調べる。Samは、Bobが行った変更セットへのリンクを見る。Samは、そのリンクをダブルクリックして、Hatterasに行き、各ソースファイルを選択し、「diff with predecessor」を行う。レビューの後に、Samは、バグを立ち上げる。
Reviewedフィールドは、Samには読み取り専用ではなく、Samは、その値を「passed」に変更する。その時に、Review Notesフィールドが、REQUIREDとして強調表示される。Samは、手短に書き込む。強調表示がオフになり、Samは、バグを保存し、Bobに電子メールを送る。
20.5.4 Bobがバグを解決する
Bobは、バグを立ち上げ、ActiveからResolvedに遷移する。これは、今回はうまくいく。
20.5.5 バグが例外を与えられる
もう1つの場合に、バグが、レビューなしで持ち込まれる必要がある場合があり、ある人がこのプロセスをバイパスする方法が必要である。この場合に、<ALLOW>ルールは、<ALLOWWHEN>ルールに優先する。TriageLeadは、コードレビューされたか否かに関わりなく、バグを解決することができる。
21 リストシナリオを通知する
ここでの基本的なシナリオは、カスタマが、所与のワークアイテムの通知リストを維持することを望むというものである。その通知リストに含まれるすべてのメンバが、ワークアイテムが編集された時に必ず電子メールを送られる。
私は、BISイベント通知がこのシナリオをサポートするかどうか確信がない。サポートしないと仮定すると、私は、次のようなことを試みるであろう。これが、おそらくはWITの問題ではなく拡張性の問題であることに留意されたい。
私は、この仕様書からこれを除去するつもりであるが、今すぐ捨てたくはない。
21.1 XMLサンプル
Figure 0005238138
21.2 ユーザインタフェースハンドリング
適用可能ではない。
21.3 OM/BRIEハンドリング
適用可能ではない。
21.4 ルールスコープハンドリング
適用可能ではない。
21.5 シナリオ
ユーザは、ワークアイテム変化イベントをリスン(listen)するイベントハンドラを記述する。イベントが到着し、「NotifyList」フィールドに値がある場合に、このハンドラは、電子メールを構成し、通知リスト内の全ユーザに送信する。
22 複製リンクを要求する
カスタマは、次のルールを実施することを望む。バグが解決され、理由が「Duplicate」である場合に、少なくとも1つの複製リンクが確立されていることを必要とする。
私は、ここで新しいものを1つ必要とする:
1)そのフィールドをテストする方法、<ALLOWWHEN greaterthan=’0’を使用した
もちろん、これは、lessthan、equals、notequalsなどのすべてを暗示する。
我々は、これを調査する必要がある。というのは、これが、我々がよい答えを有しないと私が思う単純な作業であるからである。
22.1 XMLサンプル
Figure 0005238138
22.2 ユーザインタフェースハンドリング
下を参照されたい。
22.3 OM/BRIEハンドリング
バックエンドは、リンクタイプごとにコアフィールドを維持し、作成されたタイプのリンクの個数のカウントを記録しなければならない。
22.4 ルールスコープハンドリング
適用可能ではない。
22.5 シナリオ
ユーザは、複製リンクを確立せずに、ワークアイテムを、理由DuplicateとしてResolvedに遷移させることを試みる。提供されるエラー「You are unable to transition to Resolved for reason Duplicate, field DuplicateLinkCount must be greater than 0」(理由DuplicateでResolvedに遷移することはできません。フィールドDuplicateLinkCountが0より大きくなければなりません)。
本発明のいくつかの実施形態による、ワークアイテムトラッキングシステムのワークアイテムルールを実施するシステムの例を示すブロック図である。 本発明のいくつかの実施形態による、ワークアイテムタイプ定義の例を示す図である。 本発明のいくつかの実施形態による、ワークアイテムタイプ定義のフィールドセクションの例を示す図である。 本発明のいくつかの実施形態による、ワークアイテムタイプ定義のワークフローセクションの例を示す図である。 本発明のいくつかの実施形態による、遷移ルールの例を示す図である。 本発明のいくつかの実施形態による、ユーザがプロダクトツリーのノードを選択することを可能にするためにユーザに提供されうるユーザインタフェースディスプレイの例を示すスクリーンショットである。 本発明のいくつかの実施形態による、ユーザが1つまたは複数のセキュリティベースのワークアイテムルールを指定することを可能にするユーザインタフェースディスプレイの例を示すスクリーンショットである。 本発明のいくつかの実施形態による、ユーザが1つまたは複数のセキュリティベースのワークアイテムルールを指定することを可能にするユーザインタフェースディスプレイの例を示すスクリーンショットである。 本発明のいくつかの実施形態による、ワークアイテムを作成し、および/または変更するユーザインタフェースディスプレイの例を示すスクリーンショットである。 本発明のいくつかの実施形態による、ワークアイテムトラッキングシステムでワークアイテムルールを実施する方法の例を示す流れ図である。 本発明のいくつかの実施形態を実施できるコンピュータシステムの例を示すブロック図である。 本発明のいくつかの実施形態を実施するためにコンピュータシステムの一部として使用することができるストレージシステムの例を示すブロック図である。
符号の説明
102 WITSクライアント
104 WITSクライアント
106 WITSクライアント
110 ワークアイテムIF
112 セキュリティIF
114 クライアントWIRエンジン
116 WIRキャッシュ
118 ネットワーク
120 WITSサーバ
122 WIRクライアント/サーバIF
124 サーバWIRエンジン
128 WITS情報
130 WIR情報
1101 出力デバイス
1102 入力デバイス
1103 プロセッサ
1104 メモリ
1105 相互接続機構
1106 ストレージ
1202 ストレージシステムメモリ

Claims (14)

  1. サーバと少なくとも1つのクライアントコンピュータとを含むワークアイテムトラッキングシステムの1つまたは複数のワークアイテムに影響するクライアントコンピュータアクションを統制するコンピュータ実装方法であって、
    前記システムは、論理階層に編成された複数のワークアイテムを備え、第1のワークアイテムは、前記階層の第1のレベルに対応し、第2のワークアイテムは、前記第1のレベルに優先する前記階層の第2のレベルに対応し、
    前記方法は、
    (A)前記コンピュータのプロセッサが、前記ワークアイテムトラッキングシステムの第1のワークアイテムに影響する、第1のクライアントコンピュータによる第1のクライアントコンピュータアクションに応答して、前記第1のクライアントコンピュータおよび/または前記第1のワークアイテムに対応する1つまたは複数のワークアイテムルールを判定する動作であって、前記第1のワークアイテムに対応する第1のワークアイテムルールを判定することと、前記第2のワークアイテムに対応する第2のワークアイテムルールを判定することとを含む動作と、
    (B)前記コンピュータのプロセッサが、前記1つまたは複数の判定されたワークアイテムルールを解釈する動作であって、前記第1および第2のワークアイテムルールを解釈することと、前記第1のレベルに優先する前記階層の前記第2のレベルに少なくとも部分的に基づいて、前記第1のワークアイテムルールの前記解釈を前記第2のワークアイテムルールの前記解釈によってオーバーライドすることとを含む動作と、
    (C)前記コンピュータのプロセッサが、前記1つまたは複数の判定されたワークアイテムルールの前記解釈に基づいて前記第1のクライアントコンピュータアクションに応答する動作と
    を含み、
    前記ワークアイテムトラッキングシステムは、少なくとも第1のネットワーク要素および1つまたは複数の通信媒体によって前記第1のネットワーク要素に接続された第2のネットワーク要素に渡って分散され、前記第1のネットワーク要素は、第1のモジュールを備え、前記第2のネットワーク要素は、第2のモジュールを備え、前記方法は、
    (D)前記第1のモジュールが前記第1のワークアイテムに影響する前記クライアントコンピュータアクションを指定する前記クライアントコンピュータからの入力を受け取る動作
    をさらに含み、前記動作(A)〜(C)は、前記第1のモジュールによって実行され、前記方法は、
    (E)前記第2のモジュールが前記1つまたは複数の判定されたワークアイテムルールを解釈する動作
    をさらに含むことを特徴とする方法。
  2. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、前記第1のクライアントコンピュータまたは前記第1のクライアントコンピュータが属する前記クライアントコンピュータのグループに対応し、
    前記動作(B)は、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含むことを特徴とする請求項1に記載の方法。
  3. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの内容に対応し、
    前記動作(B)は、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含むことを特徴とする請求項1に記載の方法。
  4. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの1つまたは複数のプロパティに対応し、
    前記動作(B)は、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含むことを特徴とする請求項1に記載の方法。
  5. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、プロダクトの少なくとも1つの態様に対応し、
    前記動作(B)は、前記少なくとも1つの判定されたワークアイテムルールを解釈することを含むことを特徴とする請求項1に記載の方法。
  6. (D)前記クライアントコンピュータが1つまたは複数のワークアイテムルールを定義することを可能にするユーザインタフェースを提供する動作
    をさらに含むことを特徴とする請求項1に記載の方法。
  7. サーバと少なくとも1つのクライアントコンピュータとを含むワークアイテムトラッキングシステムの1つまたは複数のワークアイテムに影響するクライアントコンピュータアクションを統制するシステムであって、
    前記システムは、論理階層に編成された複数のワークアイテムを備え、第1のワークアイテムは、前記階層の第1のレベルに対応し、第2のワークアイテムは、前記第1のレベルに優先する前記階層の第2のレベルに対応し、
    前記ワークアイテムトラッキングシステムの第1のワークアイテムに影響する、第1のクライアントコンピュータによる第1のクライアントコンピュータアクションに応答して、前記第1のクライアントコンピュータおよび/または前記第1のワークアイテムに対応する1つまたは複数のワークアイテムルールを判定し、前記1つまたは複数の判定されたワークアイテムルールを解釈し、前記解釈に基づいて前記第1のクライアントコンピュータアクションに応答する、第1のワークアイテムルールエンジンであって、
    前記第1のワークアイテムに対応する第1のワークアイテムルールを判定し、前記第2のワークアイテムに対応する第2のワークアイテムルールを判定するように動作し、
    前記第1および第2のワークアイテムルールを解釈し、前記第1のレベルに優先する前記階層の前記第2のレベルに少なくとも部分的に基づいて、前記第2のワークアイテムルールの前記解釈による前記第1のワークアイテムルールの前記解釈のオーバーライドを制御するように動作する、第1のワークアイテムルールエンジン
    を備え
    前記第1のワークアイテムルールエンジンは、第1のネットワーク要素に常駐し、前記第1のワークアイテムルールエンジンは、前記第1のクライアントコンピュータアクションを指定する前記クライアントコンピュータからの入力を受け取るように動作し、
    1つまたは複数の通信媒体によって前記第1のネットワーク要素に接続された第2のネットワーク要素に常駐する第2のワークアイテムルールエンジンであって、前記第1のモジュールによって適用されるのと異なって前記1つまたは複数の判定されたワークアイテムルールを解釈するように動作する第2のワークアイテムルールエンジンをさらに備えることを特徴とするシステム。
  8. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、前記第1のクライアントコンピュータまたは前記第1のクライアントコンピュータが属する前記クライアントコンピュータのグループに対応し、
    前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作することを特徴とする請求項に記載のシステム。
  9. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの内容に対応し、
    前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作することを特徴とする請求項に記載のシステム。
  10. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、ワークアイテムの1つまたは複数のプロパティに対応し、
    前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作することを特徴とする請求項に記載のシステム。
  11. 前記1つまたは複数の判定されたワークアイテムルールのうちの少なくとも1つは、プロダクトの少なくとも1つの態様に対応し、
    前記第1のワークアイテムルールエンジンは、前記少なくとも1つの判定されたワークアイテムルールを解釈するように動作することを特徴とする請求項に記載のシステム。
  12. 前記クライアントコンピュータが1つまたは複数のワークアイテムルールを定義することを可能にするユーザインタフェース
    をさらに備えることを特徴とする請求項に記載のシステム。
  13. コンピュータ読み取り可能な記録媒体に保管され、コンピュータによって実行された結果として、サーバと少なくとも1つのクライアントコンピュータとを含むワークアイテムトラッキングシステムの1つまたは複数のワークアイテムに影響するクライアントコンピュータアクションを統制するプロセスを実行するように前記コンピュータを制御するプログラムであって、
    前記システムは、論理階層に編成された複数のワークアイテムを備え、第1のワークアイテムは、前記階層の第1のレベルに対応し、第2のワークアイテムは、前記第1のレベルに優先する前記階層の第2のレベルに対応し、
    前記プロセスは、
    (A)前記コンピュータのプロセッサが、前記ワークアイテムトラッキングシステムの第1のワークアイテムに影響する、第1のクライアントコンピュータによる第1のクライアントコンピュータアクションに応答して、前記第1のクライアントコンピュータおよび/または前記第1のワークアイテムに対応する1つまたは複数のワークアイテムルールを判定する動作であって、前記第1のワークアイテムに対応する第1のワークアイテムルールを判定することと、前記第2のワークアイテムに対応する第2のワークアイテムルールを判定することとを含む動作と、
    (B)前記コンピュータのプロセッサが、前記1つまたは複数の判定されたワークアイテムルールを解釈する動作であって、前記第1および第2のワークアイテムルールを解釈することと、前記第1のレベルに優先する前記階層の前記第2のレベルに少なくとも部分的に基づいて、前記第1のワークアイテムルールの前記解釈を前記第2のワークアイテムルールの前記解釈によってオーバーライドすることとを含む動作と、
    (C)前記コンピュータのプロセッサが、前記1つまたは複数の判定されたワークアイテムルールの前記解釈に基づいて前記第1のクライアントコンピュータアクションに応答する動作と
    を含み、
    前記ワークアイテムトラッキングシステムは、少なくとも第1のネットワーク要素および1つまたは複数の通信媒体によって前記第1のネットワーク要素に接続された第2のネットワーク要素に渡って分散され、前記第1のネットワーク要素は、第1のモジュールを備え、前記第2のネットワーク要素は、第2のモジュールを備え、前記プロセスは、
    (D)前記第1のモジュールが前記第1のワークアイテムに影響する前記クライアントコンピュータアクションを指定する前記クライアントコンピュータからの入力を受け取る動作
    をさらに含み、前記動作(A)〜(C)は、前記第1のモジュールによって実行され、前記プロセスは、
    (E)前記第2のモジュールが前記1つまたは複数の判定されたワークアイテムルールを解釈する動作
    をさらに含むことを特徴とするプログラム。
  14. 前記プロセスは、
    (D)前記クライアントコンピュータが1つまたは複数のワークアイテムルールを定義することを可能にするユーザインタフェースを提供する動作
    をさらに含むことを特徴とする請求項13に記載のプログラム。
JP2006086542A 2005-03-25 2006-03-27 ワークアイテムトラッキングシステム用のワークアイテムルール Expired - Fee Related JP5238138B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/090,692 US8554599B2 (en) 2005-03-25 2005-03-25 Work item rules for a work item tracking system
US11/090,692 2005-03-25

Publications (3)

Publication Number Publication Date
JP2006277745A JP2006277745A (ja) 2006-10-12
JP2006277745A5 JP2006277745A5 (ja) 2009-04-09
JP5238138B2 true JP5238138B2 (ja) 2013-07-17

Family

ID=36579789

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006086542A Expired - Fee Related JP5238138B2 (ja) 2005-03-25 2006-03-27 ワークアイテムトラッキングシステム用のワークアイテムルール

Country Status (5)

Country Link
US (1) US8554599B2 (ja)
EP (1) EP1705607A1 (ja)
JP (1) JP5238138B2 (ja)
KR (1) KR101238573B1 (ja)
CN (1) CN1838165A (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8554599B2 (en) 2005-03-25 2013-10-08 Microsoft Corporation Work item rules for a work item tracking system
US20070055921A1 (en) * 2005-08-30 2007-03-08 Challenor Timothy W Document editing system
JP2008217501A (ja) * 2007-03-06 2008-09-18 Mitsubishi Electric Corp 情報処理装置及び情報処理方法及びプログラム
US8082274B2 (en) * 2007-06-28 2011-12-20 Microsoft Corporation Scheduling application allowing freeform data entry
FR2930829A1 (fr) * 2008-04-30 2009-11-06 Airbus France Sas Procede et dispositif d'aide a la conception de textes pour pilote, membre d'equipage ou conducteur
JP5172585B2 (ja) * 2008-10-07 2013-03-27 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクト・モデルに対するアクセスを制御するシステム、方法、およびプログラム
EP2416267A1 (en) * 2010-08-05 2012-02-08 F. Hoffmann-La Roche AG Method of aggregating task data objects and for providing an aggregated view
US8438185B2 (en) * 2010-11-17 2013-05-07 Hitachi, Ltd. File storage apparatus and access control method
US8713056B1 (en) * 2011-03-30 2014-04-29 Open Text S.A. System, method and computer program product for efficient caching of hierarchical items
EP2506171A1 (en) * 2011-04-01 2012-10-03 Waters Technologies Corporation Graphical user interfaces for scientific data information sytems
US20130080201A1 (en) * 2011-09-23 2013-03-28 Dustin Miller System and method for tracking task data
US10042603B2 (en) 2012-09-20 2018-08-07 Samsung Electronics Co., Ltd. Context aware service provision method and apparatus of user device
KR102070196B1 (ko) 2012-09-20 2020-01-30 삼성전자 주식회사 사용자 디바이스에서 상황 인식 서비스 제공 방법 및 장치
US9679264B2 (en) * 2012-11-06 2017-06-13 Oracle International Corporation Role discovery using privilege cluster analysis
US20150051957A1 (en) * 2013-08-15 2015-02-19 Oracle International Corporation Measuring customer experience value
JP6333005B2 (ja) * 2014-03-17 2018-05-30 キヤノン株式会社 画像形成装置及びその制御方法とプログラム
CN105446985B (zh) * 2014-06-30 2018-12-14 北京金山安全软件有限公司 一种缓存文件夹识别方法及装置
CN105068876B (zh) * 2015-07-01 2017-12-08 北京博睿宏远数据科技股份有限公司 基于分布式部署真机采集手机app性能数据的方法
JP6766600B2 (ja) * 2016-03-17 2020-10-14 株式会社リコー 情報処理装置とそのプログラム及び会議支援システム
US10395220B2 (en) 2016-04-20 2019-08-27 International Business Machines Corporation Auto-generation of actions of a collaborative meeting
US20190207946A1 (en) * 2016-12-20 2019-07-04 Google Inc. Conditional provision of access by interactive assistant modules
JP7031468B2 (ja) * 2018-04-20 2022-03-08 富士フイルムビジネスイノベーション株式会社 情報処理装置、情報処理システム、及びプログラム
CN108959562B (zh) * 2018-07-04 2020-06-30 北京京东尚科信息技术有限公司 应用在区块链上的海量规则数据处理方法和系统
EP3937030B1 (en) 2018-08-07 2024-07-10 Google LLC Assembling and evaluating automated assistant responses for privacy concerns
KR102200980B1 (ko) * 2019-03-04 2021-01-11 주식회사 휴비즈아이시티 멀티 유저 에디팅 기능을 지원하는 가상 환경 구현 시스템 및 방법
CN110134739A (zh) * 2019-05-23 2019-08-16 苏州浪潮智能科技有限公司 一种混合写流程处理方法、系统、设备及计算机存储介质
CN110363538A (zh) * 2019-06-12 2019-10-22 深圳市源润信息科技有限公司 产品溯源方法、智能终端及云端装置
CN112347160B (zh) * 2020-11-13 2024-05-10 广州太信信息科技有限公司 一种基于呼叫中心系统的工单管理方法、系统及存储介质

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4809170A (en) * 1987-04-22 1989-02-28 Apollo Computer, Inc. Computer device for aiding in the development of software system
EP0501613A3 (en) * 1991-02-28 1993-09-01 Hewlett-Packard Company Heterogeneous software configuration management apparatus
US5455903A (en) * 1991-05-31 1995-10-03 Edify Corp. Object oriented customer information exchange system and method
JP3381931B2 (ja) 1991-06-14 2003-03-04 株式会社日立製作所 設計変更作業管理方法
US5321610A (en) * 1991-09-23 1994-06-14 The Cobre Group, Inc. Integrated product for implementing application software and process of developing integrated product for implementing application software
GB2263988B (en) * 1992-02-04 1996-05-22 Digital Equipment Corp Work flow management system and method
US5574898A (en) * 1993-01-08 1996-11-12 Atria Software, Inc. Dynamic software version auditor which monitors a process to provide a list of objects that are accessed
US5999911A (en) * 1995-06-02 1999-12-07 Mentor Graphics Corporation Method and system for managing workflow
US6157934A (en) * 1995-10-24 2000-12-05 Ultimus, L.L.C. Method and apparatus for using distributed spreadsheets in a client/server architecture for workflow automation
US5765140A (en) * 1995-11-17 1998-06-09 Mci Corporation Dynamic project management system
JPH1013403A (ja) 1996-06-21 1998-01-16 Nec Corp データ管理システム
US6006193A (en) * 1996-12-18 1999-12-21 Gibson; Kenneth U. Computer executable workflow control system
US6308164B1 (en) * 1997-04-28 2001-10-23 Jeff Nummelin Distributed project management system and method
US6334124B1 (en) * 1997-10-06 2001-12-25 Ventro Corporation Techniques for improving index searches in a client-server environment
US6430538B1 (en) 1998-04-30 2002-08-06 Enterworks Workflow management system, method and medium with personal subflows
JP2000137435A (ja) 1998-10-29 2000-05-16 Mitsubishi Materials Corp チームデータリスト管理装置及びチームデータリスト保管装置及びチームデータリスト処理システム、並びに、それらの記録媒体
US6937993B1 (en) * 1998-09-16 2005-08-30 Mci, Inc. System and method for processing and tracking telecommunications service orders
US6275863B1 (en) * 1999-01-25 2001-08-14 International Business Machines Corp. System and method for programming and executing long running transactions
EP1155373A1 (en) 1999-02-17 2001-11-21 BRITISH TELECOMMUNICATIONS public limited company Creating hypermedia content for a web site
US6636242B2 (en) * 1999-08-31 2003-10-21 Accenture Llp View configurer in a presentation services patterns environment
US7054823B1 (en) * 1999-09-10 2006-05-30 Schering Corporation Clinical trial management system
US7035808B1 (en) * 1999-10-20 2006-04-25 Avaya Technology Corp. Arrangement for resource and work-item selection
US20020055870A1 (en) * 2000-06-08 2002-05-09 Thomas Roland R. System for human capital management
CA2422322A1 (en) * 2000-10-03 2002-04-11 Michael Setteducati Workflow management software overview
US7076728B2 (en) * 2000-12-22 2006-07-11 International Business Machines Corporation Method and apparatus for end-to-end content publishing system using XML with an object dependency graph
US20020152244A1 (en) * 2000-12-22 2002-10-17 International Business Machines Corporation Method and apparatus to dynamically create a customized user interface based on a document type definition
US20020120493A1 (en) * 2001-02-23 2002-08-29 Mormile Robert A. Flexographic platemaker project management and customer interface system
JP2002288405A (ja) 2001-03-27 2002-10-04 Ricoh Co Ltd プロジェクト管理方法、プロジェクト管理サーバ、受付サーバ及びプログラム
US20030018705A1 (en) * 2001-03-31 2003-01-23 Mingte Chen Media-independent communication server
US7503480B2 (en) * 2001-07-10 2009-03-17 American Express Travel Related Services Company, Inc. Method and system for tracking user performance
US7337124B2 (en) * 2001-08-29 2008-02-26 International Business Machines Corporation Method and system for a quality software management process
US20030097273A1 (en) * 2001-11-14 2003-05-22 Carpenter Edward D. System and method for conducting and managing an office move
US7313798B2 (en) * 2001-11-15 2007-12-25 Siebel Systems, Inc. Aggregate drivers for a configurable media-independent server
US7051036B2 (en) * 2001-12-03 2006-05-23 Kraft Foods Holdings, Inc. Computer-implemented system and method for project development
US7937281B2 (en) * 2001-12-07 2011-05-03 Accenture Global Services Limited Accelerated process improvement framework
US8935297B2 (en) * 2001-12-10 2015-01-13 Patrick J. Coyne Method and system for the management of professional services project information
US6862488B2 (en) * 2002-07-05 2005-03-01 Validation Commerce, Llc Automated validation processing and workflow management
US20040117294A1 (en) * 2002-07-10 2004-06-17 Plantfind.Com, Inc. System and methods for facilitating commerce in component-based industries
JP2004110102A (ja) 2002-09-13 2004-04-08 Hitachi Ltd プロジェクト管理方法および工程定義装置
WO2004102454A2 (en) 2003-05-07 2004-11-25 Sap Aktiengesellschaft An end user oriented workflow approach including structured processing of ad hoc workflows with a collaborative process engine
JP2004355326A (ja) * 2003-05-29 2004-12-16 Incs Inc ソフトウェア開発支援プログラム、当該プログラムを記録した記録媒体及びソフトウェア開発支援システム
US7644013B2 (en) * 2003-12-04 2010-01-05 American Express Travel Related Services Company, Inc. System and method for resource optimization
US8554599B2 (en) 2005-03-25 2013-10-08 Microsoft Corporation Work item rules for a work item tracking system
US8126760B2 (en) * 2005-03-25 2012-02-28 Microsoft Corporation Work item tracking system for projects

Also Published As

Publication number Publication date
US8554599B2 (en) 2013-10-08
KR101238573B1 (ko) 2013-03-04
EP1705607A1 (en) 2006-09-27
KR20060103096A (ko) 2006-09-28
JP2006277745A (ja) 2006-10-12
CN1838165A (zh) 2006-09-27
US20060218030A1 (en) 2006-09-28

Similar Documents

Publication Publication Date Title
JP5238138B2 (ja) ワークアイテムトラッキングシステム用のワークアイテムルール
US7730446B2 (en) Software business process model
US7577934B2 (en) Framework for modeling and providing runtime behavior for business software applications
US7673282B2 (en) Enterprise information unification
US8682827B2 (en) Smart containers
US7062502B1 (en) Automated generation of dynamic data entry user interface for relational database management systems
CA2504082C (en) Method and apparatus for generating user interfaces based upon automation with full flexibility
US7085752B2 (en) Customization of metadata describing objects in a computing environment
US20160217423A1 (en) Systems and methods for automatically generating application software
US20100005074A1 (en) System and method for accessing data
US20050289524A1 (en) Systems and methods for software based on business concepts
US20030233631A1 (en) Web services development method
CA2673422C (en) Software for facet classification and information management
US20100312592A1 (en) Confirming enforcement of business rules specified in a data access tier of a multi-tier application
US20220188448A1 (en) System and method for implementing mandatory access control on queries of a self-describing data system
King et al. NHibernate in Action
US11971909B2 (en) Data processing system with manipulation of logical dataset groups
Pialorsi Microsoft SharePoint 2013 Developer Reference
CN115222345A (zh) 一种审核作业方法及装置
US20240256576A1 (en) Data processing system with manipulation of logical dataset groups
US20230222421A1 (en) System and method for dynamic objects and uses for same, including dynamic case model instances in a case management system
US20240146769A1 (en) Systems and methods for managing privileges in a data processing system
Kumar Documentum 6.5 Content Management Foundations
Levinson et al. Pro Visual Studio 2005 Team System
Chang Generation of policy-rich websites from declarative models

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090220

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090220

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120120

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120419

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120424

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120518

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120810

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121112

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130301

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130401

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5238138

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160405

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees