Von
Mario Meir-Huber
5. August 2010 20:44
RESTful APIs gewinnen in der IT als Architekturstil ständig an Bedeutung. Betrachtet man Windows Azure oder SharePoint 2010, so fällt sofort auf, wie wichtig REST in der Cloud ist. In diesem Usergroup Meeting wollen wir uns gänzlich dem „REST way of .NET“ widmen. Hierfür wird zu beginn definiert, was RESTful APIs ausmacht. Hierbei werden die Grundlagen für einen REST-basierenden Architekturstil beschrieben. Anschließend werden einige low-level REST-Queries mit .NET durchgeführt. Hierbei steht das Verständnis von REST im Vordergrund. Am Ende werden die WCF Data Services und OData durch besprochen. Wie jedes Open Space Pirates treffen ist auch hier sehr viel Flexibilität im Treffen, das heißt das sich jeder einbringen kann und auch soll. INFO: Dieses Treffen findet erstmalig bei Microsoft Österreich statt! Zeit: 17. August 2010, 18h Ort: Microsoft Österreich GmbH Am Europlatz 3 1120 Wien Anmeldung: http://dotnetopenspace.ning.com/ Organisator: Mario Meir-Huber Mario Meir-Huber Web: www.codeforce.at Twitter: www.twitter.com/mario_mh
Von
Rolf Mistelbacher
3. August 2010 07:39
nitty gritty [das Wesentliche] Besuchen Sie uns auf der Developer Roadshow und holen Sie sich umfangreiches Know-How zur Software-Entwicklung für Cloud, Web und Mobile! Sie erhalten das Basis-Know-How in folgenden Bereichen: Entwicklung von Web-Anwendungen mit Microsoft Technologie: Programmieren mit ASP.NET, Verwendung des Web App Installer und Web App Gallery. Erste Schritte mit der Cloud Computing Plattform von Microosft, Windows Azure. Entwicklung von Rich-Internet-Applications mit Silverlight 4.0. Wie wird Silverlight programmiert und mit welchen Tools arbeitet der Designer? Windows Phone 7: Basis Einführung in die Entwicklung von Windows Phone 7 Apps mit Silverlight und XNA. Wie funktioniert der Marktplatz und wie werden Apps deployed & getestet. Zielgruppe: Anfänger + Fortgeschrittene Programmierer, Entwickler die Ihr Wissen auffrischen wollen. Montag, 20.9.2010, Innsbruck Jetzt Anmelden! Mittwoch, 22.9.2010, Linz Jetzt Anmelden! Dienstag, 28.9.2010, Graz Jetzt Anmelden! Für Interessierte in Wien und Umgebung: Wir werden im Herbst einige Events für Sie anbieten – einfach Codefest RSS Feed abonnierenoder unsere Aktivitäten auf Facebook verfolgen! Agenda: 09:00 - 10:10 Die Microsoft Web-Plattform (IIS, Web App Installer & Gallery) – alles On-Premise 10:10 - 10:25 Pause 10:25 - 11:35 Einführung in Cloud Computing mit Windows Azure 11:35 - 11:50 Pause 11:50 - 13:00 Rich-Internet Applications mit Silverlight 4.0 13:00 - 13:45 Lunch + Networking 13:45 - 14:55 Einführung in Windows Phone 7 Entwicklung 14:55 - 15:10 Pause 15:10 - 16:20 Windows Phone 7 Applikationen mit Silverlight entwickeln Der Vortragende: Max Knor Max ist seit 2006 Developer Evangelist bei Microsoft Österreich und beschäftigt sich mit dem gesamten Microsoft Developer Technology Stack. Ist Ihr Unternehmen auch Microsoft Partner? Zeitgleich zur Developer Roadshow findet die Microsoft Partner Roadshow rund um die Themen Windows Phone 7 | "Aurora Server" | Windows Intune | onlineCRM | "SBS 7” statt. Weitere Informationen finden Sie auf der Microsoft Partner Network Website. Haben Sie Fragen rund um die Developer Roadshow vorab? Senden Sie uns über das Kontaktformular oder die Kommentare hier im Blog Post Ihre Anregungen. Wir freuen uns auf Ihren Besuch! Developer & Platform Group Austria
Von
Rolf Mistelbacher
28. July 2010 22:17
Ich bin gerade 2 Wochen in Redmond zu Gast und arbeite im Marketing Team der DPE an kommenden Kampagnen im Herbst mit. Dabei stolpere ich über so manche Ressource die mir bis jetzt unbekannt war, oder auf Codefest bisher nicht erwähnt wurde. Wer die Ideastorm Initiaitive von Dell kennt – das Prinzip gibts auch bei Microsoft, und zwar für Windows Azure: Das Product Team nimmt unter http://windowsazure.uservoice.com Feature Requests für die Weiterentwicklung von Azure entgegen. Wer heute schon mit Azure arbeitet kann hier mitwirken und diskutieren, oder einfach nur mitlesen was die Community wünscht. Außerdem: Für alle die eine MSDN Subscription besitzen gibt es good news: Das 8 Monats Azure Intro Offer wurde auf 16 Monate erweitert! Nicht fehlen darf eine eigene Fanpage rund um Azure in Facebook – Wer Facebook längst als Startseite für seine tägliche News-Dosis verwendet kann so einfach up2date bleiben. Das wird ergänzt durch: Ein eigener YouTube und Twitter Channel. Lieber RSS? - das Azure Team Blog auf MSDN. Have fun in the Cloud :)
Von
Kurt Ulrich
27. July 2010 22:29
Bevor ich weitere Seiten mit Vereinsverwaltungsinhalt bastle, wollte ich zuerst noch eine Userverwaltung mit Anmeldung integrieren. Wenn man ein neues Projekt mit der Vorlage “ASP.NET Webanwendung” beginnt, kommt ein Template mit einer integrierten Userverwaltung. Davon habe ich mir relevante Teile in mein Projekt rüberkopiert und – einen hartnäckigen Laufzeitfehler erhalten. ("Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.") Im Web habe ich die Fehlermeldung auch oft angetroffen, aber leider bezogen sich alle gefundenen Hilfestellungen auf alte Versionen und die angeführten Lösungen haben bei mir nichts gebracht. Die Ursache des Problems habe ich dann doch noch selbst gefunden (War ja auch selber schuld): Ich habe meinen Computer gewechselt und alle Tabellen inklusive der Userverwaltungs-Tabellen mit meinem SQL-Skript, das ich auch letzte Woche gepostet habe, neu erzeugt. Offensichtlich macht aspnet_regsql aber noch anderes, als nur diese Tabellen erzeugen. Die Lösung: Mit aspnet_regsql die Userverwaltung entfernt und dann wieder neu installiert. Und – welch ein Wunder – das Problem war gelöst. Vielleicht geht’s auch ohne Deinstallation; das habe ich aber nicht mehr probieren wollen. Heute hatte ich die nächste Herausforderung mit der Userverwaltung. Ich wollte die beiden Seiten zur Gruppen- und Personenverwaltung, die bisher ja schon ganz gut funktionierten, so umgestalten, dass in der DropDownList nur mehr jene Vereine aufscheinen, für die der eingeloggte User verantwortlich ist. Die SQL-Abfrage dazu mit WHERE Klausel war schnell erstellt. Nur – woher nehme ich die Daten des angemeldeten User? Ich habe nach langem Suchen dann auf http://www.velocityreviews.com/forums/t237583-asp-net-2-0-membership-current-user.html den entscheidenden Hinweis gefunden, (MembershipUser u = Membership.GetUser(HttpContext.Current.User.Identity.Name) u hat dann eine public property UserName, die sich dann mit der Tabelle aspnet_Users vergleichen lässt. Als nächstes versuche ich, mir ein User Control zu bauen, mit dem neue Vereinsmitglieder erfasst werden können und die Zugangsdaten dann gleich per E-Mail zu versenden.
Von
Kurt Ulrich
23. July 2010 19:06
Nachdem nun die Datenbank steht und mit einigen Testdaten gefüllt ist, habe ich nun mit dem Seitenaufbau begonnen.
Um mich noch nicht mit den Berechtigungen rumzuschlagen habe ich mal vorab eine DropDownList mit Vereinen in das Formular gezogen, dann einen ListView dazu verbunden um alle Gruppen/Sektionen zu dem gewählten Verein anzuzeigen.
Folgende kleine Probleme bzw. Missverständnisse sind dabei aufgetreten:
Zuerst mal habe ich einige male rumprobiert, bis ich bemerkt habe, dass ich zwar den gleichen ConnectionString benutzen kann, aber eine neue SQLDataSource erstellen muss, um im Listview auf eine andere Tabelle zuzugreifen als bei der DropDownList.
Wenn man den Markup-Code ansieht, merkt man ja dann auch gleich, dass in der SQLDataSource die SQL-Select-Abfrage steht.
Der Listview erschien mir am flexibelsten, damit kann ich mit einem Klick von Detailansicht auf Listensicht wechseln. Und außerdem erstellt der Listview einen leicht lesbaren Markup-Code, der auch manuell editierbar ist. Beim Gridview ist alles gut im Control versteckt; da hat man weniger Einflussmöglichkeiten.
Bei Verbinden der DropDownList mit dem Listview musste ich beim ControlParameter der WHERE-Klausel (wo die VereinID ist) den Datentyp ändern. und zwar vom eingestellten Type=”Object” auf DbType=”Guid”. Dann hat die Verbindung problemlos geklappt. Beim Einfügen von neuen Datensätzen musste ich manuell den asp:Parameter Name=VereinID auf asp:ControlParameter … DbType=”Guid” ersetzen. Beim Update-Kommando kann man die den ControlParameter VereinID ganz weglassen, da diese ja nicht geändert wird.
Um das Design mache ich mir später noch Gedanken. Als nächstes möchte ich eine Userverwaltung mit Berechtigungen integrieren. Da gibt es ja schon nette Controls dazu; wir werden sehen, welche Schwierigkeiten dabei auftauchen werden.
Nachfolgend noch ein paar Screenshots von den bisherigen Seiten (auch wenn das “Design” noch stark verbesserungswürdig ist).
Von
Kurt Ulrich
19. July 2010 22:28
Am Wochenende habe ich mir von www.microsoft.com/web den Web Plattform Installer heruntergeladen und die empfohlenen Teile installiert. Dann wollte ich mit der dahinterliegenden Datenbank mal beginnen, dann davon hatte ich schon eine gute Vorstellung. Dazu musste ich mir erst noch mal die SQL Server Management Tools nachinstallieren (auch mit dem Web Plattform Installer), da diese nicht serienmäßig installiert waren. Die Datenbankstruktur habe ich nach einigem Herumprobieren ist wie folgt mal festgelegt:
Dazu einige Beispieldaten eingetragen, damit man dann mit der Anwendung auch darauf zugreifen kann bzw. testen kann (Neue Daten einfügen folgt dann später). Mit den Daten zur Userverwaltung und den Berechtigungen werde ich mich später auseinandersetzen.
Hier auch noch ein SQL-Script (14,65 kb), mit dem die Datenbank erzeugt werden kann. Das Verzeichnis für die Dateien ist möglicherweise noch anzupassen.
Der Code der Vorlagen beim Erzeugen einer neuen Web Anwendung scheint mir etwas weniger kompliziert zu sein als bei einer Web Anwendung MVC. Daher tendiere ich eher zu einer “normalen” Web Anwendung (Im Internet auch oft “Web Forms Anwendung” genannt) Zu “asp.net web forms” gibt es auf www.bing.com auch rund 100 x soviel Einträge wie zu “asp.net mvc”. Daher werde ich mich für Web Forms entscheiden.
Morgen will ich mit der eigentlichen Website anfangen und dann auch gleich wieder posten.
Von
Andreas Pollak
13. July 2010 12:19
Vor kurzem wurde die SharePoint 2010 Development Guidance vom Microsoft patterns & practices Team publiziert. Die SharePoint 2010 Development Guidance bietet technische Insights in den SharePoint Server 2010, und best practices für SharePoint-EntwicklerInnen und –ArchitektInnen. Interessierte haben auf der SharePoint 2010 Guidance Codeplex Seite die Möglichkeit Feedback zu geben und Änderungsinput zu liefern. Andreas Pollak Product Marketing Manager Developer & Designer Tools
Von
Andreas Aschauer
12. July 2010 17:18
Zum einfachen und schnellen Erstellen und Anpassen von Webanwendungen, welche Standardfunktionalitäten wie Blogs, Gallerien oder Wikis anbieten, kann mit WebMatrix eine neue Site aus der Web Gallery erzeugt werden. Im folgenden Beispiel erzeugen wir eine neue Site aus der Web Gallery. Wir wollen einen Blog, basierend auf BlogEngine.NET hosten. Dazu einfach “Site from Gallery” wählen und unter “Blogs” –> “BlogEngine.net” BlogEngine.net ist eine umfangreiche Open Source Blog Platform, welche komplett in ASP.NET implementiert ist und auf die grossartigen Features des .NET Frameworks zurückgreift um eine leicht erweiterbare und einfach wartbare Blog Lösung zur Verfügung zu stellen. Eine fertige installation von blogengine.net kann sehr einfach mit vielen Plugins erweitert und angepasst werden. Bekannte Blogs wie codefest.at, windowsblog.at, sharepointblog.at und viele weitere mehr, verwenden blogengine.net um die Community mit Informationen zu versorgen und Diskusssionen zu ermöglichen. In den Links am Ende des Artikels findet sich die offizielle Homepage. Ein Klick genügt um den Download, Installation und Konfiguration zu starten. Ca. 30 Sekunden später hat man einen fertigen Blog! Von dieser Site Übersicht aus, kann man weiterarbeiten und alles anpassen, erweitern und verändern. Links unten befinden sich die passenden Tabs. Ein Klick auf “Files” führt zu den einzelnen ASPX WebForms unserer Anwendung, die mit dem integrierten Code Editor sofort angepasst werden können. Im Bild unten zb. das Standard Kontaktformular von BlogEngine.net. Unter dem Tab “Databases” verbirgt sich eine komplette DB Verwaltung für SQL Server und SQL Server Compact. Hier können Datenbanken erstellt, geändert und gewartet werden. Besonders nett: Unter “Reports” kann auf Knopfdruck sofort ein SEO – Search Engine Optimization Report generiert werden, der Auskunft über die Such- und Findbarkeit der Site gibt. Hier wird pro Seite detailliert aufgelistet, was die Findbarkeit negativ beeinflusst. Vom Start dieses Artikels, bis zu dieser Zeile, sind ca. 10 Klicks “vergangen” und wir haben ein laufende Webanwendung mit kompletter BlogEngine.net. Das heisst eine ASP Anwendung, eine Datenbank und einen WebServer der das Ganze hosted – nicht schlecht! Im nächsten Teil beschäftigen wir uns mit den Site Templates, die es uns ermöglichen eigene Sites basierend auf Vorlagen zu erstellen, im Gegensatz zur obigen Vorgehensweise bei dir wir eine fertige Webanwendung herunterladen und anpassen. Links: blogengine.net blogengine.net Extensions
Von
Andreas Aschauer
8. July 2010 16:57
Auspacken und Loslegen – das ist die Devise von Microsoft WebMatrix (Beta). WebMatrix ist eine komplette gratis Suite zur einfachen Entwicklungs von Webanwendungen auf Basis von ASP.NET 4.0. Im Paket ist alles enthalten, was man für eine solche Aufgabe braucht. Ein Code Editor, ein Datenbank Verwaltungstool, Web Server Management und Publishing Tools. Und das Beste ist: Die Datenbank und ein, auf IIS 7.5 basierter Webserver sind auch gleich integriert. Eine All-In-One Umgebung also! WebMatrix ist für alle gedacht, die schnell und vor allem kostenfrei in die Webentwicklung einsteigen möchten. Daher integriert sich WebMatrix auch nahtlos mit dem neuen Web Platform Installer 3.0, der es ermöglicht, komplette fertige Anwendungen mit einem Klick zu installieren und konfigurieren – von gratis CMS bis hin zu Blog Engines. Dann das Ganze mit WebMatrix an die eigenen Bedürfnisse anpassen – und fertig! In der folgenden Blog Reihe sehen wir uns an, wie man mit WebMatrix arbeitet. Angefangen bei fertigen Anwendungen bis hin zu eigenen Web Entwicklungen. Generelles zu WebMatrix WebMatrix wird über den Microsoft Web Platform Installer 3.0 installiert. Navigiert man zu WebMatrix Website wird der WPI gleich zum Download und Installieren angeboten. Nach der Installation wird man vom Startbildschirm begrüsst. Um zu demonstrieren wie einfach das Erstellen und hosten einer Seite ist, klicken wir auf My Sites –> Dort gibt es schon eine Site namens “WebSite1”. Diese wird geöffnet und ein klick auf die URL (default: localhost:8080) startet die Webanwendung. Mit 3 Klicks öffnen wir eine Anwendung und starten und hosten sie lokal ohne irgendetwas einrichten zu müssen. Soweit die Quick Intro zum neuen WebMatrix. In den folgenden Teilen beschäftigen wir uns mit dem anpassen bestehender fertiger Webanwendungen an unsere Bedürfnisse und dem Entwickeln eigener Lösungen.
Von
Mario Szpuszta
8. July 2010 15:01
It was a great pleasure for us and for me in specific hosting the 1st conference for software architects in the history of Microsoft Austria. Finally I managed getting all the material we are allowed to share from our speakers. A good time for a reflect a little bit on the conference.
First of all the most important part: you can download all the presentations from the conference from the following Windows Live Skydrive folder:
Click me to get to the folder
As announced during the conference we were not allowed publishing all presentations. You definitely will find all presentations we were allowed to share at this place.
The whole conference was really a great experience for us and for me. Therefore I want to especially say thank you to all participants of the conference – you made it a special event for us all and with that the you made this day and evening to a great memory.
Some facts on the great day:
140 architects attended the event – sold out.
Average session rating – 2,16 on a 1-9 scale (1=best)
The top 3 sessions where:
Architecture in Agile Projects – Mitch Lacey
Cloud Computing – A Crash Course for Architects – Beat Schwegler
Scalable, Evolveable, Understandable Event-based Components – Ralf Westphal
A wine tasting until 23.00 with exciting wines from Johannes Fiala and superb discussions across the evening.
As announced at the conference, it was the closing of a step and opening of a new step in my life. After a long and enjoying path with my career within the Developer and Platform Evangelism Group and my responsibility as an architect evangelist has ended with that conference. My next step has started a month ago as a senior architect within Microsoft enterprise services working for a really large, international customer.
Thank you for a great time! Thank you for shaping the architect community together with me! Looking forward to meet you at one of the next architect forums either as participant or as invited speaker, maybe;)
Cheers Mario
Client-Development | Cloud-Computing | General | Interoperability | Server Development | Web-Development
Tags:
.net
, alm
, architektur
, cloud computing
, azure
, sql azure
, patterns
, bericht
, event
, nachlese
, news
, newsletter 
Von
Rolf Mistelbacher
7. July 2010 13:16
Die Microsoft Web Platform besteht aus der Web Application Gallery, Web Platform Installer und seit kurzem auch WebMatrix! WebMatrix wurde entworfen um Entwicklern eine noch einfachere Möglichkeit zu geben Websites und Web-Applikationen auf Windows zu entwickeln. WebMatrix inkludiert folgendes: Programmier Framework: Vereinfachte Syntax ist einer der Hauptunterschiede – das erstellen von ASP.NET Web Applikationen wird noch einfacher. Bspw. das anbinden einer Datenbank, einen Twitter Feed anzeigen oder ein Video einbinden. Web Apps: Es kann aus einer vielzahl frei erhältlicher Apps gewählt werden, von welcher Weg entwickelt wird, bspw. Wordpress oder Drupal, Kentico CMS oder Screwturn Wiki. Web Server: IIS Developer Express ermöglicht Entwicklern das erstellen von ASP.NET Web Applikationen – jetzt mit WebMatrix, und natürlich weiterhin mit Visual Web Developer 2010 Express und Visual Studio 2010. Datenbank: SQL Server Compact Edition 4 ermöglicht ist ein einfach zu verwendender Data Storage aus ASP.NET heraus. Wir werden WebMatrix in Kürze in einer mehrteiligen Weblog Post Serie vorstellen! Der WebMatrix Beta Download ist 15 MB groß – wenn .NET 4 noch nicht installiert ist ca. 50MB! Bei Scott Guthrie gibt es eine ausführliche Vorstellung inklusive einer Vielzahl an Screenshots! Beispielscreenshot zur Syntax aus diesem What is WebMatrix Video:
Von
Max Knor
30. June 2010 11:57
Die Aufzeichnungen vom MSDN Briefing letzten Freitag sind auf Channel9 online. Teil 1: Visual Studio 2010 & .NET FX 4.0 Slides & Code Teil 2: WCF 4.0, ADO.NET Entity Framework, Managed Extensibility FX Slides & Code Teil 3: WPF 4, ASP.NET 4, ASP.NET MVC 2 Slides & Code
Von
Andreas Aschauer
27. June 2010 18:43
In Visual Studio 2010 ist Out-of-the-Box schon eine umfassende Sharepoint Unterstützung integriert. Vom Sharepoint Explorer bis zu den Sharepoint Projekt und Item Templates und natürlich dem eingebauten Support zur Erstellung von WSP Paketen, wird dem Entwickler viel Arbeit und Suche nach exterenen Tools abgenommen. Über das neue Managed Extensibility Framework von Visual Studio 2010, können eigene Erweiterungen, Frameworks und Tool Chains einfach in die IDE integriert werden. Ein Projekt welches zum einen MEF nutzt und zum anderen die Sharepoint Entwicklungs Integration noch weiter treibt ist das Community Kit for Sharepoint – kurz CKSDev. CKSDev bringt eine Fülle neuer, sinvoller Features für die Sharepoint Entwicklung mit und integriert sich komplett transparent, in die bestehenden Sharepoint Tools. So wird zum Beispiel der Sharepoint Explorer ordentlich “aufgebohrt” und auch fehlende Item Templates, wie “Custom Action” gehören zum Umfang. Besonders praktisch ist “Get SPMetal Definition”. Dieses Feature fügt Listen und Seiten einen Menüpunkt hinzu, der es erlaubt mit einem Klick eine SPMetal Definition für LINQ2Sharepoint Projekte zu erstellen. Alle Details und den Download findet man auf CodePlex.
Von
Andreas Pollak
22. June 2010 09:40
Hier noch ein paar ergänzende SharePoint 2010 Trainings Links: Sharepoint 2010 Developer Training Kit SharePoint 2010 Advanced Training Videos Developer Roadmap and Tools Core Development User Interfaces and Lists Data Access in Technologies Composite Solutions Enterprise Content Management Enterprise Search Business Intelligence Communities Development Life Cycle Channel 9 - Videos zu Sharepoint 2010 (siehe auch Sharepoint 2010: Teil 1 – Überblick über Sharepoint Produkte und Technologien) Andreas Pollak Product Marketing Manager Developer & Designer Tools
Von
Andreas Aschauer
17. June 2010 15:45
Es ist an der Zeit in unsere Artikelserie endlich “richtig” mit Sharepoint 2010 zu arbeiten, für einen Softwareentwickler kann das nur eins bedeuten –> Code – in Form der Sharepoint API. Anhand der Umsetzung eines kleinen (Echt-Welt) Beispiels, sehen wir uns die Visual Studio 2010 Umgebung für Sharepoint an, die Feature/Solution Infrastruktur von Sharepoint sowie die API selbst. Die Anforderung sieht folgendermassen aus: Eine Sharepoint Liste wird via Import aus einem externen System mit E-Mail Adressen befüllt. Wird nun ein Element in der Liste verändert soll an die entsprechende E-Mail Adresse eine Nachricht versandt werden. Findige Leser werden einwerfen- “Dass geht Out-of-the-Box” – stimmt! ABER: Diese Anforderung stammt aus einem echten Projekt und wie immer liegt der Teufel im Detail. Nur so viel sei gesagt, in diesem konkreten Fall gehts nicht mit Bordmittel – daher ergibt sich daraus ein nettes kleines Programmierbeispiel für Blogs etc. :-) Umgesetzt wird die Anforderung mit der Sharepoint Objektmodell mit einem “Event Receiver”. Sharepoint bietet eine grosse Anzahl an “Event Receiver” an. Kurz gesagt ermöglichen sie, das “Reagieren” auf bestimmte Ereignisse in der Sharepoint Infrastruktur. Umgesetzt wird ein EventReceiver ganz einfach als Assembly, welche in den GAC wandert. Los gehts – Wir legen in Visual Studio 2010 ein neues Projekt vom Typ “Sharepoint 2010 – Event Receiver” an. Diese Vorlage und der folgende Wizard erledigen viele Konfigurationsaufgaben für uns, die mit Sharepoint 2007 noch alle händisch zu tätigen waren, wir müssen uns nur mehr auf unsere Business Logik konzentrieren. Im Wizard, der erscheint sobald man auf “Weiter” klickt, lassen wir eine “Sandboxed-Solution” erstellen, das heisst wir können ausserhalb unserer SiteCollection nichts “anstellen” mit unserem eigenen Code. Wichig ist die nächste Seite, hier wird eingestellt auf welche Listenvorlagen der EventReceiver reagieren soll und auf welches Ereignis. Es gibt grundsätzlich 5 Gruppen von Ereignissen: Listenereignisse, Listenelementereignisse, Webereignisse, Workflow- und Emailereignisse. Fürs Beispiel wählen wir Listelementereignisse (List Item Events) und das Ereignis “An item was updated” –> Wir reagieren also NACHDEM ein Element geändert wurde. Das Ereignis “An item is being updated” wäre das Pendant dazu, BEVOR ein Update passiert. Als Ereignisquelle wählen wir im Beispiel “Custom List”, also Benutzerdefinierte Liste. Hier würde in einem realen Projekt noch granularer eingeschränkt auf “Task” etc. Ein Klick auf “Finish” erzeugt alle notwendigen Konfigurationsdateien, damit unsere Solution sofort auf Knopfdruck “Deployed” werden kann – dazu am Ende des Artikels mehr. Ist die Erzeugung der Solution fertig, wird im Code Editor sofort die Klasse EventReceiver1 angezeigt. Diese Klasse leitet von SPItemEventReceiver ab und stellt alle benötigten EventHandler bereit um auf die Sharepoint Ereignisse zu reagieren. Weiters ist der EventHandler ItemUpdated sofort erzeugt worden. Wir brauchen nur mehr “ausfüllen” mit unserer Businesslogik. 1: public class EventReceiver1 : SPItemEventReceiver
2: {
3: public override void ItemUpdated(SPItemEventProperties properties)
4: {
5: base.ItemUpdated(properties);
6: }
7: }
Drei Dinge müssen passieren, damit unsere Spezifikation umgesetzt wird.
- Auslesen der E-Mail Einstellungen
- Auslesen der E-Mail Adresse aus dem Listenelement
- Versenden der Email
Auslesen der E-Mail Einstellungen
Die E-Mail Einstellungen sollen “von aussen” konfigurierbar an den EventReceiver übergeben werden. Dinge wie Absenderadresse, Subject und Text sollten nicht hardcoded werden.
Dies kann einfach erreicht werden indem man die Eigenschaft “ReceiverData” von SPListeItemEventProperties verwendet. Mithilfe dieser Eigenschaft lassen sich beliebige Daten übergeben. Im Beispiel werden die Daten einfach in folgenden Format mit übergeben
FROM:sharepoint@codeforce.at|Subject:TestMail|Body:This is a test!
1: public static EmailSettings GetEmailSettings(string eventData)
2: {
3: var sections = eventData.Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
4: var settings = new EmailSettings
5: {
6: FromAdress = sections[0].Split(':')[1],
7: Body = sections[1].Split(':')[1],
8: Subject = sections[2].Split(':')[1],
9: EmailFieldName = sections[3].Split(':')[1]
10: };
11: return settings;
12: }
Und der Aufruf dazu:
1: var settings = GetEmailSettings(properties.ReceiverData);
Im Beispiel wurde jegliche Fehlerbehandlung entfernt, die sollte natürlich nicht fehlen! Wie wir die Eigenschaft “ReceiverData” befüllen, sehen wir am Ende des Beispiels.
Zugriff auf das Listenelement – Auslesen der Email Adresse
Interessant wirds im 2. Punkt, hier müssen wir via Objektmodell auf Inhalte der Liste zugreifen. Auch keine Hexerei!
1: var address = properties.ListItem.GetFormattedValue(emailFieldName);
Über das Argument “properties” der Methode “ItemUpdated” kommen wir einfach an des Listenelemnt, welches das Ereignis ausgelöst hat. Um nun ein gewisses Feld abzurufen bietet sich die Methode “GetFormattedValue()” an, da sie die Daten eines Feldes IMMER als formatierten string zurückliefert. Je nach Feldtyp kann das auch zu, nur mehr bedingt lesebaren Ausgaben führen – falls das Feld einen komplexen Typ wie “Lookup” oder “BusinessData” hat. Alternativ kann auch einfach der Indexer verwendet werden.
1: var address = properties.ListItem[emailFieldName];
Versand der E-Mail
Am einfachsten gelingt dies mit einer Hilfsmethode aus der statischen Klasse SPUtility – die EMail wird dann nämllich sofort versandt und “umgeht” die Sharepoint “Immediate Alert” Architektur. Das hat den Vorteil, dass man beim Testen nicht immer warten muss, bis der Timer Dienst “Immediate Alerts” versendet.
1: public bool SendMail(EmailSettings settings,string toAdress, SPWeb web)
2: {
3: return SPUtility.SendEmail(web, false, false, toAdress, settings.Subject, settings.Body);
4: }
Soweit ist unser Code damit fertig. Im Anhang findet sich die komplette Klasse.
Wie wird nun unser EventReceiver in Sharepoint registriert?
Im Visual Studio Projekt finden sich unter dem Punkt “Features” einige Dateien welche aus der Vorlage erzeugt wurden. Ein Feature in Sharepoint Terminologie ist die “Verpackungseinheit” für alle Dinge, die man ausrollen will in die Farm. Ein Feature besteht aus zwei oder mehr XML Dateien, die die Inhalte beschreiben. Visual Studio 2010 bietet für Features einen eigenen Designer, also ist es nicht mehr nötig das genaue XML Schema zu kennen.
Öffnet man mit Doppelklick ein Feature sieht man dessen Inhalt – der EventReceiver in unserm Fall. Die ganze “Magie” – also die Zuordnung unseres Codes zu dem Sharepoint Event passiert in der Datei Elements.xml, die man mittels Kick direkt im Feature Designer öffnet (Ein Klick auf das kleine
“ + Files “ lässt den Link zur Elements.xml erscheinen).
1: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
2:
3: <Receivers ListTemplateId="107">
4: <Receiver>
5: <Name>List Mailer</Name>
6: <Type>ItemUpdated</Type>
7: <SequenceNumber>100</SequenceNumber>
8: <Assembly>TaskListFeatures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7eaab9b475a29bf8</Assembly>
9: <Class>TaskListFeatures.Features.TaskMailer.TaskListMailerEventReceiver</Class>
10: <Data>From:sharepoint@codeforce.at|Body:Hello World!|Subject:Test Mail|FieldName:email Adress</Data>
11: <Filter>
12: </Filter>
13: </Receiver>
14: </Receivers>
15: </Elements>
Hier im Element Manifest, sieht man die Zuordnung zur Liste. Das Element “Receivers” spezifiziert ein oder mehrere Receiver Klassen auf bestimmten Listenvorlagen. Es wird auf eine Assembly und eine Klasse verwiesen, die das Event verarbeitet. Wichtig ist hier auch die Sequence! Es kann sein, dass mehrere Receiver aufs selbe Event reagieren, mit der Sequence kann man sie in eine Reihenfolge bringen.
Hier wird auch mit dem Element “Data” die Konfiguration gespeichert. Die Zeichenfolge in “Data” steht dann in der Eigenschaft ReceiverData, welche wir für die Email Einstellungen verwendet haben zu Verfügung.
Soweit haben wir unseren Receiver fertig, mit Rechts-Klick im Solution Explorer kann das Ganze “Deployed” werden. Visual Studio 2010 verpackt dabei alle Features in eine Sharepoint Solution (ein CAB Archiv mit der Endung .wsp") und rollt diese am Server aus.
Geschafft! Sobald nun in einer Liste vom Typ “Custom List” ein Element geändert wird, feuert unser EventReceiver!
Mehr zur Feature/Solution Infrastruktur sehen wir uns im nächsten Artikel wieder Hands- On an.