Dokumentsets im Eigenbau

Dokumentsets sind ein sehr schicke Funktion von SharePoint Server. Leider gibt es die nur in der Server-Version – also nicht wenn man nur Foundation einsetzt.

Was also tun, wenn der Kunde nur eine Foundation hat, aber Anforderungen hat, die nach den Eigenschaften eines Document-Sets schreien?

Die Anforderungen

Vielleicht zunächst zu den Anforderungen des Kunden. Die Anforderung war, dass es ein Dokument gibt, zu welchem Anlagen existieren. Also eine Klassischer Master-Detail Beziehung zwischen den Dokumenten.

SharePoint kennt ja durchaus Anlagen – aber nur für Listenelemente, nicht bei Dokumenten. und Anlagen habe den Nachteil, dass es keine Versionierung und eigene Meta-Daten gibt. Das ist irgendwie doof. Schöner wäre es, wenn man also zu einem Dokument beliebig viele Anlagen anfügen könnte.

Natürlich hat mir diese Frage keine Ruhe gelassen und ich habe mir gedacht, dass sich das doch recht einfach lösen lassen muss.

Ein Lösungspfad

Fangen wir einmal ganz einfach an. Zuerst einmal brauchen wir zwei Dokument-Bibliotheken, eine für die Dokumente und eine für die Anlagen. In der Bibliothek der Anlagen wird dann eine Nachschlage-Spalte hinzugefügt, die auf die Dokumente verweist. Somit kann man also Anlagen hochladen und die mit einem Dokument verknüpfen.

doc_set_diy_01

Als nächstes sollten die Anlage immer beim jeweiligen Dokument mit angezeigt werden. Dazu wir die Standard-Ansicht des Dokuments bearbeitet und ein App-WebPart für die Anlagen Hinzugefügt.

doc_set_diy_02

Nun muss an das WebPart noch ein Filter übergeben werden. Dazu wird die ID des aktuellen Dokuments übergeben und in der Liste der Anlage in der Spalte QM-Dokumente gefiltert.

doc_set_diy_03

Wenn man nun also ein Dokument öffnet, sieht man nur die Anlage, die mit diesem Dokument verbunden sind.

Allerdings hat diese Lösung noch einen Haken: sie ist unhandlich in der Pflege. Wenn man eine neue Anlage zu eine Dokument hinzufügen will, dann muss man die Anlage in die Liste der Anlagen hochladen und in den Meta-Daten auf das Dokument verweisen. Das ist irgendwie doof. Besser wäre es ja, wenn man z.B. in der Detail-Ansicht des Dokuments sagen könnte “bitte eine neue Anlage für dieses Dokument hochladen”.

Das Customizing

Mit ein wenig JavaScript kann man das Handling der Lösung vereinfachen. Zunächst wird jQuery, ein File-Input Element und ein Button gebraucht.

<script type="text/javascript" src="https://mytenant.sharepoint.com/qm/scripts/jquery-1.8.2.min.js"></script>
<input type="file" id="fileSelectorInput">
<input type="button" onClick="javascript: DoUpload();" value="Go!">

Nun folgt also die Magie. Die liegt hier natürlich in der Funktion DoUpload. Hier wird zunächst die Datei aus dem Dateisystem gelesen und dann als ByteCharacter-Array an eine weiter Funktion übergeben.

function DoUpload() {
    var fileInput = jQuery('#fileSelectorInput');

    var file = fileInput[0].files[0];
    var reader = new FileReader();
    reader.onload = function (result) {
         var fileName = '',
         libraryName = '',
         fileData = '';
 
        var byteArray = new Uint8Array(result.target.result)
        for (var i = 0; i < byteArray.byteLength; i++) {
            fileData += String.fromCharCode(byteArray[i])
        }
        
        DoUploadInternal(file.name, fileData);
    };
    reader.readAsArrayBuffer(file);
}

Soweit ist ja noch alles ganz Simple. Als nächstes wird die Datei mittels JSOM in den SharePoint geladen, um direkt auch die Meta-Daten setzen zu können.

