Blog Daniel Buschke

12. Juli 2009

Benutzung von Sharepoint Controls

Abgelegt unter: Entwicklung, Sharepoint, Webparts — Daniel @ 15:41

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

11. Juni 2009

Full Loginname für SPWeb.EnsureUser()

Abgelegt unter: Entwicklung, Sharepoint, Webparts — Daniel @ 08:12

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

26. Mai 2009

Webpart in mehreren Sprachen

Abgelegt unter: Sharepoint, Webparts — Daniel @ 21:33

Bei der Webpart Entwicklung ist es oft notwendig, die darzustellenden Labels, Hinweistexte und sonstige Schriftzüge in verschiedenen Sprachen zu halten. Sei es ein freies Webpart, welches für die breite Community gedacht ist, ein Kundenwunsch, weil er mehrere Standorte in verschiedenen Ländern und somit auch anderssprachige Mitarbeiter hat oder sonst ein beliebiger Grund wie z.B. Langeweile.

Bei mir trifft heute der zweite Punkt zu und daher möchte ich kurz auf die Lokalisierung eingehen. (kurz deshalb, weil es gar nicht soviel ist :) )

Man nehme ein Webpart seiner Wahl und beginnt zu entwickeln.

Beispiel: Wir möchten einen String ausgeben, welches uns in verschiedenen Sprachen begrüßt. Diese Texte sollen in Deutsch und in Englisch erscheinen.

Zuerst legen wir 3 Resourcendateien an, welche beim SharePoint im Verzeichnis 12/Resources/ liegen.
Diese Datei nennen wir Beispiel.resx, Beispiel.en-us.resx und Beispiel.de-de.resx.

Inhalt Beispiel.resx und Beispiel.en-us.resx

<?xml version="1.0" encoding="utf-8"?>
<!-- _lcid="1033" _version="12.0.4518.1014" _dal="1" -->
<!-- _LocalBinding -->
<root>
  <Data Name="wphallotext">
    <Value>Hello WebPart</Value>
  </Data>
</root>

Inhalt Beispiel.de-de.resx

<?xml version="1.0" encoding="utf-8"?>
<!-- _lcid="1031" _version="12.0.4518.1014" _dal="1" -->
<!-- _LocalBinding -->
<root>
  <Data Name="wphallotext">
    <Value>Hallo WebPart</Value>
  </Data>
</root>

Hierbei ist der einzige Unterschied die LCID und der Wert unseres Keys. Die ersten beiden Dateien sind sogar komplett gleichen Inhalts, worauf ich später nochmal eingehe.

Wenn diese 3 Dateien nun fertig im Verzeichnis hinterlegt sind, können wir diese Strings nun zur Laufzeit im Webpart laden. Dazu bietet das Objektmodell des SharePoints bereits eine Methode, welche 3 Parameter erwartet.

string str = SPUtility.GetLocalizedString("$Resources:wphallotext", "Beispiel", 1033);
  • den Source (string)
  • Resourcenfile (string)
  • LCID (uint)

"wphallotext" ist der Key, welcher in den Dateien definiert ist

"Beispiel" ist das Ressourcenfile (ohne die spezifische Sprachendung)

"1033" steht für die Englisch (natürlich sollte dies nicht hartcodiert sein, sondern z.B. per SPContext.Current.Web.Language ermittelt werden :) )

Tja das war es dann auch schon. Kompilieren, anschauen und freuen wie einfach es doch ist.

Aber wozu werden denn nun 3 Dateien gebraucht wenn es nur 2 Sprachen gibt und warum sind Beispiel.resx und Beispiel.en-us.resx komplett gleich? Die Datei Beispiel.resx ist das Default-Resourcenfile und wird benutzt, wenn eine Sprache nicht verfügbar ist. Da Englisch eine Weltsprache ist macht es hier Sinn, diese in die Default Resource zu packen. Wird nun die Webseite in Russisch geladen und wir haben keine Beispiel.ru-ru.resx hinterlegt, wird unser Text in Englisch angezeigt.

25. März 2009

Arbeitskollegen online

Abgelegt unter: Entwicklung, NTeam, Sharepoint — Daniel @ 09:48

Und wieder sind 2 neue Blogs mit dem hauptsächlichen Thema "Entwicklung" ganz frisch im WWW.
Beide Blogs stammen von meinen Kollegen, die sich hauptsächlich den Themen Sharepoint - allgemein, Webparts, Webservices, Workflows oder Infopath widmen und mit Sicherheit einige tolle Code Snippets und Tipps dort veröffentlichen werden.

Steffen hat bereits seinen Blog mit dem Beitrag -> Image per WebService ins InfoPath Formular gestartet.

Markus ist mit seinem "nächsten Blog" schon um ein paar Beiträge reicher!

Markus Blog
Steffens Blog

na dann Happy Blogging

11. März 2009

Sharepoint Source Parameter

Abgelegt unter: Entwicklung, Sharepoint, Sitedefinition — Daniel @ 16:01

Jeder kennt sicherlich den Source Parameter, den Sharepoint bei Aufrufen in der URL übergibt, um anschließend wieder zu dieser Seite zurückzukehren.
Ich erstelle gerade eine neue Sitedefinition, welches ein Content Editor Webpart mit einigen Links enthalten soll und habe den Platzhalter für die aktuelle Seite vergessen. Also die Suchmaschine meines Vertrauens abgefragt und was finde ich hier

ONCLICK="GoToLink(this);return false;

