Dieser Artikel wurde maschinell übersetzt.

Microsoft Office

Erkunden der JavaScript-API für Office: Eine Beispiel-Mail-App

Angela Chu-Hatoun

Diesen Artikel begleitet die MSDN Magazine Artikel, "Exploring JavaScript-API für Office: Mail Apps"(msdn.microsoft.com/magazine/dn201750).Hier werde ich Fuß durch den Bau einer Probe Gruppe IM Post-app mit den Techniken, die in diesem Artikel erläutert.

Start Gruppe IM aus einer Nachricht

Die Gruppe IM Post-app können Sie bequem starten eine Gruppe-instant-messaging-Sitzung mit dem Absender, Empfänger oder die Personen, deren e-Mail-Adressen in den Körper einer ausgewählten Nachricht enthalten sind, ohne Outlook oder Outlook Web App zu verlassen.Abbildung 1 zeigt dem Benutzer Belinda Jeff und Ben und wird eine IM-Sitzung mit der Gruppe IM startbereit app Mail Empfänger ausgewählt haben.Im app-Bereich enthält die SMTP-Adressen von allen Empfängern der aktuellen Nachricht im Lesebereich sowie alle SMTP-Adressen (für Vernon, Sam und Roman) im Nachrichtentext für Belinda eine IM-Sitzung mit starten.

Selecting Message Recipients in the Group IM Mail App to Start a Group Chat SessionAbbildung 1 Auswählen von Empfängern der Nachricht in der Gruppe IM Mail-App um eine Gruppen-Chat-Sitzung zu starten

Die Gruppe IM Post-app übernimmt Lync als den IM-Client, der die Session Initiation Protocol (SIP) und ein Befehlszeilen Ansatz starten IM unterstützt.Sie können ändern Sie die CheckAddress-Funktion in der JavaScript-Datei dieser Mail-app, InstantMessage.js, dargestellt Abbildung 2 (Sie können den vollständigen Satz der Quelldateien für die e-Mail-app an code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16), die app für einen anderen IM-Client anpassen.

Abbildung 2 die JavaScript-Datei InstantMessage.js

