在Outlook中获取Sharepoint商店URL?

时间:2009-07-15 17:22:24

标签: sharepoint outlook outlook-2007

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

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

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

这几乎就像魔法信息一样进入sharing.xml.obi文件。我用谷歌搜索过,我使用过OutlookSpy,绝望中我使用过mfcmapi.exe,但都无济于事。 Outlook存储了这个吗?

3 个答案:

答案 0 :(得分:2)

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

额外提示:如果您尚未使用它,请获取优秀OutlookSpy的副本。它使这种东西变得更加容易。

答案 1 :(得分:1)

有了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. 将网址投射到字符串。
  7. 幸运的是,您可以在OutlookSpy中自己完成所有这些步骤。这对于弄清楚如何获取这些宝贵的信息非常有帮助。

答案 2 :(得分:0)

嗯,这就是我使用的......(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

快乐的编码!