Передайте учетные данные в Word Interop для открытия документа в SharePoint - PullRequest
3 голосов
/ 03 марта 2011

Работа над приложением WPF (C # 4.0).

Система хранит несколько документов Word в SharePoint.Word может напрямую редактировать эти документы, так как SharePoint предоставляет библиотеки документов в Office через WebDAV.

Чтобы запустить Word для редактирования этих документов, наше приложение WPF использует Microsoft.Office.Interop.Word.

Обнаружено (через простую попытку), что единственное различие между использованием Interop.Word для открытия локального документа и документа из SharePoint через WebDAV заключается в том, что передаваемый вами объект ссылки FileName является URL-адресом вместо локальногострока пути.

Это все просто работает:

var wordApplication = 
    new Microsoft.Office.Interop.Word.Application { Visible = true };

object filePath = 
    "http://PathToSharepoint.com/DocumentLibrary/DocumentName.doc";

object missing = Missing.Value;
object readOnly = false;
object isVisible = true;

Document reportDoc = wordApplication.Documents.Open(
    ref filePath,
    ref missing,
    readOnly,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref missing,
    ref isVisible);

reportDoc.Activate();

ОДНАКО, если пользователь Windows, на котором запущено приложение, не является пользователем домена с разрешениями на библиотеку документов, в лучшем случае Word запросит у них запрос.имя пользователя и пароль, а в худшем случае иногда просто выбрасывать COMException.

Пользователь уже вошел в наше приложение WPF с теми же учетными данными, которые ему необходимо будет предоставить, и у нас в памяти есть имя пользователя и securePassword.Тем не менее, я не вижу очевидного способа, как вы могли бы предоставить эти учетные данные в Word.

Кто-нибудь понял, как я мог бы предоставить что-то похожее на NetworkCredential?

Ответы [ 2 ]

0 голосов
/ 28 июля 2015

Если у вас есть Windows 8.1.Учетные данные, используемые Office, хранятся в вашем диспетчере учетных данных Windows.Чтобы получить доступ к этому, перейдите в Пуск> Поиск "Диспетчер учетных данных">, затем нажмите учетные данные Windows.

Учетные данные должны выглядеть примерно так:

MicrosoftOffice15_Data:orgid:<emailadress>

Использование этого API http://credentialmanagement.codeplex.com вы можете самостоятельно сохранить учетные данные в хранилище учетных данных Windows, используя:

var cm = new Credential { Target = "MicrosoftOffice15_Data:orgid:youremailhere@email.com", PersistanceType = PersistanceType.LocalComputer, Password = "yourverysecurepasswordhere" };
cm.Save();

Затем, когда вы открываете документ, например, в Word, он открывается без запроса учетных данных.

Протестировано на SharePoint Online с Office 2013 и Windows 8.1.

0 голосов
/ 03 марта 2011

Вы пытались выполнить код, выдаваемый за пользователя, чье имя пользователя и пароль у вас есть?Есть много примеров, как это сделать в Интернете, например, http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx. Я сам не могу проверить это сейчас, но это должно работать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...