Für eingefleischte Entwickler sicherlich bekannt, für Neulinge allerdings eine Hilfestellung bei der Installation von SharePoint Solutions (Webparts, Workflows, Eventhandler, usw…). Der Installer prüft bei der Ausführung, ob die Umgebung alle notwendigen Voraussetzungen erfüllt und installiert die Solution im SharePoint. Anschließend bleibt dann z.B. nur noch das Feature zu aktivieren, Webpart auf der Seite platzieren…

Das Tool ist kostenlos und kann von Codeplex heruntergeladen werden. Die momentane Version ist noch für den SharePoint 2007 (MOSS), allerdings ist der Quellcode frei verfügbar und es sind nicht viele Stellen die abgeändert werden müssen um das Setup auch für den SharePoint 2010 “fit” zu machen.

Danach steht der einfachen Installation von Solutions nichts mehr im Wege.

Der Installer besteht im besten Fall aus 4 Dateien, die auf den Server kopiert werden müssen:

setup.exe
setup.exe.config
logo.png
solution.wsp

Die ersten drei Dateien sind der Hauptbestandteil des Installers. Die Setup.exe ist der normale Installer und wird mit einem Doppelklick ausgeführt. Die zweite Datei (setup.exe.config) dient zur Konfiguration. Die dritte Datei ist optional, damit kann im Installer das Firmenlogo angezeigt werden. Die vierte Datei ist das Paket, welches im SharePoint bekannt gemacht werden soll, also euer Webpart, Workflow oder ähnliches. Da bietet der SharePoint Server zu viele Möglichkeiten um hier alle einzeln aufzulisten.

In der Konfigurationsdatei sind einige wenige Einstellungen vorzunehmen:

  • SolutionID
  • Name der WSP Datei
  • Titel des Setups

Der Rest kann im Normalfall so belassen werden (Ausnahmen bestätigen die Regel).
Für unsere Firma habe ich den Quellcode in 1 Stunde angepasst. Es ist also nicht wirklich schwer auch für den SharePoint Server 2010 Solutions professionell zu verteilen.

 

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

 

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.

 

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

 

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

 

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/

 

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

 

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

 

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

© 2012 Daniel Buschke - Blog Suffusion theme by Sayontan Sinha