次の方法で共有


複数のメッセージで Outlook アドインをアクティブ化する

アイテムの複数選択機能を使用すると、Outlook アドインで、選択した複数のメッセージに対する操作を 1 回でアクティブ化して実行できるようになりました。 Customer Relationship Management (CRM) システムへのメッセージのアップロードや多数の項目の分類など、特定の操作を 1 回のクリックで簡単に完了できるようになりました。

次のセクションでは、読み取りモードで複数のメッセージの件名と送信者のメール アドレスを取得するようにアドインを構成する方法を示します。

注:

項目の複数選択機能のサポートが 要件セット 1.13 で導入され、追加の項目プロパティが後続の要件セットで使用できるようになりました。 この要件セットをサポートする クライアントおよびプラットフォーム を参照してください。

環境を設定する

Office アドイン用 Yeoman ジェネレーターを使用してアドイン プロジェクトを作成するには、Outlook クイック スタートを完了します。

マニフェストを構成する

  1. 任意のコード エディターで、作成した Outlook クイック スタート プロジェクトを開きます。

  2. プロジェクトのルートにある manifest.json ファイルを開きます。

  3. "authorization.permissions.resourceSpecific" 配列で、"name" プロパティの値を "Mailbox.ReadWrite.User" に変更します。 完了すると、次のようになります。

    "authorization": {
        "permissions": {
            "resourceSpecific": [
                {
                    "name": "Mailbox.ReadWrite.User",
                    "type": "Delegated"
                }
            ]
        }
    },
    
  4. "extensions.runtimes" 配列の最初のオブジェクトで、次の変更を行います。

    1. "requirements.capabilities.minVersion" プロパティを "1.13" に変更します。
    2. 同じ "actions" オブジェクトに "supportsNoItemContext" プロパティを追加し、 trueに設定します。
    3. 同じ "actions" オブジェクトに "multiselect" プロパティを追加し、 trueに設定します。

    変更を行った後、コードは次のようになります。

    "runtimes": [
        {
            "requirements": {
                "capabilities": [
                    {
                        "name": "Mailbox",
                        "minVersion": "1.13"
                    }
                ]
            },
            "id": "TaskPaneRuntime",
            "type": "general",
            "code": {
                "page": "https://localhost:3000/taskpane.html"
            },
            "lifetime": "short",
            "actions": [
                {
                    "id": "TaskPaneRuntimeShow",
                    "type": "openPage",
                    "pinnable": false,
                    "view": "dashboard",
                    "supportsNoItemContext": true,
                    "multiselect": true
                }
            ]
        },
        ...
    ]
    
  5. "id" が "CommandsRuntime" である "extensions.runtimes" 配列の 2 番目のオブジェクトを削除します。

  6. "extensions.ribbons.tabs.controls" 配列で、"id" が "ActionButton" である 2 番目のオブジェクトを削除します。

  7. 変更内容を保存します。

注:

アドインでアイテムの複数選択機能を有効にした場合、マニフェストで明示的に構成されていない場合でも、アドインは自動的に アイテム コンテキストなしの 機能をサポートします。 複数選択アドインでの作業ウィンドウのピン留め動作の詳細については、「複数選択アドイン での作業ウィンドウのピン留め」を参照してください。

作業ウィンドウを構成する

項目の複数選択は、 SelectedItemsChanged イベントに依存して、メッセージが選択または選択解除されるタイミングを決定します。 このイベントには、作業ウィンドウの実装が必要です。

  1. ./src/taskpane フォルダーから、 taskpane.htmlを開きます。

  2. <body> 要素で、<メイン> 要素全体を次のマークアップに置き換えます。

    <main id="app-body" class="ms-welcome__main">
        <h2 class="ms-font-l">Get information about each selected message</h2>
        <ul id="selected-items"></ul>
        <div role="button" id="run" class="ms-welcome__action ms-Button ms-Button--hero ms-font-xl">
            <span class="ms-Button-label">Get information</span>
        </div>
    </main>
    
  3. 従来の Outlook on Windows の場合のみ。 既存の スクリプト 要素を次のマークアップに置き換えます。 これは、Office JavaScript API のプレビュー バージョンを参照します。

    <script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/beta/hosted/office.js"></script>
    

    注:

    このチュートリアルでは、現在プレビュー段階にある loadItemByIdAsync メソッドと unloadAsync メソッドを実装しているため、Office JavaScript API のプレビュー バージョンが使用されます。 複数選択アドインでこれらのメソッドが実装されていない場合は、代わりに https://appsforoffice.microsoft.com/lib/1/hosted/office.js を使用します。 詳細については、「 Office JavaScript API ライブラリの参照」を参照してください。

  4. 変更内容を保存します。

