Получить URL-адрес магазина Sharepoint в Outlook? - PullRequest
1 голос
/ 15 июля 2009

Я пытаюсь написать надстройку для Outlook 2007 VSTO, которая позволяет вам что-то делать с веб-сервисами Sharepoint. Я действительно хотел бы сделать это как можно более простым для пользователей; в идеале все, что им нужно сделать, это подключить список Sharepoint к Outlook . Оттуда моя надстройка в идеале должна была бы взять фактический URL-адрес Sharepoint из списка и сделать свое дело. К сожалению, я не могу найти, где Outlook хранит эту информацию во время работы.

Лучшее решение, которое мне удалось найти, - это прочитать файлы, найденные в C: \ Documents and Settings (имя пользователя) \ Local Settings \ Application Data \ Microsoft \ Outlook * .sharing.xml.obi.

Однако эти файлы обновляются только при закрытии Outlook. Это означает, что пользователь должен будет подключиться к списку, перезапустить Outlook, и , тогда все будет работать. Я бы предпочел, чтобы вещи не доходили до этого уровня.

Это похоже на то, как информация просто проникает в файлы shared.xml.obi. Я гуглил, я использовал OutlookSpy и в отчаянии я использовал mfcmapi.exe, но все безрезультатно. Где, черт возьми, Outlook хранит это?

Ответы [ 3 ]

2 голосов
/ 15 июля 2009

Вы можете использовать объектную модель (или прямые вызовы MAPI) для запроса этой информации из папки outlook. Сначала используйте свойство .isSharePointFolder, чтобы найти папку. URL-адрес списка SharePoint в Outlook затем сохраняется как тема «скрытого» сообщения в соответствующей таблице содержимого.

Бонусный совет: если вы его еще не используете, получите себе превосходную OutlookSpy . Это облегчает понимание такого рода вещей.

1 голос
/ 16 июля 2009

С указателем Поля Яна я понял это. Так как я ненавижу это, когда я нахожу только косвенные подсказки во время поиска в Google, вот именно тот код, который вам нужен:

    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. Получает следующую строку этой таблицы, отправителем которой (поле [От]) является «SharePoint». Информация, которую мы хотим, всегда содержится в этом скрытом сообщении.
  3. Получает значения этого скрытого сообщения. Это возвращается как объект, но тайно является объектом [].
  4. Приводит значения к объекту [].
  5. Получает второй элемент значений, который является URL.
  6. Приводит URL к строке.

К счастью, вы можете сделать все эти шаги самостоятельно в OutlookSpy. Это было реальная помощь в выяснении, как добраться до этого драгоценного куска информации.

0 голосов
/ 14 октября 2009

Ну, вот что я использую ... (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

Удачного кодирования!

...