var _Item;
var itemEntities;
var myEntities = new Array();
var uniqueNumInRecipientsAndBody=0;
Office.initialize = function () {
  _Item = Office.context.mailbox.item;
  itemEntities = _Item.getEntities();
  $(document).ready(function () {
   initIM();
  }); 
}
var checkedItems;
checkedItems = "";
// This function verifies if the user has checked any of the
// checkboxes for the SMTP addresses, and if so, constructs a hyperlink
// for starting an IM session.
function checkAddress(emailForm)
{
  var anychecked;
  anychecked = 0;
  checkedItems = "im:";
  // See if the e-mail sender address is checked.
if (emailForm.checkbox0.checked == true) {
    checkedItems += "<sip:" + _Item.sender.emailAddress + ">";
    anychecked = 1;
  }
  for (var i=1; i<=uniqueNumInRecipientsAndBody; i++) {
    var tempy;
    // Determine if each checkbox is checked.
// Each checkbox name is a variable depending on value of i.
tempy = "checkbox" + i;
    // Use JavaScript square bracket notation instead of dot notation to access
    // emailForm.tempy.checked, because tempy is a variable.
tempy = emailForm[tempy]["checked"];
    if (tempy)  {
      // If the checkbox is checked, construct an SIP address
      // for that e-mail address.
checkedItems += "<sip:" + myEntities[i-1] + ">";
      anychecked = 1; 
    }
  }
  // Clear the variable if none of the checkboxes is checked.
// UI phrase remains not a hyperlink.
if (anychecked == 0) {
    checkedItems = "";
    document.getElementById("mySpan").innerHTML = "Start an instant message conversation";
  } 
  else {
    // If one or more checkboxes are checked, then turn the UI phrase into a hyperlink.
document.getElementById("mySpan").innerHTML =
      "<A HREF = \"" + checkedItems + "\">Start an IM conversation</A>";
  }    
}
// This function counts the unique number of e-mail addresses.
// The first such count number of array cells in myEntities
// contain the unique e-mail addresses.
function makeMyAddressesUnique (addressArray)
{
  var emailAddress;
  var j=0;
  for (var i in addressArray) {
    emailAddress = addressArray[i];
    // Check if e-mail address is not the same as the sender's address
    // or the current user's address, is new and
    // has not occured in the first i number of cells in addressArray.
if ((emailAddress.toLowerCase() !== _Item.sender.emailAddress.toLowerCase()) &&
      (emailAddress.toLowerCase() !==  
      Office.context.mailbox.userProfile.emailAddress.toLowerCase()) &&
      (emailAddrIsNew (i, emailAddress, addressArray))) {
      myEntities[j] = emailAddress.toLowerCase();
      j++;
    }
    // Otherwise e-mail address already occurred in sender or addressArray, so ignore it.
// The next new e-mail address will overwrite cell j in myEntities.
}
    // Tallied the number of unique addresses in the body.
uniqueNumInRecipientsAndBody = j;   
}
function emailAddrIsNew (index, address, array) {
  var counter = 0;
  while (counter < index) {
    if (address.toLowerCase() === array[counter].toLowerCase()) {
      return (false);
    }
    counter++;
  }
  return (true);
}
function initIM()
{
  var myHTMLString;
  var myCell;
  var tempEntities;
  var toRecipients;
  var ccRecipients;
  var recipientsAddresses = new Array ();
  var recipientsAndBodyAddresses = new Array();
  toRecipients = _Item.to;
  ccRecipients = _Item.cc;
  myHTMLString = "";
  // Assign first the To recipients addresses, followed by
  // the cc recipients addresses.
for (var i=0; i<toRecipients.length; i++) {
    recipientsAddresses[i] = toRecipients[i].emailAddress;
  }
  for (var i=0; i<ccRecipients.length; i++) {
    recipientsAddresses[i+toRecipients.length] = ccRecipients[i].emailAddress;
  }
  recipientsAndBodyAddresses = recipientsAddresses.concat(itemEntities.emailAddresses);
  makeMyAddressesUnique (recipientsAndBodyAddresses);
  myCell = document.getElementById('extensionspace');
  myHTMLString += "<form><span id=\"mySpan\">Start an instant message conversation</span>" +
    " with the following persons:<BR>";
  myHTMLString += "<input type=checkbox name='checkbox0" + "' value='" +
    _Item.sender.emailAddress + "' onClick='checkAddress(this.form)' />" +
    _Item.sender.emailAddress + "<br>";
  for (var i=0; i<uniqueNumInRecipientsAndBody; i++) {
    myHTMLString += "<input type=checkbox name='checkbox" + (i+1) + "' value='" +
      myEntities[i] + "' onClick='checkAddress(this.form)' />" +
      myEntities[i] + "<br>";
    }
    myCell.innerHTML = myHTMLString + "</form>";
}

Das Szenario

Beim Lesen einer e-Mails, Sie möchten eine Diskussion vorwärtszukommen, indem die Empfänger der Nachricht Instant messaging oder mit Personen, deren E-mail-Adressen, in den Textkörper der Nachricht enthalten sind. Sie können wählen Sie die Gruppe IM Post-app, wählen Sie in der app-Bereich-Empfänger oder e-mail-Adressen aus der Nachricht und ohne Outlook zu verlassen, beginnen eine Gruppe IM-Sitzung in Ihrem IM-Client.

Dieses Szenario wird von der Verwendung von Outlook 2013 (oder höher) und Exchange Online oder Exchange Server 2013 (oder höher). Die Teilnehmer und ihre SMTP-Adressen sollten auch von den IM-Client unterstützt werden.

Versuchen die Mail-App

Folgen Sie den Anweisungen in der Datei "Readme für Gruppen-IM Post-app", mit dem zugehörigen Codedownload (code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16), zum herunterladen und Installieren der Post-app für Ihr Postfach. Outlook wird diese Post-app für alle E-mail-Nachrichten in Ihrem Posteingang aktiviert, so Sie diese Post-app mit jeder Nachricht versuchen können, die Sie sind anzeigen im Lesebereich oder mail-Inspektor. Alternativ für eine geregelte Testumgebung, können Sie eine spezielle E-mail-Testnachricht zu erstellen, gehören selbst und ein paar andere Empfänger geben Sie ein paar andere SMTP-Adressen in den Nachrichtentext und senden Sie die Nachricht.