SelectedItemsChanged イベントのハンドラーを実装する

SelectedItemsChanged イベントが発生したときにアドインに警告するには、addHandlerAsync メソッドを使用してイベント ハンドラーを登録する必要があります。

  1. ./src/taskpane フォルダーから、 taskpane.jsを開きます。

  2. Office.onReady()関数を次のように置き換えます。

    let list;
    
    Office.onReady((info) => {
      if (info.host === Office.HostType.Outlook) {
        document.getElementById("sideload-msg").style.display = "none";
        document.getElementById("app-body").style.display = "flex";
        document.getElementById("run").onclick = run;
        list = document.getElementById("selected-items");
    
        // Register an event handler to identify when messages are selected.
        Office.context.mailbox.addHandlerAsync(Office.EventType.SelectedItemsChanged, run, (asyncResult) => {
          if (asyncResult.status === Office.AsyncResultStatus.Failed) {
            console.log(asyncResult.error.message);
            return;
          }
    
          console.log("Event handler added.");
        });
      }
    });
    
  3. 変更内容を保存します。

プロパティを取得し、選択したメッセージに対する操作を実行する

イベント ハンドラーを登録したので、アドインでプロパティを取得したり、選択した複数のメッセージに対して操作を実行したりできるようになりました。 選択したメッセージを処理するには、2 つの方法があります。 各オプションの使用は、シナリオに必要なプロパティと操作によって異なります。

  • getSelectedItemsAsync メソッドを呼び出して、次のプロパティを取得します。

    • 添付ファイルのブール値
    • 会話 ID
    • インターネット メッセージ ID
    • アイテム ID
    • アイテム モード (Read または Compose)
    • 項目の種類 (Message は、現時点でサポートされている唯一の型です)
    • 件名行
  • loadItemByIdAsync メソッド (プレビュー) を呼び出して、getSelectedItemsAsyncによって提供されないプロパティを取得したり、選択したメッセージに対して操作を実行したりします。 loadItemByIdAsync メソッドは、メッセージの Exchange Web Services (EWS) ID を使用して、一度に 1 つの選択したメッセージを読み込みます。 選択したメッセージの EWS ID を取得するには、 getSelectedItemsAsyncを呼び出すことをお勧めします。 loadItemByIdAsyncを使用して選択したメッセージを処理した後、別の選択したメッセージでloadItemByIdAsyncを呼び出す前に unloadAsync メソッド (プレビュー) を呼び出す必要があります。

    ヒント

    loadItemByIdAsync メソッドを使用する前に、getSelectedItemsAsyncを使用して必要なプロパティに既にアクセスできるかどうかを判断します。 可能であれば、 loadItemByIdAsyncを呼び出す必要はありません。

次の例では、 getSelectedItemsAsync メソッドと loadItemByIdAsync メソッドを実装して、選択した各メッセージから件名と送信者のメール アドレスを取得します。

注:

