<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SharePoint Corner</title>
	<atom:link href="http://msscorner.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://msscorner.de</link>
	<description>Die Wissensecke zum Stöbern</description>
	<lastBuildDate>Wed, 08 May 2013 08:25:06 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>How to: Searching in SharePoint using the new REST API and JavaScript</title>
		<link>http://msscorner.de/2013/05/08/how-to-searching-in-sharepoint-using-the-new-rest-api-and-javascript/</link>
		<comments>http://msscorner.de/2013/05/08/how-to-searching-in-sharepoint-using-the-new-rest-api-and-javascript/#comments</comments>
		<pubDate>Wed, 08 May 2013 08:25:06 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SharePoint 2013]]></category>
		<category><![CDATA[SharePoint Search]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1729</guid>
		<description><![CDATA[Als Entwickler versucht man heutzutage jegliche Informationen in SharePoint über die Suche zu beziehen. Ihr stellt euch die Frage Warum? Performanter Lösungsweg, da der Suchindex asynchron aufgebaut wird Security Trimming in der Ergebnisliste Über C#, JavaScript oder REST abrufbar In SharePoint 2013 wurden diese Ansätze natürlich weiterhin erweitert und vereinfacht . Da aufgrund von SharePoint [...]]]></description>
			<content:encoded><![CDATA[<p>Als Entwickler versucht man heutzutage jegliche Informationen in SharePoint über die Suche zu beziehen. Ihr stellt euch die Frage <strong>Warum</strong>?</p>
<ul>
<li>Performanter Lösungsweg, da der Suchindex asynchron aufgebaut wird</li>
<li>Security Trimming in der Ergebnisliste</li>
<li>Über C#, JavaScript oder REST abrufbar</li>
</ul>
<p>In SharePoint 2013 wurden diese Ansätze natürlich weiterhin erweitert und vereinfacht <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . Da aufgrund von SharePoint Apps JavaScript immer wieder mehr an Bedeutung findet, möchte ich in diesem Artikel zeigen, wie die <strong>REST</strong> <strong>API</strong> für die Suche über JavaScript verwendet werden kann.</p>
<h1>Accessing Search using REST API</h1>
<p>Der Vorteil von Rest besteht darin, dass es sich lediglich um eine URL handelt. Dadurch kann der Aufruf und das Ergebnis im Browser getestet werden ohne eine Zeile Code zu schreiben. Die Grundstruktur von Rest sieht dabei wie folgt aus:</p>
<p style="padding-left: 30px;"><strong>http://&lt;Site Url&gt;/_api/&lt;SP API&gt;/&lt;Operation&gt;?&lt;Parameters&gt;</strong></p>
<p>In unserem Fall würde die Url wie folgt aufgebaut sein:</p>
<p style="padding-left: 30px;"><strong>http://&lt;Site Url&gt;/_api/search/query?querytext=&#8217;test&#8217;</strong></p>
<p>Wird diese Url im Bowser aufgerufen, so wird ein XML mit interessanten Eigenschaften als Antwort vom Server zurückgegeben. Zum Beispiel die Anzahl der Treffer.<span id="more-1729"></span></p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/05/RestResultBrowser.png" rel="shadowbox[sbpost-1729];player=img;" title="Rest Result Browser"><img class="alignnone size-full wp-image-1737" title="Rest Result Browser" src="http://msscorner.de/wp-content/uploads/2013/05/RestResultBrowser.png" alt="" width="502" height="423" /></a></p>
<h1>Search Properties</h1>
<p>Die Suchanfrage kann an Hand vieler Parameter gefiltert werden. Typische Anwendungsfälle wären zum Beispiel:</p>
<ul>
<li>die Filterung der Ergebnisse an Hand des Autors oder einer speziellen Source ID</li>
<li>maximale Anzahl an Ergebnissen pro Seite (für Paging) oder Gesamt</li>
<li>Angabe der benötigten Managed Properties (Title, Author, Path)</li>
<li>&#8230;</li>
</ul>
<p>Eine ausführliche Auflistung aller Möglichkeiten inklusive Code-Beispiel findet sich auf <a href="http://msdn.microsoft.com/de-de/library/jj163876.aspx">MSDN</a>.</p>
<h1>Calling the REST service from JavaScript</h1>
<p>Ich habe mir zunächst über Napa eine neue SharePoint App erstellt und das <strong>AppManifest.xml</strong> mit den notwendigen Berechtigungen erweitert.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/05/AppManifest.png" rel="shadowbox[sbpost-1729];player=img;" title="AppManifest"><img class="alignnone size-full wp-image-1751" title="AppManifest" src="http://msscorner.de/wp-content/uploads/2013/05/AppManifest.png" alt="" width="491" height="295" /></a></p>
<p>Damit wird sichergestellt, dass die App Zugriff auf die SharePoint Suche besitzt und die Anfrage nicht in einem Access Denied endet.</p>
<p>Im nächsten Schritt habe ich der <strong>Default.aspx</strong> eine einfache Suchmaske ohne viel Magie hinzugefügt.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;
    &lt;input type=&quot;text&quot; id=&quot;searchBox&quot;&gt;&lt;/input&gt;
    &lt;input type=&quot;button&quot; id=&quot;searchBtn&quot; value=&quot;Search&quot;&gt;&lt;/input&gt;
    &lt;div id=&quot;searchResult&quot; /&gt;
&lt;/div&gt;
</pre>
<p>Zum Schluss wechseln wir zur <strong>App.js</strong> und fügen den eigentlichen REST Aufruf hinzu. Bei dem hier dargestellten Lösungsweg handelt es sich um einen vereinfachten objektorientierten Ansatz. Es ist zu empfehlen diese Logik in eine eigene JavaScript Datei mit eigenem Namespace auszulagern, nur möchte ich der übersichtshalber hier darauf verzichten.</p>
<pre class="brush: jscript; title: ; notranslate">
'use strict';
var context = SP.ClientContext.get_current();
var SPSearchResults = {
      elem : '',
      url : '',
      init : function(elem, query) {
          SPSearchResults.elem = elem;
          SPSearchResults.url = _spPageContextInfo.webAbsoluteUrl + &quot;/_api/search/query?querytext='&quot; + query + &quot;'&quot;;
      },
      load: function() {
          $.ajax(
           {
                  url: SPSearchResults.url,
                  method: &quot;GET&quot;,
                  headers: {&quot;accept&quot; : &quot;application/json;odata=verbose&quot;},
                  success: SPSearchResults.onSuccess,
                  error: SPSearchResults.onFailed
           }
          )
      },
      onSuccess: function(data) {
             var results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;
             if(results.length === 0) {
                    $(SPSearchResults.elem).text(&quot;no results were found.&quot;);
             } else {
                    var resultHtml = &quot;&lt;div class='searchResults'&gt;&quot;;
                    $.each(results, function(index, result) {
                              resultHtml += &quot;Title: &lt;a href='&quot; + result.Cells.results[6].Value + &quot;'&gt;&quot; + result.Cells.results[3].Value + &quot;&lt;/a&gt; &lt;br/&gt;&quot; + 
                              &quot;Content: &quot; + result.Cells.results[10].Value + &quot;&lt;br/&gt;&quot; + 
                              &quot;Type: &quot; + result.Cells.results[17].Value + &quot;&lt;br/&gt;&quot; + 
                              &quot;Modified: &quot; + new Date(result.Cells.results[8].Value).toString(&quot;MMMM&quot;) + &quot;&lt;br/&gt;&quot;;
                    })
                    resultHtml += &quot;&lt;/div&gt;&quot;;
                    $(SPSearchResults.elem).html(resultHtml);
             }
      },
      onFailed: function(error) {
             $(SPSearchResults.elem).text(&quot;An unexpected error occurred.&quot;);
      }
  }

// This code runs when the DOM is ready and creates a context object which is
// needed to use the SharePoint object model
$(document).ready(function () {
    $(&quot;#searchBtn&quot;).click(function() {
           SPSearchResults.init($(&quot;#searchResult&quot;), $(&quot;#searchBox&quot;).val());
           SPSearchResults.load();
    });
});
</pre>
<p>Der dargestellte Code erstellt in der Methode <strong>init </strong>in Abhängigkeit des Suchwortes eine REST Query. Durch die Methode <strong>load </strong>wird diese Anfrage unter der Verwendung von jQuery ausgeführt. War die Anfrage erfolgreich so wird in der Methode <strong>onSuccess</strong> durch die Ergebnisse iteriert und in dem gewünschten Div angezeigt. Sollte diese Anfrage in einem Fehler enden, so wird diese über <strong>onFailed</strong> behandelt.</p>
<h1>Fazit</h1>
<p>Immer mehr Anwendungen setzen für die Aggregierung von Daten auf die SharePoint Suche um Performance zu gewährleisten. Dabei kann die Such API auch über JavaScript und REST angesprochen werden, um diese Vorteile auch in einer SharePoint App anzuwenden. Verwendet kann diese Lösung nicht nur in Apps, sondern auch in allen Farm- oder Sandbox-Solutions wo auf JavaScript gesetzt wird.</p>
<p>Ich persönlich begrüße es, dass die Suche für die Entwicklung immer mehr in den Vordergrund gestellt wird, da ich sehr viel Wert auf Performance lege. Ich hoffe dieser kurze Artikel hat euch ebenfalls von der Mächtigkeit der neuen SharePoint 2013 REST API überzeugt und wie immer freue ich mich auf Euer Feedback <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/05/08/how-to-searching-in-sharepoint-using-the-new-rest-api-and-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bereitstellen der Geolocation Funktionalität mit einer App und JavaScript</title>
		<link>http://msscorner.de/2013/04/23/provisioning-geolocation-functionality-using-an-app-and-javascript/</link>
		<comments>http://msscorner.de/2013/04/23/provisioning-geolocation-functionality-using-an-app-and-javascript/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 09:38:39 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1710</guid>
		<description><![CDATA[In SharePoint 2013 gibt es ein cooles neues Feature, von denen die meisten noch garnichts wissen. Geolocation Fields, zu deutsch Positionsfelder In diesem Artikel möchte ich kurz zeigen, wie diese Funktionalität mittels einer App und JavaScript bereitgestellt werden kann. Ausführliche Informationen zu diesem Feature können auf einem älteren Artikel nachgelesen werden, wo auch die Konfiguration auf [...]]]></description>
			<content:encoded><![CDATA[<p>In SharePoint 2013 gibt es ein cooles neues Feature, von denen die meisten noch garnichts wissen. <strong>Geolocation</strong> <strong>Fields</strong>, zu deutsch <strong>Positionsfelder</strong> <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  In diesem Artikel möchte ich kurz zeigen, wie diese Funktionalität mittels einer App und JavaScript bereitgestellt werden kann. Ausführliche Informationen zu diesem Feature können auf einem<a href="http://msscorner.de/?p=1398"> älteren Artikel</a> nachgelesen werden, wo auch die Konfiguration auf SQL Server Ebene beschrieben ist.</p>
<h1>Create an App</h1>
<p>Zunächst habe ich mit Visual Studio 2012 ein neues<strong> SharePoint 2013 App Projekt</strong> vom Typ <strong>SharePoint-Hosted App</strong> erzeugt.</p>
<p>Anschließend muss die <strong>App.js</strong> wie folgt angepasst werden:<span id="more-1710"></span></p>
<pre class="brush: jscript; title: ; notranslate">
var fieldXml = '&lt;Field Type=&quot;Geolocation&quot; DisplayName=&quot;Geo Location&quot; /&gt;';

$(document).ready(function () {
    ProvisionBingMaps();
});

function ProvisionBingMaps() {
    var context = SP.ClientContext.get_current();
    var hostContext = new SP.AppContextSite(context, GetParam(&quot;SPHostUrl&quot;));
    var web = hostContext.get_web();
    context.load(web);

    var listCreationInfo = new SP.ListCreationInformation();
    listCreationInfo.set_title(&quot;Bing Maps&quot;);
    listCreationInfo.set_description(&quot;You can use this list to store Geolocation Informations&quot;);
    listCreationInfo.set_templateType(SP.ListTemplateType.genericList);

    web.get_lists().add(listCreationInfo);

    var list = web.get_lists().getByTitle(&quot;Bing Maps&quot;);
    if (list != null || list != &quot;undefined&quot;) {
        var fields = list.get_fields();
        fields.addFieldAsXml(fieldXml, true, SP.AddFieldOptions.addToDefaultContentType);
    }

    var webProperties = web.get_allProperties();
    webProperties.set_item(&quot;BING_MAPS_KEY&quot;, &quot;&lt;Valid Bing Maps Key&gt;&quot;);
    web.update();

    context.executeQueryAsync(function () { $(&quot;#message&quot;).text(&quot;Provisioning succeeded.&quot;) }, Function.createDelegate(this,OnFailed));
}

function OnFailed(sender, args) {
    $(&quot;#message&quot;).text(&quot;Provisioning failed: &quot; + args.get_message() + &quot;\n&quot; + args.get_stackTrace());
}

function GetParam(param) {
    var params = document.URL.split(&quot;?&quot;)[1].split(&quot;&amp;&quot;);
    for (var i = 0; i &lt; params.length; i++) {
        prop = decodeURIComponent(params[i]);
        if (prop.indexOf(param) &gt; -1)
            return prop.split(&quot;=&quot;)[1];
    }
}
</pre>
<p>Wird die App das erste mal aufgerufen, so wird eine neue benutzerdefinierte Liste inklusive Geolocation Feld dem <strong>Host Web</strong> hinzugefügt. Darüber hinaus wird noch der Bing Maps Key im SharePoint bekannt gemacht, was sonst mittels PowerShell oder C# hätte gemacht werden müssen.</p>
<p>Kurz zusammengefasst, macht die App alles notwendige auf Seitens SharePoint, damit die Funktionalität am Ende komplett von den Benutzern genutzt werden kann.</p>
<p>Rufen die Benutzer die Liste auf, so ist die komplette Geolocation Funktionalität gegeben:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/BingMaps.jpg" rel="shadowbox[sbpost-1710];player=img;" title="BingMaps"><img class="alignnone size-full wp-image-1719" title="BingMaps" src="http://msscorner.de/wp-content/uploads/2013/04/BingMaps.jpg" alt="" width="509" height="393" /></a></p>
<h1>Fazit</h1>
<p>Das es sich bei der Geolocation Funktionalität in SharePoint 2013 um ein sehr mächtiges Feature handelt, ist bei vielen bereits bekannt. Ein großer abschreckender Faktor waren die einzelnen Konfigurationsschritte:</p>
<ul>
<li>SQL Server Feature aktivieren</li>
<li>Bing Maps Key im SharePoint bekannt machen</li>
<li>Geolocation Feld erzeugen</li>
<li>Liste erzeugen</li>
</ul>
<p>Dieser Artikel zeigt, dass auch auf Basis einer App und mit JavaScript die 3 letzten Konfigurationsschritte automatisiert realisiert werden können. Und das mit recht wenig Aufwand und auch wenig Quellcode <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ich hoffe ich konnte euch damit weiterhelfen und wie immer freue ich mich über Feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/04/23/provisioning-geolocation-functionality-using-an-app-and-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Managed Suite Navigation &#8211; Compare Managed Navigation and Suite Links Functionality</title>
		<link>http://msscorner.de/2013/04/15/managed-suite-navigation-compare-managed-navigation-and-suite-links-functionality/</link>
		<comments>http://msscorner.de/2013/04/15/managed-suite-navigation-compare-managed-navigation-and-suite-links-functionality/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 06:43:34 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SharePoint 2013]]></category>
		<category><![CDATA[Social]]></category>
		<category><![CDATA[TermStore]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1678</guid>
		<description><![CDATA[In SharePoint 2013 ist es erstmalig möglich eine Navigation auf Basis von Terms aufzubauen. Dieser Ansatz bietet Flexibilität und unterstützt mehrsprachige Bezeichnungen. Mein Ziel war es, diese Vorteile mit den SuiteLinks zu vereinen und somit eine Site Collection bzw. Web Application übergreifende globale Navigation zu schaffen. Anwendung könnte diese Art von Navigation in Intranets finden [...]]]></description>
			<content:encoded><![CDATA[<p>In SharePoint 2013 ist es erstmalig möglich eine Navigation auf Basis von <strong>Terms</strong> aufzubauen. Dieser Ansatz bietet Flexibilität und unterstützt mehrsprachige Bezeichnungen. Mein Ziel war es, diese Vorteile mit den <strong>SuiteLinks </strong>zu vereinen und somit eine Site Collection bzw. Web Application übergreifende globale Navigation zu schaffen.</p>
<p>Anwendung könnte diese Art von Navigation in Intranets finden und wer bereits einen ersten Blick auf<strong> Office 365</strong> geworfen hat, wird jene auch da vorgefunden haben <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Technisch baut dieser Artikel auf <a href="http://msscorner.de/?p=1222">einen vorangegangenen Artikel</a> auf, welcher die einzelnen Schritte zum Erstellen eines SuiteLinks Delegate Control ausführlich beschreibt. Von daher wird nur der Codeblock näher betrachtet, an dem die Terms geladen werden. Aber bevor es technisch wird, müssen redaktionelle Vorarbeiten geleistet werden.</p>
<h1>Add Terms to Termstore Manager</h1>
<p>Über die <strong>Site Settings</strong> zum <strong>Termstore Manager </strong>navigieren und sicherstellen, dass das Recht zum hinzufügen von Elementen besteht. Anschließend eine neue Gruppe hinzufügen und dessen ID sich gut merken, denn diese benötigen wir zu einem späteren Zeitpunkt nocheinmal <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> <span id="more-1678"></span></p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/AddTermGroup.jpg" rel="shadowbox[sbpost-1678];player=img;" title="Add Term Group"><img class="alignnone size-full wp-image-1685" title="Add Term Group" src="http://msscorner.de/wp-content/uploads/2013/04/AddTermGroup.jpg" alt="" width="433" height="242" /></a></p>
<p>Unterhalb dieser Gruppe muss ein neues Termset hinzugefügt und auch dessen ID sich für später gemerkt werden.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/AddTermSet.jpg" rel="shadowbox[sbpost-1678];player=img;" title="AddTermSet"><img class="alignnone size-full wp-image-1688" title="AddTermSet" src="http://msscorner.de/wp-content/uploads/2013/04/AddTermSet.jpg" alt="" width="370" height="261" /></a></p>
<p>Außerdem erlauben wir für dieses erstellte Termset die Verwendung in der Navigation.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/EnableNavigation.jpg" rel="shadowbox[sbpost-1678];player=img;" title="EnableNavigation"><img class="alignnone size-full wp-image-1690" title="EnableNavigation" src="http://msscorner.de/wp-content/uploads/2013/04/EnableNavigation.jpg" alt="" width="359" height="242" /></a></p>
<p>Damit können die einzelnen Navigationspunkte als Terms hinzugefügt und die gewünschte URL hinterlegt werden.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/AddTerm.jpg" rel="shadowbox[sbpost-1678];player=img;" title="AddTerm"><img class="alignnone size-full wp-image-1692" title="AddTerm" src="http://msscorner.de/wp-content/uploads/2013/04/AddTerm.jpg" alt="" width="357" height="228" /></a></p>
<h1>Implement Delegate Control</h1>
<p>Nachdem ein SuiteLinks Delegate Control auf Basis des <a href="http://msscorner.de/?p=1222">vorangegangenen Artikels</a> erstellt wurde, muss in diesem Fall das beziehen der benutzerspezifischen Links aus dem Termstore Manager angepasst werden. Dazu in den Code-Behind des UserControls navigieren und dieses wie folgt anpassen:</p>
<pre class="brush: csharp; title: ; notranslate">
protected override void Render(HtmlTextWriter writer)
{
    writer.RenderBeginTag(HtmlTextWriterTag.Style);
    writer.Write(&quot;.ms-core-suiteLinkList {display: inline-block}&quot;);
    writer.RenderEndTag();
    writer.AddAttribute(HtmlTextWriterAttribute.Class, &quot;ms-core-suiteLinkList&quot;);
    writer.RenderBeginTag(HtmlTextWriterTag.Ul);
    RenderCustomLinks(writer);
    writer.RenderEndTag();
    base.Render(writer);
}

private void RenderCustomLinks(HtmlTextWriter writer)
{
    var lcid = System.Threading.Thread.CurrentThread.CurrentUICulture.LCID;
    string simpleUrl = String.Empty;
    TaxonomySession session = new TaxonomySession(SPContext.Current.Site);
    TermStore termStore = session.DefaultSiteCollectionTermStore;
    var group = termStore.Groups[new Guid(&quot;bd122f89-7f19-43b6-939b-57376fe17337&quot;)];
    var termSet = group.TermSets[new Guid(&quot;1a44f71c-ba9f-43dd-b4ad-7915b7ad6bac&quot;)];
    foreach (var term in termSet.Terms)
    {
        simpleUrl = string.Empty;
        if(term.LocalCustomProperties.TryGetValue(&quot;_Sys_Nav_SimpleLinkUrl&quot;, out simpleUrl))
            RenderSuiteLink(writer, simpleUrl , term.GetDefaultLabel(lcid), &quot;Shell&quot; + term.Id, false);
    }
}
</pre>
<p>Dieser Codeblock baut eine Verbindung zum Termstore Manager auf und lädt alle Terms innerhalb einer Gruppe und eines Termsets mit einer bestimmten ID <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Anschließend wird für jeden Term geprüft ob eine URL hinterlegt wurde. Sollte dies der Fall sein, so wird in Abhängigkeit der aktuellen Sprache die Standardbezeichnung des Terms geholt und der Link gerendert.</p>
<p>Rufen wir das Ergebnis im Browser auf, so ergibt sich folgendes Bild:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/Result.jpg" rel="shadowbox[sbpost-1678];player=img;" title="Result"><img class="alignnone size-full wp-image-1698" title="Result" src="http://msscorner.de/wp-content/uploads/2013/04/Result.jpg" alt="" width="471" height="96" /></a></p>
<p>Die Terms die vor wenigen Minuten noch in den Termstore Manager eingepflegt wurden, erstrahlen nun in Form von SuiteLinks. Es können damit jederzeit Änderungen im Termstore Manager vorgenommen werden, welche sich direkt auf die gerenderten SuiteLinks auswirken.</p>
<h1>Fazit</h1>
<p>Das <strong>SuiteLinks </strong>und <strong>Managed Navigation</strong> in SharePoint 2013 viel gefragte Themen sind, können sich bestimmt viele Denken. Von daher ist es um so effektiver diese 2 Sachen miteinander zu vereinen und den Nutzern die größtmögliche Flexibilität zu bieten. Dieses Beispiel hat gezeigt, dass mit relativ wenig Aufwand gepflegte Terms aus dem Termstore Manager ausgelesen und als SuiteLinks dargestellt werden können. Diese Lösung funktioniert auch Site Collection bzw. Web Application übergreifend und bringt somit einen Mehrwert in Intranets mit eventueller MySite.</p>
<p>Dieser Ansatz kann auch mit JavaScript realisiert und somit als App bereitgestellt werden. Dazu könnte Ihr <a href="http://blog.mastykarz.nl/building-global-navigation-sharepoint-2013/">hier </a>mehr erfahren.</p>
<p>Ich hoffe dieser Artikel hat euch gefallen und ich freue mich wie immer auf Feedback <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/04/15/managed-suite-navigation-compare-managed-navigation-and-suite-links-functionality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where is in SharePoint 2013 the Breadcrumb? Here it is!</title>
		<link>http://msscorner.de/2013/04/04/where-is-in-sharepoint-2013-the-breadcrumb-here-it-is/</link>
		<comments>http://msscorner.de/2013/04/04/where-is-in-sharepoint-2013-the-breadcrumb-here-it-is/#comments</comments>
		<pubDate>Thu, 04 Apr 2013 17:01:21 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SharePoint 2013]]></category>
		<category><![CDATA[WSP]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1658</guid>
		<description><![CDATA[Das neue Modern UI Design steht SharePoint 2013 in meinen Augen richtig gut. Es wirkt alles viel aufgeräumter Aber in mancher Hinsicht im Vergleich zu SharePoint 2010 auch zu aufgeräumt. Denn die Breadcrumb wird standardmäßig nicht mehr angezeigt. Es gibt aber 2 Möglichkeiten diese wieder anzeigen zu lassen, welche nun im Detail beschrieben werden. Modify [...]]]></description>
			<content:encoded><![CDATA[<p>Das neue <strong>Modern UI</strong> Design steht SharePoint 2013 in meinen Augen richtig gut. Es wirkt alles viel aufgeräumter <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Aber in mancher Hinsicht im Vergleich zu SharePoint 2010 auch zu aufgeräumt. Denn die <strong>Breadcrumb </strong>wird standardmäßig nicht mehr angezeigt.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/DefaultSP2013.jpg" rel="shadowbox[sbpost-1658];player=img;" title="DefaultSP2013"><img class="alignnone size-full wp-image-1659" title="DefaultSP2013" src="http://msscorner.de/wp-content/uploads/2013/04/DefaultSP2013.jpg" alt="" width="369" height="171" /></a></p>
<p>Es gibt aber 2 Möglichkeiten diese wieder anzeigen zu lassen, welche nun im Detail beschrieben werden.</p>
<h1>Modify Master Page</h1>
<p>Die gewünschte Master Page entweder mit dem SharePoint Designer oder eine Kopie aus der Master Page Gallery herunterladen und mit einem Editor bearbeiten. Dabei muss folgender Codeblock angepasst werden, sodass kein <em>visible=false</em> oder <em>display:none</em> mehr enthalten ist.<span id="more-1658"></span></p>
<p><strong>Vorher:</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;ms-breadcrumb-dropdownBox&quot; style=&quot;display:none;&quot;&gt;
&lt;SharePoint:AjaxDelta id=&quot;DeltaBreadcrumbDropdown&quot; runat=&quot;server&quot;&gt;
	&lt;SharePoint:PopoutMenu
		Visible=&quot;false&quot;
		runat=&quot;server&quot;
		ID=&quot;GlobalBreadCrumbNavPopout&quot; ...
</pre>
<p><strong>Nachher:</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;ms-breadcrumb-dropdownBox&quot;&gt;
&lt;SharePoint:AjaxDelta id=&quot;DeltaBreadcrumbDropdown&quot; runat=&quot;server&quot;&gt;
	&lt;SharePoint:PopoutMenu
		runat=&quot;server&quot;
		ID=&quot;GlobalBreadCrumbNavPopout&quot; ...
</pre>
<p>Anschließend die Änderungen in SharePoint bereitstellen und gegebenenfalls veröffentlichen.</p>
<h1>Using Delegate Control</h1>
<p>Wenn die Master Page nicht angepasst werden soll, so können die Änderungen auch programmatisch mit einem Delegate Control umgesetzt werden. Dazu mittels Visual Studio eine <strong>SharePoint 2013 Farm Solution</strong> erstellen und ein Delegate Control hinzufügen. Das Delegate Control sollte im <strong>AdditionalPageHead </strong>platziert und im CodeBehind folgender Code eingefügt werden:</p>
<pre class="brush: csharp; title: ; notranslate">
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    this.Page.PreRender += new EventHandler(Page_PreRender);
}

void Page_PreRender(object sender, EventArgs e)
{
    var masterPage = this.Page.Master;
    if (masterPage == null)
        return;
    var delta = masterPage.FindControl(&quot;DeltaBreadcrumbDropdown&quot;) as AjaxDelta;
    if (delta != null)
    {
        var breadcrumb = delta.FindControl(&quot;GlobalBreadCrumbNavPopout&quot;) as PopoutMenu;
        if (breadcrumb != null)
        {
            breadcrumb.Visible = true;
            breadcrumb.ThemeKey = &quot;spcommon&quot;;
            breadcrumb.IconUrl = &quot;/_layouts/15/images/spcommon.png&quot;;
            this.Page.Header.Controls.Add(new LiteralControl(&quot;&lt;style type=\&quot;text/css\&quot;&gt;.ms-breadcrumb-dropdownBox { display: inline-block !important; }&lt;/style&gt;&quot;));
        }
    }
}
</pre>
<p>Anschließend das Delegate Control einem Feature vom Scope <strong>Web Application</strong> oder <strong>Site</strong> zuweisen und deployen.</p>
<h1>Fazit</h1>
<p>Egal welche Variante verwendet wird, es ergibt sich daraus folgendes Resultat:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/Sp2013WithBreadcrumb.jpg" rel="shadowbox[sbpost-1658];player=img;" title="Sp2013 with Navigate Up Breadcrumb"><img class="alignnone size-full wp-image-1666" title="Sp2013 with Navigate Up Breadcrumb" src="http://msscorner.de/wp-content/uploads/2013/04/Sp2013WithBreadcrumb.jpg" alt="" width="376" height="167" /></a></p>
<p>Es wird die aus SharePoint 2010 bekannte Navigate Up Breadcrumb angezeigt <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Es ist zwar schade, dass die Breadcrumb standardmäßig ausgeblendet ist, aber dieser Artikel zeigt 2 einfache Möglichkeiten jene wieder einzublenden. Ich hoffe euch hilft dieser Artikel und wie immer freue ich mich über Feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/04/04/where-is-in-sharepoint-2013-the-breadcrumb-here-it-is/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint 2013 is social! But not enough!</title>
		<link>http://msscorner.de/2013/04/03/sharepoint-2013-is-social-but-not-enough/</link>
		<comments>http://msscorner.de/2013/04/03/sharepoint-2013-is-social-but-not-enough/#comments</comments>
		<pubDate>Wed, 03 Apr 2013 10:41:21 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Newsfeed]]></category>
		<category><![CDATA[SharePoint 2013]]></category>
		<category><![CDATA[Social]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1631</guid>
		<description><![CDATA[In SharePoint 2013 wurden erstmalig viele Social Funktionen eingeführt, die in der Vorgänger Version gefehlt haben. MicroBlogs, Likes, Follow etc. Und damit die Nutzer nicht den Überblick über Ihre Aktivitäten verlieren, bietet sich der neue Newsfeed auf der MySite an. Ähnlich wie bei Facebook oder Yammer, nur das in SharePoint immer zwangsweise auf die MySite navigiert werden muss, [...]]]></description>
			<content:encoded><![CDATA[<p>In SharePoint 2013 wurden erstmalig viele Social Funktionen eingeführt, die in der Vorgänger Version gefehlt haben. <strong>MicroBlogs, Likes, Follow etc.</strong></p>
<p>Und damit die Nutzer nicht den Überblick über Ihre Aktivitäten verlieren, bietet sich der neue Newsfeed auf der MySite an. Ähnlich wie bei Facebook oder Yammer, nur das in SharePoint immer zwangsweise auf die MySite navigiert werden muss, um sich die neusten Nachrichten, Mentions oder Aktivitäten anzusehen. Dadurch können wichtige Informationen sehr schnell verloren gehen, wenn ein Tag mal nicht die MySite benutzt wird.</p>
<p>Um dieses Problem zu vermeiden, müssen MySite Benachrichtigungen in die SharePoint Inhaltsseiten implementiert werden, um die zwei SharePoint Welten miteinander zu vereinen. Dies könnte wie folgt aussehen:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/04/PromotedLinkItem.jpg" rel="shadowbox[sbpost-1631];player=img;" title="Promoted Link Item"><img class="alignnone size-full wp-image-1637" title="Promoted Link Item" src="http://msscorner.de/wp-content/uploads/2013/04/PromotedLinkItem.jpg" alt="" width="762" height="176" /></a></p>
<p>In diesem Beispiel findet der Nutzer in den <strong>Promoted Actions</strong> ein Brief Symbol mit der Anzahl der ungelesenen <strong>Mentions</strong>. Sobald der Nutzer in einem weiteren Eintrag namentlich erwähnt wird, so erscheint eine Benachrichtigung ohne die Seite neuladen zu müssen. Klickt der Benutzer auf die Benachrichtigung oder das Symbol, so wird er zum Newsfeed weitergeleitet und kann sich die neuen Informationen einsehen.<span id="more-1631"></span></p>
<h1>Implementation</h1>
<p>In SharePoint 2013 kann diese Funktion auf unterschiedliche Art und Weise implementiert werden. Entweder serverseitig mittels C# oder unter der Verwendung des Client Object Models. Ich habe mich in diesem Fall für Variante 2 auf Basis von JavaScript entschieden.</p>
<p>Für die gezeigte Funktionalität muss sichergestellt sein, dass die folgenden JavaScript Dateien geladen wurden:</p>
<ul>
<li>SP.js</li>
<li>SP.UserProfiles.js</li>
</ul>
<p>Überprüft kann das ganze mittels <a href="http://msdn.microsoft.com/en-us/library/ff411788(v=office.14).aspx">ExecuteOrDelayUntilScriptLoaded</a>. Anschließend kann mit folgenden Script für den aktuellen Nutzer die Aktivitäten sowie die ungelesenen Mentions innerhalb eines gewissen Zeitraums ausgelesen werden:</p>
<pre class="brush: jscript; title: ; notranslate">
var activities;
var clientContext = SP.ClientContext.get_current();
var feedManager = new SP.Social.SocialFeedManager(clientContext);
var options = new SP.Social.SocialFeedOptions();
options.set_newerThan(new Date(&quot;03/22/2013&quot;));
options.set_olderThan(new Date());
options.set_sortOrder(SP.Social.SocialFeedSortOrder.byModifiedTime);
activities= feedManager.getFeed(SP.Social.SocialFeedType.news, options);
clientContext.load(feedManager);
clientContext.executeQueryAsync(function () {
            console.log(&quot;unread Mentions:&quot; + activities.get_unreadMentionCount());
            console.log(&quot;activities:&quot; + activities.get_threads().length);
        }, function () { console.log(&quot;error&quot;); });
</pre>
<p>Wird dieses Script ausgeführt, so erscheinen in der Konsole des Browsers 2 Ausschriften. Im nächsten Schritt kann man dieses Script in eine Methode auslagern und diese in einem bestimmten Intervall immer wieder aufrufen lassen. So erscheint dann im folgenden Beispiel immer aller 30 Sekunden die Ausschrift.</p>
<pre class="brush: jscript; title: ; notranslate">
setInterval(function () { loadMentions(); }, 30000);

function loadMentions() {
.....
}
</pre>
<p>Damit ist sichergestellt, dass der Nutzer auch bei Inaktivität über Neuigkeiten in seinem Newsfeed aller 30 Sekunden benachrichtigt wird.</p>
<p>Schließlich muss anstelle der Konsolenausschrift im Browser noch schicke SharePoint Benachrichtigungen angezeigt und das Symbol in den Promoted Links aktualisiert werden. Natürlich kann auch noch der Titel der Seite  angepasst werden, damit der Nutzer sieht in dem Browser Tab ist was passiert. Aber das ist das geringste Problem denke Ich <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h1>Fazit</h1>
<p>Microsoft hat einen großen und wichtigen Schritt mit SharePoint 2013 und den integrierten Social Funktionen getan, jedoch die 2 SharePoint Welten zu wenig mit einander integriert. Mir persönlich sind viele Informationen an mir vorbei gegangen, weil ich nicht stündlich mein Newsfeed durchforstet habe. Das war für mich der Grund etwas zu ändern und auch diese hier dargestellte Lösung zu entwickeln. Ähnlich wie bei Facebook oder Yammer erhalte ich auch auf SharePoint TeamSites Benachrichtigungen über eine neue Erwähnung oder eine wichtige Aktivität und kann mir diese mit einem Klick im Detail auf dem Newsfeed anschauen. Für mich und meine Kollegen ein großer Mehrwert <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ich hoffe euch hat dieser Artikel und die kleinen technischen Ausschnitte gefallen und freue mich über Feedback <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/04/03/sharepoint-2013-is-social-but-not-enough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Create a Multilingual SharePoint App using Resources &#8211; Part 2</title>
		<link>http://msscorner.de/2013/03/25/how-to-create-a-multilingual-sharepoint-app-using-resources-part-2-localized-javascript/</link>
		<comments>http://msscorner.de/2013/03/25/how-to-create-a-multilingual-sharepoint-app-using-resources-part-2-localized-javascript/#comments</comments>
		<pubDate>Mon, 25 Mar 2013 15:34:11 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1601</guid>
		<description><![CDATA[Da Mehrsprachigkeit immer wieder ein wichtiges Thema in der SharePoint Entwicklung ist, möchte ich an meinen vorangegangen Artikel zum Thema SharePoint-Apps anschließen. Nachdem ich gezeigt habe, wie Bezeichnungen von Apps und auch Custom Actions in Ressourcen ausgelagert werden können, folgt nun mehrsprachiges JavaScript. Als Ausgangspunkt setze ich wieder auf den Empfehlungen von Microsoft auf, welche in folgenden [...]]]></description>
			<content:encoded><![CDATA[<p>Da Mehrsprachigkeit immer wieder ein wichtiges Thema in der SharePoint Entwicklung ist, möchte ich an meinen <a href="http://msscorner.de/2013/03/11/how-to-create-a-multilingual-sharepoint-app-using-resources/">vorangegangen Artikel</a> zum Thema <strong>SharePoint-Apps</strong> anschließen. Nachdem ich gezeigt habe, wie Bezeichnungen von Apps und auch Custom Actions in Ressourcen ausgelagert werden können, folgt nun <strong>mehrsprachiges JavaScript</strong>.</p>
<p>Als Ausgangspunkt setze ich wieder auf den Empfehlungen von Microsoft auf, welche in <a href="http://msdn.microsoft.com/en-us/library/fp179919.aspx">folgenden Artikel</a> veröffentlicht wurden.</p>
<h1>Create a Multilingual App</h1>
<p>Zunächst erstelle Ich mit Visual Studio 2012 ein neues <strong>SharePoint 2013 App Projekt</strong> vom Typ <strong>SharePoint-Hosted App</strong>. Die Struktur meiner App sieht anschließend wie folgt aus:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/SolutionExplorer.jpg" rel="shadowbox[sbpost-1601];player=img;" title="Solution Explorer"><img class="alignnone size-full wp-image-1610" title="Solution Explorer" src="http://msscorner.de/wp-content/uploads/2013/03/SolutionExplorer.jpg" alt="" width="272" height="229" /></a></p>
<p>Im nächsten Schritt erzeugen wir die benötigten Ressourcen auf Basis von JavaScript Dateien. Dazu im Ordner <strong>Scripts </strong>die benötigten JavaScript Dateien nach folgender Namenskonvention hinzufügen.<span id="more-1601"></span></p>
<p style="padding-left: 30px;"><strong>Resources.LL-CC.js </strong>(LL = Language, CC = Country)</p>
<p style="padding-left: 30px;"><em>Example: Resources.en-US.js </em></p>
<p>Als Fallback habe ich noch eine neutrale Ressource <em>Resources.js</em> hinzugefügt, da ich nicht jede Sprachvariante unterstützen kann. Mein Ordner <strong>Scripts</strong> sieht anschließend wie folgt aus:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/SolutionExplorerScripts.jpg" rel="shadowbox[sbpost-1601];player=img;" title="Solution Explorer Scripts"><img class="alignnone size-full wp-image-1613" title="Solution Explorer Scripts" src="http://msscorner.de/wp-content/uploads/2013/03/SolutionExplorerScripts.jpg" alt="" width="204" height="174" /></a></p>
<p>Nun gilt es, diese Ressourcen Dateien mit Informationen zu befüllen. Microsoft selber erstellt für jeden Ressourceneintrag eine eigene JavaScript Variable. Ich hingegen bevorzuge den Objektorientierten Ansatz, welcher wie folgt aussieht:</p>
<pre class="brush: jscript; title: ; notranslate">
_EnsureJSNamespace('msscorner');
msscorner.Resources = {Welcome:'Willkommen', Error:'Es ist ein Fehler aufgetreten'}
</pre>
<p>Diese Zeilen JavaScript müssen in jede Ressourcen Datei mit den dementsprechenden Übersetzungen eingefügt werden.</p>
<p>Im weiteren Schritt gilt es, diese JavaScript Dateien zu referenzieren. Dazu in die <em>Default.aspx </em>navigieren und folgende Zeile einbinden:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;../scripts/Resources.&lt;SharePoint:EncodedLiteral runat='server' text='&lt;%$Resources:wss,language_value%&gt;' EncodeMethod='HtmlEncode' /&gt;.js&quot;&gt;&lt;/script&gt;
</pre>
<p>In Abhängigkeit der aktuellen Sprache wird versucht die dementsprechende Ressourcen Datei zu laden. Jedoch kann auch aktuell eine Sprache ausgewählt sein, für die keine Ressourcen Datei hinterlegt wurde. Und genau an dieser Stelle gibt es bei den Empfehlungen von Microsoft Probleme. Daher habe ich mir Gedanken über einen möglichen Fallback Mechanismus gemacht und bin auf folgende Lösung gekommen. Nachdem die App geladen wurde, überprüfe ich mit JavaScript in der <em>App.js </em>ob meine Ressourcen geladen wurden und lade gegebenenfalls meine Fallback Ressource nach. Der Code dafür schaut wie folgt aus:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function () {
    if (typeof (msscorner) == &quot;undefined&quot; || msscorner == null) {
        $.getScript(&quot;../scripts/Resources.js&quot;, function () {
            OnInit();
        })
    } else {
        OnInit();
    }
});

function OnInit() {
    //your code
    context = SP.ClientContext.get_current();
    web = context.get_web();
    getUserName();
}
</pre>
<p>Es wird überprüft ob mein erstellter Namespace <em>msscorner</em> verfügbar ist oder anderenfalls eine Fallback Ressource nachgeladen. Danach ist sichergestellt, dass die Ressourcen geladen wurden und es wird die Methode <strong>OnInit</strong> aufgerufen, in welcher der restliche Code ausgeführt wird.</p>
<p>Im weiteren Verlauf kann schließlich wie folgt auf die einzelnen Ressourceneintrage an Hand des Namespaces zugegriffen werden:</p>
<pre class="brush: jscript; title: ; notranslate">
$('#message').text(msscorner.Resources.Welcome + ' ' + user.get_title());
</pre>
<p>Ich habe bei mir deutsche Ressourcen hinterlegt, rufe jedoch die App von einer englischen Website her auf. Es müsste demnach die Fallback Ressource mit englischen Beschriftungen geladen werden. Im Browser ergibt sich dann folgendes Resultat:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/App.jpg" rel="shadowbox[sbpost-1601];player=img;" title="App"><img class="alignnone size-full wp-image-1623" title="App" src="http://msscorner.de/wp-content/uploads/2013/03/App.jpg" alt="" width="368" height="232" /></a></p>
<p>It Works <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  !</p>
<h1>Fazit</h1>
<p>Microsoft selber hat mit den veröffentlichen Artikel einen guten Guide zum Thema Mehrsprachige Apps unter SharePoint 2013 geschaffen. Mir persönlich gefällt die objektorientierte Struktur bei Ressourcen besser als die von Microsoft beschriebene Herangehensweise mit einzelnen JavaScript Variablen. Da ich in meinen Projekten öfters das Problem mit Fallback Ressourcen habe, bin ich sehr schnell über dieses Problem gestolpert und hoffe euch mit diesen Artikel geholfen zu haben <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/03/25/how-to-create-a-multilingual-sharepoint-app-using-resources-part-2-localized-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Feature Comparison for SharePoint 2013 Online and On-Premise</title>
		<link>http://msscorner.de/2013/03/21/feature-comparison-for-sharepoint-2013-online-and-on-premise/</link>
		<comments>http://msscorner.de/2013/03/21/feature-comparison-for-sharepoint-2013-online-and-on-premise/#comments</comments>
		<pubDate>Thu, 21 Mar 2013 18:21:16 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft SharePoint 2013]]></category>
		<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1598</guid>
		<description><![CDATA[Lange habe Ich nach einer vernünftigen Auflistung aller SharePoint 2013 Features in Abhängigkeit der Art von SharePoint (Online vs. On-Premise) gesucht. Meinen Fund möchte ich euch natürlich nicht vorenthalten und empfehle daher folgende offizielle Ressource von Microsoft: http://technet.microsoft.com/en-us/library/jj819267.aspx In dieser Übersicht wird auch gezeigt, dass SharePoint Online nicht gleich SharePoint Online ist. Auf Feature Ebene [...]]]></description>
			<content:encoded><![CDATA[<p>Lange habe Ich nach einer vernünftigen Auflistung aller SharePoint 2013 Features in Abhängigkeit der Art von SharePoint (Online vs. On-Premise) gesucht. Meinen Fund möchte ich euch natürlich nicht vorenthalten und empfehle daher folgende offizielle Ressource von Microsoft:</p>
<p><a href="http://technet.microsoft.com/en-us/library/jj819267.aspx">http://technet.microsoft.com/en-us/library/jj819267.aspx</a></p>
<p>In dieser Übersicht wird auch gezeigt, dass SharePoint Online nicht gleich SharePoint Online ist. Auf Feature Ebene werden die einzelnen Unterschiede sichtbar und auch bei der Anzahl der  Nutzer sind Limits für die einzelnen SharePoint Online Ausprägungen gesetzt.</p>
<p>Mir persönlich hilft dieser Überblick enorm und wie immer bin ich auf euer Feedback sehr gespannt <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/03/21/feature-comparison-for-sharepoint-2013-online-and-on-premise/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Create a Multilingual SharePoint App using Resources</title>
		<link>http://msscorner.de/2013/03/11/how-to-create-a-multilingual-sharepoint-app-using-resources/</link>
		<comments>http://msscorner.de/2013/03/11/how-to-create-a-multilingual-sharepoint-app-using-resources/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 15:55:58 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1555</guid>
		<description><![CDATA[Mehrsprachigkeit war bereits bei der Entwicklung für SharePoint 2010 ein Thema und damit natürlich auch für SharePoint 2013. Microsoft selber hat ein Artikel veröffentlicht, wie mehrsprachige Apps erstellt werden können. Jedoch beschreibt der Artikel Schritte, wo man sich fragt, wie diese mit dem TFS Teambuild realisiert werden sollen. Es handelt sich dabei um Schritte wie [...]]]></description>
			<content:encoded><![CDATA[<p>Mehrsprachigkeit war bereits bei der Entwicklung für SharePoint 2010 ein Thema und damit natürlich auch für SharePoint 2013. Microsoft selber hat ein <a href="http://msdn.microsoft.com/en-us/library/fp179919.aspx">Artikel veröffentlicht</a>, wie mehrsprachige Apps erstellt werden können. Jedoch beschreibt der Artikel Schritte, wo man sich fragt, wie diese mit dem TFS Teambuild realisiert werden sollen. Es handelt sich dabei um Schritte wie</p>
<ul>
<li>App Package entpacken</li>
<li>Resx Files manuell hinzufügen</li>
<li>gewisse Manifest und Feature Dateien manuell anpassen</li>
<li>App Package packen</li>
</ul>
<p>Ich habe eigentlich erwartet, dass das hinzufügen von Ressourcen und das Setzen von Verweisen automatisch über das Visual Studio oder den TFS beim paketieren passiert. Aber hier zeigt sich, dass die App Entwicklung für SharePoint 2013 nicht ganz trivial ist. Da ich mich aber mit dieser Lösung von Microsoft nicht zufrieden geben wollte, hier ein Ansatz mit dem keine bzw. nur eine manuelle Anpassung notwendig ist.</p>
<h1>Create a Multilingual App</h1>
<p>Zunächst erstelle Ich mit Visual Studio 2012 ein neues <strong>SharePoint 2013 App Projekt</strong> vom Typ <strong>SharePoint-Hosted App</strong>. Die Struktur meiner App sieht anschließend wie folgt aus:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/AppStructure.jpg" rel="shadowbox[sbpost-1555];player=img;" title="AppStructure"><img class="alignnone size-full wp-image-1567" title="AppStructure" src="http://msscorner.de/wp-content/uploads/2013/03/AppStructure.jpg" alt="" width="282" height="226" /></a></p>
<p>Im nächsten Schritt erzeugen wir die notwendigen Ressourcen. Dazu die <em>AppManifest.xml</em> in der Designview öffnen und im Tab <strong>Supported Locales</strong> die gewünschten Sprachen hinzufügen.<span id="more-1555"></span></p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/AddRessources1.jpg" rel="shadowbox[sbpost-1555];player=img;" title="AddRessources"><img class="alignnone size-full wp-image-1572" title="AddRessources" src="http://msscorner.de/wp-content/uploads/2013/03/AddRessources1.jpg" alt="" width="519" height="294" /></a></p>
<p>Damit wurde für die gewünschten Sprachen einzelne Ressourcen Dateien inklusive einer Fallback Variante angelegt. Darin kann nun der Titel der App ausgelagert und in der Codeview der <em>AppManifest.xml </em>muss dann der Titel wie folgt gesetzt werden.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;Title&gt;$Resources:appTitle;&lt;/Title&gt;
</pre>
<p>Stellt man diese App in SharePoint bereit, so ergibt sich folgendes Bild:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/AppInSharePoint.jpg" rel="shadowbox[sbpost-1555];player=img;" title="AppInSharePoint"><img class="alignnone size-full wp-image-1579" title="AppInSharePoint" src="http://msscorner.de/wp-content/uploads/2013/03/AppInSharePoint.jpg" alt="" width="538" height="346" /></a></p>
<p>Es ist zu sehen, dass die Bezeichnungen aus den Ressourcen stammen. Da allerdings im Company Store für die App eine Metadatensprache definiert werden muss, erscheint in der Navigation daher die englische Bezeichnung. Die Metadatensprache bestimmt, in welcher Sprache die Informationen der App im Store angezeigt werden.</p>
<h1>Adding a Custom Action</h1>
<p>Es bietet sich an, eine App mittels einer Custom Action zu Erweitern um diese somit besser in SharePoint 2013 zu integrieren. Jedoch kann dabei nicht ganz so einfach auf die erstellten Ressourcen zu gegriffen werden. Doch zunächst fügen wir der App eine <strong>Ribbon Custom Action</strong> hinzu. Mein Ribbon für meine Custom List sieht in diesem Fall wie folgt aus:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;Elements xmlns=&quot;http://schemas.microsoft.com/sharepoint/&quot;&gt;
  &lt;CustomAction Id=&quot;adfd1f17-a890-49b9-8d73-9fbd7a35c94b.CustomAction&quot;
                RegistrationType=&quot;List&quot;
                RegistrationId=&quot;100&quot;
                Location=&quot;CommandUI.Ribbon&quot;
                Sequence=&quot;10001&quot;
                Title=&quot;$Resources:_Res,caTitle;&quot;
                HostWebDialog=&quot;TRUE&quot;
                HostWebDialogHeight=&quot;100&quot;
                HostWebDialogWidth=&quot;480&quot;&gt;
    &lt;CommandUIExtension&gt;
      &lt;CommandUIDefinitions&gt;
        &lt;CommandUIDefinition Location=&quot;Ribbon.List.Settings.Controls._children&quot;&gt;
          &lt;Button Id=&quot;Ribbon.List.Settings.CustomActionButton&quot;
                  Alt=&quot;$Resources:_Res,caTitle&quot;
                  Sequence=&quot;100&quot;
                  Command=&quot;CARequest&quot;
                  LabelText=&quot;$Resources:_Res,caTitle;&quot;
                  Description=&quot;$Resources:_Res,caDesc;&quot;
                  TemplateAlias=&quot;o1&quot;
                  Image32by32=&quot;_layouts/15/images/placeholder32x32.png&quot;
                  Image16by16=&quot;_layouts/15/images/placeholder16x16.png&quot; /&gt;
        &lt;/CommandUIDefinition&gt;
      &lt;/CommandUIDefinitions&gt;
      &lt;CommandUIHandlers&gt;
        &lt;CommandUIHandler Command=&quot;CARequest&quot;
                          CommandAction=&quot;~appWebUrl/Pages/Default.aspx&quot;/&gt;
      &lt;/CommandUIHandlers&gt;
    &lt;/CommandUIExtension &gt;
  &lt;/CustomAction&gt;
&lt;/Elements&gt;
</pre>
<p>Die Bezeichnung und Beschreibung für die Custom Action wurden in Ressourcen ausgelagert und die Verweise gesetzt. Beim Aufruf dieser Custom Action soll ein Dialog mit der Default Page der App erscheinen. Wenn wir diese App im SharePoint bereitstellen und in eine Custom List navigieren, so sieht das Resultat wie folgt aus:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/AppCustomAction.jpg" rel="shadowbox[sbpost-1555];player=img;" title="AppCustomAction"><img class="alignnone size-full wp-image-1588" title="AppCustomAction" src="http://msscorner.de/wp-content/uploads/2013/03/AppCustomAction.jpg" alt="" width="706" height="397" /></a></p>
<p>Die Ressourcen werden zwar nicht aufgelöst, aber dafür die App Page im Dialog angezeigt. Passen wir aber das App Package manuell an, so können wir dieses Problem mit den Ressourcen beheben, da ein Verweis nicht gesetzt wird. Dazu muss zunächst die App paketiert werden und sichergestellt sein, dass Winzip auf dem Rechner installiert ist. Ist dies sichergestellt, so müssen anschließend folgende Schritte durchgeführt werden:</p>
<ul>
<li>Das App Package mit WinZip öffnen und im Ordner <strong>_rels</strong> die <strong>AppManifest.xml.res</strong> öffnen</li>
<li>Die folgenden Relationship Einträge für die Ressourcen suchen und kopieren.</li>
</ul>
<pre class="brush: xml; title: ; notranslate">
&lt;Relationship Type=&quot;http://schemas.microsoft.com/sharepoint/2012/app/relationships/content-defaultresource&quot; Target=&quot;/Resources.resx&quot; Id=&quot;R584e73144fd34ef1&quot; /&gt;
&lt;Relationship Type=&quot;http://schemas.microsoft.com/sharepoint/2012/app/relationships/content-resource&quot; Target=&quot;/Resources.en-US.resx&quot; Id=&quot;Ra4724a7f504b4876&quot; /&gt;
&lt;Relationship Type=&quot;http://schemas.microsoft.com/sharepoint/2012/app/relationships/content-resource&quot; Target=&quot;/Resources.de-DE.resx&quot; Id=&quot;Rba23b9da54ba40a5&quot; /&gt;
</pre>
<ul>
<li>Im Ordner <strong>_rels </strong>die <strong>Feature&lt;Guid&gt;.xml.rels </strong>Dateien öffnen und die kopierten Zeilen einfügen</li>
<li>Das Archiv mit Änderungen aktualisieren und speichern</li>
</ul>
<p>Nun haben wir das App Package manuell angepasst und es kann über den Company Store bereitgestellt werden. Rufen wir danach die App im SharePoint in einer Custom List auf, so erscheint folgendes Resultat:</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/AppCustomActionWithRessources.jpg" rel="shadowbox[sbpost-1555];player=img;" title="AppCustomActionWithRessources"><img class="alignnone size-full wp-image-1590" title="AppCustomActionWithRessources" src="http://msscorner.de/wp-content/uploads/2013/03/AppCustomActionWithRessources.jpg" alt="" width="794" height="428" /></a></p>
<p>Die Ressourceneinträge werden diesmal aufgelöst und die App Page öffnet sich natürlich weiterhin im Dialog.</p>
<h1>Fazit</h1>
<p>Es ist möglich eine App mit Ressourcen bereitzustellen. Jedoch sollte sich vorher Gedanken gemacht werden, ob dies auch wirklich sinnvoll ist. Denn der App Store und der Company Store ist dafür ausgelegt, dass die Informationen zu einer App immer in einer Sprache angezeigt werden. Es handelt sich dabei um die Metadatensprache. Lediglich Bezeichnungen von Custom Actions werden in Abhängigkeit der aktuellen Sprache angezeigt. Trotzdem hoffe ich, dass euch der Artikel geholfen hat und freue mich wie immer über Feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/03/11/how-to-create-a-multilingual-sharepoint-app-using-resources/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fehlende Site Templates in SharePoint 2013</title>
		<link>http://msscorner.de/2013/03/05/fehlende-site-templates-in-sharepoint-2013/</link>
		<comments>http://msscorner.de/2013/03/05/fehlende-site-templates-in-sharepoint-2013/#comments</comments>
		<pubDate>Tue, 05 Mar 2013 08:13:04 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1519</guid>
		<description><![CDATA[Wer in SharePoint 2013 bereits eine Site Collection erstellt hat, wird bemerkt haben, dass viele aus SharePoint 2010 bekannte Site Templates nicht mehr zur Verfügung stehen. Ein Beispiel ist das Einsteiger Template Blank Site, welches über die Oberfläche nicht mehr zur Verfügung steht. Wer aber auf eines der fehlenden Site Templates nicht verzichten kann, kann [...]]]></description>
			<content:encoded><![CDATA[<p>Wer in SharePoint 2013 bereits eine Site Collection erstellt hat, wird bemerkt haben, dass viele aus SharePoint 2010 bekannte Site Templates nicht mehr zur Verfügung stehen. Ein Beispiel ist das Einsteiger Template <strong>Blank Site</strong>, welches über die Oberfläche nicht mehr zur Verfügung steht.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/02/SP2013DefaultSiteTemplates.jpg" rel="shadowbox[sbpost-1519];player=img;" title="SP2013 Default Site Templates"><img class="alignnone size-full wp-image-1524" title="SP2013 Default Site Templates" src="http://msscorner.de/wp-content/uploads/2013/02/SP2013DefaultSiteTemplates.jpg" alt="" width="547" height="414" /></a></p>
<p>Wer aber auf eines der fehlenden Site Templates nicht verzichten kann, kann sich einer dieser hier dargestellten Tricks bedienen. Jedoch muss zuvor erwähnt werden, dass die Site Templates nicht ohne Grund nicht mehr über die Oberfläche zur Verfügung stehen. Mehr dazu aber später <img src='http://msscorner.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  .<span id="more-1519"></span></p>
<h1>Using PowerShell</h1>
<p>Lässt man sich über PowerShell die zur Verfügung stehenden Site Templates über den folgenden Befehl ausgeben, so erscheint eine sehr lange Liste.</p>
<pre class="brush: powershell; title: ; notranslate">
Get-SPWebTemplate
</pre>
<p>Betrachtet man diese Liste etwas genauer, so fallen in der Oberfläche alle fehlenden Site Templates auf.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/SP2013AllSiteTemplates.jpg" rel="shadowbox[sbpost-1519];player=img;" title="SP2013AllSiteTemplates"><img class="alignnone size-full wp-image-1532" title="SP2013AllSiteTemplates" src="http://msscorner.de/wp-content/uploads/2013/03/SP2013AllSiteTemplates.jpg" alt="" width="241" height="415" /></a></p>
<p>Auf Basis dieser Liste kann anhand des Namen des Site Templates eine neue Website erstellt werden. Dazu folgende Zeilen PowerShell ausführen:</p>
<pre class="brush: powershell; title: ; notranslate">
$template = Get-SPWebTemplate &quot;STS#1&quot;
New-SPSite -Url &quot;&lt;Site URL&gt;&quot; -OwnerAlias &quot;&lt;domain\user&gt;&quot; -Template $template
</pre>
<p>Damit ist es Möglich, eine Site auf Basis eines über die Oberfläche nicht zur Verfügung stehenden Template zu erstellen.</p>
<h1>Modify WEBTEMP.xml</h1>
<p>Die ausgeblendeten Site Templates können natürlich auch in der Oberfläche wieder bereitgestellt werden. Dazu einfach die <em>WEBTEMP.xml</em> in folgendem Pfad mit einem Editor öffnen.</p>
<p style="padding-left: 30px;">C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\1033\XML\</p>
<p>Anschließend die gewünschten Site Templates suchen und das Attribute <strong>Hidden</strong>=&#8221;TRUE&#8221; auf <strong>Hidden</strong>=&#8221;FALSE&#8221; setzen. Für die Blank Site sieht das anschließend wie folgt aus:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;Configuration ID=&quot;1&quot; Title=&quot;Blank Site&quot; Hidden=&quot;FALSE&quot; ImageUrl=&quot;/_layouts/15/images/stbs.png?rev=23&quot; Description=&quot;A blank site for you to customize based on your requirements.&quot; DisplayCategory=&quot;Collaboration&quot; AllowGlobalFeatureAssociations=&quot;False&quot; &gt;&lt;/Configuration&gt;
</pre>
<p>Erstellt man über die Oberfläche eine neue Site Collection, so steht nach dieser Änderung das Site Template Blank Site wieder zur Verfügung.</p>
<p><a href="http://msscorner.de/wp-content/uploads/2013/03/Sp2013BlankSite.jpg" rel="shadowbox[sbpost-1519];player=img;" title="Sp2013BlankSite"><img class="alignnone size-full wp-image-1543" title="Sp2013BlankSite" src="http://msscorner.de/wp-content/uploads/2013/03/Sp2013BlankSite.jpg" alt="" width="536" height="422" /></a></p>
<h1>Microsoft says</h1>
<blockquote><p><strong>Meeting Workspace site templates</strong></p>
<p><strong>Description:</strong> When you create a site in SharePoint 2013, all five of the Meeting Workspace site templates are not available. This includes the Basic Meeting Workspace, Blank Meeting Workspace, Decision Meeting Workspace, Social Meeting Workspace, and Multipage Meeting Workspace.</p>
<p><strong>Reason for change:</strong> SharePoint 2013 and Office 2013 provide other features that support meetings and collaboration. For example, you can use Lync to conduct live meetings, OneNote to take notes during meetings, and a SharePoint team site or My Site to store shared meeting notes.</p>
<p><strong>Migration path:</strong> Existing sites that were created by using the Meeting Workspace site templates will continue to operate in SharePoint 2013. The Meeting Workspace site templates will be removed completely from the next major release of SharePoint and sites that were created by using the Meeting Workspace site templates will not be supported.</p></blockquote>
<blockquote><p><strong>Document Workspace site template</strong></p>
<div>
<p><strong>Description:</strong> When you create a site in SharePoint 2013, the Document Workspace site template is not available.</p>
<p><strong>Reason for change:</strong> The scenario of collaborating on a document is now provided by the Team Site site template. The Document Workspace site template was removed from SharePoint 2013 to simplify the list of templates that are available when a user creates a new site collection.</p>
<p><strong>Migration path:</strong> Existing sites that were created by using the Document Workspace site template will continue to operate in SharePoint 2013. The Document Workspace site template will be removed completely from the next major release of SharePoint and sites that were created by using the Document Workspace site template will not be supported.</p>
</div>
</blockquote>
<div>
<h1>Fazit</h1>
<p>Dieser Artikel zeigt, dass es möglich ist alte Site Templates weiterhin zu verwenden. Jedoch sollte man davon in Zukunft absehen, da in der nächsten SharePoint Version nicht mehr alle Templates mit ausgeliefert werden und es somit zu Problemen führen kann. Ich hoffe trotzdem ich konnte euch damit einen kleinen Überblick geben.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/03/05/fehlende-site-templates-in-sharepoint-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint 2013 &#8211;  Option &#8220;Sign in as Different User&#8221; is missing</title>
		<link>http://msscorner.de/2013/02/06/sharepoint-2013-option-sign-in-as-different-user-is-missing/</link>
		<comments>http://msscorner.de/2013/02/06/sharepoint-2013-option-sign-in-as-different-user-is-missing/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 15:38:55 +0000</pubDate>
		<dc:creator>Falco Ostermann</dc:creator>
				<category><![CDATA[Microsoft Technologien]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://msscorner.de/?p=1506</guid>
		<description><![CDATA[Die erste große Enttäuschung in SharePoint 2013 aus Sicht eines Entwicklers ist die Fehlende Option &#8220;Als anderen Nutzer anmelden&#8221;. Besonders bei Eigenentwicklungen ist es für mich wichtig, den Code mit unterschiedlichen Rechten zu testen und auch unterschiedliche Sichten auf gewissen Inhalt zu erhalten. Standardmäßig nun nicht mehr über das Menü möglich. Wer trotzdem nicht verzichten [...]]]></description>
			<content:encoded><![CDATA[<p>Die erste große Enttäuschung in SharePoint 2013 aus Sicht eines Entwicklers ist die Fehlende Option &#8220;Als anderen Nutzer anmelden&#8221;. Besonders bei Eigenentwicklungen ist es für mich wichtig, den Code mit unterschiedlichen Rechten zu testen und auch unterschiedliche Sichten auf gewissen Inhalt zu erhalten. Standardmäßig nun nicht mehr über das Menü möglich. Wer trotzdem nicht verzichten kann, hier 3 nützliche Helferlein, was das Entwicklerleben erleichtern soll <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h1>Option 1</h1>
<p>Den gewünschten Browser unter einer anderen Identität öffnen. Dazu die <strong>SHIFT</strong> Taste gedrückt halten und einen Rechtsklick auf das Browsersymbol. Es öffnet sich ein Kontextmenü mit der Option <strong>Als anderer Benutzer ausführen</strong>. Anschließend werden die Berechtigungen abgefragt und es öffnet sich der Browser unter der anderen Identität. Wenn SharePoint 2013 auf SingleSingOn Konfiguriert ist, so wird diese Identität verwendet.</p>
<h1>Option 2</h1>
<p>SharePoint ganz normal über den Browser aufrufen und durch folgende Url die Seite einfach mit einer neuen Identität besuchen:<span id="more-1506"></span></p>
<pre class="brush: xml; title: ; notranslate">

http://&lt;URL&gt;/_layouts/closeConnection.aspx?loginasanotheruser=true
</pre>
<p>Es erscheint daraufhin ein Fenster mit den neuen Nutzerinformationen. Anschließend erscheint die Seite in der neuen Identität.</p>
<h1>Option 3</h1>
<p>Den aus SharePoint 2010 bekannten Menüeintrag einfach manuell hinzufügen. Da es sich hierbei um eine Anpassung einer Systemdatei handelt empfiehle ich diesen Schritt nicht. Aber ich möchte euch diesen natürlich auch nicht vorenthalten.</p>
<p>Folgende Datei im Verzeichnis suchen und mit einem Editor öffnen:</p>
<p style="padding-left: 30px;">C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\CONTROLTEMPLATES\Welcome.ascx</p>
<p>Nun folgendes Element vor dem vorhandenen <strong>ID_RequestAccess</strong> Element einfügen:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;SharePoint:MenuItemTemplate runat=&quot;server&quot; ID=&quot;ID_LoginAsDifferentUser&quot;
Text=&quot;&lt;%$Resources:wss,personalactions_loginasdifferentuser%&gt;&quot;
 Description=&quot;&lt;%$Resources:wss,personalactions_loginasdifferentuserdescription%&gt;&quot;
 MenuGroupId=&quot;100&quot;
 Sequence=&quot;100&quot;
 UseShortId=&quot;true&quot;
 /&gt;
</pre>
<p>In manchen Fällen muss danach ein ApplicationPool Recycle oder IISReset durchgeführt werden, damit die Änderung wirksam wird.</p>
<h1>Fazit</h1>
<p>Ich war Anfangs sehr erstaunt, dass der Menüpunkt entfernt wurde. Nichts desto trotz gibt es Möglichkeiten sich weiterhin mit einer anderen Identität anzumelden. Da Microsoft auch einen <a href="http://support.microsoft.com/kb/2752600/de">offiziellen Artikel</a> zu diesem Problem veröffentlicht hat, kann es sich dabei vielleicht auch um einen Fehler handeln, welcher vielleicht mit kommenden Updates behoben wird. Wir können dahingehend nur gespannt in die Zukunft blicken und abwarten <img src='http://msscorner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://msscorner.de/2013/02/06/sharepoint-2013-option-sign-in-as-different-user-is-missing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
