1

我尝试以 3 种不同的方式更新 OData__ModerationStatus 列 AKA“批准状态”的值,但只有一种有效。使用 VS 2013 工具箱中的 WorkFlow update Item 活动,您可以看到它在标头中缺少 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 使用以下标头和正文。标题:

X-RequestDigest:[FormDigestValue from the previous POST]

接受:应用程序/json;odata=详细内容类型:应用程序/json;odata=verbose IF-MATCH: * X-HTTP-Method: MERGE

身体:[我尝试了以下3个]

String.Format("{ '__metadata': { 'type': '" + type + "' },'OData__ModerationStatus':'0' }")

{ '__metadata': { 'type': 'SP.Data.Shared_x0020_DocumentsItem' }, 'OData__ModerationStatus':'0' }

使用 BuildDynamicValue 活动来设置 RequestContent。

这三个都带有 Microsoft.SharePoint.SPException 错误:文本值无效。文本字段包含无效数据。如果我使用它工作的任何其他字段,如果我使用 Fiddler 或 Advanced Rest Client 它会更新值。

有人可以帮助我理解或解释为什么它可以通过 REST 调用工作,但我不能使用 VS 和 UpdateItem/HTTPSend 来设置值。

我已经包含了一个成功的工作流程更新标题的图像 在此处输入图像描述

4

1 回答 1

0

我们能够让场景工作。经过进一步调查,我们可以看到工作流没有批准权限。我们可以通过在 fiddler 中为工作流捕获 REST 调用来看到这一点

{"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"en-US","value":"访问被拒绝。您无权执行此操作操作或访问此资源。"},"innererror":{"message":"0x80070005owssvr.dll: (unresolved symbol, module offset=0000000000015BC3) at 0x000007F988885BC3\nMicrosoft.SharePoint.Library.ni.dll

VS 2013 SP 2013 工作流程非常类似于提供商托管的应用程序,并且具有不包括批准项目的默认权限。

执行以下步骤来解决此问题

• 转到站点设置  站点应用程序权限 找到应用程序工作流,复制第一个 guid,如下所示 网站权限截图

• 访问 http:///_layouts/15/appInv.aspx。在 App ID 中输入上一步中复制的 Guid,然后单击 Lookup。这将填充标题、应用程序域和重定向 URL 列。在权限请求 XML 中复制以下内容(不要更改范围)

    <AppPermissionRequests>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" /></AppPermissionRequests>

网站烫发 2 查找

现场烫发 3 批准 • 再次测试工作流程并开始工作。

于 2015-08-04T20:53:22.403 回答