loadItemByIdAsyncメソッドは、現在、従来の Outlook on Windows でプレビュー段階にあります。 この API をプレビューするには、バージョン 2405 (ビルド 17606.10000) 以降をインストールします。 次に、 Microsoft 365 Insider プログラム に参加し、[ ベータ チャネル ] オプションを選択します。

  1. taskpane.jsで、既存の run 関数を次のコードに置き換えます。

    export async function run() {
      // Clear the list of previously selected messages, if any.
      clearList(list);
    
      // Get the subject line and sender's email address of each selected message and log it to a list in the task pane.
      Office.context.mailbox.getSelectedItemsAsync((asyncResult) => {
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
          console.log(asyncResult.error.message);
          return;
        }
    
        const selectedItems = asyncResult.value;
        getItemInfo(selectedItems);
      });
    }
    
    // Gets the subject line and sender's email address of each selected message.
    async function getItemInfo(selectedItems) {
      for (const item of selectedItems) {
        addToList(item.subject);
        // The loadItemByIdAsync method is currently only available to preview in classic Outlook on Windows.
        if (Office.context.diagnostics.platform === Office.PlatformType.PC) {
          await getSenderEmailAddress(item);
        }
      }
    }
    
    // Gets the sender's email address of each selected message.
    async function getSenderEmailAddress(item) {
      const itemId = item.itemId;
      await new Promise((resolve) => {
        Office.context.mailbox.loadItemByIdAsync(itemId, (result) => {
          if (result.status === Office.AsyncResultStatus.Failed) {
            console.log(result.error.message);
            return;
          }
    
          const loadedItem = result.value;
          const sender = loadedItem.from.emailAddress;
          appendToListItem(sender);
    
          // Unload the current message before processing another selected message.
          loadedItem.unloadAsync((asyncResult) => {
            if (asyncResult.status === Office.AsyncResultStatus.Failed) {
              console.log(asyncResult.error.message);
              return;
            }
    
            resolve();
          });
        });
      });
    }
    
    // Clears the list in the task pane.
    function clearList(list) {
      while (list.firstChild) {
        list.removeChild(list.firstChild);
      }
    }
    
    // Adds an item to a list in the task pane.
    function addToList(item) {
      const listItem = document.createElement("li");
      listItem.textContent = item;
      list.appendChild(listItem);
    }
    
    // Appends data to the last item of the list in the task pane.
    function appendToListItem(data) {
      const listItem = list.lastChild;
      listItem.textContent += ` (${data})`;
    }
    
  2. 変更内容を保存します。

試してみる

  1. ターミナルから、プロジェクトのルート ディレクトリで次のコードを実行します。 これにより、ローカル Web サーバーが起動し、アドインがサイドロードされます。

    npm start
    

    ヒント

    アドインが自動的にサイドロードされない場合は、「 テスト用の Outlook アドインをサイドロード する」の手順に従って、Outlook で手動でサイドロードします。

  2. Outlook で、閲覧ウィンドウが有効になっていることを確認します。 閲覧ウィンドウを有効にするには、「閲覧ウィンドウを 使用してメッセージをプレビューするように構成する」を参照してください。

  3. 受信トレイに移動し、複数のメッセージを選択するには、 Ctrl キー を押しながらメッセージを選択します。

  4. [ Show Taskpane]\(タスクペインの表示\) を選択します。 アドインの場所は、Outlook クライアントによって異なります。 ガイダンスについては、「 Outlook でアドインを使用する」を参照してください。

  5. 作業ウィンドウで、[情報の 取得] を選択します。 選択したメッセージの件名と送信者のメール アドレスの一覧が作業ウィンドウに表示されます。

    選択した複数のメッセージから取得された件名行のサンプル リスト。

  6. ローカル Web サーバーを停止してアドインをアンインストールする場合は、該当する手順に従います。

    • サーバーを停止するには、次のコマンドを実行します。 npm startを使用した場合は、次のコマンドもアドインをアンインストールする必要があります。

      npm stop
      
    • アドインを手動でサイドロードした場合は、「 サイドロードされたアドインを削除する」を参照してください。

項目の複数選択の動作と制限事項

アイテムの複数選択では、読み取りモードと新規作成モードの両方で Exchange メールボックス内のメッセージのみがサポートされます。 Outlook アドインは、次の条件が満たされた場合にのみ、複数のメッセージに対してアクティブ化されます。

  • メッセージは、一度に 1 つの Exchange メールボックスから選択する必要があります。 Exchange 以外のメールボックスはサポートされていません。
  • メッセージは、一度に 1 つのメールボックス フォルダーから選択する必要があります。 スレッド ビューが有効になっていない限り、アドインが複数のメッセージを別のフォルダーに配置している場合はアクティブ化されません。 詳細については、「 会話での複数選択」を参照してください。
  • アドインは、 SelectedItemsChanged イベントを検出するために作業ウィンドウを実装する必要があります。
  • Outlook の閲覧ウィンドウ を有効にする必要があります。 ただし、項目の複数選択機能がマニフェストの項目なしのコンテキスト機能を使用して有効になっている場合は例外です。 詳細については、「 閲覧ウィンドウを有効にしたり、メッセージを選択せずに Outlook アドインをアクティブ化する」を参照してください。
  • 一度に最大 100 個のメッセージを選択できます。
  • loadItemByIdAsync メソッドは、選択したメッセージを一度に 1 つだけ処理します。 メッセージの処理が完了した後loadItemByIdAsyncunloadAsyncを呼び出してください。 これにより、アドインは、次に選択したメッセージを読み込んで処理できます。
  • 通常、get 操作は、 loadItemByIdAsync メソッドを使用して読み込まれた選択したメッセージに対してのみ実行できます。 ただし、読み込まれたメッセージの カテゴリ を管理することは例外です。 読み込まれたメッセージからカテゴリを追加、取得、削除できます。
  • loadItemByIdAsync メソッドは、作業ウィンドウと関数コマンド アドインでサポートされています。このメソッドは、イベント ベースのアクティブ化アドインではサポートされていません。

