Freigeben über


Project.QueueCreateProjectAndCheckOut-Methode

Erstellt ein Projekt mit den angegebenen Entitäten und vermeidet eine Verbindung zwischen das Projekt in der Datenbank Entwürfe ausgecheckt.

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

Syntax

'Declaration
<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 _
)
'Usage
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
)

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.

  • sessionDescription
    Typ: System.String

    Die Beschreibung der Sitzung.

  • validateOnly
    Typ: System.Boolean

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

Hinweise

Wenn Sie das Projekt in dieser Sitzung zusätzliche Änderungen vornehmen möchten, verwenden Sie QueueCreateProjectAndCheckOut . Dadurch wird einen Aufruf an den Server gespeichert. Wenn Sie keine weitere Änderungen vornehmen möchten, verwenden Sie QueueCreateProject.

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

Hinweis

Da die PSI Forderungsauthentifizierung nicht unterstützt, unterstützt die QueueCreateProjectAndCheckOut -Methode keine Enterprise-Projekttyp (EPT), der eine Workflowdefinition für Windows Workflow Foundation 4 (WF4) verwendet wird.

Die PSI können zum Erstellen von Projekten mit EPTs, die entweder keine Workflows oder verwenden Sie eine Vorversion WF3.5 Definition. Zum Erstellen eines Projekts mit einer EPT, die eine Definition WF4 hat, verwenden Sie das CSOM.

Die Methoden der Project -Klasse, wie etwa QueueCreateProjectAndCheckOut, 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.

Sie können nicht die Project Server Interface (PSI) verwenden, um lokale benutzerdefinierte Felder in Projekten erstellen. Die PSI unterstützt jedoch Werte für lokale benutzerdefinierte Felder auf Aufgaben, Ressourcen und Zuordnungen bearbeiten.

Wenn Sie eine ProjectDataSet.TaskRowerstellen, müssen Sie TASK_DUR_FMTangeben. Andernfalls kann späteren Verwendung dieses Projekts in Project Professional unvorhersehbares Verhalten, einschließlich der möglichen Datenverlust führen.

Alle Änderungen an Enterprise-Ressource-Eigenschaften in ProjectDataSet.ProjectResourceRow verloren das nächste Mal, das Project Professional die Daten aus Project Server aktualisiert.

Wenn Sie eine ProjectDataSeteine Aufgabe 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.

Project Server-Berechtigungen

Berechtigung

Beschreibung

NewProject

Ermöglicht einem Benutzer eine neue globale Berechtigung in Project Server zu erstellen. Gilt nur für reguläre Projekte, keine Vorschläge.

OpenProject

Ermöglicht einem Benutzer das Öffnen eines Projekts. Kategorieberechtigung. Gilt nur für Projekte, die aus einer Enterprise-Vorlage erstellt und eine Projektdetailseite (PDP) initiiert werden.

SaveProject

Ermöglicht einem Benutzer, ein Projekt zu speichern. Kategorieberechtigung. Gilt nur für Projekte, die durch eine Projektdetailseite (PDP) initiiert werden.

EditProjectProperties

Ermöglicht einem Benutzer das Bearbeiten eines Projekts. Kategorieberechtigung. Gilt nur für Projekte, die durch eine Projektdetailseite (PDP) initiiert werden.

Beispiele

Im folgenden Beispiel wird ein Projekt erstellt, speichert es auf dem Server, jedoch bleibt ausgecheckt und das Projekt eingecheckt.

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.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);
      }
   }
}

Siehe auch

Referenz

Project Klasse

Project-Member

WebSvcProject-Namespace