是否在Outlook中获取Sharepoint应用商店URL?

是否在Outlook中获取Sharepoint应用商店URL?,sharepoint,outlook,outlook-2007,Sharepoint,Outlook,Outlook 2007,我正在尝试编写一个Outlook2007VSTO加载项,它允许您使用Sharepoint Web服务执行一些操作。我真的很想让它对用户来说尽可能简单;理想情况下,他们所要做的就是。从那里,我的外接程序将理想地从列表中获取实际的Sharepoint URL并完成它的工作。不幸的是,在运行Outlook时,我似乎找不到Outlook存储这些信息的位置 我能找到的最好的解决方案是读入C:\Documents and Settings(username)\Local Settings\Applicati

我正在尝试编写一个Outlook2007VSTO加载项,它允许您使用Sharepoint Web服务执行一些操作。我真的很想让它对用户来说尽可能简单;理想情况下,他们所要做的就是。从那里,我的外接程序将理想地从列表中获取实际的Sharepoint URL并完成它的工作。不幸的是,在运行Outlook时,我似乎找不到Outlook存储这些信息的位置

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

但是,这些文件仅在您关闭Outlook时更新。这意味着用户必须连接到列表,重新启动Outlook,然后事情才能正常进行。我不希望事情发展到那种程度


这几乎就像这些信息在sharing.xml.obi文件中魔法般地出现一样。我用谷歌搜索过,用过OutlookSpy,在绝望中用过mfcmapi.exe,都没有用。Outlook在哪里存储此信息?

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


额外提示:如果你还没有使用它,给自己买一份优秀的。这使得搞清楚这类事情变得容易多了

用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];
    }
这可能是我写过的最丑陋的回报声明。它的作用如下:

  • 调用Outlook.Folder.GetTable(“,1)。第一个参数是过滤器,表示“任何东西”,第二个参数等效于。(我找不到实际的枚举)
  • 获取其发件人(发件人)字段为“SharePoint”的表的下一行。我们想要的信息总是保存在这个隐藏的消息中
  • 获取该隐藏消息的值。它作为对象返回,但实际上是对象[]
  • 将值强制转换为对象[]
  • 获取值的第二项,即url
  • 将url强制转换为字符串

  • 幸运的是,您可以在OutlookSpy中自己完成所有这些步骤。这对了解如何获取这些宝贵信息非常有帮助。

    好吧,下面是我使用的。。。(C#3/VS2008,展望2007)

    也请查看


    快乐编码

    哦,这就是它的名字。发布后大约一个小时,我在用mfcmapi.exe浏览时偶然发现了相关的内容表,但名称的描述性不足以让我正确地用谷歌搜索它,而使用PropertyAccessor.GetProperty()无法使用(它属于PT_OBJECT类型,.net不支持检索这些内容)现在我需要做的就是找出如何从C#add-in获取它。我[我]认为[/I]是一个文件夹。使用olHiddenItems参数获取表可能会让您访问相关的内容,但我唯一的经验是直接访问MAPI,所以我不能肯定。
    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);