SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer...

52
SharePoint Development Sebastian Weber

Transcript of SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer...

Page 1: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

SharePoint Development Sebastian Weber

Page 2: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

SharePoint Development

Sebastian WeberSoftware EngineerPlatinion GmbH – The Boston Consulting [email protected]

Page 3: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Sebastian Weber

Software Engineer bei der Platinion GmbH, einer Tochter der Boston Consulting Group

Über 10 Jahre Erfahrung in der Softwareentwicklung im Microsoft Umfeld

Autor und Sprecher mit den Schwerpunkten .NET Architektur und Technologien (SQL Server und SharePoint)

Page 4: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Warum selber programmieren ...? SharePoint um eigene Module (Web Parts)

erweitern Issue-Tracker, Helpdesk, Weblog, Wiki, ...

SharePoint programmatisch administrieren Web Parts installieren, Seiten erzeugen, Themen

zuweisen ...

SharePoint Funktionen/Daten in eigener Anwendung nutzen Zugriff auf SharePoint Dokumentenbibliothek aus

eigener (Windows) Anwendung heraus, ... ... um alles aus SharePoint herauszuholen!

Page 5: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

„Altes“ HRMS(J2EE)

Beispiel 1: Intranet aufbauen

HRMS Timesheet

HRMS Staffing

Page 6: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Beispiel 2: Daten extern nutzen

Intranet

Firmen-Homepage

Zentrale Verwaltun

g aller News

(intern und

extern)

Externe

News

Externe News

Web Service

Page 7: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Aber ...

... wie ist das mit SharePoint realisierbar?

Page 8: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Page 9: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Page 10: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Systemumgebung „Eine Maschine“

Direkt auf Windows Server 2003 arbeiten http://www.msfn.org/win2k3/

„Zwei (oder mehrere) Maschinen“ Entwicklung auf Windows XP Deployment auf Windows Server 2003

Virtual PC oder externes System

Page 11: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Entwicklungsumgebung Visual Studio .NET

SharePoint DLLs kopieren (bei „Mehr-Maschinen-Modell“) C:\Program Files\Common Files\Microsoft Shared

\web server extensions\60\ISAPI Microsoft.SharePoint.DLL Microsoft.SharePoint.Portal.DLL Microsoft.SharePoint.Portal.SingleSignon.DLL Microsoft.SharePoint.Portal.SingleSignon.Security.DLL

Web Part Projektvorlage für Visual Studio .NET http://msdn.microsoft.com/sharepoint

Page 12: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Page 13: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

SharePoint Architektur

Objektmodell Web Services

SharePoint 2001 (Unmanaged) Code.NET Framework

ObjektmodellWeb Services Web PartWebDAV FP RPC

Sites Webs

...Docs Lists

WebPart

Areas SSO ...

Page 14: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Page 15: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Was sind Web Parts? Aus der Sicht des Anwenders

Bausteine für modulare Webseiten Einbindung in Webseite zur Laufzeit möglich

Aus der Sicht des Entwicklers ASP.NET Server Controls, als Assembly deployed Haben vollen Zugriff auf die .NET Base Class

Library Unterstützung durch Visual Studio .NET Projekt

Template

Page 16: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Das „Hello World!“ Web Part

namespace MyWebParts {

using Microsoft.SharePoint; using Microsoft.SharePoint.WebPartPages;

public class HelloWorld : WebPart { protected override void RenderWebPart (HtmlTextWriter output){ output.Write(“Hello World!”); } }}

... wie ASP.NET Server Control Entwicklung!

Page 17: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Windows Server

Web Part Deployment – Option 1

Web PartAssembly (DLL)

IIS Virtual Server

\bin\ - Ordner

Web.config„Safe Control“

IIS Virtual Server

\bin\ - Ordner

Web.config„Safe Control“

• Assembly für jeden Virtual Server einzeln installieren

• Assembly muß als „Safe“ in der Web.config registriert sein

Page 18: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Windows Server

Web Part Deployment – Option 2

Global AssemblyCache (GAC)

Web PartAssembly (DLL)

IIS Virtual Server

IIS Virtual Server

IIS Virtual Server

• Assembly global für alle Virtual Server installieren

• Assembly im GAC ist immer „Safe“ (strong name)

Page 19: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Noch mehr Optionen ... Manuelle Installation

Dateien kopieren Web.config anpassen

CAB Datei erstellen Dateien in CAB kopieren STSADM.EXE aufrufen

MSI Paket erstellen WPPackager.EXE Tool verwenden!

http://msdn.microsoft.com/SharePoint

Page 20: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

demo

Kalender Web Part

Page 21: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Weitere Features ...

Web Part Connections Event-gesteuerter Datenaustausch Nur Implementierung der

Consumer/Provider Interfaces und Methoden nötig

IList, IRow, ICell, IFilter, IParams, Transformers

Page 22: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Zukunft der Web Parts

