次の方法で共有


Project.QueueCreateProjectAndCheckOut メソッド

指定されたエンティティを持つプロジェクトを作成し、プロジェクトを下書きデータベースにチェック アウトを維持します。

名前空間:  WebSvcProject
アセンブリ:  ProjectServerServices (ProjectServerServices.dll 内)

構文

'宣言
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Project/QueueCreateProjectAndCheckOut", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Project/",  _
    ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Project/",  _
    Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Sub QueueCreateProjectAndCheckOut ( _
    jobUid As Guid, _
    sessionUid As Guid, _
    sessionDescription As String, _
    dataset As ProjectDataSet, _
    validateOnly As Boolean _
)
'使用
Dim instance As Project
Dim jobUid As Guid
Dim sessionUid As Guid
Dim sessionDescription As String
Dim dataset As ProjectDataSet
Dim validateOnly As Boolean

instance.QueueCreateProjectAndCheckOut(jobUid, _
    sessionUid, sessionDescription, _
    dataset, validateOnly)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Project/QueueCreateProjectAndCheckOut", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Project/", 
    ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Project/", 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public void QueueCreateProjectAndCheckOut(
    Guid jobUid,
    Guid sessionUid,
    string sessionDescription,
    ProjectDataSet dataset,
    bool validateOnly
)

パラメーター

  • jobUid
    型: System.Guid

    キュー ジョブの GUID。

  • sessionUid
    型: System.Guid

    キュー ジョブを送信するセッションの GUID を指定します。

  • sessionDescription
    型: System.String

    セッションの説明。

  • validateOnly
    型: System.Boolean

    true、のみ、入力データを検証して、アクションは実行されません。

注釈

このセッションで、プロジェクトに変更を加える場合は、 QueueCreateProjectAndCheckOutを使用します。これは、サーバーへの呼び出しを保存します。変更を加えるしたくない場合は、 QueueCreateProjectを使用します。

QueueCreateProjectAndCheckOutは、Project Server キュー サービスにメッセージを送信する非同期メソッドです。

注意

PSI は、クレーム認証をサポートしないため、 QueueCreateProjectAndCheckOutメソッドは、エンタープライズ プロジェクトの種類 (EPT) Windows Workflow Foundation (WF4) の 4 のワークフロー定義を使用するをサポートしていません。

PSI を使用するには、EPTs がないワークフローか従来の WF3.5 の定義を使用すると、プロジェクトを作成します。プロジェクトが WF4、EPT を作成するには、CSOM を使用します。

QueueCreateProjectAndCheckOutなど、 Projectクラスのメソッドは作成、編集、またはコスト単価型リソースを削除します。datasetパラメーターには、 ProjectDataSetにはコスト単価型リソースが含まれています、2076年、 ResourceCannotCreateCostResourceエラーが返されます。CreateResourcesメソッドを使用するには、コスト単価型リソースを作成するのには、 Resourceクラスのメソッドでは編集できません。詳細については、 PSI が行うこと、行わないことを参照してください。

プロジェクト Server インターフェイス (PSI) を使用して、プロジェクトでのローカル ユーザー設定フィールドを作成できません。ただし、タスク、リソース、および割り当てのローカル ユーザー設定フィールドの値を編集、PSI はサポートします。

作成時に、 ProjectDataSet.TaskRowTASK_DUR_FMTを指定する必要があります。それ以外の場合は、Project Professional では、このプロジェクトの後で使用可能なデータが失われるなど、予期しない動作があります。

ProjectDataSet.ProjectResourceRowで、エンタープライズ リソースのプロパティに加えた変更は、次に Project Professional から Project Server のデータを更新するときに失われます。

タスクを追加するには、 ProjectDataSetをときに、 TASK_WBSプロパティを設定しません。PSI で読み書き可能としてマークされているが、 TASK_WBSのプロパティは読み取り専用です。TASK_WBSプロパティに指定した値にタスクを追加する場合は、Project Professional、PSI から設定された値は無視され、プロジェクトを開いたときに、タスク アウトライン位置に従って値が割り当てられます。Project Professional では、結果を表示するには、 WBS コード値には、[タスク情報] ダイアログ ボックスの [詳細設定] タブを確認します。

プロジェクト サーバーのアクセス許可

権限

説明

NewProject

プロジェクト サーバーに新しいグローバル アクセス許可を作成することができます。提案ではなく、通常のプロジェクトにのみ適用されます。

OpenProject

プロジェクトを開くことができます。カテゴリのアクセス権。エンタープライズ テンプレートを使って作成され、プロジェクト詳細ページ (PDP) によって開始されたプロジェクトにのみ適用されます。

SaveProject

プロジェクトを保存することができます。カテゴリのアクセス権。プロジェクト詳細ページ (PDP) によって開始されたプロジェクトにのみ適用されます。

EditProjectProperties

プロジェクトを編集することができます。カテゴリのアクセス権。プロジェクト詳細ページ (PDP) によって開始されたプロジェクトにのみ適用されます。

次の使用例は、プロジェクトを作成、サーバーに保存されますが、チェック アウトのまましプロジェクトをチェックインします。

このコード サンプルを実行する重要な情報は、 Project 2013 での ASMX ベースのコード サンプルの前提条件を参照してください。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Web.Services.Protocols;
using System.Threading;
using PSLibrary = Microsoft.Office.Project.Server.Library;

