У меня был успех с помощью VBA в Excel, чтобы сопоставить диск с экстрасети SharePoint для загрузки файлов, однако при развертывании он работает в одном месте, но не в другом (возможны разные условия). Мне любопытно, есть ли у кого-нибудь представление о том, какой пользователь или системный настрой вызовут это.Аутентификация VBA SharePoint для сопоставления дисков
В приведенном ниже коде я пытаюсь сопоставить диск с SharePoint, если он вызывает ошибки, обработчик создает новый экземпляр excel и сохраняет его на сайте SharePoint. По своей природе это заставляет IE открывать и запрашивать у пользователя свои данные для входа, после того как он отправлен, он аутентифицирует их и загружает файл. Затем они смогут сопоставить диск с SharePoint. Проблема, с которой я сталкиваюсь в одной группе, это загрузить файл, однако они не остаются аутентифицированными для сопоставления диска. Даже страннее, пользователь регистрируется на сайте SharePoint в IE, пока я перехожу к этой процедуре.
Sub MapSharePoint()
Dim objNet as object
Dim strDriveLetter as String
Dim strSharePointDatabaseFolder as String
Set objNet = CreateObject("WScript.Network")
On Error GoTo AUTH_Connection:
strDriveLetter = <function to find open drive>
strSharePointDatabaseFolder = <SharePoint site>
objNet.MapNetworkDrive strDriveLetter, strSharePointDatabaseFolder
<do something with mapped drive>
Exit Sub
AUTH_Connection:
Dim xlApp As New Excel.Application
Dim xlDoc As Workbook
On Error GoTo ErrHandler:
Set xlApp = CreateObject("Excel.Application")
Set xlDoc = xlApp.Workbooks.Add
' Trying to upload the file below will force IE to open and prompt user for their Username and Password which will authenticate them
xlDoc.SaveAs FileName:="<SharePointSite>", FileFormat:=xlWorkbookNormal, AddToMru:=False
xlDoc.Close
xlApp.Quit
objNet.MapNetworkDrive strDriveLetter, strSharePointDatabaseFolder
Resume Next
ErrHandler:
MsgBox Err.Code, Err.Description
End Sub
UPDATE 1:
Использование кода ниже проблемы, я бегу в аутентификации SharePoint. В скобках catch я добавил строку кода ниже, чтобы открыть окно сообщения с конкретным текстом ошибки и получил значение 403: Запрещено. После загрузки Fiddler я вижу, что на сайте используется cookie проверки подлинности, который я читал, WebClient не поддерживает. Я пытался захватить cookie и аутентифицировать его, так что теперь я не получаю ошибку 403, но вместо этого я загружаю HTML-код из входа в веб-форму. Мне нужно выяснить, как отправить запрос на вход, захватить файл cookie auth, который возвращается, а затем использовать его при отправке запроса DownloadFile.
System.Windows.Forms.MessageBox.Show(ex.Message);
У меня была аналогичная проблема и в конечном итоге приходится прибегать к C# для того, чтобы использовать: системы. Net.NetworkCredentials – SlowLearner
Причина этого может быть связана с сетевой безопасностью, у меня возникла такая проблема; как только пользователь будет аутентифицирован, «оригинальный» объект IE «уничтожен», а затем снова создан с учетными данными, следовательно, он никогда не узнает, что вместо этого следует проанализировать новый «IE». Я не мог найти способ его решить. – Sgdva
@ Сгдва да, это была проблема, как я ее понял. VBA не удалось использовать учетные данные из IE надежным способом, и некоторые люди предпочли использовать другие браузеры, и все просто перестало работать ... следовательно, я пришел к использованию C# ... это была кривая обучения убийцам: -/ – SlowLearner