Visual Studio .NET 2005 („Whidbey“) „Whidbey“ Web Parts ≠ SharePoint Web

Parts ASP.NET Team wird einen Wrapper

bereitstellen, mit dem Whidbey Web Parts in SharePoint laufen

Nächste SharePoint Version wird auf Basis von Whidbey Web Parts arbeiten!

Page 23: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Tipps, Tricks & Best Practices Fehlerbehandlung durchführen (try-

catch), ansonsten Umleitung auf Fehlerseite durch SharePoint

Immer HTMLEncode verwenden Öffentliche Eigenschaften über

Attribute gut kommentieren SharePoint Caching-Mechanismen

verwenden

Page 24: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Web Parts gut&schlecht Gut

Building Blocks der Zukunft für modulare Webseiten

Integration vorhandener ASP.NET Steuerelemente

Schlecht Kein Designer verfügbar Debugging derzeit umständlich„Whidbey“Wrapper „

SmartPart“

http://g

otdotnet.com

Page 25: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Page 26: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Was ist das Objektmodell? Schnittstelle zu ...

Windows SharePoint Services (WSS) SharePoint Portal Server (SPS)

.NET Assemblies (managed DLLs)

Objektmodell „erwartet“ SharePoint auf dem selben Rechner, kein Fernzugriff!

Page 27: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Objektmodell ist nur innerhalb des SharePoint Servers verwendbar

Objektmodelle

Windows-

Anwendung

Web-Anwendung

Web Part

Page 28: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Windows SharePoint Services KlassenBeispiele List Data

SPListCollection SPList

SPListItemCollection SPListItem SPFieldCollection

SPView

Administration SPGlobalAdmin SPQuota SPVirtualServer

Security SPGroupCollection

SPGroup SPUserCollection

SPUser

Documents SPDocumentLibrary

SPFileCollection

Insgesamt 18 Namensräume, davon stehen 9 für eigene Anwendungen zur Verfügung, Namensraum Microsoft.SharePoint.*

Page 29: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

SharePoint Portal Server Klassen Insgesamt über 50 Namensräume, davon

16 heute in Verwendung

Namensraum Microsoft.SharePoint.Portal.*

Erweitert das WSS-Objektmodell um Audiences Areas Search Single Sign-on

Page 30: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Top-Level Objekte WSS-Objektmodell hat 4 Top-Level

Objekte: SPWeb ( “Eine Site”) SPSite (“Eine SiteCollection”) SPVirtualServer SPGlobalAdmin

Für sämtliche Datenoperationen (Listen, Dokumentenbibliotheken …) wird ein SPWeb benötigt!

Page 31: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

SPWeb bietet Zugriff auf sämtliche Objekte einer Site Ermöglicht Zugriff auf Listen, Dokumente, Benutzer,

Benachrichtigungen einer Site

Eigenschaften (Beispiel): Web.Lists (liefert eine Collection aller Listen) Web.Title (liefert den Titel der Seite) Web.Users (liefert die Benutzer der Seite)

Zugriff auf das aktuelle SPWeb Objekt geschieht mit SPControl über den Kontext:SPWeb web = SPControl.GetContextWeb(Context);

Page 32: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Beispiel: Zugriff auf Listen1. Liste über das Web-Objekt beziehen

SPWeb web = SPControl.GetContextWeb(Context); SPList myList = web.Lists[“Aufgaben”];

2. Verweis auf die Einträge der Liste über die Items-EigenschaftSPListItemCollection items = myList.Items;

alternativ kann die Liste über ein SPQuery Objekt eingeschränkt werden

SPListItemCollection items = myList.GetItems(query);

