Метод Project.QueueCreateProjectAndCheckOut
Создает проект с указанной сущности и сохраняет проект в базе данных черновиков.
Пространство имен: WebSvcProject
Сборка: ProjectServerServices (в ProjectServerServices.dll)
Синтаксис
'Декларация
<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 _
)
'Применение
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
)
Параметры
jobUid
Тип: System.GuidGUID задания очереди.
sessionUid
Тип: System.GuidИдентификатор GUID сеанса, в котором отправляется задания очереди.
sessionDescription
Тип: System.StringОписание этого сеанса.
dataset
Тип: WebSvcProject.ProjectDataSetСодержит данные проекта.
validateOnly
Тип: System.BooleanЕсли trueтолько проверяет входные данные, но не выполняет действие.
Замечания
Используйте QueueCreateProjectAndCheckOut , если требуется внести дополнительные изменения в проект в данном сеансе. Эта команда сохраняет вызов на сервер. Если вы не хотите внести дополнительные изменения, используйте QueueCreateProject.
QueueCreateProjectAndCheckOut представляет собой асинхронный метод, который отправляет сообщение в службу очередей Project Server.
Примечание
Так как PSI не поддерживает проверки подлинности на основе утверждений, метод QueueCreateProjectAndCheckOut не поддерживает тип корпоративного проекта (типа корпоративного проекта), которое использует определения рабочего процесса для Windows Workflow Foundation 4 (WF4).
PSI можно использовать для создания проектов с EPTs, либо нет рабочего процесса или использовать определение WF3.5. Создание проекта с помощью типа корпоративного проекта, который имеет определение WF4, используется CSOM.
Методы класса Project , такие как QueueCreateProjectAndCheckOut, невозможно создание, изменение и удаление ресурсов. Если ProjectDataSet с помощью параметра dataset включает в себя стоимость ресурса, метод возвращает ошибку ResourceCannotCreateCostResource 2076. Можно использовать метод CreateResources для создания ресурсов, но методы класса Resource не могут изменять их. Для получения дополнительных сведений см What the PSI does and does not do.
Интерфейс Project Server (PSI) нельзя использовать для создания локальных настраиваемых полей в проектах. Тем не менее PSI поддерживает редактирование значения локальных настраиваемых полей для задач, ресурсов и назначений.
При создании ProjectDataSet.TaskRow, необходимо указать TASK_DUR_FMT. В противном случае последующего использования этого проекта в Project Professional может привести к непредвиденному поведению, включая возможность потери данных.
Любые изменения свойств корпоративных ресурсов в ProjectDataSet.ProjectResourceRow будут потеряны при последующем Project Professional обновляет данные из Project Server.
При добавлении задачи в ProjectDataSetTASK_WBS свойство не задано. Свойство TASK_WBS — только для чтения, несмотря на то, что оно будет помечено как чтение и запись в PSI. При добавлении задачи с установленным свойством TASK_WBS с заданным значением Project Professional игнорирует значение, установленное в PSI и назначает значение в соответствии с позиции структуры задач при открытии проекта. Для просмотра результатов в Project Professional, проверьте значение кода WBS на вкладке Дополнительно диалогового окна Сведения о задаче.
Разрешения Project Server
Разрешение |
Описание |
---|---|
Позволяет пользователю создавать новые глобальное разрешение на сервере Project Server. Применяется только к обычных проектов, не предложений. |
|
Позволяет пользователю для открытия проекта. Разрешение категории. Применяется только к проектам, созданная на основе корпоративного шаблона и инициированных страница сведений о проекте (PDP). |
|
Позволяет пользователям для сохранения проекта. Разрешение категории. Применяется только к проектам, инициированных страница сведений о проекте (PDP). |
|
Позволяет пользователю изменять проекта. Разрешение категории. Применяется только к проектам, инициированных страница сведений о проекте (PDP). |
Примеры
Следующий пример создает проект, сохраняет на сервере, но оставляет его извлечен и затем проверка проекта в.
Важные сведения о запуске в этом примере кода Необходимые условия для образцов кода на основе ASMX в 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.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);
}
}
}