3

Travailler sur une application WPF (C# 4.0).Transmettre les informations d'identification à Word Interop pour ouvrir le document dans SharePoint

Le système stocke un certain nombre de documents Word dans SharePoint. Word peut directement modifier ces documents, car SharePoint expose des bibliothèques de documents à Office via WebDAV. Afin de lancer Word pour éditer ces documents, notre application WPF utilise Microsoft.Office.Interop.Word. Découvert (en essayant simplement) que la seule différence entre l'utilisation d'Interop.Word pour ouvrir un document local et un document de SharePoint via WebDAV est que l'objet ref FileName que vous passez est l'URL au lieu d'une chaîne de chemin local .

Tout cela fonctionne tout simplement:

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(); 

Toutefois, si l'utilisateur Windows exécutant l'application n'est pas un utilisateur de domaine avec des autorisations à la bibliothèque de documents, au mieux Word les invite à entrer un nom d'utilisateur et mot de passe, et au pire, il suffit parfois de lancer une exception COMException.

L'utilisateur s'est déjà connecté à notre application WPF avec les mêmes informations d'identification que celles qu'il aurait besoin de fournir, et nous avons le nom d'utilisateur et securePassword en mémoire. Cependant, je ne vois aucun moyen évident de fournir ces informations d'identification à Word.

Quelqu'un at-il la moindre idée de comment je pourrais fournir quelque chose qui ressemble à un NetworkCredential à cela?

Répondre

0

Avez-vous essayé d'exécuter le code usurpé en tant qu'utilisateur dont vous avez le nom d'utilisateur et le mot de passe? Il existe de nombreux exemples sur la façon de le faire sur le Web, par exemple. http://www.codeproject.com/KB/dotnet/UserImpersonationInNET.aspx. Je ne peux pas le tester moi-même maintenant, mais cela devrait fonctionner ...

+0

C'est une très bonne idée, mais cela ne marchera pas dans ce cas. Le problème est que les postes de travail qui exécutent l'application ne sont pas membres du domaine dans lequel le serveur SharePoint s'exécute. Ce ne sont donc pas des connexions Windows valides sur leurs boîtes. :( – Grank

0

En supposant que vous avez Windows 8.1. Les informations d'identification utilisées par Office sont stockées dans votre Windows Credential Manager. Accédez à cela en allant sur Démarrer> Rechercher "Credential Manager"> puis cliquez sur Windows Credentials.

Le titre devrait ressembler à ceci:

MicrosoftOffice15_Data:orgid:<emailadress> 

En utilisant cette api http://credentialmanagement.codeplex.com vous êtes en mesure de stocker vous-même des titres de compétence dans le magasin d'informations d'identification Windows à l'aide:

var cm = new Credential { Target = "MicrosoftOffice15_Data:orgid:[email protected]", PersistanceType = PersistanceType.LocalComputer, Password = "yourverysecurepasswordhere" }; 
cm.Save(); 

Ensuite, lorsque vous ouvrez le document en utilisant Word par exemple, il ouvre sans invite pour vos informations d'identification.

Testé sur SharePoint Online avec Office 2013 et Windows 8.1.

Questions connexes