2008-09-04 6 views
2

Scenerio: Библиотека документов в SharePoint с столбцом x типа «Личность или группа». Внутри макроса VBA (или надстройки VSTO) мы пытаемся получить доступ к MetaProperty в документе, чтобы установить/получить имя пользователя. Любая попытка получить доступ к значению с помощью коллекции ContentTypeProperties вызывает ошибку типа MisMatch (13).Как читать/записывать метаданные Person из документа Word, хранящегося в SharePoint, используя VBA или VSTO?

Свойство Type объекта MetaProperty говорит, что это «msoMetaPropertyTypeUser». Я не могу найти примеры того, как работать с MetaProperties этого типа. У кого-нибудь есть опыт?

Спасибо!

ответ

1

Вы должны быть в состоянии просто сделать что-то вроде этого:

using (SPSite site = new SPSite("http://yoursite/subsite")) 
    { 
     using (SPWeb web = site.OpenWeb()) 
     { 
      SPList list = web.Lists["DocLibraryName"]; 
      SPListItemCollection items = list.GetItems(list.Views["All Documents"]); 
      foreach (SPListItem item in items) 
      { 
       item["Modified By"] = "Updated Value"; 
      } 
     } 
    } 

Любые метаданные для документа должны быть доступны путем индексации имя столбца в SPListItem.

+0

Для того, чтобы определить переменную типа SPSite, где найти dll, с которой мне нужно обратиться в первую очередь? – ChadD 2009-05-30 18:20:59

1

Я сделал это.

Фокус здесь заключается в том, чтобы знать, что если вы поместите строку, соответствующую индексу пользователя в пользователях MOSS, в пользовательское свойство документа Word, MOSS узнает его и найдет соответствующего пользователя для отображения поля.

, так что вам просто нужно вызвать http: ///_vti_bin/usergroup.asmx , используя функцию GetUserInfo и получить от него индекс пользователя (ID).

MOSSusergroup.UserGroup userGroupService = new MOSSusergroup.UserGroup(); 
userGroupService.Credentials = System.Net.CredentialCache.DefaultCredentials; 
System.Xml.XmlNode node = userGroupService.GetUserInfo(userLogin); 
string index = node.FirstChild.Attributes["ID"].Value;