<?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 Config</title>
	<atom:link href="http://www.sharepointconfig.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.sharepointconfig.com/</link>
	<description>Ari Bakker&#039;s thoughts on customising and configuring SharePoint</description>
	<lastBuildDate>Tue, 03 Nov 2020 21:44:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Automating SharePoint Online deployments using Octopus Deploy</title>
		<link>https://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/</link>
					<comments>https://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/#respond</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Tue, 03 Nov 2020 21:32:25 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1263</guid>

					<description><![CDATA[<p>The article <a href="https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread">Granting access via Azure AD App-Only</a> shows how to setup app-only access to SharePoint using an Azure AD app registration with a Certificate. This article will show how to extend this to work with an <a href="https://octopus.com/">Octopus Deploy</a> certificate variable and pipeline. </p>
<p><a href="http://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/"><img class="excerpt" title=“octopus deploy“ src="http://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-overview-690x329.png" border="0" alt=“octopus deploy“ /></a></p>
<p>The post <a href="https://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/">Automating SharePoint Online deployments using Octopus Deploy</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The article <a href="https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread">Granting access via Azure AD App-Only</a> shows how to setup app-only access to SharePoint using an Azure AD app registration with a Certificate. This article will show how to extend this to work with an <a href="https://octopus.com/">Octopus</a> certificate variable and pipeline.</p>
<h3>Background</h3>
<p>Using an App-Only approach to automate SharePoint Online deployments avoids the need to create user accounts in Azure AD for application identities. It also ensures the application always has access to all sites, and does not first need to be added as a user. If you are using Octopus Deploy in your organisation you may want to automate SharePoint Online tasks such as deploying SPFx packages using a pipeline or create an <a href="https://octopus.com/docs/runbooks">Octopus Runbook</a> to automate tasks such as creating a site collection based on a PnP provisioning template.</p>
<h3>How-to</h3>
<p>The basic steps to setup Azure AD App Only authentication for an Octopus Deploy pipeline are:</p>
<ul>
<li><strong>Create an Azure App Registration and upload the Certificate</strong> – This is covered in the article <a href="https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread">Granting access via Azure AD App-Only</a> and includes creating a certificate, Azure AD app registration, requesting API Permissions and adding the Certificate</li>
<li><strong>Create Octopus certificate variable</strong> – Using the certificate added above you can then <a href="https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread">create an Octopus certificate</a> and assign this to an Octopus variable</li>
<li><strong>Use the Certificate in an Octopus process/runbook</strong> – Assuming you have Octopus variables as follows:
<ul>
<li><strong>SharePointCertificate</strong> – certificate created above</li>
<li><strong>ClientId</strong> – the application/client ID of the Azure AD app registration created above</li>
<li><strong>Tenant</strong> – the name of the tenant e.g. contoso.com</li>
</ul>
</li>
</ul>
<p>You can create a deployment process that connects to SharePoint Online using the below approach:</p>
<ol>
<li>Add a step to your deployment process (or Runbook) using the ‘Run a Script’ template</li>
<li>In the Inline Source Code (or reference a script that does something similar) select PowerShell and enter the following:</li>
</ol>
<pre>if(!(Get-Module -ListAvailable -Name SharePointPnPPowerShellOnline))
{
    Install-Module SharePointPnPPowerShellOnline
}

$base64cert = "#{SharePointCertificate.Pfx}"
$azureApplicationId = "#{ClientId}"
$url = "#{SharePointUrl}"
$tenant = "#{Tenant}"

$secretByte = [Convert]::FromBase64String($base64cert)
$x509Cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2
$x509Cert.Import($secretByte, "", "Exportable,PersistKeySet")

Connect-PnPOnline -Url $url -Certificate $x509Cert -ClientId $azureApplicationId -Tenant $tenant
Get-PnPWeb


</pre>
<p><a href="http://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/octopus-process/" rel="attachment wp-att-1266"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-1266 size-large" src="http://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-process-690x546.png" alt="" width="690" height="546" srcset="https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-process-690x546.png 690w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-process-300x237.png 300w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-process-768x608.png 768w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-process.png 1027w" sizes="(max-width: 690px) 100vw, 690px" /></a></p>
<p>You should now be able to run the Octopus process and retrieve details of the current site using the Certificate/Azure AD App Only based authentication approach. You can then extend this using the other<a href="https://docs.microsoft.com/en-us/powershell/sharepoint/sharepoint-pnp/sharepoint-pnp-cmdlets?view=sharepoint-ps"> PnP PowerShell</a> commands to deploy SPFx packages, apply PnP Provisioning templates or any other automated deployment related tasks you wish.</p>
<p><a href="http://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/octopus-deployment/" rel="attachment wp-att-1264"><img decoding="async" class="size-large wp-image-1264 aligncenter" src="http://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-deployment-690x347.png" alt="" width="690" height="347" srcset="https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-deployment-690x347.png 690w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-deployment-300x151.png 300w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-deployment-768x386.png 768w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-deployment.png 1344w" sizes="(max-width: 690px) 100vw, 690px" /></a></p>
<p>You will need to give some consideration to how you secure the Certificates in production environments but Octopus does provide the ability to restrict the ability to view and/or export Certificates to authorised users, as well as allowing you to restrict access to deploy to certain environments.</p>
<p><a href="http://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/octopus-overview/" rel="attachment wp-att-1265"><img decoding="async" class="size-large wp-image-1265 aligncenter" src="http://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-overview-690x329.png" alt="" width="690" height="329" srcset="https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-overview-690x329.png 690w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-overview-300x143.png 300w, https://www.sharepointconfig.com/wp-content/uploads/2020/11/octopus-overview-768x367.png 768w" sizes="(max-width: 690px) 100vw, 690px" /></a></p>
     <p>The post <a href="https://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/">Automating SharePoint Online deployments using Octopus Deploy</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2020/11/automating-sharepoint-online-deployments-using-octopus-deploy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Configure Swagger to authenticate against Azure AD</title>
		<link>https://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/</link>
					<comments>https://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/#comments</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Mon, 27 Aug 2018 09:51:51 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1247</guid>

					<description><![CDATA[<p>If you are building a Web API secured by Azure AD you will need to authenticate to test the API. Configuring OAuth 2 in Swagger allows you to authenticate using the Swagger UI and test the API with the necessary authentication headers. The steps to configure this are: Create a Web API project Register an [&#8230;]</p>
<p>The post <a href="https://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/">Configure Swagger to authenticate against Azure AD</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you are building a Web API secured by Azure AD you will need to authenticate to test the API. Configuring OAuth 2 in Swagger allows you to authenticate using the Swagger UI and test the API with the necessary authentication headers.</p>
<p>The steps to configure this are:</p>
<ol>
<li>Create a Web API project</li>
<li>Register an Azure AD (AAD) app for the Web API</li>
<li>Update the Web API project to use Azure AD authentication</li>
<li>Register an AAD app for the Swagger web site</li>
<li>Grant permissions for the Swagger AAD app to access the Web API AAD app</li>
<li>Generate a Client Secret for the Swagger AAD app</li>
<li>Enable OAuth2 implicit flow on the Swagger AAD app</li>
<li>Add Swagger to the Web API project</li>
</ol>
<p>The example below is for a .NET Core 2.1 Web API application using Swashbuckle.AspNetCore 3.0.0:</p>
<h3>1. Create a Web API project</h3>
<p>The first step is to create a new Web API project either using Visual Studio or via the command line:</p>
<pre>md AspNetCore.AzureAd.Swagger
cd AspNetCore.AzureAd.Swagger
dotnet new webapi

</pre>
<p>If you open and run the project in Visual Studio you should see the values returned from the default controller.</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="values" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/values.png" alt="values" width="422" height="200" border="0" /></p>
<h3>2. Register an Azure AD (AAD) app for the Web API</h3>
<p>To authenticate against Azure AD you need to add an Azure AD app registration. This can be done via the Azure portal at <a href="http://portal.azure.com">http://portal.azure.com</a>.</p>
<p><a href="http://portal.azure.com">http://portal.azure.com</a> &gt; Azure Active Directory &gt; App Registrations &gt; New application registration</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2018/08/azure-app-registration.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="azure app registration" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/azure-app-registration_thumb.png" alt="azure app registration" width="515" height="484" border="0" /></a></p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="azure app registration details" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/azure-app-registration-details.png" alt="azure app registration details" width="318" height="294" border="0" /></p>
<p>When the app registration is complete copy the Application ID into notepad as we will need it later</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="azure app registration complete" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/azure-app-registration-complete.png" alt="azure app registration complete" width="589" height="233" border="0" /></p>
<h3>3. Update the Web API project to use Azure AD authentication</h3>
<p>Add the following nuget package</p>
<p>Microsoft.AspNetCore.Authentication.AzureAD.UI</p>
<p>In the Startup.cs file replace the ConfigureServices method with the following:</p>
<pre>services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme)
.AddAzureADBearer(options =&gt; Configuration.Bind("AzureAd", options));
</pre>
<pre>services.AddMvc(config =&gt;
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

</pre>
<p>This will require all requests to be authenticated.</p>
<p>Also in the Startup.cs file add the following to the Configure method (before the app.UseMvc() line):</p>
<pre>app.UseAuthentication();</pre>
<p>&nbsp;</p>
<p>In appsettings.json add the following (remember to move sensitive information out of here before committing to source control e.g. use manage user secrets):</p>
<pre>"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "&lt;Domain&gt;",
  "TenantId": "&lt;Directory ID&gt;",
  "ClientId": "&lt;Application ID&gt;"
},
"Swagger": {
  "ClientId": "&lt;Swagger:Application ID&gt;",
  "ClientSecret": "&lt;Swagger:Key Value&gt;"
}
</pre>
<p>Copy in the Application ID from step 2 into the ClientId value and grab the domain and directory from the Azure Portal as shown below:</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="azure directory settings" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/azure-directory-settings.png" alt="azure directory settings" width="359" height="497" border="0" /></p>
<p>In the ValuesController.cs file update the Get method to include the user name so we can verify the request has been authenticated:</p>
<pre>public ActionResult&lt;IEnumerable&lt;string&gt;&gt; Get()
{
  return new string[] { "value1", <strong>User.Identity.Name</strong> };
}</pre>
<p>&nbsp;</p>
<p>Run the application and verify it returns a 401 unauthorised error (as the browser doesn&#8217;t provide an authentication token):</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="values unauthorised" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/values-unauthorised.png" alt="values unauthorised" width="432" height="335" border="0" /></p>
<h3>4. Register an AAD app for the Swagger web site</h3>
<p>We will now add a AAD app for the Swagger web site and grant it permission to make requests into the Web API app.</p>
<p><a href="http://portal.azure.com">http://portal.azure.com</a> &gt; Azure Active Directory &gt; App Registrations &gt; New application registration. Enter the base URL for the project you created in step 1 followed by /swagger/oauth2-redirect.html in the Sign-on URL field.</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="azure swagger app registration" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/azure-swagger-app-registration.png" alt="azure swagger app registration" width="313" height="288" border="0" /></p>
<p>Copy the Application ID into the Swagger:ClientId setting in appsettings.json created in step 3</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="swagger app settings" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-app-settings.png" alt="swagger app settings" width="590" height="231" border="0" /></p>
<p>Settings &gt; Reply URLs &gt; Ensure there is a reply URL of https://localhost:&lt;web api port&gt;/swagger/oauth2-redirect.html</p>
<h3>5. Grant permissions for the Swagger AAD app to access the Web API AAD app</h3>
<p>Settings &gt; Required Permissions &gt; Add &gt; Select an API &gt; Search for ‘Web API’ and select this from the list</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2018/08/required-permissions.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="required permissions" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/required-permissions_thumb.png" alt="required permissions" width="644" height="106" border="0" /></a></p>
<p>Check ‘Access Web API’, click select, then click done</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2018/08/required-permissions-selected.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="required permissions selected" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/required-permissions-selected_thumb.png" alt="required permissions selected" width="644" height="180" border="0" /></a></p>
<h3>6. Generate a Client Secret for the Swagger AAD app</h3>
<p>Settings &gt; Keys &gt; Add a Key named ‘Key 1’ set to never expire and click Save. Copy the key value into the Swagger:ClientSecret setting in appsettings.config.</p>
<h3>7. Enable OAuth2 implicit flow on the Swagger AAD app</h3>
<p>Edit the manifest and change oauth2AllowImplicitFlow to true</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-app-manifest.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="swagger app manifest" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-app-manifest_thumb.png" alt="swagger app manifest" width="644" height="459" border="0" /></a></p>
<h3>8. Add Swagger to the Web API project</h3>
<p>Add the following nuget package swashbuckle.aspnetcore (this is tested with 3.0.0)</p>
<p>Add the following code to Startup.cs in the ConfigureServices method:</p>
<pre>services.AddSwaggerGen(c =&gt;
{
  c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
  c.AddSecurityDefinition("oauth2", new OAuth2Scheme
  {
    Type = "oauth2",
    Flow = "implicit",
    AuthorizationUrl = $"https://login.microsoftonline.com/{Configuration["AzureAD:TenantId"]}/oauth2/authorize",
    Scopes = new Dictionary&lt;string, string&gt;
    {
      { "user_impersonation", "Access API" }
    }
  });
  c.AddSecurityRequirement(new Dictionary&lt;string, IEnumerable&lt;string&gt;&gt;
  {
    { "oauth2", new[] { "user_impersonation" } }
  });
});</pre>
<p>Add the following code to the Configure method:</p>
<pre>app.UseSwagger();
app.UseSwaggerUI(c =&gt;
{
  c.OAuthClientId(Configuration["Swagger:ClientId"]);
  c.OAuthClientSecret(Configuration["Swagger:ClientSecret"]);
  c.OAuthRealm(Configuration["AzureAD:ClientId"]);
  c.OAuthAppName("My API V1");
  c.OAuthScopeSeparator(" ");
  c.OAuthAdditionalQueryStringParams(new { resource = Configuration["AzureAD:ClientId"] });
  c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});</pre>
<p>Change the start page in Visual Studio to open swagger</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="start page" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/start-page.png" alt="start page" width="644" height="302" border="0" /></p>
<p>&nbsp;</p>
<p>Run the project and verify you can authenticate and access the API after clicking the &#8216;Authorize&#8217; button.</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-ui.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="swagger ui" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-ui_thumb.png" alt="swagger ui" width="591" height="549" border="0" /></a></p>
<p><a href="http://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/swagger-ui-authorise-2/" rel="attachment wp-att-1259"><img loading="lazy" decoding="async" class="alignleft size-large wp-image-1259" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-ui-authorise-1-671x690.png" alt="" width="671" height="690" srcset="https://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-ui-authorise-1-671x690.png 671w, https://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-ui-authorise-1-292x300.png 292w, https://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-ui-authorise-1.png 708w" sizes="auto, (max-width: 671px) 100vw, 671px" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2018/08/app-permissions.png"><img loading="lazy" decoding="async" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="app permissions" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/app-permissions_thumb.png" alt="app permissions" width="467" height="538" border="0" /></a></p>
<p>You should now see the Bearer authentication token passed in the authorization header and the identity of the logged in user displayed in the result.</p>
<p><a href="http://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/swagger-successful-authentication/" rel="attachment wp-att-1256"><img loading="lazy" decoding="async" class="size-large wp-image-1256 alignnone" src="http://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-successful-authentication-690x370.png" alt="" width="690" height="370" srcset="https://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-successful-authentication-690x370.png 690w, https://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-successful-authentication-300x161.png 300w, https://www.sharepointconfig.com/wp-content/uploads/2018/08/swagger-successful-authentication.png 766w" sizes="auto, (max-width: 690px) 100vw, 690px" /></a></p>
<p>I&#8217;ve posted the full code to the following github repo:</p>
<p><a href="https://github.com/aribakker/AspNetCore.AzureAd.Swagger">https://github.com/aribakker/AspNetCore.AzureAd.Swagger</a></p>
<p>&nbsp;</p>
<p>This article is based on information in the following articles with changes where sections are out of date:</p>
<p><a href="https://broersa.github.io/dotnetcore/2018/01/17/aspnetcore-webapi-swashbuckle-swagger-oauth2-azureactivedirectory-example.html">https://broersa.github.io/dotnetcore/2018/01/17/aspnetcore-webapi-swashbuckle-swagger-oauth2-azureactivedirectory-example.html</a></p>
<p><a href="https://blogs.msdn.microsoft.com/pratushb/2016/04/28/enable-swagger-to-authenticate-against-azure-ad/">https://blogs.msdn.microsoft.com/pratushb/2016/04/28/enable-swagger-to-authenticate-against-azure-ad/</a></p>
     <p>The post <a href="https://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/">Configure Swagger to authenticate against Azure AD</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Using npm behind a proxy that uses NTLM authentication</title>
		<link>https://www.sharepointconfig.com/2017/04/using-npm-behind-a-proxy-that-uses-ntlm-authentication/</link>
					<comments>https://www.sharepointconfig.com/2017/04/using-npm-behind-a-proxy-that-uses-ntlm-authentication/#respond</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Fri, 21 Apr 2017 10:07:14 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Errors]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1208</guid>

					<description><![CDATA[<p>This article contains Details on how to configure npm to work behind a proxy server that uses NTLM authentication.</p>
<p><a href="http://www.sharepointconfig.com/2017/04/using-npm-behind-a-proxy-that-uses-ntlm-authentication/"><img class="excerpt" title="npm proxy error" src="http://www.sharepointconfig.com/wp-content/uploads/2017/04/npm-update-error.png" border="0" alt="npm proxy error" /></a></p>
<p>The post <a href="https://www.sharepointconfig.com/2017/04/using-npm-behind-a-proxy-that-uses-ntlm-authentication/">Using npm behind a proxy that uses NTLM authentication</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you are developing modern applications with JavaScript then chances are you will be using node package manager (<a href="https://www.npmjs.com/">npm</a>) – the package manager for JavaScript. This allows you to download and install packages including Angular, Bootstrap, React, jQuery, and many many others. If you are developing in a corporate environment then you may have issues using npm if you are behind a <a href="https://en.wikipedia.org/wiki/Proxy_server">proxy server</a> that uses <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa378749(v=vs.85).aspx">Windows/NTLM authentication</a> as npm doesn’t add authentication headers when downloading packages from the repository. This post covers how to solve these issues with <a href="http://www.telerik.com/fiddler">Fiddler</a> working as a local proxy to forward on authentication credentials to the NTLM proxy server.</p>
<h3>The Issue</h3>
<p>If you are behind a proxy and you try to run a npm command you will get an error similar to the one below:</p>
<pre>npm ERR! network getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443</pre>
<p>&nbsp;</p>
<p>To configure npm to use a proxy you need to set the proxy and https-proxy config variables. This can be done as follows (where &lt;proxy&gt;:&lt;port&gt; is the url and port of your proxy server):</p>
<pre>npm config set proxy "http://&lt;proxy&gt;:&lt;port&gt;"
npm config set https-proxy "http://&lt;proxy&gt;:&lt;port&gt;"</pre>
<p>&nbsp;</p>
<p>Now if you are behind a proxy that requires authentication you will see a slightly different error as shown below:</p>
<pre>npm ERR! code ECONNRESET
npm ERR! network tunneling socket could not be established, statusCode=407
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'
</pre>
<p>&nbsp;</p>
<p>Note that the 407 HTTP error code indicates that proxy authentication is required.</p>
<h3>Resolution</h3>
<p>One way to resolve this issue is to use another proxy that is capable of accepting the npm requests and adding authentication headers when forwarding on the requests to the external proxy server (other ways of doing this involve including your username and password in the proxy config setting but I don’t recommend this approach in a corporate environment for security reasons).</p>
<p>There are <a href="http://stackoverflow.com/questions/18569054/npm-behind-ntlm-proxy">several</a> <a href="http://ntlmaps.sourceforge.net/">options</a> for setting up an intermediate proxy but the one I’ve found easiest to setup is Fiddler. This approach is shown below with Fiddler adding the authentication headers when forwarding on npm requests to the proxy server that requires authentication.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1211 size-full" src="http://www.sharepointconfig.com/wp-content/uploads/2017/04/npm-auth-fiddler-1.png" alt="" width="629" height="82" srcset="https://www.sharepointconfig.com/wp-content/uploads/2017/04/npm-auth-fiddler-1.png 629w, https://www.sharepointconfig.com/wp-content/uploads/2017/04/npm-auth-fiddler-1-300x39.png 300w" sizes="auto, (max-width: 629px) 100vw, 629px" /></p>
<p>&nbsp;</p>
<p>The steps to configure this scenario are as follow:</p>
<ol>
<li>Download and install <a href="http://www.telerik.com/fiddler">Fiddler</a></li>
<li>In Fiddler select <strong>Rules &gt; Automatically Authenticate</strong> (this is the setting that adds the NTLM authentication headers to each request)</li>
<li>Run the following npm commands to configure npm to use Fiddler as an intermediate proxy (assuming Fiddler is using the default port):
<pre> npm config set proxy http://localhost:8888
 npm config set https-proxy http://localhost:8888</pre>
<p>Note that Fiddler will capture all network traffic by default. If you don’t want this behaviour you can deselect the Tools &gt; Fiddler Options &gt; Connections &gt; Act as system proxy on startup option to only route npm traffic through Fiddler.</li>
</ol>
<p>This also assumes that you have configured your proxy correctly in IE and can browse to the internet before applying the above settings.</p>
<p>Tip: To configure git to use the same configuration then run the following commands:</p>
<pre>git config --global http.proxy http://localhost:8888
git config --global https.proxy http://localhost:8888</pre>
<p>&nbsp;</p>
<p>Credit goes to my colleague David Wright for pointing me in the direction of this approach.</p>
     <p>The post <a href="https://www.sharepointconfig.com/2017/04/using-npm-behind-a-proxy-that-uses-ntlm-authentication/">Using npm behind a proxy that uses NTLM authentication</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2017/04/using-npm-behind-a-proxy-that-uses-ntlm-authentication/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Building SharePoint 2013 Apps with TFS 2013</title>
		<link>https://www.sharepointconfig.com/2013/10/building-sharepoint-2013-apps-with-tfs-2013/</link>
					<comments>https://www.sharepointconfig.com/2013/10/building-sharepoint-2013-apps-with-tfs-2013/#comments</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Tue, 22 Oct 2013 12:00:33 +0000</pubDate>
				<category><![CDATA[2013]]></category>
		<category><![CDATA[ALM]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[alm]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[sharepoint apps]]></category>
		<category><![CDATA[sp2013]]></category>
		<category><![CDATA[tfs2013]]></category>
		<category><![CDATA[visual studio]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1199</guid>

					<description><![CDATA[<p>This article contains details of how to take advantage of the <a href="http://msdn.microsoft.com/library/vstudio/bb385832(v=vs.120).aspx">new features in TFS 2013 build</a> to automate the packaging of SharePoint 2013 Apps. </p>
<p><a href="http://www.sharepointconfig.com/2013/10/building-sharepoint-2013-apps-with-tfs-2013/"><img class="excerpt" title="tfs 2013 build" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-complete_thumb.png" border="0" alt="tfs 2013 build" /></a></p>
<p>The post <a href="https://www.sharepointconfig.com/2013/10/building-sharepoint-2013-apps-with-tfs-2013/">Building SharePoint 2013 Apps with TFS 2013</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>This article contains details of how to take advantage of the <a href="http://msdn.microsoft.com/library/vstudio/bb385832(v=vs.120).aspx">new features in TFS 2013 build</a> to automate the packaging of SharePoint 2013 Apps.</p>
<h2>TFS 2013 new build features</h2>
<p>TFS 2013 includes several changes to the build process that are relevant in automating SharePoint 2013 App project builds. These features are available in both the on-prem version (Team Foundation Server 2013) and the cloud based Team Foundation Service when using Visual Studio 2013.</p>
<h3>Simplified build process</h3>
<p>Previous versions of TFS builds included an extremely verbose .xaml file. In TFS 2013 this has been completely rewritten and is more concise. The diagram below shows the default TFS 2012 build process template compared to the default TFS 2013 build process template.</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2012-vs-2013-build-template.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="tfs2012 vs 2013 build template" alt="tfs2012 vs 2013 build template" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2012-vs-2013-build-template_thumb.png" width="578" height="954" border="0" /></a></p>
<p>As you can see a lot of the detail has been abstracted away. While this makes the process a lot easier to read it is a big change from previous versions so many previous build process customisation techniques no longer work. In particular the customisations in the excellent <a href="http://officesharepointci.codeplex.com/">Office/SharePoint 2013 Continuous Integration with TFS 2012</a> project on CodePlex don’t work with this new model as the MSBuildArguments variable is no longer available. As you will see later in this article there are improvements in the build functionality that let us achieve similar results without having to customise the build process template.</p>
<p>Another change in TFS 2013 is that the default build process template is not stored in source control so you do not have to have a copy of the template for each project in TFS. The global default build process template is stored centrally in TFS so all projects can refer to the same instance. This removes the need for .xaml files stored in a BuildProcessTemplates folder for each TFS project if you are using the default build process.</p>
<h3>Pre and post build scripts</h3>
<p>TFS 2013 allows you to run batch and PowerShell scripts before and after compilation, and before and after your tests run. This allows you to perform actions such as versioning assemblies, collecting deployment files such as .app and .ps1 files into the drop folder using PowerShell rather than having to customise the build process template .xaml file. In the next part of this article I will show how to take advantage of this feature to automate the packaging of SharePoint 2013 App projects.</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/clip_image002.jpg"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="clip_image002" alt="clip_image002" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/clip_image002_thumb.jpg" width="627" height="484" border="0" /></a></p>
<h2>Building SharePoint 2013 App Projects with TFS 2013 build</h2>
<p>The changes to the build process offer new ways to package SharePoint 2013 app projects. In particular we can use the default template without any customisations and use PowerShell to ensure our .app package and related files are copied to the drop folder.</p>
<h3>Recap on packaging SharePoint 2013 Apps</h3>
<p>The process to package a SharePoint 2013 App project using <strong>msbuild</strong> is detailed in the article “<a href="http://msdn.microsoft.com/en-us/library/ff622991.aspx">How to build Office developer tools projects with TFS Team Build 2012</a>”.</p>
<blockquote><p>For app for Office and app for SharePoint projects, you must set the following parameters:</p>
<p>To create package in build: <strong>/p:IsPackaging=true</strong></p>
<p>To set the publish directory in the same drop output location: <strong>/p:PublishDir=&lt;droplocation&gt;</strong></p>
<p>When your solution contains multiple app projects, set the following parameter to produce app specific publish directories: <strong>/p:AppSpecificPublishOutputs=true</strong></p></blockquote>
<p>As I mentioned earlier the <a href="http://officesharepointci.codeplex.com/">Office/SharePoint 2013 Continuous Integration with TFS 2012</a> project on CodePlex includes steps to set these parameters. Unfortunately this does not work in TFS 2013 but we can take advantage of the new post build PowerShell script option to avoid having a custom build process template.</p>
<h3>Creating a TFS 2013 Build Definition to Package SharePoint 2013 Apps</h3>
<p>The steps to create a build definition in TFS 2013 to create a SharePoint app package are shown below:</p>
<ol>
<li>Ensure you have a SharePoint 2013 App project checked into TFS 2013 (either Server or Service) and are using Visual Studio 2013.</li>
<li>In Team Explorer select Builds and click New Build Definition<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/vs2013-tfs2013-builds.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="vs2013-tfs2013-builds" alt="vs2013-tfs2013-builds" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/vs2013-tfs2013-builds_thumb.png" width="308" height="306" border="0" /></a></li>
<li>In the Source Settings page enter the location of your project in TFS<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-source.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="tfs2013-build-source" alt="tfs2013-build-source" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-source_thumb.png" width="644" height="198" border="0" /></a></li>
<li>In the Build Defaults page either select your on prem build controller or if you are using TF Service select the Hosted Build Controller<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-controller.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="tfs2013-build-controller" alt="tfs2013-build-controller" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-controller_thumb.png" width="644" height="339" border="0" /></a></li>
<li>In the Process page select TfvcTemplate.12.xaml (TF Service) or the Default Template (TfvcTemplate.12.xaml) if you are using TF Server.<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-process.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="tfs2013-build-process" alt="tfs2013-build-process" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-process_thumb.png" width="644" height="236" border="0" /></a></li>
<li>Create a PowerShell script with the following contents and save this into source control:
<pre class="csharpcode"><span class="rem"># Specify file types to include    </span>
$FileTypes = $(<span class="str">"*.app",<span class="str">"*.ps1"</span></span>,<span class="str">"*.zip"</span>,<span class="str">"*.xml"</span>,<span class="str">"*.cmd"</span>)

<span class="rem"># Specify the sub-folders to include</span>
$SourceSubFolders = $(<span class="str">"*app.publish*",<span class="str">"*deployscripts*"</span></span>)

<span class="rem"># If this script is not running on a build server, remind user to </span>
<span class="rem"># set environment variables so that this script can be debugged</span>
<span class="kwrd">if</span>(-not $Env:TF_BUILD -and -not ($Env:TF_BUILD_SOURCESDIRECTORY -and $Env:TF_BUILD_BINARIESDIRECTORY))
{
    Write-Error <span class="str">"You must set the following environment variables"</span>
    Write-Error <span class="str">"to test this script interactively."</span>
    Write-Host <span class="str">'$Env:TF_BUILD_SOURCESDIRECTORY - For example, enter something like:'</span>
    Write-Host <span class="str">'$Env:TF_BUILD_SOURCESDIRECTORY = "C:\code\FabrikamTFVC\HelloWorld"'</span>
    Write-Host <span class="str">'$Env:TF_BUILD_BINARIESDIRECTORY - For example, enter something like:'</span>
    Write-Host <span class="str">'$Env:TF_BUILD_BINARIESDIRECTORY = "C:\code\bin"'</span>
    exit 1
}

<span class="rem"># Make sure path to source code directory is available</span>
<span class="kwrd">if</span> (-not $Env:TF_BUILD_SOURCESDIRECTORY)
{
    Write-Error (<span class="str">"TF_BUILD_SOURCESDIRECTORY environment variable is missing."</span>)
    exit 1
}
<span class="kwrd">elseif</span> (-not (Test-Path $Env:TF_BUILD_SOURCESDIRECTORY))
{
    Write-Error <span class="str">"TF_BUILD_SOURCESDIRECTORY does not exist: $Env:TF_BUILD_SOURCESDIRECTORY"</span>
    exit 1
}
Write-Verbose <span class="str">"TF_BUILD_SOURCESDIRECTORY: $Env:TF_BUILD_SOURCESDIRECTORY"</span>

<span class="rem"># Make sure path to binary output directory is available</span>
<span class="kwrd">if</span> (-not $Env:TF_BUILD_BINARIESDIRECTORY)
{
    Write-Error (<span class="str">"TF_BUILD_BINARIESDIRECTORY environment variable is missing."</span>)
    exit 1
}
<span class="kwrd">if</span> ([IO.File]::Exists($Env:TF_BUILD_BINARIESDIRECTORY))
{
    Write-Error <span class="str">"Cannot create output directory."</span>
    Write-Error <span class="str">"File with name $Env:TF_BUILD_BINARIESDIRECTORY already exists."</span>
    exit 1
}
Write-Verbose <span class="str">"TF_BUILD_BINARIESDIRECTORY: $Env:TF_BUILD_BINARIESDIRECTORY"</span>

<span class="rem"># Tell user what script is about to do</span>
Write-Verbose <span class="str">"Will look for and then gather "</span>
Write-Verbose <span class="str">"$FileTypes files from"</span>
Write-Verbose <span class="str">"$Env:TF_BUILD_SOURCESDIRECTORY and copy them to "</span>
Write-Verbose $Env:TF_BUILD_BINARIESDIRECTORY

<span class="rem"># Find the files</span>
$files = gci $Env:TF_BUILD_SOURCESDIRECTORY -recurse -include $SourceSubFolders | 
    ?{ $_.PSIsContainer } | 
    <span class="kwrd">foreach</span> { gci -Path $_.FullName -Recurse -include $FileTypes }
<span class="kwrd">if</span>($files)
{
    Write-Verbose <span class="str">"Found $files.count files:"</span>

    <span class="kwrd">foreach</span> ($file <span class="kwrd">in</span> $files) {
        Write-Verbose $file.FullName 
    }
}
<span class="kwrd">else</span>
{
    Write-Warning <span class="str">"Found no files."</span>
}

<span class="rem"># If binary output directory exists, make sure it is empty</span>
<span class="rem"># If it does not exist, create one</span>
<span class="rem"># (this happens when 'Clean workspace' build process parameter is set to True)</span>
<span class="kwrd">if</span> ([IO.Directory]::Exists($Env:TF_BUILD_BINARIESDIRECTORY)) 
{ 
    $DeletePath = $Env:TF_BUILD_BINARIESDIRECTORY + <span class="str">"\*"</span>
    Write-Verbose <span class="str">"$Env:TF_BUILD_BINARIESDIRECTORY exists."</span>
    <span class="kwrd">if</span>(-not $Disable)
    {
        Write-Verbose <span class="str">"Ready to delete $DeletePath"</span>
        Remove-Item $DeletePath -recurse
        Write-Verbose <span class="str">"Files deleted."</span>
    }    
} 
<span class="kwrd">else</span>
{ 
    Write-Verbose <span class="str">"$Env:TF_BUILD_BINARIESDIRECTORY does not exist."</span>

    <span class="kwrd">if</span>(-not $Disable)
    {
        Write-Verbose <span class="str">"Ready to create it."</span>
        [IO.Directory]::CreateDirectory($Env:TF_BUILD_BINARIESDIRECTORY) | Out-Null
        Write-Verbose <span class="str">"Directory created."</span>
    }
} 

<span class="rem"># Copy the binaries </span>
Write-Verbose <span class="str">"Ready to copy files."</span>
<span class="kwrd">if</span>(-not $Disable)
{
    <span class="kwrd">foreach</span> ($file <span class="kwrd">in</span> $files) 
    {
        Copy $file $Env:TF_BUILD_BINARIESDIRECTORY
    }
    Write-Verbose <span class="str">"Files copied."</span>
}</pre>
<style type="text/css"><!--
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
--></style>
</li>
<li>Note the script above is a modification of the script in the article <a href="http://blogs.msdn.com/b/visualstudioalm/archive/2013/07/24/basic-tfbuild-scripts.aspx">Get started with some basic TFBuild scripts</a>. It scans the source directory for app.publish and deployscripts folders and copies all .app, .ps1, .xml, .cmd, .zip files to the drop folder. You can customise this to fit your project by changing the $FileTypes and $SourceFolders parameters variables. This is effectively doing the same thing the /p:PublishDir msbuild parameter does and copies the .app package to the drop location, but is able to also include other files (e.g. .ps1 files to deploy the package).</li>
<li>On the Process page expand the Build &gt; Advanced section and enter the following details:
<ol>
<li>MSBuild arguments: /p:IsPackaging=true /p:AppSpecificPublishOutputs=true</li>
<li>Post-build script path: &lt;path to file created in step 6&gt;<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tf2013-build-sp2013app.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="tf2013-build-sp2013app" alt="tf2013-build-sp2013app" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tf2013-build-sp2013app_thumb.png" width="644" height="408" border="0" /></a></li>
</ol>
</li>
<li>In Team Explorer under Builds right click the new build definition and select ‘Queue New Build…’<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/queue-build.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="queue build" alt="queue build" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/queue-build_thumb.png" width="345" height="462" border="0" /></a></li>
<li>Once the build is complete click on the build in Team Explorer and select ‘Open Drop Folder’<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-complete.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="tfs2013-build-complete" alt="tfs2013-build-complete" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs2013-build-complete_thumb.png" width="644" height="286" border="0" /></a></li>
<li>This will either open the drop folder if you are using Team Foundation Server 2013, or open the Team Foundation Service build page if you are using the cloud version (shown below). In this case select the Download drop as zip option to download the build output.<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs-build-online.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="tfs-build-online" alt="tfs-build-online" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/tfs-build-online_thumb.png" width="644" height="422" border="0" /></a></li>
<li>If everything is set up correctly you will see an .app package with any other files you have selected to be copied to the drop folder in step 6.<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/10/vs2013-drop-folder-app.png"><img loading="lazy" decoding="async" style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="vs2013-drop-folder-app" alt="vs2013-drop-folder-app" src="http://www.sharepointconfig.com/wp-content/uploads/2013/10/vs2013-drop-folder-app_thumb.png" width="651" height="493" border="0" /></a></li>
<li>You can then either manually deploy this to your target environment or potentially create a PowerShell script to automatically deploy this to your target environment as a post-build or post-test script argument of the build definition. If you want to do this the PowerShell scripts included in the <a href="http://officesharepointci.codeplex.com/">Office/SharePoint 2013 Continuous Integration with TFS 2012</a> project on CodePlex provide a great starting point.</li>
</ol>
<p>&nbsp;</p>
<h3>Resources</h3>
<ul>
<li><a href="http://blogs.msdn.com/b/visualstudioalm/archive/2013/07/24/basic-tfbuild-scripts.aspx">Get started with some basic TFBuild scripts</a></li>
<li><a href="http://msdn.microsoft.com/library/vstudio/bb385832(v=vs.120).aspx">What&#8217;s new for Application Lifecycle Management in Visual Studio 2013</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff622991.aspx">How to build Office developer tools projects with TFS Team Build 2012</a></li>
<li><a href="http://officesharepointci.codeplex.com/">Office/SharePoint 2013 Continuous Integration with TFS 2012</a></li>
<li><a href="http://www.alexandervanwynsberghe.be/packaging-sharepoint-2013-apps-with-tfs-2012/">Packaging SharePoint 2013 Apps with TFS 2012</a></li>
</ul>
     <p>The post <a href="https://www.sharepointconfig.com/2013/10/building-sharepoint-2013-apps-with-tfs-2013/">Building SharePoint 2013 Apps with TFS 2013</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2013/10/building-sharepoint-2013-apps-with-tfs-2013/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>How to: Create a Simple SharePoint 2013 People Directory</title>
		<link>https://www.sharepointconfig.com/2013/05/how-to-create-a-simple-sharepoint-2013-people-directory/</link>
					<comments>https://www.sharepointconfig.com/2013/05/how-to-create-a-simple-sharepoint-2013-people-directory/#comments</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Fri, 17 May 2013 10:00:36 +0000</pubDate>
				<category><![CDATA[2013]]></category>
		<category><![CDATA[Configuration]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1162</guid>

					<description><![CDATA[<p>A people directory can be useful if you want to list all the people in an organisation without users having to enter a search query. Users can then narrow down the list using filters such as Department or Job Title to narrow the results. This is really easy to set up using the default SharePoint 2013 search web parts and doesn’t require writing a single line of code. An example of what this can look like is shown below: </p>
<p><a href="http://www.sharepointconfig.com/2013/05/how-to-create-a-simple-sharepoint-2013-people-directory/"><img class="excerpt" title="sharepoint-2013-people-directory" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-people-directory_thumb.png" border="0" alt="sharepoint-2013-people-directory" width="644" height="484" /></a></p>
<p>The post <a href="https://www.sharepointconfig.com/2013/05/how-to-create-a-simple-sharepoint-2013-people-directory/">How to: Create a Simple SharePoint 2013 People Directory</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I previously posted on <a href="http://www.sharepointconfig.com/2011/05/how-to-create-a-simple-sharepoint-2010-people-directory/">how to create a simple people directory for SharePoint 2010</a>. The process is slightly different in SharePoint 2013 due to the substantial changes in the search functionality so the updated steps are shown in this post.</p>
<p>A people directory can be useful if you want to list all the people in an organisation without users having to enter a search query. Users can then narrow down the list using filters such as Department or Job Title to narrow the results. This is really easy to set up using the default SharePoint 2013 search web parts and doesn’t require writing a single line of code. An example of what this can look like is shown below:</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-people-directory.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint people directory" alt="sharepoint people directory" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-people-directory_thumb.png" width="644" height="484" border="0" /></a></p>
<p>Especially when the organisation only contains a few hundred people this can help users discover people in the organisation without necessarily knowing their names. The steps to create this are as follow (assuming the user profile and search services are running successfully):</p>
<ol>
<li>Assuming you have an enterprise search center set up the first step to create the people directory is to enable the people search page layout so we can create a people search results page. This can be done by navigating to the Site Settings &gt; Look and Feel | Page layouts and site templates page and selecting ‘(Welcome Page) Search People’ in the Page Layouts section.<br />
<img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint available page layouts search" alt="sharepoint available page layouts search" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-available-page-layouts-search.png" width="644" height="218" border="0" /></li>
<li>The next step is to navigate to the pages library and select New Document &gt; Page from the ribbon.<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-new-page.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint new page" alt="sharepoint new page" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-new-page_thumb.png" width="386" height="364" border="0" /></a></li>
<li>On the create page screen select the Search People page layout to create a page that contains the people search results web parts.<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-create-people-results-page.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint create people results page" alt="sharepoint create people results page" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-create-people-results-page_thumb.png" width="644" height="484" border="0" /></a></li>
<li>The standard search result web part does not show any results unless a query is specified. To get all people to show up by default we need to modify the query used by the People Search Core Results web part. This can be done by clicking the ‘Change Query’ button in the web part properties and adding a property filter that returns all people. To do this we can select the property ‘contentclass’ and enter the manual value ‘spspeople’.<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-build-query.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint search build query" alt="sharepoint search build query" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-build-query_thumb.png" width="644" height="484" border="0" /></a></li>
<li>We now have a list of people that will be displayed as soon as the user navigates to our custom people results page. By default we also have some refinements that appear if matching metadata is found within the result set. These are the Department, Job Title, Keywords and Office Location columns. We can change these to show other metadata properties that are defined in our search centre by selecting the ‘Choose refiners’ option on the refinement web part. Note that the managed property must have the ‘Refinable’ option selected in the search schema for it to be available in this list.<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-refinements.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint search refinements" alt="sharepoint search refinements" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-refinements_thumb.png" width="636" height="228" border="0" /></a></li>
</ol>
<p>&nbsp;</p>
<h3>Adding Sorting by Last Name</h3>
<p>Adding additional sort options is much easier than in SharePoint 2010. To add a custom sort option such as Last Name follow the steps below:</p>
<ol>
<li>Ensure that the managed property you want to sort by has the Sortable option enabled in the search schema. To do this navigate to the Search Service Application &gt; Search Schema, click the LastName managed property and select the Sortable: &#8216;Yes – active’ option. Note you will need a full crawl for this to take effect.<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-2013-managed-property-sortable.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint 2013 managed property sortable" alt="sharepoint 2013 managed property sortable" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-2013-managed-property-sortable_thumb.png" width="644" height="126" border="0" /></a></li>
<li>On the search results page edit the People Search Core Results web part, check the ‘Show sort dropdown’ option and enter the following text:<br />
<code>[{"name":"First name (A-Z)","sorts":[{"p":"FirstName","d":0}]},{"name":"First name (Z-A)","sorts":[{"p":"FirstName","d":1}]},{"name":"Last name (A-Z)","sorts":[{"p":"LastName","d":0}]},{"name":"Last name (Z-A)","sorts":[{"p":"LastName","d":1}]},{"name":"Social distance","sorts":[]}]</code><a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-sorting.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint search sorting" alt="sharepoint search sorting" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-sorting_thumb.png" width="242" height="382" border="0" /></a></li>
<li>You should now be able to sort by first or last name in alphabetical order either A-Z or Z-A.<br />
<img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint search people sorting" alt="sharepoint search people sorting" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-people-sorting.png" width="530" height="295" border="0" /></li>
</ol>
<p>&nbsp;</p>
<h3>Using a Table Based Layout</h3>
<p>Another option for the people directory is to use a table based layout with column headers for properties. In SharePoint 2013 this can be done using Display Templates. In this case we need to use two display templates – a control template for the table header, and a item template for each search result item. The steps to implement this are shown below.</p>
<ol>
<li>The first step is to add the display templates to the masterpage gallery by selecting Site Settings &gt; Master Pages and Page Layouts &gt; Display Templates &gt; Search and upload the two html files from the following .zip archive.<br />
<a href="http://www.sharepointconfig.com/downloadPeopleDirectoryDisplayTemplates.zip">PeopleDirectoryDisplayTemplates.zip</a></li>
<li>The next step is to edit the search core results web part and in the Display Template section set the Results Control Display Template to ‘Table Result’ and the Item Display Template to ‘People Table Item’.<br />
<a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-display-template-selection.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint search display template selection" alt="sharepoint search display template selection" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-search-display-template-selection_thumb.png" width="242" height="442" border="0" /></a></li>
<li>You should now see the results displayed as a table based layout as shown below:</li>
</ol>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-people-directory-table.png"><img loading="lazy" decoding="async" style="float: none;padding-top: 0px;padding-left: 0px;margin-left: auto;padding-right: 0px;margin-right: auto;border: 0px" title="sharepoint people directory table" alt="sharepoint people directory table" src="http://www.sharepointconfig.com/wp-content/uploads/2013/05/sharepoint-people-directory-table_thumb.png" width="644" height="484" border="0" /></a></p>
<p>If you have worked with previous versions of SharePoint you can see that in SharePoint 2013 the search features are much richer and easier to work with. There are also a number of new features such as query rules and extensibility options such as customising the hover panel that enhance the end user search experience.</p>
     <p>The post <a href="https://www.sharepointconfig.com/2013/05/how-to-create-a-simple-sharepoint-2013-people-directory/">How to: Create a Simple SharePoint 2013 People Directory</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2013/05/how-to-create-a-simple-sharepoint-2013-people-directory/feed/</wfw:commentRss>
			<slash:comments>164</slash:comments>
		
		
			</item>
		<item>
		<title>I&#8217;m speaking at the SharePoint 2013 Evolution Conference</title>
		<link>https://www.sharepointconfig.com/2013/04/im-speaking-at-the-sharepoint-2013-evolution-conference/</link>
					<comments>https://www.sharepointconfig.com/2013/04/im-speaking-at-the-sharepoint-2013-evolution-conference/#respond</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Sat, 13 Apr 2013 10:44:29 +0000</pubDate>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1134</guid>

					<description><![CDATA[<p>Next week I’m speaking at the <a href="http://www.sharepointevolutionconference.com/index.html">SharePoint 2013 evolution conference</a> in London. I’m co-presenting two sessions on upgrading to SharePoint 2013 with my friend Chandima and individually presenting another session on a SharePoint 2010 extranet project I worked on. </p>
<p><a href="http://www.sharepointconfig.com/2013/04/im-speaking-at-the-sharepoint-2013-evolution-conference/"><img width="583" height="484" border="0" alt="infocentre-homepage" src="http://www.sharepointconfig.com/wp-content/uploads/2013/04/GSMA_design_MASTERhome.jpg" title="infocentre homepage" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;"/></a></p>
<p>The post <a href="https://www.sharepointconfig.com/2013/04/im-speaking-at-the-sharepoint-2013-evolution-conference/">I&#8217;m speaking at the SharePoint 2013 Evolution Conference</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Next week I’m speaking at the <a href="http://www.sharepointevolutionconference.com/index.html">SharePoint 2013 evolution conference</a> in London. I’m co-presenting two sessions on upgrading to SharePoint 2013 with my friend Chandima and individually presenting another session on a SharePoint 2010 extranet project I worked on. Details of the sessions are shown below.</p>
<h3>IT112/IT113 Upgrading SharePoint</h3>
<p>In these sessions on upgrading to SharePoint 2013 we will walk through the various upgrade options and how to carry out the server preparation and installations for your upgrade testing deployments. We will use a real world dataset to verify upgrade compatibility and troubleshoot some common upgrade issues you may encounter and how to progress forward. This session is for IT Professionals, System Administrators who want to know how to approach and carry out an upgrade/migration to 2013. I’ll also talk about how to upgrade custom developed SharePoint solutions built for earlier versions of SharePoint.</p>
<h3>COM711 Case study: Industry wide collaboration</h3>
<p>Discover how we used SharePoint as a platform to facilitate collaboration between hundreds of different telecom organisations worldwide. The project involved building a LinkedIn like website that contains company and user details for the mobile industry. In a similar way to LinkedIn, users can also request to join groups and communicate and collaborate on certain topics such as Roaming to Fraud. The project also involved many other features specific to the mobile industry such as the ability to to store mobile network information and document management features that allow groups to work on official standards documents for the mobile industry.</p>
<p>This session will include a run through of the functional areas of the system and an explanation of how each area was built from a technical perspective. We will also cover some of the challenges we faced when building a system that is used by over 800 different organisations in over 200 countries around the globe.</p>
<p>A couple of pages from the site are shown below. The image below shows the homepage of the extranet including document and people feeds, personalised lists of contacts, meetings and task information.</p>
<p><img loading="lazy" decoding="async" style="float: none; margin-left: auto; display: block; margin-right: auto; border: 0px;" title="GSMA_design_MASTER-home" alt="GSMA_design_MASTER-home" src="http://www.sharepointconfig.com/wp-content/uploads/2013/04/GSMA_design_MASTERhome.jpg" width="583" height="484" border="0" /></p>
<p>We also made many enhancements to the document management features. The image below shows the landing page for an official document. As well as metadata about the document and files to download the page contains a list of related official documents and the status of change requests that relate to changes to the document.</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2013/04/GSMA_design_MASTEROD.jpg"><img loading="lazy" decoding="async" style="float: none; margin-left: auto; display: block; margin-right: auto; border: 0px;" title="GSMA_design_MASTER-OD" alt="GSMA_design_MASTER-OD" src="http://www.sharepointconfig.com/wp-content/uploads/2013/04/GSMA_design_MASTEROD_thumb.jpg" width="583" height="484" border="0" /></a></p>
<p>I’m really looking forward to the conference and hope to see some of you there!</p>
     <p>The post <a href="https://www.sharepointconfig.com/2013/04/im-speaking-at-the-sharepoint-2013-evolution-conference/">I&#8217;m speaking at the SharePoint 2013 Evolution Conference</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2013/04/im-speaking-at-the-sharepoint-2013-evolution-conference/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SharePoint 2010 People Directory Part 3 &#8211; Sorting</title>
		<link>https://www.sharepointconfig.com/2013/02/sharepoint-2010-people-directory-part-3-sorting/</link>
					<comments>https://www.sharepointconfig.com/2013/02/sharepoint-2010-people-directory-part-3-sorting/#comments</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Tue, 05 Feb 2013 13:11:17 +0000</pubDate>
				<category><![CDATA[2010]]></category>
		<category><![CDATA[Search]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1111</guid>

					<description><![CDATA[<p>I’ve had several requests to show how to implement sorting following my previous posts on creating a simple SharePoint 2010 people directory and using a table based layout for a SharePoint 2010 people directory. This post shows how to implement custom sorting for the people directory so you can sort by first name, last name [&#8230;]</p>
<p>The post <a href="https://www.sharepointconfig.com/2013/02/sharepoint-2010-people-directory-part-3-sorting/">SharePoint 2010 People Directory Part 3 &#8211; Sorting</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I’ve had several requests to show how to implement sorting following my previous posts on <a href="http://www.sharepointconfig.com/2011/05/how-to-create-a-simple-sharepoint-2010-people-directory/">creating a simple SharePoint 2010 people directory</a> and <a href="http://www.sharepointconfig.com/2011/06/create-a-sharepoint-2010-people-directory-with-a-table-layout/">using a table based layout for a SharePoint 2010 people directory</a>. This post shows how to implement custom sorting for the people directory so you can sort by first name, last name or any other managed property.</p>
<p><img loading="lazy" decoding="async" style="float: none; margin-left: auto; margin-right: auto; border: 0px;" title="sharepoint-people-directory-sort" alt="sharepoint-people-directory-sort" src="http://www.sharepointconfig.com/wp-content/uploads/2013/02/sharepointpeopledirectorysort.png" width="644" height="484" border="0" /></p>
<h3>Step 1: Extend the search core results web part to support sorting</h3>
<p>There are two search core results web parts that are capable of displaying list of people:</p>
<ul>
<li>Search Core Results – provides a generic way of displaying search results and supports sorting by relevance and modified date</li>
<li>People Search Core Results – provides additional people based information in search results and supports sorting by relevance, social distance and name (a-z only)</li>
</ul>
<p>As both the web parts only allow a fixed set of sorting options we need to create a new web part if we want to provide sorting options such as by last name or by first name (z-a). The easiest way to do this is to inherit from an existing web part and as the people search core results is sealed we can only do this by inheriting from the search core results web part.</p>
<p>One benefit of using the search core results web part is that we are not limited to displaying lists of people. We can use this web part to display sortable lists of documents, list items, sites or any other information in the search index. This is a very useful technique for aggregating content from across several site collections or across a large number of sites where web parts such as the content query web part run into performance problems (in fact SharePoint 2013 introduces the content by search web part which is based on the same principals we use here).</p>
<p>In the class that extends the search core results web part we can add code that changes the order by clause of the search query. <a href="http://www.insidesharepoint.net/">Bart-Jan Hoeijmakers</a> has an excellent post on <a href="http://www.insidesharepoint.net/post/2011/02/16/Creating-a-sortable-CoreResultsWebPart-in-SharePoint-2010.aspx">Creating a sortable CoreResultsWebPart in SharePoint 2010</a> that shows how to do this. I’ve extended his web part in the example below to changes the sort order based on query string parameters, or properties of the web part if there are no parameters passed in.</p>
<pre class="csharpcode">using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.Office.Server.Search.WebControls;
using Query = Microsoft.Office.Server.Search.Query;

namespace Ari.SharePointSearch.WebParts
{
    [ToolboxItemAttribute(false)]
    public class SortableCoreResults : CoreResultsWebPart
    {
        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable(true)]
        [WebDisplayName("Default managed property")]
        [WebDescription("Sort by this managed property by default")]
        [Category("Sorting Properties")]
        public string OrderByProperty { get; set; }

        [Personalizable(PersonalizationScope.Shared)]
        [WebBrowsable(true)]
        [WebDisplayName("Default direction")]
        [WebDescription("Default sorting direction")]
        [Category("Sorting Properties")]
        public Microsoft.Office.Server.Search.Query.SortDirection SortDirection { get; set; }

        /// &lt;summary&gt;
        /// Runs the base configuration then adds a custom sort property
        /// &lt;/summary&gt;
        protected override void ConfigureDataSourceProperties()
        {
            // only run when we are showing search results (e.g. not the search action links)
            if (this.ShowSearchResults)
            {
                try
                {
                    // run the base code
                    base.ConfigureDataSourceProperties();

                    // get the sorting parameters off the query string
                    string orderByProperty = this.Context.Request.QueryString["v1"];
                    string sortDir = this.Context.Request.QueryString["SortDir"];

                    // if none set use the defaults
                    if (string.IsNullOrEmpty(orderByProperty))
                        orderByProperty = OrderByProperty;

                    Query.SortDirection sortDirection = SortDirection;

                    if (!string.IsNullOrEmpty(sortDir) &amp;&amp; sortDir.ToLower() == "desc")
                        sortDirection = Query.SortDirection.Descending;
                    else if (!string.IsNullOrEmpty(sortDir) &amp;&amp; sortDir.ToLower() == "asc")
                        sortDirection = Query.SortDirection.Ascending;

                    CoreResultsDatasource dataSource = this.DataSource as CoreResultsDatasource;

                    // if we have an orderByProperty then modify the search query sort order
                    if (!string.IsNullOrEmpty(orderByProperty))
                    {
                        dataSource.SortOrder.Clear();
                        dataSource.SortOrder.Add(orderByProperty, sortDirection);
                    }
                }
                catch (Exception ex)
                {
                    // implement exception handling here</pre>
<pre class="csharpcode">                }
            }
        }

        protected override void ModifyXsltArgumentList(Microsoft.SharePoint.WebPartPages.ArgumentClassWrapper argList)
        {
            base.ModifyXsltArgumentList(argList);

            // add a parameter with the current URL
            argList.AddParameter("CurrentUrl", string.Empty, HttpContext.Current.Request.Url.PathAndQuery);
        }
    }
}</pre>
<p><!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->This web part now lets us set a default sort option by passing in parameters on the query string. For example if we load the page the web part is on with parameters such as peopledirectory.aspx?v1=LastName&amp;SortDir=asc the web part will sort the results by last name A-Z.</p>
<p>We can also set the default sorting option by using the sorting properties that are shown when editing the web part. This will be used to sort the results when the query string parameters are not present.</p>
<p><img loading="lazy" decoding="async" style="float: none; margin-left: auto; margin-right: auto; border: 0px;" title="sharepoint-search-results-sorting-properties" alt="sharepoint-search-results-sorting-properties" src="http://www.sharepointconfig.com/wp-content/uploads/2013/02/sharepointsearchresultssortingproperties.png" width="231" height="219" border="0" /></p>
<h3>Step 2: Extend the search results XSLT to render additional sorting options</h3>
<p><img loading="lazy" decoding="async" style="margin-left: 0px; margin-right: 0px; border: 0px;" title="sharepoint-people-directory-sort-dropdown" alt="sharepoint-people-directory-sort-dropdown" src="http://www.sharepointconfig.com/wp-content/uploads/2013/02/sharepointpeopledirectorysortdropdown.png" width="304" height="109" align="right" border="0" /> The second step is to change the XSLT that renders the sort by drop down to include additional sorting options. When a different sort option is selected the property and the direction (i.e. ascending or descending) will be passed on the query string to the core results web part we created in step 1.</p>
<p>I’ve included an example of how to add first name and last name sorts both ascending (a-z) and descending (z-a) below:</p>
<pre class="csharpcode">        &lt;xsl:if test="$ShowDropDown = 'true'"&gt;
          &lt;xsl:value-of select="$SortBy" /&gt;
          &lt;select id="dropdown" title="{$SortOptions}" onchange="PostToUrl(this.value)" class="srch-dropdown"&gt;
            &lt;xsl:call-template name="AddSortOption"&gt;
              &lt;xsl:with-param name="DisplayName"&gt;First name (A-Z)&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="ManagedProperty"&gt;FirstName&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="Direction"&gt;Asc&lt;/xsl:with-param&gt;
            &lt;/xsl:call-template&gt;
            &lt;xsl:call-template name="AddSortOption"&gt;
              &lt;xsl:with-param name="DisplayName"&gt;First name (Z-A)&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="ManagedProperty"&gt;FirstName&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="Direction"&gt;Desc&lt;/xsl:with-param&gt;
            &lt;/xsl:call-template&gt;
            &lt;xsl:call-template name="AddSortOption"&gt;
              &lt;xsl:with-param name="DisplayName"&gt;Last name (A-Z)&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="ManagedProperty"&gt;LastName&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="Direction"&gt;Asc&lt;/xsl:with-param&gt;
            &lt;/xsl:call-template&gt;
            &lt;xsl:call-template name="AddSortOption"&gt;
              &lt;xsl:with-param name="DisplayName"&gt;Last name (Z-A)&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="ManagedProperty"&gt;LastName&lt;/xsl:with-param&gt;
              &lt;xsl:with-param name="Direction"&gt;Desc&lt;/xsl:with-param&gt;
            &lt;/xsl:call-template&gt;
          &lt;/select&gt;
        &lt;/xsl:if&gt;</pre>
<p><!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->This relies on a couple of helper templates to create the hyperlink containing the relevant query string parameters. These templates are shown below:</p>
<pre class="csharpcode">  &lt;xsl:template name="AddSortOption"&gt;
    &lt;xsl:param name="DisplayName"/&gt;
    &lt;xsl:param name="ManagedProperty"/&gt;
    &lt;xsl:param name="Direction"/&gt;

    &lt;xsl:variable name="UrlWithSortProperty"&gt;
      &lt;xsl:call-template name="ReplaceQsParameter"&gt;
        &lt;xsl:with-param name="URL" select="$CurrentUrl"/&gt;
        &lt;xsl:with-param name="ParamName"&gt;v1=&lt;/xsl:with-param&gt;
        &lt;xsl:with-param name="ParamValue" select="$ManagedProperty"/&gt;
      &lt;/xsl:call-template&gt;
    &lt;/xsl:variable&gt;

    &lt;xsl:variable name="UrlWithSortAndOrderProperties"&gt;
      &lt;xsl:call-template name="ReplaceQsParameter"&gt;
        &lt;xsl:with-param name="URL" select="$UrlWithSortProperty"/&gt;
        &lt;xsl:with-param name="ParamName"&gt;SortDir=&lt;/xsl:with-param&gt;
        &lt;xsl:with-param name="ParamValue" select="$Direction"/&gt;
      &lt;/xsl:call-template&gt;
    &lt;/xsl:variable&gt;

    &lt;option value="{$UrlWithSortAndOrderProperties}"&gt;
      &lt;xsl:if test="$UrlWithSortAndOrderProperties = $CurrentUrl"&gt;
        &lt;xsl:attribute name="selected"&gt;selected&lt;/xsl:attribute&gt;
      &lt;/xsl:if&gt;
      &lt;xsl:value-of select="$DisplayName"/&gt;
    &lt;/option&gt;

  &lt;/xsl:template&gt;

  &lt;xsl:template name="ReplaceQsParameter"&gt;
    &lt;xsl:param name="URL"/&gt;
    &lt;xsl:param name="ParamName"/&gt;
    &lt;xsl:param name="ParamValue"/&gt;
    &lt;xsl:choose&gt;
      &lt;xsl:when test="contains($URL, $ParamName)"&gt;
        &lt;xsl:variable name="Before" select="substring-before($URL, $ParamName)"/&gt;
        &lt;xsl:variable name="After" select="substring-after(substring-after($URL, $ParamName), '&amp;amp;')"/&gt;
        &lt;xsl:choose&gt;
          &lt;xsl:when test="$After = ''"&gt;
            &lt;xsl:value-of select="concat($Before, $ParamName, $ParamValue)"/&gt;
          &lt;/xsl:when&gt;
          &lt;xsl:otherwise&gt;
            &lt;xsl:value-of select="concat($Before, $ParamName, $ParamValue, '&amp;amp;', $After)"/&gt;
          &lt;/xsl:otherwise&gt;
        &lt;/xsl:choose&gt;
      &lt;/xsl:when&gt;
      &lt;xsl:when test="contains($URL, '?')"&gt;
        &lt;xsl:value-of select="concat($URL, '&amp;amp;', $ParamName, $ParamValue)"/&gt;
      &lt;/xsl:when&gt;
      &lt;xsl:otherwise&gt;
        &lt;xsl:value-of select="concat($URL, '?', $ParamName, $ParamValue)"/&gt;
      &lt;/xsl:otherwise&gt;
    &lt;/xsl:choose&gt;
  &lt;/xsl:template&gt;</pre>
<p><!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->I&#8217;ve also modified the XSLT to display the results in a table based layout as per my previous post on <a href="http://www.sharepointconfig.com/2011/06/create-a-sharepoint-2010-people-directory-with-a-table-layout/">creating a SharePoint 2010 people directory with a table based layout</a>.</p>
<p>If you want the complete code packaged up you can <a href="http://www.sharepointconfig.com/downloadAri.SharePointSearch.zip">download the solution package for the search core results web part</a>. Note this is a farm solution as the search core results web part cannot be extended using a sandboxed solution.</p>
<p>Once you have deployed the solution the steps below can be used to add the sortable search results web part to a search results page:</p>
<ol>
<li>Activate the &#8216;Sortable Core Results&#8217; site collection feature</li>
<li>Assuming you have an enterprise search center set up the next step is to create a new search results page by selecting Site Actions &gt; New Page from the search site.</li>
<li>On the search results page delete the Search Core Results web part</li>
<li>In the bottom web part zone click ‘Add a Web Part’ and select the ‘Sortable Core Results’ web part from the Search category</li>
<li>Delete the Search Action Links web part</li>
<li>In the middle lower right web part zone click ‘Add a Web Part’ and select the ‘Sortable Core Results’ web part</li>
<li>Modify the sortable core results web part in the middle right zone and under the miscellaneous section deselect ‘show search results’ and select ‘show action links’<img loading="lazy" decoding="async" style="float: none; margin-left: auto; margin-right: auto; border: 0px;" title="sharepoint-search-show-action-links-property" alt="sharepoint-search-show-action-links-property" src="http://www.sharepointconfig.com/wp-content/uploads/2013/02/sharepointsearchshowactionlinksproperty.png" width="231" height="193" border="0" /></li>
</ol>
<p>You should now have a page that displays a list people with a drop down that allows users to sort by first name or last name A-Z or Z-A.</p>
<p><img loading="lazy" decoding="async" style="float: none; margin-left: auto; margin-right: auto; border: 0px;" title="sharepoint-people-directory-sort" alt="sharepoint-people-directory-sort" src="http://www.sharepointconfig.com/wp-content/uploads/2013/02/sharepointpeopledirectorysort1.png" width="644" height="484" border="0" /></p>
<p>The example solution uses a table based layout but it is also possible to use a layout similar to the people search results by changing the XSLT file used to render the results.</p>
<p><a href="http://www.sharepointconfig.com/downloadAri.SharePointSearch.zip">Download the solution package for the search core results web part</a></p>
<p>Additional resources</p>
<ul>
<li><a href="http://www.insidesharepoint.net/post/2011/02/16/Creating-a-sortable-CoreResultsWebPart-in-SharePoint-2010.aspx">Creating a sortable CoreResultsWebPart in SharePoint 2010</a></li>
<li><a href="http://jeffreypaarhuis.com/2012/01/18/make-core-results-web-part-sortable-on-other-columns/">Make Core Results Web Part Sortable on other columns</a></li>
<li><a href="http://www.sharepointconfig.com/2011/05/how-to-create-a-simple-sharepoint-2010-people-directory/">How to: Create a Simple SharePoint 2010 People Directory</a></li>
<li><a href="http://www.sharepointconfig.com/2011/06/create-a-sharepoint-2010-people-directory-with-a-table-layout/">SharePoint 2010 People Directory Part 2 – Table Layout</a></li>
</ul>
     <p>The post <a href="https://www.sharepointconfig.com/2013/02/sharepoint-2010-people-directory-part-3-sorting/">SharePoint 2010 People Directory Part 3 &#8211; Sorting</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2013/02/sharepoint-2010-people-directory-part-3-sorting/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
			</item>
		<item>
		<title>SharePoint 2013 Development Certifications</title>
		<link>https://www.sharepointconfig.com/2012/12/sharepoint-2013-development-certifications/</link>
					<comments>https://www.sharepointconfig.com/2012/12/sharepoint-2013-development-certifications/#comments</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Wed, 05 Dec 2012 18:05:27 +0000</pubDate>
				<category><![CDATA[2013]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[exams]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1086</guid>

					<description><![CDATA[<p>According to a <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032537090&#038;culture=en-us">Microsoft webcast on the Microsoft Certified Solutions Master (MCSM) certification</a> there are <strong>two new SharePoint 2013 development focused exams in development</strong>. These form part of the requirements for the Microsoft Certified Solutions Developer (MCSD) certification for SharePoint 2013. The full requirements for achieving MCSD in SharePoint 2013 will include two non-SharePoint specific exams; one of these is 70-480 - Programming in HTML5 with JavaScript and CSS3, the other has not yet been named. </p>
<p>Details of the entire SharePoint 2013 certification process is shown below:<br />
<a href="http://www.sharepointconfig.com/2012/12/sharepoint-2013-development-certifications/"><img class="excerpt" title="sharepoint 2013 certifications" src="http://www.sharepointconfig.com/wp-content/uploads/2012/12/certification-detail_thumb.png" border="0" alt="sharepoint 2013 certifications" width="644" height="455" /></a></p>
<p>The post <a href="https://www.sharepointconfig.com/2012/12/sharepoint-2013-development-certifications/">SharePoint 2013 Development Certifications</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><del>Update 15 April 2013 &#8211; You can register for the SharePoint development beta exams for free using code MCSD488J for 71-488 and MCSD489J for 71-489. I understand these are limited so suggest signing up ASAP.</p>
<p></del></p>
<p>Update 13 May 2013 &#8211; The free beta codes I mentioned previously appear to have been used up and are no longer available.</p>
<p>According to a <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032537090&amp;culture=en-us">Microsoft webcast on the Microsoft Certified Solutions Master (MCSM) certification</a> there are <strong>two new SharePoint 2013 development focused exams in development</strong>. These form part of the requirements for the Microsoft Certified Solutions Developer (MCSD) certification for SharePoint 2013. The full requirements for achieving MCSD in SharePoint 2013 will include two non-SharePoint specific exams; one of these is 70-480 &#8211; Programming in HTML5 with JavaScript and CSS3, the other is 70-486 &#8211; Developing ASP.NET MVC 4 Web Applications.</p>
<p>To summarise <strong>you will need to pass the following four exams to achieve the MCSD: SharePoint Applications in SharePoint 2013</strong>:</p>
<ul>
<li>SharePoint focused
<ul>
<li><a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-488">70-488 Developing Microsoft SharePoint Server 2013 Core Solutions</a> (currently in beta, release expected in June 2013)</li>
<li><a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-489">70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions</a> (currently in beta, release expected in June 2013)</li>
</ul>
</li>
<li>Web development focused
<ul>
<li><a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-480">70-480 Programming in HTML5 with JavaScript and CSS3</a></li>
<li><a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-486">70-486 Developing ASP.NET MVC 4 Web Applications</a></li>
</ul>
</li>
</ul>
<p><del>If you are interested in attaining this certification in the future I’d suggest doing the following now:</del></p>
<ol>
<li><del>Register for the <a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-480">70-480</a> exam now as it is <strong>free </strong>untilMarch 2013 using code HTMLJMP as mentioned on the <a href="https://www.microsoftvirtualacademy.com/tracks/developing-html5-apps-jump-start">Microsoft Virtual Academy blog</a></del></li>
<li><del>Submit a <a href="http://connect.microsoft.com/site862">Subject Matter Expert (SME) profile on Microsoft connect</a> so that you have a chance of getting an invite to take the beta exams when they are released. See <a href="http://borntolearn.mslearn.net/btl/b/weblog/archive/2012/11/12/everything-you-wanted-to-know-about-beta-exams-part-1-beta-invites.aspx">Everything You Wanted to Know about Beta Exams: Part 1 (Beta Invites)</a> from the Born to Learn blog for more details on this.</del></li>
<li><del>Follow the <a href="http://borntolearn.mslearn.net/">Born to Learn blog</a> which details new exams that are released</del></li>
</ol>
<p>In addition to the developer focused exams you can also currently take the (IT Pro focused) <a href="http://www.microsoft.com/learning/en/us/certification/cert-sharepoint-server.aspx">Microsoft Certified Solutions Expert exams</a>. Details of the entire SharePoint 2013 certification process is shown below:</p>
<p><img loading="lazy" decoding="async" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="certification-detail" alt="certification-detail" src="http://www.sharepointconfig.com/wp-content/uploads/2012/12/certification-detail_thumb.png" width="644" height="455" border="0" /></p>
<p>To achieve the <strong>MCSE</strong> you must also gain the MCSA: Windows Server 2012, although the Windows Server exams are not pre-requisites for sitting 70-331: Core Solutions of Microsoft SharePoint Server 2013 and 70-332: Advanced Solutions of Microsoft SharePoint Server 2013. If you want to achieve <strong>master</strong> level certification you will need both the MCSE and the MCSD. Note that going forward the master level certification is now referred to as MCSM (previously MCM) and will be available remotely (i.e. not all run at Redmond) starting in March 2013.</p>
<p>Additional resources:</p>
<ul>
<li>For more details on the MCSM take a look at <a href="http://www.microsoft.com/learning/en/us/certification/MCSM-sharepoint.aspx">MCSM: SharePoint Certification Overview</a>.</li>
<li>For more details on the MCSE and an overview of the entire SharePoint certifications for 2013 take a look at <a href="http://blog.concentra.co.uk/2012/12/10/sharepoint-2013-certification-overview/">SharePoint 2013 Certification Overview</a></li>
</ul>
     <p>The post <a href="https://www.sharepointconfig.com/2012/12/sharepoint-2013-development-certifications/">SharePoint 2013 Development Certifications</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2012/12/sharepoint-2013-development-certifications/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Top 7 developer resources for SharePoint 2013</title>
		<link>https://www.sharepointconfig.com/2012/07/top-7-developer-resources-for-sharepoint-2013/</link>
					<comments>https://www.sharepointconfig.com/2012/07/top-7-developer-resources-for-sharepoint-2013/#respond</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Tue, 17 Jul 2012 11:27:34 +0000</pubDate>
				<category><![CDATA[2013]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1078</guid>

					<description><![CDATA[<p>As you are most likely aware, Microsoft announced the Office 2013 and SharePoint 2013 preview on the 16th of July. There is already a stack of information out there but if you are getting started or want to find out more here is a summary of some of the resources I’ve found useful: Office 2013 [&#8230;]</p>
<p>The post <a href="https://www.sharepointconfig.com/2012/07/top-7-developer-resources-for-sharepoint-2013/">Top 7 developer resources for SharePoint 2013</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>As you are most likely aware, Microsoft announced the Office 2013 and SharePoint 2013 preview on the 16th of July. There is already a stack of information out there but if you are getting started or want to find out more here is a summary of some of the resources I’ve found useful:</p>
<h3>Office 2013 Launch Event and Overview</h3>
<p>A good place to start is the webcast of the <a href="http://www.microsoft.com/en-us/news/presskits/office/liveevent.aspx">official Office 2013 launch event from Microsoft</a>. If you prefer reading rather than watching the Engadget article <a href="http://www.engadget.com/2012/07/16/microsoft-office-15-preview/">Microsoft Office 2013 preview: details, screenshots and impressions</a> gives a good overview of the Office 2013 features. Some of the big changes are that Office has been redesigned to work with touch devices and integrates heavily with the cloud including SkyDrive and Skype integration. Microsoft also has details on the Office application updates at <a href="http://www.microsoft.com/office/preview/en">http://www.microsoft.com/office/preview/en</a>.</p>
<h3>SharePoint Developer Center on MSDN</h3>
<p>The <a href="http://msdn.microsoft.com/en-us/sharepoint">SharePoint developer centre on MSDN</a> has a good <a href="http://msdn.microsoft.com/en-US/sharepoint/fp123576">overview of the new developer related features</a> in SharePoint 2013 including <a href="http://msdn.microsoft.com/en-US/sharepoint/fp123633">18 training videos</a> on new functionality relating to the changes in search, social ECM, WCM, REST, App development and OAuth.</p>
<h3>Understanding SharePoint 2013 Apps</h3>
<p>A big change for developers in SharePoint 2013 is the introduction of SharePoint Apps. Andrew Connell has a great overview of the new SharePoint App Model and how it fits in with other development options in his article <a href="http://www.andrewconnell.com/blog/archive/2012/07/16/understanding-sharepoint-2013-apps-aka-apps-101.aspx">Understanding SharePoint 2013 Apps (aka: Apps 101)</a>. While you are there be sure to register for their upcoming <a href="http://www.criticalpathtraining.com/Schedule/Webcasts/Pages/SharePoint+2013+Office+Hours.aspx">SharePoint 2013 webinars</a>.</p>
<h3>Start building apps for Office and SharePoint</h3>
<p>To find out more about developing apps there are some great resources at the <a href="http://msdn.microsoft.com/en-us/library/office/apps/jj220030(v=office.15)">Apps for Office and SharePoint site</a>, including code samples, details on the <a href="http://msdn.microsoft.com/en-us/library/office/apps/jj220038(v=office.15)">‘Napa’ Office 365 Development Tools</a> and <a href="http://msdn.microsoft.com/en-us/library/office/apps/jj163794(v=office.15)">detailed API documentation</a>.</p>
<h3>Sign up for an Office 365 Developer Site</h3>
<p>The quickest way to get started building apps is to create a Office 365 Developer Site which gives you a preconfigured SharePoint 2013 Preview site. Sign up at <a href="http://msdn.microsoft.com/en-us/library/office/apps/fp179924(v=office.15)">http://msdn.microsoft.com/en-us/library/office/apps/fp179924(v=office.15)</a> – within a few minutes you will have a shiny new SharePoint 2013 site to play with!</p>
<p><a href="http://www.sharepointconfig.com/wp-content/uploads/2012/07/office-365-developer-preview.png"><img loading="lazy" decoding="async" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="office-365-developer-preview" src="http://www.sharepointconfig.com/wp-content/uploads/2012/07/office-365-developer-preview_thumb.png" alt="office-365-developer-preview" width="644" height="421" border="0" /></a></p>
<h3>Download Microsoft SharePoint Server 2013 Preview</h3>
<p>If you want to get the on-premise version you can grab it from <a href="http://technet.microsoft.com/en-US/evalcenter/hh973397.aspx?wt.mc_id=TEC_121_1_33">http://technet.microsoft.com/en-US/evalcenter/hh973397.aspx?wt.mc_id=TEC_121_1_33</a>. Eric Harlan has a good article on <a href="http://www.ericharlan.com/Moss_SharePoint_2007_Blog/how-to-install-sharepoint-2013-a220.html">How to install SharePoint 2013</a> but this is largely the same as SharePoint 2010.</p>
<h3>SharePoint 2013 TechCenter</h3>
<p>To get an understanding of the architectural changes including an overview of enterprise search and authentication head over to the <a href="http://technet.microsoft.com/en-us/sharepoint/fp142366">SharePoint 2013 for IT pros site on TechNet</a>. This includes a bunch of videos and presentations covering the <a href="http://technet.microsoft.com/en-us/library/cc261970(v=office.15)">new SharePoint 2013 functionality</a> from search (FAST functionality is now baked into the core search component), architecture, mobile, authentication (Claims is now the default and Classic mode has been deprecated), WCM (including the new <a href="http://technet.microsoft.com/en-us/library/jj219688(v=office.15)#BKMK_contentsearch">Content by Search Web Part</a>) and much more.</p>
     <p>The post <a href="https://www.sharepointconfig.com/2012/07/top-7-developer-resources-for-sharepoint-2013/">Top 7 developer resources for SharePoint 2013</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2012/07/top-7-developer-resources-for-sharepoint-2013/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SharePoint 15 object model preview</title>
		<link>https://www.sharepointconfig.com/2012/01/sharepoint-15-object-model-preview/</link>
					<comments>https://www.sharepointconfig.com/2012/01/sharepoint-15-object-model-preview/#respond</comments>
		
		<dc:creator><![CDATA[Ari Bakker]]></dc:creator>
		<pubDate>Mon, 30 Jan 2012 22:49:32 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.sharepointconfig.com/?p=1073</guid>

					<description><![CDATA[<p>Earlier today, Microsoft Corporate VP PJ Hough announced the beginning of a Technical Preview program for Office 15. No specific details of features were announced but it was mentioned that: Office 15 is the most ambitious undertaking yet for the Office Division. With Office 15, for the first time ever, we will simultaneously update our [&#8230;]</p>
<p>The post <a href="https://www.sharepointconfig.com/2012/01/sharepoint-15-object-model-preview/">SharePoint 15 object model preview</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Earlier today, Microsoft Corporate VP PJ Hough announced the beginning of a <a href="http://blogs.office.com/b/office-exec/archive/2012/01/30/quot-office-15-quot-begins-technical-preview.aspx">Technical Preview program for Office 15</a>. No specific details of features were announced but it was mentioned that:</p>
<blockquote>
<p>Office 15 is the most ambitious undertaking yet for the Office Division. With Office 15, for the first time ever, we will simultaneously update our cloud services, servers, and mobile and PC clients for Office, Office 365, Exchange, SharePoint, Lync, Project, and Visio. Quite simply, Office 15 will help people work, collaborate, and communicate smarter and faster than ever before.&#160;&#160; </p>
<p>While the Technical Preview program is already full, everyone will have the opportunity to try the Office 15 public beta later this summer, and we&#8217;ll have more to share about the release then. In the meantime, I do want to thank everyone who is participating in the Technical Preview for their contributions and all our customers for their continued support.</p>
</blockquote>
<p>A <a href="http://www.microsoft.com/download/en/details.aspx?id=28768">technical preview of the Managed Object Model Software Development Kit for SharePoint 15</a> was also released today and this provides some insights into what might be included in the next version of SharePoint. Some of the more interesting additions are:</p>
<p>The addition of a CorporateCatalog enumeration with the following values:</p>
<ul>
<li>StoreFront &#8211; The package is from the marketplace.</li>
<li>CorporateCatalog &#8211; The package is from a corporate gallery.</li>
<li>DeveloperSite &#8211; The package is from a developer site.</li>
<li>ObjectModel &#8211; The package is loaded via an object model.</li>
<li>RemoteObjectModel &#8211; The package is uploaded via CSOM.</li>
</ul>
<p>New SPApp, SPAppInstance and SPAppCatalog classes. The description for the SPApp class states: “Represents an app loaded onto Microsoft SharePoint Server and ready to be installed.” which also contains a CreateAppInstance method that states “Creates an instance of an app at the specified site specified by the web parameter. The new instance can then be retrievedby using the SPAppCatalog class and using the returned ID.”</p>
<p>This hints at an extended deployment framework allowing more control over deployment of custom components within SharePoint. For example we also have a SPWeb.LoadAndInstallApp method that is used to upload and install an app package and a SPWeb.AppDatabaseName property.</p>
<p>Another potentially related addition is the SPWebApplication.IsUserLicensedForEntity method that “Checks if the currently logged in user has the proper license to access the specified entity.”</p>
<p>There isn’t a lot of information about what these are used for but it raises some interesting questions – is this an extension to the feature and solution model for deploying additional SharePoint functionality? Will you be able to create apps that work on Windows 8 and SharePoint 15? If you have any ideas or find any other interesting bits of information leave a note in the comments below.</p>
     <p>The post <a href="https://www.sharepointconfig.com/2012/01/sharepoint-15-object-model-preview/">SharePoint 15 object model preview</a> appeared first on <a href="https://www.sharepointconfig.com">SharePoint Config</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.sharepointconfig.com/2012/01/sharepoint-15-object-model-preview/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
