Не удается обновить OData__ModerationStatus с помощью HTTPSEND

Я попытался обновить значение столбца OData__ModerationStatus AKA «Статус утверждения» тремя разными способами, но работает только один. Используя 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, одно для получения X-RequestDigest с помощью POST с URL-адресом siteurl / _api / contextinfo, второе POST с использованием следующих заголовков и тела. ЗАГОЛОВОК:

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' }")

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

Использовал действие BuildDynamicValue для установки RequestContent.

Все три содержат ошибку Microsoft.SharePoint.SPException: недопустимое текстовое значение. Текстовое поле содержит недопустимые данные. Если я использую любое другое поле, оно работает. Если я использую Fiddler или Advanced Rest Client, оно обновляет значение.

Может ли кто-нибудь помочь мне понять или объяснить, почему он работает через вызовы REST, но я не могу использовать VS и UpdateItem / HTTPSend для установки значения.

Я добавил изображение с успешным рабочим процессом, обновляющим заголовок введите описание изображения здесь


person user761871    schedule 09.07.2015    source источник


Ответы (1)


Нам удалось заставить сценарий работать. После дальнейших исследований мы увидели, что рабочий процесс не имеет разрешений на Утверждение. Мы могли убедиться в этом, перехватив REST-вызовы в скрипте для рабочего процесса.

{"error": {"code": "- 2147024891, System.UnauthorizedAccessException", "message": {"lang": "en-US", "value": "Доступ запрещен. У вас нет разрешения на выполнение этой операции. действие или получить доступ к этому ресурсу. "}," innererror ": {" message ":" 0x80070005owssvr.dll: (неразрешенный символ, смещение модуля = 0000000000015BC3) в 0x000007F988885BC3 \ nMicrosoft.SharePoint.Library.ni.dll

Рабочие процессы VS 2013 SP 2013 действительно похожи на приложения, размещенные у поставщика, и имеют разрешение по умолчанию, которое не включает элементы утверждения.

Выполните следующие шаги, чтобы исправить это

• Перейдите в Настройки сайта  Разрешения приложения сайта Найдите рабочий процесс приложения, скопировав первый guid, как показано ниже < img src = "https://i.stack.imgur.com/QcUtb.png" alt = "Скриншот разрешений сайта">

• Перейдите по адресу http: ///_layouts/15/appInv.aspx. Введите Guid, скопированный на предыдущем шаге, в идентификаторе приложения и нажмите «Поиск». Это заполнит столбцы заголовка, домена приложения и URL-адреса перенаправления. Скопируйте приведенный ниже XML-код запроса на разрешение (НЕ меняйте область действия)

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

поиск по сайту с разрешением 2

site perm 3 Approve • Протестировал рабочий процесс еще раз, и он начал работать.

person user761871    schedule 04.08.2015