del método Project.QueueAddToProject
Crea entidades de proyecto que se especifican en la ProjectDataSet con una existente sessionUid para un proyecto desprotegido.
Espacio de nombres: WebSvcProject
Ensamblado: ProjectServerServices (en ProjectServerServices.dll)
Sintaxis
'Declaración
<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 _
)
'Uso
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
)
Parámetros
jobUid
Tipo: System.GuidEl GUID de la tarea de la cola.
sessionUid
Tipo: System.GuidEl GUID de la sesión en la que se envía el trabajo en cola.
dataset
Tipo: WebSvcProject.ProjectDataSetContiene las entidades de proyecto para crear.
validateOnly
Tipo: System.BooleanSi True, solo valida los datos de entrada y no lleve a cabo la acción.
Comentarios
QueueAddToProject es un método asincrónico que envía un mensaje para el servicio de cola de Project Server.
Nota
Al crear o actualizar un proyecto, puede procesar la PSI hasta 1000 filas de datos al mismo tiempo. Si el número total de filas de datos nuevos o actualizados de todas las tablas de ProjectDataSet superior a 1000, la PSI devuelve el error ProjectExceededItemsLimit .
Cuando se agrega una tarea a un proyecto mediante el uso de la interfaz PSI, no establezca la propiedad TASK_WBS . La propiedad TASK_WBS es de sólo lectura, aunque lo haya marcado como lectura y escritura en la PSI. Si agrega una tarea con la propiedad TASK_WBS establecida en un valor especificado, Project Professional omite el valor establecido de la PSI y asigna un valor según la posición de esquema de tarea cuando se abre el proyecto. Para ver el resultado en Project Professional, compruebe el valor de código EDT en la ficha Avanzadas del cuadro de diálogo Información de la tarea.
QueueAddToProject no se puede cambiar una tarea de una referencia null (Nothing en Visual Basic) a una tarea real. Por ejemplo, si la creación de tareas mediante el uso de Project Professional y deje una o varias líneas en blanco entre algunas de las tareas, las líneas en blanco son tareas de una referencia null (Nothing en Visual Basic) .
Los métodos de clase Project , como QueueAddToProject, no se pueden crear, editar o eliminar recursos de costo. Si el ProjectDataSet en el parámetro dataset incluye un recurso de costo, el método devuelve el error ResourceCannotCreateCostResource 2076. Puede usar el método CreateResources para crear los recursos de costo, pero los métodos de la clase Resource no pueden editarlos. Para obtener más información, vea What the PSI does and does not do.
Permisos de Project Server
Permiso |
Descripción |
---|---|
Permite al usuario guardar el proyecto especificado. Permiso de categoría. |
Ejemplos
El ejemplo siguiente crea un proyecto de ejemplo para usar, desprotege el proyecto, agrega una nueva tarea a la base de datos y vuelve al proyecto.
Para obtener información crítica acerca de cómo ejecutar este ejemplo de código, vea 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;
}
}
}