namespace Microsoft.SDK.Project.Samples.QueueCreateProjectAndCheckOut
{
   class Program
   {
      [STAThread]
      static void Main(string[] args)
      {
         try
         {
            const string PROJECT_SERVER_URI = "https://ServerName/ProjectServerName/";
            const string PROJECT_SERVICE_PATH = "_vti_bin/psi/project.asmx";
            const string QUEUESYSTEM_SERVICE_PATH = "_vti_bin/psi/queuesystem.asmx";
            const string SESSION_DESC = "Sample utility";

            Guid sessionId = Guid.NewGuid();
            Guid jobId;

            // Set up the web service objects.
            SvcProject.Project projectSvc = new SvcProject.Project();

            SvcProject.ProjectDataSet projectDs = new SvcProject.ProjectDataSet();

            projectSvc.Url = PROJECT_SERVER_URI + PROJECT_SERVICE_PATH;
            projectSvc.Credentials = CredentialCache.DefaultCredentials;

            SvcQueueSystem.QueueSystem q = new SvcQueueSystem.QueueSystem();
            q.Url = PROJECT_SERVER_URI + QUEUESYSTEM_SERVICE_PATH;
            q.UseDefaultCredentials = true;

            // Create a sample project.
            Console.WriteLine("Creating project data");
            projectDs = new SvcProject.ProjectDataSet();

            // Create the project.
            SvcProject.ProjectDataSet.ProjectRow projectRow = projectDs.Project.NewProjectRow();
            projectRow.PROJ_UID = Guid.NewGuid();
             projectRow.PROJ_NAME = "Its a wonderful project at " + 
                DateTime.Now.ToShortDateString().Replace("/", "") + " " + 
                DateTime.Now.ToShortTimeString().Replace(":", "");
            projectRow.PROJ_TYPE = (int)PSLibrary.Project.ProjectType.Project;
            projectDs.Project.AddProjectRow(projectRow);

            // Add some tasks.
            SvcProject.ProjectDataSet.TaskRow taskOne = projectDs.Task.NewTaskRow();
            taskOne.PROJ_UID = projectRow.PROJ_UID;
            taskOne.TASK_UID = Guid.NewGuid();
            taskOne.TASK_NAME = "Task One";
            taskOne.TASK_START_DATE = System.DateTime.Now.AddDays(1);
            projectDs.Task.AddTaskRow(taskOne);

            SvcProject.ProjectDataSet.TaskRow taskTwo = projectDs.Task.NewTaskRow();
            taskTwo.PROJ_UID = projectRow.PROJ_UID;
            taskTwo.TASK_UID = Guid.NewGuid();
            taskTwo.TASK_NAME = "Task Two";
            taskTwo.TASK_START_DATE = System.DateTime.Now.AddDays(1);
            projectDs.Task.AddTaskRow(taskTwo);

            // Save the project to the database.
            Console.WriteLine("Saving project data to the server and checking out");
            jobId = Guid.NewGuid();
            projectSvc.QueueCreateProjectAndCheckOut(jobId,sessionId,SESSION_DESC, projectDs, false);
            WaitForQueue(q, jobId);

            // Add your additional changes here.

            // Check in the project so that it is available for more changes.
            Console.WriteLine("Checking in the project");
            jobId = Guid.NewGuid();
            projectSvc.QueueCheckInProject(jobId,projectRow.PROJ_UID,false, sessionId, SESSION_DESC);
            WaitForQueue(q, jobId);
         }
         catch (SoapException ex)
         {
            PSLibrary.PSClientError error = new PSLibrary.PSClientError(ex);
            PSLibrary.PSErrorInfo[] errors = error.GetAllErrors();
            string errMess = "==============================\r\nError: \r\n";
            for (int i = 0; i < errors.Length; i++)
            {
               errMess += "\n" + ex.Message.ToString() + "\r\n";
               errMess += "".PadRight(30, '=') + "\r\nPSCLientError Output:\r\n \r\n";
               errMess += errors[i].ErrId.ToString() + "\n";

               for (int j = 0; j < errors[i].ErrorAttributes.Length; j++)
               {
                  errMess += "\r\n\t" + errors[i].ErrorAttributeNames()[j] + ": " + errors[i].ErrorAttributes[j];
               }
               errMess += "\r\n".PadRight(30, '=');
            }
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(errMess);
         }
         catch (WebException ex)
         {
            string errMess = ex.Message.ToString() +
               "\n\nLog on, or check the Project Server Queuing Service";
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Error: " + errMess);
         }
         catch (Exception ex)
         {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Error: " + ex.Message);
         }
         finally
         {
            Console.ResetColor();
            Console.WriteLine("\r\n\r\nPress any key...");
            Console.ReadKey();
         }
      }
      static private void WaitForQueue(SvcQueueSystem.QueueSystem q, Guid jobId)
      {
         SvcQueueSystem.JobState jobState;
         const int QUEUE_WAIT_TIME = 2; // two seconds
         bool jobDone = false;
         string xmlError = string.Empty;
         int wait = 0;

         // Wait for the project to get through the queue.
         // Get the estimated wait time in seconds.
         wait = q.GetJobWaitTime(jobId);

         // Wait for it.
         Thread.Sleep(wait * 1000);
         // Wait until it is finished.

         do
         {
            // Get the job state.
            jobState = q.GetJobCompletionState(jobId, out xmlError);

            if (jobState == SvcQueueSystem.JobState.Success)
            {
               jobDone = true;
            }
            else
            {
               if (jobState == SvcQueueSystem.JobState.Unknown
               || jobState == SvcQueueSystem.JobState.Failed
               || jobState == SvcQueueSystem.JobState.FailedNotBlocking
               || jobState == SvcQueueSystem.JobState.CorrelationBlocked
               || jobState == SvcQueueSystem.JobState.Canceled)
               {
                  // If the job failed, error out.
                  throw (new ApplicationException("Queue request failed \"" + jobState + "\" Job ID: " + jobId + ".\r\n" + xmlError));
               }
               else
               {
                  Console.WriteLine("Job State: " + jobState + " Job ID: " + jobId);
                  Thread.Sleep(QUEUE_WAIT_TIME * 1000);
               }
            }
         }
         while (!jobDone);
      }
   }
}

関連項目

参照先

Project クラス

Project メンバー

WebSvcProject 名前空間