Freigeben über


Project.QueueAddToProject-Methode

Projektentitäten, die in der ProjectDataSet angegeben sind, mithilfe eines vorhandenen sessionUid für ein Projekt ausgecheckt erstellt.

Namespace:  WebSvcProject
Assembly:  ProjectServerServices (in ProjectServerServices.dll)

Syntax

'Declaration
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Project/QueueAddToProject", 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 QueueAddToProject ( _
    jobUid As Guid, _
    sessionUid As Guid, _
    dataset As ProjectDataSet, _
    validateOnly As Boolean _
)
'Usage
Dim instance As Project
Dim jobUid As Guid
Dim sessionUid As Guid
Dim dataset As ProjectDataSet
Dim validateOnly As Boolean

instance.QueueAddToProject(jobUid, sessionUid, _
    dataset, validateOnly)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Project/QueueAddToProject", 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 QueueAddToProject(
    Guid jobUid,
    Guid sessionUid,
    ProjectDataSet dataset,
    bool validateOnly
)

Parameter

  • jobUid
    Typ: System.Guid

    Die GUID des Warteschlangenauftrags Warteschlange.

  • sessionUid
    Typ: System.Guid

    Die GUID der Sitzung ein, in der der Warteschlangenauftrag gesendet wird.

  • validateOnly
    Typ: System.Boolean

    Wenn True, nur die eingegebenen Daten überprüft und keine Aktion ausgeführt wird.

Hinweise

QueueAddToProject ist eine asynchrone Methode, die eine Nachricht an die Project Server-Warteschlangendienst sendet.

Hinweis

Beim Erstellen oder ein Projekts aktualisieren, kann die PSI gleichzeitig bis zu 1000 Zeilen der Daten verarbeiten. Wenn die Gesamtzahl der Zeilen mit neuen oder aktualisierten Daten in allen Tabellen eines ProjectDataSet 1000 überschreitet, wird die PSI der ProjectExceededItemsLimit -Fehler zurückgegeben.

Wenn Sie eine Aufgabe zu einem Projekt mithilfe der PSI hinzufügen, legen Sie die TASK_WBS -Eigenschaft nicht. Die TASK_WBS -Eigenschaft ist schreibgeschützt, obwohl es mit Lese-/Schreibzugriff in die PSI markiert ist. Wenn Sie eine Aufgabe mit der TASK_WBS -Eigenschaft auf einen bestimmten Wert hinzufügen, wird von Project Professional ignoriert den Wert aus der PSI festgelegt und weist einen Wert entsprechend der Position des Vorgangs Gliederung, wenn Sie das Projekt öffnen. Um das Ergebnis in Project Professional angezeigt wird, überprüfen Sie den PSP-Code-Wert auf der Registerkarte Erweitert des Dialogfelds Informationen zum Vorgang.

QueueAddToProject kann nicht mit einer realen Aufgabe eine Aufgabe ein Nullverweis (Nothing in Visual Basic) ändern. Wenn Sie das Erstellen von Aufgaben mithilfe von Project Professional und lassen Sie eine oder mehrere leere Zeilen zwischen einige der Aufgaben, sind die leeren Zeilen beispielsweise ein Nullverweis (Nothing in Visual Basic) Aufgaben.

Die Methoden der Project -Klasse, wie etwa QueueAddToProject, können nicht erstellen, bearbeiten oder Löschen von Kostenressourcen. Wenn die ProjectDataSet im Parameter dataset Kostenressource enthält, gibt die Methode den Fehler ResourceCannotCreateCostResource 2076. Sie können die CreateResources -Methode zum Erstellen von Kostenressourcen verwenden, aber Resource Klassenmethoden nicht bearbeitet werden. Weitere Informationen finden Sie unter What the PSI does and does not do.

Project Server-Berechtigungen

Berechtigung

Beschreibung

SaveProject

Ermöglicht einem Benutzer das angegebene Projekt zu speichern. Kategorieberechtigung.

Beispiele

Das folgende Beispiel erstellt ein Beispielprojekt verwenden, checkt das Projekt, fügt eine neue Aufgabe hinzu, und das Projekt wieder eincheckt.

Wichtige Informationen zum Ausführen dieses Codebeispiel finden Sie unter Prerequisites for Reference Code Samples.

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.QueueAddToProject
{
   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 add to project utility";

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

            // 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 Sample project");
            projectId = CreateSampleProject(projectSvc, q);
            Console.WriteLine("Created " + projectId.ToString());
           
            // Check out the project.
            Console.WriteLine("Checking out Sample project");
            projectSvc.CheckOutProject(projectId, sessionId, SESSION_DESC);

            /*
             *  Add some items to an existing, checked-out project.
             */
            // Create a dataset to hold the new items.
            Console.WriteLine("Creating new data");
            SvcProject.ProjectDataSet newProjectData = new SvcProject.ProjectDataSet();
            // Add a new task.
            SvcProject.ProjectDataSet.TaskRow newTask = newProjectData.Task.NewTaskRow();
            newTask.PROJ_UID = projectId;
            newTask.TASK_UID = Guid.NewGuid();
            newTask.TASK_NAME = "An added Task";
            newProjectData.Task.AddTaskRow(newTask);
            
            // Add to the project by using the current sessionID.
            Console.WriteLine("Adding new data");
            jobId = Guid.NewGuid();
            projectSvc.QueueAddToProject(jobId,sessionId,newProjectData,false);
            WaitForQueue(q, jobId);

            // Check in the project. 
            Console.WriteLine("Checking in the project");
            jobId = Guid.NewGuid();
            projectSvc.QueueCheckInProject(jobId, projectId, 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);
      }
      static private Guid CreateSampleProject(SvcProject.Project projectSvc, SvcQueueSystem.QueueSystem q)
      {
         SvcProject.ProjectDataSet projectDs = new SvcProject.ProjectDataSet();
         Guid jobId;
         // 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();
         // The Task Duration format must be specified.
         taskOne.TASK_DUR_FMT = (int)PSLibrary.Task.DurationFormat.Day;
         taskOne.TASK_DUR = 4800;  // 8 hours in duration units (minute/10)
         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();
         // The Task Duration format must be specified.
         taskTwo.TASK_DUR_FMT = (int)PSLibrary.Task.DurationFormat.Day;
         taskTwo.TASK_DUR = 4800;  // 8 hours in duration units (minute/10)
         taskTwo.TASK_NAME = "Task Two";
         taskTwo.TASK_START_DATE = System.DateTime.Now.AddDays(1);
         projectDs.Task.AddTaskRow(taskTwo);

         // Save the project to the database.
         jobId = Guid.NewGuid();
         projectSvc.QueueCreateProject(jobId, projectDs, false);
         WaitForQueue(q, jobId);
         return projectRow.PROJ_UID;
      }
   }
}

Siehe auch

Referenz

Project Klasse

Project-Member

WebSvcProject-Namespace