Um zu testen, öffnen Sie die speziellen Test-Nachricht im Lesebereich angezeigt, und wählen Sie die Schaltfläche "Gruppe IM" app ". Im app-Bereich werden aufgelistet, die E-mail-Adressen der Empfänger und die SMTP-Adressen in den Nachrichtentext. Wählen Sie im Bereich app zwei oder mehrere E-mail-Adressen und wählen Sie den Link "IM-Unterhaltungen starten". Ihre IM-Client öffnet sich ein Fenster IM für Sie die Gruppen-Chat-Sitzung zu starten.

Der Rest dieses Artikels beschreibt die XML-Manifest, HTML und JavaScript-Dateien für die Gruppe IM Post-app. Auf dem Weg werde ich Sehenswürdigkeiten hervorheben.

Das XML-Manifest

Jeder Post-app muss ein Manifest, das die apps für Office XML-Schema folgt, wie in der MSDN Library-Artikel dokumentiert definieren **"**Schemazuordnung (apps für Office)," am bit.ly/13bPpWH. Ein e-Mail-app-Manifest definiert die folgende Metadaten für die app:

  • Identität hinzufügen
  • Gebietsschema-Unterstützung
  • Fähigkeit benötigt, der die Host-Anwendungen
  • Formularfaktoren
  • Entsprechende HTML-Datei für jede Form-Factor (falls erforderlich)
  • Anforderungen hinsichtlich der
  • Erforderlichen Berechtigungen
  • Aktivierung-Regeln

