Project::QueueDeleteFromProject method
Deletes the specified project entities.
Namespace: WebSvcProject
Assembly: ProjectServerServices (in ProjectServerServices.dll)
Parameters
- jobUid
- Type: System.Guid
The GUID of the queue job.
- sessionUid
- Type: System.Guid
The GUID of the session in which the queue job is submitted.
- projectUid
- Type: System.Guid
The GUID of the project.
- projectEntityUids
- Type: []
An array of GUIDs for the project entities to delete.
QueueDeleteFromProject is an asynchronous method that sends a message to the Project Server Queuing Service.
Note |
|---|
QueueDeleteFromProject does not delete custom field values. For an example of how to delete a custom field, see QueueUpdateProject. |
Project Server Permissions
Permission | Description |
|---|---|
Allows a user to save the specified project. Category permission. |
The following sample code creates a sample project, saves the project to the server but leaves it checked out, and then deletes a task from the project.
For critical information about running this code sample, see Prerequisites for ASMX-based code samples in Project 2013.
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.QueueDeleteFromProject { class Program { [STAThread] static void Main(string[] args) { try { #region Setup const string PROJECT_SERVER_URI = "http://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; #endregion #region Create Project // Create the project. Console.WriteLine("Creating project data"); SvcProject.ProjectDataSet.ProjectRow projectRow = projectDs.Project.NewProjectRow(); projectRow.PROJ_UID = Guid.NewGuid(); projectRow.PROJ_NAME = "Its a wonderful project at " + 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. 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); #endregion #region Delete from project // Delete the last task on our project. Console.WriteLine("Deleting a task from the project"); jobId = Guid.NewGuid(); projectSvc.QueueDeleteFromProject(jobId, sessionId, projectRow.PROJ_UID,new Guid[] { taskTwo.TASK_UID}); WaitForQueue(q, jobId); #endregion #region Check in project // Check in the project. Console.WriteLine("Checking in the project"); jobId = Guid.NewGuid(); projectSvc.QueueCheckInProject(jobId, projectRow.PROJ_UID, false, sessionId, SESSION_DESC); WaitForQueue(q, jobId); #endregion } #region Exception Handling and Final 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(); } #endregion } 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); } } }
Note