注:

会議の招待と応答は、予定ではなくメッセージと見なされるため、選択に含めることができます。

会話での複数選択

アイテムの複数選択は、メールボックスまたは特定のフォルダーで有効になっているかどうかに関係なく 、会話ビュー をサポートします。 次の表では、会話が展開または折りたたまれた場合、メッセージ交換ヘッダーが選択されたとき、および会話メッセージが現在表示されているフォルダーとは異なるフォルダーにある場合の予期される動作について説明します。

Selection 展開された会話ビュー 折りたたまれた会話ビュー
メッセージ交換ヘッダーが選択されている メッセージ交換ヘッダーが選択されている唯一の項目である場合、マルチ選択をサポートするアドインはアクティブになりません。 ただし、他のヘッダー以外のメッセージも選択されている場合、アドインは、選択したヘッダーではなく、それらでのみアクティブ化されます。 動作は、Outlook クライアントによって異なります。

Windows (クラシック) および Mac 上の Outlook:
メッセージの選択には、最新のメッセージ (つまり、会話スタック内の最初のメッセージ) が含まれます。

会話内の最新のメッセージが現在表示されているフォルダーの別のフォルダーにある場合、現在のフォルダーにあるスタック内の後続のメッセージが選択に含まれます。

Outlook on the webと新しい Outlook on Windows:
メッセージ交換スタック内のすべてのメッセージが選択されます。 これには、現在表示されているフォルダー以外のフォルダーにある会話内のメッセージが含まれます。
会話スタック内の複数の選択されたメッセージは、現在表示されているメッセージと同じフォルダーに配置されます 同じ会話で選択したすべてのメッセージが選択に含まれます。 該当なし。 メッセージ交換スタックを展開して、メッセージから複数のメッセージを選択する必要があります。
会話スタック内の複数の選択されたメッセージは、現在表示されているフォルダーとは異なるフォルダーに配置されます 同じ会話で選択したすべてのメッセージが選択に含まれます。 該当なし。 メッセージ交換スタックを展開して、メッセージから複数のメッセージを選択する必要があります。

注:

すべての Outlook クライアントで、異なる会話に属する複数のメッセージを選択することはできません。 別の会話が展開されている間に別の会話を展開すると、現在展開されている会話のビューが折りたたまれて、選択したメッセージはすべて選択解除されます。 ただし、同じ展開された会話から複数のメッセージと、会話の一部ではないメッセージを同時に選択できます。

複数選択アドインでの作業ウィンドウのピン留め

Outlook on the webおよび新しい Outlook on Windows では、複数選択アドインの作業ウィンドウが開くと、Outlook クライアントに自動的にピン留めされます。 ユーザーが別のメール アイテムに切り替えたり、作業ウィンドウからピン アイコンを選択した場合でも、 ピン 留めされたままになります。 作業ウィンドウを閉じるには、作業ウィンドウから [ 閉じる ] ボタンを選択する必要があります。

逆に、Outlook on Windows (クラシック) と Mac では、ユーザーが別のメール アイテムに切り替えても、作業ウィンドウは自動的にピン留めされ、閉じられません。

次の手順

選択した複数のメッセージに対してアドインを操作できるようになったので、アドインの機能を拡張し、ユーザー エクスペリエンスをさらに強化できます。 Microsoft Graph などのサービスで選択したメッセージのアイテム ID を使用して、より複雑な操作を実行する方法について説明します。

関連項目