Project Server 2010 での ProjTool テスト アプリケーションの使用
適用対象: Office 2010 | Project 2010 | Project Server 2010 | SharePoint Server 2010
この記事の内容
ProjTool のコンパイル
ProjTool の基本操作
多言語参照テーブルの作成
ProjTool でのフォーム認証と偽装の使用
ProjTool テスト アプリケーションは、Project Server Interface (PSI) では Windows Communication Foundation (WCF) サービスを使用し、Microsoft Project Server 2010 では Windows 認証、フォーム認証、および偽装を処理するように更新されました。ProjTool には、Project、Resource、LookupTable、Calendar、CustomFields、QueueSystem、Archive、Admin の各サービスを使用する例が含まれます。ProjTool は、Project Server 2010 のテスト インストールでデータを表示、作成、および変更するのに役立ち、複数の PSI メソッドの動作を示すのに便利です (フォーム認証、複数認証、および偽装のルーチンは、Microsoft Corporation の Tiger Wang によるテスト コードのものが利用されています)。
ソリューションのダウンロード: Project 2010 SDK のダウンロードに含まれる ProjTool の Microsoft Visual Studio 2010 ソリューションは、コンパイルする必要があります。ProjTool.exe のコンパイル済みバージョンについては、ProjTool についての Project プログラムのブログ投稿 (英語)を参照してください。ソース コードの言語は Microsoft Visual C# です。
この記事では、ProjTool アプリケーションのコンパイル方法と、一部の機能の使用法について説明します。ProjTool の大部分のコード、または PSI とデータセットの使用方法については説明しません。WCF での PSI の使用の詳細については、「WCF と PSI の概要」および「WCF ベースのコード サンプルの前提条件」を参照してください。Microsoft Office Project Server 2007 用の本来の ProjTool アプリケーションについては、「ProjTool テスト アプリケーションを使用する」を参照してください。
重要
ProjTool アプリケーションは、Project Server のテスト インストールでのみ使用するように作られています。テスト ツールの例として提供されており、サポートはされません。
ProjTool を使用すると、下書き、発行済み、アーカイブの各データベースのデータを、簡単に追加、削除、または変更できます。また、ProjTool は、Project Server Queuing Service、Project Server イベント サービス、およびインターネット インフォメーション サービス (IIS) をリセットし、Microsoft SQL Server を再起動することもできます。
ProjTool は、すべての PSI サービスまたはいずれかのサービスのすべてのメソッドを使用しているわけではありませんが、総合的なテスト アプリケーションのベースになります。ProjTool の主な目的は次のとおりです。
開発者がテスト インストールの Project Server データベースにすばやくデータを設定する手段を提供します。
Project Server を使用する他のアプリケーションの開発に役立つように、PSI で使用される多くのデータセットを簡単に取得および表示できるようにします。
Project Server のインストールで、フォーム認証が使用されている場合、またはフォーム認証と Windows 認証の両方が同じアドレス ポートで使用されている場合 (複数認証) に、PSI メソッドを呼び出すときのヘッダーの設定方法を示します。
プロジェクト データを更新するときの、フィールドでの関連する変更を示します。
Project Server 開発の中心となる PSI および DataSet の一部のメソッドの使用方法を示します。
この記事は次のセクションで構成されます。
ProjTool のコンパイル
ProjTool の基本操作
ProjTool の設定
ProjTool のメイン ウィンドウの使用
プロジェクトの作成
プロジェクト データの変更
多言語参照テーブルの作成
ProjTool でのフォーム認証と偽装の使用
- フォーム認証と偽装のためのヘッダーの設定
注意
ProjTool を実行する前にすべての Project Server データベースをバックアップし、戦略的なデータのセットを作成した後で追加のデータベース バックアップ ファイルを作成することをお勧めします。
ProjTool のコンパイル
ProjTool の変更とコンパイルは、Project Server テスト用コンピューターでも、リモートの開発用コンピューターでも行うことができます。リモート コンピューターの場合は、Microsoft.Office.Project.Server.Library.dll アセンブリを Project Server コンピューターからコピーし、そのコピーへの参照を設定する必要があります。ProjTool のコード サンプルは、2010 年 5 月リリースの Project Server 2010 用には直接コンパイルできます。これより後のサービス パックまたは Project Server 2010 の更新を使用している場合は、手順 1 を使用して Visual Studio ソリューションを更新してください。
注意
たとえば累積的な更新、ホット フィックス、サービス パックなどを使用して、Project Server 2010 の更新されたビルドをインストールするときは、常に、手順 1 を実行することをお勧めします。Project Server の更新では、PSI サービスおよび Project Server アセンブリが変更されている場合があります。
手順 1. 更新された Project Server 用に ProjTool をコンパイルするには
Visual Studio 2010 を起動し、ProjTool.sln ソリューション ファイルを開きます。ソリューション エクスプローラー ウィンドウを開き、ProjTool プロジェクト、WCFHelpers プロジェクト、[参照設定] ノード、[Web 参照] ノードの順に展開します。
リモート コンピューター上で開発している場合は、次の手順を実行して、ProjTool が Project Server と同じライブラリ アセンブリを使用するようにします。
両方の Visual Studio プロジェクトで、Microsoft.Office.Project.Server.Library の参照を削除します。
Project SDK のサンプルをコンパイルするために必要なアセンブリを格納するディレクトリを、開発用コンピューターに作成します。たとえば、C:\Project\Assemblies ディレクトリを作成します。
Microsoft.Office.Project.Server.Library.dll アセンブリを、テスト用の Project Server コンピューターから開発用コンピューターにコピーします。このアセンブリは、Project Server コンピューターの [Program Files]\Microsoft Office Servers\14.0\Bin ディレクトリにあります。
ProjTool プロジェクトおよび WCFHelpers プロジェクトで、このアセンブリを参照として再び追加します。
「[方法] WCF サービスのプロキシ アセンブリを作成する」の説明に従って PSI 用の更新された ProjectServerServices.dll プロキシ アセンブリを作成し、アセンブリを開発用コンピューターにコピーして、更新したアセンブリへの参照を ProjTool プロジェクトで設定します。
PWA サービス用の更新された wcf.PWA.cs プロキシ ファイルを作成します。PSI サービス用のプロキシ ファイルを作成する手順については、「[方法] WCF サービスのプロキシ アセンブリを作成する」を参照してください。
注意
PWA サービスは内部的に使用されるもので、サポートされてはいません。ProjTool は ChangeList オブジェクト内のエンティティに対する変更を計算し、このときに PWA サービスの ProjectUpdatesDataSet を使用します。
ソリューション エクスプローラーの WCFHelpers プロジェクトで、[Web 参照] ノードを展開し、右クリックして WebSvcSiteData Web 参照と WsfSvcAuthentication Web 参照を更新します。
注意
どちらの Web 参照も、Project Web App 用のローカル SharePoint サイトに設定します (たとえば https://localhost/pwa/_vti_bin/SiteData.asmx)。Project Server テスト用コンピューターで開発していない場合は、[Web 参照 URL] プロパティの値を、リモート Project Web App サイトに変更します。SiteData Web サービスおよび Authentication Web サービスは Project Web App の SharePoint サービスであり、PSI サービスではありません。
WCFHelpers プロジェクトをクリックし、プロジェクトをコンパイルして (Shift + F6 を押します)、ProjTool 用の更新された WCFHelpers.dll アセンブリを作成します。
ProjTool プロジェクトをコンパイルします。
ProjTool の基本操作
ProjTool.exe を実行するときは、Windows 認証またはフォーム認証でログオンできます。フォーム認証を使用してログオンしたり、偽装を使用したりする前に、[ProjTool – Project Server Logon] ダイアログ ボックス (図 1) を使用し、[ProjTool Settings] ダイアログ ボックス (図 2) で正しい設定を保存する必要があります。偽装については、「ProjTool でのフォーム認証と偽装の使用」を参照してください。
WCF エンドポイントのプログラムでの設定 (既定)、または app.config ファイルを使用できます。app.config ファイルを使用する場合は、各エンドポイントでの ProjectServer.svc サービスの正しいアドレスを設定する必要があります。ダウンロードした app.config ファイルでのアドレスは https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc です。Project Server が設定されている場合は、Secure Sockets Layer (SSL) の URL (たとえば、https://ServerName/ProjectServerName) を使用してログオンすることもできます。
ProjTool を初めて実行するときの既定の Project Server 名は https://LocalHost/PWA/ であり、既定の認証の種類は [Windows] です (図 1)。
図 1. Windows 認証またはフォーム認証でのログオン
認証の種類として [Windows] をクリックし、Project Web App のテスト インスタンスの URL を入力して、[Log On] をクリックします。ProjTool が開き、ProjectDataSet.Project テーブルから取得されたすべてのプロジェクトの一覧がグリッドに表示されます。
注意
ログオンできない場合は、ProjTool の設定で Project Web App アドレスに対するポートが正しいことを確認してください。また、WCF のプログラムによる設定を使用するように ProjTool を設定するか、または app.config ファイルを編集して正しい WCF エンドポイント アドレスを設定します。
ProjTool の設定
[ProjTool - Project Server Logon] ダイアログ ボックスには、ログオンする前に設定を編集するための [Save Settings] リンクがあります。ログオンした後に、ProjTool のメイン ウィンドウの [Options] メニューで、[ProjTool Settings] ダイアログ ボックス (図 2) を使用することもできます。
図 2. [ProjTool Settings] ダイアログ ボックスの使用
手順 2. ProjTool の設定を保存するには
ProjTool にログオンした後、[Options] メニューの [Settings] をクリックします。
[ProjTool Settings] ダイアログ ボックス (図 2) で、Project Server の URL を入力します。たとえば、https://ServerName/PWA/ などと入力します。PWA は Project Web App インスタンスの名前です。
Project Web App がフォーム認証用に構成されている場合は、最もよく使用するフォーム ユーザーの名前とパスワードを入力します。たとえば、「FormsAdmin」などと入力します。
ポートの設定を追加します。Project Web App での Windows 認証用の既定のポートは 80 です。フォーム認証用の既定のポートは 81 です。たとえば、Project Web App をフォーム認証でインストールする場合、通常のサインイン ページは https://ServerName:81/PWA/ です。
注意
Project Web App インスタンスを複数認証用に設定する場合は、Windows ポートとフォーム ポートを同じ値にできます (例: https://ServerName:200/PWA/)。
既定の設定でログオンし、[Project Server Logon] ウィンドウをスキップするには、[Auto logon on startup] チェック ボックスをオンにします。
プログラムでの構成ではなく、app.config ファイルを使用して WCF エンドポイントを構成するには、[Configure WCF endpoints with app.config] チェック ボックスをオンにします。app.config ファイルを使用する場合は、ファイルを編集して、Project Web App での ProjectServer.svc サービスの正しいアドレスを設定する必要があります。
Project Server の既定のキュー設定は [Wait until the Queue job is completed] です。つまり、ProjTool は、PSI の 1 つのキュー ベース メソッドに対する一連の呼び出しが完了するまで、メイン プログラムの実行を続行しません。たとえば、プロジェクトをチェックアウトした後、メイン ウィンドウの [CheckinProject(s)] をクリックした場合、ProjTool は QueueCheckinProject 呼び出しのキュー セッションが完了するまで待機します。
[Wait until all Queue jobs are completed] を選択した場合は、ProjTool は個別の各キュー要求を待機します。
[Save and Close] をクリックします。
Office Project Server 2007 用の ProjTool の実装とは異なり、Project Server 2010 用の ProjTool では、[ProjTool Settings] ダイアログ ボックスに偽装オプションはありません。「ProjTool でのフォーム認証と偽装の使用」で説明されているように、偽装は [Project Server Advanced Logon] ダイアログ ボックスで内部的に管理されます。
ProjTool のメイン ウィンドウの使用
ProjTool のメイン ウィンドウ (図 3) のメニューには、次の項目が含まれます。
[File] 異なるユーザーとして、または偽装を使用して、ログオンします。
[New] プロジェクト、テンプレートに基づくプロジェクト、ユーザー設定フィールド、またはエンタープライズ リソースを作成します。プロジェクト チームを作成するか、またはプロジェクトをバックアップおよび復元します。
[Backup or Restore Enterprise Projects] ダイアログ ボックスでは、下書きデータベースで選択した各プロジェクトのスナップショットを、アーカイブ データベースに保存できます。また、アーカイブ データベースから下書きデータベースにプロジェクトを復元することもできます。
[Lookup Table] 単純参照テーブルの作成、多言語参照テーブルの作成、参照テーブルの値の表示、および Project Server テスト コンピューター上の多言語参照テーブルで使用する言語の設定を行います。
[Tools] サブメニュー項目によって、エラーの説明の取得、Project Server Queuing Service またはイベント サービスのリセット、SQL Server の再起動、IIS のリセット、またはすべてのサービスのリセットを行うユーティリティにリンクします。
[Options] グリッドを最新の情報に更新したり、ステータス メッセージを消去したりします。[Settings] サブメニューでは、[ProjTool Settings] ダイアログ ボックス (図 2) が表示されます。
[Help] [About ProjTool] ダイアログ ボックスが表示されます。
図 3. ProjTool メイン ウィンドウの操作ボタン、プロジェクトの一覧、ステータス テキスト ボックス
次の図のように、メニュー項目に加えて、メイン ウィンドウのプロジェクト データ グリッドの上には、一連の操作ボタンが表示されます。
[Delete Project] 選択した 1 つ以上のプロジェクトを削除します。発行済みデータベースと下書きデータベースの両方から、または発行済データベースのみから、削除できます。
[Checkin Project(s)] 選択したプロジェクトの単純または強制チェックインを選択できます。プロジェクトが別のユーザーによってチェックアウトされている場合、または別のキュー セッション ID を使用してチェックアウトされている場合は、強制チェックインを使用できます。
[Checkout Project(s)] ProjTool のメイン ウィンドウで選択した 1 つ以上のプロジェクトをチェックアウトし、[Checkin Project(s)] ボタンを使用してチェックインできるようにします。
注意
ただし、キュー セッション ID は、[Project Details] ダイアログ ボックスなどの別のウィンドウを使用してプロジェクトをチェックインする場合は有効ではありません。
[Publish Project(s)] 下書きデータベースから発行済みデータベースにプロジェクトを保存します。完全発行または部分発行を選択できます。ProjTool の発行処理では、プロジェクトの SharePoint サイトは作成または変更されません。QueuePublish メソッド用の追加のユーザー インターフェイス コンポーネントとロジックを使用して、ProjTool にこの機能を追加できます。
[Read Project Details] 選択したプロジェクトの ProjectDataSet に含まれるテーブル セット全体がダイアログ ボックスに表示されます (図 5)。タスクの追加、データの変更、下書きデータと発行済みデータの比較を行うことができます。
注意
ProjTool のメイン ウィンドウでプロジェクトをチェックアウトし、[Project Details] ダイアログ ボックスでデータを編集した場合、データを更新するときに CICOCheckedOutInOtherSession エラーが表示されます。プロジェクトは既に別のキュー セッション ID を使用してチェックアウトされています。
[Rename Project] 下書きデータベースおよび発行済みデータベースで選択したプロジェクトの名前を変更します。
[Refresh] ReadProjectsList メソッドを実行し、グリッドを再設定します。
[Exit] ProjTool を終了します。
メイン ウィンドウの下部にあるテキスト ボックスには、操作の状態が記録され、最後に行った操作が一番上に表示されます。また、このテキスト ボックスには、PSI 呼び出しで生成される場合がある System.ServiceModel.FaultException エラーの XML データも表示されます。メイン ウィンドウの下部にあるステータス バーには、Project Server のバージョン番号と現在の日時が表示されます。
Project Server 2010 の 2010 年 5 月リリースのバージョン番号は 14.0.4750.1000 です。Microsoft Project Professional 2010 の対応するリリース バージョンは 14.0.4751.1000 です。
注意
ProjTool の [Project Details] ダイアログ ボックスには、Microsoft.Office.Project.Server.Library.dll アセンブリのファイルのバージョンが表示されます。ProjTool メイン ウィンドウのステータス バーには、ReadServerVersion PSI メソッドによって取得された Project Server のバージョンが表示されます。Microsoft.Office.Project.Server.Library.dll アセンブリのファイルのバージョンは 14.0.4763.1000 です。同じインストール内の他の Project Server アセンブリのバージョンは異なる場合があります。
プロジェクトの作成
テスト プロジェクトを削除するには、ProjTool メイン ウィンドウの [New] メニューの [Projects] をクリックします。図 4 に [Create Server-Side Projects] ダイアログ ボックスを示します。複数のプロジェクトを作成することに加えて、必要に応じて、各プロジェクトへのタスクの追加、時間単価型、数量単価型、コスト型のローカル リソースの作成と追加、およびプロジェクトの発行を行うことができます。
図 4. [Create Server-Side Projects] ダイアログ ボックスの使用
プロジェクト名の接頭辞が ProjTool Test- で、2 つのプロジェクトを作成した場合、ProjTool によってプロジェクト名は ProjTool Test-1 および ProjTool Test-2 のようにインクリメントされます。
注意
[Project type] ボックスの一覧には、Project.ProjectType 列挙に含まれるすべての種類は表示されません。PSI で作成できる有効なプロジェクトの種類は、Project (標準のプロジェクト)、Template、LightWeightProject (プロジェクト提案)、MasterProject、および InsertedProject だけです。他のプロジェクトの種類は内部で使用されます。列挙値は一覧の右側に表示されます。
[Create Projects] をクリックし、[Close] をクリックしたときは、グリッドに新しいプロジェクトを表示するために ProjTool メイン ウィンドウを更新することが必要な場合があります。
プロジェクト データの変更
[Project Details] ダイアログ ボックスを表示するには、ProjTool メイン ウィンドウでプロジェクトを 1 つ選択し、[Read Project Details] をクリックします。
図 5. [Project Details] ダイアログ ボックスの使用
グリッドのタブには、選択したプロジェクトの ProjectDataSet のすべてのデータテーブルが表示されます。たとえば、[Task] タブをクリックすると、TaskDataTable のデータが表示されます (図 5)。最初のタスクは、プロジェクト サマリー タスク (TASK_ID = 0) です。プロジェクトをまだチェックアウトしていない場合は、タスクを追加および削除したり、タスクのプロパティを設定したりできます。
各テーブルの読み取り/書き込みフィールドの背景は白です。読み取り専用フィールドはグレーです。更新された読み取り/書き込みフィールドは黄で表示されます。ProjTool でフィールドを変更すると、Project Server は関連する読み取り専用フィールドを内部的に変更できます。ProjTool では、Project Server が変更する読み取り専用フィールドが明るい黄で表示されます。変更が終了したら、[Update Project] をクリックします。たとえば、図 5 では、プロジェクトのタスク 1 の名前が変更されています。
プロジェクトでエンタープライズ リソースを使用するには、[Build Team] をクリックします。ProjTool を使用してプロジェクト チームの変更を行うより、Project Professional 2010 を使用して変更する方が簡単な場合があります。
ProjectDataSet を XML ファイルに保存するには、[Save DataSet to XML] をクリックします。変更を行う前と後に ProjectDataSet 全体を保存すると、Beyond Compare などのツールを使って簡単に XML ファイルを比較できます。
注意
ProjTool は PSI の PWA サービスを使用して、ProjectUpdatesDataSet を作成します。これは、変更の追跡に使用されます。PWA サービスは Project Web App で内部的に使用されるものであり、サポートはされません。ProjTool では、PWA オブジェクトはテストの目的にのみ使用されます。Project Server の運用インストール用に開発するアプリケーションでは、PWA サービスのデータセットまたはメソッドを使用しないでください。Project Server の更新プログラムおよびサービス パックで、PWA のメソッド、シグネチャ、フィールドが変更される可能性があります。
割り当て達成率または他の時間配分値を変更するときは、[Update Project] をクリックして、関連するフィールドに変更を表示します。
たとえば、割り当ての ASSN_PCT_WORK_COMPLETE フィールドの値を 75 に変更して、[Update Project] をクリックした場合、他の複数のフィールドの変更が黄色で表示されます (図 6)。[Assignment] テーブルで変更されるフィールドは、[ASSN_ACT_WORK] や [ASSN_REM_WORK] などです。[Task] テーブルでは、[TASK_REM_DUR]、[TASK_PCT_COMP]、[TASK_PCT_WORK_COMP]、[TASK_ACT_WORK]、および [TASK_REM_WORK] フィールドも、そのタスクおよびプロジェクト サマリー タスクに対する変更が黄色で示されます。
図 6. 割り当て達成率の変更によって変更される他のフィールド
[Task] テーブルと [Assignment] テーブルの [MOD_DATE] や、[Task] テーブルの [TASK_ACT_DUR]、[TASK_RESUME_DATE]、[TASK_STOP_DATE]、[TASK_COMPLETE_THROUGH] などの複数の読み取り専用フィールドも、黄色の背景で変更が示されます。[Project] テーブルと [ProjectResource] テーブルには追加の変更があります。
多言語参照テーブルの作成
ProjTool メイン ウィンドウの [LookupTable] メニューには、次の項目が含まれます。
[Simple LookupTable] [Create and Manage Lookup Tables] ダイアログ ボックスが表示され、データテーブル (LookupTables、LookupTableMasks、LookupTableTrees) のタブのグリッドに LookupTableDataSet 内のすべてのデータが表示されます。
[MultiLanguage LookupTable] テスト用の多言語参照テーブルを作成します。
[Display LookupTable Values] 多言語参照テーブルの値を表示します (図 8)。
[Set Server Language] テスト用にシミュレートされた多言語参照テーブル データを保持できる Project Server データベース テーブルを作成します (図 7)。
[Create and Manage Lookup Tables] ダイアログ ボックスでは、参照テーブルをチェックアウト、変更、更新、および削除できます。[Load Assembly] および [Create LT from Assembly] ボタンを使用すると、Microsoft .NET Framework アセンブリを開き、そのアセンブリの名前空間を使用して、テスト用の参照テーブルを作成できます。
テスト用の Project Server のインストールで多言語参照テーブルを作成できます。ProjTool によって、テスト用に、サーバーへの多言語データベース テーブルのインストールをシミュレートできます。多言語参照テーブルの作成をテストするために、Project Server 言語パックをインストールする必要はありません。ProjTool の languageList 変数には、アクティブな Project Server の言語のリストが含まれます
図 7. [Language Installer] ダイアログ ボックス
重要
Project Server の運用インストールで、ProjTool を使用して、参照テーブルの操作、言語の設定、その他の変更を行わないでください。
手順 3. サンプルの多言語参照テーブルを作成および表示するには
ProjTool メイン ウィンドウで、[LookupTable] メニューの [Set Server Language] をクリックします。
[Language Installer] ダイアログ ボックス (図 7) の [Add/Remove Languages] で、Project Server の主要言語に加えて、別の言語のチェック ボックスをオンにします。たとえば、[English] と [French] をオンにします。Project Server の主要言語は常に選択しておく必要があります。
Project Server が使用する Microsoft SQL Server インスタンスの名前を入力し、ログオンのプロパティを設定します。
[Get DataBase List] をクリックして、データベースのリストを表示します。
使用している Project Web App インスタンスの一覧で Project Server の発行済みデータベースを選択します。
[Save] をクリックします。必要なデータベース テーブルが作成されて、IIS が再起動されます。一覧で、現在インストールされている言語を確認できます。[Close] をクリックします。
[LookupTable] メニューの [Multi-Language LookupTable] をクリックします。
[Create Multi-Language Lookup Tables] ダイアログ ボックスで、参照テーブルの名前を入力します。たとえば、「LangTest」と入力します。
プライマリ LCID (1033 など) を選択します。
[Languages] ボックスの一覧で、目的の言語を選択します ([English] と [French] など)。
[Number of Levels] に「2」、[Values for each Level] に「3」、[Values Length] (各値のサンプル文字の数) に「4」を入力します。
[Create] をクリックし、[Close] をクリックします。
[LookupTable] メニューの [Display LookupTable Values] をクリックします。
一覧で参照テーブルを選択します。たとえば、「LangTest」を選択します。
一覧で言語を選択し (図 8)、[Get Values] をクリックします。
図 8 では、サンプルの LangTest 多言語参照テーブルの構造と値を示します。ProjTool によって LT_VALUE_TEXT フィールドにサンプル文字が作成されます。最初の単語の文字数は各値の長さであり、文字は使用している言語で有効なものです。たとえば、English の最初のノードの値は ÂÞæÛ eng 1033 で、French の同じノードの値は ÂÞæÛ fra 1036 です。
図 8. 多言語参照テーブルの値の表示
ProjTool で作成した多言語参照テーブルの構造を確認するには、Project Web App で多言語参照テーブルを開きます。[サーバー設定] ページで、[エンタープライズ ユーザー設定フィールドと参照テーブル] をクリックします。[エンタープライズ ユーザー設定フィールドと参照テーブル] ページで、たとえば、[ユーザー設定フィールドの参照テーブル] セクションの [LangTest] をクリックします。Project Web App では、インストールされている Project Server 言語パックの値のみが表示されます。テスト サンプルの値 ÂÞæÛ eng 1033 は、それぞれが 3 つのサブレベルを持つ、2 つのトップ レベルのうちの 1 つです。
参照テーブルとユーザー設定フィールドの詳細については、「ローカル ユーザー設定フィールドとエンタープライズ ユーザー設定フィールド」および「[WALKTHROUGH] 階層型参照テーブルを作成する」を参照してください。言語コードの一覧については、「Locale ID (LCID) Chart (英語)」を参照してください。
ProjTool でのフォーム認証と偽装の使用
Project Server 2010 で偽装を使用するには、SharePoint 2010 サーバーの全体管理アプリケーションの [サービス アプリケーションの管理] ページを使用して、Project Server サービス アプリケーションでの現在のユーザー (またはユーざー グループ) に対するアクセス許可を設定する必要があります。また、Project Web App の [サイトの操作] メニュー コマンドを使用して、Project Web App サイトに対するアクセス許可も設定する必要があります。偽装のためのアクセス許可を設定する方法の詳細な手順については、「[方法] WCF による偽装を使用する」を参照してください。
Office Project Server 2007 用の ProjTool の実装とは異なり、Project Web App サイトはログオンしているユーザーの資格情報で実行する必要はありません。フォーム認証の場合は、Project Server 2010 用の ProjTool は、Microsoft SharePoint Foundation 2010 の一部である Authentication Web サービスを使用します。さらに、ProjTool は SiteData Web サービスを使用して、Project Web App のサイト ID を取得します。
Program.cs ファイルの P14Login メソッドが、ProjTool でのメイン ログイン メソッドです。次に示すコードは、偽装を使用しないログオンの場合のメソッドの一部です。
if (!isImpersonated)
{
if (isWindowsAuth)
{
if (useDefaultWindowsCredentials)
{
result = true;
}
/* . . . */
}
else
{
// Forms authentication requires the Authentication web service in
// Microsoft SharePoint Foundation 2010.
result = WcfHelpers.LogonWithMsf(userName, password, new Uri(baseUrl));
}
}
WcfHelpers クラスは別の Visual Studio プロジェクトに含まれます。LogonWithMsf メソッドでは、authentication オブジェクトが Project Web App の URL と CookieContainer オブジェクトで初期化されて、Authentication.Login メソッドがフォーム ユーザーを受け付けられるようになります。
public class WcfHelpers
{
// Use the Authentication class in the SharePoint Foundation web services, not in the PSI.
private static Authentication authentication = null;
private static AuthenticationMode mode = AuthenticationMode.Windows;
private static CookieContainer cookieContainer = null;
private static String impersonationContextString = String.Empty;
/* . . . */
// Log on by using the Authentication web service in SharePoint Foundation.
public static bool LogonWithMsf(string username, string password, Uri pwaURI)
{
if (authentication == null)
{
string rootUrl = pwaURI.Scheme + Uri.SchemeDelimiter + pwaURI.Host + ":" + pwaURI.Port;
authentication = new Authentication();
authentication.Url = rootUrl + "/_vti_bin/Authentication.asmx";
}
authentication.CookieContainer = new System.Net.CookieContainer();
LoginResult result = authentication.Login(username, password);
mode = authentication.Mode();
cookieContainer = authentication.CookieContainer;
return (result.ErrorCode == LoginErrorCode.NoError);
}
/* . . . */
}
ProjTool で偽装を使用するには、[File] メニューの [Log On As] をクリックします。[Project Server Advanced Logon] ダイアログ ボックス (図 9) では、ボックスのエンタープライズ リソースの一覧から名前を選択できます。エンタープライズ リソースを偽装するときは、そのユーザーのアクセス許可を引き継ぎます。偽装は、Project Server と統合するアプリケーションのセキュリティをテストする場合に便利です。ただし、運用アプリケーションでは偽装の使用を最小限にする必要があります。
図 9. [Project Server Advanced Logon] ダイアログ ボックス
フォーム認証と偽装のためのヘッダーの設定
フォーム認証または偽装を使用して Project Server 2010 にログオンするときは、特定の PSI サービスに対する呼び出しの各セットを、OperationContextScope ブロック内で設定する必要があります。Program.cs ファイルの次の CreateProject メソッドでは、scope オブジェクトは projectClient オブジェクトに対して有効です。そのブロック内では Project サービスの複数のメソッドを呼び出すことができますが、他の PSI サービスのメソッドを呼び出すことはできません。また、OperationContextScope ブロックを入れ子にすることもできません。
public static bool CreateProject(SvcProject.ProjectDataSet projectDataSet)
{
jobGuid = Guid.NewGuid();
bool result = true;
using (OperationContextScope scope = new OperationContextScope(projectClient.InnerChannel))
{
WcfHelpers.UseCorrectHeaders(isImpersonated);
projectClient.QueueCreateProject(jobGuid, projectDataSet, false);
}
if (waitForQueue)
{
result = WaitForQueueJobCompletion(jobGuid, NO_QUEUE_MESSAGE /* SvcQueueSystem.QueueMsgType.ProjectCreate*/);
}
return result;
}
WcfHelpers クラスの UseCorrectHeaders メソッドの次のコードでは、その scope 内での PSI 呼び出しに対して、Windows 認証、フォーム認証、複数認証、および偽装の正しい HTTP ヘッダーを設定します。
private static AuthenticationMode mode = AuthenticationMode.Windows;
private static CookieContainer cookieContainer = null;
private static String impersonationContextString = String.Empty;
public static CookieContainer CookieContainer
{
get
{ return cookieContainer; }
}
public static AuthenticationMode AuthenticationMode
{
get
{ return mode; }
}
public static string HeaderXformsKey
{
get
{ return "X-FORMS_BASED_AUTH_ACCEPTED"; }
}
public static string HeaderXformsValue
{
get
{ return "f"; }
}
/* . . . */
public static void UseWindowsAuthOnMultiAuthHeader()
{
WebOperationContext.Current.OutgoingRequest.Headers.Remove(HeaderXformsKey);
WebOperationContext.Current.OutgoingRequest.Headers.Add(HeaderXformsKey,
HeaderXformsValue);
}
public static void UseCookieHeader()
{
if (cookieContainer != null)
{
var cookieString = cookieContainer.GetCookieHeader(new Uri(authentication.Url));
WebOperationContext.Current.OutgoingRequest.Headers.Remove("Cookie");
WebOperationContext.Current.OutgoingRequest.Headers.Add("Cookie", cookieString);
}
}
public static void UseCorrectHeaders(bool isImpersonated)
{
if (isImpersonated)
{
// Use WebOperationContext in the HTTP channel, not the OperationContext.
WebOperationContext.Current.OutgoingRequest.Headers.Remove("PjAuth");
WebOperationContext.Current.OutgoingRequest.Headers.Add("PjAuth",
impersonationContextString);
}
if (mode == AuthenticationMode.Windows)
{
UseWindowsAuthOnMultiAuthHeader();
}
UseCookieHeader();
}
UseCorrectHeaders メソッドは、最初に、呼び出しが偽装によるものかどうかを検査します。偽装によるものである場合は、既存のすべての PjAuth ヘッダーを削除した後、偽装コンテキストの値を含む PjAuth ヘッダーを追加します。偽装コンテキストを取得および設定するコードの例については、ProjTool ソース コードの WcfHelpers クラスまたは「[方法] WCF による偽装を使用する」を参照してください。
Windows 認証および複数認証の場合は、UseCorrectHeaders メソッドは UseWindowsAuthOnMultiAuthHeader を呼び出して、X-FORMS_BASED_AUTH_ACCEPTED という名前のヘッダーを削除した後、値を f にして再び同じヘッダーを追加します。最後に、cookieContainer オブジェクトが存在する場合は、UseCorrectHeaders は UseCookieHeader を呼び出して、フォーム認証の cookie を追加します。ログオンがフォーム認証によるものである場合、LogonWithMsf メソッドは cookieContainer オブジェクトを初期化します。
SharePoint クレーム環境での複数認証の詳細については、「WCF ベースのコード サンプルの前提条件」の「クレームの複数認証を使用する」のセクションを参照してください。
関連項目
タスク
概念
ローカル ユーザー設定フィールドとエンタープライズ ユーザー設定フィールド
その他のリソース
Using the ProjTool Test Application with Project Server 2007