Обновление:
Хорошо, теперь это решено. Код работает, но права доступа на сервере Sharepoint оказались неверными. Так что это облегчение.
Я использую VBA для отправки запроса из Excel в Sharepoint через его веб-службы. Это корпоративная интрасеть, поэтому я понимаю, что аутентификация Windows должна происходить в фоновом режиме, пока я использую свой логин Windows для доступа к Sharepoint (что я и делаю). Я проверил, что режим аутентификации установлен на «Windows». Но я все еще получаю сообщение об ошибке «Отказано в доступе», когда пытаюсь это сделать.
Вот XML, который я отправляю:
<?xml version="1.0" encoding="utf-8" ?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>listname1</listName>
<updates>
<Batch OnError='continue' ListVersion='1'>
<Method ID='1' Cmd='Delete'>
<Field Name='ID'>7582</Field>
</Method>
</Batch>
</updates>
</UpdateListItems>
</soap12:Body>
</soap12:Envelope>
Я попытался отправить имя пользователя и пароль в заголовке Soap, таким образом:
<soap12:Header>
<AuthHeader xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<UserName>user1</UserName>
<Password>password1</Password>
</AuthHeader>
</soap12:Header>
Без разницы.
Ответное сообщение, которое Sharepoint отправляет мне, включает некоторые данные, которые он не позволяет мне удалить, поэтому я знаю, что мне удается подключиться к нужному сайту. И у меня есть разрешение на удаление с этого сайта.
Вот VBA, который я использую для отправки XML (скопирован из другого места на StackOverflow):
Dim xmlhtp As New MSXML2.XMLHTTP
Dim XMLDOC As New DOMDocument
Dim XMLstr As String
With xmlhtp
.Open "POST", "https://sharepoint.address/_vti_bin/lists.asmx", False
.setRequestHeader "Host", "sharepoint.address/site1823/Lists/HC Movement"
.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
.send XMLstr
XMLDOC.LoadXML .responseText
MsgBox .responseText
End With
Замена «HC Movement» на «HC%20Movement» ничего не меняет.
Меня не волнует, происходит ли это незаметно в фоновом режиме: если пользователи должны вводить свои учетные данные, пусть будет так. И если у кого-то есть решение, совершенно отличное от того, что есть у меня, это тоже хорошо. Просто нужно иметь возможность удалять и добавлять записи в Sharepoint из Excel, и в течение нескольких дней упирались в кирпичную стену.
Я неплохо разбираюсь в VBA, но никогда раньше не пользовался веб-сервисами. Любая помощь будет очень признательна.
Спасибо.