3. Zugriff auf die Felder geschieht über den Indexer des SPListItem Objektsforeach(SPListItem item in items) {

Response.Write(item[“Title"].ToString());

}

Page 33: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

demo

Zugriff auf Listen mit Objektmodell

Page 34: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Weitere Features ... Event Sinks

Implementierung eigener Events möglich, bspw. bei check-in/-out von Dokumenten

Event-Listener implementieren Deployment direkt in GAC Aktivierung unter SharePoint Oberfläche

Ermöglicht Workflowunterstützung

Page 35: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Tipps, Tricks & Best Practices SPGlobalAdmin und SPSite sind die

einzigen Klassen, die direkt mit „new“ instantiiert werden können

foreach() ist schneller als Durchlauf per Index

Ergebnis kostspieliger Aufrufe wie GetListItems() zwischenspeichern

Überwachung der Aufrufe mit SQL Profiler möglich

Page 36: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Objektmodell gut&schlecht Gut

Sehr komfortabel in der Verwendung Sehr mächtig, nahezu alle Funktionen

sind erreichbar

Schlecht Nur auf dem SharePoint Server

verfügbar, nicht von extern„by design“

Page 37: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Page 38: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Was sind die Web Services? Eine weitere Schnittstelle zu ...

Windows SharePoint Services (WSS) SharePoint Portal Server (SPS)Verwendet selbst die Objektmodell-Schnittstellen!

Erreichbar unter http:// Server:Port / _vti_adm / ServiceName.asmx http:// Server:Port / _vti_bin / ServiceName.asmx http:// Server:Port / Sites / Site /_vti_bin /

ServiceName.asmx

Direkt in Visual Studio .NET verwendbar

Ermöglicht den „Fernzugriff“ auf SharePoint

Page 39: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

WebServices ermöglichen den Zugriff von „extern“

Web Services

Fat-Client

Anwendung

Web-Anwendung

(Web Part)

Zugriff per SOAP

Page 40: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

16 WSS Web Services (1-8)Name URL

Administration Service /_vti_adm/Admin.asmx

Alerts Web Service /[sites/][site/]_vti_bin/Alerts.asmx

Document Workspace Web Service

/_vti_bin/Dws.asmx

Forms Web Service /[sites/][site/]_vti_bin/Forms.asmx

Imaging Web Services /[sites/][site/]_vti_bin/Imaging.asmx

List Data Retrieval Service /[sites/][site/]_vti_bin/DspSts.asmx

Lists Web Service /[sites/][site/]_vti_bin/Lists.asmx

Meeting Web Service /[sites/][site/]_vti_bin/Meetings.asmx

Page 41: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

16 WSS Web Services (9-16)Name URL

Permissions Web Service /[sites/][site/]_vti_bin/Permissions.asmx

Site Data Web Service /[sites/][site/]_vti_bin/SiteData.asmx Sites Web Service /[sites/][site/]_vti_bin/Sites.asmx

User & Groups Web Service

/[sites/][site/]_vti_bin/UserGroup.asmx

Versions Web Service /[sites/][site/]_vti_bin/Versions.asmx

Views Web Service /[sites/][site/]_vti_bin/Views.asmx

Web Part Pages Web Service

/[sites/][site/]/_vti_bin/WebPartPages.asmx

Webs Web Service /[sites/][site/]_vti_bin/Webs.asmx

Page 42: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

3 SPS Web ServicesName URL

Area Web Service /_vti_bin/areaservice.asmx Query Web Service /_vti_bin/search.asmx User Profile Web Service /_vti_bin/UserProfileService.asmx

Page 43: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Beispiel: Zugriff auf Listen1. Web Reference hinzufügen

2. Authentifizierung durchführenservice.Credentials = CredentialCache.DefaultCredentials;

3. Liste abholenXmlNode n = service.GetListItems("Aufgaben", "", null, null, "", null);

4. Xml-Knoten durchlaufenforeach(XmlNode node in nodeList) output.Write(node.InnerText);

Page 44: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

demo

SharePoint Web ServicesZugriff auf Listen

Page 45: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Tipps, Tricks & Best Practices Roundtrips vermeiden, Xml-

Ergebnisse zwischenspeichern Helper schreiben für Xml-Handling,

XmlNode in XmlDocument überführen

Pfade zu Webservices (.asmx) dynamisch halten, Generierung der WS Proxys manuell mit wsdl.exe

Page 46: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Web Services gut&schlecht Gut

Zugriff von jedem beliebigen System aus möglich (auch nicht-Windows)

Schlecht Rückgabewerte erfolgen als XmlNode Nicht alle Funktionalitäten von

SharePoint erreichbar (bspw. Dokumententransfer)

„by design“

Page 47: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Wenn Web Services nicht ausreichen ... WebDAV und Frontpage RPC

Verwenden HTTP Aufrufe Weitere Infos unter MSDN

Direktzugriff auf die SharePoint Datenbank „keine gute Idee“

Implementierung eigener Web Services SharePoint kann „fremde“ Web Services

hosten, müssen aber zuvor angemeldet werden Vom eigenen Web Service ist Zugriff auf

Objektmodell möglich, „Tunneln des OM“

Page 48: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Page 49: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Zusammenfassung

Web Parts sind kombinierbare „Bausteine“

Der Zugriff auf SharePoint erfolgt über Objektmodell und/oder Web Services

SPS ≠ WSS

Page 50: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Mehr Informationen Entwicklerseiten

http://msdn.microsoft.com/sharepoint http://gotdotnet.com/team/sharepoint http://code-zone.de

Produkt http://microsoft.de/sharepoint

Third-Party Seiten http://mysharepoint.de (Michael Greth) http://sharepointinfo.de (Markus Weisbrod)

http://weblogs.mysharepoint.de/frankfi/ (Frank Fischer) http://sebastian-weber.org

Page 51: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Fragen und Antworten

Vielen Dank!

Sebastian WeberSoftware EngineerPlatinion GmbH – The Boston Consulting [email protected]

Page 52: SharePoint Development Sebastian Weber. SharePoint Development Sebastian Weber Software Engineer Platinion GmbH – The Boston Consulting Group Weber.Sebastian@platinion.de.

Ihr Potenzial. Unser Antrieb.