Zunächst wird die ID des aktuellen Dokuments aus der URL gelesen und der Wert des Feldes QMName aus dem Anzeigeformular. Denn wir wollen der Anlage nicht nur einen Verweis auf das aktuelle Dokument geben, sondern auch die Meta-Daten aus dem Feld QMName mit an die Anlage übergeben.

JSRequest.EnsureSetup();
var qmName = jQuery('h3:contains("QM Name")').closest('td').next('td').text();
var qmDokumentId = JSRequest.QueryString["ID"];

Nun brauchen wir einen ClientContext, damit wir eine neue Datei für SharePoint anlegen können. Dort fügen wir dann das Character-Array unserer Datei als Content an.

clientContext = new SP.ClientContext.get_current();
var oWebsite = clientContext.get_web();
var oList = oWebsite.get_lists().getByTitle("QM-Anlage");

var fileCreateInfo = new SP.FileCreationInformation();
fileCreateInfo.set_url(fileName);
fileCreateInfo.set_content(new SP.Base64EncodedByteArray());

for (var i = 0; i < fileContent.length; i++) {
    fileCreateInfo.get_content().append(fileContent.charCodeAt(i));
}

newFile = oList.get_rootFolder().get_files().add(fileCreateInfo);
clientContext.load(newFile);

Nun müssen wir noch die Meta-Daten setzen. Dazu holen wir zunächst alle Feld-Informationen und setzen dann den Wert für QMName und erstellen einen Lookup auf das aktuelle Dokument.

item = newFile.get_listItemAllFields();
clientContext.load(item);

item.set_item("QMName", qmName);
var object = new SP.FieldLookupValue();
object.set_lookupId(qmDokumentId);
item.set_item("QMDokument", object);
item.update();

clientContext.executeQueryAsync(successHandler, errorHandler);

Am Schluss wird das Ganze dann als asynchrone Query an den Server gesendet. Im successHandler wird dann noch die aktuelle Seite aktualisiert, damit das neu hinzufügte Dokument auch in der Liste erscheint.

SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK); 

Fazit

Mit ein bisschen Creativität und ein wenig JavaScript Anpassungen kann man schon ganz ordentlich etwas aus SharePoint heraus kitzeln.

doc_set_diy_04

SPRRPC010 – Die Gnade der späten Geburt

Eine neue Ausgabe des SharePoint Rhein-Ruhr Podcasts. Im Rahmen der SharePoint Days 2014 in Berlin haben Henning und ich geplant, eine neue Podcastepisode aufzunehmen. Gesagt getan, Termin für den Abend gemacht und los geht´s. Im Laufe des Abends konnten wir noch Karsten Pohnke als Teilnehmer gewinnen, Drei Bier bestellt und…Michael Greth nimmt uns ein Intro auf und der Recorder zeichnet nicht richtig auf…wir reden 15 Minuten und stellen fest….der Recorder zeichnet nicht richtig auf. Trotz aller Hindernisse haben wir tapfer weitergemacht und uns nach erfolgreicher Aufnahme dann zur Erhohlung in Christian Glessners Bar „The Drunken Barber“ auf ein paar Black Barber zurückgezogen. Continue reading

SharePoint UserGroup OWL

Die SharePoint UserGroup OWL trifft sich am 9.12. in Gütersloh. Hier der Hinweis für alle SharePointer aus der Region. Es lohnt sich auf jeden Fall hinzugehen, da Ingo Zimmermann und René Hézser ein wirklich interessantes Programm zusammengestellt haben.

Wann: 9.12.2014 ab 18 Uhr

Wo: An der Autobahn 200, 33333 Gütersloh
https://www.google.de/maps/dir//51.8841959,8.4429219/@51.8834721,8.4421559,17z?hl=de

Themen:

  • SharePoint Hosting – Ist die Cloud schon geeignet dafür? von Daniel Lindemann (ITaCS GmbH)
  • Das Spannungsfeld Development-Operation im Umfeld von SharePoint Hosting von Andre Tomasiewicz (arvato Systems)

Da der Raum sich auf dem Firmengelände befindet, ist eine namentliche Voranmeldung erforderlich.