In diesem Abschnitt werden bestimmte Punkte des Interesses an das Manifest, Lync IM.xml, die die Gruppe IM Post-app zu charakterisieren. Eine vollständige Liste des Manifests, finden Sie unter Abbildung 3 (Sie können den vollständigen Satz der Quelldateien für die e-Mail-app an (code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16).

Abbildung 3-App XML-Manifest-Datei

<?xml version="1.0" encoding="utf-8"?>
<OfficeApp xmlns="https://schemas.microsoft.com/office/appforoffice/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MailApp">
  <Id>0DA74E27-C945-47A0-9857-64268DEF6542</Id>
  <Version>1.0</Version>
  <ProviderName>Microsoft</ProviderName>
  <DefaultLocale>EN-US</DefaultLocale>
  <DisplayName DefaultValue="Group IM">
    <Override Locale="FR-FR" Value="Message instantané"/>
  </DisplayName>
  <Description DefaultValue="Start a group instant message session using Lync.">
    <Override Locale="FR-FR" Value="Démarrer un message instantané appel directement à partir de Outlook ou Outlook Web App à l'aide de Lync."/>
  </Description>
  <IconUrl DefaultValue="https://exchangemoe.redmond.corp.microsoft.com/ext/ach/GroupIM/mslync-logo_small.png"/>
  <Capabilities>
    <Capability Name="Mailbox"/>
  </Capabilities>
  <DesktopSettings>
    <!-- Change the following line to specify the web server -->
    <!-- that hosts the HTML file.
-->
    <SourceLocation DefaultValue=
      "https://exchangemoe.redmond.corp.microsoft.com/ext/ach/GroupIM/InstantMessage.htm"/>
    <RequestedHeight>216</RequestedHeight>
  </DesktopSettings>
  <TabletSettings>
    <!-- Change the following line to specify the web server -->
    <!-- that hosts the HTML file.
-->
    <SourceLocation DefaultValue=
      "https://exchangemoe.redmond.corp.microsoft.com/ext/ach/GroupIM/InstantMessage.htm"/>
    <RequestedHeight>180</RequestedHeight>
  </TabletSettings>
  <Permissions>ReadItem</Permissions>
  <Rule xsi:type="ItemIs" ItemType="Message"/>
</OfficeApp>

Das Stammelement OfficeApp gibt den Namespace und die app Typ MailApp, und ist das Root-Element, die untergeordneten Elemente für Mail apps in sequentieller Reihenfolge einschließt. MailApp erstreckt sich OfficeApp, und seine untergeordneten Elemente definieren weitere Metadaten für e-Mail-Anwendungen:

<OfficeApp xmlns="https://schemas.microsoft.com/office/appforoffice/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MailApp">

Ein eindeutiger Bezeichner die Id-Element gibt universally unique Identifier (UUID), das diese app von anderen apps für Office für die Host-Anwendung unterscheidet:

<Id>0DA74E27-C945-47A0-9857-64268DEF6542</Id>

Ein App-Label die DisplayName Element identifiziert die app als "Gruppe IM" auf der app-Leiste. Outlook diese app durch die Anzeige "Gruppe IM" auf der app-Leiste aktiviert, wenn die Regeln, die im Manifest angegeben in Bezug auf das ausgewählte Element erfüllt sind (siehe die "Aktivierung Regeln" Abschnitt):

<DisplayName DefaultValue="Group IM">
  <Override Locale="FR-FR" Value="Message instantané"/>
</DisplayName>

Gebietsschemaunterstützung The DefaultLocale-Element gibt den Namen der Kultur des Gebietsschemas, in diesem Fall EN-US, der UI-Zeichenfolgen in der app-Manifest. Das Override-Kind-Element können Sie um Gebietsschema-spezifische Namen (z. B. den Namen "Nachricht Instantané" für das Gebietsschema FR-FR im vorherigen Beispiel), Beschreibungen, Symbolbilder oder Quelldateien zu unterstützen:

<DefaultLocale>EN-US</DefaultLocale>

Eine ausführliche Beschreibung The Description-Element gibt in der Regel den Zweck der app. Das Attribut DefaultValue entspricht das Gebietsschema, das DefaultLocale-Element angegeben. Ein Override untergeordnetes Element können Sie um eine Beschreibung für ein anderes Gebietsschema, z. B. FR-FR zu unterstützen:

<Description DefaultValue="Start a group instant message session using Lync.">
  <Override Locale="FR-FR"
    Value="Démarrer un message instantané appel directement
    à partir de Outlook ou Outlook Web App à l'aide de Lync."/>
</Description>

Funktionen die Funktionen und Fähigkeiten-Elemente geben die Funktionalität Ihrer Anwendung arbeitet mit — in diesem Fall die Mailbox-Funktion. Anstatt explizit anzugeben die Host-Anwendungen erfordert Ihre Anwendung, Sie diese Elemente verwenden, um die apps für Office-Plattform erklären, wie man förderfähigen Hostanwendungen überein, die Ihre Anwendung unterstützen kann. Eine Anwendung, die die Mailbox-Funktion unterstützt, kann ein Host für diese app werden:

<Capabilities>
  <Capability Name="Mailbox"/>
</Capabilities>

Da die JavaScript-API für Office ist eine integrierte API geteilt durch alle apps für Büro und Unterstützung von Host-Anwendungen, die Unterstützung für bestimmte Objekte oder Mitglieder unterscheidet sich von Host zu Host. Mehrere solcher Fälle auftreten mit Aufgabe im Bereich apps (z. B. Bindings.addFromPromptAsync). Ein Beispiel für e-Mail-Anwendungen ist die Diagnostics.OWAView-Eigenschaft, die für das Debuggen in Outlook Web App aber nicht Outlook bestimmt ist. In solchen Fällen sollten Sie sicherstellen, dass die API definiert ist, bevor Sie ihn verwenden.

Geräteabhängige Quelldatei und Anzeige The DesktopSettings und TabletSettings-Elemente angeben, dass diese app kann auf dem Desktop ausgeführt und Formfaktoren Tablet. Die Elemente SourceLocation und RequestedHeight können Sie die gleichen oder geräteabhängige HTML-Quelldateien angeben und Höhe (in Pixel) für die app angezeigt. Die Gruppe IM Post-app verwendet die gleiche HTML-Quelldatei für Desktopcomputer und Tablet-Formfaktoren, und es wird einen größer app-Bereich für den Desktop als die Tablette.

Dies ist die URL für die HTML-Datei:

https://webserver/GroupIM/InstantMessage.htm

Bevor Sie versuchen, die Gruppe IM app, sollten Sie die URL der HTML-Datei mit den tatsächlichen Speicherort der HTML-Datei in Ihrer Konfiguration ersetzen:

<DesktopSettings>
  <!-- Change the following line to specify the Web server -->
  <!-- that hosts the HTML file.
-->
  <SourceLocation DefaultValue="https://webserver/GroupIM/InstantMessage.htm"/>
  <RequestedHeight>216</RequestedHeight>
</DesktopSettings>
<TabletSettings>
  <!-- Change the following line to specify the Web server -->
  <!-- that hosts the HTML file.
-->
  <SourceLocation DefaultValue="https://webserver/GroupIM/InstantMessage.htm"/>
  <RequestedHeight>180</RequestedHeight>
</TabletSettings>

Berechtigung The Permissions-Element gibt die Ebene der Berechtigung, die diese app benötigt. In diesem Fall erfordert die Gruppe IM Post-app lesen Sie Element-Berechtigung, da die app Entitäten (SMTP-Adressen) zugreift, die Exchange aus den Betreff und den Text extrahiert:

<Permissions>ReadItem</Permissions>

Aktivierung Regeln diese app gibt eine ItemIs-Regel mit Nachricht als Elementtyp. Dies bedeutet, dass Outlook Gruppe IM in der app-Leiste angezeigt wird, wenn der Benutzer eine Nachricht im Lesebereich oder Inspektor anzeigt:

<Rule xsi:type="ItemIs" ItemType="Message"/>

Beachten Sie, dass es gibt bestimmte Arten von Nachrichten, die keine e-Mail-Anwendungen unterstützen. Finden Sie im Abschnitt "Elemente unterstützt Aktivierung" (bit.ly/11n0hNE) von der MSDN Library-Artikel "definieren Regeln, um eine e-Mail-Anwendung Outlook 2013 zeigen" für weitere Informationen.

HTML-Umsetzung

Die HTML-Datei, InstantMessage.htm, gibt die Benutzeroberfläche der app im app-Bereich angezeigt. In diesem Abschnitt werden einige Punkte des Interesses. Eine vollständige Liste der InstantMessage.htm finden Sie unter Abbildung 4 (Du kannst den vollständigen Satz der Quelldateien für die e-Mail-app von code.msdn.microsoft.com/Mail-apps-for-Outlook-2b20fc16).

Abbildung 4 die InstantMessage.htm-Datei

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <style type="text/css">
      .title{
        font-family: arial, sans-serif;
        color: blue;
        font-size: 12pt;
        text-decoration:none;
        font-weight:bold;
      }
      .property{
        font-family:Segoe UI;
        color: black;
        font-size: 10pt;
        text-decoration:none;
      }
      .value{
        font-family:Segoe UI;
        color: gray;
        font-size:  10pt;
        text-decoration:none;
      }
      .valuesmall{
        font-family: Segoe UI;
        color: gray;
        font-size:  8pt;
        text-decoration:none;
      }
    </style>
      <title>Send Instant Messages with Lync</title>
      <script type="text/javascript"
        src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>
      <script type="text/javascript"
        src="https://appsforoffice.microsoft.com/lib/1.0/hosted/office.js"></script>
      <script type="text/javascript" src="InstantMessage.js"></script>
    </head>
    <body>
      <img src='mslync-logo.png' alt='Microsoft Lync'/>
      <div id="extensionspace" style="font-family: 'Segoe UI'; font-size: 10pt"> </div>
    </body>
    </html>

Mit der höchsten verfügbaren Internet-Explorer-Modus Apps für Office benötigen mindestens Internet Explorer 9 auf dem Clientcomputer. Das folgende Meta-Tag verwenden, um Ihre Anwendung zu verwenden, den höchsten verfügbare Modus von Internet Explorer auf dem Computer zu ermöglichen, um zu gewährleisten, dass den Benutzer erleben kann:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">

Hinweis: Stellen Sie das Meta-Element als untergeordnetes Element des Elements Kopf vor allen anderen Elementen mit Ausnahme von Titel und andere Meta-Elemente.

Angabe eines CSS für die App die Gruppe IM Post-app gibt eine CSS Inline in der HTML-Datei, um die visuelle Gestaltung und das Layout der APP zu steuern, wie in gezeigt Abbildung 5.

Abbildung 5 ein CSS angeben

    <style type="text/css">
      .title{
        font-family: arial, sans-serif;
        color: blue;
        font-size: 12pt;
        text-decoration:none;
        font-weight:bold;
      }
      .property{
        font-family:Segoe UI;
        color: black;
        font-size: 10pt;
        text-decoration:none;
      }
      .value{
        font-family:Segoe UI;
        color: gray;
        font-size:  10pt;
        text-decoration:none;
      }
      .valuesmall{
        font-family: Segoe UI;
        color: gray;
        font-size:  8pt;
        text-decoration:none;
      }
    </style>

Weitere Richtlinien finden Sie im Abschnitt "Leitlinien für apps für Office Style" (bit.ly/XEwfED) von der MSDN Library-Artikel "Apps für Office UX Entwurfsrichtlinien."

Einschließlich der JavaScript-API für Office-Bibliothek mit der JavaScript-API für Büro, office.js, werden in ein Content Delivery Network (CDN) Lage. Verwenden Sie die folgende Anweisung immer office.js von diesem Speicherort verweisen:

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

Diese Post-app verwendet ähnliche Script-Elemente gehören anderen JavaScript-Bibliothek-Dateien, einschließlich eigener genannten JavaScript-Datei InstantMessage.js.

JavaScript-Implementierung

Wie im vorigen Abschnitt gesehen, die die Aktivierung-Regel für dieses Post-app beschreibt, ist diese app in der app-Bar, wenn der Benutzer eine Nachricht im Lesebereich oder Inspektor anzeigt. Wenn der Benutzer wählt die app, die JavaScript-Datei (InstantMessage.js) zeigt die Empfänger und alle E-mail-Adressen enthalten den Nachrichtentext, ruft alle Entscheidungen vom Benutzer und startet eine Gruppe IM-Sitzung mit den ausgewählten Personen.

Statt Spaziergang durch wie InstantMessage.js zeigt E-mail-Adressen und ruft die Benutzerauswahl für IM, der Rest dieses Abschnitts wird veranschaulicht, wie dieser Post-app verwendet die Features, die im Abschnitt "Grundlegende Features von the JavaScript API für Office" von der begleitenden aufgeführt MSDN Magazine Artikel (msdn.microsoft.com/en-us/magazine/dn201750).

Synchronisation mit der Initialisierungs- und DOM-Loaded Ereignisse jede app für Office muss das Office.initialize-Ereignis behandeln. Wie in den folgenden Ereignishandler initialisieren, dargestellt, sobald die apps for Office-Laufzeit ist bereit, ruft diese Post-app die aktuelle Nachricht aktiviert der Benutzer und alle bekannten Objekte, die in der Nachricht vorhanden sind:

Office.initialize = function () {
  _Item = Office.context.mailbox.item;
  itemEntities = _Item.getEntities();
  $(document).ready(function () {
   initIM();
  }); 
}

Die app hält aus, bis das DOM geladen ist, wenn es dann die InitIM-Funktion ruft mit Anzeige der app UI mit E-mail-Adressen.

Zugriff auf Nachrichteneigenschaften Absender, , und cc diese Post-app verwendet die Absender, , und cc Eigenschaften auf das Nachrichtenobjekt der Benutzer wählen Sie eine oder mehrere der Absender oder Empfänger. Jede dieser Eigenschaften gibt eine oder mehr EmailAddressDetails Objekte, jeweils welche Karten einer Person und enthält die SMTP-Adresse der Person.

Abbildung 6 zeigt den Teil der InitIM-Funktion, die die E-mail Anschrift für Ruft die , und cc Empfänger.

Abbildung 6 immer E-Mail-Adressdaten

function initIM()
{
  var myHTMLString;
  var myCell;
  var tempEntities;
  var toRecipients;
  var ccRecipients;
  var recipientsAddresses = new Array ();
  var recipientsAndBodyAddresses = new Array();
  toRecipients = _Item.to;
  ccRecipients = _Item.cc;
  myHTMLString = "";
  // Assign first the To recipients addresses, followed by
  // the cc recipients addresses.
for (var i=0; i<toRecipients.length; i++) {
    recipientsAddresses[i] = toRecipients[i].emailAddress;
  }
  for (var i=0; i<ccRecipients.length; i++) {
    recipientsAddresses[i+toRecipients.length] = 
      ccRecipients[i].emailAddress;
  }
...

Der folgende Codeausschnitt zeigt den Teil der InitIM-Funktion, die greift auf die Adresse des Absenders und zeigt ihn in der Liste der Auswahlmöglichkeiten im Bereich app:

myHTMLString +=
  "<form><span id=\"mySpan\">Start an instant message conversation</span>" +
  " with the following persons:<BR>";
myHTMLString += "<input type=checkbox name='checkbox0" + 
  "' value='" +
  _Item.sender.emailAddress + 
  "' onClick='checkAddress(this.form)' />" +
  _Item.sender.emailAddress + "<br>";

Zugriff auf SMTP-Adressen in den Nachrichtentext als Einheiten der folgende Codeausschnitt zeigt den Teil der Initialize-Funktion, die den vollständigen Satz der bekannten Entitäten in den Betreff und den Text ruft:

Office.initialize = function () {
  _Item = Office.context.mailbox.item;
  itemEntities = _Item.getEntities();
...

Beachten Sie, dass die GetEntities-Funktion eine ganze Reihe von bekannten Unternehmen gibt — einschließlich alle SMTP-Adressen — in den Betreff oder Text der Nachricht existieren. itemEntities.emailAddresses gibt nur ein Array von Zeichenfolgen, die Exchange SMTP-Adressen erkennt. Der folgende Codeausschnitt zeigt, wie die InitIM-Funktion die Menge der Empfänger E-mail-Adressen mit E-mail-Adressen kombiniert, die in der Nachrichtenbetreff oder Nachrichtentext bestehen, und ruft dann die Funktion MakeMyAddressesUnique, um alle entsprechenden SMTP-Adressen um eine Liste der eindeutigen Entscheidungen später für den Benutzer bereitzustellen auszuschließen:

recipientsAndBodyAddresses =
  recipientsAddresses.concat(itemEntities.emailAddresses);
makeMyAddressesUnique (recipientsAndBodyAddresses);

Zugriff auf das Benutzerprofil für Benutzeradresse erhalten um zu vermeiden, bietet die SMTP-Adresse des Benutzers als Wahl für die IM-Sitzung, die MakeMyAddressesUnique-Funktion vergleicht E-mail-Adressen mit der Adresse des Benutzers in der UserProfile.emailAddress-Eigenschaft gespeichert. Abbildung 7 zeigt den Code.

Abbildung 7 Vergleich von E-Mail-Adressen mit der Adresse des Benutzers

// This function counts the unique number of e-mail addresses.
// The first such count number of array cells in
 // myEntities contains the unique e-mail addresses.
function makeMyAddressesUnique (addressArray)
{
  var emailAddress;
  var j=0;
  for (var i in addressArray) {
    emailAddress = addressArray[i];
    // Check if e-mail address is not the same as the sender's address
    // or the current user's address, is new, and
    // has not occurred in the first i number of cells in addressArray.
if ((emailAddress.toLowerCase() !==
      _Item.sender.emailAddress.toLowerCase()) &&
        (emailAddress.toLowerCase() !==
        Office.context.mailbox.userProfile.emailAddress.toLowerCase()) &&
        (emailAddrIsNew (i, emailAddress, addressArray))) {
          myEntities[j] = emailAddress.toLowerCase();
          j++;
    }
    // Otherwise e-mail address occurred in
    // sender or addressArray already, ignore it.
// The next new e-mail address will overwrite cell j in myEntities.
}

IM Client Abhängigkeiten beachten Sie, dass diese app übernimmt der Benutzer hat einen IM-Client, der die IM unterstützt eingerichtet und SIP-Protokolle und verwendet das folgende Format IM mit den angegebenen SMTP-Adressen zu starten:

im:<sip:user1@host><sip:user2@host>

Wie bereits erwähnt, ist ein Beispiel für solch einen IM-Client Lync. Auf Lync öffnet der vorherige Befehl ein IM-Fenster für den Benutzer und die angegebenen SMTP-Adressen, wenn der Benutzer bereits, um Lync angemeldet hat oder Lync Anmelden automatisch eingerichtet. Andernfalls öffnet der Befehl Fenster anmelden.

Alternativ können Sie ändern, die CheckAddress-Funktion in diesem Beispiel zur Unterstützung eines anderen IM-Clients und den entsprechenden Befehl für diesen Client Gruppe IM beginnen zu bauen.

Weitere Informationen zur Unterstützung für Lync finden Sie im MSDN Library-Artikel, "Lync aus einer anderen Anwendung starten" (bit.ly/ZvbTvc).

Alternative Möglichkeiten zu aktivieren

Beachten Sie, dass meine Implementierung verwendet nur eine Aktivierung Regel (das ausgewählte Element wird eine Nachricht) und der JavaScript-API (Message.getEntities-Methode und Entities.emailAddresses-Eigenschaft), alle SMTP-Adressen in den Textkörper der Meldung erhalten. Ich zeige eine alternative Implementierung zur Veranschaulichung ein Beispiel für einen regulären Ausdruck-Aktivierung-Regel und wie man reguläre Ausdrücke entspricht in der app.

In der app-Manifest, kombinieren die vorhandene ItemIs-Regel mit dem Modus = und ein Attribut, mit einer zweiten Regel, dass der Element-Text ein oder mehrere E-mail-Adressen enthalten muss, da durch den regulären Ausdruck mit dem Namen reg1 gefiltert:

<Rule xsi:type="RuleCollection" Mode="And">
  <Rule xsi:type="ItemIs" ItemType="Message"/>
  <Rule xsi:type="ItemHasRegularExpressionMatch" RegExName="reg1"
    RegExValue="[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,3}"
    PropertyName="BodyAsPlaintext"/>
</Rule>

Dann, in der JavaScript-Datei, anstatt den Zugriff auf alle bekannten Entitäten, die Exchange die ausgewählte Nachricht wie folgt entnommen hat:

itemEntities = _Item.getEntities();

Die Message.getRegExMatches-Methode können Sie alle E-mail-Adressen erhalten, die reg1 entsprechen:

myEntities = _Item.getRegExMatches();

Ändern Sie die MakeMyEntitiesUnique-Funktion zum Behandeln von E-mail-Adressen, die im myEntities.reg1-Array gespeichert.

Die beiden Ansätze mit bekannte Entitäten bevorzugt wird zusätzlichen Aufwand bei der Auswertung eines regulären Ausdrucks beim Versuch, die e-Mail-app zu aktivieren zu vermeiden. Unabhängig von der Art der Aktivierung Regeln angegeben in einem app-Manifest tauschen Sie immer Extrakte keine bekannten Entitäten aus dem Betreff oder Nachrichtentext des ausgewählten Elements, so es keine zusätzlichen gibt entstandenen Aufwand immer alle E-mail-Adressen in den Nachrichtentext als Entitäten. Auf der anderen Seite kann der Aufwand der Auswertung regulärer Ausdrücke in einer Aktivierung-Regel beträchtlich sein, wenn der e-Mail-Text relativ lang ist und viele E-mail-Adressen enthält. Um eine befriedigende Erfahrung für Mail app Benutzer bereitzustellen, gibt es bestimmte Schwellenwerte, die, denen Sie beachten sollten wenn Sie reguläre Ausdrücke verwenden. Finden Sie im MSDN Library-Artikel, "Limits für Aktivierung und Daten in e-Mail-Anwendungen für Outlook" (bit.ly/170WAQf), für Details.

Angela Chu-Hatoun begann als Softwareentwicklerin. Sie entfaltete großes Interesse daran, die Funktionsweise von Software zu erläutern, und wechselte daher zum Schreiben. Sie ist seit 12 Jahren in der Office Division als Programmiererin und Autorin tätig und schreibt für Entwickler über die Erstellung von Apps für Office und anderen Lösungen für Outlook. Angela Chu-Hatoun vertieft sich gerne in Lektüre über das Tagesgeschehen, Gartenarbeit, Reisen, Ernährung und Mode.

Unser Dank gilt den folgenden technischen Experten für die Durchsicht dieses Artikels: Andrew Salamatov (Microsoft) und Tim Wan (Microsoft)

Tim WAN von Caltech absolvierte im Jahr 2003 und hat einen Abschluss in Technik und angewandte Wissenschaften. In den letzten neun Jahren war er als Outlook-Softwareentwickler tätig. Er hat umfangreiche Arbeit am Mail-Apps-Feature in Outlook 2013 sowie am Outlook-Objektmodell in früheren Versionen geleistet. Tim Wan freut sich darauf, den Kunden weltweit neue Features und Verbesserungen zur Verfügung zu stellen.

Andrew Salamatov-Bio-Tk (oder sonst bleiben aus)