【问题标题】:Read/write Person metadata from a Word doc stored in SharePoint using VBA or VSTO?使用 VBA 或 VSTO 从存储在 SharePoint 中的 Word 文档中读取/写入人员元数据?
【发布时间】:2018-06-12 21:49:46
【问题描述】:

场景:SharePoint 中的文档库包含“个人或组”类型的列 x。从 VBA 宏(或 VSTO 加载项)中,我们尝试访问文档上的 MetaProperty 以设置/获取用户名。任何通过 ContentTypeProperties 集合访问值的尝试都会引发

类型不匹配错误 (13)。

MetaProperty 对象的 Type 属性说它是msoMetaPropertyTypeUser。我找不到任何关于如何使用这种类型的 MetaProperties 的示例。有人有这方面的经验吗?

谢谢!

【问题讨论】:

    标签: sharepoint vba ms-office vsto


    【解决方案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 的列名来获得。

    【讨论】:

    • 为了能够定义一个SPSite类型的变量,我在哪里可以找到我需要首先引用的dll?
    • Microsoft.SharePoint.dll。它应该位于安装了 SharePoint 的计算机上的 GAC 中。我还在 C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\ISAPI 文件夹中找到了它的副本。
    【解决方案2】:

    我做到了。

    这里的trick其实是要知道,如果你在Word文档的自定义属性中,在MOSS users中放一个用户索引对应的字符串,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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      相关资源
      最近更新 更多