Partager via


Project.QueueCreateProjectAndCheckOut - Méthode

Crée un projet avec les entités spécifiées et tenir à jour le projet en cours d'extraction dans la base de données de brouillons.

Espace de noms :  WebSvcProject
Assembly :  ProjectServerServices (dans ProjectServerServices.dll)

Syntaxe

'Déclaration
<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 _
)
'Utilisation
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
)

Paramètres

  • jobUid
    Type : System.Guid

    Le GUID de la tâche de file d'attente.

  • sessionUid
    Type : System.Guid

    Le GUID de la session dans laquelle le travail en file d'attente est envoyé.

  • sessionDescription
    Type : System.String

    Description de la session.

  • validateOnly
    Type : System.Boolean

    Si true, uniquement valide les données d'entrée et n'effectue pas l'action.

Remarques

Utilisez QueueCreateProjectAndCheckOut lorsque vous souhaitez apporter des modifications supplémentaires au projet dans cette session. Cela enregistre un appel vers le serveur. Si vous ne souhaitez pas apporter des modifications supplémentaires, utilisez QueueCreateProject.

QueueCreateProjectAndCheckOut est une méthode asynchrone qui envoie un message vers le Service de mise en attente de Project Server.

Notes

Car la PSI ne gère pas l'authentification basée sur les revendications, la méthode QueueCreateProjectAndCheckOut ne prend pas en charge un type de projet d'entreprise (TPE) qui utilise une définition de flux de travail pour Windows Workflow Foundation 4 (WF4).

Vous pouvez utiliser l'interface PSI pour créer des projets avec TPE qui n'ont aucun flux de travail ou utilise une définition de WF3.5 héritée. Pour créer un projet avec un TPE qui dispose d'une définition de WF4, utilisez le modèle CSOM.

Les méthodes de classe Project , tel que QueueCreateProjectAndCheckOut, ne peuvent pas créer, modifier ou supprimer des ressources de coûts. Si le ProjectDataSet dans le paramètre dataset inclut une ressource de coût, la méthode renvoie l'erreur ResourceCannotCreateCostResource 2076. Vous pouvez utiliser la méthode CreateResources pour créer des ressources de coûts, mais les méthodes de la classe Resource ne peut pas les modifier. Pour plus d'informations, voir What the PSI does and does not do.

Vous ne pouvez pas utiliser l'Interface PSI (Project Server) pour créer des champs personnalisés locaux dans les projets. Toutefois, la PSI prend en charge la modification des valeurs de champ personnalisé local sur tâches, ressources et affectations.

Lorsque vous créez un ProjectDataSet.TaskRow, vous devez spécifier TASK_DUR_FMT. Dans le cas contraire, une utilisation ultérieure de ce projet dans Project Professionnel peut entraîner un comportement imprévisible, y compris la perte de données possibles.

Toutes les modifications apportées aux propriétés de ressource d'entreprise dans ProjectDataSet.ProjectResourceRow seront perdues la prochaine fois que Project Professional actualise les données à partir de Project Server.

Lorsque vous ajoutez une tâche à un ProjectDataSet, ne définissez pas la propriété TASK_WBS . La propriété TASK_WBS est en lecture seule, même si elle est marquée comme en lecture/écriture de la PSI. Si vous ajoutez une tâche avec la propriété TASK_WBS définie sur une valeur spécifiée, Project Professionnel ignore la valeur définie à partir de l'interface PSI et affecte une valeur en fonction de la position hiérarchique de tâche lorsque vous ouvrez le projet. Pour afficher le résultat dans Project Professionnel, vérifiez la valeur de code WBS dans l'onglet Avancé de la boîte de dialogue Informations sur la tâche.

Autorisations Project Server

Autorisation

Description

NewProject

Permet à un utilisateur de créer une nouvelle autorisation globale sur Project Server. S'applique uniquement aux projets régulières, pas les propositions.

OpenProject

Permet à un utilisateur d'ouvrir un projet. Autorisation de catégorie. S'applique uniquement aux projets qui sont créés à partir d'un modèle d'entreprise et initiées par une page de détails de projet (PDP).

SaveProject

Permet à un utilisateur d'enregistrer un projet. Autorisation de catégorie. S'applique uniquement aux projets qui sont démarrés par une page de détails de projet (PDP).

EditProjectProperties

Permet à un utilisateur de modifier un projet. Autorisation de catégorie. S'applique uniquement aux projets qui sont démarrés par une page de détails de projet (PDP).

Exemples

L'exemple suivant crée un projet, qu'il enregistre sur le serveur, mais laisse extrait et vérifie ensuite le projet.

Pour plus d'informations sur l'exécution de cet exemple de code critiques, voir 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);
      }
   }
}

Voir aussi

Référence

Project classe

Project - Membres

WebSvcProject - Espace de noms