Als ich heute eine neue Solution für ein Visual Webpart erstellt habe musste ich leider feststellen, dass Visual Studio 2010 noch einen kleinen Bug beinhaltet.
Ich habe den Namespace geändert, jedoch wurde nach dem Deployment die Fehlermeldung “Webpart ist not registered as save” angezeigt, da als SafeControl Eintrag für die web.config immer noch die Endung “…mynamespace.VisualWebpart1” verwendet wurde.
Der Grund ist die *.spdata des Usercontrols, die nicht automatisch aktualisiert wird:
Der Assemblyname ist hierbei mit einer Variablen hinterlegt, der Namespace ist jedoch hart kodiert und wird nicht automatisch angepasst. Nach der manuellen Anpassung muss die Solution geschlossen, neu geöffnet und kompiliert werden. Im Anschluss daran kann ein neues Deployment oder auch Debugging erfolgen, dann funktioniert alles wie gewünscht.
Unter SharePoint 2010 ist es nun möglich, eigene Pages für bestimmte Events zu hinterlegen. Dies geht über die SPCustomPage Enumeration:
| none |
|
| AccessDenied |
Specifies AccessDenied.aspx. |
| Confirmation |
Specifies Confirmation.aspx. |
| Error |
Specifies Error.aspx. |
| Login |
Specifies Login.aspx. |
| RequestAccess |
Specifies ReqAcc.aspx. |
| Signout |
Specifies SignOut.aspx. |
| WebDeleted |
Specifies WebDeleted.aspx. |
Die neue Page kann über ein Webapplication Feature per FeatureReceiver zugewiesen werden.
const string ErrorPage = "/_layouts/CustomEventPages/error.aspx";
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWebApplication webApp = properties.Feature.Parent as SPWebApplication;
if (webApp != null)
{
if (!webApp.UpdateMappedPage(SPWebApplication.SPCustomPage.Error, ErrorPage))
{
throw new Exception("Neue Fehlerseite konnte nicht registriert werden!");
}
webApp.Update(true);
}
}
Hierbei wird nun eine neue Errorpage gesetzt, die zusätzliche Informationen für den Anwender oder ein eigenes Layout beinhalten könnte.
Andreas M. hat einen Entwickler Tipp online gestellt, in dem er die Kommunikation zwischen den Settings und dem eigentlichen Add-In beschreibt. Benutzt wird hierbei ein einfacher Eventhandler, der beim Commit ausgelöst wird.
The easiest way to accomplish this is by using a singleton object which provides the necessary means of communication.
Now there’s two things left to do: First we need to subscribe to the ChangeNotifier’s Changed event in our console tab and second we have to call the Notify() method (which will fire the Changed event) from our settings tab when setting changes are committed.

Dieser Tipp kann benutzt werden, um Änderungen an den Einstellungen zu erkennen und im Add-In sofort zu reagieren.
Wenn ich an meine ganzen Versuche zurück denke… oje… der Weg ist einfach klasse!!
So meine letzte Tat vor dem Urlaub und auch vor dem geplanten Umzug war noch schnell eine kleine Seite zu erstellen.
Die Idee kam mir und einem Kollegen und war im groben sehr schnell realisiert. Es gibt hier und da noch einige offene Dinge zu erledigen, sei es Design oder der Benutzerfreundlichkeit aber sie ist jedenfalls erstmal LIVE
Das Konzept: generieren einer GUID (demnächst mit einem nicht ganz so ernst gemeinten GUID Besitzschein), gleichzeitig ein paar Tipps zu geben und ein kleines Ratespiel für die Minuten zwischendurch
Link: http://www.guidschein.de
Das soll es dann erst einmal gewesen sein für dieses Jahr, nach dem Umzug geht es dann weiter mit dem Directory Watcher in der Version 1.1.
Jeder kennt sie, die altbewährte MessagBox…
Um nach Fehlermeldungen zu suchen, tippt man sich hier oft die Finger in der Suchmaschine seines Vertrauens wund, denn Entwickler sind manchmal sehr gesprächig
Dabei ist es so einfach… STRG + C zum kopieren der gesamten Meldung, klappt mit jeder MessageBox!
Hier einige Beispiele von lustigen Meldungen:
Roman
Ah ja und was wird nun übermittelt?
schade…
Nun ja, es gibt eine Vielzahl an lustigen Meldungen… Sonst wäre das Leben eines Entwicklers auch langweilig
Ich habe eine neue Seite für Videos angelegt und es sind bereits 2 Filme â 4 Minuten über die AddIns “Webradio” und “Samsung Photoframe Control” online.
Es werden mit Sicherheit weitere folgen.
Viel spaß beim gucken!
Ennnnnnnnddddddddliiiiiicccccccccccccchhhhhhhhhhh… heute wurde auf der World Partner Conference ein erster langersehnter Einblick auf die neue Version des SharePoint Server gegeben.
Microsoft gibt einen Überblick auf den neuen SharePoint 2010 und damit auf einige der neuen Funktionen. Ich finde das Layout sehr ansprechend (Ribbons, neue Aufteilung der Elemente) aber auch die neuen Funktionen können sich sehen lassen! Sehr schön für Entwickler ist die Integration des SharePoints in Visual Studio 2010 (Server Explorer für Zugriff auf Listen, viele Projekt Templates) aber auch das Developer Dashboard, welches dem Entwickler sehr nützliche Informationen wie z.B. der Ladezeit des einzelnen Webparts liefert.
Alles in allem, finde ich, ist es ein sehr gelungenes Paket!
Wer sich selbst davon überzeugen mag, der findet hier 3 Videos:
Overview Sneak Peek
Developer Sneak Peek
IT Professional Sneak Peak
SharePoint bringt eine Reihe von eigenen Controls mit, die auch in den Eigenentwicklungen genutzt werden können. Die folgenden Seiten bieten einige Beispiele für die Einbindung und Benutzung dieser Controls.
René Hézser stellt eine Klasse mit diversen Webcontrols zur Verfügung, wobei das benötigte Control anhand des SPFieldType ermittelt wird
René Hézser zeigt außerdem die Verwendung von TextField bzw. RichTextField, welche “webübergreifend” agieren
Karine Bosch zeigt die einfache Verwendung von SharePoint User Controls und SharePoint Server Controls, unter anderem “InputForm Controls”, “DateTime Control”, “PeopleEditor Control”, “SPGridView Control”, “Validator Controls”…
Reza Alirezaei zeigt die Benutzung einer Standard SharePoint Toolbar in Webparts
Gerade hatte ich das Problem, einen Benutzer aus dem AD auszulesen und im Sharepoint zu berechtigen. Das Problem hierbei war, das man aus dem sAMAccountName nur den Teil des Namens bekommt und nicht etwa die Domain dazu.
Es wird aber für web.EnsureUser() genau der komplette Loginname benötigt.
Des Rätsels Lösung:
public static string GetLoginName(string alias)
{
NTAccount nt = new System.Security.Principal.NTAccount(alias);
SecurityIdentifier sid = (SecurityIdentifier)nt.Translate(typeof(SecurityIdentifier));
nt = (NTAccount)sid.Translate(typeof(NTAccount));
return nt.Value;
}
gefunden bei Dan
Hat mir jedenfalls eine Menge gefrickel erspart! Danke Dan