Freigeben über


Datenspeicheroptionen in SharePoint Online

In diesem Artikel wird die Beispiel-App Core.DataStorageModels beschrieben, in der jede der folgenden Datenspeicheroptionen sowie die jeweiligen Vor- und Nachteile aufgeführt werden:

  • SharePoint-Liste im Add-In-Web
  • SharePoint-Liste im Hostweb
  • Externer Webdienst
  • Azure-Tabellenspeicher
  • Azure Queue-Speicher
  • Azure SQL-Datenbank

Die Beispiel-App "Core.DataStorageModels" ist ein vom Anbieter gehostetes Add-In, das in C# und in JavaScript geschrieben ist und eine Reihe von SharePoint-Artefakten (Listen, Add-In-Webpart, Webpart) sowohl im Hostweb als auch im Add-In-Web bereitstellt. Es interagiert mit SharePoint-Listen im Add-In-Web und Hostweb und ruft auch Azure SQL-Datenbank, Azure Queue Storage und Azure Table Storage sowie einen Remotewebdienst auf, der OData implementiert. In diesem Beispiel wird das Muster "Model-View-Controller" verwendet.

Die Beispiel-App "Core.DataStorageModels" wendet jede Datenspeicheroption auf eine bestimmte Funktion an, für die die Option gut geeignet ist, wie in der folgenden Tabelle beschrieben.

Beispiel-App-Speicheroption Verwendung für
SharePoint-Liste im Add-In-Web Kundennotizen
SharePoint-Liste im Hostweb Supportfälle
Northwind-OData-Webdienst Kunden
Azure-Tabellenspeicher CSR-Bewertungen
Azure Queue Storage Anrufwarteschleife
Azure SQL Northwind-Datenbank Bestellungen, Bestelldetails, Produkte

Die Beispiel-App implementiert ein Kundendienstdashboard und zugehörige Benutzeroberflächen, die aktuelle Bestellungen, Bewertungen der Kundenvertreterumfrage, Kundennotizen, Supportfälle und eine Anrufwarteschleife für Kundenvertreter anzeigen.

In den ersten beiden Szenarien können Sie Daten mithilfe von relativ einfachem Clientobjektmodellcode oder REST-Abfragen abrufen, sind aber durch Schwellenwerte für Listenabfragen begrenzt. In den nächsten vier Szenarien werden verschiedene Arten von Remotespeicher verwendet.

Startseite der Datenspeichermodelle, auf der Sie aufgefordert werden, SharePoint-Komponenten bereitzustellen

Screenshot der Benutzeroberfläche der Beispiel-App

Bevor Sie beginnen

Bevor Sie dieses Beispiel verwenden, sollten Sie sicherstellen, dass Sie die folgenden Voraussetzungen erfüllen:

  • Ein Microsoft Azure-Konto, in dem Sie eine Azure SQL-Datenbank bereitstellen und ein Azure Storage-Konto erstellen können.

  • Eine SharePoint-Entwicklerwebsite, sodass Sie das Beispiel aus Visual Studio bereitstellen können.

Außerdem müssen Sie die Northwind-Datenbank für Microsoft Azure bereitstellen.

