Sharepoint ist ein hervorragendes Tool, Daten zu erfassen oder Dokumente abzulegen. Eine Anforderung in diesem Zusammenhang ist immer wieder Daten in den Sharepoint zu schreiben oder von dort zu konsumieren.

Out-of-The-Box bietet SSIS keine entsprechenden Komponenten, um dies zu bewerkstelligen.

Lesen:

  • [Codeplex] Sharepoint List (Source)
  • ODATA Source
  • C#/VB.NET
  • powershell
  • Drittanbieter
  • Power Query (Sharepoint)
  • Power Query (ODATA)

Schreiben:

  • [Codeplex] Sharepoint List (Destination)
  • C#/VB.NET
  • powershell
  • Drittanbieter

Sharepoint List

Lange Zeit hat Microsoft auf Codeplex eine Lösung angeboten. (siehe Extracting and Loading SharePoint Data in SQL Server Integration Services). Auch wenn in vielen Foren behauptet wird, dass es ab 2014 keine Version mehr gäbe, so stimmt das nicht. Der entsprechende Artikel wurde nur nicht mehr aktualisiert. Hier finden Sie eine Version, die mit SSIS (Visual Studio, SQL) zusammenarbeitet. Eine Lösung, die ich immer wieder implementiert sehe, ist die Verwendung eines SSIS 2017 Paketes, dass auf einen SQL 2019 Agent ausgeführt wird.

ODATA Source

Wenn man eine Sharepoint Liste nur konsumieren möchte, dass geht das auch mit Board-Mittel über die ODATA Komponente. [hier]

Will man die Daten irgendwie einschränken, kann man dies über Url-Filter machen.

odata query options

Power Query (Sharepoint List & ODATA)

Neben der ODATA SSIS Komponente gibt es mit Power Query für SSIS eine weitere Möglichkeit Daten von Sharepoint zu konsumieren.

SharePoint-Liste in Power Query (zb in Excel)

  1. Öffnen Sie Excel und wählen Sie den Reiter “Daten” aus.
  2. Klicken Sie auf “Neue Abfrage” und wählen Sie “Aus anderen Quellen” und dann “Aus SharePoint-Liste”.
  3. Geben Sie die URL Ihres SharePoint-Sites ein.
    • Wichtig: Geben Sie die URL bis zum Hauptteil der Site ein, nicht bis zur spezifischen Liste oder Bibliothek. Zum Beispiel https://IhrUnternehmen.sharepoint.com/sites/IhrSiteName.
  4. Verbindungsauthentifizierung:
    • Wenn Sie zur Authentifizierung aufgefordert werden, wählen Sie die entsprechende Methode (z. B. Organisationskonto) und melden Sie sich mit Ihren SharePoint-Zugangsdaten an.
  5. Wählen Sie die gewünschte Liste oder Bibliothek aus.
    • Power Query zeigt alle verfügbaren Listen und Bibliotheken Ihrer SharePoint-Site an. Wählen Sie die gewünschte aus.
  6. Bearbeiten Sie die Abfrage nach Bedarf.
    • Nachdem Sie die Liste oder Bibliothek ausgewählt haben, öffnet sich der Power Query-Editor. Hier können Sie die Daten filtern, Spalten transformieren und andere Änderungen vornehmen.
  7. Laden Sie die Daten in Excel.
    • Nachdem Sie Ihre Änderungen vorgenommen haben, klicken Sie auf “Schließen & Laden”, um die Daten in ein Excel-Arbeitsblatt zu laden.

Hier ist ein einfacher M-Code, der zeigt, wie der Prozess automatisiert werden könnte. Beachten Sie, dass dieser Code angepasst werden muss, um Ihre spezifischen SharePoint-Details widerzuspiegeln:

let
    Source = SharePoint.Tables("https://IhrUnternehmen.sharepoint.com/sites/IhrSiteName", [Implementation="2.0"]),
    IhreListe = Source{[Id="IhreListenID"]}[Items]
in
    IhreListe

Sharepoint-ODATA-Endpunkt

SharePoint-Listen bieten die Möglichkeit, Daten über einen OData-Endpunkt (Open Data Protocol) abzufragen, eine leistungsstarke und flexible Methode, um Daten über das Web zugänglich zu machen. Dieser OData-Endpunkt ermöglicht es Benutzern und Entwicklern, auf die Inhalte der SharePoint-Listen zuzugreifen und sie zu manipulieren, indem sie standardisierte, REST-basierte HTTP-Anfragen verwenden. Mit dieser Schnittstelle können Sie komplexe Abfragen erstellen, Daten filtern, sortieren, gruppieren und transformieren, wodurch eine nahtlose Integration der SharePoint-Daten in verschiedenste Anwendungen und Dienste ermöglicht wird. Dies macht den OData-Endpunkt besonders nützlich für Business-Intelligence-Anwendungen, benutzerdefinierte Lösungen und die Automatisierung von Geschäftsprozessen, indem er einen direkten und effizienten Zugang zu den wertvollen Daten in SharePoint-Listen bietet.