Anmeldungen und Details unter XING: https://www.xing.com/events/sharepoint-usergroup-owl-dezember-2014-1467606

Vielen Dank an Karsten Pohnke für den Hinweis, den wir natürlich gerne aufnehmen und weitergeben.

Also, nix wie hin!

SPRRPC009 – Das Ende der Evolutionsstufe

Eine neue Ausgabe des SharePoint Rhein-Ruhr Podcasts mit einer Neuerung. Andrej ist nicht mehr allein, sondern Henning kommt dazu und wir zwei talken in lockerer Runde über folgende Themen:

Continue reading

SharePoint und Domänen mit einseitiger Vertrauensstellung

In komplexeren Systemumgebungen kann es schon mal vorkommen, dass es mehr als eine Active Directory Domäne gibt.

In meinem Fall gibt es neben der Produktiven Domäne acme.local noch eine Domäne für den Entwicklungsbereich dev-acme.local. Zwischen den beiden Domänen gibt es eine einseitige Vertrauensstellung, so dass man sich mit seinem Account eiben@acme.local auch an dev-acme.local anmelden kann, nicht aber mit deinem dev-acme Account an der acme Domäne. Soweit alles klar.

Was aber, wenn ich in der dev-acme.local Domäne einen SharePoint stehen habe, auf den ich auch mit den acme.local Accounts zugreifen will? Wenn in SharePoint Berechtigungen vergeben werden, dann schlägt SharePoint den Account in der Domäne nach. In diesem Fall ist der SharePoint in der dev-acme.local Domäne installiert und läuft natürlich auch mit entsprechenden Service-Accounts (wie dev-acme\spAppPool). Dieser kann aber aufgrund der Vertrauensstellung keine Accounts aus acme.local nachschlagen, da dieses nachschlagen ja unter der Identität des Application-Pools der Web-Anwendung stattfindet (und die Domäne acme.local kann aus Sicherheitsgründen nur von Authentifizierten Benutzern abgefragt werden).

Was nun?

Zum Glück kann man SharePoint zu genau diesem Zweck sagen, dass für den Zugriff auf eine bestimmte Domäne ein anderer Account verwendet werden soll. Somit kann ich also auch auf andere Domänen zugreifen.

Wie geht das also?

Zunächst brauche ich einen Account in der acme.local Domäne, mit dem ich Benutzerkonten nachschlagen kann. Dafür reicht ein normaler Benutzer, der eigentlich keine besondere Rechte benötigt (außer dass er halt auf das AD zugreifen können muss). Ich habe den mal devlookup genannt.

Bevor ich SharePoint diesen Account für die Lookups beibringen kann, muss ich noch einen Verschlüsselungsschlüssel erstellen.

STSADMstsadm.exe -o setapppassword -password MeinGeheimerSchluessel

Nun kann ich SharePoint mitteilen, dass für die Web-Application mit der URL sp2013.dev-acme.local beim Zugriff auf die Domäne acme.local das Konto acme\devlookup verwendet werden soll:

STSADM.exe -o setproperty -pn peoplepicker-searchadforests -pv "domain:acme.local,acme\devlookup,MeinPasswort" -url http://sp2013.dev-acme.local

Unglaublich, dass diese Einstellung nur mit dem guten alten STSADM geht. Aber so ist es halt nun mal – auch in Zeiten von PowerShell.

SharePoint Days 2014 – Unsere Vorträge und ein Rabattcode

Vom 02. bis zum 04. Dezember 2014 finden in Berlin zum 2. mal die SharePoint Days der HLMC statt. Das Programm kann sich wirklich sehen lassen und bietet ein bungtes Spektrum an Vorträgen rund um SharePoint, Office 365 und Yammer. Zahlreiche MVPs nehmen an der Veranstaltung teil und machen so die SharePoint Days zu einer wirklich runden Sache.

Auch aus unseren UserGroups nehmen einige Kollegen als Sprecher an den SharePoint Days teil.

Rich Internet Applications – mit SharePoint – Henning Eiben, busitec GmbH – 1. Konferenztag 10:35 Uhr

