使用VBA或者VSTO从存储在SharePoint中的Word文档读取/写入Person元数据?

时间:2020-03-05 18:47:54  来源:igfitidea点击:

方案:SharePoint中的文档库,其列x为"人员或者组"类型。从VBA宏(或者VSTO加载项)中,我们尝试访问文档上的MetaProperty,以设置/获取用户名。任何通过ContentTypeProperties集合访问该值的尝试都会抛出一个

Type MisMatch error (13).

MetaProperty对象的Type属性表示它为" msoMetaPropertyTypeUser"。我找不到有关如何使用此类型的MetaProperty的任何示例。有人对此有经验吗?

谢谢!

解决方案

回答

我们应该能够执行以下操作:

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的列名,文档的任何元数据都应该可用。

回答

我做到了。

实际上,这里的技巧是要知道,如果在Word文档的custom属性中将与用户索引相对应的字符串放在MOSS用户中,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;