Basis-URL für den Zugriff auf eine SharePoint-Listehttps://IhrUnternehmen.sharepoint.com/sites/IhrSiteName/
_api/web/lists/GetByTitle(‘IhrListenName’)/items
Zugriff auf eine Liste mit der Listen-IDhttps://IhrUnternehmen.sharepoint.com/sites/IhrSiteName/
_api/web/lists(guid’IhreListenID’)/items
Abfrage bestimmter Felder einer Listehttps://IhrUnternehmen.sharepoint.com/sites/IhrSiteName/
_api/web/lists/GetByTitle(‘IhrListenName’)/items?$select=Titel,Feld1,Feld2
Filtern von Listeneinträgenhttps://IhrUnternehmen.sharepoint.com/sites/IhrSiteName/
_api/web/lists/GetByTitle(‘IhrListenName’)/items?$filter=Feld1 eq ‘Wert’
Sortieren und Begrenzen der Ergebnissehttps://IhrUnternehmen.sharepoint.com/sites/IhrSiteName/
_api/web/lists/GetByTitle(‘IhrListenName’)/items?$orderby=Feld1&$top=10

Hier ein in PowerQuery

let
    // Definieren Sie die URL der SharePoint-Site und den Namen der Liste
    SiteUrl = "https://IhrUnternehmen.sharepoint.com/sites/IhrSiteName",
    ListenName = "IhrListenName",

    // Erstellen Sie die OData-URL für die SharePoint-Liste
    ODataUrl = SiteUrl & "/_api/web/lists/GetByTitle('" & ListenName & "')/items",

    // Verwenden Sie die OData.Feed-Funktion, um die Daten abzurufen
    Source = OData.Feed(ODataUrl, null, [Implementation="2.0"]),

    // Wählen Sie spezifische Felder aus (optional)
    AusgewählteFelder = Table.SelectColumns(Source, {"Feld1", "Feld2", "Feld3"}),

    // Filtern der Daten (optional)
    GefilterteDaten = Table.SelectRows(AusgewählteFelder, each [Feld1] = "BestimmterWert")
in
    GefilterteDaten

C# (Destination)

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
     string siteUrl = "SPSite";
     ClientContext clientContext = new ClientContext(siteUrl);
     ClientContext.Credentials = { Einloggen }
     SP.List oList = clientContext.Web.Lists.GetByTitle("NewList");
     ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
     ListItem oListItem = oList.AddItem(itemCreateInfo);
     oListItem["Title"] = Row.ProductName;
     oListItem.Update();
     ClientContext.ExecuteQuery();
}

Weiterführende Informationen

Powershell (Destination)

Habe ich zugegebenermaßen noch nie verwerdet, sollte aber theoretische funktionieren.

Drittanbieter-Tools (Source & Destination)

Was ist aber das Beste?

Welche dieser Ansätze die beste ist, ist schwer zu sagen. Die (Codeplex) Sharepoint Lösung würde ich nicht mehr verwenden, einerseits da sie mit 2019 nicht mehr zusammenarbeitet und andererseits, da sie sich nicht als so robust herausgestellt hat.

Als Unternehmen, bei dem es nicht auf ein paar Tausend Euro ankommt, würde ich auf Drittanbieter Tools zurückgreifen. Ich hatte mit allen 3 beschriebenen Produkten Erfahrung, aber konnte keine großen Probleme ausmachen. Dies hat Vorteile gegenüber den ODATA und dergleichen, da sich der Hersteller um die etwaigen Problemfälle wie NTEXT udgl. kümmern muss.

Von C# als Source oder Destination würde ich tendenzielle eher abraten, da der Aufwand recht groß ist, das jeweils zu konfigurieren/programmieren. Als wesentlich sinnvoller erachte ich die Möglichkeit, generische Lösungen zu basteln, die Sharepoint => SQL und umgekehrt die Daten synchronisieren. Ich konnte derartige Lösungen bereits mehrfach implementieren. Diese sind sehr robust, laufen aber in der Regel asynchron.

Privat verwende ich in der Regel Power Query oder ODATA als Datenquelle und die oben beschriebenen Lösung um SQL Tabellen mit Sharepoint Listen zu synchronisieren.