Jan 242013
 

Feature Stapling wird genutzt, um z.B. bei der Erstellung einer MySite direkt eine neue Masterpage zuzuweisen.

Feature.xml

<?xml version="1.0" encoding="utf-8"?>
<Feature Id="F9AB6989-A3A8-4df2-8254-12987EE4FAA5" Title="SiteStaplerFeature" Scope="Farm" Version="1.0.0.0" Hidden="FALSE" DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/"> <ElementManifests>
<ElementManifest Location="Elements.xml" />
</ElementManifests>
</Feature>

Elements.xml

<?xml version="1.0" encoding="utf-8"?>
<Elements Id="F52F4322-4086-4341-8B88-4368779C1E37" xmlns="http://schemas.microsoft.com/sharepoint/" > <FeatureSiteTemplateAssociation Id="f6924d36-2fa8-4f0b-b16d-06b7250180fa" TemplateName="SPSPERS#0"/> <FeatureSiteTemplateAssociation Id="6ED78B2A-201F-4511-BACE-F7B4B0CB75A8" TemplateName="SPSPERS#0"/>
<FeatureSiteTemplateAssociation Id="14872A49-4124-4a91-BA61-EB0BD5155BF2" TemplateName="SPSPERS#0"/>
</Elements>

Diese Angaben aktivieren:

  • Publishing Feature
  • Feature zum Verteilen der neuen Masterpage
  • Anlegen einer neuen Seite mit Webpart

TemplateName="SPSPERS#0" steht in diesem Fall für die MySite

MySite Masterpage Feature

Feature.xml

<?xml version="1.0" encoding="utf-8"?>
<Feature Id="6ED78B2A-201F-4511-BACE-F7B4B0CB75A8" Title="MySiteMasterPage" Scope="Site" Version="1.0.0.0" Hidden="FALSE" DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/" ReceiverAssembly="MyAssembly.MyNameSpace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=282025704650b387" ReceiverClass="MyAssembly.MyNameSpace.FeatureRecieverClass"> <ElementManifests>
<ElementManifest Location="MySiteMasterPage\Module.xml" />
<ElementFile Location="MySiteMasterPage\MySite.master" />
</ElementManifests>
</Feature>

Elements.xml

<?xml version="1.0" encoding="utf-8"?>
<Elements Id="D8789972-4B6C-49b2-9A34-431BD5C296F3" xmlns="http://schemas.microsoft.com/sharepoint/"> <Module Name="MySiteMasterPage" List="116" Url="_catalogs/masterpage">
<File Path="MySiteMasterPage\MySite.master" Url="MySite.master" Type="GhostableInLibrary" />
</Module>
</Elements>

Codebehind/FeatureReceiver

public override void Featureactivating(SPFeatureReceiverProperties properties) {
SPSite site = (SPSite)properties.Feature.Parent;
SPWeb web = site.OpenWeb();
web.CustomMasterUrl = "/_catalogs/masterpage/MySite.master";
web.Update();
}

Feature Dependencies

Feature Dependencies werden benutzt, um weitere Features zu aktivieren die benötigt werden, dies ist z.B. notwendig für das Publishing Feature!

Feature.xml

<Feature xmlns=http://schemas.microsoft.com/sharepoint/ Id="14872A49-4124-4a91-BA61-EB0BD5155BF2" Scope="Web" Hidden="False" Title="MySitePage" Description="Deploys a custom page with a webpart."> <ElementManifests>
<ElementManifest Location="MySitePages/elements.xml" />
</ElementManifests>
<ActivationDependencies>
<ActivationDependency FeatureId="22A9EF51-737B-4ff2-9346-694633FE4416" />
<ActivationDependency FeatureId="A392DA98-270B-4e85-9769-04C0FDE267AA" />
<ActivationDependency FeatureId="AEBC918D-B20F-4a11-A1DB-9ED84D79C87E" />
<ActivationDependency FeatureId="89E0306D-453B-4ec5-8D68-42067CDBF98E" />
<ActivationDependency FeatureId="D3F51BE2-38A8-4e44-BA84-940D35BE1566" />
</ActivationDependencies>
</Feature>

Zusätzlich verteilt dieses Feature noch eine Seite in die Pages Library und richtet darauf ein Core Results Webpart ein:

Elements.xml

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="Pages" List="850" Url="Pages">
<File Name="SearchResult.aspx" Url="SearchResult.aspx" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" >
<AllUsersWebPart WebPartZoneID="Header" WebPartOrder="1">
<![CDATA[
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="Microsoft.Office.Server.Search.WebControls.PeopleCoreResultsWebPart, Microsoft.Office.Server.Search, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> <importErrorMessage>Cannot import this Web Part.</importErrorMessage>
</metaData>
<data>
<properties>
<property name="CacheXslStorage" type="bool">True</property>
<property name="Default" type="string" />
<property name="ChromeState" type="chromestate">Normal</property>
</properties>
</data>
</webPart>
</webParts>
]]>
</AllUsersWebPart>
</File>
</Module>
</Elements>
Mrz 062012
 

Um eine Entwicklung (Webpart, Eventhandler, Workflow, etc…) in einer Site Collection bereitstellen zu können, muss man Site Collection Administrator sein! Andernfalls bekommt man oben genannte Fehlermeldung bei der Bereitstellung über Visual Studio mit F5 Smiley

Bei Fehlern folgende Rechte überprüfen:

  • lokale Administratorengruppe
  • db_owner der aktuellen Inhaltsdatenbank
  • Site Collection Administrator der aktuellen Webseitensammlung
  • du entwickelst auf dem Sharepoint Server und nicht lokal (nicht ganz ernst gemeint Zwinkerndes Smiley,aber kann schon mal passieren bei geistiger Umnachtung)
Okt 162011
 
Anonymes Download WebPart

Der WebPart bietet auf einem anonymen Internetauftritt die Möglichkeit, für Kunden ohne Authentifizierung im SharePoint, Dateien zum Download bereitzustellen.
Dazu wird dem Kunden ein eindeutiger Downloadlink zugeschickt damit dieser die Datei herunterladen kann. Andere Personen haben ohne Kenntnis des eindeutigen Link keine Möglichkeit an die Datei zu gelangen und können somit nicht auf die Datei zugreifen.

Mehr über das "Anonyme Download WebPart" lesen

Sep 212011
 

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.

Jul 122009
 

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

Jun 112009
 

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

Mai 262009
 

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

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

Inhalt Beispiel.de-de.resx

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- _lcid="1031" _version="12.0.4518.1014" _dal="1" -->
  3. <!-- _LocalBinding -->
  4. <root>
  5. <Data Name="wphallotext">
  6. <Value>Hallo WebPart</Value>
  7. </Data>
  8. </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.

Nov 132008
 

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/

Sep 242008
 

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

Aug 172008
 

Jeder der Features, Site- und/oder Listdefinitions, Webparts oder Workflows entwickelt, benötigt gewisse Grundkenntnisse über ID's bzw. Typen, welche das entsprechende Template oder den Datentyp wiederspiegelt.

Eine ausführliche Auflistung von SPBaseType bis hin zu TemplateNames ist zu finden unter http://abstractspaces.wordpress.com/2008/08/01/sharepoint-reference-sheet/