japan.internet.com The Internet & IT Network


RSSニュース検索
カテゴリ
> トップページ
> Webビジネス
> Eコマース
> Webファイナンス
> Webマーケティング
> パブリック
> Webテクノロジー
> 携帯・ワイヤレス
> Linux Today
> Linux Tutorial
> J.I.C.ブログ
キャリア
> 転職ならen
> 派遣ならen
> アルバイトならen
> IT求人情報
ヘッドライン
> 今日のヘッドライン
> 週間ヘッドライン
Special Link
> フォトコミュニティ
> ストックフォト
> クリップアート
> イラスト
> フェリカ
> Web2.0
> 写真
イベント&セミナー
> イベントカレンダー
> 書評「IT の耳」
> 出張・接待検索
> ニュースガジェット 注目
無料ニュースメール
> 新規登録
> 変更・解除
> オプトインメールの登録・変更・解除
インフォメーション
> パートナーサイト
転職ならエン
就職ならen
求人ならen
履歴書ならen
アルバイトならエン
CRM/SFAならオラクル
> グループ会社
株式会社アエリア
(株)サンゼロミニッツ
株式会社エアネット
> お問い合わせ
> 広告掲載について
> リンクについて
> 著作権について
> その他お問い合わせ
> 利用規約
> 個人情報保護方針
> 会社概要地図
デベロッパー 2008年2月22日 10:00
デベロッパー・バックナンバー
C#.NETによるMicrosoft Outlookの統合

著者: Rachel Wireman  オリジナル版を読む プリンター用 記事を転送
2008年2月22日 10:00 付の記事
海外internet.com発の記事
このエントリーを含むはてなブックマーク この記事をクリップ! Buzzurlにブックマーク Yahoo!ブックマークに登録 newsing it!

はじめに

 ビジネスアプリケーションからMicrosoft Officeを操作し、Microsoft Officeに組み込まれている大量のクラスや関数を利用できるようにすると、非常に大きなメリットがあります。Office製品に同梱されている相互運用アセンブリを用いればお馴染みの操作を実行することができ、ユーザーにとっても受け入れやすいアプリケーションになります。本稿は2部構成のシリーズのパート1です。今回は主に、.NETアプリケーションのコンテキストでOutlookを操作する方法について解説します。簡単なサンプルを作成してOutlookの相互運用クラス(特に連絡先項目の操作に関係するクラス)の使い方を習得します。また、.NETアプリケーションからOutlookを操作するときに注意すべきセキュリティ上の問題についても簡単に触れます。パート2ではOutlookをアドインによって拡張する方法、具体的にはOutlookのツールバーにカスタムボタンを追加する方法について解説します。

Redemption

 Redemption DLLは、Office 2002以降に組み込まれた「Outlook Security Patch」によるセキュリティ警告(機密データと思われる情報へのアクセス時に表示される警告)を回避する手段の1つです。詳しくは後述しますが、たとえばアプリケーションからOutlookを呼び出して連絡先のメールプロパティにアクセスしようとした場合、Redemptionを使用していないと、Outlookはユーザーに対して次のメッセージを表示します。

 このような警告でユーザーを煩わすことを何とも思わない人や、このようなダイアログが表示されても適切な対応ができるようにユーザーを訓練すればいいと考えている人は、以降のRedemptionに関する説明を読む必要はありません。しかし、そこまでユーザーに厳しくない開発者ならば、「機密」情報に警告なしでアクセスするメソッドをRedemptionライブラリが公開しているという事実に興味をそそられるはずです。Redemptionは開発用として無料で提供されていますが、アプリケーションに組み込んで配布するときはワンタイムライセンス料が発生します。このライブラリの詳細とDLLのダウンロードについては、こちらを参照してください。

 本稿のサンプルソースは、Redemptionをダウンロードしない場合に備えてRedemptionを使用しないバージョンになっています(Redemptionを使用する場合のコードはコメントアウトされています)。また、ユーザーがセキュリティアクセス要求を拒否した場合の対応を行うエラーキャッチ機構を設けていないことにも注意してください。現実のアプリケーションではエラーキャッチ機構を設けるべきでしょう。Redemptionを使えば、これは問題になりません。

 Redemptionを使用するには、このDLLをコンピュータに登録する必要があります。具体的には、DLLの置かれたフォルダに移動した後、コマンドプロンプトから次のコマンドを実行します。

RegSvr32 Redemption.dll

 さらに、ソリューション側にこのDLLへの参照を追加する必要があります。その後、Redemptionを使うコードをコメント解除すれば、警告が表示されなくなります。

準備

 Outlookを操作するアプリケーションを作成するときには、OutlookのCOMライブラリへの参照を必ず追加しなければなりません。本稿のサンプルでは、Visual Studio 2005(.NET Framework 2.0)、C#.NET、およびMicrosoft Office Outlook 2003を使用します。まず、適切なOutlook COMライブラリへの参照をプロジェクトに追加します。Officeの相互運用ライブラリはVisual Studioの参照追加ダイアログの[COM]タブに表示されます。私の場合、Outlook 2003を使用している関係から、このライブラリは「Microsoft Outlook 11.0 Object Library」という名前になっています。これらの相互運用ライブラリはOfficeとともに提供されます。したがって、Outlook 2003をインストールしていれば、このライブラリが見つかるはずです。Outlook 2003ではなくOutlook 2007をインストールしている場合は、「Microsoft Outlook 12.0 Object Library」というライブラリが見つかるはずです。

 さらに、Outlookの機能を利用する各クラスに次のusingディレクティブを含めます。

using Outlook = Microsoft.Office.Interop.Outlook;

 サンプルプロジェクトの参照設定は、ご利用のコンピュータの構成状況に応じて適宜調整してください。

簡単なアプリケーション(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

 ここでは本稿のサンプルで使うものだけを掲載しましたが、この他にもさまざまなプロパティがあります。Email1AddressEmail1DisplayNameIMAddressはこの中でも特別なプロパティです。これらにアクセスすると、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内の連絡先を更新します。

連絡先へのメール送信

 連絡先の使用例として、アプリケーションのフォームにメール送信ボタンを追加しましょう。ユーザーがこのボタンをクリックしたら、ListBox内の選択された連絡先にメールが自動的に送信されるようにします。このボタンのclickイベントは次のようになります。

Outlook.Application oApp = new Outlook.Application();

if (this.listViewContacts.SelectedItems != null &&
   this.listViewContacts.SelectedItems.Count > 0)
{
   Outlook.ContactItem oRecip = (Outlook.ContactItem)
      (this.listViewContacts.SelectedItems[0].Tag);

   Outlook.MailItem email = (Outlook.MailItem)
      (oApp.CreateItem(Outlook.OlItemType.olMailItem));
   email.Recipients.Add(oRecip.Email1Address);
   email.Subject = "Just wanted to say...";
   email.Body = "Have a great day!";

   if (MessageBox.Show(
      "Are you sure you want to send a good day message to " +
      oRecip.Email1DisplayName + "?", "Send?",
      MessageBoxButtons.OKCancel)
      == DialogResult.OK)
   {
      try
      {
         ((Outlook.MailItem)email).Send();
         MessageBox.Show("Email sent successfully.", "Sent");
      }
      catch (Exception ex)
      {
         MessageBox.Show("Email failed: " + ex.Message,
            "Failed Send");
      }
   }

   oRecip = null;
   email = null;
}

 Redemptionを使わない場合、上記のコードもセキュリティ警告の影響を受けます。

ビジネスケース

 Outlookの相互運用が効果を発揮するビジネスケースは枚挙にいとまがありません。たとえば私の開発したあるシステムでは、Outlookの相互運用とRedemptionを用いてユーザーのOutlook連絡先をインポートし、その情報をエンタープライズアプリケーション内で作られるプロジェクトと関連付けできるようにしています。これにより、ユーザーがアプリケーション固有の連絡先情報を保存できます。また、RedemptionのAddressBook機構を利用して、Active Directoryレベルでメール送信先のユーザーを選択したりユーザーをレビュープロセスに追加したりできる機能を簡単に実装しています。さらにOutlookのクラスを利用して、ユーザーがメールをOutlookコンソールから添付ファイルとしてプロジェクトへ「プッシュ」できるようなアドインも作成しています。

まとめ

 本稿で紹介した機能は、Outlookの相互運用クラスで実現できること(ひいてはOfficeの統合ライブラリセットで実現できること)のほんの一部にすぎません。本稿では、Outlookのクラスを利用してユーザーの連絡先情報を操作する方法と、フォルダ選択ダイアログのような組み込み機能を利用する方法を学びました。これらのライブラリをいろいろ試してビジネスアプリケーションのニーズをどれだけ満たすことができるか、詳しく調べてみることをお勧めします。このシリーズの第2部では、アドインによるOutlookの拡張について解説するのでご期待ください。アドインを利用すると、ユーザーの慣れ親しんだ環境で新しい機能を公開でき、ユーザーの生産性を高めることができます。Officeスイートを出発点にすればOffice関連アプリケーションをゼロから作らなくて済むため、短時間で高い価値を生み出すことができます。

謝辞

 このシリーズに関して適切な助言をしてくれたMatt Goebelに感謝します。

著者紹介

Rachel Wireman(Rachel Wireman)
MCPD、MCTS。Windowsソリューション専門の開発者。イリノイ州オークブルックのCrowe Chizekに所属。連絡先はrwireman@crowechizek.com。


関連記事
  • 『Outlook 2007 with Business Contact Manager』が単体販売へ
  • 「Outlook 2007」で階層からアドレス検索可能に、導入キットを無償ダウンロード開始
  • SAP ジャパン、PDF や MS Office から利用できる「SAP CRM 2007」
  • ClearContext、『Outlook』環境活用ツールの新版をリリース
  • au 携帯から Outlook 2007のメール送受信が可能に


  • 関連テーマ
  • Microsoft


  • ★最新トップニュース
    国内 日本 HP と TIS が OSS BPM で協業、低価格で高品質な BPM システムを(Webファイナンス 8月7日 18:00)
    従来の BPM 商用製品は非常に高価で、システム構築に数億円規模の投資が必要だったが、Red Hat の JBoss jBPM をベースとした TIS の BPMソリューションと、HP ProLiant を組み合わせることで、大幅にコストを削減できる。
    国内 サイバー・バズ、動画シーディングサービス「Bzzool」を9月上旬から開始(Webマーケティング 8月7日 17:50)
    株式会社サイバーエージェントの連結子会社である、株式会社サイバー・バズは2008年8月7日、PC・モバイルの両メディアに対応したバイラル動画シーディングサービス「Bzzool(バズール)」を9月上旬に開始する、と発表した。
    国内 今後欲しいケータイ充電器は「ソーラー式」がトップ――ネットエイジア調べ画像のある記事(Webマーケティング 8月7日 17:50)
    ネットエイジア株式会社は、15歳〜39歳のケータイユーザーに対し「外出時のケータイ充電」に関しての実態調査をモバイルリサーチにて実施、2008年8月7日、調査結果を発表した。
    国内 TCA、7月度の携帯契約数を発表――ソフトバンクが15か月連続純増 No.1 に(携帯・ワイヤレス 8月7日 17:50)
    電気通信事業者協会(TCA)は、2008年8月7日、7月末現在の「携帯電話/IP 接続サービス/PHS/無線呼び出し契約数」を発表した。
    国内 Infoseek 検索キーワードランキング (2008/7/29〜2008/8/4)(Webマーケティング 8月7日 17:40)
    今週の時事は、元プロボクサーで俳優の「大和武士」が、殺人未遂の現行犯で逮捕され不名誉な今週の首位獲得。
    トピックス
    > オススメのIT系求人情報【毎週月曜日更新】
    footer_301.gif


    リサーチ
    > デイリーリサーチDLサイト
    > OnlineResearchPortal (リサーチデータバンク)
    > モバイルリサーチ with goo
    footer_301.gif
    キーワード
    > iPhone > Youtube
    > Google > モバイルノート
    > 半導体 > ウィルコム
    > テーマ一覧はこちら
    footer_301.gif
    セミナー情報
    > 第1回インターネットコムマーケティングセミナー「新規クライアントを効率的に獲得する Web マーケティング手法とは」(3月26日)多数のご参加ありがとうございました
    footer_301.gif
    デベロッパー
    > DevX
    > CodeGuru
    > developer.com
    footer_301.gif
    j.i.c.ブログ
    ブログ一覧
    データメーション 【データメーション】
    以前はサイバースパイ活動に賛成だったのが今度は反対へ(8月6日)
    ベンチャー専門家の目利きブログ「なぜこの企業は伸びるのか?」 【ベンチャー専門家の目利きブログ「なぜこの企業は伸びるのか?」】
    「日本発のWEBサービスを世界中に広めたい!!」/ウノウ株式会社(8月6日)
    Graphic Design Forum 【Graphic Design Forum】
    携帯電話をどうにかしてくれ (8月1日)
    デスマーチからの脱却 【デスマーチからの脱却】
    独自ドメインでiPhoneのメール送受信(7月25日)
    エンジニアの独り言 【エンジニアの独り言】
    新入社員が配属される季節ですね。(7月23日)
    ジュピターメディア創設者がITを斬る 【ジュピターメディア創設者がITを斬る】
    Alan を探せ(7月18日)
    footer_301.gif
    最新コラム一覧
    週刊-サイト別アクセス状況データ 週刊-サイト別アクセス状況データ

    ビデオリサーチインタラクティブ調査(月間インターネットオーディエンスデータ)(8月7日)
    「IT の耳」 「IT の耳」

    【書評】『心に響くウェブ動画マーケティング。』(8月7日)
    検索エンジンマーケティング 検索エンジンマーケティング

    企業の不祥事がおきても動じない SEM のコツ(8月7日)
    百式のネットビジネス研究 百式のネットビジネス研究

    SuperMemo 理論を応用した、最強の記憶ツール「spicyelephant」(8月7日)
    Eメールマーケティング事情 Eメールマーケティング事情

    貴社メルマガは読者のアドレスリストに登録されているだろうか?(8月6日)
    SNSをビジネスに活用しよう SNSをビジネスに活用しよう

    ソーシャルブックマークの可能性を考えよう(8月5日)
    DevX DevX

    Windowsフォームアプリケーションにドラッグ&ドロップ機能を実装する(8月5日)
    日本と韓国のインターネットビジネス最新動向調査 日本と韓国のインターネットビジネス最新動向調査

    日本と韓国のEコマースサイト比較2―価格比較サイト(8月5日)
    エンジニア転職ノウハウ開発室 エンジニア転職ノウハウ開発室

    2008年夏ボーナス額平均70.2万円!金融・鉄鋼が好調(8月5日)
    アイレップの SEM フロンティア アイレップの SEM フロンティア

    間違いだらけの検索キーワード選び(8月5日)
    footer_301.gif
    専門チャンネル
    > セキュリティチャネル > テレコムチャネル
    > サーチエンジンウォッチ
    footer_301.gif
    海外のインターネットコム アメリカ韓国ドイツトルコ
    関連企業のサイト:ストックフォト イラスト ネットストリート ホテル予約サイト タウン情報 出張 事業継承 シミュレーション トランクルーム 優待映画チケット 田舎暮らしガイド オリジナルデザインTシャツ ニタコエ
    Copyright 2008 Jupitermedia Corporation All Rights Reserved. http://www.internet.com/
    space.gif space.gif