无法使用HTTPSEND更新OData__ModerationStatus

时间:2015-07-09 14:56:44

标签: rest visual-studio-2013 http-headers workflow-manager-1.x

我试图以不同的方式更新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来设置值。

我添加了一个图片,其中包含更新标题的成功工作流程 enter image description here

1 个答案:

答案 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,如下所示 Site Permissions screenshot

•转到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>

site perm 2 lookup

site perm 3 approve •再次测试工作流程并开始工作。