News combit Dev Blog

So geht's: Berichte automatisch in Cloud-Speicherdienste exportieren

Veröffentlicht: Donnerstag, 18. April 2019 | 0 Kommentar(e)
 
Mit List & Label lassen sich Berichte in unterschiedlichste Formate exportieren wie bspw. PDF, Word, Excel und viele mehr. Die entstandenen Berichte können so entweder direkt im Dateisystem gespeichert werden oder - in .NET - in einen Stream, um sie im Anschluss manuell selbst in eine Datenbank, in ein Dokumenten Management System oder ähnliches zu transferieren. Nun können Berichte aber auch direkt automatisiert in sogenannte Cloud-Speicherdienste gespeichert werden. Hierfür stehen in List & Label für .NET die Cloud Storage Provider für GoogleDrive, Microsoft OneDrive oder Dropbox zur Verfügung.

Damit die List & Label .NET Komponente die exportierten Berichte direkt und automatisiert in einen der unterstützten Cloud-Speicherdienste übertragen kann, ist je nach Zielsystem mindestens eine weitere Assembly-Referenz notwendig. Der Quelltext für die benötigten Assemblies steht auf GitHub zur Verfügung und kann beliebig angepasst oder erweitert werden. Auch im combit Report Server können die Cloud Storage Provider für geplante Berichte verwendet werden. Nachfolgend finden Sie einige Beispiele, die aufzeigen wie die Provider im eigenen Code verwendet werden können.

Hier wird zunächst ein einfacher dateibasierter PDF-Export mit List & Label gezeigt. Der Bericht wird dann anschließend als Stream auf GoogleDrive hochgeladen, inklusive der Anmeldedaten, damit keine gesonderte Authentifizierung durch den Anwender erfolgen muss. Hierzu ist dann jedoch ein eigens zu erzeugender RefreshToken notwendig:

...
using (ListLabel LL = new ListLabel())
{
    // D:  Datenquelle und Optionen für List & Label definieren
    // US: Define data source and options for List & Label
    // ...
 
    // D:  Bericht mit List & Label als PDF nach _filePath exportieren
    // US: Export report with List & Label as PDF document into _filePath
    ExportConfiguration exportConfiguration = new ExportConfiguration(LlExportTarget.Pdf, _filePath, "simple.lst")
    {
        ShowResult = false
    };
     
    LL.Export(exportConfiguration);
     
    // D:  Bericht nach GoogleDrive hochladen
    // US: Upload report into GoogleDrive
    var stream = new FileStream(_filePath, FileMode.Open, FileAccess.Read);
    GoogleDriveUploadParameter googleDriveUploadParameter = new GoogleDriveUploadParameter()
    {
        MimeType = GetMimeType(_filePathh),
        UploadStream = stream,
        CloudFileName = Path.GetFileName(_filePath),
        CloudPath = "" // empty string means root folder
    };
     
    GoogleDriveCredentials googleDriveUploadCredentials = new GoogleDriveCredentials()
    {
        ApplicationName = "<Application name of your Google App>",
        ClientId = "<Client Id of your Google App>",
        ClientSecret = "client_secret.json",
        RefreshToken = "<Refresh token of your Google App>"
    };
    LL.UploadSilently(googleDriveUploadParameter, googleDriveUploadCredentials);
 
    stream.Close();
}
...

Den Upload eines Stream-basierten Berichts nach Microsoft OneDrive, der erst vorher manuell generiert wird, zeigt der folgende Code. Hierbei wird jedoch die Eingabe der Anmeldedaten an Microsoft OneDrive für den Anwender forciert:
...
using (ListLabel LL = new ListLabel())
{
    // D:  Datenquelle und Optionen für List & Label definieren
    // US: Define data source and options for List & Label
    // ...
     
    // D:  Bericht mit List & Label als PDF direkt in einen Stream exportieren
    // US: Export report with List & Label as PDF document into stream
    var stream = new FileStream(_filePath, FileMode.CreateNew);
    ExportConfiguration exportConfiguration = new ExportConfiguration(LlExportTarget.Pdf, stream, "simple.lst")
    {
        ShowResult = false
    };
    LL.Export(exportConfiguration);
     
    // D:  Bericht nach Microsoft OneDrive hochladen
    // US: Upload report into Microsoft OneDrive
    MicrosoftOneDriveUploadParameter microsoftOneDriveUploadParameter = new MicrosoftOneDriveUploadParameter()
    {
        ApplicationId = "<Application Id of your Microsoft App>",
        UploadStream = stream,
        CloudFileName = Path.GetFileName(_filePath),
        CloudPath = "Documents"
    };
    LL.Upload(microsoftOneDriveUploadParameter);
}
...

Die obigen Beispiele für GoogleDrive und Microsoft OneDrive zeigen alle einen gesonderten Upload des zuvor exportierten Berichts über die Upload-Funktion des jeweiligen Cloud Storage Providers. Darüber können dann natürlich auch jederzeit beliebige Dateien hochgeladen werden, vollkommen unabhängig von List & Label. Mit Hilfe einer Erweiterungsmethode für die Export-Funktion, die jeder Cloud Storage Provider enthält, kann jedoch auch der Export des Berichtes inklusive des Uploads vollständig in einem Zug durchgeführt werden. Welcher der Cloud Storage Provider dabei verwendet wird, entscheidet der jeweilige spezifische Parameter. So würde dann ein direkter dateibasierter Export inklusive Upload nach Dropbox aussehen:
...
using (ListLabel LL = new ListLabel())
{
    // D:  Datenquelle und Optionen für List & Label definieren
    // US: Define data source and options for List & Label
    // ...
     
    // D:  Optionen für den Export des Berichts definieren
    // US: Define export options for the report
    ExportConfiguration exportConfiguration = new ExportConfiguration(LlExportTarget.Pdf, _filePath, "simple.lst")
    {
        ShowResult = false
    };
     
    // D:  Bericht direkt nach dem Exportieren nach Dropbox hochladen
    // US: Upload the exported report into Dropbox
    DropboxExportParameter dropBoxExportParameter = new DropboxExportParameter()
    {
        CloudFileName = Path.GetFileNameWithoutExtension(_filePath),
        CloudPath = "Documents"
    };
    LL.Export(exportConfiguration, dropBoxExportParameter, "<Your DropBox App Key>");
}
...

In den einzelnen Implementierungen der Cloud Storage Provider finden sich noch weitere hilfreiche Funktionen und eine ausführliche Code-Dokumentation. Stöbern Sie ein wenig herum oder implementieren Sie sogar speziell für Ihre Anforderungen eigene neue Funktionen. Natürlich freuen wir uns auch sehr über Pull-Requests auf GitHub, um Aktualisierungen der gesamten List & Label Community zugänglich machen zu können.




Autor: Daniel Paepke
Consultant, Development & Cooperations

Daniel wurde bei combit zum Softwareentwickler ausgebildet. Neben der Softwareentwicklung betreut er auch technische Kooperationen mit Geschäftspartnern, hält Workshops für Entwickler und unterstützt das Sales- und Service-Team als Berater im technischen Bereich. In seiner knappen Freizeit findet man ihn auf seinem Mountainbike rund um den Bodensee und in den nahen Alpen.


 


Kommentare


Aktuell gibt es noch keine Kommentare zu diesem Blogbeitrag.

Ergänzen Sie hier Ihren Kommentar
 
 
 
 
 

Lassen Sie sich über neue Kommentare zu diesem Blogbeitrag informieren


 
+49 (0) 7531 90 60 10