Project Server プログラミング
Project Server 2013 の主要なプログラミング機能について説明します。 この記事には、以前のバージョンの Project Server 用に構築されたアプリケーションの移植についての情報が含まれています。
Project Server 2013 は、Project Server 2010 と複数のプラットフォームでは、アプリがアクセスできる場所両方オンラインおよびオンプレミスの Project Server のインストール用に新しいソリューションの開発されたほとんどのアプリケーションをサポートするよう設計されています。 Project Server 2003 以前用に開発されたアプリケーションと拡張機能は、クライアント側オブジェクト モデル (CSOM) または Project Server インターフェイス (PSI) を使用するように再設計する必要があります。 Office Project Server 2007 または Project Server 2010 用に開発されたアプリケーションでは、PSI を使用するためにいくつかの変更と再コンパイルが必要になる場合があります。CSOM を使用するには、これらのアプリケーションに再設計が必要です。
Project Server プラットフォームは、SharePoint Server 2013、.NET Framework 4、および OData プロトコル上に CSOM と共に構築することにより、プログラマの高レベルな生産性を実現します。 開発者は、アプリ、アプリ パーツ、および Web パーツを使用して Project Web App を拡張し、SharePoint Designer 2013 を使用してワークフローを定義し、Project Server イベントのリモート イベント レシーバーを使用してビジネス ルールを適用することができます。
Project Server と SharePoint Server
Project Web App は SharePoint Server 2013 上に構築されます。マスター ページと Web パーツを使用すると、カスタム アプリと Project Web App ソリューションを簡単に構築できます。 Project Server 2013 は SharePoint Server 2013 と緊密に連携し、このプラットフォームの上にプロジェクト コラボレーション、レポート作成、サイト管理、セキュリティ、およびワークフロー管理を実現します。
プロジェクト サイトには、チームのメンバーに向けた多くの情報と共同作業のオプションが含まれています。ここには、プロジェクトの概要、タイムラインの付いたタスク用の特殊な SharePoint リスト、問題の追跡、リスク、プロジェクト成果物、チームの予定表などの既定のアプリを、ドキュメント ライブラリおよびチーム ディスカッションと一緒に追加できます。 Project Server 2013 のカスタム アプリでは、チームの共同作業のための拡張機能と柔軟性を提供します。 ページを編集するときに Web パーツを追加および編集するのと同じメカニズムを使用して、アプリをカスタマイズするためのアプリ パーツを追加することもできます。 プロジェクト サイトは、Project Server がインストールされている SharePoint ファーム内の任意の場所に配置できます。 Excel Services や Enterprise Search など、SharePoint Server 2013 の他のコア サービスを使用するために、管理者はサービスを有効にして構成できます。
Project Server 2013 のインストール時には、SharePoint Web サービス サイトの Project Service アプリケーションを準備します。 Project Service アプリケーションには、PSI 用のローカルな Windows Communication Foundation (WCF) サービスや ASMX Web サービスが含まれます。 他のサービス アプリケーションとしては、SharePoint 検索や SharePoint ドキュメント管理などがあります。 詳細については、SharePoint Server 2013 の開発者ドキュメントを参照してください。
Project Service アプリケーションは、Project Web App の複数のインスタンスを管理できる論理的なサービス プロバイダーです。 Project Server のプロビジョニングにより、SharePoint Web アプリケーション内に特定の Project Web App サイトが作成されます。 Project Web App のホーム ページには、レポート作成用のプロジェクト センター ページ、リソース センター ページ、およびビジネス インテリジェンス センター ページへのリンクと、その他の標準アプリの一覧が含まれているページへのリンクがあります。 図 1 は、Project Web App のホーム ページの[設定] ドロップダウン リストにある [ページの編集] コマンドを示しています。これにより、Web パーツを追加または編集できます。
注:
Project Web App の一部の管理用ページ (PWA 設定ページなど) は編集できず、[ページの編集] コマンドが表示されません。 Project Web App では、SharePoint Designer 2013 を使用してページを編集することはできません。 SharePoint Designer 2013 を使用して、プロジェクト サイト ページを編集できます。
図 1. Project Web App の [ページの編集] メニューの使用
Project Web App の [サイトの設定] ページにアクセスするには、ページの右上隅にある [設定] アイコンをクリックします。 [サイト設定] ページ ( https://ServerName/ProjectServerName/_layouts/15/settings.aspx
) では、ルック アンド フィールとサイトのテーマの変更、カスタム Web パーツの追加、およびプロジェクト サイトのマスター ページの変更または作成を行うことができます。
ASPX ページ内のコードのカスタマイズ、または SharePoint Designer 2013 を使用した Project Web App マスター ページのカスタマイズはサポートされていません。 Project Web App ページ内のコードをカスタマイズすると、Project Server の更新プログラムやサービス パックで問題が生じることがあります。
SharePoint パッケージを使用した Project Web App のカスタマイズ
Project Web App は SharePoint アプリケーションであり、プロジェクト サイトは SharePoint サイトであるため、カスタム アプリ、Web パーツ、イベント ハンドラー、ユーザー設定フィールドなどの機能を SharePoint パッケージ (.wsp ファイル) または SharePoint アプリ (.spapp ファイル) を使用して追加できます。 1 つの SharePoint パッケージまたはアプリ パッケージに複数の Project Server エンティティを含めることができ、エンティティ定義はパッケージ内の elements.xml ファイルで指定されます。
Project Online では Project Web App リボンにボタンを追加できます。ただし、既存の製品のボタンを削除したり、名前を変更することはできません。また、新しいリボン タブも作成できません。 詳細については、「カスタム アクションを作成して SharePoint のアプリで展開する」を参照してください。
注意
SharePoint パッケージまたはアプリ パッケージのインストール時には、Project Server エンティティの種類が PSEntityProvision.xsd スキーマに指定された順序で出現する必要があります。そうでない場合、パッケージのスキーマ検証が失敗し、インストールは完了しません。
PSEntityProvision.xsd スキーマ ファイルは、Project 2013 SDK ダウンロード (Documentation\Schemas\AppProvisioning
サブディレクトリ内) にあります。 図 2 は、PSEntityProvision スキーマの Visual Studio での XML スキーマ エクスプローラー ビューを示しています。ここでは LookupTable シーケンスが展開されています。
図 2. Project Server エンティティ準備スキーマの Visual Studio ビュー
Project Server の機能をインストールする SharePoint パッケージには、PSEntityProvision スキーマに従った elements.xml ファイルを 1 つまたは複数含めることができます。 1 つの XML ファイル内の Project Server エンティティは、次の順序で出現する必要があります。
ワークフロー フェーズ
参照テーブル
カスタム フィールド
ワークフロー ステージ
エンタープライズ プロジェクトの種類
イベント ハンドラー
Project Server エンティティを含む SharePoint パッケージを作成するときに、複数の elements.xml ファイルにエンティティ定義を含めることができます。 各 XML ファイルがスキーマ検証に合格しても、パッケージ全体ではエンティティの順序が正しくない可能性があります。 たとえば、最初の XML ファイル内のユーザー設定フィールド エンティティが 2 番目の XML ファイル内の参照テーブルを参照している場合があります。 インストール時には、参照テーブルがまだ作成されていないため、ユーザー設定フィールドを作成できません。
パッケージのインストールに失敗した場合、作成されたオブジェクトは Project Web App に残りますが、パッケージは完全にはインストールされません。 パッケージを再インストールすることはできますが、お客様にとって適切な方法ではありません。 エンティティ定義が複数の elements.xml ファイルにまたがる場合は、SharePoint パッケージ全体で Project Server エンティティを整理して、インストールが正しい順序に従っていることを確認します。 Project 2013 SDK ダウンロードの PSEntityProvision.xsd スキーマを使用すると、XML ファイル内のエンティティの規定の順序を確認するツールを開発できます。
Project Server API を使用してアプリケーションをアップグレードする
前のバージョンの Project Server 向けに開発されたアプリケーションをアップグレードする場合は、プロジェクト エンティティの作成、読み取り、更新、および削除のためのメソッド (CRUD 操作) を含むプログラム インターフェイスとして CSOM と PSI のどちらを使用するかを選択できます。 CSOM は内部で PSI を呼び出しますが、すべての PSI メソッドに完全に代わるものではありません。 PSI と CSOM のシナリオと制約については、「What the PSI does and does not do」および「What the CSOM does and does not do」を参照してください。
注:
CSOM に必要な機能が含まれている場合は、CSOM を使用するようにアプリケーションをアップグレードすることをお勧めします。 CSOM を使用すると、アプリケーションをオンプレミスとオンラインの両方の Project Server 2013 インストールで使用できるようになります。
アプリケーションが主に Project Server からデータを読み取る場合は、社内のシナリオに Project Server データベースのレポート テーブルおよびビューを使用できます。 アプリケーションを Project Online と共に使用する場合は、レポート データへのオンプレミスとオンラインの両方のアクセスを提供する ProjectData サービス用の OData プロトコルを使用できます。 詳細については、「ProjectData - Project OData サービス参照」を参照してください。
PSI を使用する
PSI は、Project Professional 2013、Project Web App、および LOB アプリケーションなどの完全信頼クライアント アプリケーションが SharePoint ファーム内で Project Server データにアクセスできるようにします。 PSI は .NET Framework 4 と共に構築および使用され、組み込みセキュリティを備えた馴染みのある開発環境、エラー処理、ガベージ コレクションなどの利点を提供します。
PSI には、WCF サービスまたは ASMX Web サービスを通じてアクセスします。 ASMX インターフェイスは WCF に基づいています。 各 PSI サービスには、通常、基本クラスと共に、そのクラス内のアイテム用の CRUD メソッドが含まれています。 アイテムは、関連する DataSet クラスによって指定されます。 たとえば、CustomFields サービスには、CreateCustomFields2 などのメソッドを持つ CustomFields クラスが含まれています。 1 つまたは複数のエンタープライズ カスタム フィールドのデータが CustomFieldDataSet に指定されています。
注:
PSI の ASMX Web サービスのインターフェイスは、Project Server 2013 で廃止されました。 ASMX インターフェイスは引き続き利用できますが、PSI を使用する新しいアプリケーションは WCF インターフェイスを使用する必要があります。可能であれば、新しいアプリケーションでは PSI の代わりに CSOM を使用してください。 Project Server の将来のバージョンでは、PSI の WCF インターフェイスを使用する場合や CSOM を使用する場合に、既存の ASMX ベースのアプリケーションをアップグレードする必要があります。
文書化されたパブリック PSI サービスは 22 個あり、これらは WCF インターフェイスおよび ASMX インターフェイスに複製されています。 また、PSI には文書化されていない 8 個のプライベート インターフェイスも含まれています。 Project Web App および Project Professional は、パブリック PSI サービスとプライベート PSI サービスを使用します。 PSI は通常、ビジネス オブジェクトと一致するように組み込まれます。 つまり、各 PSI メソッドは、カレンダーやリソースなどのビジネス オブジェクトに関連付けられています。 PSI は、ビジネス オブジェクトへのプライマリ インターフェイスです。 ビジネス層によって再利用可能なビジネス ロジック コンポーネントが提供されるため、Project Server データを処理するさまざまなアプリケーションで同じビジネス ロジックが使用されます。
Project Server と非同期で対話する PSI メソッドは、Queue で始まる名前を持ちます。 各 PSI メソッドは、厳密に型指定されたデータを使用する独立したインターフェイスによって実装されます。 たとえば、Project サービスの QueueCreateProject メソッドは、ProjectDataSet 型のデータセット パラメーターを受け入れます。 ProjectDataSet クラスは DataSet 型から派生しています。 .NET Framework の型チェックと Visual Studio の IntelliSense の完了は、PSI を使用した開発のエラーを減らすために役立ちます。 PSI の名前空間、クラス、メソッド、プロパティ、イベント、および関連アセンブリの詳細な参照の概要については、「Project PSI リファレンスの概要」を参照してください。
Project Server 2013 は、.NET Framework の例外処理を使用します。 すべてのエラーは PSI スタックの上部にあるサーバーに記録されます。 エラーの中には、ASMX インターフェイスの SoapException オブジェクトや WCF インターフェイスの FaultException オブジェクトのように、クライアントへ簡単なレポートとして送信されるものもあります。 例外はアプリケーション イベント ログに記録することができ、一部のエラーでも、サーバーの統合ログ サービス (ULS) のトレース ログに詳細なレポートが記録されます。
ローカルの完全信頼アプリケーションに対しても、PSI は拡張性に優れています。 サービスを含む .NET アセンブリを追加し、そこで新しい機能を提供し、同じ Project Server セキュリティ インフラストラクチャを使用し、他の PSI メソッドを呼び出したり PSI のクラスを継承したりできます。 PSI 拡張機能では、新しい機能で必要とされるビジネス ロジックとデータベース アクセスも提供できます。
CSOM を使用する
CSOM を使用すると、Project Online またはオンプレミスの Project Server 2013 インストールにアクセスするアプリを開発できます。 アプリはパブリックな Office ストアまたはプライベートなアプリ カタログで配布できます。 CSOM は、データセットを渡して changeXml パラメーターまたは XML フィルター パラメーターを構築するのではなく、LINQ クエリを使用して名前でデータを直接使用または提供する使いやすい API として設計されています。 CSOM は、Project, Task、EnterpriseResource、Assignment といった主要エンティティ向けの Project Server Interface (PSI) の主な機能を実装しています。 CSOM には、他の一般的な Project Server 機能をサポートする、CustomField、LookupTable、WorkflowActivities、EventHandler、QueueJob などの追加エンティティも多数含まれます。
CSOM は、次のリソースを開発用のローカル コンピューターにコピーすることによって使用できます。
.NET Framework 4 開発の場合は、
%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.ProjectServer.Client.dll
アセンブリをコピーします。CSOM クラスおよびメンバーについては、Microsoft.ProjectServer.Client 名前空間のドキュメントを参照してください。 サンプル アプリケーションについては、「CSOM と .NET の作業を開始する」を参照してください。
Microsoft Silverlight の開発の場合は、
%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\ClientBin\Microsoft.ProjectServer.Client.Silverlight.dll
アセンブリをコピーします。Windows Phone 8 用のアプリを開発するには、
%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\ClientBin\Microsoft.ProjectServer.Client.Phone.dll
アセンブリをコピーします。JavaScript を使用して Web アプリやその他のデバイスのアプリを開発するには、
%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\LAYOUTS\PS.js
ファイルとPS.debug.js
ファイルをコピーします。 サンプル Web アプリについては、「Project Server 2013 JavaScript オブジェクト モデルの概要」を参照してください。
CSOM は内部的に PSI を呼び出します。そのため、PSI がジョブを実行できない場合は CSOM もできません。 CSOM の制限については、「CSOM ができること、できないこと」および「PSI ができること、できないこと」を参照してください。 CSOM を使用した開発の詳細については、「Project 2013 での開発者向けの更新プログラム」および「Project 2013 のクライアント側オブジェクト モデル (CSOM)」を参照してください。
Project Server 2003 用に構築されたアプリケーションを移植する
Project Server 2003 では、データや機能を利用するためには、多くの場合、Project Professional 2003 を使用するか、データベースに直接アクセスするしかありませんでした。 Project Server 2007 で導入された PSI では、こうした制約の多くが取り除かれています。 Project Server 2003 の Project Data Service (PDS) と異なり、PSI および CSOM は Project Server のビジネス オブジェクトに対する包括的なインターフェイスを提供しています。
PDS 用に開発されたアプリケーションは、それ以降のバージョンの Project Server と互換性がありません。 CSOM および PSI は PDS と同等の機能を提供していますが、PDS のメソッドやパラメーターと完全には対応していません。
注:
PDS アプリケーションは Project Server 2013 用に完全に再設計する必要があるため、CSOM の使用をお勧めします。
PDS の互換性と、PDS 拡張機能を PSI に移植するためのガイドラインの詳細については、「PSI Web サービスでの PDS パリティー」を参照してください。
Project Server 2007 および Project Server 2010 用に構築されたアプリケーションを移植する
Project Server 2013 の PSI は、Office Project Server 2007 および Project Server 2010 の PSI オブジェクト モデルのスーパーセットです。 これらの 2 つの前バージョンの Project Server 用に構築されたアプリケーションの多くは、ローカルの完全に信頼できる、オンプレミスの Project Server 2013 インストールでも引き続き使用できます。 ただし、次の種類のアプリケーションは更新または再設計が必要です。
Project Online での使用に適応させたアプリケーションには、CSOM を使用します。
モバイル デバイスやタブレット コンピューターでの使用に適応させたアプリケーションには、CSOM を使用します。
Office ストアまたはプライベートなアプリ カタログでアプリとして提供されるアプリケーションには、CSOM を使用します。
プロジェクトのスケジュールを変更するアプリケーションの場合は、CSOM を使用するか、QueueUpdateProject2 PSI メソッドを使用するようにアプリケーションを変更してください。
ユーザーが Project Web App の複数のインスタンスにログオンするローカル アプリケーションまたは Web アプリケーションでは、CSOM または PSI の WCF エンドポイント用のプログラム設定を使用する必要があります。 これらのメソッドは非推奨です。 アプリを Project Online で使用するには、フォーム認証の代わりに OAuth 認証を使用する必要があります。 詳細については、「SharePoint 2013 アプリの承認と認証」を参照してください。
特定の Project Server セキュリティ設定に依存したり変更を加えたりするアプリケーション。
注:
Project Server 2013 の既定のオンプレミスのインストールでは、SharePoint のアクセス許可モードが使用されます。ここでは、PSI から Project Server のセキュリティ設定にアクセスできません。 プロジェクトのアクセス許可モードに変更するには、「Project Server 2013 の IT 担当者向けの新機能」の「SharePoint アクセス許可モード」セクションを参照してください。
多くのカスタム Project Server ワークフローでは、SharePoint Designer 2013 を使用して宣言型ワークフローを作成できます。 追加のプログラミングを必要とするカスタム ワークフローの場合は、Microsoft.Office.Project.Server.Workflow 名前空間のクラスまたはメンバーを直接使用しないでください。 その代わりに、CSOM で Microsoft.ProjectServer.Client.WorkflowActivities クラスを使用します。
一般に、偽装を使用するアプリケーションは、PSI の WCF インターフェイスを使用するように書き直す必要があります。 他のユーザーの単純なステータス更新を行うアプリケーションでは、偽装は必要ありません。 CSOM の StatusAssignment.SubmitStatusUpdates メソッド、または PSI の Statusing.SubmitStatusForResource メソッドを使用できます。
Project Server コンピューター上で実行されるミドルウェア コンポーネントは社内用としてのみインストールでき、PSI の WCF インターフェイスを使用する必要があります。 たとえば、ASMX インターフェイスを使用してオンプレミスの Project Web App と外部のタイムシート アプリケーションの間のデータ交換を行うミドルウェア コンポーネントは、PSI の WCF インターフェイスを使用するように書き直す必要があります。 Project Online で使用するためには、コンポーネントをアプリとして再設計し、CSOM を使用する必要があります。
カスタム ソリューションの移行と互換性
PSI のパブリック ASMX と WCF インターフェイスのクラスとメンバーは同じです。 ただし、PSI メソッドで使用されたり返されたりするデータベースの列の数とサイズは、Project Server 2013 と 2 つの前バージョンの Project Server とで異なる場合があります。 以前のバージョンのレポート データベースと比べて、レポートのテーブルとビューにも違いがあります。
重要
運用サーバーに展開する前に、Project Server 2013 の非運用インストールでソリューション全体をテストすることを強くお勧めします。
ソリューションを Project Server 2013 に移行する場合、またはソリューションが意図したとおりに動作しない場合は、少なくとも次のことを行う必要があります。
Visual Studio 2012 で開くことにより、ソリューションを更新します。 一部のソリューションでは、Visual Studio 2010 も使用できます。
ターゲットを .NET Framework 4 に変更します。
Microsoft.Office.Project.Server.Library.dll、Microsoft.Office.Project.Server.Events.Receivers.dll などの Project Server 2013 アセンブリを使用するように、アセンブリ参照を変更します。
ASMX Web 参照または WCF サービス参照と名前空間名の一覧を作成し、Project Server の参照を削除します。
Project 2013 SDK ダウンロードで WCF プロキシのソース ファイルから構築できる ProjectServerServices.dll プロキシ アセンブリを追加するか、必要な WCF サービス用のプロキシのソース ファイルを追加します。 ASMX サービスの場合は、同じ名前空間名を使用して、フロントエンドの ASMX Web サービス参照を再度追加します。または、Project 2013 SDK ダウンロードの WSDL ソースから構築できる、ProjectServerServices.dll プロキシ アセンブリを追加します。
注:
Project 2013 SDK ダウンロードでは、プロキシ ソース ファイルの名前空間はすべて Svc で始まります。 たとえば、WCF プロキシ ファイルおよび ASMX プロキシ ファイル内の Resource サービスの名前空間は、SvcResource になります。 > アプリケーションで異なる名前空間名を使用する場合は、プロキシ アセンブリを再コンパイルして名前空間を使用するか、アプリケーションの PSI 名前空間を変更できます。 たとえば、SDK ダウンロードの CompileWCFProxyAssembly.cmd スクリプトを変更し、プロキシ ソース ファイルから ProjectServerServices.dll を再コンパイルすることができます。
PSI の ASMX インターフェイスから WCF インターフェイスを使用するように変更する場合は、プログラムによって、または app.config の WCF エンドポイントを使用して、クライアント クラスを初期化できます。プログラムによる初期化は、Project Web App の別のインスタンスにすばやく切り替える必要があるときや、PSI を使用する Web パーツを開発しているときに使用します。
Project Server 2013 の PSI サービスには、いくつかの新しいメソッドとデータセットがあり、いくつかの DataRow クラスには新しいプロパティが含まれています。 たとえば、PSI の QueueUpdateProject2 メソッドは、Project Server のスケジュール エンジンを使用して、Project Professional 2013 でプロジェクトを開かなくても、更新されたプロジェクトを再スケジュールします。また、同じ呼び出しでプロジェクト エンティティを追加または削除することもできます。
ソリューションをコンパイルしてテストします。
サーバー上でのプロジェクト スケジューリング
Project Server 2013 には 2 つのスケジューリング エンジンがあります。 新しい方のスケジューリング エンジンは、Project Professional 2013 のスケジューリング エンジンと同じです。 Project Web App またはプロジェクト サイトの [スケジュール] Web パーツ ([プロジェクトの詳細] ページ) か CSOM を使用してスケジュールを変更し、その変更を発行した場合、日付、コスト、期間、残存作業時間、基準計画、およびスケジュールに関するその他の変更の計算は、Project Professional 2013 を使用して変更およびプロジェクトの発行を行った場合と同じになります。 ただし、PSI メソッドは Project Server 2010 から移行された古いスケジューリング エンジンを使用します (QueueUpdateProject2 メソッド以外)。 これは、従来のアプリケーションが Project Server 2013 でも以前と同じように動作するようにするためです。
注:
更新されたスケジューリング エンジンを Project Server 2013 で使用するために、アプリケーションは CSOM を使用できます。
新旧両方のスケジューリング エンジンには、以下の制限があります。
1 つのプロジェクトのスケジューリングのみ スケジューリングは、変更が PSI、CSOM、または Project Web App を使用して、タスク状態の更新を通じて行われたときに、現在のプロジェクトにのみ影響します。 現在のプロジェクトに他のプロジェクト、サブプロジェクト、またはマスター プロジェクトへのリンクが存在する場合、リンクされたプロジェクトは変更されません。
サマリー タスク 一般に、Project Server 上のサマリー タスクは読み取り専用です。 たとえば、サマリー タスクに対する割り当てを作成したり、達成率を変更したりすることはできません。 しかし、Project Server は手動でスケジュールされたサマリー タスクの日付や期間を編集することはサポートしています。
Project Server の実績は、Project Server の承認プロセスをバイパスするため、サマリー タスクの割り当てに自動的に追加されません。 Project Professionalでは、サブタスクに実績を追加すると、集計タスクの割り当てに実績も追加されます。 動作の違いは、ユーザーにとって混乱を招く可能性があります。
Project Server は、サブタスクの期間が短縮されるか、終了日が変更された場合に、サマリー タスクの割り当ての実績作業時間を削除します。
注意
Project Professional ではサマリー タスク上で割り当てを作成できますが、作成しないことをお勧めします。
古い Project Server スケジューリング エンジンでの PSI プログラミングの問題と制限事項は以下のとおりです。
タスクのアクティブな状態の変更以前の Project Server スケジューリング エンジンでは、QueueUpdateProject メソッドを使用してタスクのアクティブな状態を変更するときに、データセット パラメーターの ProjectDataSet オブジェクトに複数の変更がある場合、一貫性のない開始時刻または終了時刻が表示される可能性があります。 TASK_IS_ACTIVE プロパティが QueueUpdateProjectのデータセット パラメーターの唯一の変更である場合は、プロジェクト更新できます。
非アクティブなタスクおよび古いスケジューリング エンジンの詳細については、ブログ記事の「Project 2010 の非アクティブ タスクについて」および「Project Server 2010: Web、Web、PSI および Project Professional でのスケジュール設定」を参照してください。 Project Professional 2010 と Project Web App の Project Server 2010 でのスケジューリングの比較については、「Web ベースのスケジュール管理の比較」を参照してください。
達成額が計算されていない 古いスケジューリング エンジンは、達成額フィールド (ACWP、BAC、BCWP、BCWS、CPI、CV、CV%、EAC、SPI、SV、SV%、TCPI、VAC、期間差異、開始日の差異、終了日の差異、コスト差異、および作業時間の差異) を計算しません。 プロジェクトがこれらのフィールドに値を持ち、そのプロジェクトが QueueUpdateProject メソッドを使用して更新された場合、これらのフィールドの値は変更されません。 問題を回避するには、QueueUpdateProject2 メソッドを使用します。
PSI のスケジューリングの制限事項には、以下の方法で対処できます。
アプリケーションで必要なメソッドが CSOM にある場合は、PSI ではなく CSOM を使用する。
Project Professional でプロジェクトを開き、Project Server に保存する。
レポートに、PSI が更新しないフィールドは含めない。
レポートに、データが古くなっている可能性があるという注意を記す。
レポート テーブルとキューブには、プロジェクト データの一部が更新されていないことを検出できるフラグがあります。 MSP_EpmProject テーブルと MSP_EpmProject_UserView のレポート データには次のフィールドがあります。
ProjectWbsIsStale – 作業分解構造 (タスク アウトライン階層) が古いかどうかを示します。
ProjectEarnedValueIsStale – 獲得額フィールドが古くなっているを示します。
ProjectRollupsAreStale – 下書きデータベースでサブプロジェクトが更新されるが、マスター プロジェクトは更新されないことを示します。 サブプロジェクトからの重ね合わせた値が古くなっています。
ProjectHierarchyNotSynchronized – マスター プロジェクトは子プロジェクトと同期されません。 この状態は、子プロジェクトがマスター プロジェクトの発行の一部ではなく、明示的に発行されたときに発生します。
ProjectCalculationsAreStale – スケジュールを計算せずにプロジェクトを保存Project Professional (つまり、[プロジェクト オプション] ダイアログ ボックスの [スケジュール] タブで計算モードが [手動] に設定されます)。
ProjectGhostTaskAreStale – ProjectHierarchyNotSynchronized に似ていますが、プロジェクト間リンク データに関する警告が表示されます。 マスター プロジェクトが存在しないのに、リンクの一方のプロジェクト データが他方よりも新しい可能性があります。
Project Server データベースへのアクセスについて
Microsoft SQL Server で Project Server データベースへのアクセス許可を持っている場合は、レポート テーブルとビューを読み取ることができます。 必要な Project Server のアクセス許可を持っている場合は、OData クエリを使用して、レポート テーブルからデータを読み取ることもできます。 開発者には、Project Server データベースで下書きテーブル、発行済みテーブル、またはアーカイブ テーブルに SQL Server のクエリを通じて直接アクセスしないことを強く推奨します。 Project Server データベースでいずれかのテーブルに直接変更を加えると、参照整合性が損なわれたり、Project Server キュー サービスを通じたデータベース アクセスと干渉したりする可能性があります。
重要
プログラムによってデータベースに直接アクセスしてデータを更新することを能動的に妨げるものは存在しません。 Project Professional キャッシュ、発行済みテーブル、およびレポート テーブルはすべてがキャッシュ同期プロトコルに依存しているので、直接データを編集すると同期が混乱する可能性があることに注意が必要です。 直接アクセスしてデータを変更することによって、Project Server データベースや Project Professional クライアント側キャッシュが破損した場合、製品サポートは役に立てません。
下書きテーブル、発行済みテーブル、アーカイブ テーブル、およびビューに直接アクセスするアプリケーションは、データベース スキーマにも依存します。データベース スキーマは Project Server 2013 のサービス パックや将来のバージョンで変更される可能性があります。 データベースに直接アクセスするアプリケーションも、組み込みの Project Server セキュリティ、共通ビジネス ロジック、追跡、監査、エラー チェック、レポート、ワークフローなどの機能を利用できません。 こうしたアプリケーションは、Project Server 2013 の更新後に書き換える必要性が高くなります。
以上の理由により、Project Professional と Project Web App は、下書きテーブル、発行済みテーブル、またはアーカイブ テーブルへの直接呼び出しを行いません。Project Server と統合される他のアプリケーションでも、そのような呼び出しは避ける必要があります。
下書きテーブル、発行済みテーブル、およびアーカイブ テーブルのスキーマは文書化されていません。 レポートの生成を支援するために、レポート テーブルを使用できます。レポート テーブルとビューのスキーマは Project 2013 SDK ダウンロードで文書化されています。 レポート データの OData スキーマについては、「ProjectData - Project OData サービス参照」を参照してください。
関連項目
- Project 2013 における開発者向けの更新内容
- Project Server 2013 のアーキテクチャ
- PSI ができること、できないこと
- CSOM ができること、できないこと
- Project 2013 のクライアント側オブジェクト モデル (CSOM)
- Project Server ワークフロー開発の作業開始
- Project 2013 プログラミング リファレンス
- Project PSI リファレンスの概要
- カスタム アクションを作成して SharePoint アプリで展開する
- Project 2010 の非アクティブなタスクの概要
- Project Server 2010: Web、PSI、および Project Professional でのスケジューリング