Я пытаюсь создать пользовательскую форму Excel, которая будет добавлять новые записи в список Sharepoint. Проблема в том, что эта форма должна быть доступна для всех пользователей в моей организации без специального разрешения на доступ к списку.
Базовый URL-адрес списка Sharepoint выглядит примерно так: https://myorg.sharepoint.com/personal/myname/;LIST=SubmissionsTest;
Однако эта ссылка работает только для меня. Если я попытаюсь поделиться списком с людьми в моей компании, Sharepoint предоставит мне ссылку, которая выглядит следующим образом: https://myorg.sharepoint.com/:l:/g/personal/myname/arandom50charactertextstring
Тестовые пользователи подтвердили, что могут получить доступ к списку по второй ссылке, но не по первой.
Чтобы вставить записи в список из Excel, я создал следующий код VBA:
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String
Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset
mySQL = "SELECT * FROM SubmissionsTest;"
With cnt
.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;" _
& "DATABASE=https://myorg.sharepoint.com/personal/myname/;LIST=SubmissionsTest;"
.Open
End With
rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic
rst.AddNew
rst.Fields("Title") = Int(Now() * 100000)
rst.Fields("testEntry") = "This is a test submission"
rst.Fields("testSubmitter") = Environ("UserName")
rst.Update
If CBool(rst.State And adStateOpen) = True Then rst.Close
If CBool(cnt.State And adStateOpen) = True Then cnt.Close
MsgBox "Your submission has been received."
Этот код отлично работает, когда я его запускаю. Как и ожидалось, он не работает для моих тестовых пользователей. Однако, когда я пытаюсь заменить эту вторую ссылку, предоставленную Sharepoint, в строку подключения, код больше не работает ни у меня, ни у моих тестовых пользователей. Вместо этого мы получаем ошибки, сообщающие нам, что объект SubmissionsTest не может быть найден.
Мне еще предстоит выяснить, как я могу настроить этот код, чтобы ссылка Shareable распознавалась. Есть ли у кого-нибудь идеи о том, как это можно реализовать?
Спасибо заранее за любые предложения.
Тиму Уильямсу: проблема в том, что у меня 80 000 коллег, и любому из них может понадобиться использовать эту форму. Мне нужно открыть его, чтобы им мог пользоваться кто-нибудь в фирме.
У вас 80 тысяч коллег и нет администраторов SharePoint?
Вот вкратце проблема. SharePoint считается технологией «самообслуживания». У нас есть возможность создавать собственные сайты SharePoint через Teams, но формальной поддержки для этого нет. Если мы его используем, мы должны выяснить, как реализовать его самостоятельно.
Похоже, список есть в вашем OneDrive? Если я собираюсь установить разрешения для списка в своем корпоративном OneDrive, я могу добавить «Все, кроме внешних пользователей» и предоставить им разрешения на редактирование списка. Это работает в вашем случае? Если вы просто наберете «все», это должно быть выполнено автоматически. Я согласен с тем, что концепция «самообслуживания», когда речь идет о Sharepoint, немного нелепа, учитывая, насколько сложной может быть настройка даже основных вещей.
ОК, я нашел решение после изучения этого сообщения на форумах Microsoft: -record-to-an-existing-sharepoint-online-list?forum=sharepointgeneral
Как указано в приведенном выше коде, строка подключения, которую я пытался использовать, была:
DATABASE=https://myorg.sharepoint.com/personal/myname/;LIST=SubmissionsTest;
Даже после предоставления доступа к списку Sharepoint любому сотруднику фирмы Excel сообщил, что не смог найти таблицу «SubmissionsTest». По рекомендации поста выше я просмотрел значения GUID для списка. Это вернуло строку, которая выглядела примерно так:
<LIST><VIEWGUID>alongstringofalphanumericcharacters</VIEWGUID>
<LISTNAME>anotherstringofcharacters</LISTNAME>
<LISTWEB>https://myorg.sharepoint.com/personal/myname/</LISTWEB>
<LISTSUBWEB></LISTSUBWEB><ROOTFOLDER></ROOTFOLDER></LIST>
Как только я изменил строку подключения на это:
DATABASE=https://myorg.sharepoint.com/personal/myname/;LIST = {anotherstringofcharacters};
код теперь работает для всех. Я пришел к выводу, что в SharePoint O365 именам таблиц нельзя доверять. Иногда на значения GUID необходимо ссылаться напрямую.
Обмен ссылками и прямые разрешения могут работать по-разному в этом контексте. Пробовали ли вы предоставить прямой доступ к списку своим коллегам?