Eine einfache Javascript Methode die der Sharepoint zur Verfügung stellt und selbstständig die Source als Parameter anhängt..

Ab sofort erspare ich mir doch Sachen wie beispiel.aspx?Source=" + web.ServerRelativeUrl; oder beispiel.aspx?Source={SiteUrl} den ich nun auch gefunden habe :)

13. November 2008

Webpartentwicklung mit VS 2010

Abgelegt unter: Sharepoint, Webparts — Daniel @ 22:03

Morgen wird ein Webcast zum Thema Webpartentwicklung mit Visual Studio 2010 veröffentlicht.

So eigentlich erst mal nichts spannendes aber eine Besonderheit gibt es doch!
Es wird endlich eine visuelle Unterstützung geben. *Begeisterung macht sich breit*

Lang ersehnt, immer wieder mit Kopfschmerzen ins Bett weil man nicht weiß wie man das wieder realisieren soll und nun geht's doch so einfach... Ich bin gespannt und freue mich drauf. Mal sehen wann er morgen da ist.
Der Link zum Webcast wird dann hier als Update bereitgestellt.

Update: Hier der Link http://channel9.msdn.com/posts/VisualStudio/Sharepoint-Development-with-Visual-Studio-2010/

24. September 2008

NTeam auf der DMS EXPO 2008

Abgelegt unter: Allgemein, NTeam, Sharepoint, Webparts — Daniel @ 20:48

Meine Firma, die NTeam GmbH, war auf der DMS EXPO 2008 durch unseren Geschäftsführer Harald Holz vertreten.
Damit er dort auch etwas präsentieren konnte, wurde an den Vortagen durch uns eine VM des aktuellen Kunden Kabel Deutschland mit einigen wenigen Testdaten und unseren Entwicklungen aufgesetzt.

Die Lösung des neuen Intranet Portals bildet verschiedene Unternehmensbereiche ab, bietet dem Kunden aber trotz des gewaltigen Umfangs eine wesentliche Erleichterung im Umgang mit dem Sharepoint. So wurde beispielsweise das Anlegen von Projektseiten automatisiert (der Benutzer füllt ein Infopath Formular aus, der Workflow erledigt den Rest), ein Newsletter bzw. Pressespiegel kann durch die Unternehmenskommunikation versandt werden und eine "Tell a Friend" Funktion wurde erschaffen, welche auch sehr interessante Statistiken über die Nutzung der einzelnen Seiten Aufschluss gibt. Dazu kommen weitere Webparts wie Suche, Stammdaten, Globallist und Telefonliste, welche die alltägliche Benutzung abrunden.

Auf der DMS EXPO stand Harald Holz Michael Greth mit Rede und vorzeigbaren Lösungen zur Seite. Dabei entstand dieses 15-minütige Video.

Weitere Information sind natürlich auf unserer Seite www.nteam.de zu finden.

Das Video stammt von der Seite www.sharepointlive.tv

Achja, wen es interessiert: Newsletter, Pressespiegel, Stammdaten, Suche und Globallist Webparts sind meine Babys ;)

29. Juli 2008

Webpart Properties / Webpart Eigenschaften

Abgelegt unter: Sharepoint, Webparts — Daniel @ 08:56

Eine Auflistung der öffentlichen Eigenschaften, deren Funktion und Bedeutung findet man bei Joe Shepherd.

[WebBrowsable(true),
Personalizable(false),
WebPartStorage(Storage.Personal),
WebDisplayName("User Name(Domain\\username)"),
WebDescription("User to display in the WebPart."),
SPWebCategoryName("Options")]
public string UserLoginName
{
    get { return _loginName; }
    set { _loginName = value; }
}

http://joeshepherd.spaces.live.com/blog/cns!9AE2097A4A610B63!302.entry

Unterschied SPList und SPView RenderAsHtml

Abgelegt unter: Entwicklung, Sharepoint, Webparts — Daniel @ 08:48

Bisher dachte ich, das es keinen wirklichen Unterschied zwischen beiden Methoden gibt. Jedoch lehrte mich ein Fehler beim Kunden eines besseren.

Dieser Kunde beklagte, das keine Filterung und Sortierung mit der von mir gerenderten Liste wie mit Standardlisten des Sharepoints möglich sei.

Nach einiger Recherche im Netz fand ich verschiedene Seiten, die ctxId=1 und ctx1 gegen eine Zufallszahl ersetzen (um mehrere Instanzen dieses Webparts auf einer Seite zu ermöglichen -> http://www.tech-archive.net) und eine Seite wo das Interface ICallBackHandler implementiert wird um die Gruppierung zu ermöglichen(http://darrenjohnstone.net).

Das alles versuchte ich auch in meinem Webpart jedoch war es dann irgendwann soweit, das sich überhaupt kein Kontextmenü für die Filterung mehr öffnete. Nach 1 1/2 Tagen Fehleranalyse und probieren zeigte ich dieses Problem einen Kollegen. Dieser hatte die gleiche Methode ebenso in seinem Webpart genutzt und schaute bei sich nach - bei ihm ging es und das sogar ohne ctx-Tausch oder sonstige Verrenkungen. Nach kurzer Codeanalyse war das Problem klar.

 

Er benutzte SPView.RenderAsHtml() und ich SPList.RenderAsHtml(). Nach kurzem Umbau funktionierte nun auch meine Filterung und Sortierung im Webpart.

Ich hoffe das sich hiermit einige Leute diese Zeit sparen können :)