So stellen Sie die Northwind-Datenbank bereit

  1. Melden Sie sich beim Azure-Portal an, und wählen Sie SQL-Datenbanken>Server aus.

  2. Wählen Sie SQL-Datenbankserver erstellen aus.

  3. Geben Sie im Formular Server erstellen Werte für Anmeldename, Anmeldekennwort und Region ein.

    Zeigt die SQL-Datenbankservereinstellungen

  4. Aktivieren Sie das Kontrollkästchen, um den Server zu beenden und zu erstellen.

  5. Nachdem Sie die Datenbank erstellt haben, wählen Sie den Servernamen aus, den Sie erstellt haben.

    Zeigt die Liste der SQL-Datenbanken

  6. Wählen Sie KONFIGURIEREN aus, wählen Sie den Pfeil in der unteren rechten Ecke aus, um die Konfiguration abzuschließen, und wählen Sie dann SPEICHERN aus.

  7. Öffnen Sie SQL Server Management Studio auf Ihrem lokalen Entwicklungscomputer, und erstellen Sie eine neue Datenbank mit dem Namen NorthWind.

  8. Wählen Sie im Objekt-Explorer die Northwind-Datenbank und dann Neue Abfrage aus.

  9. Öffnen Sie in einem Text-Editor Ihrer Wahl das SQL-Skript northwind.sql, das mit dem Core.DataStorageModels-Beispiel bereitgestellt wird.

  10. Kopieren Sie den Text in der Datei "northwind.sql", fügen Sie ihn in SQL Server Management Studio in das Fenster SQL-Abfrage ein, und wählen Sie dann Ausführen aus.

  11. Öffnen Sie im Objekt-Explorer das Kontextmenü für die Northwind-Datenbank (klicken Sie mit der rechten Maustaste darauf), wählen Sie Tasks aus, und wählen Sie dann Datenbank für SQL Azure bereitstellen aus.

  12. Wählen Sie auf dem Bildschirm EinführungWeiter aus.

  13. Wählen Sie Verbinden aus, und geben Sie dann den Servernamen für den Azure SQL-Datenbankserver ein, den Sie gerade erstellt haben.

  14. Wählen Sie in der Liste AuthentifizierungSQL Server-Authentifizierung aus.

  15. Geben Sie den Benutzernamen und das Kennwort ein, die Sie beim Erstellen des Azure SQL-Datenbankservers verwendet haben, und wählen Sie dann Verbinden aus.

  16. Wählen Sie Weiter aus, und wählen Sie dann Beenden aus, und warten Sie, bis die Datenbank erstellt wird. Wählen Sie nach der Erstellung Schließen aus, um den Assistenten zu schließen.

  17. Kehren Sie zum Azure-Portal zurück, um zu überprüfen, ob die Northwind-Datenbank erfolgreich erstellt wurde. Sie sollten auf dem Bildschirm SQL-Datenbanken angezeigt werden.

    Zeigt eine Liste aller SQL-Datenbanken, einschließlich Northwind

  18. Wählen Sie die Northwind-Datenbank und dann Verbindungszeichenfolgen der SQL-Datenbank anzeigen aus.

  19. Kopieren Sie die Verbindungszeichenfolge, fügen Sie sie in eine Textdatei ein, und speichern Sie sie lokal. Sie werden diese Verbindungszeichenfolge später benötigen. Schließen Sie das Dialogfeld Verbindungszeichenfolgen.

  20. Wählen Sie den Link Einrichten von Windows Azure-Firewallregeln für diese IP-Adresse aus, und fügen Sie Ihre IP-Adresse den Firewallregeln hinzu, damit Sie auf die Datenbank zugreifen können.

  21. Öffnen Sie das Projekt "Core.DataStorageModels.sln" in Visual Studio.

  22. Suchen Sie in Visual Studio Projektmappen-Explorer nach der Datei "Web.config".

  23. Suchen Sie in der Datei "Web.config" nach dem Element "name="NorthWindEntities" hinzufügen", und ersetzen Sie den vorhandenen connectionString-Wert durch die Verbindungszeichenfolgeninformationen, die Sie in Schritt 19 lokal gespeichert haben.

      <add name="NorthWindEntities" 
      connectionString="metadata=res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=<Your Server Here>.database.windows.net;initial catalog=NorthWind;user id=<Your Username Here>@<Your Server Here>;password=<Your Password Here>;MultipleActiveResultSets=True;App=EntityFramework&amp;quot;"
      providerName="System.Data.EntityClient" />
    

  24. Speichern Sie die Datei "Web.config".

SharePoint-Liste im Add-In-Web (Szenario "Notizen")

Das Szenario "Notizen", in dem eine SharePoint-Liste in einem Add-In-Web verwendet wird, zeigt, wie Listen in einem SharePoint-Add-In-Web ausgeführt werden. Die Notizenliste wird im Add-In-Web mit einem Titel- und Beschreibungsfeld erstellt. Die SharePoint-REST-API fragt die Notizenliste ab und gibt alle Notizen basierend auf einer Kunden-ID zurück.

Die Verwendung von Listen im Add-In-Web hat einen wichtigen Vorteil gegenüber anderen Speicherlösungen: Sie können einfache SharePoint-REST-API-Aufrufe verwenden, um Daten abzufragen.

Es gibt jedoch einige Nachteile:

  • Zum Aktualisieren von Listenmetadaten müssen Sie das Add-In aktualisieren und erneut bereitstellen.
  • Um die Datenstruktur zu aktualisieren, müssen Sie die Anwendungslogik zum Speichern und Aktualisieren von Daten umschreiben.
  • In der Liste gespeicherte Informationen können nicht einfach mit anderen Add-Ins geteilt werden.
  • Sie können in SharePoint nicht nach Daten suchen.
  • Die Datenmenge, die Sie in Listen speichern können, und die Größe der Abfrageresultsets sind begrenzt.

Der Code, der dem Abschnitt "Notizen" des Kundendashboards zugrunde liegt, verwendet REST-Abfragen, um Daten aus einer Liste abzurufen, die im Add-In-Web bereitgestellt wird. Diese Liste enthält Felder für Titel, Autoren, Kunden-IDs und Beschreibungen. Sie können die Benutzeroberfläche des Add-Ins verwenden, um Notizen für einen angegebenen Kunden hinzuzufügen und abzurufen, wie in der folgenden Abbildung dargestellt.

Benutzeroberfläche für das Add-In "Notizen"

Ein Screenshot der Benutzeroberfläche für das Notizen-Datenspeichermodell

