【问题标题】:Get Sharepoint store URL in Outlook?在 Outlook 中获取 Sharepoint 存储 URL?
【发布时间】:2023-03-08 22:22:01
【问题描述】:

我正在尝试编写一个 Outlook 2007 VSTO 加载项,它可以让您使用 Sharepoint Web 服务做一些事情。我真的很想让用户尽可能简单;理想情况下,他们所要做的就是connect a Sharepoint list to Outlook。从那里,我的加载项将理想地从列表中获取实际的 Sharepoint URL 并执行它的操作。不幸的是,我似乎无法找到 Outlook 在运行时存储此信息的位置。

我能找到的最佳解决方案是读取 C:\Documents and Settings(username)\Local Settings\Application Data\Microsoft\Outlook*.sharing.xml.obi 中的文件。

但是,这些文件仅在您关闭 Outlook 时才会更新。这意味着用户必须连接到列表,重新启动 Outlook,然后 然后 事情才能正常工作。我宁愿事情没有达到那个水平。

这几乎就像信息只是魔法般地进入了sharing.xml.obi 文件。我用谷歌搜索过,我用过 OutlookSpy,绝望中我用过 mfcmapi.exe,但都无济于事。 Outlook 到底将这个存储在哪里?

【问题讨论】:

    标签: sharepoint outlook outlook-2007


    【解决方案1】:

    您可以使用对象模型(或直接 MAPI 调用)从 Outlook 文件夹中查询此信息。首先使用 .isSharePointFolder 属性来定位您的文件夹。然后将 Outlook 中 SharePoint 列表的 URL 作为“隐藏”消息的主题存储在关联的内容表中。

    额外提示:如果您还没有使用它,请给自己一份出色的 OutlookSpy 的副本。它使弄清楚这种东西变得容易得多。

    【讨论】:

    • 哦,原来如此。在我发布大约一个小时后,我在使用 mfcmapi.exe 闲逛时偶然发现了相关的目录表,但是这个名称的描述性不足以让我能够正确地谷歌它,并且使用 PropertyAccessor.GetProperty() 来获取它是' 不工作(它是 PT_OBJECT 类型,.net 不支持检索这些)现在我需要做的就是找出如何从 C# 加载项中获取它。
    • 我 [i]think[/i] 使用 olHiddenItems 参数的 Folder.GetTable 可能会让您访问相关内容,但我唯一的经验是直接访问 MAPI,所以我不能说当然。
    【解决方案2】:

    通过 Paul-Jan 的指点,我明白了这一点。因为我讨厌在谷歌搜索时只找到间接提示,所以这正是您需要的代码:

        private string getSharepointURL(Microsoft.Office.Interop.Outlook.Folder SharepointFolder)
        {
            if (!SharepointFolder.IsSharePointFolder)
                throw new Exception("Cannot get the SharePoint URL of " + SharepointFolder.FullFolderPath + ", because it is not a SharePoint folder.");
            return (string)((object[])SharepointFolder.GetTable("", 1).FindRow("[From] = SharePoint").GetValues())[1];
        }
    

    这可能是我写过的最丑陋的退货声明。它的作用如下:

    1. 调用 Outlook.Folder.GetTable("",1)。第一个参数是一个过滤器,意思是“任何东西”,第二个参数等价于olHiddenItems。 (我找不到实际的枚举)
    2. 获取发件人([From] 字段)为“SharePoint”的表的下一行。我们想要的信息总是保存在这个隐藏的信息中。
    3. 获取隐藏消息的值。这作为一个对象返回,但秘密地是一个对象[]。
    4. 将值转换为对象[]。
    5. 获取值的第二项,即url。
    6. 将 url 转换为字符串。

    幸运的是,您可以在 OutlookSpy 中自己完成所有这些步骤。这对弄清楚如何获取这些宝贵的信息很有帮助。

    【讨论】:

      【解决方案3】:

      嗯,这就是我使用的...(C#3/VS2008,Outlook2007)

      Outlook.Folder folder = GetSomeSpFolder(); // requirement :)
      
      // Things to look for here, not in the columns by default
      // the values can be found in OutlookSpy or perhaps MSDN (haha)
      // this value refers to the SP site (not the full URL)
      var SHARING_REMOTE_STORE_UID = "http://schemas.microsoft.com/mapi/id/{00062040-0000-0000-C000-000000000046}/8A48001E";
      
      var table = folder.GetTable("[From] = SharePoint", Outlook.OlTableContents.olHiddenItems);
      // setup columns to look through
      table.Columns.RemoveAll();
      table.Columns.Add(SHARING_REMOTE_STORE_UID);
      if (!table.EndOfTable) {
        var row = table.GetNextRow();
        var siteURL = row[SHARING_REMOTE_STORE_UID];
        Marshal.ReleaseComObject(row);
      } else {
        // No matching entry ...
      }
      Marshal.ReleaseComObject(table);
      

      也可以查看http://msdn.microsoft.com/en-us/library/bb176406.aspx

      编码愉快!

      【讨论】:

        猜你喜欢
        • 2018-10-31
        • 2010-12-23
        • 2010-12-17
        • 2017-04-13
        • 1970-01-01
        • 2020-09-23
        • 2018-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多