Yammer aus Sicht der IT – Wie IT Admins erfolgreich Yammer Einführungen begleiten – Andrej Doms, ConVista Consulting AG – 1. Konferenztag 11:45 Uhr

Wunsch & Wirklichkeit bei SharePoint Forms? Usability und Anpassungsmöglichkeiten – Karsten Pohnke, arvato Systems perdata GmbH – 2. Konferenztag 11:25 Uhr

Außerdem werde ich einen Workshop zum Thema Yammer für Administratoren halten, der viele wichtige Informationen für alle IT Pros, die Yammer Einführungen begleiten werden, beinhaltet und das Leben mit Yammer deutlich erleichtert. Teilnehmen lohnt sich! 🙂

Als kleines Dankeschön für die Unterstützung aus unseren UserGroups hat uns die HLMC einen Rabattcode gespendet, der den Frühbucherrabatt verlängert.

Einfach auf die Anmeldeseite gehen (http://www.sharepoint-day.de/anmeldung.html) und den folgenden Rabattcode eingeben: REF_FB_SPD_14

Damit gelten weiterhin die sehr günstigen Frühbucherpreise für alle Konferenztickets und Workshopanmeldungen.

Reminder & Programm: 26. Treffen der SharePoint UserGroup Düsseldorf

Hallo Liebe Mitglieder und Interessierte,

ich möchte Sie heute nochmals herzlich zum 26. Treffen der SharePoint UserGroup Düsseldorf einladen. Die UserGroup ist weiterhin auf Tournee. Dieses mal machen wir am 4. November bei CGI in Düsseldorf halt.

Vielen Dank an Holger Scholz von CGI für die Organisation des Raumes und des Caterings.

Am Dienstag erwarten uns 3 interessante Vorträge von bekannten Sprechern:

„Skybow Solution Framework, Projektlaufzeiten um bis zu 85% verkürzen“ – Philip Nussbaumer & Jörg Stappert, Skybow

„Wunsch & Wirklichkeit bei SharePoint Forms? Usability und Anpassungsmöglichkeiten“ – Karsten Pohnke, arvato Systems perdata GmbH

„SharePoint Toolbox – Der Leatherman für den erfolgreichen SharePoint Experten“ – Henning Eiben, busitec GmbH

Philip Nussbaumer und Jörg Stappert sind beide keine Unbekannten im SharePoint Geschäft und haben mit dem Skybow Solutions Framework ein ganz neues heißes Eisen im Feuer. Die schweizer Firma Up-Great AG (SharePoint ISV mit 80 Mitarbeitern) hat in zahlreichen Projekten auf Basis der Kundenanforderungen und in enger Zusammenarbeit mit diesen ein Werkzeug entwickelt, mit dem die Umsetzungszeit von SharePoint-Implementierungen um bis zu 85% verkürzt werden kann. Kern des Frameworks sind sogenannte Dossiers, also Sammlungen von Listeneinträgen und Objekten, die sich um ein bestimmtes Thema drehen. Ein Dossier kann z. B. eine Mitarbeiterakte, ein Vertrag oder eine Kunden- bzw. Interessentenakte sein. Um diese Dossiers herum sind einerseites über 200 Einzelfeatures entwickelt worden, andererseits Lösungen wie ein „CRM light“ oder eine spezielle Lösung für Vermögensverwalter entstanden. Im Rahmen eines einstündigen Vortrags möchten wir Ihnen unsere Konzepte anhand einer Live-Demo anhand der Live-Installation bei unserem Kunden Coop Mineralöl AG vorstellen. Ihr Feedback ist uns sehr wichtig, da wir planen, unser Framework in Zukunft auch über Partner zu vermarkten und hierzu möglichst viele Meinungen einholen wollen.

Karsten Pohnke ist als erfahrener Microsoft SharePoint Consultant bei der arvato Systems perdata GmbH tätig. Seine Aufgaben sind Beratung, Konzeption und Entwicklung von Business Solutions im SharePoint und .Net Umfeld bei mittleren und großen Unternehmen. Neben seiner beruflichen Tätigkeit veröffentlicht er immer wieder Tipps und Tricks im Netz. Sie erreichen ihn über seinen Blog (www.ilikesharepoint.de) oder via Twitter (@kpohnke). Bei der Entwicklung von SharePoint Lösungen für fachbezogene Prozesse stehen häufig Schnittstellen, Integration und Migrationsprozesse als große Herausforderung im Vordergrund. Doch spätestens beim produktiven Einsatz sitzen Endanwender vor der Anwendung und müssen Daten bearbeiten, pflegen und eingeben. Welche Anpassungsmöglichkeit für Formulare in SharePoint bereitstehen sowie Tipps und Beispiele zur besseren Gestaltung von Eingabemöglichkeiten (Stichwort Usability) erfahren Sie in diesem Vortrag. Happy User, happy Customer – das bringt einer SharePoint Anwendung die benötigte Akzeptanz.

Henning Eiben ist als Teamleiter der Software-Entwicklung und Geschäftsführer für die busitec GmbH tätig. Seit über 10 Jahren entwickelt er Web-basierte Anwendungen im Microsoft Technologie-Umfeld (von classic ASP mit VBScript, über ASP.Net 1.1, bis hin zu ASP.Net MVC 4 mit Azure). Seit 2007 ist er als Berater und Entwickler im SharePoint Bereich tätig. Er bloggt sowohl im Firmenblog (blog.busitec.de) als auch bei der Usergroup Rhein-Ruhr (www.sharepoint-rhein-ruhr.de). Jeder kenn den Leatherman, das Multitool für alle Gelegenheiten, der McGiver der Werkzeuge. Auch für den erfolgreichen SharePoint Experten gibt es essentielle Werkzeuge, die im Alltag bequemes und sicheres Arbeiten gewährleisten. Das ist die SharePoint Toolbox.

Über Ihre Teilnahme und interessante Vorträge, Lösungen und Diskussionen würde ich mich sehr freuen.

Hier noch einmal die Daten:
SharePoint UserGroup Düsseldorf

Termin: Dienstag, 4. November 2014, 18:00 – 20:30 Uhr

Ort: CGI (Germany) GmbH & Co. KG, Heerdter Lohweg 35, Düsseldorf 40549

Informationen zur Anfahrt:
anfahrtcgiParken können Sie…
– Hinter dem CGI-Gebäude in der Strasse „Am Albertussee“ (siehe Bild)
– Gegenüber von CGI beim TÜV (auf eigene Gefahr)
– Rechts hinter der ARAL-Tankstellen auf dem  öffentlichen  Parkplatz

Mit Öffentlichen:
Der Düsseldorfer Hauptbahnhof wird von den meisten nationalen Großstädten direkt angefahren. Ab Düsseldorf Hbf fahren die Linien U74 (Richtung Meerbusch Haus Meer) und U76 (Richtung Krefeld Rheinstraße) zur Haltestelle „Lohweg“, direkt am Heerdter Lohweg. Alternativ ab Düsseldorf Hbf mit der U75 (Richtung Düsseldorf Heerdt / Neuss) bis Haltestelle „Dominikus-Krankenhaus“.

Anmeldung: Um Anmeldung zu dieser Veranstaltung bis zum 30.10.2014 wird gebeten! Anmeldung in der Xing Gruppe oder unter:

e-mail: info@sharepoint-rhein-ruhr.de

Bitte melden Sie sich nur an, wenn Sie an dem Termin auch wirklich teilnehmen möchten.

Siehe auch:

http://www.sharepoint-rhein-ruhr.de

SharePointCommunity: http://sharepointcommunity.de/groups/duesseldorf/default.aspx
oder auf unserer Xing Seite: https://www.xing.com/net/spugddf/

Ansprechpartner:
Andrej Doms (ConVista Consulting)
Tel. 0178 888 6018

Neben den Vorträgen gibt es bei einem Snack hoffentlich reichlich Gelegenheit für Sie, mit den anwesenden Experten ins Gespräch zu kommen.

Ich freue mich, Sie alle am 4. November begrüßen zu dürfen.
Mit freundlichen Grüßen

Andrej Doms

AutoResponder mit Fiddler

Vor einigen Tagen sollte ich einen Proof-Of-Concept erstellen, ob man ein System XYZ z.B. in BizTalk anbinden könnte. Das System XYZ bietet dazu eine Schnittstelle an, welche über HTTP mit JSON Nachrichten angesprochen werden kann und auch mit JSON wieder antwortet.

Also mal eben eine kleine BizTalk-Lösung bauen, um zu testen ob man diese JSON Nachrichten richtig erstellen und die Antworten auch richtig verarbeiten kann. Als erstes wird in Azure eine BizTalk 2013 R2 Entwicklungsumgebung erstellt. Das geht recht schnell, innerhalb von knapp 15 Minuten ist die Umgebung verfügbar – cool.

So, also nächstes musste also die Lösung erstellt werden. Aber die Frage ist: wie kann ich testen, ob nun aus BizTalk die Services richtig angesprochen werden und auch die Antwort dann von BizTalk richtig verarbeitet wird? Das System XYZ läuft beim Kunden On-Premise, da habe ich also von Azure aus keinen Zugang. Und mal eben XYZ installiert ist ja auch nicht so einfach, da brauche ich einen SQL-Server, Tomcat … und das ganze Konfigurieren – und alles nur für einen Proof-Of-Concept? Nein Danke!

Und mal wieder ist Fiddler der Retter!

Ich habe also meine Lösung mit BizTalk gebaut und dann auch komplett im BizTalk deployed. Nur leider steht mir ja das System XYZ nicht zur Verfügung, welches in eigentlich ansprechen wollte. Also mal eben Fiddler auf dem Server installiert und dann mit Fiddler das System simuliert. Anstatt dem System XYZ hat Fiddler auf die Aufrufe, welche für XYZ bestimmt waren, abgefangen und beantwortet. Für BizTalk erfolgte das komplett transparent – sweet!

Und wie geht das?

Ganz einfach! Fiddler hat eine Funktion „AutoResponder“. Damit kann Fiddler automatisch auf eingehende Nachrichten reagieren und antworten. Hier haben ich also für die HTTP Aufrufe entsprechende Regeln eingerichtet, die zum einen überprüfen ob die URL http://system-xyz:9090/abc/ aufgerufen wurde und ob im Body des Requests clazz=foo steht. Wenn ja, dann wird der Inhalt der Datei foo_response.json zurückgefliefert. Mit einer zweiten Regeln prüfe ich dann analog ob im Body clazz=bar steht und antworte mit bar_response.json.

fiddler_01

Alle anderen Anfragen werden ganz normal weitergegeben. Für BizTalk ist es also vollkommen transparent, ob nun das System XYZ oder ein anderes tatsächlich auf die Anfragen reagiert. Es muss ja noch nicht einmal der Server-Name existieren, da der Request ja direkt von Fiddler abgefangen wird.

Cool! Somit kann ich testen, ob meine Anwendung richtig mit dem System XYZ sprechen würde, auch wenn ich das System nicht habe – ich muss „nur“ wissen wie die Requests und die Responses ausseen würden.

Reminder & Programm 12. Treffen der SharePoint UserGroup Köln

Hallo Liebe Mitglieder und Interessierte,

ich möchte Sie heute herzlich zum 12. Treffen der SharePoint UserGroup Köln einladen. Die Sommerpause ist überwunden, jetzt geht es endlich mit der SPUG Köln weiter. Wir treffen uns am 21. Oktober. Ab diesem Termin finden die Treffen an neuem Ort im Rheinauhafen in Köln statt.

Unser Programm:

„Skybow Solution Framework, Projektlaufzeiten um bis zu 85% verkürzen“ – Philip Nussbaumer & Jörg Stappert, Skybow

„Automatisierte SharePoint Installation“ – Denis Buco, COMPAREX AG

„Access die Hölle, oder? Und was ist mit Access Services?“ – Andrej Doms, ConVista Consulting AG

Philip Nussbaumer und Jörg Stappert sind beide keine Unbekannten im SharePoint Geschäft und haben mit dem Skybow Solutions Framework ein ganz neues heißes Eisen im Feuer. Die schweizer Firma Up-Great AG (SharePoint ISV mit 80 Mitarbeitern) hat in zahlreichen Projekten auf Basis der Kundenanforderungen und in enger Zusammenarbeit mit diesen ein Werkzeug entwickelt, mit dem die Umsetzungszeit von SharePoint-Implementierungen um bis zu 85% verkürzt werden kann.

Denis Buco ist SharePoint Consultant bei der COMPAREX AG aus Leipzig in der Niederlassung Köln. Dort beschäftigt er sich hauptsächlich mit den Schwerpunkten SharePoint Infrastruktur, Office 365 und Prozessabbildung.

Andrej Doms leitet das SharePoint Team bei der ConVista Consulting AG in Köln und ist als Sprecher auf großen und kleinen Konferenzen in Europa unterwegs.

Über Ihre Teilnahme und interessante Vorträge, Lösungen und Diskussionen würde ich mich sehr freuen.

Hier noch einmal die Daten:

SharePoint UserGroup Köln

Termin: Dienstag, 21.10.2014 – 18.00 Uhr

Ort: ConVista Consulting AG, Im Zollhafen 15/17, 50678 Köln

Parken: Parkplätze stehen in der Tiefgarage im Rheinauhafen zur Verfügung, bitte in der Nähe des Aufgangs 3.04 parken.

Öffentliche Verkehrsmittel:
– U-Bahn Linie 16 ab Dom-Hbf bis Haltestelle Ubierring (ca. 15 Min.), Fußweg vom Ubierring bis zu ConVista ca. 10 Minuten
– U-Bahn Linie 15 ab Rudolfplatz bis Haltestelle Ubierring (ca. 11 Min.), Fußweg vom Ubierring bis zu ConVista ca. 10 Minuten
– Bus Linie 106 ab Heumarkt bis Haltestelle Rheinauhafen (ca. 7 Min), Fußweg vom Rheinauhafen bis zu ConVista ca. 2 Minuten

Anmeldung:
Um Anmeldung für diese Veranstaltung wird bis zum 17.10.2014 gebeten.
Bitte melden Sie sich zum Treffen der SharePoint UserGroup nur an, wenn Sie auch wirklich teilnehmen möchten.

Die Anmeldung kann erfolgen über:
eMail: info@sharepoint-rhein-ruhr.de oder ug-koeln@mysharepoint.de

XING: https://www.xing.com/net/prib6b3dax/spugcgn

Ansprechpartner:
Andrej Doms (ConVista Consulting)
Tel. 0178 888 6018

Neben den Vorträgen gibt es bei einem Snack hoffentlich reichlich Gelegenheit für Sie, mit den anwesenden Experten ins Gespräch zu kommen.
Ich freue mich, Sie alle am 21. Oktober begrüßen zu dürfen.

Mit freundlichen Grüßen

Andrej Doms

Post-Migration Reporting

Nach der Pflicht kommt bekanntlich die Kür. So ist es auch bei der Migration von SharePoint.

Vor einiger Zeit hatten wir für einen Kunden Inhalte von einer bestehenden SharePoint 2007 Farm zu einer SharePoint 2013 Farm migriert – mit ShareGate. Dabei wurden diverse Listen und Sites migriert. Am Ende hatten wir 11 Migrationen mit ShareGate durchgeführt und alle Inhalten waren erfolgreich übertragen.

Nun geht es also darum die Migration ein klein wenig aufzuarbeiten und zu dokumentieren. Praktischerweise kann man sich die Migrations-Reports in ShareGate als Excel-Datei speichern. Nun habe ich also alle Informationen in 11 Excel-Dateien. Nun ist also die Frage: wie kann ich das am besten aufbereiten?

Hierzu fällt die Wahl auf eines meiner Lieblingswerkzeuge (abgesehen von Visual Studio): Excel!

Mit den neuen BI Funktionen von Excel ist es ein leichtes die Daten aufzubereiten.

sg_mig_rep

Aber ganz in der und der Reihe nach.

Zunächst einmal habe ich also die 11 Excel-Dateien aus ShareGate.

sg_mig_01

sg_mig_02

Hier fällt schon auf, dass die Daten noch ein wenig überarbeitet werden müssen. So wird das Datum hier aktuell noch als Zahl angezeigt. Das ist kein Problem, einfach die Spalte entsprechend formatieren.

Aber wie kann ich nun eine kombinierte Auswertung über alle 11 Dateien machen? Hier kommt Power Query zum Einsatz.

Zunächst einmal beginne ich damit eine einzelne Datei in Power Query einzulesen.

sg_mig_03

sg_mig_04

Nun kann ich sagen, dass die erste Zeile als Header interpretiert werden soll, und die Spalte Date vom Typ Datum/Uhrzeit ist.

sg_mig_05

Nun kann ich mir die Aufbereitung als Script im Erweiterten Editor ansehen. Hier steht nun als Quelle meine Excel-Datei drin. Das kann ich durch einen Parameter ersetze, so dass ich die Aufbereitungsschritte als Funktion in Power Query speichern kann, die als Parameter den Namen der Datei entgegen nimmt, auf die diese Schritte angewandt werden sollen.

sg_mig_06

Nun kann ich also die Abfrage schließen und erstelle eine neue Power Query Abfrage. Dieses mal öffne ich aber nicht eine einzelne Datei, sondern den Ordner in dem sich meine ganzen ShareGate-Reports befinden.

sg_mig_07

Nun habe ich also eine Liste aller Dateien. In dieser Liste kann ich nun die Spalten “Folder Path” und “Name” zusammenfassen, so dass ich den kompletten Pfad bekomme.

sg_mig_08

Anschließend kann ich noch eine benutzerdefinierte Spalte hinzufügen. Hier rufe ich meine als Funktion abgespeicherte Abfrage auf, und übergebe dieser Funktion den gerade zusammengebauten Pfad.

sg_mig_09

Als Ergebnis habe ich nun eine neue Spalte (“Custom”) vom Typ “Table”. Dabei handelt es sich um eine geschachtelte Tabelle – also jede Zeile hat nun eine Tabelle, die den Inhalt der Datei darstellt, der ja mit meine Funktion schon ein wenig aufbereitet wurde.

Eine der absolut coolsten Funktionen von Power Query ist es nun, dass ich diese geschachtelte Tabelle expandieren kann.

sg_mig_10

Wenn ich das mache, dann erhalte ich eine alle Daten aus allen Dateien. Jeder Datensatz hat dabei auch die Daten, die ich in der Liste der Dateien auch schon hatte …

sg_mig_11

Diese Daten kann ich nun aus der Power Query Abfrage in mein Excel Arbeitsblatt übernehmen. Dann noch schnell eine PowerView über die Daten gestülpt – fertig!

Natürlich hätte man das auch anders machen können. Man hätte die 11 Dateien geöffnet und die Daten per Copy & Paste in ein neues Arbeitsblatt eingefügt. Anschließend hätte man ja auch eine Liste mit allen Daten, die man mit PowerView anzeigen lassen kann.

Aber was ist, wenn dann noch 3 Dateien dazu kommen? Kein Problem: einfach die Daten ebenfalls einfügen/anfügen.

Und was ist, wenn eine der Reports nicht mit einbezogen werden soll, weil der von einer Testmigration stammt? Dann müsste man die dafür notwendigen Datensätze aus der Liste löschen.

Durch den Einsatz von Power Query sind in meiner Excel-Datei alle Schritte für die Aufbereitung der Daten gespeichert. Ich kann nun hingehen und ganz andere Reports in dem Ordner ablegen, meine Excel Datei öffnen und auf “Alle Daten aktualisieren” in Excel klicken. Dann werden alle Schritte für die Aufbereitung erneut durchgeführt. Es werden also alle Dateien aus dem Verzeichnis aufgelistet werden, der Pfad wird zusammengestellt, meine benutzerdefinierte Funktion wird ausgeführt und die geschachtelte Tabelle wird expandiert. Schließlich werden die Daten in dem Excel-Arbeitsblatt aufgrund der Power Query Abfrage aktualisiert und die Grafik in dem PowerView wird automatisch aktualisiert. Und das Ganze passiert wie von Geisterhand.