Der Link Notizenliste in App-Web anzeigen bietet eine sofort einsatzbereite Ansicht der Listendaten.

In diesem Add-In wird das Muster "Model-View-Controller" verwendet. Den Code für das Szenario "Notizen" finden Sie in der Datei "Views/CustomerDashboard/Notes.cshtml". Es werden einfache REST-Aufrufe verwendet, um Daten hinzuzufügen und abzurufen.

Der folgende Code ruft Notizen aus der Notizenliste für einen angegebenen Kunden ab.

function getNotesAndShow() {
    var executor = new SP.RequestExecutor(appWebUrl);
    executor.executeAsync(
       {
           url: appWebUrl + "/_api/web/lists/getByTitle('Notes')/items/" +
                "?$select=FTCAM_Description,Modified,Title,Author/ID,Author/Title" +
                "&amp;$expand=Author/ID,Author/Title" +
                "&amp;$filter=(Title eq '" + customerID + "')",
           type: "GET",
           dataType: 'json',
           headers: { "accept": "application/json;odata=verbose" },
           success: function (data) {
               var value = JSON.parse(data.body);
               showNotes(value.d.results);
           },
           error: function (error) { console.log(JSON.stringify(error)) }
       }

    );
}

Der folgende Code fügt der Notizenliste eine Notiz für einen bestimmten Kunden hinzu.

