Утвердить Задача рабочего процесса SharePoint с использованием веб-служб / объектной модели SharePoint

Я создал рабочий процесс в SharePoint Designer и связал его со списком. Рабочий процесс создает процесс утверждения, поэтому SharePoint создает задачу в списке задач, чтобы пользователь мог утвердить или отклонить.

Что мне нужно сделать, так это утвердить или отклонить задачу, не открывая задачу в списке задач. После некоторого исследования я понял, что могу использовать веб-службы SharePoint. 1- Возможно ли утвердить задачу рабочего процесса SharePoint Web Services?
2- Можете ли вы показать мне пример того, как утвердить задачу, например, какую службу и метод вызывать и каковы должны быть параметры?

Обновление
Я использовал следующий XML-код для настройки рабочего процесса для завершения:

 batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" // Also used Moderate
                + "<Field Name='ID'>115</Field>"
                + "<Field Name='Status'>Completed</Field>"
                + "<Field Name='FormData'>Completed</Field>" // Also used Approved
                + "<Field Name='WorkflowOutcome'>Approved</Field>"
                + "<Field Name='Completed'>True</Field>"
                + "<Field Name='PercentComplete'>1</Field>"
                + "<Field Name='_ModerationStatus'>0</Field>"
                + "</Method>";

Элемент списка задач обновляется, но WorkflowOutcome остается пустым, и рабочий процесс не переходит к следующему шагу.
Что еще мне не хватает?

Обновление № 2
Я подозреваю, что у элемента списка задач есть расширенные свойства. Для элемента, который был завершен с использованием пользовательского интерфейса, ExtendedProperties показывает ws_TaskStatus = 'Approved'. Однако для элемента, утвержденного с использованием кода, ws_TaskStatus не существует.

Обновление №3
Из сообщения MSDN мне сказали использовать Workflow.asmx вместо Lists.asmx.
Я использовал следующий код:

WorkflowService.Workflow listProxy = new WorkflowService.Workflow();
listProxy.Url = "http://<server_name>/_vti_bin/workflow.asmx";
listProxy.UseDefaultCredentials = true;

int todoID = 118;
Guid tasklistID = new Guid("{79ABFDE7-0398-4AD7-918A-0D40204E7726}");
string itemURL = "http://<server_name>/TestLibrary/volshext.log";
XmlDocument taskData = new XmlDocument();
taskData.Load(@"..\..\TaskData.xml");

try
{
   XmlNode response = listProxy.AlterToDo(itemURL, todoID, tasklistID, taskData.DocumentElement);
   Console.WriteLine(response.InnerText);
}

XML, который я использую для утверждения задачи, -

<my:myFields xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD" >
 <my:TaskStatus>#</my:TaskStatus>
 <my:Comments />
 <my:DelegateTo />
 <my:NewDescription>Please approve Workflow Demo</my:NewDescription>
 <my:NewDueDate />
 <my:RequestTo />
 <my:Decline>0</my:Decline>
 <my:dcr>0</my:dcr>
 <my:Status>Completed</my:Status>
</my:myFields>

Но снова задача была обновлена, но рабочий процесс не продвинулся вперед.

Обновление №4
Я сделал последняя проба с серверной объектной моделью SharePoint, однако, опять же, задача обновлена, но рабочий процесс не продвигается вперед.
Вот мой код:

SPSite site = new SPSite("http://sitenamehere/");
using (SPWeb web = site.OpenWeb())
{
   SPList list = web.Lists["Shared Documents"];
   //SPListItem item = list.GetItemById(18);
   SPListItem item = list.GetItemByUniqueId(new Guid("5300d16e-94f8-4338-8206-4a57ab7c369b"));
   SPWorkflow workflow = item.Workflows[0];
   SPWorkflowTask task = workflow.Tasks[0];
   Hashtable ht = new Hashtable();
ht[SPBuiltInFieldId.Completed] = "TRUE"; ht["Completed"] = "TRUE"; ht[SPBuiltInFieldId.PercentComplete] = 1.0f; ht["PercentComplete"] = 1.0f; ht["Status"] = "Completed"; ht[SPBuiltInFieldId.TaskStatus] = SPResource.GetString(new CultureInfo((int)task.Web.Language, false), Strings.WorkflowStatusCompleted, new object[0]); //ht["TaskStatus"] = "#"; //ht["ows_TaskStatus"] = "Approved"; //ht["FormData"] = SPWorkflowStatus.Completed; //ht["Outcome"] = "Approved"; //task.ModerationInformation.Status = SPModerationStatusType.Approved;
web.AllowUnsafeUpdates = true; SPWorkflowTask.AlterTask((task as SPListItem), ht, true); }
6
задан sh_kamalh 21 February 2011 в 13:00
поделиться