2009-07-15 5 views
1

私はOutlook 2007のVSTOアドインを作成しようとしています。このアドインは、Sharepoint Webサービスで何かをすることができます。私は本当にユーザーのためにできるだけシンプルにしたいと思っています。理想的には、彼らがしなければならないことはすべてconnect a Sharepoint list to Outlookです。そこから、私のアドインは理想的にリストから実際のSharepoint URLをつかんでそのことを行います。残念ながら、実行中に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を使いました。どこに店舗はこれを格納しますか?

答えて

2

オブジェクトモデル(または直接MAPI呼び出し)を使用して、outlookフォルダーからこの情報を照会することができます。まず、.isSharePointFolderプロパティを使用してフォルダを探します。 OutlookのSharePointリストのURLは、関連するコンテンツテーブルに「隠し」メッセージの件名として格納されます。

ボーナスチップ:まだ使用していない場合は、優秀なOutlookSpyのコピーを手に入れてください。このようなことをもっと簡単に理解できるようになります。

+0

オハイオ州と呼ばれるものです。私が投稿した約1時間後、mfcmapi.exeを使用して関連するコンテンツテーブルを見つけたが、その名前はGoogleに適切に伝えられるほど十分ではなく、PropertyAccessor.GetProperty()を使用して取得していた(PT_OBJECT型のもので、.netはそれらを取得することをサポートしていません)今はC#アドインから取得する方法を見つけるだけです。 – 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"を意味するフィルタで、2番目の引数はolHiddenItemsと等価です。 (実際の列挙を見つけることができませんでした)
  2. [送信元]フィールドが "SharePoint"のテーブルの次の行を取得します。私たちが望む情報は、常にこの隠されたメッセージに保持されています。
  3. その非表示メッセージの値を取得します。これはオブジェクトとして返されますが、密かにオブジェクト[]です。
  4. 値をオブジェクト[]にキャストします。
  5. 値の2番目の項目(URL)を取得します。
  6. URLを文字列にキャストします。

幸いにも、あなたはOutlookSpyでこれらすべての手順を自分で行うことができます。それは、この貴重な情報をどのように入手するのかを理解する上で本当の助けとなりました。

0

さて、ここでは(Outlook2007が、C#3/VS2008)...私が使用するものです

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

コーディングハッピーをチェックしてください!

関連する問題