function addNoteToList(note, customerID) {
    var executor = new SP.RequestExecutor(appWebUrl);
    var bodyProps = {
        '__metadata': { 'type': 'SP.Data.NotesListItem' },
        'Title': customerID,
        'FTCAM_Description': note
    };
    executor.executeAsync({
        url: appWebUrl + "/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Notes')/items?@target='" + appWebUrl + "'",
        contentType: "application/json;odata=verbose",
        method: "POST",
        headers: {
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        body: JSON.stringify(bodyProps),
        success: getNotesAndShow,
        error: addNoteFailed
    });
}

Sie können der Liste 5 000 Elemente hinzufügen, um anzuzeigen, dass Listenabfragen, die ein Resultset von 5 000 oder mehr Elementen generieren, den Schwellenwert der Listenabfrage erreichen und fehlschlagen. Sie können Ihrer Liste im Add-In-Web auch so viele Daten hinzufügen, dass Sie das Speicherlimit für Ihre Websitesammlung überschreiten (dies hängt davon ab, wie viel Speicherplatz Sie ihr zugewiesen haben).

Diese Szenarien zeigen zwei der wichtigsten Einschränkungen dieses Ansatzes: die Begrenzung der Listenabfragegröße und die Begrenzung des Speicherplatzes. Wenn Ihre Geschäftsanforderungen erfordern, dass Sie mit großen Datasets und Abfrageresultsets arbeiten müssen, funktioniert dieser Ansatz nicht.

Schwellenwert für Listenabfragen

So laden Sie genügend Daten, um den Schwellenwert für Listenabfragen zu überschreiten:

  1. Wählen Sie im linken Menü Beispielstartseite aus.

  2. Wählen Sie im Abschnitt Listenabfrage-Schwellenwerte die Option Listenelemente zur Notizenliste im Add-In-Web hinzufügen aus.

  3. Führen Sie diesen Vorgang gemäß den Anweisungen, die über der Schaltfläche angezeigt werden, 10-mal aus.

    Wenn die Notizenliste aktualisiert wird, wird oben auf der Seite eine Meldung angezeigt, die angibt, wie viele Listenelemente (Notizen) Sie hinzugefügt haben und wie viele noch hinzugefügt werden müssen.

    Hinweis

    Jedes Mal, wenn Sie die Schaltfläche auswählen, dauert die Ausführung des Vorgangs etwa eine Minute. Das Endergebnis der 10-fachen Ausführung des Vorgangs wird in der nächsten Abbildung dargestellt.

  4. Nachdem Sie der Liste 5 001 Elemente hinzugefügt haben, wählen Sie im linken Menü Notizen aus. Wenn die Seite geladen wird, wird die in der folgenden Abbildung dargestellte Fehlermeldung angezeigt, die von der SharePoint-REST-API stammt.

    Ein Screenshot der Fehlermeldung, in der mitgeteilt wird, dass der Vorgang den Listenansichtschwellenwert überschritten hat.

  5. Wählen Sie Notizenliste in App-Web anzeigen aus, und durchlaufen Sie die Liste, um sicherzustellen, dass sie 500 Zeilen enthält. Beachten Sie, dass die REST-API aufgrund des Schwellenwerts für die Drosselung von Listenabfragen fehlschlägt, obwohl SharePoint-Listenansichten das Durchsuchen dieser vielen Einträge ermöglichen können.

Datenspeicherlimit

So laden Sie genügend Daten, um das Datenspeicherlimit zu überschreiten:

  1. Wählen Sie im linken Menü Beispielstartseite aus.

  2. Wählen Sie im Abschnitt "Datenschwellenwert" die Option App-Web-Notizenliste mit 1 GB Daten ausfüllen aus.

  3. Führen Sie diesen Vorgang gemäß den Anweisungen, die über der Schaltfläche App-Web-Notizenliste mit 1 GB Daten ausfüllen angezeigt werden, 11-mal aus.

    Wenn die Notizenliste aktualisiert wird, wird oben auf der Seite eine Meldung angezeigt, die angibt, wie viele Listenelemente (Notizen) Sie hinzugefügt haben und wie viele noch hinzugefügt werden müssen.

    Hinweis

    Jedes Mal, wenn Sie die Schaltfläche auswählen, dauert die Ausführung des Vorgangs etwa eine Minute. Das Endergebnis der 11-fachen Ausführung des Vorgangs wird in der nächsten Abbildung dargestellt.

  4. Nachdem Sie den Vorgang 11-mal ausgeführt haben, wird beim Auswählen der Schaltfläche eine Fehlermeldung angezeigt, wie in der folgenden Abbildung dargestellt.

    Ein Screenshot der Fehlermeldung, die auftritt, wenn der Datenspeichergrenzwert überschritten wird

  5. Nachdem Sie das Datenspeicherlimit überschritten haben, wählen Sie im Webbrowser die Schaltfläche "Zurück" und dann im linken Menü den Link Notizen aus.

  6. Wählen Sie Notizenliste in App-Web anzeigen aus.

    Wenn die Seite geladen wird, wird oben auf der Seite eine Fehlermeldung angezeigt, die angibt, dass der Speicherplatz auf der Website nicht mehr vorhanden ist.

SharePoint-Liste im Hostweb (Supportfallszenario)

Im Supportfallszenario werden Daten angezeigt, die in einer SharePoint-Liste im Hostweb gespeichert sind. In diesem Szenario werden zwei verschiedene Muster verwendet, um auf die Daten zuzugreifen und mit ihnen zu interagieren. Das erste Muster enthält den SharePoint-Suchdienst und das Webpart "Inhalt-nach-Suche" mit einer angewendeten benutzerdefinierten Anzeigevorlage. Das zweite Muster enthält ein App-Webpart (Client-Webpart) mit der Ansicht "Model-View-Controller", die die SP.RequestExecutor-Klasse verwendet, um die SharePoint-REST-API aufzurufen.

Bei der Verwendung dieses Ansatzes gibt es mehrere Vorteile:

  • Sie können Daten ganz einfach abfragen, indem Sie einfache REST-Abfragen oder Clientobjektmodellcode verwenden.
  • Sie können in SharePoint nach Daten suchen.
  • Sie können die Listenmetadaten aktualisieren und neue Ansichten für eine Liste erstellen, ohne das Add-In aktualisieren und erneut bereitstellen zu müssen. Diese Änderungen wirken sich nicht auf das Verhalten Ihres Add-Ins aus.
  • Listen im Hostweb werden nicht gelöscht, wenn Sie Ihr Add-In deinstallieren, es sei denn, das Add-In verwendet das AppUninstalled-Ereignis, um die Liste zu entfernen und/oder die Daten zu löschen.

Das Ausgleichen dieser Vorteile hat die folgenden Nachteile:

  • Der Hostweb begrenzt sowohl die Datenmenge, die Sie in Listen speichern können als auch die Größe der Abfrageergebnisse. Wenn Ihr Unternehmen große Datasets speichern und/oder abfragen muss, ist dies kein empfohlener Ansatz.
  • Bei komplexen Abfragen werden Listen nicht so gut ausgeführt wie Datenbanken.
  • Zum Sichern und Wiederherstellen von Daten werden Listen nicht so gut wie Datenbanken ausgeführt.

Die Daten für dieses Szenario werden in einer SharePoint-Liste gespeichert, die im Hostweb bereitgestellt wird. Daten werden wie folgt abgerufen und angezeigt:

  • Ein Inhaltssuche-Webpart.
  • Ein App-Webpart, das als Model-View-Controller-Ansicht implementiert ist.

Der Code in dieser Ansicht verwendet REST-Abfragen, um Informationen aus der Liste abzurufen, während das Inhaltssuche-Webpart den SharePoint-Suchdienst verwendet, um die Daten abzurufen. Die beiden Ansätze veranschaulichen den erheblichen Vorteil dieser Option: Sie können sowohl den Suchdienst als auch die REST/CSOM-APIs verwenden, um Informationen aus einer Liste im Hostweb abzurufen.

Wenn Sie einen Kunden aus der Liste der Supportfälle auswählen, werden die Supportfalldaten für diesen Kunden sowohl im Webpart als auch im App-Webpart angezeigt. Das Webpart gibt möglicherweise nicht sofort Inhalte zurück, da es bis zu 24 Stunden dauern kann, bis der SharePoint-Suchdienst die Daten indiziert hat. Sie können auch den Link Supportfallliste im Hostweb anzeigen auswählen, um eine herkömmliche Ansicht der Listendaten anzuzeigen.

Benutzeroberfläche für das Supportfallszenario

Ein Screenshot der Benutzeroberfläche für die Interaktion mit dem Supportfallszenario


Das von diesem Add-In bereitgestellte Inhaltssuche-Webpart verwendet eine benutzerdefinierte Anzeigevorlage. Die folgende Abbildung zeigt, wo Sie im Verzeichnis Objekte des Webprojekts das Webpart und die zugehörige Vorlage finden.

Inhalt des Verzeichnisses für Objekte des Webprojekts

Screenshot des Verzeichnisses für Objekte


Der folgende JavaScript-Code, den Sie in der Datei "Views/SupportCaseAppPart/Index.cshtml" finden, verwendet die domänenübergreifende Bibliothek, um eine REST-Abfrage in der SharePoint-Liste im Hostweb aufzurufen.

function execCrossDomainRequest() {
var executor = new SP.RequestExecutor(appWebUrl);

executor.executeAsync(
   {
        url: appWebUrl + "/_api/SP.AppContextSite(@@target)" +
                "/web/lists/getbytitle('Support Cases')/items" +
              "?$filter=(FTCAM_CustomerID eq '" + customerID + "')" +
            "&amp;$top=30" +
                    "&amp;$select=Id,Title,FTCAM_Status,FTCAM_CSR" +
                    "&amp;@@target='" + hostWebUrl + "'",
method: "GET",
              headers: { "Accept": "application/json; odata=verbose" },
              success: successHandler,
              error: errorHandler
   }
);
}

Sie können der Liste 5 000 Elemente hinzufügen, um anzuzeigen, dass Listenabfragen, die ein Resultset von 5 000 oder mehr Elementen generieren, den Schwellenwert der Listenabfrage erreichen und fehlschlagen. Dieses Szenario zeigt eine der wichtigsten Einschränkungen dieses Ansatzes: die Begrenzung der Listenabfragegröße. Wenn Ihre Geschäftsanforderungen erfordern, dass Sie mit großen Daten und Abfrageresultsets arbeiten müssen, funktioniert dieser Ansatz nicht. Weitere Informationen finden Sie weiter oben in diesem Artikel unter Schwellenwert der Listenabfrage.

Northwind OData-Webdienst (Szenario "Kundendashboard")

Das Szenario "Kundendashboard" verwendet JQuery AJAX, um den NorthWind-OData-Dienst aufzurufen, um Kundeninformationen zurückzugeben. Das Add-In speichert seine Daten in einem Webdienst und verwendet dann OData, um sie abzurufen.

Im Folgenden werden die Vorteile dieses Ansatzes aufgeführt:

  • Ein bestimmter Webdienst kann mehrere Add-Ins unterstützen.
  • Sie können Ihren Webdienst aktualisieren, ohne Ihre Add-Ins aktualisieren und erneut bereitstellen zu müssen.
  • Ihre SharePoint- und Webdienstinstallationen wirken sich nicht aufeinander aus.
  • Mit Hostingdiensten wie Microsoft Azure können Sie Ihre Webdienste skalieren.
  • Sie können Ihre Informationen auf Ihren Webdiensten getrennt von Ihrer SharePoint-Website sichern und wiederherstellen.
  • Beim Deinstallieren Ihres Add-Ins gehen keine Daten verloren, es sei denn, das Add-In verwendet das AppUninstalled-Ereignis, um die Daten zu löschen.

Das Szenario "Kundendashboard" speichert seine Daten in einem Webdienst, der den OData-Standard zum Abrufen von Daten implementiert. Auf der Benutzeroberfläche des Kundendashboards wählen Sie einen Kunden aus einem Dropdownmenü aus, und Kundeninformationen werden im Bereich Kundeninformationen angezeigt.

Diese Benutzeroberflächenseite ist eine Model-View-Controller-Ansicht. Die Anzeige wird in der Datei "Views/CustomerDashboard/Home.cshtml" definiert. Der zugrunde liegende Code befindet sich in der Datei "Scripts/CustomerDashboard.js". Der JavaScript-Code verwendet AJAX, um den Northwind-Webdienst abzufragen. Da es sich um einen OData-Dienst handelt, besteht die Webdienstabfrage aus Abfragezeichenfolgenargumenten, die an eine URL angefügt sind, die auf einen Webdienstendpunkt verweist. Der Dienst gibt Kundeninformationen im JSON-Format zurück.

Der folgende Code wird ausgeführt, wenn Sie den Link Kundendashboard auswählen. Es ruft alle Kundennamen und IDs ab, um das Dropdownmenü aufzufüllen.

var getCustomerIDsUrl = "https://odatasampleservices.azurewebsites.net/V3/Northwind/Northwind.svc/Customers?$format=json&amp;$select=CustomerID";
    $.get(getCustomerIDsUrl).done(getCustomerIDsDone)
        .error(function (jqXHR, textStatus, errorThrown) {
            $('#topErrorMessage').text('Can\'t get customers. An error occurred: ' + jqXHR.statusText);
        });

Der folgende Code wird ausgeführt, wenn Sie im Dropdownmenü einen Kundennamen auswählen. Er verwendet das OData-$filter-Argument, um die Kunden-ID und andere Abfragezeichenfolgenargumente anzugeben, um Informationen im Zusammenhang mit diesem Kunden abzurufen.

var url = "https://odatasampleservices.azurewebsites.net/V3/Northwind/Northwind.svc/Customers?$format=json" +  "&amp;$select=CustomerID,CompanyName,ContactName,ContactTitle,Address,City,Country,Phone,Fax" + "&amp;$filter=CustomerID eq '" + customerID + "'";

$.get(url).done(getCustomersDone)
   .error(function (jqXHR, textStatus, errorThrown) {
          alert('Can\'t get customer ' + customerID + '. An error occurred: ' + 
                 jqXHR.statusText);
});

Azure-Tabellenspeicher (Szenario "Kundendienstumfrage")

Das Szenario "Kundendienstumfrage" ermöglicht es einem Kundendienstmitarbeiter, seine Bewertung basierend auf Kundenumfragen anzuzeigen, und verwendet Azure-Tabellenspeicher und die Microsoft.WindowsAzure.Storage.Table.CloudTable-API, um die Daten zu speichern und mit ihnen zu interagieren.

Im Folgenden werden die Vorteile dieses Ansatzes aufgeführt:

  • Der Azure-Tabellenspeicher unterstützt mehrere Add-Ins.
  • Sie können den Azure-Tabellenspeicher aktualisieren, ohne Ihr Add-In aktualisieren und erneut bereitstellen zu müssen.
  • Ihre SharePoint-Installation und der Azure-Tabellenspeicher haben keine Auswirkungen auf die Leistung des anderen.
  • Der Azure-Tabellenspeicher lässt sich problemlos skalieren.
  • Sie können Ihren Azure-Tabellenspeicher getrennt von Ihrer SharePoint-Website sichern und wiederherstellen.
  • Beim Deinstallieren Ihres Add-Ins gehen keine Daten verloren, es sei denn, das Add-In verwendet das AppUninstalled-Ereignis, um die Daten zu löschen.

Die Benutzeroberfläche des Add-Ins zeigt die Umfragebewertung des aktuellen Benutzers auf der mittleren Seite an. Wenn dieser Azure-Tabellenspeicher leer ist, fügt das Add-In der Tabelle einige Informationen hinzu, bevor sie angezeigt wird.

Der folgende Code aus "CSRInfoController.cs" definiert die Start-Methode, die die nameId des Benutzers abruft.

[SharePointContextFilter]
public ActionResult Home()
{
    var context = 
        SharePointContextProvider.Current.GetSharePointContext(HttpContext);
    var sharePointService = new SharePointService(context);
    var currentUser = sharePointService.GetCurrentUser();
    ViewBag.UserName = currentUser.Title;

    var surveyRatingsService = new SurveyRatingsService();
    ViewBag.Score = surveyRatingsService.GetUserScore(currentUser.UserId.NameId);

    return View();
}

Der folgende Code aus der Datei "SurveyRatingService.cs" definiert den SurveyRatingsService-Konstruktor, der die Verbindung mit dem Azure Storage-Konto einrichtet.

public SurveyRatingsService(string storageConnectionStringConfigName = 
        "StorageConnectionString")
{
    var connectionString = Util.GetConfigSetting("StorageConnectionString");
    var storageAccount = CloudStorageAccount.Parse(connectionString);

    this.tableClient = storageAccount.CreateCloudTableClient();
    this.surveyRatingsTable = this.tableClient.GetTableReference("SurveyRatings");
    this.surveyRatingsTable.CreateIfNotExists();
}

Der folgende Code aus derselben Datei definiert die GetUserScore-Methode, die die Umfragebewertung des Benutzers aus dem Azure-Tabellenspeicher abruft.

public float GetUserScore(string userName)
{
    var query = new TableQuery<Models.Customer>()
    .Select(new List<string> { "Score" })
    .Where(TableQuery.GenerateFilterCondition("Name", 
    QueryComparisons.Equal, userName));

    var items = surveyRatingsTable
         .ExecuteQuery(query)
             .ToArray();

    if (items.Length == 0)           
    return AddSurveyRatings(userName);

    return (float)items.Average(c => c.Score);
}

Wenn die Tabelle keine Umfragedaten im Zusammenhang mit dem aktuellen Benutzer enthält, weist die AddSurveyRating-Methode dem Benutzer nach dem Zufallsprinzip eine Bewertung zu.

private float AddSurveyRatings(string userName)
{
    float sum = 0;
    int count = 4;
    var random = new Random();

    for (int i = 0; i < count; i++)
    {
    var score = random.Next(80, 100);
    var customer = new Models.Customer(Guid.NewGuid(), userName, score);

    var insertOperation = TableOperation.Insert(customer);
    surveyRatingsTable.Execute(insertOperation);

    sum += score;
    }
    return sum / count;
}

Azure Queue Storage (Szenario "Kundenanrufwarteschleife")

Das Szenario "Kundenanrufwarteschleife" listet Anrufer in der Supportwarteschlange auf und simuliert die Annahme von Anrufen. In diesem Szenario werden Azure Queue Storage zum Speichern von Daten und die Microsoft.WindowsAzure.Storage.Queue.CloudQueue-API mit Model-View-Controller verwendet.

Im Folgenden werden die Vorteile dieses Ansatzes aufgeführt:

  • Azure Queue Storage unterstützt mehrere Add-Ins.
  • Sie können Azure Queue Storage aktualisieren, ohne Ihr Add-In aktualisieren und erneut bereitstellen zu müssen.
  • Ihre SharePoint-Installation und Azure Queue Storage haben keine Auswirkungen auf die Leistung des anderen.
  • Azure Queue Storage lässt sich problemlos skalieren.
  • Sie können Azure Queue Storage getrennt von Ihrer SharePoint-Website sichern und wiederherstellen.
  • Beim Deinstallieren Ihres Add-Ins gehen keine Daten verloren, es sei denn, das Add-In verwendet das AppUninstalled-Ereignis, um die Daten zu löschen.

Die Benutzeroberfläche des Add-Ins zeigt eine Supportanrufwarteschleife im mittleren Bereich an, wenn Sie den Link Anrufwarteschleife auswählen. Sie können den Empfang von Anrufen simulieren (hinzufügen eines Anrufs zur Warteschlange), indem Sie Aufrufe simulieren auswählen. Sie können die Annahme des ältesten Anrufs simulieren (Entfernen eines Anrufs aus der Warteschlange), indem Sie die Aktion "Anruf annehmen" auswählen, die einem bestimmten Anruf zugeordnet ist.

Diese Seite ist eine Ansicht "Model-View-Controller", die in der Datei "Views/CallQueue/Home.cshtml" definiert ist. Die Datei "Controllers/CallQueueController.cs" definiert die CallQueueController-Klasse, die Methoden zum Abrufen aller Anrufe in der Warteschlange, zum Hinzufügen eines Anrufs zur Warteschlange (Simulieren eines Anrufs) und zum Entfernen eines Anrufs aus der Warteschlange (Annehmen eines Anrufs) enthält. Jede dieser Methoden ruft Methoden auf, die in der Datei "Services/CallQueueService.cs" definiert sind, die die Azure Queue Storage-API verwendet, um die zugrunde liegenden Informationen in der Speicherwarteschlange abzurufen.

public class CallQueueController : Controller
{
    public CallQueueService CallQueueService { get; private set; }

    public CallQueueController()
    {
        CallQueueService = new CallQueueService();
    }

    // GET: CallQueue
    public ActionResult Home(UInt16 displayCount = 10)
    {
        var calls = CallQueueService.PeekCalls(displayCount);
        ViewBag.DisplayCount = displayCount;
        ViewBag.TotalCallCount = CallQueueService.GetCallCount();
        return View(calls);
    }

    [HttpPost]
    public ActionResult SimulateCalls(string spHostUrl)
    {
        int count = CallQueueService.SimulateCalls();
        TempData["Message"] = string.Format("Successfully simulated {0} calls and added them to the call queue.", count);
        return RedirectToAction("Index", new { SPHostUrl = spHostUrl });
    }

    [HttpPost]
    public ActionResult TakeCall(string spHostUrl)
    {
        CallQueueService.DequeueCall();
        TempData["Message"] = "Call taken successfully and removed from the call queue!";
        return RedirectToAction("Index", new { SPHostUrl = spHostUrl });
    }
}

Die Datei "CallQueueService.cs" definiert die CallQueueService-Klasse, die die Verbindung mit Azure Queue Storage herstellt. Diese Klasse enthält auch die Methoden zum Hinzufügen, Entfernen (Entfernen aus der Warteschlange) und Abrufen der Anrufe aus der Warteschlange.

public class CallQueueService
{
    private CloudQueueClient queueClient;

    private CloudQueue queue;

    public CallQueueService(string storageConnectionStringConfigName = "StorageConnectionString")
    {
        var connectionString = CloudConfigurationManager.GetSetting(storageConnectionStringConfigName);
        var storageAccount = CloudStorageAccount.Parse(connectionString);

        this.queueClient = storageAccount.CreateCloudQueueClient();
        this.queue = queueClient.GetQueueReference("calls");
        this.queue.CreateIfNotExists();
        }

        public int? GetCallCount()
        {
        queue.FetchAttributes();
        return queue.ApproximateMessageCount;
    }

    public IEnumerable<Call> PeekCalls(UInt16 count)
    {
        var messages = queue.PeekMessages(count);

        var serializer = new JavaScriptSerializer();
        foreach (var message in messages)
        {
        Call call = null;
        try
        {
        call = serializer.Deserialize<Call>(message.AsString);
        }
        catch { }

        if (call != null) yield return call;
        }
    }

    public void AddCall(Call call)
    {
        var serializer = new JavaScriptSerializer();
        var content = serializer.Serialize(call);
        var message = new CloudQueueMessage(content);
        queue.AddMessage(message);
    }

    public void DequeueCall()
    {
        var message = queue.GetMessage();
        queue.DeleteMessage(message);
    }

    public int SimulateCalls()
    {
        Random random = new Random();
        int count = random.Next(1, 6);
        for (int i = 0; i < count; i++)
        {
        int phoneNumber = random.Next();
        var call = new Call
        {
        ReceivedDate = DateTime.Now,
        PhoneNumber = phoneNumber.ToString("+1-000-000-0000")
        };
        AddCall(call);

        return count;
    }
}

Azure SQL-Datenbank (Szenario "Zuletzt verwendete Bestellungen")

Im Szenario "Zuletzt verwendete Bestellungen" wird ein direkter Anruf des Northwind Azure SQL-Datenbank verwendet, um alle Bestellungen für einen bestimmten Kunden zurückzugeben.

Im Folgenden werden die Vorteile dieses Ansatzes aufgeführt:

  • Eine Datenbank kann mehrere Add-Ins unterstützen.
  • Sie können Ihr Datenbankschema aktualisieren, ohne Ihr Add-In aktualisieren und erneut bereitstellen zu müssen, solange sich die Schemaänderungen nicht auf die Abfragen in Ihrem Add-In auswirken.
  • Eine relationale Datenbank kann m:n-Beziehungen unterstützen und somit komplexere Geschäftsszenarien unterstützen.
  • Sie können Datenbankentwurfstools verwenden, um den Entwurf Ihrer Datenbank zu optimieren.
  • Relationale Datenbanken bieten eine bessere Leistung als die anderen Optionen, wenn Sie komplexe Vorgänge in Ihren Abfragen ausführen müssen, z. B. Berechnungen und Vereinigungen.
  • Eine Azure SQL-Datenbank ermöglicht es Ihnen das einfache Importieren und Exportieren von Daten, sodass Sie Ihre Daten einfacher verwalten und verschieben können.
  • Beim Deinstallieren Ihres Add-Ins gehen keine Daten verloren, es sei denn, das Add-In verwendet das AppUninstalled-Ereignis, um die Daten zu löschen.

Die Benutzeroberfläche für aktuelle Bestellungen funktioniert ähnlich wie die Benutzeroberfläche des Kundendashboards. Wählen Sie in der linken Spalte den Link Zuletzt verwendete Bestellungen aus, und wählen Sie dann im Dropdownmenü oben im mittleren Bereich einen Kunden aus. Eine Liste der Bestellungen dieses Kunden wird im mittleren Bereich angezeigt.

Diese Seite ist eine Ansicht "Model-View-Controller", die in der Datei "Views/CustomerDashboard/Orders.cshtml" definiert ist. Code in der Datei "Controllers/CustomerDashboardController.cs" verwendet das Entity Framework, um die Tabelle Bestellungen in Ihrer Azure SQL-Datenbank abzufragen. Die Kunden-ID wird mithilfe eines Abfragezeichenfolgenparameters in der URL übergeben, die übergeben wird, wenn der Benutzer im Dropdownmenü einen Kunden auswählt. Die Abfrage erstellt eine Verknüpfung für die Tabellen Kunde, Mitarbeiter und Spediteur. Das Abfrageergebnis wird dann an die Ansicht "Model-View-Controller" übergeben, in der die Ergebnisse angezeigt werden.

Der folgende Code aus der Datei "CustomerDashboardController.cs" führt die Datenbankabfrage aus und gibt die Daten an die Ansicht zurück.

public ActionResult Orders(string customerId)
{            
    Order[] orders;
    using (var db = new NorthWindEntities())
    {
            orders = db.Orders
                  .Include(o => o.Customer)
                  .Include(o => o.Employee)
                  .Include(o => o.Shipper)
                  .Where(c => c.CustomerID == customerId)
                  .ToArray();
    }

    ViewBag.SharePointContext = 
        SharePointContextProvider.Current.GetSharePointContext(HttpContext);

    return View(orders);
}

Siehe auch