2009-07-15 2 views
1

Sharepoint 웹 서비스를 사용하여 Outlook 2007 VSTO 추가 기능을 작성하려고합니다. 나는 그것을 사용자를 위해 가능한 한 간단하게 만들고 싶다; 이상적으로는해야 할 일은 모두 connect a Sharepoint list to Outlook입니다. 거기에서 내 추가 기능은 목록에서 실제 Sharepoint URL을 가져 와서 처리하는 것이 이상적입니다. 불행히도 Outlook을 실행하는 동안 Outlook이이 정보를 저장하는 위치를 찾을 수 없습니다.Outlook에 Sharepoint 저장 URL을 가져 오시겠습니까?

가장 좋은 해결책은 C : \ Documents and Settings (사용자 이름) \ Local Settings \ Application Data \ Microsoft \ Outlook * .sharing.xml.obi에있는 파일을 읽는 것입니다.

그러나 Outlook을 닫을 때만 이러한 파일이 업데이트됩니다. 즉, 사용자가 목록에 연결하고 Outlook을 다시 시작해야하고 다음에 일이 발생합니다. 차라리 그 수준에 이르지는 않을 것입니다.

정보는 마치 sharing.xml.obi 파일에 마법처럼 정보가 있습니다. 내가 봤 거든 OutlookSpy를 사용했고 필사적으로 mfcmapi.exe를 사용했는데 아무 소용이 없다. 도대체 Outlook에서 이걸 저장합니까?

답변

2

개체 모델 (또는 직접 MAPI 호출)을 사용하여 outlook 폴더에서이 정보를 쿼리 할 수 ​​있습니다. 먼저 .isSharePointFolder 속성을 사용하여 폴더를 찾습니다. 그러면 Outlook의 SharePoint 목록 URL이 관련 콘텐츠 테이블에 "숨겨진"메시지의 제목으로 저장됩니다.

보너스 팁 : 이미 사용하고 계시지 않을 경우 우수 OutlookSpy 사본을 받으십시오. 이런 종류의 물건을 훨씬 쉽게 이해할 수있게 해줍니다.

+0

오하이오라고합니다. 약 1 시간 후에 나는 mfcmapi.exe로 주위를 파고 들며 관련 콘텐츠 테이블을 우연히 발견했으나 이름을 제대로 기술하지 못하여 Google에 제대로 접근 할 수 없었고 PropertyAccessor.GetProperty() wasn 작동하지 않을 것입니다. (PT_OBJECT 타입이고, .net은 그것들을 검색하는 것을 지원하지 않습니다.) 이제는 C# add-in에서 얻는 방법을 알아야합니다. – Tacroy

+0

olHiddenItems 인수를 사용하는 Folder.GetTable이 관련 콘텐츠에 대한 액세스 권한을 얻을 수 있다고 생각하지만 내 경험은 직접 MAPI 액세스만으로는 말할 수 없습니다. –

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]; 
    } 

내가 작성한 추한 return 문이 될 수 있습니다 인터넷 검색을하는 동안은 간접 힌트를 찾을 때 나는 그것을 싫어하기 때문에, 여기 정확히 당신이 필요로하는 코드입니다. 여기에는 다음과 같은 내용이 있습니다.

  1. Outlook.Folder.GetTable ("", 1)을 호출하십시오. 첫 번째 인수는 "anything"을 의미하는 필터이고 두 번째 인수는 olHiddenItems과 같습니다. (실제 열거 형을 찾을 수 없음)
  2. [보낸 사람] 필드가 "SharePoint"인 해당 테이블의 다음 행을 가져옵니다. 우리가 원하는 정보는 항상이 숨겨진 메시지에 담겨 있습니다.
  3. 숨겨진 메시지의 값을 가져옵니다. 이것은 물체로 다시 돌아 오지만 몰래 물체 []입니다.
  4. 값을 객체 []에 캐스트합니다.
  5. 값의 두 번째 항목 (URL)을 가져옵니다.
  6. URL을 문자열로 전송합니다.

다행히도 OutlookSpy에서 이러한 모든 단계를 직접 수행 할 수 있습니다. 그것은 소중한 정보를 얻는 방법을 찾는 데 실질적인 도움이되었습니다.

0

음, 여기

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

해피 코딩을 확인 내가 (C# 3/VS2008, Outlook2007)을 사용하는 것입니다!

관련 문제