我试图以不同的方式更新OData__ModerationStatus列的值AKA“Approval Status”,但只有一个有效。使用VS 2013工具箱中的WorkFlow更新项活动,您可以看到它在标头中缺少X-RequestDigest,并且不允许更新批准状态并导致安全验证错误。我相信错误与丢失的标题有关。以下是UpdateListItem的代码。
RequestHeaders = (InArgument<DynamicValue>) ((Activity<DynamicValue>) new SetDynamicValueProperties()
{
Properties = {
{
"If-Match",
(InArgument) new InArgument<string>("*")
},
{
"X-HTTP-Method",
(InArgument) new InArgument<string>("MERGE")
},
{
"Accept",
(InArgument) new InArgument<string>("application/json;odata=verbose")
},
{
"Content-Type",
(InArgument) new InArgument<string>("application/json;odata=verbose")
}
}
}),
RequestContent = (InArgument) listItemProperties,
所以我使用了2个SendHttp活动,一个使用带有url siteurl / _api / contextinfo的POST获取X-RequestDigest第二个POST使用以下标题&amp;身体。 HEADER:
X-RequestDigest:[FormDigestValue from the previous POST]
接受:application / json;的OData =冗长 Content-Type:application / json;的OData =冗长 IF-MATCH:* X-HTTP-Method:MERGE
BODY:[我试过以下3]
String.Format("{ '__metadata': { 'type': '" + type + "' },'OData__ModerationStatus':'0' }")
{'__ metaadata':{'type':'SP.Data.Shared_x0020_DocumentsItem'}, 'OData__ModerationStatus':'0'}
使用BuildDynamicValue活动来设置RequestContent。
所有三个错误都与Microsoft.SharePoint.SPException:文本值无效。文本字段包含无效数据。如果我使用其他任何字段,如果我使用Fiddler或Advanced Rest Client,它会更新值。
有人可以通过REST调用帮助我理解或解释它的工作原理,但我不能使用VS和UpdateItem / HTTPSend来设置值。
我添加了一个图片,其中包含更新标题的成功工作流程
答案 0 :(得分:0)
我们能够让方案有效。 进一步调查后,我们可以看到工作流程没有批准权限。 我们可以通过捕获fiddler中用于工作流的REST调用来看到这一点
{&#34;错误&#34;:{&#34;代码&#34;:&#34; -2147024891,System.UnauthorizedAccessException&#34;,&#34;消息&#34;:{&#34 ; lang&#34;:&#34; en-US&#34;,&#34; value&#34;:&#34;访问被拒绝。您无权执行此操作或访问此资源。&#34;},&#34; innererror&#34;:{&#34; message&#34;:&#34; 0x80070005owssvr.dll :(未解决的符号,module offset = 0000000000015BC3)at 0x000007F988885BC3 \ nMicrosoft.SharePoint.Library.ni.dll
VS 2013 SP 2013工作流程非常类似于提供商托管的应用程序,并且具有默认权限,不包括批准项目。
执行以下步骤以解决此问题
•转到“站点设置”→“站点应用程序权限” 找到应用程序工作流程作为复制第一个guid,如下所示
•转到http:///_layouts/15/appInv.aspx。 在App ID中输入上一步中复制的Guid,然后单击Lookup。 这将填充Title,App Domain和Redirect URL列。 复制以下权限请求XML(执行 NOT 更改范围)
<AppPermissionRequests>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" /></AppPermissionRequests>