gpt4 book ai didi

sharepoint-2010 - 使用 SharePoint Web 服务/对象模型批准 SharePoint 工作流任务

转载 作者:行者123 更新时间:2023-12-04 13:54:59 28 4
gpt4 key购买 nike

我创建了一个工作流是 SharePoint Designer,并将其与一个列表相关联。工作流会创建一个批准过程,因此 SharePoint 在“任务”列表中创建一个任务,以便用户可以批准或拒绝。

我需要做的是在不打开任务列表中的任务的情况下批准或拒绝任务。经过一番研究,我发现我可以使用 SharePoint Web Services。但是我感到很迷茫,因为我不知道哪个服务,例如Lists.asmx,以及哪种方法,例如UpdateListItems,调用。

有人可以指导我完成以下操作:
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。对于使用 UI 完成的项目,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);
}

最佳答案

经过大量试验和调查后,我只有以下代码可以批准任务

SPSite site = new SPSite("http://servername/");
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["TestList"];
SPListItem item = list.GetItemById(22);
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[SPBuiltInFieldId.WorkflowOutcome] = "Approved";
ht["TaskStatus"] = "Approved";
ht["FormData"] = SPWorkflowStatus.Completed;

web.AllowUnsafeUpdates = true;
SPWorkflowTask.AlterTask((task as SPListItem), ht, true);
}

我怀疑 ht["TaskStatus"] = "Approved";是那个属性解决了它。无论如何,我将尝试缩小需要更改的属性集。

关于sharepoint-2010 - 使用 SharePoint Web 服务/对象模型批准 SharePoint 工作流任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4814828/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com