簡単なアプリケーション(Outlookの連絡先管理)の作成
Outlookの相互運用クラスの機能を理解するために「連絡先管理」アプリケーションを作成してみましょう。このアプリケーションでは、ユーザーは連絡先を表示するOutlookフォルダを選択し、名前の上にマウスポインタを合わせて個々の連絡先の情報を調べたり、連絡先の一部のプロパティを変更したりすることができます。このサンプルはOutlookのクラスを紹介することを目的としていますが、これを参考にすれば、.NETアプリケーションから独自のやり方でOutlook(ひいてはOffice)を操作することも難しくないでしょう。
見てすぐわかるように、このアプリケーションには空のリストボックスと[Get Contacts]ボタンがあります。
ユーザーがこのボタンをクリックすると、Outlookスタイルのフォルダ選択ダイアログが表示され、連絡先のインポート元となるフォルダを選択することができます。Outlookの相互運用クラスはNamespaceクラスのPickFolderというメソッドを提供しており、それを使えばこの機能を1行で実現できます。しかしその前に、Outlookの機能を公開するOutlook Applicationオブジェクトを生成し、Namespaceオブジェクトを取得する必要があります。
Outlook.Application oApp = new Outlook.Application(); Outlook.NameSpace oNS = oApp.GetNamespace("MAPI");
"MAPI"は、OutlookでGetNamespaceメソッドを使う場合のパラメータです。次のコードとスクリーンショットは、ユーザーにOutlookフォルダを選択させる方法を示しています。
private Outlook.MAPIFolder oContactsFolder = oNS.PickFolder();
今回の例では、インポートプロセスの対象を連絡先だけに限定するので、ユーザーの選択したフォルダに連絡先が含まれていないと、ユーザーは何の結果も受け取らないことになります。PickFolderメソッドはMAPIFolder型のオブジェクトを返します。目的のオブジェクトへの参照を取得したら、そのオブジェクトの各項目を反復処理します。その前に、項目を連絡先のみに限定しておきます。
string filter = "[MessageClass] = \"IPM.Contact\"" Outlook.Items oContactItems = oContacts.Items.Restrict(filter); foreach (Outlook.ContactItem oContact in oContactItems) {}
Restrictメソッドが引数として受け取るフィルタは、項目のプロパティを参照する書式付き文字列です。[]内が検索のために照合するプロパティで、検索条件を引用符で囲みます。フィルタ文字列の作成の詳細と具体的な例については、MSDNの記事を参照してください。
ContactItemクラスは連絡先に関する次のようなプロパティを公開しています。
- LastName、FirstName、MiddleName、Title
- JobTitle
- Email1Address、Email1DisplayName、IMAddress
- WebPage
- BusinessTelephoneNumber、OtherTelephoneNumber、PagerNumber、MobileTelephoneNumber、BusinessFaxNumber
ここでは本稿のサンプルで使うものだけを掲載しましたが、この他にもさまざまなプロパティがあります。Email1Address、Email1DisplayName、IMAddressはこの中でも特別なプロパティです。これらにアクセスすると、Outlookから前述のセキュリティ警告が発せられます。他のプロパティでは警告は出ません。
今回の例では、Email1DisplayNameを用いてフォーム上のListBoxに連絡先データを割り当てます。さらに、hoverイベント(マウスオーバー時に発生するイベント)で一部のプロパティをツールチップに表示します。
ユーザーがいずれかの連絡先をダブルクリックすると、新しいフォームが開き、連絡先の情報を修正することができます。次のサンプルコードは、テキストボックスからの情報で連絡先を更新する方法を示しています。
oContact.FirstName = textBoxFirst.Text; oContact.LastName = textBoxLast.Text; oContact.MiddleName = textBoxMiddle.Text; oContact.Title = textBoxTitle.Text; oContact.JobTitle = textBoxJobTitle.Text; oContact.WebPage = textBoxWebPage.Text; oContact.Email1Address = textBoxEmail.Text; oContact.Save();
Email1Addressプロパティに書き込みを行ってもセキュリティ警告が出されないことに注意してください。Outlookのセキュリティモデルは、アプリケーションによって情報が盗み出されるのを防ぐために、プロパティへの読み取りアクセスを阻止します。プロパティに新しい値を設定しただけでは、セキュリティ警告は出されません。プロパティを設定した後、SaveメソッドでOutlook内の連絡先を更新します。




