Project.QueueCheckInProject Method
Office 2010
Checks in the specified project.
Namespace: [Project Web service]
Service reference: http://ServerName:32843/[Project Service Application GUID]/PSI/Project.svc
Web service reference: http://ServerName/ProjectServerName/_vti_bin/PSI/Project.asmx?wsdl
[SoapDocumentMethodAttribute("http://schemas.microsoft.com/office/project/server/webservices/Project/QueueCheckInProject", RequestNamespace = "http://schemas.microsoft.com/office/project/server/webservices/Project/", ResponseNamespace = "http://schemas.microsoft.com/office/project/server/webservices/Project/", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)] public void QueueCheckInProject( Guid jobUid, Guid projectUid, bool force, Guid sessionUid, string sessionDescription )
Parameters
- jobUid
- Type: System.Guid
The GUID of the queue job.
- projectUid
- Type: System.Guid
The GUID of the project.
- force
- Type: System.Boolean
If true, an administrator or the project owner can force check in of the project.
- sessionUid
- Type: System.Guid
The GUID of the session in which the queue job is submitted.
- sessionDescription
- Type: System.String
The description of the session.
QueueCheckInProject is an asynchronous method that sends a message to the Project Server Queuing Service. QueueCheckInProject forces a scheduling operation if any changes are made to the database.
Project Server Permissions
Permission | Description |
---|---|
Allows a user to save the specified project. Category permission. | |
An admin must have the Manage Check Ins global permission to check in another user's project. |
The following example creates a sample project to use, checks out the project, adds a new task to it, and checks the project back in.
For critical information about running this code sample, see Prerequisites for ASMX-Based 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.QueueCheckInProject { class Program { [STAThread] static void Main(string[] args) { try { 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; Guid projectId; // Set up the web service objects. ProjectWebSvc.Project projectSvc = new ProjectWebSvc.Project(); ProjectWebSvc.ProjectDataSet projectDs = new ProjectWebSvc.ProjectDataSet(); projectSvc.Url = PROJECT_SERVER_URI + PROJECT_SERVICE_PATH; projectSvc.Credentials = CredentialCache.DefaultCredentials; QueueSystemWebSvc.QueueSystem q = new QueueSystemWebSvc.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); // Create a dataset to hold the new items. Console.WriteLine("Creating new data"); ProjectWebSvc.ProjectDataSet newProjectData = new ProjectWebSvc.ProjectDataSet(); // Add a new task. ProjectWebSvc.ProjectDataSet.TaskRow newTask = newProjectData.Task.NewTaskRow(); newTask.PROJ_UID = projectId; newTask.TASK_UID = Guid.NewGuid(); // The Task Duration format must be specified. newTask.TASK_DUR_FMT = (int)PSLibrary.Task.DurationFormat.Day; newTask.TASK_DUR = 4800; // 8 hours in duration units (minute/10) 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(QueueSystemWebSvc.QueueSystem q, Guid jobId) { QueueSystemWebSvc.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 == QueueSystemWebSvc.JobState.Success) { jobDone = true; } else { if (jobState == QueueSystemWebSvc.JobState.Unknown || jobState == QueueSystemWebSvc.JobState.Failed || jobState == QueueSystemWebSvc.JobState.FailedNotBlocking || jobState == QueueSystemWebSvc.JobState.CorrelationBlocked || jobState == QueueSystemWebSvc.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(ProjectWebSvc.Project projectSvc, QueueSystemWebSvc.QueueSystem q) { ProjectWebSvc.ProjectDataSet projectDs = new ProjectWebSvc.ProjectDataSet(); Guid jobId; // Create the project. ProjectWebSvc.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. ProjectWebSvc.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); ProjectWebSvc.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; } } }
Show: