SharePoint Development Sebastian Weber
SharePoint Development
Sebastian WeberSoftware EngineerPlatinion GmbH – The Boston Consulting [email protected]
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 [email protected]
Ihr Potenzial. Unser Antrieb.