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

Post on 05-Apr-2015

107 views 1 download

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

SharePoint Development Sebastian Weber

SharePoint Development

Sebastian WeberSoftware EngineerPlatinion GmbH – The Boston Consulting GroupWeber.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)

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!

„Altes“ HRMS(J2EE)

Beispiel 1: Intranet aufbauen

HRMS Timesheet

HRMS Staffing

Beispiel 2: Daten extern nutzen

Intranet

Firmen-Homepage

Zentrale Verwaltun

g aller News

(intern und

extern)

Externe

News

Externe News

Web Service

Aber ...

... wie ist das mit SharePoint realisierbar?

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

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

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

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

SharePoint Architektur

Objektmodell Web Services

SharePoint 2001 (Unmanaged) Code.NET Framework

ObjektmodellWeb Services Web PartWebDAV FP RPC

Sites Webs

...Docs Lists

WebPart

Areas SSO ...

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

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

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!

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

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)

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

demo

Kalender Web Part

Weitere Features ...

Web Part Connections Event-gesteuerter Datenaustausch Nur Implementierung der

Consumer/Provider Interfaces und Methoden nötig

IList, IRow, ICell, IFilter, IParams, Transformers

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!

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

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

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

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!

Objektmodell ist nur innerhalb des SharePoint Servers verwendbar

Objektmodelle

Windows-

Anwendung

Web-Anwendung

Web Part

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.*

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

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!

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);

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());

}

demo

Zugriff auf Listen mit Objektmodell

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

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

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“

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

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

WebServices ermöglichen den Zugriff von „extern“

Web Services

Fat-Client

Anwendung

Web-Anwendung

(Web Part)

Zugriff per SOAP

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

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

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

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);

demo

SharePoint Web ServicesZugriff auf Listen

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

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“

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“

Agenda

EntwicklungsumgebungSharePoint ArchitekturWeb Part EntwicklungSharePoint ObjektmodellSharePoint Web ServicesZusammenfassung

Zusammenfassung

Web Parts sind kombinierbare „Bausteine“

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

SPS ≠ WSS

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

Fragen und Antworten

Vielen Dank!

Sebastian WeberSoftware EngineerPlatinion GmbH – The Boston Consulting GroupWeber.Sebastian@platinion.de

Ihr Potenzial. Unser Antrieb.