RSS Feedhttps://dev.sitecore.net/DocSite RSS Feeden{668B6465-A625-43D6-98B1-467FA62692D2}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Digital_marketing/Sitecore_Forms/Creating_forms/The_structure_elements.aspxThe structure elements<p>The Sitecore Forms application groups the elements to help structure your forms in the <span class="scwindow">Structure</span> section of the <span class="scwindow">Form elements</span> pane. </p><p>This topic describes the following form structure elements and their settings:</p><ul><li><a href="#_Section" go-to-section="">Section</a></li><li><a href="#_Page" go-to-section="">Page</a></li><li><a href="#_Submit_button" go-to-section="">Submit button</a></li></ul><h2 class="heading2" expand-collapse="" id="_Section"><bookmark></bookmark>Section</h2><div class="collapsable"><p>Use the Section element to divide the form into sections.</p><table class="table"><tbody><tr><th style="width: 19%;"><p><span class="scwindow">Section</span></p></th><th style="width: 21%;"><p><span class="scwindow">Item</span></p></th><th style="width: 59%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>Details</p></td><td><p>Field name</p></td><td><p>Name of the element.</p></td></tr><tr><td><p>Styling</p></td><td><p>CSS class</p></td><td><p>Define the CSS class of the field.</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_Page"><bookmark></bookmark>Page </h2><div class="collapsable"><p>If you want to create a long form with multiple sections, you can use the Page element to create a form that contains multiple pages and make it more user-friendly. </p><p>The Page element has only one setting: the name of the element.</p></div><h2 class="heading2" expand-collapse="" id="_Submit_button"><bookmark></bookmark>Submit button</h2><div class="collapsable"><p>Use the submit button for navigation (previous and next buttons), to submit the form, and/or to trigger submit actions. You can add different types of actions to all submit buttons. For example, the submit action <span class="scwindow">Save data</span> added to the next button makes sure the data is saved to your database when a contact clicks <span class="scwindow">Next</span> to move on to the next page of the form. </p><table class="table"><tbody><tr><th style="width: 19%;"><p><span class="scwindow">Section</span></p></th><th style="width: 21%;"><p><span class="scwindow">Item</span></p></th><th style="width: 59%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td rowspan="3"><p>Details</p><p><p></td><td><p>Label</p></td><td><p>Name the button. For example: <em class="scemphasis">Continue/Next, Previous, Submit</em>.</p></td></tr><tr><td><p>Field name</p></td><td><p>Name of the element.</p></td></tr><tr><td><p>Navigation step </p></td><td><p>Determines what happens after clicking the <span class="scwindow">Submit</span> button. The options are <span class="scwindow">Submit</span>, <span class="scwindow">Previous</span>, or <span class="scwindow">Next</span>.</p></td></tr><tr><td><p>Styling</p></td><td><p>CSS class</p></td><td><p>Defines the CSS class of the field.</p></td></tr><tr><td rowspan="5"><p>Submit actions</p></td><td><p>Delete the submit action</p></td><td><p>Deletes a submit action.</p></td></tr><tr><td><p>Modify the submit action</p></td><td><p>Opens a submit action for modification.</p></td></tr><tr><td><p>Move the submit action one step up</p></td><td><p>Moves the submit action one step up in the list.</p></td></tr><tr><td><p>Move the submit action one step down</p></td><td><p>Moves the submit action one step down in the list.</p></td></tr><tr><td><p>Add a submit action</p></td><td><p>Click <img src="/~/media/FFC88C5F0A644997BECE72D923CA2CB0.ashx?la=en" height="23" width="24" alt="Picture 1" title="" class="documentimage" doc-fancy-image=""> to add one of the following submit actions:</p><p><span class="scwindow">Trigger Goal –</span> selects a preset goal.</p><p><span class="scwindow">Trigger</span> <span class="scwindow">Campaign</span> <span class="scwindow">Activity</span> – selects a preset campaign activity.</p><p><span class="scwindow">Trigger</span> <span class="scwindow">Outcome</span> – selects an outcome type.</p><p id="_GoBack"><bookmark></bookmark><span class="scwindow">Send Email Campaign Message</span> - select the email campaign message that should be sent when the button is clicked.</p><p><span class="scwindow">Redirect</span> <span class="scwindow">to</span> <span class="scwindow">Page</span> – redirects the visitor to a web page.</p><p><span class="scwindow">Save</span> <span class="scwindow">Data</span> – saves the form data to the database.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you add more than one submit action, the order is important. For example, if you place a redirect action before a save action, the form data may not be saved.</p></section></td></tr></tbody></table><p><p><p><p></div>Mon, 05 Nov 2018 11:33:56 +0100{ADE71BE7-1CFE-49D2-B743-9868E80B9203}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Digital_marketing/Sitecore_Forms/Reporting/Analyzing_form_performance.aspxAnalyzing form performance<p>The <span class="scwindow">Performance</span> tab in the right pane of the Sitecore Forms dashboard provides information about how visitors interact with your forms. The tab contains a number of fields providing detailed information about a specific form. You can view form performance on a form level and on an element level.</p><p>This topic describes:</p><ul><li><a href="#_Form_performance" go-to-section="">Form performance</a></li><li><a href="#_Form_field_performance" go-to-section="">Form field performance</a></li></ul><h2 class="heading2" expand-collapse="" id="_Form_performance"><bookmark></bookmark>Form performance</h2><div class="collapsable"><p>The analytics and reporting capabilities of the Sitecore Forms application enable you to evaluate your forms. On the <span class="scwindow">Performance</span> tab, you can see an overview of the performance of your form.</p><section class="note"><p class="scnoteheader" id="_Hlk495310504"><bookmark></bookmark>Note</p><p class="scnotebody">If you run Sitecore Forms in CMS-only mode, any functionality that depends on data collection will be unavailable and you won&#39;t be able to see form results. </p></section><p>You can view:</p><ul><li>Date range – in the <span class="scwindow">From</span> and <span class="scwindow">To</span> fields, you can set the date range of the performance report that you want to view.</li><li>Unique views – number of unique contacts.</li><li>Abandonments – number of contacts who did not submit the form.</li><li>Abandonment rate – percentage of contacts not submitting the form.</li><li>Abandonment rate, Average time, Error rate – select the radio button to view the performance of the fields on the form.</li></ul><p><img src="/~/media/6AB97831612A4374A465E1C0AD961F6D.ashx?la=en" height="497" width="227" alt="Picture 5" title="" class="documentimage" doc-fancy-image=""></p></div><h2 class="heading2" expand-collapse="" id="_Form_element_performance" id="_Form_field_performance"><bookmark></bookmark><bookmark></bookmark>Form field performance</h2><div class="collapsable"><p>Forms also captures the form field events. In this way, you can analyze the performance of a specific field. For example, if a single-line field shows a very high abandonment rate, it might not be clear to contacts what they are supposed to fill in and you could decide to phrase the field text differently.</p><p><img src="/~/media/26701821E0B54B94BD9CC9931BA39B90.ashx?la=en" height="459" width="227" alt="Picture 4" title="" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheader"><span class="scwindow">Note</span></p><p class="scnotebody">If your performance report includes overlapping values for the same form element, this is caused by forms using the same field name for multiple instances of the form element.</p><p class="scnotebody" id="_GoBack"><bookmark></bookmark><img src="/~/media/525A72568D5E408CAE571AD8AD058C79.ashx?la=en" height="105" width="259" alt="cid:image001.png@01D46F74.E570A040" title="" class="documentimage" doc-fancy-image=""></p></section><p><p><span class="scwindow">Date </span>– use the <span class="scwindow">From</span> and <span class="scwindow">To</span> fields to set the date range for the performance report that you want to view.</p><p><span class="scwindow">Abandonment rate </span>– percentage of contacts that left the form at this field.</p><p><span class="scwindow">Error rate</span> – percentage of errors triggered by validation rules.</p><p><span class="scwindow">Average time </span>– time spent on this element.</p><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You can specify whether the data of a specific field item is saved to the database by selecting the <span class="scwindow">Allow save </span>checkbox.</p></section><p> </p><p><p></div>Tue, 30 Oct 2018 11:23:22 +0100{10243759-39B4-49FA-91DC-FA43D157A32E}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Digital_marketing/Sitecore_Forms/Creating_forms/Create_a_new_form.aspxCreate a form<p>The Sitecore Forms application enables you to quickly create forms by using standard elements. Before you start building your form, you must decide what you want to ask contacts and determine the form fields you want to include. </p><p>This topic describes how to:</p><ul><li><a href="#_Create_a_form" go-to-section="">Create a form</a></li><li><a href="#_Add_a_form" go-to-section="">Add a form field</a></li></ul><h2 class="heading2" expand-collapse="" id="_Create_a_form"><bookmark></bookmark>Create a form</h2><div class="collapsable"><p>You can construct your form using templates or start with a blank form.</p><p>To create a form:</p><ol><li>On the Forms dashboard, click <span class="scwindow">Create.</span><p><img src="/~/media/9F8E935AEEF64486A755B2C923086DC2.ashx?la=en" height="364" width="423" alt="On the Forms dashboard click Create to add a new form." title="Create button " class="documentimage" doc-fancy-image=""></p></li><li>To create a new form from scratch, click <span class="scwindow">Blank form,</span> or select a template to base your form on.<p><img src="/~/media/3767CFE3422D46FE916F6DCC08165E81.ashx?la=en" height="320" width="624" alt="You can create a form from scratch or use a template." title="Create a form" class="documentimage" doc-fancy-image=""></p></li></ol></div><h2 class="heading2" expand-collapse="" id="_Add_the_form" id="_Add_a_form"><bookmark></bookmark><bookmark></bookmark>Add a form field</h2><div class="collapsable"><p>You add a field to a new form by dragging a form element from the <span class="scwindow">Form elements</span> pane onto the form canvas. When you have placed an element as a form field on your form, you can change its settings on the <span class="scwindow">General</span> tab in the <span class="scwindow">Form elements</span> pane.</p><p>To add a form field:</p><ol><li>In the <span class="scwindow">Form elements</span> pane, click the element that you want to add and then drag it to the form canvas.<p><img src="/~/media/413AE1D474464C63B39280AE26F0FD5D.ashx?la=en" height="228" width="624" alt="Drag form elements to the form canvas." title="Add form fields" class="documentimage" doc-fancy-image=""></p></li><li>When you have found the right place for your element and a green line appears, drop the element.</li><li>To change the settings of the new field, on the canvas, click the field and apply the changes in the <span class="scwindow">Form elements</span> pane. For example, add a CSS class to your field to style it.</li><li>When you have finished changing the settings, click <span class="scwindow">Apply </span>to see the changes on the form.<p><img src="/~/media/AABF109B635A46AAB8AFA018DD950AF8.ashx?la=en" height="334" width="624" alt="Apply styling to your form." title="CSS class" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">We recommend that you preview the form before publishing it on the website. The way the form displays in the Forms application might not reflect the actual styling of the form on the webpage.</p></section></li><li>To add a list to your form, in the Form elements pane, in the <span class="scwindow">Lists</span> section, drag the <span class="scwindow">Dropdown list</span> to the form. </li><li>In the <span class="scwindow">Details</span> section, you can add the list items. Make sure to always add a meaning <span class="scwindow">Field name</span>. The <span class="scwindow">Field name</span> is the actual Item name for the Sitecore definition item for the form field. Giving form elements meaningful names,<bookmark></bookmark> makes it easier to distinguish them in for example form field performance tracking.<p><img src="/~/media/47C5D914F1E248D494B84B066359960E.ashx?la=en" height="486" width="256" alt="Picture 3" title="" class="documentimage" doc-fancy-image=""></p></li><li>To add a Submit button on your form, in the <span class="scwindow">Form elements</span> pane, in the <span class="scwindow">Structure</span> section, drag the Submit button element to the form.<p><img src="/~/media/B98300DC5D234ADEB6120B6C33858ECF.ashx?la=en" height="424" width="624" alt="In the Structure section, drag the Submit button to the form canvas." title="Submit button " class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Details</span> section, enter a name for your button and, in the <span class="scwindow">Navigation step</span> field, select <span class="scwindow">Submit</span>.</li><li>Click <span class="scwindow">Apply </span>to see the changes on the form.<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">Occasionally, you might want to remove a field from your form. To delete a form field, click the field that you want to delete and then click Delete <img src="/~/media/168322EE4C3248A69AA9A2664C5A6B03.ashx?la=en" height="23" width="23" alt="Delete form." title="Delete" class="documentimage" doc-fancy-image="">.</p></section></li><li>To save your form:<ul class="scbullet2ndlevel"><li>click <span class="scwindow">Save </span><img src="/~/media/32BDFB08937F4A1EAEF028558059B911.ashx?la=en" height="40" width="80" alt="Picture 6" title="" class="documentimage" doc-fancy-image=""><span class="scwindow"> </span>to save and name the new form.</li><li>Click <span class="scwindow">Save the selected form</span> <img src="/~/media/0E2712D59B2F4F87B3AD229127255C2F.ashx?la=en" height="32" width="35" alt="Picture 10" title="" class="documentimage" doc-fancy-image=""> to save and name a copy of the form.</li><li>Click <span class="scwindow">Save the form as a form template</span> <img src="/~/media/533846D114CA47EC9A278B08A5775FB8.ashx?la=en" height="34" width="40" alt="Picture 2" title="" class="documentimage" doc-fancy-image=""> to save the form as a template.</li></ul></li></ol></div>Tue, 30 Oct 2018 11:15:06 +0100{9512752C-0A79-4BAD-8F83-A7D774D21AF1}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Digital_marketing/Sitecore_Forms/Setting_up_and_configuring/Add_a_form_to_a_web_page.aspxAdd a form to a webpage<p>With the Sitecore Forms application, you can easily create a new form or use a template. You can insert your form in a web page in both the Content Editor and the Experience Editor. First, you must replace the default sample layout with the MVC layout and then you can insert your form in a webpage.</p><p>The topic describes how to:</p><ul><li><a href="#_Add_the_MVC" go-to-section="">Add the MVC layout</a></li><li><a href="#_Insert_a_form" go-to-section="">Insert a form in a webpage</a></li><li><a href="#_Add_a_form" go-to-section="">Add a form to a webpage in Experience Editor</a></li></ul><h2 class="heading2" expand-collapse="" id="_Add_the_MVC"><bookmark></bookmark>Add the MVC layout</h2><div class="collapsable"><p>To add the MVC layout:</p><ol><li>In the Content Editor, navigate to <em class="scemphasis">sitecore/Layout,</em> right-click <span class="scwindow">Layouts</span>, click <span class="scwindow">Insert</span>, and click <span class="scwindow">MVC Layout</span>.<p><img src="/~/media/0EA703955C4648949666793085B2BD15.ashx?la=en" height="203" width="370" alt="In the Content Editor, navigate to sitecore\Layout\, right-click Layouts, click Insert, and click MVC Layout." title="Add the MVC Layout" class="documentimage" doc-fancy-image=""></p></li><li>Add the MVC layout to the <em class="scemphasis">Views</em> folder of your website.<p><img src="/~/media/925E2D2C50784905BB165E690D13182E.ashx?la=en" height="433" width="348" alt="Add the MVC layout to the Views folder of your website." title="File Location dialog box" class="documentimage" doc-fancy-image=""></p></li><li>For form scripts and styles to be rendered, you must use two layouts: <code class="sccode">MVC Layout.cshtml</code> and <code class="sccode">MVC OuterLayout.cshtml</code>. First, open the <code class="sccode">MVC Layout.cshtml </code>file and to refer to the outer layout that you will create in the next step, add <code class="sccode">Layout = MVCOuterLayout.cshtml</code><pre class="codesnippet"><code class="prettyprint">@using Sitecore.Mvc</code></pre><pre class="codesnippet"><code class="prettyprint">@using Sitecore.Mvc.Analytics.Extensions</code></pre><pre class="codesnippet"><code class="prettyprint"> </code></pre><pre class="codesnippet"><code class="prettyprint">@{</code></pre><pre class="codesnippet"><code class="prettyprint">Layout = &quot;MvcOuterLayout.cshtml&quot;;</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre><pre class="codesnippet"><code class="prettyprint"> </code></pre><pre class="codesnippet"><code class="prettyprint">&lt;h1&gt;@Html.Sitecore().Field(&quot;title&quot;)&lt;/h1&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;div&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">@Html.Sitecore().Placeholder(&quot;main&quot;)</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/div&gt;</code></pre></li><li>Create the outer layout file. It must contain:<ul class="scbullet2ndlevel"><li><code class="sccode">@using Sitecore.ExperienceForms.Mvc.Html</code></li><li>In the head section: <code class="sccode">@Html.RenderFormStyles()</code>and <code class="sccode">@Html.RenderFormScripts()</code></li><li>In the body: <code class="sccode">@RenderBody()</code></li></ul><p><pre class="codesnippet"><code class="prettyprint">@using Sitecore.Mvc</code></pre><pre class="codesnippet"><code class="prettyprint">@using Sitecore.ExperienceForms.Mvc.Html</code></pre><pre class="codesnippet"><code class="prettyprint">@using Sitecore.Mvc.Analytics.Extensions</code></pre><pre class="codesnippet"><code class="prettyprint">@{</code></pre><pre class="codesnippet"><code class="prettyprint"> Layout = null;</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;!DOCTYPE html&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;html lang=&quot;en&quot; xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;head&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;title&gt;@Html.Sitecore().Field(&quot;title&quot;, new { DisableWebEdit = true })&lt;/title&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> @Html.Sitecore().VisitorIdentification()</code></pre><pre class="codesnippet"><code class="prettyprint"> @Html.RenderFormStyles()</code></pre><pre class="codesnippet"><code class="prettyprint"> @Html.RenderFormScripts()</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/head&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;body style=&quot;padding-top: 70px;&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> @RenderBody()</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/body&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/html&gt;</code></pre></li></ol><p id="_Insert_a_form"><bookmark></bookmark></p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you work with an existing site, and therefore an existing layout, you should apply the following two steps to the View file referenced in their layout: </p><p class="scnotebody">add the reference <code class="sccode">@using Sitecore.ExperienceForms.Mvc.Html</code> </p><p class="scnotebody">and in the head section:</p><p class="scnotebody">add <code class="sccode">@Html.RenderFormStyles()</code> and <code class="sccode">@Html.RenderFormScripts()</code>. </p><p class="scnotebody">Doing this will add the necessary references to the form stylesheets and JavaScript files. By using the Experience Editor you can now add the MVC Form component to add a form to a page.</p></section><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody" id="_GoBack">In CMS-only mode, you run Sitecore Forms without analytics functionality. Therefore, from MVCOuterLayout.cshtml <bookmark></bookmark>remove:</p><p class="scnotebody"><code class="sccode">@using Sitecore.Mvc.Analytics.Extensions </code></p><p class="scnotebody"><code class="sccode">@Html.Sitecore().VisitorIdentification()</code></p></section></div><h2 class="heading2" expand-collapse="">Insert a form in a webpage</h2><div class="collapsable"><p>After you have added the MVC layout, you can insert your form in a webpage.</p><p>To add the form to the page:</p><ol><li>Navigate to your website and on the <span class="scwindow">Presentation</span> tab, click <span class="scwindow">Details</span>.</li><li>In the <span class="scwindow">Layout Details</span> dialog box, click the default layout to change it.<p><img src="/~/media/DF3837C03EE84F2F8DDE1D5EDB906E53.ashx?la=en" height="330" width="390" alt="In the Layout Details dialog box, click the default layout to change it." title="Layout Detail dialog box" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Device Editor</span> dialog box, from the drop-down list, click <em class="scemphasis">Layouts/MVC Layout</em>.<p><img src="/~/media/7B6AA4607E994DE395030E683E18440D.ashx?la=en" height="223" width="624" alt="In the Device Editor dialog box, click Layouts/MVC Layout." title="Device Editor dialog box" class="documentimage" doc-fancy-image=""></p></li><li>On the <span class="scwindow">Controls</span> tab, remove the existing controls and then click <span class="scwindow">Add</span>.</li><li>Navigate to <em class="scemphasis">Renderings/System/Forms</em>, and click <span class="scwindow">Mvc</span> <span class="scwindow">Form</span>.</li><li>In the <span class="scwindow">Select a Rendering</span> dialog box, in the <span class="scwindow">Add</span> <span class="scwindow">to</span> <span class="scwindow">Placeholder</span> field, enter <em class="scemphasis">main</em>, and then click <span class="scwindow">Select</span>.<p><img src="/~/media/FB88B0735ED14BE899D9A815E032FB0F.ashx?la=en" height="427" width="350" alt="In the Add to Placeholder field enter main." title="Select a Rendering dialog box" class="documentimage" doc-fancy-image=""></p></li><li>On the <span class="scwindow">Controls</span> tab, click the MVC form control and click <span class="scwindow">Edit</span>. </li><li>In the <span class="scwindow">Data Source</span> field, select the form you want to add to the page.<p><img src="/~/media/12718B7B4E4E4BC0AC9D54068FD0F009.ashx?la=en" height="270" width="290" alt="In the Data Source section, select the form." title="Control Properties dialog box" class="documentimage" doc-fancy-image=""></p></li><li>Publish the page.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Add_a_form"><bookmark></bookmark>Add a form to a webpage in Experience Editor</h2><div class="collapsable"><p>You can insert your form into your web page in the Experience Editor. To be able to do this you must make sure that the Mvc Form control is allowed for placeholders.</p><p>To add the Mvc Form control to the Placeholder Settings:</p><ol><li>In the Content Editor, navigate to <em class="scemphasis">sitecore/Layout/Placeholder Settings</em> and click <span class="scwindow">content</span>. </li><li>In the <em class="scemphasis">Data</em> section, in the <span class="scwindow">Allowed Controls</span> field, click <span class="scwindow">Edit</span>.</li><li>In the <span class="scwindow">Select Items</span> dialog box, click the <em class="scemphasis">Mvc Form,</em> and click <span class="scwindow">OK</span>.</li></ol><p><img src="/~/media/E730E917EA654567BCBEF0658C951DE2.ashx?la=en" height="316" width="582" alt="In the Allowed Controls field add the MVC Form control." title="Add MVC Form control to Placeholder Settings" class="documentimage" doc-fancy-image=""></p><p>To add a form to a webpage in Experience Editor:</p><ol><li>Open the relevant webpage in the Experience Editor and click <span class="scwindow">Add a new component</span>.<p><img src="/~/media/20E77EC525F540BC8CFB034794B51255.ashx?la=en" height="288" width="553" alt="In Experience Editor, click add a new component." title="Add a new component" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Add here</span>. </li><li>In the <span class="scwindow">Select a Rendering </span>dialog box, click Mvc Form, and click <span class="scwindow">Select</span>.<p><img src="/~/media/95A4C37F6265423ABC429D7DD60C056B.ashx?la=en" height="347" width="465" alt="Click MVC Form and click Select." title="Select a Rendering dialog box" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Select the Associated Content</span> dialog box, select the form and click <span class="scwindow">OK</span>.<p><img src="/~/media/AE7D71624B8848CDA50F8CD44F0F4799.ashx?la=en" height="374" width="624" alt="In the Select the Associated Content dialog box, select the form and click OK." title="Select the Associated Content" class="documentimage" doc-fancy-image=""></p><p>The form is added to the page:</p><p><img src="/~/media/AA8D1826B5C0404BB8FCB21D41E34DB0.ashx?la=en" height="358" width="553" alt="The form is added to the page." title="Form on the page" class="documentimage" doc-fancy-image=""></p></li></ol></div>Tue, 16 Oct 2018 09:37:20 +0200{B8EC8454-38D0-4F94-BF27-F86E9CEBA96C}https://doc.sitecore.net/en/Products/Sitecore_Experience_Accelerator/17/Building_the_layout/Renderings/Create_a_rendering_variant.aspxCreate a rendering variant<p>SXA comes with a set of default renderings and rendering variants. Rendering variants are configurable adaptations of the default renderings. To encourage reusability, designers and front-end developers can also create new rendering variants. This gives authors more options in the way they present their content.</p><p id="_Create_a_rendering"><bookmark></bookmark>You can create your own variation of a rendering by adding a variant in the Content Editor.</p><p>To create a rendering variant:</p><ol><li>In the Content Editor, click the site and open the <em class="scemphasis">Presentation/Rendering Variants</em> folder. This folder lists all the renderings that allow variants.<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">To add a rendering to the folder, contact your Administrator.</p></section></li><li>Right-click the rendering that you want to add the variant to, and then click <span class="scwindow">Insert</span>, <span class="scwindow">Variant Definition</span>.<p><img src="/~/media/28F1619000C84641A416F1B677A7FD8F.ashx?la=en" height="431" width="497" alt="Go to Presentation, Rendering Variant, right-click the rendering." title="Add a rendering variant" class="documentimage" doc-fancy-image=""></p></li><li>Enter a name and click <span class="scwindow">OK</span>.</li><li>In the <span class="scwindow">Variant Details</span> section, specify information in the following fields:<ul class="scbullet2ndlevel"><li><span class="scwindow">Field used as link target: </span>provide the field name of the target item. This class is added to the list and navigation items markup (<code class="sccode">li</code> HTML element). This link is used to override all links when the <span class="scwindow">Is link</span>, <span class="scwindow">Is prefix link</span>, or <span class="scwindow">Is suffix link</span> check boxes are selected.</li><li><span class="scwindow">Allowed in templates:</span> specify the pages that the variant is available for. Click the relevant page template, click the right arrow to move it to the list of selected items, and then click <span class="scwindow">Save</span>. If there are no templates selected, the variant is available for all pages.</li><li><span class="scwindow">Compatible renderings</span>: Makes rendering variant available for other renderings. For example, if for a Page Content rendering variant, in the Compatible Renderings field, you specify <em class="scemphasis">Title</em>, you can use the rendering variant for the Title rendering as well.</li><li><span class="scwindow">Css Class: </span>Specifies class to render into rendering content element. For example:<p><code class="sccode">&lt;div class=&quot;component title customClass col-xs-12&quot;&gt;</code></p><p><code class="sccode"> &lt;div class=&quot;component-content&quot;&gt;</code></p><p><code class="sccode">&lt;div class=&quot;field-title&quot;&gt;S&lt;/div&gt; </code></p><p><code class="sccode">&lt;/div&gt;</code></p><p><code class="sccode">&lt;/div&gt;</code></p></li><li><span class="scwindow">Item Css class field</span>: Specifies field name of the rendered item from which the CSS class will be taken and rendered into class attribute. Supported for Navigation rendering only. </li></ul></li><li>Optionally, in the <span class="scwindow">Appearance</span> section, you can add a thumbnail image for the variant. This image will appear in the variants drop-down box and can help content editor select the best variant for their purpose.<table class="table"><tbody><tr><th style="width: 53%;"><p class="scindent"><span class="scwindow">Content Editor</span></p></th><th style="width: 46%;"><p class="scindent"><span class="scwindow">Experience Editor</span></p></th></tr><tr><td><p class="scindent"><img src="/~/media/24D6CF7A959A45CDB4D380252B428F9C.ashx?la=en" height="152" width="272" alt="Add a thumbnail images." title="Thumbnail image for variant" class="documentimage" doc-fancy-image=""></p></td><td><p class="scindent"><img src="/~/media/9902A80256164A189357079CE04EE85E.ashx?la=en" height="225" width="209" alt="In the Experience Editor, select the rendering variant." title="Rendering variant selection with preview" class="documentimage" doc-fancy-image=""></p></td></tr></tbody></table><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">Rendering variants without a thumbnail display with their name only.</p><p class="scnotebodyindent"><img src="/~/media/6B90AC50CADB44D6BD0024ED410434BD.ashx?la=en" height="146" width="148" alt="Rendering variants without a thumbnail display with their name only." title="Rendering variant without thumbnail" class="documentimage" doc-fancy-image=""></p></section></li><li>To define the fields that will be displayed, you can add child items to the rendering variant, right-click the variant, click <span class="scwindow">Insert,</span> and then click the relevant item. <p><img src="/~/media/37435848B6304702B52D4A567F4078CD.ashx?la=en" height="339" width="430" alt="Picture 1" title="" class="documentimage" doc-fancy-image=""></p><p>These are the child items available for a rendering variant:</p><ul class="scbullet2ndlevel"><li><span class="scwindow">Date</span>: displays data and time in custom format. To be able to display date and time in custom format you have to use the Date item. This item is similar to the Field item but has an additional field: &quot;Date format&quot; that allows you to choose a date and time format. Like the Field item, the Date item can be used as fallback item and can have its own fall back items defined.<section class="note"><p class="scnoteheaderindent2ndlevel">Note:</p><p class="scnotebodyindent2ndlevel">The fields and variant details are described in a table below.</p></section></li><li><span class="scwindow">Edit Frame</span>: variant item that can be used in the Edit mode.</li><li><span class="scwindow">Field</span>: displays field name and other field values.</li><li><span class="scwindow">HTML Tag</span>: enables users to render HTML self-closing tags.</li><li><span class="scwindow">Model</span>: displays properties from the current Model. The SXA renderings model inherits from <code class="sccode">Sitecore.XA.Foundation.Mvc.Models.RenderingModelBase</code>. In the Property path field, you can enter the path to the property that you want to display. </li><li><span class="scwindow">Placeholder</span>: renders a placeholder that enables users to add additional renderings. If you want the user to be able to switch context for the renderings inside this placeholder, go to the <span class="scwindow">VariantDetails</span> section and select the <span class="scwindow">Switch component context to currently rendered item</span> checkbox.<p><img src="/~/media/8C7E48A0A5F049A3BD9FC0097FAA761E.ashx?la=en" height="141" width="435" alt="Picture 2" title="" class="documentimage" doc-fancy-image=""></p></li><li><span class="scwindow">Reference</span>: displays field from referenced item. If you want to display a field from a referenced item, you can define this field in the PassThroughField. You can use this variant field for the following fields: LinkField (GeneralLink, DropLink), FileField (File), ImageField (Image), and ReferenceField (Droptree). Reference items can contain have another reference item as its child item. This can be convenient when you want to create a tree of reference items and display fields from items which are referenced in referenced items.</li><li><span class="scwindow">Responsive</span> <span class="scwindow">Image</span>: enables to define the default size as well as the allowed sizes and width of images. Making your images responsive means that your browser serves a different sized version of that image based on the size of the image on your page and the screen resolution. The values entered in the Variant Details section will be combined in a <code class="sccode">srcset</code> attribute. The values in the following screenshot will generate the following img tag:<p><img src="/~/media/D0AF6445E0A240A1899E96BD03786BD4.ashx?la=en" height="344" width="334" alt="Picture 6" title="" class="documentimage" doc-fancy-image=""></p></li></ul><pre class="codesnippet"><code class="prettyprint">&lt;img src=&quot;/-/media/Project/Tenant/Site/26056130_2115225655366272_5152181870065454436_n/MyImage.JPEG?w=400&amp;amp;hash=C54AFF8A74289E7B0A776137DFF1D4F89DDEFF93&quot; alt=&quot;Simple description of the image&quot; sizes=&quot;(max-width: 320px) 280px, (max-width: 480px) 440px, 800px&quot; srcset=&quot;/-/media/Project/Tenant/Site/26056130_2115225655366272_5152181870065454436_n/MyImage.JPEG?w=280&amp;amp;hash=DB3A5BEB52094FC6C547F04211070DE715F458D3 280w,/-/media/Project/Tenant/Site/26056130_2115225655366272_5152181870065454436_n/MyImage.JPEG?w=440&amp;amp;hash=247F0C11B22A5339E5913F9C4EC52361D1D2A1F2 440w,/-/media/Project/Tenant/Site/26056130_2115225655366272_5152181870065454436_n/MyImage.JPEG?w=800&amp;amp;hash=D10309E3D24FF417E3194419240075419EF353B8 800w&quot;&gt;</code></pre><ul class="scbullet2ndlevel"><li><span class="scwindow">Section</span>: used to create groups. Section contains fields such as Tag (to create wrapping element for the section, for example &quot;div&quot;) and CssClass (to add a css class to the wrapping tag). You can nest Section items to create more complex variant structure.</li><li><span class="scwindow">Template</span>: allows user to define NVelocity template which will be used to render part of the HTML. The getVelocityTemplateRenderers pipeline can be used to add a custom renderer that later on can be used in the NVelocity template.<section class="note"><p class="scnoteheaderindent2ndlevel">Note</p><p class="scnotebodyindent2ndlevel">NVelocity is a .Net-based template engine. It permits developers to use the simple yet powerful template language to reference objects defined in .Net code.</p></section></li><li><span class="scwindow">Text</span>: displays text. Used to render custom string of for example a description. You can use the following fields: Text, Tag (define additional tag that will wrap text), CssClass (the css class that will be added to the tag), IsLink (if selected then custom text will be additionally wrapped by hyper link to the current item).</li><li><span class="scwindow">Token</span>: SXA supports tokens:<p><code class="sccode">​​​$Size</code>​​: displays size of a file depending on size unit.</p><p><code class="sccode">​​​$FileTypeIcon</code>​​: displays icon depending on file extension.</p><p><code class="sccode">​​​$id</code>​​: displays id of an item.</p><p id="_GoBack"><code class="sccode">​​​$name</code>​​: displays name of an item.<bookmark></bookmark></p><p>​The custom pipeline resolveVariantTokens can be used to extend the set of variant tokens.</p></li><li><span class="scwindow">Query</span>: allows to specify a query that will be will be run on current context item. This enables you to query child items or use SXA tokens. For example, if you want the rendering variant to display only for the child items of a certain template. You must start your query with query and then use standard Sitecore query syntax. You can combine Sitecore queries with SXA tokens such as $home and $site.</li></ul><p>Depending on the item you add, you can set the following fields:</p><table class="table"><tbody><tr><th style="width: 29%;"><p>Field</p></th><th style="width: 70%;"><p>Variant details</p></th></tr><tr><td><p>Tag</p></td><td><p>HTML tag used to wrap rendered field content. For example: div</p><p>If left empty field content will remain unwrapped.</p></td></tr><tr><td><p>Field name</p></td><td><p>Name of the field from the item used for rendering content.</p></td></tr><tr><td><p>Prefix</p></td><td><p>Adds string value as a prefix.</p></td></tr><tr><td><p>Suffix</p></td><td><p>Adds string value as a suffix.</p></td></tr><tr><td><p>Is link</p></td><td><p>Select to have hyperlinks that wrap the field content.</p></td></tr><tr><td><p>Is prefix link</p></td><td><p>Select to wrap prefix in the same link which you use for the field content.</p></td></tr><tr><td><p>Is suffix link</p></td><td><p>Select to wrap the suffix with a hyperlink.</p></td></tr><tr><td><p>Is download link</p></td><td><p>Select to have a hyperlink with a download attribute.</p></td></tr><tr><td><p>Is editable</p></td><td><p>Select to edit rendered field.</p></td></tr><tr><td><p>Date format</p></td><td><p>Determines the date format.</p></td></tr><tr><td><p>Render if empty</p></td><td><p>Select to render empty element when the field is empty.</p></td></tr><tr><td><p>Pass through field</p></td><td><p>Defines the name of the field from the nested item.</p></td></tr><tr><td><p>Text</p></td><td><p>The text to render.</p></td></tr><tr><td><p>Template</p></td><td><p>Define the NVelocity template that renders part of the component variant HTML. You can use the following objects: </p><p>$item: access to the current item ($item.Name displays current item name).</p><p>$dateTool.Format(date, format): formats date and time values.</p><p>$numberTool.Format(number, format): formats numbers.</p><p>$geospatial: in case of geospatial search ($geospatial.Distance) will show distance to certain point of interest).</p></td></tr><tr><td><p>Token</p></td><td><p>Use special tokens to format certain field values. Supported tokens are:</p><p>$Size: displays size of a file depending on size unit.</p><p>$FileTypeIcon: displays icon depending on file extension.</p><p>$id: displays id of an item.</p><p>$name: displays name of an item.</p></td></tr><tr><td><p>Query</p></td><td><p>Determines the query that will be run on the current context item. For example:</p><p>To get all child items:</p><p>query:./* </p><p>To get all items of Page template from under the current item:</p><p>query:..//*[@@templatename=&#39;Page&#39;] </p><p>To get all items of Page template from under Home item of the current site:</p><p>query:$site/*[@@name=&#39;Home&#39;]//*[@@templatename=&#39;Page&#39;] </p></td></tr><tr><td><p>Maximum number of results</p></td><td><p>Enter a number to limit the number of items returned.</p></td></tr><tr><td><p>Property path</p></td><td><p>In the Property path field, you can enter the path to the property that you want to display. For example, Item.Paths.Path will access Item property from Model, then dig deeper and access the Paths property and then the Path string.</p><p><img src="/~/media/9F19CC149C584840ACCD68E3C8946D49.ashx?la=en" height="123" width="370" alt="C:\Users\rtj\AppData\Local\Packages\Microsoft.Office.OneNote_8wekyb3d8bbwe\TempState\msohtmlclip\clip_image001.png" title="" class="documentimage" doc-fancy-image=""></p><p>&#160;</p><p><img src="/~/media/A6FAFD741E474513848308D56D930E7B.ashx?la=en" height="76" width="268" alt="C:\Users\rtj\AppData\Local\Packages\Microsoft.Office.OneNote_8wekyb3d8bbwe\TempState\msohtmlclip\clip_image002.png" title="" class="documentimage" doc-fancy-image=""></p><p></td></tr><tr><td><p>DataAttributes</p></td><td><p>Adds a data attribute to the HTML element generated by the rendering variant item.</p></td></tr><tr><td><p>LinkAttributes</p></td><td><p>Adds a link attribute to the link element generated by the rendering variant.</p></td></tr><tr><td><p>Buttons</p></td><td><p>Edits frame buttons. Go to:<code class="sccode">/sitecore/content/Applications/WebEdit/Edit Frame Buttons</code> to select a button.</p></td></tr><tr><td><p>Placeholder Key</p></td><td><p>Defines placeholder key used for rendering placeholder.</p></td></tr><tr><td><p>DefaultSize</p></td><td><p>Determines the default size of a responsive image.</p><p>Used to generate responsive image syntax. For example,</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;img srcset=&quot;photo-author1-320w.jpg 320w,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; photo-author1-480w.jpg 480w,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; photo-author1-800w.jpg 800w&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160; sizes=&quot;(max-width: 320px) 280px,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (max-width: 480px) 440px,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 800px&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160; src=&quot;photo-author1-800w.jpg&quot; alt=&quot;Blog author 1&quot;&gt;</code></pre></td></tr><tr><td><p>Sizes</p></td><td><p>Defines media conditions for a responsive image and indicates what image size would be best to choose.</p><p>Used to generate responsive image syntax. For example,</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;img srcset=&quot;photo-author1-320w.jpg 320w,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; photo-author1-480w.jpg 480w,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; photo-author1-800w.jpg 800w&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160; sizes=&quot;(max-width: 320px) 280px,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (max-width: 480px) 440px,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 800px&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160; src=&quot;photo-author1-800w.jpg&quot; alt=&quot;Blog author 1&quot;&gt;</code></pre></td></tr><tr><td><p>Widths</p></td><td><p>Determines available widths for a responsive image.</p><p>Used to generate responsive image syntax. For example,</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;img srcset=&quot;photo-author1-320w.jpg 320w,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; photo-author1-480w.jpg 480w,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; photo-author1-800w.jpg 800w&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160; sizes=&quot;(max-width: 320px) 280px,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (max-width: 480px) 440px,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 800px&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160; src=&quot;photo-author1-800w.jpg&quot; alt=&quot;Blog author 1&quot;&gt;</code></pre></td></tr></tbody></table></li></ol><p>Thu, 11 Oct 2018 09:09:55 +0200{399A5F8D-AB07-42C2-8FEB-B893E0AF49F3}https://doc.sitecore.net/en/Products/Sitecore_Experience_Accelerator/12/Setting_up_and_configuring/Configuring/The_SXA_pipelines.aspxThe SXA pipelines<p>Understanding how the SXA pipelines and their processors work provides you with an insight into how dependencies are rendered, how tokens for rendering variants are created, how CSS classes are generated, and so on. </p><p>A pipeline consists of a sequence of processors. A processor is a .NET class that implements a method. When a pipeline is invoked, the processors are run in order. You can extend and customize the pipelines by adding or replacing processors. Extending a pipeline involves modifying the pipeline definition located in a Sitecore patch file.</p><p>This topic describes the following pipelines:</p><ul><li><a href="#_resolveVariantTokens" go-to-section="">resolveVariantTokens</a></li><li><a href="#_Ioc" go-to-section="">Ioc</a></li><li><a href="#_decoratePage" go-to-section="">decoratePage</a></li><li><a href="#_decorateRendering" go-to-section="">decorateRendering</a></li><li><a href="#_mediaRequestHandler" go-to-section="">mediaRequestHandler</a></li><li><a href="#_resolveTokens" go-to-section="">resolveTokens</a></li><li><a href="#_assetService" go-to-section="">assetService</a></li><li><a href="#_getControlEditability" go-to-section="">getControlEditability</a></li><li><a href="#_getRobotsContent" go-to-section="">getRobotsContent</a></li><li><a href="#_refreshHttpRoutes" go-to-section="">refreshHttpRoutes</a></li><li><a href="#_getVelocityTemplateRenderers" go-to-section="">getVelocityTemplateRenderers</a></li></ul><h2 class="heading2" expand-collapse="" id="_resolveVariantTokens"><bookmark></bookmark>resolveVariantTokens</h2><div class="collapsable"><p>The <code class="sccode">resolveVariantTokens</code> pipeline is used to create tokens for rendering variants. </p><p id="_Ioc"><bookmark></bookmark>This pipeline includes the following processors:</p><table class="table"><tbody><tr><th style="width: 35%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 64%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>ResolveIFileTypeIcon</p></td><td><p>Renders the span HTML element with the class according to the extension of the file. </p></td></tr><tr><td><p>ResolveItemId</p></td><td><p>Specifies the ID of the content item to be resolved.</p></td></tr><tr><td><p>ResolveItemName</p></td><td><p>Specifies the name of the content item to be resolved.</p></td></tr><tr><td><p>ResolveSize</p></td><td><p>Renders the file size.</p></td></tr></tbody></table><p></div><h2 class="heading2" expand-collapse="">ioc</h2><div class="collapsable"><p>The Inversion of Control (IoC) design principle allows you to change rendering dependencies without changing the rendering itself. The <code class="sccode">ioc</code> pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.IoC.config</code> file and is used for adding processors in which you can register your custom services in the container.</p><p id="_decorateMarkup"><bookmark></bookmark>For example, you can add the <code class="sccode">RegisterPageContentServices</code> processor to register services used in the Page Content feature.</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160; &lt;pipelines&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160; &lt;ioc&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;processor type=&quot;Sitecore.XA.Feature.PageContent.Pipelines.IoC.RegisterPageContentServices, Sitecore.XA.Feature.PageContent&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160; &lt;/ioc&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160; &lt;/pipelines&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_decoratePage"><bookmark></bookmark>decoratePage</h2><div class="collapsable"><p>The <code class="sccode">decoratePage </code>pipeline is used to decorate the page <code class="sccode">&lt;body&gt;</code> tag with attributes. These can be standard attributes, such as <code class="sccode">id</code> or <code class="sccode">class</code>, but you can also add custom data attributes.</p></div><h2 class="heading2" expand-collapse="" id="_decorateRendering"><bookmark></bookmark>decorateRendering</h2><div class="collapsable"><p>The <code class="sccode">decorateRendering</code> pipeline is used to decorate the rendering&#39;s outer &lt;div&gt; tag with attributes. These can be standard attributes, such as <code class="sccode">id</code> or <code class="sccode">class</code>, but you can also add custom data attributes.</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;div class=&quot;component title&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;div class=&quot;component-content&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;h2 class=&quot;field-title&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">Title of the page</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/h2&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/div&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/div&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_mediaRequestHandler"><bookmark></bookmark>mediaRequestHandler</h2><div class="collapsable"><p id="_GoBack">The <code class="sccode">mediaRequestHandler</code> pipeline is used in the SXA media requests handler. The <code class="sccode">med</code><bookmark></bookmark><code class="sccode">iaRequestHandler</code> pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.MediaRequestHandler.config</code> file. </p><p>This file extends the standard media request handler by adding a pipeline that implements custom functionalities such as the support of wireframe images or providing optimized assets.</p><p>This pipeline includes the following processors:</p><table class="table"><tbody><tr><th style="width: 31%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 68%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>ParseMediaRequest</p></td><td><p>Checks if the HTTP request is a valid media type. If not, the pipeline is aborted.</p></td></tr><tr><td><p>GetMediaFromUrl</p></td><td><p>Determines the media item from the URL that is stored in HTTP request.</p></td></tr><tr><td><p>HandleErrors</p></td><td><p>Redirects the user to an error page.</p></td></tr></tbody></table><p></div><h2 class="heading2" expand-collapse="" id="_resolveTokens"><bookmark></bookmark>resolveTokens</h2><div class="collapsable"><p>The <code class="sccode">resolveTokens</code> pipeline is used to resolve tokens that can be used in queries. For example, <code class="sccode">$site, $tenant, $currenttemplate, $home, </code>and<code class="sccode"> $pageDesigns. </code>By adding new processors to this pipeline, you can design new tokens.</p><p>This pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.TokenResolution.config</code> file and includes the following processors:</p><table class="table"><tbody><tr><th style="width: 34%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 65%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>CurrentTemplateToken</p></td><td><p>Determines the current tokens used.</p></td></tr><tr><td><p>EscapeQueryTokens</p></td><td><p>Used to escape tokens that are used in Sitecore queries.</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_assetService"><bookmark></bookmark>assetService</h2><div class="collapsable"><p>The <code class="sccode">assetService</code> pipeline is responsible for assets optimization. This pipeline includes the <code class="sccode">AddEditingtheme</code> processor, which you can use to add a theme when you are in Edit mode. </p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;assetService&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;processor type=&quot;Sitecore.XA.Foundation.Editing.Pipelines.AssetService.AddEditingTheme, Sitecore.XA.Foundation.Editing&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/assetService&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_getControlEditability" id="_getRobotsContent"><bookmark></bookmark><bookmark></bookmark>getRobotsContent</h2><div class="collapsable"><p>The <code class="sccode">getRobotsContent</code> pipeline is used to extend the response provided to search crawler robots in the <code class="sccode">robots.txt</code> file. The <code class="sccode">Robots.txt</code> file is a simple text file on your site’s root directory that tells search engine robots what to crawl and what not to crawl on your site. The <code class="sccode">getRobotsContent</code> pipeline contains the following processors:</p><table class="table"><tbody><tr><th style="width: 42%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 57%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>GetContentFromSettings</p></td><td><p>Checks if the robots&#39; content field is filled and uses its value.</p></td></tr><tr><td><p>GetDefaultRobotsContent</p></td><td><p>Checks the <code class="sccode">robots.txt</code> file for a value when the robots&#39; content field is empty.</p></td></tr><tr><td><p>AppendSitemapUrl</p></td><td><p>Adds the path of the <code class="sccode">sitemap.xml</code> file to the robots&#39; content field.</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_getRenderingCssClasses"><bookmark></bookmark>getRenderingCssClasses</h2><div class="collapsable"><p>The <code class="sccode">getRenderingCssClasses</code> pipeline is used to gather CSS classes that will be applied on rendering (added to the list of CSS classes on rendering). </p></div><h2 class="heading2" expand-collapse="" id="_refreshHttpRoutes"><bookmark></bookmark>refreshHttpRoutes </h2><div class="collapsable"><p>The <code class="sccode">refreshHttpRoutes</code> pipeline is used to refresh HTTP routes after changes in site configuration. </p></div><h2 class="heading2" expand-collapse="" id="_getVelocityTemplateRenderers"><bookmark></bookmark>getVelocityTemplateRenderers</h2><div class="collapsable"><p>The <code class="sccode">getVelocityTemplateRenderers</code> pipeline is used to add a custom renderer that later on can be used in the <em class="scemphasis">NVelocity</em> template. This pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.RenderingVariants.config</code> file. It contains the following processors:</p><table class="table"><tbody><tr><th style="width: 32%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 67%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>InitializeVelocityContext</p></td><td><p>Initializes the pipeline argument objects.</p></td></tr><tr><td><p>AddTemplateRenderers</p></td><td><p>Provides two custom tools that format data and time values (dateTool) and numbers (numberTool) in a <em class="scemphasis">NVelocity</em> template.</p></td></tr></tbody></table><p></div>Thu, 04 Oct 2018 15:25:13 +0200{66F7036B-047D-4A8C-8288-54BBCCACEB1F}https://doc.sitecore.net/en/Products/Sitecore_Experience_Accelerator/17/Setting_up_and_configuring/Configuring/The_SXA_pipelines.aspxThe SXA pipelines<p>Understanding how the SXA pipelines and their processors work provides you with an insight into how dependencies are rendered, how tokens for rendering variants are created, how CSS classes are generated, and so on. </p><p>A pipeline consists of a sequence of processors. A processor is a .NET class that implements a method. When a pipeline is invoked, the processors are run in order. You can extend and customize the pipelines by adding or replacing processors. Extending a pipeline involves modifying the pipeline definition located in a Sitecore patch file.</p><p>This topic describes the following pipelines:</p><ul><li><a href="#_resolveVariantTokens" go-to-section="">resolveVariantTokens</a></li><li><a href="#_Ioc" go-to-section="">Ioc</a></li><li><a href="#_decoratePage" go-to-section="">decoratePage</a></li><li><a href="#_decorateRendering" go-to-section="">decorateRendering</a></li><li><a href="#_mediaRequestHandler" go-to-section="">mediaRequestHandler</a></li><li><a href="#_resolveTokens" go-to-section="">resolveTokens</a></li><li><a href="#_assetService" go-to-section="">assetService</a></li><li><a href="#_getControlEditability" go-to-section="">getControlEditability</a></li><li><a href="#_getRobotsContent" go-to-section="">getRobotsContent</a></li><li><a href="#_refreshHttpRoutes" go-to-section="">refreshHttpRoutes</a></li><li><a href="#_getVelocityTemplateRenderers" go-to-section="">getVelocityTemplateRenderers</a></li><li><a href="#_resolveSearchQueryTokens" go-to-section="">resolveSearchQueryTokens</a></li><li><a href="#_resolveBoostingQuery" go-to-section="">resolveBoostingQuery</a></li></ul><h2 class="heading2" expand-collapse="" id="_resolveVariantTokens"><bookmark></bookmark>resolveVariantTokens</h2><div class="collapsable"><p>The <code class="sccode">resolveVariantTokens</code> pipeline is used to create tokens for rendering variants. </p><p id="_Ioc"><bookmark></bookmark>This pipeline includes the following processors:</p><table class="table"><tbody><tr><th style="width: 35%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 64%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>ResolveIFileTypeIcon</p></td><td><p>Renders the span HTML element with the class according to the extension of the file. </p></td></tr><tr><td><p>ResolveItemId</p></td><td><p>Specifies the ID of the content item to be resolved.</p></td></tr><tr><td><p>ResolveItemName</p></td><td><p>Specifies the name of the content item to be resolved.</p></td></tr><tr><td><p>ResolveSize</p></td><td><p>Renders the file size.</p></td></tr></tbody></table><p></div><h2 class="heading2" expand-collapse="">ioc</h2><div class="collapsable"><p>The Inversion of Control (IoC) design principle allows you to change rendering dependencies without changing the rendering itself. The <code class="sccode">ioc</code> pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.IoC.config</code> file and is used for adding processors in which you can register your custom services in the container.</p><p id="_decorateMarkup"><bookmark></bookmark>For example, you can add the <code class="sccode">RegisterPageContentServices</code> processor to register services used in the Page Content feature.</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160; &lt;pipelines&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160; &lt;ioc&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;processor type=&quot;Sitecore.XA.Feature.PageContent.Pipelines.IoC.RegisterPageContentServices, Sitecore.XA.Feature.PageContent&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160;&#160;&#160; &lt;/ioc&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&#160;&#160;&#160; &lt;/pipelines&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_decoratePage"><bookmark></bookmark>decoratePage</h2><div class="collapsable"><p>The <code class="sccode">decoratePage </code>pipeline is used to decorate the page <code class="sccode">&lt;body&gt;</code> tag with attributes. These can be standard attributes, such as <code class="sccode">id</code> or <code class="sccode">class</code>, but you can also add custom data attributes.</p></div><h2 class="heading2" expand-collapse="" id="_decorateRendering"><bookmark></bookmark>decorateRendering</h2><div class="collapsable"><p>The <code class="sccode">decorateRendering</code> pipeline is used to decorate the rendering&#39;s outer &lt;div&gt; tag with attributes. These can be standard attributes, such as <code class="sccode">id</code> or <code class="sccode">class</code>, but you can also add custom data attributes.</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;div class=&quot;component title&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;div class=&quot;component-content&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;h2 class=&quot;field-title&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">Title of the page</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/h2&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/div&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/div&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_mediaRequestHandler"><bookmark></bookmark>mediaRequestHandler</h2><div class="collapsable"><p id="_GoBack">The <code class="sccode">mediaRequestHandler</code> pipeline is used in the SXA media requests handler. The <code class="sccode">med</code><bookmark></bookmark><code class="sccode">iaRequestHandler</code> pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.MediaRequestHandler.config</code> file. </p><p>This file extends the standard media request handler by adding a pipeline that implements custom functionalities such as the support of wireframe images or providing optimized assets.</p><p>This pipeline includes the following processors:</p><table class="table"><tbody><tr><th style="width: 24%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 75%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>ParseMediaRequest</p></td><td><p>Checks if the HTTP request is a valid media type. If not, the pipeline is aborted.</p></td></tr><tr><td><p>GetMediaFromUrl</p></td><td><p>Determines the media item from the URL that is stored in HTTP request.</p></td></tr><tr><td><p>HandleErrors</p></td><td><p>Redirects the user to an error page.</p></td></tr></tbody></table><p></div><h2 class="heading2" expand-collapse="" id="_resolveTokens"><bookmark></bookmark>resolveTokens</h2><div class="collapsable"><p>The <code class="sccode">resolveTokens</code> pipeline is used to resolve tokens that can be used in queries. For example:</p><ul><li><code class="sccode">$compatibleThemes</code> - path to all themes</li><li><code class="sccode">$theme</code> - currently used theme</li><li><code class="sccode">$pageDesigns</code> - root of page designs</li><li><code class="sccode">$partialDesigns</code> - root of partial designs</li><li><code class="sccode">$currenttemplate</code> - name of the current template</li><li><code class="sccode">$tenant</code> - path to the current tenant</li><li><code class="sccode">$site</code> - path to the current site</li><li><code class="sccode">$home</code> - path to the current site start item (Home)</li><li><code class="sccode">$templates</code> - path to the current site templates</li><li><code class="sccode">$siteMedia</code> - path to Virtual Media folder located under site</li></ul><p>By adding new processors to this pipeline, you can design new tokens.</p><p>This pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.TokenResolution.config</code> file and includes the following processors:</p><table class="table"><tbody><tr><th style="width: 34%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 65%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>CurrentTemplateToken</p></td><td><p>Determines the current tokens used.</p></td></tr><tr><td><p>EscapeQueryTokens</p></td><td><p>Used to escape tokens that are used in Sitecore queries.</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_assetService"><bookmark></bookmark>assetService</h2><div class="collapsable"><p>The <code class="sccode">assetService</code> pipeline is responsible for assets optimization. This pipeline includes the <code class="sccode">AddEditingtheme</code> processor, which you can use to add a theme when you are in Edit mode. </p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;assetService&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;processor type=&quot;Sitecore.XA.Foundation.Editing.Pipelines.AssetService.AddEditingTheme, Sitecore.XA.Foundation.Editing&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/assetService&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_getControlEditability" id="_getRobotsContent"><bookmark></bookmark><bookmark></bookmark>getRobotsContent</h2><div class="collapsable"><p>The <code class="sccode">getRobotsContent</code> pipeline is used to extend the response provided to search crawler robots in the <code class="sccode">robots.txt</code> file. The <code class="sccode">Robots.txt</code> file is a simple text file on your site’s root directory that tells search engine robots what to crawl and what not to crawl on your site. The <code class="sccode">getRobotsContent</code> pipeline contains the following processors:</p><table class="table"><tbody><tr><th style="width: 31%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 68%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>GetContentFromSettings</p></td><td><p>Checks if the robots&#39; content field is filled and uses its value.</p></td></tr><tr><td><p>GetDefaultRobotsContent</p></td><td><p>Checks the <code class="sccode">robots.txt</code> file for a value when the robots&#39; content field is empty.</p></td></tr><tr><td><p>AppendSitemapUrl</p></td><td><p>Adds the path of the <code class="sccode">sitemap.xml</code> file to the robots&#39; content field.</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_getRenderingCssClasses"><bookmark></bookmark>getRenderingCssClasses</h2><div class="collapsable"><p>The <code class="sccode">getRenderingCssClasses</code> pipeline is used to gather CSS classes that will be applied on rendering (added to the list of CSS classes on rendering). </p></div><h2 class="heading2" expand-collapse="" id="_refreshHttpRoutes"><bookmark></bookmark>refreshHttpRoutes </h2><div class="collapsable"><p>The <code class="sccode">refreshHttpRoutes</code> pipeline is used to refresh HTTP routes after changes in site configuration. </p></div><h2 class="heading2" expand-collapse="" id="_getVelocityTemplateRenderers"><bookmark></bookmark>getVelocityTemplateRenderers</h2><div class="collapsable"><p>The <code class="sccode">getVelocityTemplateRenderers</code> pipeline is used to add a custom renderer that later on can be used in the <em class="scemphasis">NVelocity</em> template. This pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.RenderingVariants.config</code> file. It contains the following processors:</p><table class="table"><tbody><tr><th style="width: 32%;"><p><span class="scwindow">Processor</span></p></th><th style="width: 67%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>InitializeVelocityContext</p></td><td><p>Initializes the pipeline argument objects.</p></td></tr><tr><td><p>AddTemplateRenderers</p></td><td><p>Provides two custom tools that format data and time values (dateTool) and numbers (numberTool) in an <em class="scemphasis">NVelocity</em> template.</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_resolveSearchQueryTokens"><bookmark></bookmark>resolveSearchQueryTokens</h2><div class="collapsable"><p>The <code class="sccode">resolveSearchQueryTokens </code>pipeline is used to add search filters. This pipeline is defined in the <code class="sccode">Sitecore.XA.Foundation.Search.config </code>file. By default, the following tokens are available: </p><ul><li><code class="sccode">TaggedTheSameAsCurrentPage|SxaTags</code></li><li><code class="sccode">TaggedWithAtLeastOneTagFromCurrentPage|SxaTags</code></li><li><code class="sccode">UnderCurrentPage</code></li><li><code class="sccode">ExcludeCurrentPage</code></li><li><code class="sccode">ItemsOfTheSameTemplateAsTheCurrentPage</code></li><li><code class="sccode">ItemsWithTheSameValueInField|FieldName</code></li></ul></div><h2 class="heading2" expand-collapse="" id="_resolveBoostingQuery"><bookmark></bookmark>resolveBoostingQuery</h2><div class="collapsable"><p>The <code class="sccode">resolveBoostingQuery</code> pipeline is used to add extension point that can be used to write your own search boosting rules and then use them in SXA. To do that you can write your own custom rule and use the <code class="sccode">resolveBoostingQuerypipeline</code> to turn it into a query. This pipeline is defined in <code class="sccode">Sitecore.XA.Foundation.Search.config</code> file and includes the following processor:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;resolveBoostingQuery&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;processor type=&quot;Sitecore.XA.Foundation.Search.Pipelines.ResolveBoostingQuery.ResolveFieldAndQueryMatchRule, Sitecore.XA.Foundation.Search&quot; resolve=&quot;true&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/resolveBoostingQuery&gt;</code></pre><p></div>Thu, 04 Oct 2018 15:23:08 +0200{B603F8E1-987C-4331-BA62-4D2A921C40E2}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Session_state/Session_state/Walkthrough_Configuring_a_private_session_state_database_using_the_Redis_provider.aspxWalkthrough: Configuring a private session state database using the Redis provider<p>In private session state, all data related to a specific interaction, such as viewed pages, converted goals, triggered campaigns, or accumulated engagement points, is collected and saved to the session state database.</p><p>This walkthrough describes how to use Redis as your out of process private session state store using the&#160;Sitecore Session State Store Provider for Redis. It describes how to:</p><ul><li><a href="#_Deploy_a_private" go-to-section="">Deploy a private Redis session database</a></li><li><a href="#_Configure_Sitecore" go-to-section="">Configure Sitecore</a></li><li><a href="#_Adjust_the_Redis" go-to-section="">Adjust session state settings</a></li></ul><section class="note"><p class="scnoteheader" id="_Deploy_a_private"><bookmark></bookmark>Note</p><p class="scnotebody">Content Management (CM) servers do not support using an external session state database. On CM servers you can only use in process session state.</p></section><h2 class="heading2" expand-collapse="">Deploy a private Redis session database</h2><div class="collapsable"><p>The Sitecore ASP.NET session state store provider for Redis enables you to use Redis as your session state store. The provider supports the <code class="sccode">SessionEnd</code> event, which the xDB needs to track website visits.</p><p><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Do not make changes directly to the configuration files. Instead, you must create a <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/13/13/05/Use_a_patch_file_to_customize_the_Sitecore_configuration.aspx">patch file</a> that performs the required changes during run time.</p></section><p></p><p><p>To deploy a Redis session database:</p><ol><li>Choose between Azure Redis or <a href="https://redis.io/">Redis on premise</a>. You can provision Azure Redis by using the instructions on the <a href="https://azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-azure-redis-cache/">Microsoft Azure website</a> or with <a href="https://azure.microsoft.com/en-us/documentation/articles/cache-howto-manage-redis-cache-powershell/">Azure PowerShell</a><u>.</u> </li><li>Go to <em class="scemphasis">App_Config</em><code class="sccode">,</code>open the <code class="sccode">ConnectionStrings.config</code> file, and add the following connection string:<p><code class="sccode">&lt;add name=&quot;session&quot; connectionString=&quot;_host_:_port_number _&quot; /&gt; </code></p></li><li>Configure the connection string so that it points to your session database.</li><li>Save your changes.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Configure_Sitecore"><bookmark></bookmark>Configure Sitecore</h2><div class="collapsable"><p>To configure Sitecore to use the private session state store provider for Redis:</p><ol><li>Go to your site root folder, open the <code class="sccode">web.config</code> file and locate the <code class="sccode">sessionState</code> section:<p><code class="sccode">&lt;sessionState mode=&quot;InProc&quot; cookieless=&quot;false&quot; timeout=&quot;20&quot;&gt; </code></p></li><li>Update the <code class="sccode">sessionState</code> section to use the <em class="scemphasis">Redis</em> provider instead of <em class="scemphasis">InProc</em>, as shown in the following example. Also, change the name attribute value to <code class="sccode">&#39;redis&#39;</code>:<pre class="codesnippet"><code class="prettyprint">&lt;sessionState mode=&quot;Custom&quot; customProvider=&quot;redis&quot; timeout=&quot;20&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;add name=&quot;redis&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">type=&quot;Sitecore.SessionProvider.Redis.RedisSessionStateProvider,</code></pre><pre class="codesnippet"><code class="prettyprint">Sitecore.SessionProvider.Redis&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">connectionString=&quot;session&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">pollingInterval=&quot;2&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">applicationName=&quot;private&quot;/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/sessionState&gt;</code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Adjust_the_Redis"><bookmark></bookmark>Adjust the Redis provider settings</h2><div class="collapsable"><p>Use the <a href="https://doc.sitecore.net:443/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/xDB/Session_state/Redis_provider_settings_reference.aspx">Redis provider settings reference</a> to configure your session state.</p><p>If you have configured everything correctly, session records should appear in your Redis session database after the first web request.</p></div>Tue, 02 Oct 2018 13:29:45 +0200{1646C3B5-7A54-4A23-A502-6009EE0F09D2}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/xDB/Session_state/Walkthrough_Configuring_a_private_session_state_database_using_the_Redis_provider.aspxWalkthrough: Configuring a private session state database using the Redis provider<p>In private session state, all data related to a specific interaction, such as viewed pages, converted goals, triggered campaigns, or accumulated engagement points, is collected and saved to the session state database.</p><section class="note"><p class="scnoteheader" id="_GoBack"><bookmark></bookmark>Note</p><p class="scnotebody">Content Management (CM) servers do not support using an external session state database. On CM servers you can only use in process session state.​</p></section><p>This walkthrough describes how to use Redis as your out of process private session state store using the&#160;Sitecore Session State Store Provider for Redis. It describes how to:</p><ul><li><a href="#_Deploy_a_private" go-to-section="">Deploy a private Redis session database</a></li><li><a href="#_Configure_Sitecore" go-to-section="">Configure Sitecore</a></li><li><a href="#_Adjust_the_Redis" go-to-section="">Adjust session state settings</a></li></ul><section class="note"><p class="scnoteheader" id="_Deploy_a_private"><bookmark></bookmark>Note</p><p class="scnotebody">Sitecore version 8.2 Update 1 and newer supports Redis for both on-premise and Azure installations. The Sitecore 8.2 initial release only supports Redis for Azure.</p></section><h2 class="heading2" expand-collapse="">Deploy a private Redis session database</h2><div class="collapsable"><p>The Sitecore ASP.NET session state store provider for Redis enables you to use Redis as your session state store. The provider supports the <code class="sccode">SessionEnd</code> event, which the xDB needs to track website visits.</p><p><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Do not make changes directly to the configuration files. Instead, you must create a <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/05/01/15/57/Using_patch_files_to_customize_the_Sitecore_configuration.aspx">patch file</a> that performs the required changes during runtime.</p></section><p></p><p><p>To deploy a Redis session database:</p><ol><li>Choose between Azure Redis or <a href="https://redis.io/">Redis on premise</a>. You can provision Azure Redis by using the instructions on the <a href="https://azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-azure-redis-cache/">Microsoft Azure website</a> or with <a href="https://azure.microsoft.com/en-us/documentation/articles/cache-howto-manage-redis-cache-powershell/">Azure PowerShell</a><u>.</u> </li><li>Go to <em class="scemphasis">&lt;sitename&gt;\Website\App_Config</em><code class="sccode">,</code>open the <code class="sccode">ConnectionStrings.config</code> file, and add the following connection string:<p><code class="sccode">&lt;add name=&quot;session&quot; connectionString=&quot;_host_:_port_number _&quot; /&gt; </code></p></li><li>Configure the connection string so that it points to your session database.</li><li>Save your changes.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Configure_Sitecore"><bookmark></bookmark>Configure Sitecore</h2><div class="collapsable"><p>To configure Sitecore to use the private session state store provider for Redis:</p><ol><li>Go to your site root folder <em class="scemphasis">&lt;sitename&gt;\Website</em>, open the <code class="sccode">web.config</code> file and locate the <code class="sccode">sessionState</code> section:<p><code class="sccode">&lt;sessionState mode=&quot;InProc&quot; cookieless=&quot;false&quot; timeout=&quot;20&quot;&gt; </code></p></li><li>Update the <code class="sccode">sessionState</code> section to use the <em class="scemphasis">Redis</em> provider instead of <em class="scemphasis">InProc</em>, as shown in the following example. Also, change the name attribute value to <code class="sccode">&#39;redis&#39;</code>:<pre class="codesnippet"><code class="prettyprint">&lt;sessionState mode=&quot;Custom&quot; customProvider=&quot;redis&quot; timeout=&quot;20&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;add name=&quot;redis&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">type=&quot;Sitecore.SessionProvider.Redis.RedisSessionStateProvider,</code></pre><pre class="codesnippet"><code class="prettyprint">Sitecore.SessionProvider.Redis&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">connectionString=&quot;session&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">pollingInterval=&quot;2&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">applicationName=&quot;private&quot;/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/sessionState&gt;</code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Adjust_the_Redis"><bookmark></bookmark>Adjust the Redis provider settings</h2><div class="collapsable"><p>Use the <a href="https://doc.sitecore.net:443/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/xDB/Session_state/Redis_provider_settings_reference.aspx">Redis provider settings reference</a> to configure your session state.</p><p>If you have configured everything correctly, session records should appear in your Redis session database after the first web request.</p></div>Tue, 02 Oct 2018 13:27:19 +0200{A307ACCA-DB15-42B2-8286-9A7100CA896C}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/80/Setting_up_and_maintaining/xDB/Session_state/Walkthrough_Configuring_a_private_session_state_database_using_the_MongoDB_provider.aspxWalkthrough: Configuring a private session state database using the MongoDB provider<p><p>In private session state, all data related to a specific interaction, such as viewed pages, converted goals, triggered campaigns, or accumulated engagement points, is collected and saved to the session state database.</p><p id="_GoBack">You can use either MongoDB or SQL Server as your private session state store. SQL Server might be an appropriate option if you are running the collection database (MongoDB) in the cloud as a service, or if you prefer not to run<bookmark></bookmark> an on-premise MongoDB server instance.</p></p><p>This walkthrough describes how to use a MongoDB database as your private session state store using the <em class="scemphasis">Sitecore ASP.NET Session State Provider for MongoDB</em>: </p><ul><li><a href="#_Deploy_a_MongoDB" go-to-section="">Deploy a MongoDB session database</a></li><li><a href="#_Configure_Sitecore" go-to-section="">Configure Sitecore</a></li><li><a href="#_Adjust_session_state" go-to-section="">Adjust session state settings</a></li></ul><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you are using a MongoDB session provider, all content delivery servers should use the same provider pointing to the same database.</p></section><p>Before you deploy MongoDB as your session database consider the <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2014/12/17/11/24/MongoDB_session_database_performance_considerations.aspx">impact that it will have on performance</a>.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody" id="_GoBack">Content Management (CM) servers do not support using an external session state database. On CM servers you can only use in process session state.<bookmark></bookmark>​</p></section><h2 class="heading2" expand-collapse="" id="_Deploy_a_MongoDB"><bookmark></bookmark>Deploy a MongoDB session database</h2><div class="collapsable"><p><p>The <em class="scemphasis">Sitecore ASP.NET Session State Provider for MongoDB</em> enables you to use MongoDB as your session state store. The provider supports the <code class="sccode">SessionEnd</code> event, which the xDB needs to track website visits.</p><p>To deploy a MongoDB session database:</p><ol><li>Install the MongoDB database server version 2.6 or later on a dedicated server using the instructions on the MongoDB website.</li><li>In a suitable XML editor, open the <code class="sccode">ConnectionStrings.config</code> file located here: <code class="sccode">&lt;sitename&gt;\Website\App_Config</code> and add the following connection string:<pre class="codesnippet"><code class="prettyprint">&lt;add name=&quot;session&quot; connectionString=&quot;mongodb://_mongo_server_name_:_port_number_/_session_database_name_&quot; /&gt;</code></pre></li><li>The <code class="sccode">add name</code> value can be <code class="sccode">session</code> or <code class="sccode">sharedsession</code> depending on whether you are configuring private or shared session state.</li><li>Configure the connection string so that it points to your session database.</li><li>Save your changes. <bookmark></bookmark></li></ol></p></div><h2 class="heading2" expand-collapse="" id="_Configure_Sitecore"><bookmark></bookmark>Configure Sitecore</h2><div class="collapsable"><p>To configure Sitecore to use the private session-state provider for MongoDB:</p><ol><li>In your site root folder <code class="sccode">&lt;sitename&gt;\Website,</code> open the <code class="sccode">web.config</code> file and locate the <code class="sccode">sessionState</code> section:<pre class="codesnippet"><code class="prettyprint">&lt;sessionState mode=&quot;InProc&quot; cookieless=&quot;false&quot; timeout=&quot;20&quot;&gt;</code></pre></li><li>Update the <code class="sccode">sessionState</code> section to use the MongoDB provider instead of <code class="sccode">InProc</code> as shown in the following example. Also, change the <code class="sccode">name</code> attribute value to <code class="sccode">mongo</code>:<pre class="codesnippet"><code class="prettyprint">&lt;sessionState mode=&quot;Custom&quot; customProvider=&quot;mongo&quot; cookieless=&quot;false&quot; timeout=&quot;20&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;add name=&quot;mongo&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> type=&quot;Sitecore.SessionProvider.MongoDB.MongoSessionStateProvider, </code></pre><pre class="codesnippet"><code class="prettyprint"> Sitecore.SessionProvider.MongoDB&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> connectionStringName=&quot;session&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> pollingInterval=&quot;2&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> compression=&quot;true&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> sessionType=&quot;private&quot;/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/sessionState&gt;</code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Adjust_session_state"><bookmark></bookmark>Adjust session state settings</h2><div class="collapsable"><p><p>In Sitecore, when you configure a session state, you have the following configuration options:</p><table class="table"><tbody><tr><th style="width: 28%;"><p>Setting</p></th><th style="width: 37%;"><p>Description</p></th><th style="width: 33%;"><p></th></tr><tr><td><p><code class="sccode">connectionStringName</code></p><p><p></td><td><p>Contains the connection string that Sitecore uses to connect to the session database. </p><p>Edit to specify the session state database that you want to use. In the xDB, this database is called session.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">connectionStringName=&quot;session&quot;</code></pre><p></td></tr><tr><td><p><code class="sccode">pollingInterval</code></p><p><p></td><td><p>Specifies the time interval in seconds that the session-state provider uses to check if any sessions have expired.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">pollingInterval=&quot;2&quot;</code></pre><p></td></tr><tr><td><p><code class="sccode">compression</code></p><p><p></td><td><p>Indicates that you want session-state data to be compressed. </p><p>The default value is true. Compressing session state data reduces the amount of data that you need to transfer between the database and the Sitecore instance. This may cause some additional CPU overhead.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">compression=&quot;true&quot; /&gt;</code></pre></td></tr><tr><td><p><code class="sccode">sessionType</code></p><p></td><td><p>Indicates whether the type of session state is <em class="scemphasis">private</em> or <em class="scemphasis">shared</em>. </p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">sessionType=&quot;private&quot;</code></pre></td></tr></tbody></table><p></p><p>If you have configured everything correctly, a session database should appear in your list of MongoDB databases after the first web request.</p><p></div>Tue, 02 Oct 2018 13:24:44 +0200{0F9A1163-09C3-4E44-8214-961C8AA07CB0}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Session_state/Session_state/Walkthrough_Configuring_a_private_session_state_database_using_the_SQL_Server_provider.aspxWalkthrough: Configuring a private session state database using the SQL Server provider<p>In private session state, all data related to a specific interaction, such as viewed pages, converted goals, triggered campaigns, or accumulated engagement points, is collected and saved to the session state database.</p><p>This topic outlines how to configure a SQL Server database as your private session state store using the <em class="scemphasis">Sitecore ASP.NET Session State Provider for SQL Server</em>:</p><ul><li><a href="#_Deploy_a_SQL" go-to-section="">Deploy a SQL Server session database</a></li><li><a href="#_Configure_Sitecore_1" go-to-section="">Configure Sitecore</a></li><li><a href="#_Adjust_session_state" go-to-section="">Adjust session state settings</a></li></ul><p>The SQL Server provider supports the session-end event that is required by the xDB in order to track website visits.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody" id="_GoBack">Content Management (CM) servers do not support using an external session state database. On CM servers you can only use in process session state.<bookmark></bookmark>​</p></section><h2 class="heading2" expand-collapse="" id="_Deploy_a_SQL"><bookmark></bookmark>Deploy a SQL Server session database</h2><div class="collapsable"><p id="_Configure_Sitecore"><bookmark></bookmark>The <em class="scemphasis">Sitecore ASP.NET Session State Provider for SQL Server</em> enables you to use SQL Server as your session state store. This provider supports the <code class="sccode">SessionEnd</code> event that the xDB needs to track website visits.</p><p>To deploy the SQL Server session database:</p><ol><li>Start Microsoft SQL Server Management Studio 2016 or later</li><li>Connect to the server node that you want to install the Session database on.</li><li>Expand the server node, right-click <span class="scwindow">Databases,</span> and then click <span class="scwindow">Deploy Data-tier Application…</span></li><li>In the <span class="scwindow">Deploy Data-tier Application</span> wizard, click <span class="scwindow">Browse</span> on the <span class="scwindow">Select Package</span> page.</li><li>Select the Sitecore.Sessions.dacpac file and click Next. Note: the file can be found in Databases folder in the root of the Sitecore archive.</li><li>In the Update Configuration step specify the name of the database, click Next, and Next after validating summary information. Once deploy is completed the session database appears in your list of attached databases.</li><li>Add the following connection string to the <code class="sccode">ConnectionStrings.config</code> file:<p><code class="sccode">&lt;add name=&quot;session&quot; connectionString=&quot;user id=_sql_server_user_;password=_user_password_;Data Source=_sqlserver_;Database = _session_database_name_&quot;/&gt;</code></p></li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You can store shared and private session state info in the same database. The database is able to distinguish between the two types of session state.</p></section><h3>Optimize SQL Server performance</h3><p>For each web request, the session-state store database is accessed multiple times. This can have a significant impact on the performance of your website. Therefore, you should install enough RAM to allow Microsoft SQL Server to keep the session state database in memory. You should also put the database files on an SSD drive.</p><p>To achieve optimal performance, you can install an extension to the Sessions database.</p><p>To install the performance enhancements:</p><ol><li>In Microsoft SQL Server Management Studio, open the <code class="sccode">Sessions db performance boost.sql</code> file.<p>This file is stored in the <code class="sccode">\Databases\Scripts</code> folder of your Sitecore installation.</p></li><li>In the first line of the <code class="sccode">Sessions db performance boost.sql</code> file, replace <code class="sccode">USE [Sitecore_Session]</code> with the name of your session database.</li><li>After you have updated the <code class="sccode">USE</code> statement to point to your session database, press F5 to execute the file.</li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">These performance enhancements move the session-state store to SQL Server tempDB which is the standard practice recommended by Microsoft. Please note that <a href="https://docs.microsoft.com/en-us/sql/relational-databases/databases/tempdb-database">the tempdb system database</a>&#160;is currently not supported by&#160;<a href="https://azure.microsoft.com/en-us/services/sql-database/">Azure SQL Database</a>&#160;service.</p><p class="scnotebody">Every user must therefore have access to tempDB. However, every time that SQL Server is restarted, it recreates tempDB and resets the access rights. For information about how to ensure that users always have access to tempDB, see this <a href="https://kb.sitecore.net/articles/836287">KB article</a>.</p><p class="scnotebody">For more information see <a href="https://msdn.microsoft.com/en-us/library/ms178586.aspx">Session-State Modes</a> on MSDN. </p></section></div><h2 class="heading2" expand-collapse="" id="_Configure_Sitecore_1"><bookmark></bookmark>Configure Sitecore</h2><div class="collapsable"><p>To configure Sitecore to use the private session state provider for SQL Server:</p><ol><li>In your site root folder, open the <code class="sccode">web.config</code> file and locate the <code class="sccode">sessionState</code> section:<pre class="codesnippet"><code class="prettyprint">&lt;sessionState mode=&quot;Custom&quot; customProvider=&quot;mssql&quot; cookieless=&quot;false&quot; timeout=&quot;20&quot;&gt;</code></pre></li><li>Update the <code class="sccode">sessionState</code> section by adding the SQL Server provider as shown in the following example. Also, change the <code class="sccode">name</code> attribute value to <code class="sccode">mssql</code>:<pre class="codesnippet"><code class="prettyprint">&lt;sessionState mode=&quot;Custom&quot; customProvider=&quot;mssql&quot; cookieless=&quot;false&quot; timeout=&quot;20&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;add name=&quot;mssql&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> type=&quot; Sitecore.SessionProvider.Sql.SqlSessionStateProvider,</code></pre><pre class="codesnippet"><code class="prettyprint"> Sitecore.SessionProvider.Sql&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> connectionStringName=&quot;session&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> pollingInterval=&quot;2&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> compression=&quot;true&quot; </code></pre><pre class="codesnippet"><code class="prettyprint"> sessionType=&quot;private&quot;/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/sessionState&gt;</code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Adjust_session_state"><bookmark></bookmark>Adjust session state settings</h2><div class="collapsable"><p><p>In Sitecore, when you configure a session state, you have the following configuration options:</p><table class="table"><tbody><tr><th style="width: 28%;"><p>Setting</p></th><th style="width: 37%;"><p>Description</p></th><th style="width: 33%;"><p></th></tr><tr><td><p><code class="sccode">connectionStringName</code></p><p><p></td><td><p>Contains the connection string that Sitecore uses to connect to the session database. </p><p>Edit to specify the session state database that you want to use. In the xDB, this database is called session.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">connectionStringName=&quot;session&quot;</code></pre><p></td></tr><tr><td><p><code class="sccode">pollingInterval</code></p><p><p></td><td><p>Specifies the time interval in seconds that the session-state provider uses to check if any sessions have expired.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">pollingInterval=&quot;2&quot;</code></pre><p></td></tr><tr><td><p><code class="sccode">compression</code></p><p><p></td><td><p>Indicates that you want session-state data to be compressed. </p><p>The default value is true. Compressing session state data reduces the amount of data that you need to transfer between the database and the Sitecore instance. This may cause some additional CPU overhead.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">compression=&quot;true&quot; /&gt;</code></pre></td></tr><tr><td><p><code class="sccode">sessionType</code></p><p></td><td><p>Indicates whether the type of session state is <em class="scemphasis">private</em> or <em class="scemphasis">shared</em>. </p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">sessionType=&quot;private&quot;</code></pre></td></tr></tbody></table><p></p><p></div>Tue, 02 Oct 2018 13:21:38 +0200{652E38A1-9FB5-44D1-9DD9-9587FC9C3C0D}https://doc.sitecore.net/en/Products/Sitecore_Experience_Accelerator/17/Setting_up_and_configuring/Setting_up/Set_up_security_for_a_tenant_and_a_site.aspxSet up security for a tenant and a site<p>You can use the <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/05/22/12/47/The_SXA_security_roles.aspx">predefined SXA roles</a> to manage user&#39;s access to items and content. Before you can assign these roles to users, you must set up security for the tenant and site.</p><p id="_GoBack"><bookmark></bookmark>This topic describes how to:</p><ul><li><a href="#_Set_up_security" go-to-section="">Set up security for a tenant</a></li><li><a href="#_Set_up_security_1" go-to-section="">Set up security for a site</a></li></ul><section class="note"><p class="scnoteheader" id="_Set_up_security"><bookmark></bookmark>Note</p><p class="scnotebody">You can only set up security for sites after you set up the security for the tenant.</p></section><h2 class="heading2" expand-collapse="">Set up security for a tenant</h2><div class="collapsable"><p>To set up security for a tenant:</p><ol><li>Right-click the tenant, click <span class="scwindow">Scripts</span> and then click <span class="scwindow">Setup</span> <span class="scwindow">Security</span>.</li><li>In the <span class="scwindow">Security domain</span> dialog box either:<ul class="scbullet2ndlevel"><li>Click the Sitecore domain, and click <span class="scwindow">Proceed.</span> </li><li>Click <span class="scwindow">Create new domain</span>, click <span class="scwindow">Proceed</span> and enter a domain name, and click <span class="scwindow">Create</span>.</li></ul><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">If you select a different domain than Sitecore, you must set the read/write permissions on the Languages node for one of the base roles or for the <em class="scemphasis">sitecore\Everyone</em> user of your domain. </p></section></li><li>In the <span class="scwindow">Tenant security roles</span> dialog box:<ul class="scbullet2ndlevel"><li>To add the default SXA roles, click <span class="scwindow">Assign</span>. </li><li>To select a different role, click <img src="/~/media/EF6F1182C7434E6B8E13D6CD50105EEA.ashx?la=en" height="21" width="22" alt="Picture 3" title="" class="documentimage" doc-fancy-image=""> and then click <span class="scwindow">Assign</span>.</li></ul><p><img src="/~/media/29EABABF22554812803F193C8D20B9DD.ashx?la=en" height="487" width="465" alt="Picture 2" title="" class="documentimage" doc-fancy-image=""></p></li></ol></div><h2 class="heading2" expand-collapse="" id="_Set_up_security_1"><bookmark></bookmark>Set up security for a site</h2><div class="collapsable"><p>Before you can set up the security for a site, you must set up security for its tenant.</p><p>To set up security for a site:</p><ol><li>Right-click the site, click <span class="scwindow">Scripts</span> and then click <span class="scwindow">Setup</span> <span class="scwindow">Security</span>.</li><li>In the <span class="scwindow">Security domain </span>dialog box either:<ul class="scbullet2ndlevel"><li>Click the Sitecore domain, and click <span class="scwindow">Proceed</span>. </li><li>Click <span class="scwindow">Create</span> <span class="scwindow">new</span> <span class="scwindow">domain</span>, then click <span class="scwindow">Proceed</span> and enter a domain name, and click <span class="scwindow">Create</span>.</li></ul><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">By default, the domain you selected for the tenant is preselected.</p></section></li><li>In the <span class="scwindow">Site security roles</span> dialog box:<ul class="scbullet2ndlevel"><li> To add the default roles, click <span class="scwindow">Assign</span>.</li><li>To select a different role, click <img src="/~/media/2636F303F0CA40CA879A5C7283AB6F86.ashx?la=en" height="21" width="22" alt="Picture 6" title="" class="documentimage" doc-fancy-image=""> and then click <span class="scwindow">Assign.</span></li></ul><p><img src="/~/media/099A631CF1454E258F129E94E95CE423.ashx?la=en" height="487" width="465" alt="Picture 4" title="" class="documentimage" doc-fancy-image=""></p></li></ol><p>After you have configured security for your tenant and site, you can create new users and assign them to the <em class="scemphasis">Admin</em>, <em class="scemphasis">Author</em>, <em class="scemphasis">Designer</em> role in the User Manager.</p><p></div>Tue, 02 Oct 2018 13:05:42 +0200{4162B76A-5B1D-48CC-AA9C-50EBF3840A04}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Session_state/Session_state/Session_state_configuration_scenarios.aspxSession state configuration scenarios<p>In the Sitecore Experience Database, you can use a session state server to track all your contact sessions across different browsers and devices. Configuring session state is particularly important if you have deployed an environment with multiple content delivery servers or clusters of content delivery servers.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody" id="_GoBack">In Sitecore version 9.0 and higher<bookmark></bookmark> there is no mechanism for automatically transferring a contact session to another cluster. There is no need to collect different sessions from the same contact on one cluster as xConnect handles all updates of contact information. If you need to control which cluster a contact connects to, you must configure this in your load balancer.</p></section><p>The following example scenarios provide guidance on how to configure session state on different types of Sitecore server configurations.</p><h4>Single standalone server</h4><p>On a single, standalone Sitecore instance, both private and shared session providers should use the in process (InProc) session state mode.</p><h4>Single content delivery server and a separate content management server</h4><p>On a content delivery server and on a content mangement server, you should configure both private and shared session providers to use the in process (InProc) session state mode.</p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">When configuring session state on content management servers, you should always configure session state providers to use the in process (InProc) mode. Sitecore does not support sharing session state among a group of content management servers or between content management and content delivery servers. Out of process session state is only supported on content delivery servers.</p></section><h4>Content delivery cluster with a sticky load balancer</h4><p>On all content delivery instances, you should configure the private (ASP.NET) session state provider to use the in process (InProc) mode. You should configure the shared session state provider to use one of the out of process modes connected to a database shared among all the content delivery instances.</p><h4>Content delivery cluster with a non-sticky load balancer</h4><p>On all content delivery instances, you should configure both session state providers to use one of the out of process modes connected to a database (or databases) shared among the content delivery instances.</p>Tue, 02 Oct 2018 10:52:35 +0200{F4E18C24-2AA1-4197-8DF0-1CF7CB73376D}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Session_state/Session_state/Session_state.aspxSession state<p>In the Sitecore Experience Database, you can use a session state server to share all your contact sessions across different browsers and devices. <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2015/07/06/16/07/Configuring_session_database_servers.aspx">Configuring out-of-process session state</a> is important if you have deployed an environment with multiple content delivery servers or clusters of content delivery servers.</p><h2 class="heading2" expand-collapse="" id="_Toc396298778"><bookmark></bookmark>Session state overview</h2><div class="collapsable"><p>Tracking the session state of your contacts is important regardless of whether you install a standalone environment or a fully scalable environment. For example, it is possible to track two simultaneous contact sessions from two different devices, such as from a desktop web browser or a mobile phone.</p><p>If you decide to deploy a large, fully scalable environment with vertical and horizontal scaling, then session state becomes even more important. For example, in a multi-content delivery cluster environment, you can share contact information between content delivery instances to ensure that contacts stay connected to the particular cluster where their interaction originated. </p><p>In xDB, there are two types of session states:</p><ul><li>Private</li><li>Shared</li></ul><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">You must configure both private and shared session states. You can choose to use the same session provider for both but to ensure that the system can distinguish between them you must configure the correct attribute in the <code class="sccode">web.config</code> and the <code class="sccode">Sitecore.Analytics.Tracking.config</code> files.</p></section><table class="table"><tbody><tr><th style="width: 35%;"><p><span class="scwindow">Provider</span></p></th><th style="width: 31%;"><p><span class="scwindow">Attribute</span></p></th><th style="width: 33%;"><p><span class="scwindow">Value</span></p></th></tr><tr><td><p>SQL Server</p></td><td><p><code class="sccode">sessionType</code></p></td><td><p><code class="sccode">private</code> or <code class="sccode">shared</code></p></td></tr><tr><td><p>Redis</p></td><td><p><code class="sccode">applicationName</code></p></td><td><p><code class="sccode">private</code> or <code class="sccode">shared</code></p></td></tr></tbody></table><h3 id="_Toc396298779"><bookmark></bookmark>Private session state</h3><p>In private session state (ASP.NET), all analytics session data related to a specific interaction is collected and saved to the session state server.</p><p>The private session data collected during a session includes data on the interaction, and the devices used by a contact.</p><p>The default provider is the <em class="scemphasis">in process</em> (inProc) session provider which uses session state stored in-memory. This is suitable when there is only a single content delivery server or multiple content delivery servers with sticky load balancing configured.</p><p>If you have multiple content delivery servers with a non-sticky load balancer configured, you should use one of the following <em class="scemphasis">out of process</em> ASP.NET session state providers to share the private session state data between load balanced content delivery instances:</p><ul><li>Sitecore ASP.NET Session State Provider for Redis</li><li>Sitecore ASP.NET Session State Provider for Microsoft SQL Server</li></ul><p>These providers enable you to choose whether you want to use the Redis or SQL Server session database as your session state store. They also support the session end event that is required by the xDB to track website visits reliably. You could also choose an external session state provider so long as it supports the <code class="sccode">Session_end</code> event.</p><p>The standard ASP.NET session state stores a cookie in the web browser. This means that if a contact uses Sitecore from two different devices, or even two different browsers on the same device, two separate sessions are created.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Private session state is not required to support the <code class="sccode">Session_End</code> event on content management servers. Private session state must support the <code class="sccode">Session_End</code> event on content delivery servers.Out of process private session state is supported only on content delivery servers.</p><p class="scnotebody"></section><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You should only configure one session state server for each content delivery cluster that you have.</p></section><h3 id="_Toc396298780"><bookmark></bookmark>Shared session state</h3><p>Contact data is collected and stored in a dedicated Shared session state store. This works in the same way as ASP.NET session state. </p><p>The default provider is the&#160;in process&#160;(inProc) session provider which uses session state stored in-memory. When there is only a single content delivery server, shared session state can be stored in memory because there is no need to share the session state with other servers. In this case, shared session state is still useful for handling concurrent visits by the same contact from different devices.</p><p>If you have multiple content delivery servers, you should choose the Redis or the SQL Server session provider to support <em class="scemphasis">out of process</em> shared session state.</p><p>Shared session state data includes all data that is unique to a contact and that can be shared across simultaneous sessions, such as contact details, devices and engagement automation states triggered. This information needs to remain accessible to other concurrent operations, for example, interactions and background processes, and can be shared across multiple sessions.</p><p>Sitecore uses shared session state for storing information about the current contact state and related data.</p><p>In contrast to ASP.NET session state (which is exclusive to an interaction), shared session state stores a contact&#39;s session and is accessible from any visit session that is associated with the contact within the same cluster.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Shared session state must support the&#160;<code class="sccode">SessionEnd</code>&#160;event on content delivery servers. Out of process shared session state is supported only on content delivery servers.</p></section><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">The standard&#160;<code class="sccode">OutOfProcSessionStateStore</code>&#160;that ships with ASP.NET does not support the&#160;<code class="sccode">SessionEnd</code>&#160;event and therefore cannot be used with shared session state.</p><p class="scnotebody">You can configure a shared session state to use any session state store provider that extends the abstract class&#160;<code class="sccode">SessionStateStoreProviderBase</code>&#160;(shipped with ASP.NET). The only condition is that the session-state store provider must invoke the&#160;<code class="sccode">SessionEnd</code>&#160;event via&#160;<code class="sccode">SessionStateItemExpireCallback</code>.</p></section><p class="sclistheading">Session Lifetime (Shared)</p><p>The following graph shows the lifetime of the sessions for a single contact and two concurrent interactions made from two different devices.</p><p id="_GoBack"><bookmark></bookmark><img src="/~/media/483635C97298485BBDB1D2B5593FAE15.ashx?la=en" height="246" width="402" alt="Picture 12" title="" class="documentimage" doc-fancy-image=""></p></div><h2 class="heading2" expand-collapse="">Session state providers</h2><div class="collapsable"><p>A session state server stores information relevant to current contact sessions. The Sitecore xDB comes with two session state services:</p><ul><li>Private session state holds information private to sessions. This is contact visit information, such as pages viewed, goals converted, or campaigns triggered.</li><li>Shared session state holds information that may be shared by multiple visits on the same cluster, such as contacts and devices.</li></ul><p>You can configure session state in two different ways: as either <em class="scemphasis">in process</em> (InProc) or <em class="scemphasis">out of process</em>.</p><h3>In process</h3><p>In process (InProc) is the default session state provider that comes with the Microsoft .NET Framework. It uses internal memory to store session data.</p><p>In process is the most suitable way of handling private session state for all data related to a specific interaction (single visitor session or visit). It is the only supported mode to use for content management servers.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You cannot use InProc for private session state in a load-balanced environment unless you configure the load balancer to use sticky sessions. </p></section><h3>Out of process</h3><p>Out of process session state means that you use an external session state provider such as Redis or SQL Server. You can also use any custom provider that supports the <code class="sccode">Session_End</code> event. Out of process is suitable for handling shared or private session state if you have multiple content delivery servers. </p><p>Sitecore comes with the following session state providers for configuring <em class="scemphasis">out of process</em> session state:</p><ul><li>Sitecore ASP.NET Session State Provider for Redis</li><li>Sitecore ASP.NET Session State Provider for Microsoft SQL Server</li></ul><p>When you configure session state on different types of Sitecore server configurations there are several different <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2014/12/17/15/52/Session_state_configuration_scenarios.aspx">session state configuration scenarios</a> you can follow.</p></div>Tue, 02 Oct 2018 10:33:54 +0200{0755F935-2156-4D2A-83BD-60BBB396E13D}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/xDB/Session_state/Session_state.aspxSession state<p id="_Toc396298778"><bookmark></bookmark>In the Sitecore Experience Database, you can use a session state server to share all your contact sessions across different browsers and devices. <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2015/07/06/16/07/Configuring_session_database_servers.aspx">Configuring out-of-process session state</a> is important if you have deployed an environment with multiple content delivery servers or clusters of content delivery servers.</p><h2 class="heading2" expand-collapse="">Session state overview</h2><div class="collapsable"><p>Tracking the session state of your contacts is important regardless of whether you install a standalone environment or a fully scalable environment. For example, it is possible to track two simultaneous contact sessions from two different devices, such as from a desktop web browser or a mobile phone.</p><p>If you decide to deploy a large, fully scalable environment with vertical and horizontal scaling, then session state becomes even more important. For example, in a multi-content delivery cluster environment, you can share contact information between content delivery instances to ensure that contacts stay connected to the particular cluster where their interaction originated. </p><p>In xDB, there are two types of session states:</p><ul><li>Private</li><li>Shared</li></ul><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">You must configure both private and shared session states. You can choose to use the same session provider for both but to ensure that the system can distinguish between them you must configure the correct attribute in the <code class="sccode">web.config</code> and the <code class="sccode">Sitecore.Analytics.Tracking.config</code> files.</p></section><table class="table"><tbody><tr><th style="width: 35%;"><p><span class="scwindow">Provider</span></p></th><th style="width: 31%;"><p><span class="scwindow">Attribute</span></p></th><th style="width: 33%;"><p><span class="scwindow">Value</span></p></th></tr><tr><td><p>SQL Server</p></td><td><p><code class="sccode">sessionType</code></p></td><td><p><code class="sccode">private</code> or <code class="sccode">shared</code></p></td></tr><tr><td><p>MongoDB</p></td><td><p><code class="sccode">sessionType</code></p></td><td><p><code class="sccode">private</code> or <code class="sccode">shared</code></p></td></tr><tr><td><p>Redis</p></td><td><p><code class="sccode">applicationName</code></p></td><td><p><code class="sccode">private</code> or <code class="sccode">shared</code></p></td></tr></tbody></table><h3 id="_Toc396298779"><bookmark></bookmark>Private session state</h3><p>In private session state (ASP.NET), all analytics session data related to a specific interaction is collected and saved to the session state server.</p><p>The private session data collected during a session includes data on the interaction, and the devices used by a contact.</p><p>The default provider is the <em class="scemphasis">in process</em> (inProc) session provider which uses session state stored in-memory. This is suitable when there is only a single content delivery server or multiple content delivery servers with sticky load balancing configured.</p><p>If you have multiple content delivery servers with a non-sticky load balancer configured, you should use one of the following <em class="scemphasis">out of process</em> ASP.NET session state providers to share the private session state data between load balanced content delivery instances:</p><ul><li>Sitecore ASP.NET Session State Provider for Redis</li><li>Sitecore ASP.NET Session State Provider for MongoDB</li><li>Sitecore ASP.NET Session State Provider for Microsoft SQL Server</li></ul><p>These providers enable you to choose whether you want to use the Redis, MongoDB or SQL Server session database as your session state store. They also support the session end event that is required by the xDB to track website visits reliably. You could also choose an external session state provider so long as it supports the <code class="sccode">Session_end</code> event.</p><p>The standard ASP.NET session state stores a cookie in the web browser. This means that if a contact uses Sitecore from two different devices, or even two different browsers on the same device, two separate sessions are created.</p><section class="note"><p class="scnoteheader" id="_Toc396298780"><bookmark></bookmark>Note</p><p class="scnotebody">Private session state is not required to support the <code class="sccode">Session_End</code> event on content management servers. Private session state must support the <code class="sccode">Session_End</code> event on content delivery servers.Out of process private session state is supported only on content delivery servers.</p><p class="scnotebody"></section><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You should only configure one session state server for each content delivery cluster that you have.</p></section><h3>Shared session state</h3><p>Contact data is collected and stored in a dedicated Shared session state store. This works in the same way as ASP.NET session state. </p><p>The default provider is the&#160;in process&#160;(inProc) session provider which uses session state stored in-memory. When there is only a single content delivery server, shared session state can be stored in memory because there is no need to share the session state with other servers. In this case, shared session state is still useful for handling concurrent visits by the same contact from different devices.</p><p>If you have multiple content delivery servers, you should choose the Redis or the SQL Server session provider to support <em class="scemphasis">out of process</em> shared session state.</p><p>Shared session state data includes all data that is unique to a contact and that can be shared across simultaneous sessions, such as contact details, devices and engagement automation states triggered. This information needs to remain accessible to other concurrent operations, for example, interactions and background processes, and can be shared across multiple sessions.</p><p>Sitecore uses shared session state for storing information about the current contact state and related data.</p><p>In contrast to ASP.NET session state (which is exclusive to an interaction), shared session state stores a contact&#39;s session and is accessible from any visit session that is associated with the contact within the same cluster.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Shared session state must support the&#160;<code class="sccode">SessionEnd</code>&#160;event on content delivery servers. Out of process shared session state is supported only on content delivery servers.</p></section><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">The standard&#160;<code class="sccode">OutOfProcSessionStateStore</code>&#160;that ships with ASP.NET does not support the&#160;<code class="sccode">SessionEnd</code>&#160;event and therefore cannot be used with shared session state.</p><p class="scnotebody">You can configure a shared session state to use any session state store provider that extends the abstract class&#160;<code class="sccode">SessionStateStoreProviderBase</code>&#160;(shipped with ASP.NET). The only condition is that the session-state store provider must invoke the&#160;<code class="sccode">SessionEnd</code>&#160;event via&#160;<code class="sccode">SessionStateItemExpireCallback</code>.</p></section><p class="sclistheading">Session Lifetime (Shared)</p><p>The following graph shows the lifetime of the sessions for a single contact and two concurrent interactions made from two different devices.</p><p id="_GoBack"><img src="/~/media/483635C97298485BBDB1D2B5593FAE15.ashx?la=en" height="159" width="260" alt="Picture 12" title="" class="documentimage" doc-fancy-image=""><bookmark></bookmark></p></div><h2 class="heading2" expand-collapse="">Session state providers</h2><div class="collapsable"><p>A session state server stores information relevant to current contact sessions. The Sitecore xDB comes with two session state services:</p><ul><li>Private session state holds information private to sessions. This is contact visit information, such as pages viewed, goals converted, or campaigns triggered.</li><li>Shared session state holds information that may be shared by multiple visits on the same cluster, such as contacts and devices.</li></ul><p>You can configure session state in two different ways: as either <em class="scemphasis">in process</em> (InProc) or <em class="scemphasis">out of process</em>.</p><h3>In process</h3><p>In process (InProc) is the default session state provider that comes with the Microsoft .NET Framework. It uses internal memory to store session data.</p><p>In process is the most suitable way of handling private session state for all data related to a specific interaction (single visitor session or visit). It is the only supported mode to use for content management servers.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You cannot use InProc for private session state in a load-balanced environment unless you configure the load balancer to use sticky sessions. </p></section><h3>Out of process</h3><p>Out of process session state means that you use an external session state provider such as Redis, MongoDB or SQL Server. You can also use any custom provider that supports the <code class="sccode">Session_End</code> event. Out of process is suitable for handling shared or private session state if you have multiple content delivery servers. </p><p>Sitecore comes with the following session state providers for configuring <em class="scemphasis">out of process</em> session state:</p><ul><li>Sitecore ASP.NET Session State Provider for Redis</li><li>Sitecore ASP.NET Session State Provider for MongoDB</li><li>Sitecore ASP.NET Session State Provider for Microsoft SQL Server</li></ul><p>When you configure session state on different types of Sitecore server configurations there are several different <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2014/12/17/15/52/Session_state_configuration_scenarios.aspx">session state configuration scenarios</a> you can follow.</p></div>Tue, 02 Oct 2018 10:32:03 +0200{B9DAB957-2479-4C7C-828B-07DD062C33EA}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/80/Setting_up_and_maintaining/xDB/Session_state/Session_state.aspxSession state<p id="_Toc396298778"><bookmark></bookmark>In the Sitecore Experience Database, you can use a session state server to share all your contact sessions across different browsers and devices. <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2015/07/06/16/07/Configuring_session_database_servers.aspx">Configuring out-of-process session state</a> is important if you have deployed an environment with multiple content delivery servers or clusters of content delivery servers.</p><h2 class="heading2" expand-collapse="">Session state overview</h2><div class="collapsable"><p>Session state is a way of identifying contacts on your website by assigning them a unique session ID and by using cookies. Every time a contact makes a request, such as triggering a campaign or a goal this information is held in session state until the end of session.</p><p>This means that fewer server trips are needed to write data back and forth to the collection database. Instead, xDB makes one trip at the start of a session to identify the contact and a second at the end to save all the session data back to the collection database.</p><p>Tracking contact session state is important regardless of whether you install a standalone environment or a fully scalable environment. For example, it is possible to track two simultaneous contact sessions from two different devices, such as from a desktop web browser or a mobile phone.</p><p>If you decide to deploy a large, fully scalable environment with vertical and horizontal scaling, then session state becomes even more important. For example, in a multi-content delivery cluster environment, you can share contact information between content delivery instances to ensure that contacts stay connected to the particular cluster where their interaction originated.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You should only configure one session state server for each content delivery cluster.</p></section><p>In xDB, there are two types of session states:</p><ul><li>Private</li><li>Shared</li></ul><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">You must configure both private and shared session states. You can use the same session provider for both private and shared sessions but to ensure that the system can distinguish between the two entries you must configure the <code class="sccode">sessionType</code> attribute in the <code class="sccode">web.config </code>and <code class="sccode">Sitecore.Analytics.Tracking.config</code> with the correct attribute name, which can be <em class="scemphasis">shared</em> or <em class="scemphasis">private</em>.</p></section><h3 id="_Toc396298779"><bookmark></bookmark>Private session state</h3><p>In private session state (ASP.NET), all analytics session data related to a specific interaction is collected and saved to the session state server.</p><p>The private session data collected during a session includes data on the interaction, and the devices used by a contact.</p><p>The default provider is the <em class="scemphasis">in process</em> (inProc) session provider which uses session state stored in-memory. This is suitable when there is only a single content delivery server or multiple content delivery servers with sticky load balancing configured.</p><p>If you have multiple content delivery servers with a non-sticky load balancer configured, you should use one of the following <em class="scemphasis">out of process</em> ASP.NET session state providers to share the private session state data between load balanced content delivery instances:</p><ul><li>Sitecore ASP.NET Session State Store Provider for MongoDB</li><li>Sitecore ASP.NET Session State Store Provider for Microsoft SQL Server</li></ul><p>These providers enable you to choose whether you want to use the MongoDB or SQL Server session database as your session state store. They also support the session end event that is required by the xDB to track website visits reliably. You could also choose an external session state provider so long as it supports the <code class="sccode">Session_end</code> event.</p><p>The standard ASP.NET session state stores a cookie in the web browser. This means that if a contact uses Sitecore from two different devices, or even two different browsers on the same device, two separate sessions are created.</p><section class="note"><p class="scnoteheader" id="_Toc396298780"><bookmark></bookmark>Note</p><p class="scnotebody">Private session state is not required to support the <code class="sccode">Session_End</code> event on content management servers. Private session state must support the <code class="sccode">Session_End</code> event on content delivery servers.Out of process private session state is supported only on content delivery servers.</p><p class="scnotebody"></section><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You should only configure one session state server for each content delivery cluster that you have.</p></section><h3>Shared session state</h3><p>Contact data is collected and stored in a dedicated Shared session state store. This works in the same way as ASP.NET session state. </p><p>The default provider is the&#160;in process&#160;(inProc) session provider which uses session state stored in-memory. When there is only a single content delivery server, shared session state can be stored in memory because there is no need to share the session state with other servers. In this case, shared session state is still useful for handling concurrent visits by the same contact from different devices.</p><p>If you have multiple content delivery servers, you should choose the Redis or the SQL Server session provider to support <em class="scemphasis">out of process</em> shared session state.</p><p>Shared session state data includes all data that is unique to a contact and that can be shared across simultaneous sessions, such as contact details, devices and engagement automation states triggered. This information needs to remain accessible to other concurrent operations, for example, interactions and background processes, and can be shared across multiple sessions.</p><p>Sitecore uses shared session state for storing information about the current contact state and related data.</p><p>In contrast to ASP.NET session state (which is exclusive to an interaction), shared session state stores a contact&#39;s session and is accessible from any visit session that is associated with the contact within the same cluster.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Shared session state must support the&#160;<code class="sccode">SessionEnd</code>&#160;event on content delivery servers. Out of process shared session state is supported only on content delivery servers.</p></section><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">The standard&#160;<code class="sccode">OutOfProcSessionStateStore</code>&#160;that ships with ASP.NET does not support the&#160;<code class="sccode">SessionEnd</code>&#160;event and therefore cannot be used with shared session state.</p></section><p class="sclistheading">Session Lifetime (Shared)</p><p>The following graph shows the lifetime of the sessions for a single contact and two concurrent interactions made from two different devices.</p><p id="_GoBack"><img src="/~/media/EF0B38902556438EB58E7989344B1E9E.ashx?la=en" height="159" width="260" alt="Picture 12" title="" class="documentimage" doc-fancy-image=""><bookmark></bookmark></p></div><h2 class="heading2" expand-collapse="">Session state providers</h2><div class="collapsable"><p>A session state server stores information relevant to current contact sessions. The Sitecore xDB comes with two session state services:</p><ul><li>Private session state holds information private to sessions. This is contact visit information, such as pages viewed, goals converted, or campaigns triggered.</li><li>Shared session state holds information that may be shared by multiple visits on the same cluster, such as contacts and devices.</li></ul><p>You can configure session state in two different ways: as either <em class="scemphasis">in process</em> (InProc) or <em class="scemphasis">out of process</em>.</p><h3>In process</h3><p>In process (InProc) is the default session state provider that comes with the Microsoft .NET Framework. It uses internal memory to store session data.</p><p>In process is the most suitable way of handling private session state for all data related to a specific interaction (single visitor session or visit). It is the only supported mode to use for content management servers.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">You cannot use InProc for private session state in a load-balanced environment unless you configure the load balancer to use sticky sessions. </p></section><h3>Out of process</h3><p><em class="scemphasis">Out of process</em> session state means that you use an external session state provider such as MongoDB or SQL Server. You can also use any custom provider that supports the <code class="sccode">Session_End</code> event. Out of process is suitable for handling shared or private session state if you have multiple content delivery servers.</p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">Always use <em class="scemphasis">out of process</em> session state if you have more than one content delivery instance in a cluster.</p></section><p>Sitecore comes with the following two session state providers for configuring <em class="scemphasis">out of process</em> session state:</p><ul><li>Sitecore ASP.NET Session State Provider for MongoDB</li><li>Sitecore ASP.NET Session State Store Provider for Microsoft SQL Server</li></ul><p>When you configure session state on different types of Sitecore server configurations there are several different <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2014/12/17/15/52/Session_state_configuration_scenarios.aspx">session state configuration scenarios</a> you can follow.</p></div>Tue, 02 Oct 2018 10:28:08 +0200{DD74DA27-153A-4793-8993-3A467A334AFD}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Session_state/Session_state/Walkthrough_Configure_a_shared_session_state_database_using_the_SQL_Server_provider.aspxWalkthrough: Configuring a shared session state database using the SQL Server provider<p>In shared session-state, all the data that can be shared across multiple sessions, for example, the data related to contacts and devices, is collected and saved to the <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2015/07/06/16/07/Configuring_session_database_servers.aspx">session state database</a>.</p><p>You must always configure shared session state whatever your server configuration. For example, you can have a single standalone content delivery server, multiple content delivery servers, or a clustered environment, but you always need to configure session state.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Shared session state is not supported on content management servers.</p></section><p>A contact can make multiple parallel visits to a website in which case each visit has its own private session state. However, some data can be shared between visits, such as device and contact related information.</p><p>Information that is shared between parallel visits by the same contact is stored in the shared session-state store. This data is still private to the contact but it is accessible from all current sessions made by the same contact.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">The standard <code class="sccode">OutOfProcSessionStateStore</code> that is shipped with ASP.NET does not support the <code class="sccode">SessionEnd</code> event and therefore cannot be used with shared session state.</p></section><p>You can configure shared session state to use any session-state store provider that extends the abstract class <code class="sccode">SessionStateStoreProviderBase</code> (shipped with ASP.NET). The only additional requirement is that the session-state store provider can invoke the <code class="sccode">SessionEnd</code> event via <code class="sccode">SessionStateItemExpireCallback</code>.</p><p>Follow the steps in this section to use a SQL Server database as your shared session state store using the <em class="scemphasis">Sitecore ASP.NET Session State Provider for SQL Server</em>:</p><ul><li><a href="#_Deploy_a_SQL" go-to-section="">Deploy a SQL Server session database</a></li><li><a href="#_Configure_Sitecore" go-to-section="">Configure Sitecore</a></li><li><a href="#_Adjust_session_state" go-to-section="">Adjust session state settings</a></li></ul><h2 class="heading2" expand-collapse="" id="_Deploy_a_SQL"><bookmark></bookmark>Deploy a SQL Server session database</h2><div class="collapsable"><p id="_Configure_Sitecore"><bookmark></bookmark>The <em class="scemphasis">Sitecore ASP.NET Session State Provider for SQL Server</em> enables you to use SQL Server as your session state store. This provider supports the <code class="sccode">SessionEnd</code> event that the xDB needs to track website visits.</p><p>To deploy the SQL Server session database:</p><ol><li>Start Microsoft SQL Server Management Studio 2016 or later</li><li>Connect to the server node that you want to install the Session database on.</li><li>Expand the server node, right-click <span class="scwindow">Databases,</span> and then click <span class="scwindow">Deploy Data-tier Application…</span></li><li>In the <span class="scwindow">Deploy Data-tier Application</span> wizard, click <span class="scwindow">Browse</span> on the <span class="scwindow">Select Package</span> page.</li><li>Select the Sitecore.Sessions.dacpac file and click Next. Note: the file can be found in Databases folder in the root of the Sitecore archive.</li><li>In the Update Configuration step specify the name of the database, click Next, and Next after validating summary information. Once deploy is completed the session database appears in your list of attached databases.</li><li>Add the following connection string to the <code class="sccode">ConnectionStrings.config</code> file:<p><code class="sccode">&lt;add name=&quot;session&quot; connectionString=&quot;user id=_sql_server_user_;password=_user_password_;Data Source=_sqlserver_;Database = _session_database_name_&quot;/&gt;</code></p></li></ol><h3>Optimize SQL Server performance</h3><p>For each web request, the session-state store database is accessed multiple times. This can have a significant impact on the performance of your website. Therefore, you should install enough RAM to allow Microsoft SQL Server to keep the session state database in memory. You should also put the database files on an SSD drive.</p><p>To achieve optimal performance, you can install an extension to the Sessions database.</p><p>To install the performance enhancements:</p><ol><li>In Microsoft SQL Server Management Studio, open the <code class="sccode">Sessions db performance boost.sql</code> file.<p>This file is stored in the <code class="sccode">\Databases\Scripts</code> folder of your Sitecore installation.</p></li><li>In the first line of the <code class="sccode">Sessions db performance boost.sql</code> file, replace <code class="sccode">USE [Sitecore_Session]</code> with the name of your session database.</li><li>After you have updated the <code class="sccode">USE</code> statement to point to your session database, press F5 to execute the file.</li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">These performance enhancements move the session-state store to SQL Server tempDB which is the standard practice recommended by Microsoft. However, this is not supported on Windows Azure. </p><p class="scnotebody" id="_GoBack">Every user must therefore have access to tempDB. However, every time that SQL Server is restarted, it recreates tempDB and resets the access rights. For information about how to ensure that users always have access to tempDB, see this <a href="https://kb.sitecore.net/articles/836287">KB article</a>.<bookmark></bookmark></p><p class="scnotebody">For more information see <a href="https://msdn.microsoft.com/en-us/library/ms178586.aspx">Session-State Modes</a> on MSDN.</p></section><p></div><h2 class="heading2" expand-collapse="">Configure Sitecore</h2><div class="collapsable"><p><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Do not make changes directly to the configuration files. Instead, you must create a <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/13/13/05/Use_a_patch_file_to_customize_the_Sitecore_configuration.aspx">patch file</a> that performs the required changes during run time.</p></section><p></p><p><p>To configure Sitecore to use the shared session state provider for SQL Server:</p><ol><li>In your website root folder, navigate to:<code class="sccode"> \App_Config\Sitecore\Marketing.Tracking</code></li><li>Open the <code class="sccode">Sitecore.Analytics.Tracking.config</code> file.</li><li>Locate the line where you can define the default shared session state provider using the following path: <code class="sccode">sitecore/tracking/sharedSessionState</code>.</li><li>The default shared-session store uses <code class="sccode">inProc</code> provider (storing data in memory and implemented in the internal ASP.NET class <code class="sccode">InProcSessionStateStore</code>):<pre class="codesnippet"><code class="prettyprint">&lt;sharedSessionState defaultProvider=&quot;inProc&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;clear/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;add name=&quot;inProc&quot; type=&quot;System.Web.SessionState.InProcSessionStateStore&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/providers&gt;</code></pre></li><li>To configure SQL Server as your shared session state store provider change the <code class="sccode">defaultProvider</code> from <code class="sccode">inProc</code> to <code class="sccode">mssql</code>. Also, change the name attribute value to <code class="sccode">mssql</code>.<pre class="codesnippet"><code class="prettyprint">&lt;sharedSessionState defaultProvider=&quot;mssql&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;clear/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;add </code></pre><pre class="codesnippet"><code class="prettyprint">name=&quot;mssql&quot; </code></pre><pre class="codesnippet"><code class="prettyprint">type=&quot;Sitecore.SessionProvider.Sql.SqlSessionStateProvider,Sitecore.SessionProvider.Sql&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">connectionStringName=&quot;sharedsession&quot; </code></pre><pre class="codesnippet"><code class="prettyprint">pollingInterval=&quot;2&quot; </code></pre><pre class="codesnippet"><code class="prettyprint">compression=&quot;true&quot; </code></pre><pre class="codesnippet"><code class="prettyprint">sessionType=&quot;shared&quot;/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/providers&gt;</code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Adjust_session_state"><bookmark></bookmark>Adjust session state settings</h2><div class="collapsable"><p><p>In Sitecore, when you configure a session state, you have the following configuration options:</p><table class="table"><tbody><tr><th style="width: 28%;"><p>Setting</p></th><th style="width: 37%;"><p>Description</p></th><th style="width: 33%;"><p></th></tr><tr><td><p><code class="sccode">connectionStringName</code></p><p><p></td><td><p>Contains the connection string that Sitecore uses to connect to the session database. </p><p>Edit to specify the session state database that you want to use. In the xDB, this database is called session.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">connectionStringName=&quot;session&quot;</code></pre><p></td></tr><tr><td><p><code class="sccode">pollingInterval</code></p><p><p></td><td><p>Specifies the time interval in seconds that the session-state provider uses to check if any sessions have expired.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">pollingInterval=&quot;2&quot;</code></pre><p></td></tr><tr><td><p><code class="sccode">compression</code></p><p><p></td><td><p>Indicates that you want session-state data to be compressed. </p><p>The default value is true. Compressing session state data reduces the amount of data that you need to transfer between the database and the Sitecore instance. This may cause some additional CPU overhead.</p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">compression=&quot;true&quot; /&gt;</code></pre></td></tr><tr><td><p><code class="sccode">sessionType</code></p><p></td><td><p>Indicates whether the type of session state is <em class="scemphasis">private</em> or <em class="scemphasis">shared</em>. </p></td><td><p>For example:</p><pre class="codesnippet"><code class="prettyprint">sessionType=&quot;shared&quot;</code></pre></td></tr></tbody></table><p></p></div>Tue, 02 Oct 2018 10:03:20 +0200{2EAAF394-97D2-4281-ABCE-541B37AE5D37}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Configuring_servers/Configuring_servers/Configure_multiple_managed_websites.aspxConfigure multiple managed websites<p>A single Sitecore instance uses multiple websites to manage content delivery, content management, and many other features. However, by default there is only one published website. This website corresponds to the <code class="sccode">&lt;site name=&quot;website&quot;…/&gt;</code> definition in the <code class="sccode">Sitecore.config</code> file.</p><p>You can configure additional managed websites for different purposes and different domains by adding them to the site definition node in the <code class="sccode">Sitecore.config</code> file. For example, you can define a new site to be your published public-facing site or to be used by content editors to access the content management system.</p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody" id="_GoBack">When you choose a<bookmark></bookmark> name for the website, you must avoid using characters that are invalid for the website cookies. You should therefore not use control characters, spaces (&quot; &quot;), semicolons, or commas in your website names.</p></section><p>To configure an extra Sitecore website:</p><ol><li><a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/05/01/15/57/Using_patch_files_to_customize_the_Sitecore_configuration.aspx">Add a patch file</a> containing the new site definition. <section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">You must not add the definition directly to the <code class="sccode">&lt;sites&gt;</code> list in the <code class="sccode">Sitecore.config </code>file because changes to the file can be lost during an upgrade process.</p></section><p>The following example adds a website called <em class="scemphasis">admin</em>:</p><pre class="codesnippet"><code class="prettyprint">&lt;?xml version=&quot;1.0&quot;?&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;configuration xmlns:patch=&quot;http://www.sitecore.net/xmlconfig/&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;sitecore&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;sites&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;site name=&quot;mysite&quot; patch:after=&quot;site[@name=&#39;modules_website&#39;]&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> targetHostName=&quot;rhino.acme.com”</code></pre><pre class="codesnippet"><code class="prettyprint"> enableTracking=&quot;true&quot; virtualFolder=&quot;/&quot; physicalFolder=&quot;/&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> rootPath=&quot;/sitecore/content/mysite&quot; </code></pre><pre class="codesnippet"><code class="prettyprint"> startItem=&quot;/home&quot; database=&quot;web&quot; domain=&quot;extranet&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> allowDebug=&quot;true&quot; cacheHtml=&quot;true&quot; htmlCacheSize=&quot;50MB&quot; registryCacheSize=&quot;0&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> viewStateCacheSize=&quot;0&quot; xslCacheSize=&quot;25MB&quot; filteredItemsCacheSize=&quot;10MB&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> enablePreview=&quot;true&quot; enableWebEdit=&quot;true&quot; enableDebugger=&quot;true&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> disableClientData=&quot;false&quot; cacheRenderingParameters=&quot;true&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> renderingParametersCacheSize=&quot;10MB&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/sites&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/sitecore&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/configuration&gt;</code></pre></li><li>For each added website, configure the website attributes depending on the purpose of the website. The attributes and their purpose are described in the comments before the <code class="sccode">&lt;site&gt;</code> section in the <code class="sccode">Sitecore.config</code> file.<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">You must define all attributes for each added website. Attributes can vary from version to version due to updates or new features in the product. Therefore, after any upgrade you must check the attributes for the default site in the<code class="sccode"> Sitecore.config</code> file, because there can be changes that require you to update the attributes of any added websites.</p></section></li><li>Enter the host name of the website in the <code class="sccode">hosts</code> file of your computer or server, in the following format:<pre class="codesnippet"><code class="prettyprint"> 102.54.94.97 rhino.acme.com # source server</code></pre></li></ol><h2 class="heading2" expand-collapse="">Website context</h2><div class="collapsable"><p>Sitecore determines the website context based on the incoming URL and the following two attributes:</p><ul><li><code class="sccode">hostName</code> – Specifies the name of the website as it appears in the incoming URL. It can contain wildcards.</li><li><code class="sccode">virtualFolder </code>– The physical path to the website root folder.</li></ul><p>When an incoming URL is received, Sitecore first compares it to the <code class="sccode">hostName</code> attribute of each site in the <code class="sccode">&lt;sites&gt;</code> list.</p><p>If the <code class="sccode">hostName</code> attribute matches the incoming URL or the <code class="sccode">hostName</code> attribute is empty, Sitecore compares the <code class="sccode">virtualFolder</code> attribute next.</p><p>Sitecore uses the first site definition in the <code class="sccode">&lt;sites&gt;</code> list where the <code class="sccode">hostName</code> and <code class="sccode">virtualFolder</code> attributes match the incoming URL as the context site. </p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Sitecore checks for sites in the order in which they are included in the list. Therefore, sites must be ordered starting with the most specific entry and ending with the most general entry. For example, if you have a website where <code class="sccode">hostName</code> is <u>mysite.com.au</u> and one where <code class="sccode">hostName</code> is <u>mysite.com</u>, the entry for <u>mysite.com.au</u> must be first in the list. Otherwise, an incoming URL for <u>mysite.com.au</u> will match the entry for <u>mysite.com</u> first.</p></section></div>Tue, 02 Oct 2018 09:30:35 +0200{3C7A929F-81B3-412F-B872-16A85984BDF5}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Content_authoring/The_editing_tools/The_Experience_Editor/The_Experience_Editor.aspxThe Experience Editor<p>The Experience Editor is a WYSIWYG editor that allows you to easily make changes to items directly on the page. You can edit all the items that are visible on the page &mdash; text, graphics, logos, links, and so on.</p><p>In the Experience Editor, you can edit the fields of the current item and the fields of any items rendered on the page. For instance, if the menu on the page consists of titles of the product items, you can edit the titles without navigating to the product items themselves.</p><p><img src="/~/media/A51856746B7E41F5BD91269ADEE1854E.ashx?la=en" height="462" width="624" alt="cms_xe_HomePage" title="The Experience Editor" class="documentimage" doc-fancy-image=""></p><h2 class="heading2" expand-collapse="">The ribbon</h2><div class="collapsable"><p>In the Experience Editor, the ribbon with all the available functionality is displayed at the top of the webpage. The functionality on the ribbon varies depending on your security roles and the customizations of the website that you are accessing. </p><p>If you have full access to all functionality in the Experience Editor, you have access to all five tabs on the ribbon, each with its own collection of commands. </p><p><img src="/~/media/393D0B615B1D47918E40D4A55E09BC76.ashx?la=en" height="90" width="622" alt="cms_xe_FullRibbon" title="The Experience Editor ribbon" class="documentimage" doc-fancy-image=""></p><p>As a minimum, you can expect to be able to insert a page and delete a page on your website. Regardless of the ribbon that you use, there is always a <span class="scwindow">Save</span> button in the top-left corner.</p><p>When you edit an item, you can click <span class="scwindow">Toggle Ribbon</span> <img src="/~/media/576D46AB493248E796ED8DA2381BF676.ashx?la=en" height="10" width="13" alt="Picture 4" title="" class="documentimage" doc-fancy-image=""> to hide the ribbon temporarily and give yourself some more space to work with. Click <span class="scwindow">Toggle Ribbon</span> <img src="/~/media/4E659510619F4348AA144BDFB0C3E041.ashx?la=en" height="10" width="13" alt="Picture 3" title="" class="documentimage" doc-fancy-image=""> again to display the ribbon.</p><h3>Improve the ribbon load time</h3><p>You can improve the time it takes to load the Experience Editor ribbon if you turn off the request that displays the number of items you have locked. </p><p><img src="/~/media/E57F647C42C446598015F880D6F16AF7.ashx?la=en" height="107" width="239" alt="Picture 5" title="" class="documentimage" doc-fancy-image=""></p><p>To improve the ribbon load time:</p><ul><li>In the <code class="sccode">Website\App_Config\Sitecore\Experience Editor\</code> folder, open the <code class="sccode">Sitecore.ExperienceEditor.config</code> file. In the <code class="sccode">WebEdit.ShowNumberOfLockedItemsOnButton</code> setting, change the value to <em class="scemphasis">false</em>.</li></ul></div><h2 class="heading2" expand-collapse="">Customize the view</h2><div class="collapsable"><p>If you have the appropriate access rights, you can change the way the Experience Editor presents the editable items for you.</p><p>On the ribbon, on the <span class="scwindow">View</span> tab, you can set up the Experience Editor:</p><ul><li>To show the editable text fields, select the <span class="scwindow">Editing</span> check box. When you move your mouse over the fields in the Experience Editor, the text fields appear with a dotted line.</li><li>To show the renderings and placeholders, select the <span class="scwindow">Designing</span> check box. When you move your mouse over the fields in the Experience Editor, the renderings and placeholders appear with a dotted line. </li><li>To show outlines of all the objects on a page, select the <span class="scwindow">Controls</span> check box. Use this feature to understand how the page is organized. This check box is only active when the <span class="scwindow">Designing</span> check box is selected.</li><li>To outline, with a green dotted line, all the components on a page that contain <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2016/08/29/09/59/Manage_associated_content.aspx">associated content,</a> select the <span class="scwindow">Associated content</span> check box. </li></ul><p></div>Mon, 01 Oct 2018 17:29:58 +0200{79331CD0-0ED1-4920-AD14-66E02B5CE5E1}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Developing/Developing_with_Sitecore/Dependency_injection.aspxDependency injection<p>Dependency injection (DI) is a technique for achieving loose coupling between objects and their collaborators, or dependencies. Rather than directly instantiating collaborators, or using static references, the objects a class needs in order to perform its actions are provided to the class in some fashion. Most often, classes will declare their dependencies through their constructor. Sitecore only supports this approach, which is known as constructor injection.</p><p>The Sitecore implementation of DI is based on the <a href="https://github.com/aspnet/DependencyInjection">Microsoft.Extensions.DependencyInjection</a> abstractions from ASP.NET Core.</p><h2 class="heading2" expand-collapse="">Service registration</h2><div class="collapsable"><p>You can register the abstraction either in configuration or with code.</p><h3>Registration in configuration</h3><p>You can configure abstraction in the <em class="scemphasis">services</em> node in any Sitecore include config file. For example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;configuration&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;sitecore&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;services&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;register serviceType=&quot;IMyService, MyAbstraction.Assembly&quot; implementationType=&quot;MyServiceImplementation, MyImplementation.Assembly&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;register serviceType=&quot;MyServiceBase, MyAbstraction.Assembly&quot; implementationType=&quot;MyServiceBaseImplementation, MyImplementation.Assembly&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/services&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/sitecore&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/configuration&gt;</code></pre><h3>Registration in code</h3><p>You use the <code class="sccode">IServicesConfigurator</code> interface to configure services from code. For example:</p><ul><li>Implement the <code class="sccode">IServicesConfigurator</code> interface:<pre class="codesnippet"><code class="prettyprint">public class MyServicesConfigurator : IServicesConfigurator </code></pre><pre class="codesnippet"><code class="prettyprint"> {</code></pre><pre class="codesnippet"><code class="prettyprint"> public void Configure(IServiceCollection serviceCollection)</code></pre><pre class="codesnippet"><code class="prettyprint"> {</code></pre><pre class="codesnippet"><code class="prettyprint"> serviceCollection.AddScoped(typeof(IMyService), typeof(MyServiceImplementation));</code></pre><pre class="codesnippet"><code class="prettyprint"> serviceCollection.AddTransient(typeof(MyServiceBase), typeof(MyServiceBaseImplementation));</code></pre><pre class="codesnippet"><code class="prettyprint"> }</code></pre><pre class="codesnippet"><code class="prettyprint">} </code></pre><p>There is more information about <em class="scemphasis">IServiceServiceCollection</em> on the <a href="https://docs.asp.net/en/latest/fundamentals/dependency-injection.html">MSDN website</a>.</p></li><li>Register the configurator:<pre class="codesnippet"><code class="prettyprint">&lt;configuration&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;sitecore&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;services&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;configurator type= &quot;MyServicesConfigurator, MyAssembly&quot;/&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/services&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/sitecore&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;configuration&gt;</code></pre></li></ul></div><h2 class="heading2" expand-collapse="">Services lifetime</h2><div class="collapsable"><p>Read important information about <a href="https://docs.asp.net/en/latest/fundamentals/dependency-injection.html">Service Lifetimes and Registration Options</a> on the MSDN website.</p><p>To support scoped per request lifetime, <code class="sccode">Sitecore.DependencyInjection.SitecorePerRequestScopeModule, Sitecore.Kernel</code> was added to the http modules. If the module is disabled, <em class="scemphasis">Scoped</em> has the same behavior as <em class="scemphasis">Singleton</em>.</p></div><h2 class="heading2" expand-collapse="" id="injection-to-types-created-by-factory-pr"><bookmark></bookmark>Service resolution</h2><div class="collapsable"><p>This section describes how you resolve (locate) a registered service through DI, using a service locator.</p><h3>Injection to types created by Factory</h3><p>You must use the <code class="sccode">resolve</code> attribute. The following changes enable injection for the <em class="scemphasis">ShowReason</em> processor of the <code class="sccode">shutdown </code>pipeline:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;shutdown&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;processor type=&quot;Sitecore.Pipelines.Shutdown.ShowReason, Sitecore.Kernel&quot; resolve=&quot;true&quot;/&gt; &lt;/shutdown&gt;</code></pre><h3 id="injection-to-webforms"><bookmark></bookmark>Injection and MVC</h3><p>To use dependency injection in an MVC controller, add this processor to the pipeline:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;processor type=&quot;Sitecore.Mvc.Pipelines.Loader.InitializeDependencyResolver, Sitecore.Mvc&quot;/&gt;</code></pre><h3>Injection to WebForms and UserControls</h3><p>Use the <code class="sccode">[Sitecore.DependencyInjection.AllowDependencyInjection]</code> attribute for Forms and UserControls:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">[Sitecore.DependencyInjection.AllowDependencyInjection] </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">public partial class Default : System.Web.UI.Page </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">{</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> protected Default() // important </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> { </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> }</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"></code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">public Default(IMyService myService, MyServiceBase serviveBase) </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> { </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> … </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> } </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">} </code></pre><p>The Form must also have a default constructor (this is a limitation of ASP.NET).</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint" id="injection-to-usercontrols"> [Sitecore.DependencyInjection.AllowDependencyInjection] </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">public partial class DefaultControl : System.Web.UI.UserControl </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">{ </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> protected DefaultControl() // important </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> }</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> public DefaultControl(IMyService myService, MyServiceBase serviveBase)</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> ...</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> }</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">}</code></pre><p id="registration"><bookmark></bookmark>The Form must also have a default constructor (this is a limitation of ASP.NET).</p><h3>Service locator</h3><p>It is currently not possible to use dependency injection with all parts of Sitecore, so sometimes the service locator is the only solution. This is, for example, the case in page handler factories, MVC controller factories, and in static manager for backward compatibility.</p><p>Therefore, you can use the <code class="sccode">Sitecore.DependencyInjection.ServiceLocator</code> class. For example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">var service = ServiceLocator.ServiceProvider.GetService(typeof(IMyService))</code></pre><p>Or, for example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">var service = ServiceLocator.ServiceProvider.GetService&lt;MyServiceBase&gt;();</code></pre></div><h2 class="heading2" expand-collapse="" id="registration-with-configuration" id="registration-with-code" id="services-lifetime" id="service-locator" id="view-di-configuration"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark>View the dependency injection configuration</h2><div class="collapsable"><p>You can see the details of the dependency injection at this URL: <u>http://[instance]/sitecore/admin/showservicesconfig.aspx</u>.</p><p>You can see configured-in services (node services) at this URL: <u>http://[instance]/sitecore/admin/showconfig.aspx</u>.</p></div><h2 class="heading2" expand-collapse="" id="replace-service-provider"><bookmark></bookmark>Replace service provider</h2><div class="collapsable"><p>You can replace the service provider. Sitecore uses the Microsoft.Extensions.DependencyInjection package default.</p><p>To replace default provider:</p><ul><li>Inherit from <code class="sccode">Sitecore.DependencyInjection.BaseServiceProviderBuilder</code> and implement the <code class="sccode">BuildServiceProvider </code>method:<pre class="codesnippet"><code class="prettyprint">public class MyProviderBuilder : BaseServiceProviderBuilder</code></pre><pre class="codesnippet"><code class="prettyprint">{</code></pre><pre class="codesnippet"><code class="prettyprint"> protected override IServiceProvider BuildServiceProvider(IServiceCollection serviceCollection)</code></pre><pre class="codesnippet"><code class="prettyprint"> {</code></pre><pre class="codesnippet"><code class="prettyprint"> return MyFavouriteServiceProvider.Build(serviceCollecion);</code></pre><pre class="codesnippet"><code class="prettyprint"> }</code></pre><pre class="codesnippet"><code class="prettyprint">} </code></pre><p>The <a href="https://github.com/aspnet/DependencyInjection">Framework site</a> has a list of the containers that Sitecore supports.</p></li><li>Replace the default builder in <code class="sccode">Sitecore.config</code> with your builder:<pre class="codesnippet"><code class="prettyprint">&lt;serviceProviderBuilder type=&quot;Sitecore.DependencyInjection.DefaultServiceProviderBuilder, Sitecore.Kernel&quot;/&gt; </code></pre><p>You can also patch this node with an <a href="http://sitecore-community.github.io/docs/documentation/Sitecore Fundamentals/Patch Files/">include file</a><u>:</u></p><pre class="codesnippet"><code class="prettyprint" id="_GoBack">&lt;serviceProviderBuilder type=&quot;MyProviderBuilder&quot;/&gt;</code></pre></li></ul><p><p></div>Wed, 19 Sep 2018 15:28:22 +0200{CDFCCCC3-22A6-4288-AF25-EBD5409A05A2}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/xDB/Session_state/Walkthrough_Configuring_a_shared_session_state_database_using_the_Redis_provider.aspxWalkthrough: Configuring a shared session state database using the Redis provider<p>In a shared session state, all data that can be shared across multiple sessions, for example, the data related to contacts and devices, is collected and saved to the session state database.</p><p>A contact can make multiple parallel visits to a website, in which case each visit has its own private session state. However, some data can be shared between visits, such as device and contact related information.</p><p>Information that is shared between parallel visits by the same contact is stored in the shared session state store. This data is still private to the contact but it is accessible from all current sessions made by the same contact.</p><p>This walkthrough describes how to use Redis as your out of process shared session state store using the&#160;Sitecore ASP.NET session state provider for Redis:</p><p><ul><li><a href="#_Deploy_a_shared" go-to-section="">Deploy a shared Redis session database</a></li><li><a href="#_Configure_Sitecore" go-to-section="">Configure Sitecore</a></li><li><a href="#_Adjust_the_Redis" go-to-section="">Adjust the Redis provider settings</a></li></ul><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody" id="_GoBack">Sitecore versions 8.2<bookmark></bookmark> Update 1 and newer support Redis for both on-premise and Azure installations. The Sitecore 8.2 initial release only supports Redis for Azure.</p></section><h2 class="heading2" expand-collapse="" id="_Deploy_a_shared" id="_Deploy_a_shared_1"><bookmark></bookmark><bookmark></bookmark>Deploy a shared Redis session database</h2><div class="collapsable"><p>The Sitecore ASP.NET session state store provider for Redis enables you to use Redis as your session state store. The provider supports the <code class="sccode">SessionEnd</code> event, which xDB needs to track website visits.</p><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Do not make changes directly to the configuration files. Instead, you must create a <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/05/01/15/57/Using_patch_files_to_customize_the_Sitecore_configuration.aspx">patch file</a> that performs the required changes during runtime.</p></section><p></p><p>To deploy a Redis session database:</p><ol><li>Choose between Azure Redis or <a href="https://github.com/MSOpenTech/Redis">Redis on premise</a>. You can provision Azure Redis by using the instructions on the <a href="https://azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-azure-redis-cache/">Microsoft Azure website</a> or with <a href="https://azure.microsoft.com/en-us/documentation/articles/cache-howto-manage-redis-cache-powershell/">Azure PowerShell</a><u>.</u> </li><li>Go to <em class="scemphasis">&lt;sitename&gt;</em><code class="sccode">\</code><em class="scemphasis">Website</em><code class="sccode">\App_Config</code>, open the&#160;<code class="sccode">ConnectionStrings.config</code>&#160;file and add the following connection string:<p><code class="sccode">&lt;add name=&quot;sharedSession&quot; connectionString=&quot;_host_:_port_number _&quot; /&gt;</code></p></li><li>Configure the connection string so that it points to your session database.</li><li>Save your changes.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Configure_Sitecore"><bookmark></bookmark>Configure Sitecore</h2><div class="collapsable"><p>To configure Sitecore to use the shared session state provider for Redis:</p><ol><li>In your site root folder, go to <em class="scemphasis">Website</em>\<em class="scemphasis">App_Config</em>\<em class="scemphasis">Include</em>.</li><li>Open the <code class="sccode">Sitecore.Analytics.Tracking.config</code> file. </li><li>Locate the line where you can define the default shared session state provider using the following path: <em class="scemphasis">sitecore</em>/<em class="scemphasis">tracking</em>/<em class="scemphasis">sharedSessionState</em>.</li><li>Update the&#160;<code class="sccode">sharedSessionState</code>&#160;section to use Redis as the <code class="sccode">defaultProvider</code> instead of&#160;<code class="sccode">InProc</code>&#160;as shown in the following example. Also, change the&#160;name&#160;attribute value to&#160;<code class="sccode">&#39;redis&#39;</code>:<pre class="codesnippet"><code class="prettyprint">&lt;sharedSessionState defaultProvider=&quot;redis&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;clear /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;add name=&quot;redis&quot; type=&quot; Sitecore.SessionProvider.Redis.RedisSessionStateProvider, Sitecore.SessionProvider.Redis &quot; connectionString=&quot;sharedSession&quot; pollingInterval=&quot;2&quot; applicationName=&quot;shared&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/providers&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/sharedSessionState&gt;</code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Adjust_the_Redis"><bookmark></bookmark>Adjust the Redis provider settings</h2><div class="collapsable"><p>Use the <a href="https://doc.sitecore.net:443/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/xDB/Session_state/Redis_provider_settings_reference.aspx">Redis provider settings reference</a> to configure your session state.</p><p>If you have configured everything correctly, session records should appear in your Redis session database after the first web request.</p><p></div>Mon, 10 Sep 2018 16:25:45 +0200{44CD3F4B-9791-40AC-BECA-BBDD19552222}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Developing/Device_Detection/Device_Detection/Using_Device_Detection.aspxUsing Device Detection<p>You can use the Sitecore Device Detection Service in several different ways, for example: as a web developer creating responsive sites, or a marketer interested in campaigns that can personalize visitor experience for different devices. The following eight examples further outline what can you do with Sitecore Device Detection.</p><ul><li><a href="#_Use_different_page" go-to-section="">Use different page layouts for different devices</a></li><li><a href="#_Personalize_site_content" go-to-section="">Personalize site content for visitors with different devices</a></li><li><a href="#_Fine_tune_Goals" go-to-section="">Fine tune Goals and Events</a></li><li><a href="#_Set_up_conditions" go-to-section="">Set up conditions in the engagement automation for IP Geolocation</a></li><li><a href="#_Use_device_rules_1" go-to-section="">Use device rules to create more complex predefined conditions</a><bookmark></bookmark></li><li><a href="#_See_device_reports_1" go-to-section="">See device reports and traffic generated in Experience Analytics</a></li><li><a href="#_Extend_the_list" go-to-section="">Extend the list of rules available in the Rule Set Editor to match your marketing and site development needs</a></li><li><a href="#_Use_Sitecore_Device" go-to-section="">Use Sitecore Device Detection API to program your custom code</a></li></ul><h2 class="heading2" expand-collapse="" id="_Use_different_page"><bookmark></bookmark>Use different page layouts for different devices</h2><div class="collapsable"><p>Sitecore ensures that <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2015/10/15/09/12/Set_up_a_device_layout.aspx">setting up a device layout</a> is very customizable. You can use more than 500 device parameters to identify devices that visit your site and adapt the page layout accordingly. To simplify the way you use these parameters Sitecore Experience Platform out of the box has 12 of the most commonly used rules, plus one generic rule for easy access to any of the parameters. See the list of rules and parameters. To simplify the way you use these parameters the Sitecore Experience Platform has, by default, 12 of the most commonly used rules, plus one generic rule for easy access to any of the parameters. See the list of <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2015/10/15/09/12/Rules_and_parameters_for_Device_Detection.aspx">rules and parameters for Device Detection</a>.</p></div><h2 class="heading2" expand-collapse="" id="_Personalize_site_content"><bookmark></bookmark>Personalize site content for visitors with different devices</h2><div class="collapsable"><p>You can use device rules to set up personalization on site pages. For example you could have a campaign that only targets iPhone users, or another that is more suited for a tablet browsing experience.</p></div><h2 class="heading2" expand-collapse="" id="_Fine_tune_Goals"><bookmark></bookmark>Fine tune Goals and Page Events</h2><div class="collapsable"><p>You can trigger goals or page events if a visitor uses a certain device when browsing your website pages. For example, you can trigger a specific goal when a visitor visits the site using any Android device. To define a goal or a page event, you just apply the same device rules that you use to define a page layout or create personalization.</p><p><img src="/~/media/3B1CB3C255A2401D96BD5695AF8C23D1.ashx?la=en" height="384" width="624" alt="All_DeviceDetection_SitecoreAzure_RuleSetEditor_Screenshot" title="Rule set editor" class="documentimage" doc-fancy-image=""></p></div><h2 class="heading2" expand-collapse="" id="_Set_up_conditions"><bookmark></bookmark>Set up conditions in the engagement automation for Device Detection</h2><div class="collapsable"><p id="_Use_device_rules"><bookmark></bookmark>You can apply device conditions to your engagement plans. For example, you could choose to send different emails to contacts who visited your site depending on whether they visited with an Apple device or a Google device.</p><p><img src="/~/media/55FD2397670F400D8776E51F9E21E281.ashx?la=en" height="430" width="624" alt="All_DeviceDetection_SitecoreAzure_EngagementPlanDesigner_Screenshot" title="Engagement plan designer" class="documentimage" doc-fancy-image=""></p></div><h2 class="heading2" expand-collapse="" id="_Use_device_rules_1"><bookmark></bookmark>Use device rules to create more complex predefined conditions</h2><div class="collapsable"><p>If you frequently need to use the same complex rule on your site, you can create a predefined condition to simplify usage. For example, in the <span class="scwindow">Marketing control panel</span>, you can go to <span class="scwindow">Personalization</span>, <span class="scwindow">Predefined conditions</span> and set up your own minimal requirements for HTML 5 support in the device browser. After setting up a condition you can use it as a single rule &quot;where predefined condition is true&quot; without needing to remember all of the components.</p><p><img src="/~/media/F01266F0735B4AC3B17349770338B290.ashx?la=en" height="533" width="602" alt="All_DeveiceDetection_SitecoreAzure_MarketingControlPanelPersonalizationPredefinedConditions_Screenshots" title="Marketing Control Panel Personalization Predefined Conditions" class="documentimage" doc-fancy-image=""></p></div><h2 class="heading2" expand-collapse="" id="_See_device_reports_1"><bookmark></bookmark>See device reports and traffic generated in Experience Analytics</h2><div class="collapsable"><p id="_See_device_reports"><bookmark></bookmark>With the Experience Analytics tool you can see device reports and evaluate the traffic generated from different devices. Moreover you can see which device users generate more value for your business.</p><p><img src="/~/media/446AB72ED1504A38B133E8EBD43D41A1.ashx?la=en" height="430" width="567" alt="All_DeveiceDetection_SitecoreAzure_DeviceModelsReports_Screenshots" title="Device models reports" class="documentimage" doc-fancy-image=""></p></div><h2 class="heading2" expand-collapse="" id="_Extend_the_list"><bookmark></bookmark>Extend the list of rules available in the Rule Set Editor to match your marketing and site development needs</h2><div class="collapsable"><p>If you frequently use one or several of the device parameters that are not present in the default set of rules, it makes sense to add a new custom rule to the list. You can extend the list of rules available in the rule set editor by <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2015/10/15/08/53/Create_custom_rules_for_Sitecore_Device_Detection.aspx">creating custom rules for Sitecore Device detection</a>. </p><p></div><h2 class="heading2" expand-collapse="" id="_Use_Sitecore_Device"><bookmark></bookmark>Use Sitecore Device Detection API to program your custom code</h2><div class="collapsable"><p id="_Override_Sitecore_Device">If the default functionality is not enough for you, we are happy to offer access to the Device Detection API. With this API you can extend the Sitecore Experience Platform with your own custom solutions whether it is a sophisticated page layout or an advanced report.<bookmark></bookmark></p></div>Thu, 06 Sep 2018 10:49:04 +0200{45B928F1-B9C8-42C3-8DD3-B5C6F7A8477D}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/IP_Geolocation/IP_Geolocation/Setting_up_Sitecore_IP_Geolocation.aspxSetting up Sitecore IP Geolocation<p>The Sitecore IP Geolocation service provides information about the location and owner of an IP address beyond that provided by a reverse DNS lookup. IP Geolocation information includes the country, state, city, and the registered company name of every visitor.</p><p>You can use IP Geolocation lookups to create conditional renderings or personalization rules that show different content, based on the visitor&#39;s location. </p><p>This topic describes:</p><ul><li><a href="#_System_requirements" go-to-section="">System requirements</a></li><li><a href="#_Activate_the_Sitecore" go-to-section="">Activate the Sitecore IP Geolocation service</a></li><li><a href="#_Subscribe_to_the" go-to-section="">Subscribe to the Sitecore IP Geolocation Service</a></li><li><a href="#_Configure_a_firewall" go-to-section="">Configure a firewall</a></li><li><a href="#_Using_a_proxy" go-to-section="">Using a proxy server</a></li></ul><h2 class="heading2" expand-collapse="" id="_System_requirements"><bookmark></bookmark>System requirements</h2><div class="collapsable"><p id="_Hlk499301099"><bookmark></bookmark>Sitecore IP Geolocation is included in the initial version of Sitecore Experience Platform 8.1 (Sitecore XP) and all later versions by default, it is also tested with all subsequent updates. This means you only need to <a href="#_Subscribe_to_the" go-to-section="">subscribe to the Sitecore IP Geolocation service</a>.</p><p>The Sitecore IP Geolocation module is fully compatible with Sitecore Experience Management (CMS-only mode).</p></div><h2 class="heading2" expand-collapse="" id="_Activate_the_Sitecore"><bookmark></bookmark>Activate the Sitecore IP Geolocation service </h2><div class="collapsable"><p id="_GoBack">To activate the Sitecore IP Geolocation Service on Sitecore XP<bookmark></bookmark>* you must subscribe to the Sitecore IP Geolocation service in the App Center. The Sitecore IP Geolocation service is now free of charge and with unlimited lookups per month.</p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody" id="_Subscribe_to_the">Your IP Geolocation service subscription is connected to your unique Sitecore License ID. This means that if you update your license ID (for example, when you use a new license.xml), you must reactivate your IP Geolocation subscription.<bookmark></bookmark></p></section></div><h2 class="heading2" expand-collapse="">Subscribe to the Sitecore IP Geolocation Service</h2><div class="collapsable"><ol><li>On the Sitecore Launchpad, click <span class="scwindow">App Center and </span><a href="https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/sitecore_app_center/using_the_sitecore_app_center/access_the_sitecore_app_center">log in</a>.<p><img src="/~/media/7AB296009185479F92E3F54748593A15.ashx?la=en" height="355" width="574" alt="Cloud_IPGeolocation_Launchpad_screenshot" title="Launchpad" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Sitecore IP Geolocation Service</span>.<p><img src="/~/media/5E668544BC00438FBBEFC3D7BA34EF51.ashx?la=en" height="206" width="585" alt="Cloud_IPGeolocation_SitecoreAppCenterMenu_screenshot" title="Sitecore App Center menu" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Continue</span> to proceed with your sign-up and see the summary of your subscription.<p><img src="/~/media/32CD257BE9744AE68A84AEDD2B75D5FD.ashx?la=en" height="406" width="576" alt="Cloud_IPGeolocation_PricePlan90_screenshot" title="Price Plan 90" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Confirm</span> to view the <em class="scemphasis">Sitecore IP Geolocation Terms of Service</em>.<p><img src="/~/media/40677DB3A37C48EBB53233CE72786327.ashx?la=en" height="162" width="397" alt="Cloud_IPGeolocation_PurchaseConfirmation_screenshot" title="Purchase confirmation" class="documentimage" doc-fancy-image=""></p></li><li>Select <span class="scwindow">I accept the terms and conditions</span> checkbox and confirm your subscription.<p><img src="/~/media/E33E6444C1F3457D9D70DCB656F1B335.ashx?la=en" height="355" width="576" alt="Cloud_IPGeolocation_TermsOfService_screenshot" title="Terms of Service" class="documentimage" doc-fancy-image=""></p></li></ol><p>Now your subscription is complete and you can view your subscription details.</p><p><img src="/~/media/EE2EC18F14EA4CDC8D2743BC11551148.ashx?la=en" height="630" width="623" alt="Cloud_IPGeolocation_SubscriptionDetails_screenshot" title="Subscription details" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">After you have activated your subscription, it may take some time for the system to update the license information. When the system has updated, the Sitecore IP Geolocation service will automatically conduct geolocation lookups.</p></section></div><h2 class="heading2" expand-collapse="" id="_Install_and_enable" id="_Configure_a_firewall"><bookmark></bookmark><bookmark></bookmark>Configure a firewall</h2><div class="collapsable"><p>It is common to have a firewall set up between your content management and content delivery servers. To ensure that the Sitecore IP Geolocation service works correctly in all scenarios, you must configure your firewall settings to allow requests to the service.</p><p>Add a firewall rule to allow HTTPS protocol for:</p><ul><li><code class="sccode">geoIp-ces.cloud.sitecore.net</code></li><li><code class="sccode">Discovery-ces.cloud.sitecore.net</code></li></ul></div><h2 class="heading2" expand-collapse="" id="_Using_a_proxy"><bookmark></bookmark>Using a proxy server</h2><div class="collapsable"><p>For requests coming from a reverse proxy server to your Sitecore instance, that should be tracked as the valid IP addresses of a client, and not as the IP addresses of a proxy, use the following setting: </p><ul><li>In <code class="sccode">Sitecore.Analytics.Tracking.config</code> change the <code class="sccode">Analytics.ForwardedRequestHttpHeader</code> setting to the value: <em class="scemphasis">X-Forwarded-For</em> </li></ul><p id="_Migrating_from_MaxMind"><bookmark></bookmark></p></div>Tue, 04 Sep 2018 11:29:14 +0200{A2F2AE16-7671-4B7F-9790-0C8F11E29458}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/IP_Geolocation/Setting_up_Sitecore_IP_Geolocation.aspxSetting up Sitecore IP Geolocation<p>The Sitecore IP Geolocation service provides information about the location and owner of an IP address beyond that provided by a reverse DNS lookup. IP Geolocation information includes the country, state, city, and the registered company name of every visitor.</p><p>You can use IP Geolocation lookups to create conditional renderings or personalization rules that show different content based on the visitor&#39;s location. </p><p>This topic describes:</p><ul><li><a href="#_System_requirements_for" go-to-section="">System requirements for Sitecore</a></li><li><a href="#_Activate_the_Sitecore" go-to-section="">Activate the Sitecore IP Geolocation service</a></li><li><a href="#_Activate_the_Sitecore" go-to-section=""></a><a href="#_Subscribe_to_the" go-to-section="">Subscribe to the Sitecore IP Geolocation Service</a></li><li><a href="#_Configure_a_firewall" go-to-section="">Configure a firewall</a></li><li><a href="#_Using_a_proxy" go-to-section="">Using a proxy server</a></li></ul><h2 class="heading2" expand-collapse="" id="_System_requirements_for"><bookmark></bookmark>System requirements for Sitecore </h2><div class="collapsable"><p>Sitecore IP Geolocation is included in the initial version of Sitecore Experience Platform 8.1 (Sitecore XP) and all later versions by default, and is tested with all subsequent updates. This means you only need to subscribe to the Sitecore IP Geolocation service.</p><p id="_GoBack">The Sitecore IP Geolocation module is fully compatible with Sitecore Experience Management (CMS-only mode).<bookmark></bookmark></p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Your IP Geolocation service subscription is connected to your unique Sitecore License ID. This means that if you update your license ID (for example, when you use a new license.xml), you must reactivate your IP Geolocation subscription.</p></section></div><h2 class="heading2" expand-collapse="" id="_Activate_the_Sitecore"><bookmark></bookmark>Activate the Sitecore IP Geolocation service </h2><div class="collapsable"><p id="_Subscribe_to_the"><bookmark></bookmark>To activate the Sitecore IP Geolocation Service on Sitecore XP *, you must subscribe to the Sitecore IP Geolocation service in the App Center. The Sitecore IP Geolocation service is now free of charge and with unlimited lookups per month.</p><section class="note"><p class="scnoteheader">Note </p><p class="scnotebody">Your IP Geolocation service subscription is connected to your unique Sitecore License ID. This means that if you update your license ID (for example, when you use a new license.xml), you must reactivate your IP Geolocation subscription.</p></section></div><h2 class="heading2" expand-collapse="">Subscribe to the Sitecore IP Geolocation Service</h2><div class="collapsable"><ol><li>On the Sitecore Launchpad, click <span class="scwindow">App Center</span>.<p><img src="/~/media/7AB296009185479F92E3F54748593A15.ashx?la=en" height="290" width="468" alt="Cloud_IPGeolocation_Launchpad_screenshot" title="Launchpad" class="documentimage" doc-fancy-image=""></p></li><li>In the Sitecore App Center, click <span class="scwindow">Sitecore IP Geolocation Service</span>.<p><img src="/~/media/4FA4049B612146EB9DC4EF48A237ABF5.ashx?la=en" height="146" width="562" alt="Cloud_IPGeolocation_Sitecore App Center_screenshot" title="Sitecore App Centre" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Continue</span> to proceed with your sign-up and to see a summary of your subscription.<p><img src="/~/media/95373CCC76194E4AB19A4CC090833940.ashx?la=en" height="203" width="559" alt="Cloud_IPGeolocation_PricePlan_screenshot" title="Price Plan" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Confirm</span> to view the Terms of Service.<p><img src="/~/media/1204DEF63DD34D20B8677FF8FFB2C906.ashx?la=en" height="133" width="225" alt="Cloud_IPGeolocation_PurchaseConfirmation_screenshot" title="Purchase confirmation" class="documentimage" doc-fancy-image=""></p></li><li>Select <span class="scwindow">I accept the terms and conditions</span> and click <span class="scwindow">Continue</span> to complete your subscription.<p><img src="/~/media/C4D4C7A83B9E411D85CCFF6241C5B4BB.ashx?la=en" height="306" width="551" alt="Cloud_IPGeolocation_SitecoreIPGeolocationTermsOfService_screenshot" title="Sitecore IP Geolocation Terms of Service" class="documentimage" doc-fancy-image=""></p></li></ol><p>Now your subscription is complete.</p><p><img src="/~/media/48830F0013E84AAD83B069088FDD357C.ashx?la=en" height="271" width="557" alt="Cloud_IPGeolocation_SubscriptionComplete_screenshot" title="Subscription complete" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">After activating your subscription, the system may take some time to update your license information. When this information has updated, the Sitecore IP Geolocation service will automatically carry out geolocation lookups.</p></section></div><h2 class="heading2" expand-collapse="" id="_Install_and_enable" id="_Configure_a_firewall"><bookmark></bookmark><bookmark></bookmark>Configure a firewall</h2><div class="collapsable"><p>It is common to set up a firewall between your content management and content delivery servers. To ensure that the Sitecore IP Geolocation service works correctly in every scenario, you must configure your firewall settings to allow requests to the service.</p><p>Add a firewall rule to allow HTTPS protocol for:</p><ul><li><code class="sccode">geoIp-ces.cloud.sitecore.net</code></li><li><code class="sccode">Discovery-ces.cloud.sitecore.net</code></li></ul></div><h2 class="heading2" expand-collapse="" id="_Using_a_proxy"><bookmark></bookmark>Using a proxy server</h2><div class="collapsable"><p>When requests that come from a reverse proxy server to your Sitecore instance should be tracked as the valid IP addresses of a client, and not as the IP addresses of a proxy, use the following setting. </p><ul><li>In the <code class="sccode">Sitecore.Analytics.Tracking.config</code> file change the value of the <code class="sccode">Analytics.ForwardedRequestHttpHeader</code> setting to <code class="sccode">X-Forwarded-For</code><em class="scemphasis">.</em> </li></ul><p id="_Migrating_from_MaxMind"><bookmark></bookmark></p></div>Tue, 04 Sep 2018 09:27:35 +0200{F3A47971-5D5A-4D8B-A99E-F52DC896DA23}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/81/Setting_up_and_maintaining/IP_Geolocation/Setting_up_Sitecore_IP_Geolocation.aspxSetting up Sitecore IP Geolocation<p>The Sitecore IP Geolocation service provides information about the location and owner of an IP address beyond that provided by a reverse DNS lookup. IP Geolocation information includes the country, state, city, and the registered company name of every visitor.</p><p id="_GoBack">You can use IP Geolocation lookups to create conditional renderings or personalization rules that show different content,<bookmark></bookmark> based on the visitor&#39;s location. </p><p>This topic describes:</p><ul><li><a href="#_System_requirements_for" go-to-section="">System requirements for Sitecore</a></li><li><a href="#_Activate_the_Sitecore" go-to-section="">Activate the Sitecore IP Geolocation service</a></li><li><a href="#_Subscribe_to_the" go-to-section="">Subscribe to the Sitecore IP Geolocation Service</a></li><li><a href="#_Install_and_enable" go-to-section="">Configure a firewall</a></li><li><a href="#_Using_a_proxy" go-to-section="">Using a proxy server</a></li></ul><h2 class="heading2" expand-collapse="" id="_System_requirements_for"><bookmark></bookmark>System requirements for Sitecore </h2><div class="collapsable"><p>Sitecore IP Geolocation is included in the initial version of Sitecore Experience Platform 8.1 (Sitecore XP) and all later versions by default, and is tested with all subsequent updates. This means you only need to subscribe to the Sitecore IP Geolocation service.</p><p>The Sitecore IP Geolocation module is fully compatible with Sitecore Experience Management (CMS-only mode).</p></div><h2 class="heading2" expand-collapse="" id="_Activate_the_Sitecore"><bookmark></bookmark>Activate the Sitecore IP Geolocation service</h2><div class="collapsable"><p>To activate the Sitecore IP Geolocation Service on Sitecore XP *, you must subscribe to the Sitecore IP Geolocation service in the App Center. The Sitecore IP Geolocation service is now free of charge and with unlimited lookups per month.</p><section class="note"><p class="scnoteheader">Note </p><p class="scnotebody">Your IP Geolocation service subscription is connected to your unique Sitecore License ID. This means that if you update your license ID (for example, when you use a new license.xml), you must reactivate your IP Geolocation subscription.</p></section></div><h2 class="heading2" expand-collapse="" id="_Subscribe_to_the"><bookmark></bookmark>Subscribe to the Sitecore IP Geolocation Service</h2><div class="collapsable"><ol><li>On the Sitecore Launchpad, click <span class="scwindow">App Center</span>.<p><img src="/~/media/7AB296009185479F92E3F54748593A15.ashx?la=en" height="346" width="560" alt="Cloud_IPGeolocation_Launchpad_screenshot" title="Launchpad" class="documentimage" doc-fancy-image=""></p></li><li>In the Sitecore App Center, click <span class="scwindow">Sitecore IP Geolocation Service</span>.<p><img src="/~/media/7C024BE2E52F4AC08D6CDBBA08ECC676.ashx?la=en" height="146" width="561" alt="Cloud_IPGeolocation_SitecoreAppCentre_screenshot" title="Sitecore App Center" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Continue</span> to proceed with your sign-up and to see a summary of your subscription.<p><img src="/~/media/1D7F1E61E2574E09842A0EA455682D75.ashx?la=en" height="203" width="560" alt="Cloud_IPGeolocation_PricePlan_screenshot" title="Price plan" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Confirm</span> to view the Terms of Service<p><img src="/~/media/F5EF4F8308024201B5C33670366971FD.ashx?la=en" height="167" width="281" alt="Cloud_IPGeolocation_PurchaseConfirmation_screenshot" title="Purchase confirmation" class="documentimage" doc-fancy-image=""></p></li><li>Select the <span class="scwindow">I accept the terms and conditions</span> check box and click <span class="scwindow">Continue</span> to complete your subscription.<p><img src="/~/media/C4D4C7A83B9E411D85CCFF6241C5B4BB.ashx?la=en" height="307" width="555" alt="Cloud_IPGeolocation_SitecoreIPGeolocationTermsOfService_screenshot" title="Sitecore IP Geolocation Terms of Service" class="documentimage" doc-fancy-image=""></p></li></ol><p>Now your subscription is complete.</p><p><img src="/~/media/2312F48FBAD74F6BA3770DA68867C9C2.ashx?la=en" height="270" width="555" alt="Cloud_IPGeolocation_SubscriptionComplete_screenshot" title="Subscription complete" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">After activating your subscription, it may take some time to update your license information. When this information has updated, the Sitecore IP Geolocation service will automatically carry out geolocation lookups.</p></section></div><h2 class="heading2" expand-collapse="" id="_Install_and_enable" id="_Configure_a_firewall"><bookmark></bookmark><bookmark></bookmark>Configure a firewall</h2><div class="collapsable"><p>It is common to set up a firewall between your content management and content delivery servers. To ensure that the Sitecore IP Geolocation service works correctly in every scenario, you must configure your firewall settings to allow requests to the service.</p><p>Add a firewall rule to allow HTTPS protocol for:</p><ul><li><code class="sccode">geoIp-ces.cloud.sitecore.net</code></li><li><code class="sccode">Discovery-ces.cloud.sitecore.net</code></li></ul></div><h2 class="heading2" expand-collapse="" id="_Using_a_proxy"><bookmark></bookmark>Using a proxy server</h2><div class="collapsable"><p>When requests that come from a reverse proxy server to your Sitecore instance should be tracked as the valid IP addresses of a client, and not as the IP addresses of a proxy, use the following setting. </p><ul><li>In the <code class="sccode">Sitecore.Analytics.Tracking.config</code> file change the value of the <code class="sccode">Analytics.ForwardedRequestHttpHeader</code> setting to <code class="sccode">X-Forwarded-For</code><em class="scemphasis">.</em> </li></ul><p id="_Migrating_from_MaxMind"><bookmark></bookmark></p></div>Fri, 31 Aug 2018 17:12:06 +0200{17E8D899-D7D0-4FB1-9651-93640A039D61}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/80/Setting_up_and_maintaining/IP_Geolocation/Setting_up_Sitecore_IP_Geolocation.aspxSetting up Sitecore IP Geolocation<p>The Sitecore IP Geolocation service provides information about the location and owner of an IP address beyond that provided by a reverse DNS lookup. IP Geolocation information includes the country, state, city, and the registered company name of every visitor.</p><p>You can use IP Geolocation lookups to create conditional renderings or personalization rules that show different content based on the visitor&#39;s location.</p><p>This topic describes:</p><ul><li><a href="#_System_requirements_for" go-to-section="">System requirements for Sitecore 8.0</a></li><li><a href="#_Install_the_Sitecore" go-to-section="">Activate the Sitecore IP Geolocation service</a><bookmark></bookmark></li><li><a href="#_Install_the_Sitecore" go-to-section="">Install the Sitecore IP Geolocation service for Sitecore 8.0</a></li><li><a href="#_Subscribe_to_the_1" go-to-section="">Subscribe to the Sitecore IP Geolocation Service</a></li><li><a href="#_Install_and_enable_1" go-to-section="">Install and enable the Sitecore IP Geolocation Service</a></li><li><a href="#_Upgrade_your_Sitecore" go-to-section="">Upgrade your Sitecore IP Geolocation Service</a></li><li><a href="#_Configuration_file_changes" go-to-section="">Configuration file changes</a></li><li><a href="#_Firewall_configuration" go-to-section="">Firewall configuration</a></li><li><a href="#_Using_a_proxy" go-to-section="">Using a proxy server</a></li></ul><h2 class="heading2" expand-collapse="" id="_System_requirements_for"><bookmark></bookmark>System requirements for Sitecore 8.0</h2><div class="collapsable"><p>The Sitecore IP Geolocation Service component is a separate package in Sitecore 8.0. It supports all Sitecore 8.0 versions from Sitecore 8.0 rev. 141212 and later. The module has been tested specifically with Sitecore 8.0 rev. 150223 (Update-2) and Sitecore 8.0 rev. 150427 (Update-3). </p><p>We recommend that you update your Sitecore installation <a href="https://dev.sitecore.net/?sc_lang=en">to the latest version</a>. </p></div><h2 class="heading2" expand-collapse="" id="_Install_the_Sitecore" id="_Activate_the_Sitecore"><bookmark></bookmark><bookmark></bookmark>Activate the Sitecore IP Geolocation service</h2><div class="collapsable"><p>To activate the Sitecore IP Geolocation Service on Sitecore XP *, you must subscribe to the Sitecore IP Geolocation service in the App Center. The Sitecore IP Geolocation service is now free of charge and with unlimited lookups per month.</p><section class="note"><p class="scnoteheader">Note </p><p class="scnotebody">Your IP Geolocation service subscription is connected to your unique Sitecore License ID. This means that if you update your license ID (for example, when you use a new license.xml), you must reactivate your IP Geolocation subscription.</p></section></div><h2 class="heading2" expand-collapse="">Install the Sitecore IP Geolocation service for Sitecore 8.0</h2><div class="collapsable"><p>Installing Sitecore IP Geolocation Service consists of two basic steps:</p><ol><li>Subscribe to the Sitecore IP Geolocation Service</li><li>Install and enable the package. To ensure you have the right package, go to <a href="https://dev.sitecore.net/">dev.sitecore.net</a>.</li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Your IP Geolocation service subscription is connected to your unique Sitecore License ID. This means that if you update your license ID (for example, when you use a new license.xml), you must reactivate your IP Geolocation subscription.</p></section></div><h2 class="heading2" expand-collapse="" id="_Subscribe_to_the_1"><bookmark></bookmark>Subscribe to the Sitecore IP Geolocation Service</h2><div class="collapsable"><ol><li>On the Sitecore Launchpad, click <span class="scwindow">App Center</span>.<p><img src="/~/media/1D6E9766504141FD9282E5142FA02C46.ashx?la=en" height="359" width="581" alt="Cloud_IPGeolocation_Launchpad_screenshot" title="Launchpad" class="documentimage" doc-fancy-image=""></p></li><li>In the Sitecore App Center, click <span class="scwindow">Sitecore IP Geolocation Service</span>.<p><img src="/~/media/899531E6A0004E04862E218B770E95F0.ashx?la=en" height="152" width="585" alt="Cloud_IPGeolocation_SitecoreAppCenter_screenshot" title="Sitecore App Centre" class="documentimage" doc-fancy-image=""></p></li><li><bookmark></bookmark>Click <span class="scwindow">Continue</span> to proceed with your sign-up and to see a summary of your subscription.<p><img src="/~/media/C0212DD5897743B7858991CB28F0444B.ashx?la=en" height="212" width="585" alt="Cloud_IPGeolocation_PricePlan_screenshot" title="Price Plan" class="documentimage" doc-fancy-image=""></p></li><li>Click <span class="scwindow">Confirm</span> to view the Terms of Service.<p><img src="/~/media/D9FDE9D2B9A64DE892994D96C0D3BB08.ashx?la=en" height="167" width="282" alt="Cloud_IPGeolocation_PurchaseConfirmation_screenshot" title="Purchase confirmation" class="documentimage" doc-fancy-image=""></p></li><li>Select the <span class="scwindow">I accept the terms and conditions</span> check box and click <span class="scwindow">Continue</span> to complete your subscription.<p><img src="/~/media/92462BD7184F4EA394873382798C6A36.ashx?la=en" height="320" width="577" alt="Cloud_IPGeolocation_SitecoreIPGeolocationTermsOfService_screenshot" title="Sitecore IP Geolocation Terms of Service" class="documentimage" doc-fancy-image=""></p></li></ol><p>Now your subscription is complete.</p><p><img src="/~/media/D79E74A2626B488793E7DCC50B2A26F0.ashx?la=en" height="304" width="624" alt="Cloud_IPGeolocation_SubscriptionComplete_screenshot" title="Subscription complete" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">After activating your subscription, the system may take some time to update your license information. When this information is updated, the Sitecore IP Geolocation Service will automatically carry out geolocation lookups. </p></section></div><h2 class="heading2" expand-collapse="" id="_Install_and_enable_1"><bookmark></bookmark>Install and enable the Sitecore IP Geolocation Service</h2><div class="collapsable"><p>After purchasing the Sitecore IP Geolocation Service from the Sitecore App Center, you can install the Sitecore IP Geolocation component on your Sitecore instance:</p><ol><li>Go to <code class="sccode">https://dev.sitecore.net/Downloads.aspx</code>, and download the <em class="scemphasis">Sitecore IP Geolocation Service Client 1.2</em> package.</li><li>On the Sitecore Launchpad, click <span class="scwindow">Control Panel</span>, and in the <span class="scwindow">Administration</span> section, click <span class="scwindow">Install a package</span> and then use the wizard to install the package and accept the license.</li><li>Upload the package using the <span class="scwindow">Upload Wizard</span>.<section class="note"><p class="scnoteheaderindent">Important</p><p class="scnotebodyindent">You must select the <span class="scwindow">Overwrite all files</span> checkbox.</p></section></li><li>Open the CES folder <code class="sccode">/inetpub/wwwroot/yourinstancename/Website/App_Config/Include/CES/</code><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">Make sure you change <code class="sccode">yourinstancename</code> to the actual name of your instance.</p></section></li><li>To enable the configuration files, remove <code class="sccode">.disable</code> from the end of the file names. <p>Enable the following files:</p><ul class="scbullet2ndlevel"><li><code class="sccode">Sitecore.CES.config</code></li><li><code class="sccode">Sitecore.CES.GeoIp.config</code> </li><li><code class="sccode">Sitecore.CES.GeoIP.LegacyLocation.config</code></li></ul></li></ol></div><h2 class="heading2" expand-collapse="" id="_Upgrade_your_Sitecore"><bookmark></bookmark>Upgrade your Sitecore IP Geolocation Service</h2><div class="collapsable"><p>If you have the initial version of the Sitecore IP Geolocation client 1.2 rev. 150429 installed, you can use the following steps to upgrade to the Sitecore IP Geolocation Service Client 1.2 rev. 150602 (Update-1).</p><ol><li>On <code class="sccode">https://dev.sitecore.net/Downloads.aspx</code>, download <code class="sccode">Sitecore IP Geolocation Service Client 1.2 rev. 150602</code>.</li><li>Follow steps 2–5 in the previous section.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Configuration_file_changes"><bookmark></bookmark>Configuration file changes</h2><div class="collapsable"><p>If you have made any changes to your configuration files, you should:</p><ul><li>Back up your configuration files.</li><li>Install the update package and overwrite the existing configuration files.</li><li>Reapply your configuration file changes in the new version of your configuration files.</li></ul></div><h2 class="heading2" expand-collapse="" id="_Firewall_configuration"><bookmark></bookmark>Firewall configuration</h2><div class="collapsable"><p>It is common to set up a firewall between your content management and content delivery servers. To ensure that the Sitecore IP Geolocation service works correctly in every scenario, you must configure your firewall settings to allow requests to the service.</p><p>Add a firewall rule to allow HTTPS protocol for:</p><ul><li><code class="sccode">geoIp-ces.cloud.sitecore.net</code></li><li><code class="sccode">Discovery-ces.cloud.sitecore.net</code></li></ul></div><h2 class="heading2" expand-collapse="" id="_Using_a_proxy"><bookmark></bookmark>Using a proxy server</h2><div class="collapsable"><p>To ensure that requests that come from a reverse proxy server to your Sitecore instance are tracked as the valid IP addresses of a client, and not as the IP addresses of a proxy: </p><ul><li>In <code class="sccode">Sitecore.Analytics.Tracking.config</code> file, change the value of the <code class="sccode">Analytics.ForwardedRequestHttpHeader</code> setting to <code class="sccode">X-Forwarded-For</code><em class="scemphasis">.</em> </li></ul><p id="_Subscribe_to_the" id="_Install_and_enable" id="_Migrating_from_MaxMind"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark></p></div>Fri, 31 Aug 2018 17:04:46 +0200{7993E1D4-DA6C-4B34-A720-98BDC83F027F}https://doc.sitecore.net/en/Products/Cloud/20_Azure_Toolkit/Working_with_Sitecore_Azure_Toolkit/Packaging/The_structure_of_an_SCCPL_transformation.aspxThe structure of an SCCPL transformation<p>A Sitecore Cargo Payload (SCCPL) package is the extension of a ZIP package with the following structure:</p><table class="table"><tbody><tr><th style="width: 25%;"><p><span class="scwindow">Command</span></p></th><th style="width: 74%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">CopyToWebsite/*</code></p></td><td><p>Copies files to the <em class="scemphasis">Website</em> folder in the target installation. You can use this to deploy new files or overwrite existing files, such as resource files, DLLs, and configuration files.</p></td></tr><tr><td><p><code class="sccode">CopyToRoot/*</code></p></td><td><p>Copies files to the root of the Web Deployment Package (WDP). You usually use this, for example, to inject <code class="sccode">.dacpac</code> or <code class="sccode">.sql</code> files to perform database changes.</p></td></tr><tr><td><p><code class="sccode">Xdts/*</code></p></td><td><p>XDT transformations for XML files are under the Website root. Use XDT transformations to tweak configuration files that the WDP deploys without adding new configuration files. The file name convention is: <code class="sccode">{original file name}.xdt</code>. </p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">SCCPL transformations use the <a href="https://msdn.microsoft.com/en-us/library/dd465326(v=vs.110).aspx">XDT syntax</a> to transform XML files, not the Sitecore configuration patch syntax.</p></section></td></tr><tr><td><p><code class="sccode">IOActions/*.ioxml</code></p></td><td><p>An XML file that describes the actions that are going to happen to the files in a WDP package. See the example in the following <a href="#_IOActions" go-to-section="">IOActions section</a>.</p></td></tr></tbody></table><p>This topic describes:</p><ul><li><a href="#_The_structure_of" go-to-section="">The structure of a SCCPL package</a></li><li><a href="#_IOActions" go-to-section="">Basic SCCPL packages</a></li><li><a href="#_IOActions_1" go-to-section="">IOActions</a><bookmark></bookmark></li></ul><h2 class="heading2" expand-collapse="" id="_The_structure_of"><bookmark></bookmark>The structure of a SCCPL package</h2><div class="collapsable"><p>The following example shows the structure of a SCCPL package.</p><table class="table"><tbody><tr><th style="width: 84%;"><p><span class="scwindow">Package</span></p></th><th style="width: 15%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">CopyToWebsite\App_Config\Include\Component.config</code></p></td><td><p>Configuration file for a new component, integration into Sitecore.</p></td></tr><tr><td><p><code class="sccode">CopyToWebsite\bin\Component.dll</code></p></td><td><p>DLL file for the component.</p></td></tr><tr><td><p><code class="sccode">CopyToWebsite/sitecore/shell/client/Applications/Component/page.cshtml</code></p></td><td><p>Resource file - MVC page view.</p></td></tr><tr><td><p><code class="sccode">Xdts\App_Config\ConnectionStrings.config.xdt</code></p></td><td><p>XDT transformation: adding connection string for the new component.</p></td></tr><tr><td><p><code class="sccode">IOActions\Component.ioxml</code></p></td><td><p>Enable/disable configuration files.</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_IOActions" id="_Basic_SCCPL_packages"><bookmark></bookmark><bookmark></bookmark>Basic SCCPL packages</h2><div class="collapsable"><p>You can fine-tune your Sitecore solution to match your needs by using SCCPL packages. There are two different approaches to doing this: </p><ul><li>Adjust your current SCCPL.<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">If you choose this option, you must branch and merge on updates.</p></section></li><li>Create a new SCCPL based on your current SCCPL in the <em class="scemphasis">Cargo</em> folder, (the <em class="scemphasis">Cargo</em> folder includes SCCPLs). Then, include the relevant SKU file, (in <code class="sccode">$SKU.packaging.config.json</code>, <a href="https://doc.sitecore.net/cloud/working_with_sitecore_azure_toolkit/packaging/packaging_a_sitecore_solution_for_the_microsoft_azure_app_service">you can learn how to process a SCCPL</a>). </li></ul><p>The following table outlines the basic Sitecore SCCPL packages:</p><table class="table"><tbody><tr><th style="width: 54%;"><p><span class="scwindow">Package</span></p></th><th style="width: 45%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">Sitecore.Cloud.Search.Azure.sccpl</code></p></td><td><p>Transforms the <code class="sccode">web.config</code> file using the Azure Search provider. It is also a patch to add the <code class="sccode">ConnectionStrings.config</code> file to the <code class="sccode">cloud.search</code> connection string.</p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.ApplicationInsights.sccpl</code></p></td><td><p>Copies the Application Insights configuration files to both the /<em class="scemphasis">base</em> and the <em class="scemphasis">App_Config</em>/<em class="scemphasis">Sitecore</em>/<em class="scemphasis">Azure</em>/ folders, and the assemblies files to the /<em class="scemphasis">bin</em> folder. The <code class="sccode">ConnectionStrings.config</code> file also transforms to add the <code class="sccode">appinsights.instrumentationkey</code> connection and update the <code class="sccode">web.config</code> file with the Application Insights configuration.</p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.DisableAnalytics.sccpl</code></p></td><td><p>Applies the current SCCPL for the XM WDPs. This disables the <code class="sccode">Analytics</code> and <code class="sccode">XConnect</code> connection strings in the <code class="sccode">ConnectionStrings.config</code> file and turns off the <code class="sccode">Xdb.Enabled</code> setting in the <code class="sccode">Sitecore.Xdb.config</code> file.</p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.DisableExm.sccpl </code></p><p></td><td><p>Applies the current SCCPL for the XM WDPs. This disables the <code class="sccode">EXM</code> connection strings in the <code class="sccode">ConnectionStrings.config</code> file and turns off the <code class="sccode">EXM.Enabled</code> setting in the <code class="sccode">Sitecore.EmailExperience.Core.config</code> file.</p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.Common.sccpl</code></p></td><td><p>A common SCCPL for all WDPs. The main actions of this package include:</p><ul><li>Setting the data folder to <em class="scemphasis">D:</em>\<em class="scemphasis">home</em>\<em class="scemphasis">site</em>\<em class="scemphasis">wwwroot</em>\<em class="scemphasis">App_Data</em></li><li>Preparing a placeholder for a Sitecore license</li><li>Disabling the <code class="sccode">Sitecore.Diagnostics.config</code> file</li><li>Changing the value of the <code class="sccode">customErrors mode</code> setting to &quot;<code class="sccode">Off</code>&quot; (<code class="sccode">customErrors mode=&quot;Off&quot;)</code></li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.HttpsRedirection.sccpl</code></p></td><td><p>A common SCCPL for all WDPs. This package transforms the <code class="sccode">web.config</code> file to apply https redirection.</p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.IPSecurity.sccpl </code></p></td><td><p>Updates the <code class="sccode">web.config</code> file with an example of IP filtering to limit access to the CM, Processing, and DDS roles. </p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.Redis_CD.sccpl</code></p></td><td><p>Applies the SCCPL for the CD WDP to the XM and XP topologies, and enables the Redis cache configuration and connection strings.</p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_CD.sccpl</code></p></td><td><p>Applies the SCCPL for the CD WDP to the XM and XP topologies. </p><p>The main actions of this package include:</p><ul><li>Setting the WDP role to <code class="sccode">ContentDelivery</code><em class="scemphasis"> </em>in the<code class="sccode"> web.config</code> file</li><li>Setting the correct connection strings list for the CD role in the <code class="sccode">connectionstrings.config</code> file</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_CM.sccpl</code></p></td><td><p>Applies the SCCPL for the CM WDP to the XM and XP topologies.</p><p>The main actions of this package include:</p><ul><li>Setting the WDP role to <code class="sccode">ContentManagement</code> in the <code class="sccode">web.config</code> file</li><li>Setting the correct connection strings list for the CM role in the <code class="sccode">connectionstrings.config</code> file</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_DDS.sccpl</code></p></td><td><p>Applies the SCCPL for the DDS role to the XP topology.</p><p>The main action of this package is:</p><ul><li>Setting the WDP role to <code class="sccode">ContentManagement</code>, <code class="sccode">DedicatedDispatch</code> in the <code class="sccode">web.config</code> file.</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_PRC.sccpl</code></p><p></td><td><p>Sets the correct connection strings list for the DDS role and applies the PRC WDP for the XP and xDB topologies.</p><p>The main actions of this package include:</p><ul><li>Setting the WDP role to <code class="sccode">Processing</code> in the <code class="sccode">web.config</code> file.</li><li>Setting the correct connection strings list for the PRC role in the <code class="sccode">connectionstrings.config</code> file.</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_REP.sccpl</code></p></td><td><p>Applies the SCCPL for the CM WDP to the XP and xDB topologies.</p><p>The main actions of this package include:</p><ul><li>Setting the WDP role to <code class="sccode">Reporting</code> in the <code class="sccode">web.config</code> file.</li><li>Setting the correct connection strings list for the REP role in the <code class="sccode">connectionstrings.config</code> file.</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_XDBSingle.sccpl</code></p></td><td><p>Applies the SCCPL for the Sitecore Single WDP to the xDB Single topology. </p><p>The main actions of this package include:</p><ul><li>Setting the WDP role to <code class="sccode">Processing</code><em class="scemphasis">, </em><code class="sccode">Reporting</code><em class="scemphasis"> </em>in the <code class="sccode">web.config</code> file.</li><li>Setting the correct connection strings list for the Single (PRC+REP) role in the <code class="sccode">connectionstrings.config</code> file.</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_XMSingle.sccpl</code></p></td><td><p>Applies the SCCPL for the Sitecore Single WDP to the XM Single topology.</p><p>The main actions of this package include:</p><ul><li>Setting the WDP role to <code class="sccode">ContentManagement</code>, <code class="sccode">ContentDelivery</code> in the <code class="sccode">web.config</code> file.</li><li>Setting the correct connection strings list for the Single (CM+CD) role in the <code class="sccode">connectionstrings.config</code> file.</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.RoleSpecific_XPSingle.sccpl</code></p></td><td><p>Applies the SCCPL for Sitecore Single WDP to the XP Single topology. </p><p>The main action of this package is:</p><ul><li>Setting the correct connection strings list for the Single (CM+CD+PRC+REP) role in the <code class="sccode">connectionstrings.config</code> file.</li></ul></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.Security.sccpl</code></p></td><td><p>Copies database accounts creation scripts to the website root and transforms the <code class="sccode">web.config</code> file with security rules. </p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.Security_CD.sccpl</code></p></td><td><p>Transforms the <code class="sccode">web.config</code> file with security rules for the CD role.</p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.SetCompatibilityLevel.sccpl</code></p></td><td><p>Copies the SQL server compatibility level scripts to the website root. </p></td></tr><tr><td><p><code class="sccode">Sitecore.Cloud.Thundercracker.sccpl</code></p></td><td><p>The main actions of this package include:</p><ul><li>Removing the <em class="scemphasis">UploadWatcher </em>folder functionality, (because it is not applicable for Azure). </li><li>Changing the location of the <em class="scemphasis">Media.CacheFolder</em> folder.</li><li>Changing the <code class="sccode">PageStateStore</code> and <code class="sccode">ViewStateStore</code> settings to write to the DB.</li></ul></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="" id="_IOActions_1"><bookmark></bookmark>IOActions</h2><div class="collapsable"><p> The IOActions are described in <code class="sccode">.ioxml</code> files with <code class="sccode">path</code> and <code class="sccode">action</code> attributes; the <code class="sccode">enable</code>, <code class="sccode">disable</code>, and <code class="sccode">delete</code> action values; and the following structure:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;IOActions&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;IOAction path=&quot;App_Config\Include\001.Sitecore.Speak.Important.config&quot; action=&quot;disable&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">…</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/IOActions&gt;</code></pre><p><table class="table"><tbody><tr><th style="width: 24%;"><p><span class="scwindow">Attributes</span></p></th><th style="width: 75%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">path</code></p></td><td><p>The path to the file that you want to change, relative to the <em class="scemphasis">Website</em> folder. </p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">The value must be the exact path to a single file, including the expected extension(s). Wildcards are not supported.</p></section></td></tr><tr><td><p><code class="sccode">action</code></p></td><td><p>A file-level action (enable, disable, or delete) that is performed on the file.</p></td></tr></tbody></table><p><table class="table"><tbody><tr><th style="width: 24%;"><p><span class="scwindow">IO action values</span></p></th><th style="width: 75%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">enable</code></p></td><td><p>Enable a configuration file by renaming it from <code class="sccode">*.config.disabled</code>, or <code class="sccode">*.config.example</code>, to <code class="sccode">*.config.</code></p></td></tr><tr><td><p><code class="sccode">disable</code></p></td><td><p>Disable a configuration file by renaming it from <code class="sccode">*.config</code> to <code class="sccode">*.config.disabled.</code></p></td></tr><tr><td><p><code class="sccode">delete</code></p></td><td><p>Delete the file from the package.</p></td></tr></tbody></table><p></div>Thu, 30 Aug 2018 15:10:47 +0200{39AB593B-F34A-43B6-B824-AFC9F93F13EF}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/80/Digital_marketing/Personalization/Walkthrough_Personalizing_components.aspxWalkthrough: Personalizing components<p>Personalization enables you to deliver targeted content to your visitors. For example, you can implement rules that show personalized content to visitors based on their browsing behavior and their accumulated profile values. </p><p>In the Experience Editor, you can create rules to determine which content is shown to different site visitors. These are called personalization rules or conditional renderings. </p><p>You can create personalization rules that are based on many different criteria, including goals, campaigns, engagement value points, profile value points, and engagement plans. Your website responds to personalization rules in real-time by showing specific content, by hiding content, or by adjusting the behavior of a component.</p><p>This walkthrough outlines how to:</p><ul><li><a href="#_Create_a_personalization" go-to-section="">Create a personalization rule</a></li><li><a href="#_Personalize_the_content" go-to-section="">Personalize the content</a></li><li><a href="#_Personalize_the_layout" go-to-section="">Personalize the layout for the component</a></li><li><a href="#_Preview_the_personalized" go-to-section="">Preview the personalized component</a></li></ul><p>This example shows how to create a rule that determines when visitors see a link for a brochure download.</p><p class="sclistheading">Scenario</p><p>The website displays a brochure download link on every page except the <em class="scemphasis">Home</em> page. The personalization rule specifies that the brochure link on the <em class="scemphasis">Our Services </em>page is only displayed to visitors who have a lead score of 50 or more.</p><h2 class="heading2" expand-collapse="" id="_Create_a_personalization"><bookmark></bookmark>Create a personalization rule in the Experience Editor</h2><div class="collapsable"><p>To create a personalization rule, you specify the conditions that must be fulfilled, for example, to show a particular brochure to visitors who have a lead score of 50 or more.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Before you create a personalization rule, you need to have all the content that you want to associate with the personalization rule ready. If you also choose to change the layout of the personalized component, you need to have the relevant rendering items ready too. </p></section><p>To create a personalization rule:</p><ol><li>In the Experience Editor, click the <span class="scwindow">View</span> tab and in the <span class="scwindow">Enable</span> group, select <span class="scwindow">Designing</span> to enable the design functionality.</li><li>Navigate to the page where you want to implement the personalization rule. In this example, you want to edit the <em class="scemphasis">Services</em> page.</li><li>In the sidebar, click the <em class="scemphasis">Want more information</em> section, and in the floating toolbar that appears, click <span class="scwindow">Personalize Component</span> <img src="/~/media/5574DCD88B584BB1BE499E1BAD1A7F0A.ashx?la=en" height="19" width="19" alt="button_xe_FloatingToolbar_Personalize" title="Personalize a component" class="documentimage" doc-fancy-image="">.<p><img src="/~/media/3263C688FE5748348F7C44F9707B6BCB.ashx?la=en" height="223" width="218" alt="cms_xe_FloatingToolbar_Personalize" title="The floating toolbar - Personalize a component" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Personalize the Component</span> dialog box, click <span class="scwindow">New Condition</span>.<p><img src="/~/media/BDFB1C0F8E1449069A196BCF7A1DFEAC.ashx?la=en" height="334" width="446" alt="cms_xe_PersonalizeTheComponentDialog" title="The Personalize the Component dialog" class="documentimage" doc-fancy-image=""></p></li><li>Give the new condition an appropriate name, for example, <em class="scemphasis">Only Show Brochure to Leads</em>.<p><img src="/~/media/494D1947B468446EA36442597BB2D542.ashx?la=en" height="428" width="446" alt="cms_xe_PersonalizeTheComponentDialog_TwoConditions" title="Personalize the Component dialog" class="documentimage" doc-fancy-image=""></p><p>Sitecore evaluates the personalization rules in the order that they appear in the <span class="scwindow">Personalize the Component </span>dialog box. If the visitor does not satisfy the rule specified in a condition, Sitecore moves on to the next condition, and so on, until the visitor meets one of the conditions. The default condition is used if a visitor meets none of the other conditions. </p></li><li>To define the condition for the new component, click <span class="scwindow">Edit</span> and in the <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2014/12/08/11/58/The_Rule_Set_Editor.aspx">Rule Set Editor</a>, in the <em class="scemphasis">Select the condition for the rule</em> field, select a condition.<p>In this example, in the <span class="scwindow">Filter</span> field, you enter the search word profile and select the following condition: </p><p>“<em class="scemphasis">where the value of the specific profile key compares to specific value</em>” </p><p><img src="/~/media/A1D3C640DBD14569B28433CB423D1107.ashx?la=en" height="452" width="363" alt="cms_all_RuleSetEditorDialog" title="The Rule Set Editor" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">To create a personalization rule that only applies to visitors whose behavior is mapped to a specified pattern card, you can select the condition <em class="scemphasis">where the current visit matches the specific pattern card in the specific profile.</em></p></section></li><li>Edit the values in the condition. To do this, click on the links in the <span class="scwindow">Rule Description</span> field.<ul class="scbullet2ndlevel"><li>The first link contains the words <code class="sccode">when</code> or <code class="sccode">where</code>. If you click the link, Sitecore reverses the condition, alternating between <code class="sccode">when</code> and <code class="sccode">except when</code>, or <code class="sccode">where</code> and <code class="sccode">except where</code>.</li><li>The second link contains the word <code class="sccode">specific.</code> Clicking this link will take you to a dialog box where you can select the item or profile that you want to use.</li><li>Other links can include comparisons or numeric values. Clicking these links will take you to a dialog box where you can select from options relating to the link.</li></ul><p>In this example, you want only visitors who have accumulated a lead score of 50 or more to see the brochure download link. In the <span class="scwindow">Rule description</span> field, click <em class="scemphasis">specific</em> and in the <span class="scwindow">Select Profile Key</span> dialog box, expand <em class="scemphasis">Score,</em> and select <em class="scemphasis">Lead</em>. Click <span class="scwindow">OK</span>.</p><p><img src="/~/media/60BC389FA61F49C9A8F4A15C4641049B.ashx?la=en" height="313" width="353" alt="cms_all_SelectProfileKeyDialog" title="The Select Profile Key dialog" class="documentimage" doc-fancy-image=""></p></li><li>To select a comparison for this rule, in the <span class="scwindow">Rule description</span> field, click <em class="scemphasis">compares to.</em> In the <span class="scwindow">Select Comparison</span> dialog box, select “<em class="scemphasis">is greater than or equal to</em>” and click <span class="scwindow">OK</span>.<p><img src="/~/media/1E6B8E7EB0924764800FA6FABC0FF071.ashx?la=en" height="307" width="346" alt="cms_all_SelectComparisonDialog" title="The Select Comparison dialog" class="documentimage" doc-fancy-image=""></p></li><li>To display the brochure download link on the <em class="scemphasis">Our Services</em> page when the <em class="scemphasis">Lead</em> profile score of the visitor is higher than 50, click <em class="scemphasis">specific value</em>, enter <em class="scemphasis">50</em>, and then click <span class="scwindow">OK</span>.<p><img src="/~/media/662085A47C7943C3BC2C2EB5467256A1.ashx?la=en" height="431" width="451" alt="cms_xe_PersonalizeTheComponentDialog_TwoConditions_Specified" title="The Personalize the Component" class="documentimage" doc-fancy-image=""></p></li></ol></div><h2 class="heading2" expand-collapse="" id="_Personalize_the_content"><bookmark></bookmark>Personalize the content</h2><div class="collapsable"><p>After you have created a personalization rule, you can specify the content that you want the page or component to perform an action on when the conditions in the rule are met. You can hide or show content, as well as adjust the behavior and presentation of a web control.</p><p>To hide or display content:</p><ol><li>In the <span class="scwindow">Personalize the Component</span> dialog box, click <span class="scwindow">Hide Component</span> for the rule where you want to hide the content. In this example, you want to hide the <em class="scemphasis">Default</em> condition.<p><img src="/~/media/4971263F429945FC80FBAA5692F1E6B0.ashx?la=en" height="452" width="610" alt="cms_xe_PersonalizeTheComponentDialog_DefaultHidden" title="The Personalize the Component" class="documentimage" doc-fancy-image=""></p><p>In this example, when a visitor comes to the <em class="scemphasis">Our Services</em> page, they only see the <em class="scemphasis">Download the Office Core brochure</em> link if they have a lead score of 50 or more. The <em class="scemphasis">Default</em> condition state, which visitors see until their profile value is 50, hides the content. </p></li><li>To display different content for a rule, for example, for the visitors who are not leads, in the <span class="scwindow">Personalize Content</span> field, click <span class="scwindow">Browse</span> <img src="/~/media/B3F70DCE193048B784E0FFBD993CBF75.ashx?la=en" height="13" width="12" alt="button_cms_Browse" title="The Browse button" class="documentimage" doc-fancy-image="">.</li><li>In the <span class="scwindow">Select the Associated Content</span> dialog box, navigate through the content tree or run a search for the item that you want to display when the conditions are met.<p><img src="/~/media/A02D763DFECA49059838C1FAD6E972FA.ashx?la=en" height="423" width="417" alt="cms_all_SelectTheAssociatedContentDialog" title="The Select the Associated Content dialog" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">The item must be compatible with the current rendering item. For example, you must use web forms renderings for web form items, and so on.</p></section></li><li>When you have finished selecting the content for personalization, click <span class="scwindow">OK</span>.</li><li>The website now shows personalized content based on the conditions in the personalization rule.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Personalize_the_layout"><bookmark></bookmark>Personalize the layout for a component</h2><div class="collapsable"><p>You also can personalize the way a component is displayed on your webpage.</p><p>To personalize the layout of a component:</p><ol><li>In the <span class="scwindow">Personalize the Component</span> dialog box, select the <span class="scwindow">Enable personalization of component</span> <span class="scwindow">design </span>check box. This displays the <span class="scwindow">Personalize Component</span> field.<p><img src="/~/media/B7EC217B70694F80A73AA75E7366F491.ashx?la=en" height="455" width="615" alt="cms_xe_PersonalizeTheComponentDialog_EnablePersonalizationCheckBox" title="Personalize the component dialog" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Personalize Component</span> field, click <span class="scwindow">Browse</span> <img src="/~/media/247B431C3B374C21B2FDCCE55B1BC5EE.ashx?la=en" height="11" width="11" alt="button_cms_Browse" title="The Browse button" class="documentimage" doc-fancy-image=""> and in the <span class="scwindow">Select a Rendering</span> dialog box, select the rendering that you want to use for the content that is associated with this personalization rule.<p><img src="/~/media/AA9170A909E54648BB2585841EB72B13.ashx?la=en" height="298" width="446" alt="cms_all_SelectARenderingDialog" title="The Select a Rendering dialog" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">The new rendering must be compatible with the component.</p></section></li></ol></div><h2 class="heading2" expand-collapse="" id="_Preview_the_personalized"><bookmark></bookmark>Preview the personalized component</h2><div class="collapsable"><p>To preview personalized content, in the <span class="scwindow">Experience Editor</span>, click the component that you added personalization to. In the floating menu that appears, click the arrow to see the details about the current condition and to click another condition to view the other content that you have set up for the component. </p><p>In this example, if the visitor has a lead score of 50 or more, the component displays the brochures:</p><p><img src="/~/media/159CA93AFDA9402EB4F27ED940D1B70E.ashx?la=en" height="322" width="199" alt="cms_xe_PreviewComponentPersonalizationDropDownMenu" title="The Personalization drop-down menu" class="documentimage" doc-fancy-image=""></p><p>In this example, if the visitor has a lead score of 50 or more, the component displays the brochures: If the visitor has a lead score of less than 50, the brochures are hidden.</p><p><img src="/~/media/9718A28B8D544B139740D00A6D7A3F75.ashx?la=en" height="167" width="174" alt="cms_xe_PreviewComponentPersonalization2" title="Preview Personalization" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">You must <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2014/12/10/14/48/Publish_an_item_to_your_website.aspx">publish rules</a> before you can use them on your website.</p></section><p></div>Wed, 29 Aug 2018 15:03:29 +0200{250D02B5-F26E-4566-AB9E-2841668115A8}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Digital_marketing/Federated_Experience_Manager/Configuring/The_requirements_and_limitations_of_FXM.aspxRequirements and limitations<p>The Federated Experience Manager (FXM) is an integrated part of Sitecore and is enabled by default.</p><p>To enable FXM functionality on an external website and track visits to that site:</p><ul><li>You must have installed Sitecore xDB.</li><li>You must have access to the backend of the external website to be able to deploy the tracking script on the website.</li><li>Your Sitecore site and the external site must both have the same type of connection – http or https.</li><li>Your license file controls your ability to use FXM, so you must ensure that the appropriate permission is specified in your license file – <code class="sccode">license.xml</code>.</li><li>Ensure that the location of the <em class="scemphasis">Temp </em>folder that you can specify in the <code class="sccode">FXM.BundledJSFilesPath</code> setting in the <em class="scemphasis">Sitecore.FXM.config</em> file is located within the <em class="scemphasis">\Website</em> folder.</li></ul><p>FXM supports:</p><ul><li>Sitecore xDB Cloud Edition</li><li>Sitecore xDB on-premise</li></ul><p>FXM supports these internal Sitecore features:</p><ul><li>Experience Profile</li><li>Experience Analytics</li><li>Experience Editor</li><li>Personalization</li><li>WFFM (MVC)</li></ul><p>The following content is deployed externally through the Sitecore content mark-up:</p><ul><li>Renderings</li><li>Sublayouts</li></ul><h2 class="heading2" expand-collapse="">Limitations</h2><div class="collapsable"><p>FXM has the following limitations:</p><ul><li>On Internet Explorer 11, to ensure that FXM can process web service requests correctly, the host website must have a top-level domain name. </li><li>The Sitecore website and the external website must use the same application level protocol – http or https.</li><li>Tracking of visits does not work if the external website is a single page application (SPA). If the external website is a SPA, all visits are associated with the single URL.</li><li>You cannot use the same fully qualified domain name (FQDN) for a Sitecore site and a non-Sitecore page or site.<bookmark></bookmark></li><li>FXM does not currently support:<ul class="scbullet2ndlevel"><li>Content testing (M/V and A/B testing)</li><li>Path Analyzer</li><li>Workflows</li></ul></li></ul><p>The FXM module embeds standardized code to external websites to activate the functionality. However, this approach is incompatible with certain website functionalities. </p><p>FXM does not support external websites that use:</p><ul><li>RequireJS</li><li>Cookie-based authentication to website pages.</li><li>Dynamic HTML generated by Document Object Model (DOM) or modified by JavaScript. </li><li>Parts of the HTML page that are loaded using AJAX technologies.</li><li>Navigational links that are generated by JavaScript.</li><li>Client-side JavaScript code for navigation.</li><li>302 HTTP redirects for navigation.</li><li>Custom ports. You must use the standard HTTP (80) and HTTPS (443) ports.</li><li>The <code class="sccode">&lt;base /&gt;</code> tag.</li></ul><p>In the Experience Editor, placeholder content and personalization does not work if the external website uses:</p><ul><li>Dynamic HTML generated by DOM or modified by JavaScript. </li><li>Loading parts of the HTML page using AJAX technologies.</li></ul><p></div>Tue, 28 Aug 2018 13:53:40 +0200{A785AE99-5CBC-4466-9E20-60EEBB827FC3}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/81/Digital_marketing/Federated_Experience_Manager/Configuring/The_requirements_and_limitations_of_FXM.aspxRequirements and limitations<p>The Federated Experience Manager (FXM) is an integrated part of Sitecore and is enabled by default.</p><p>To enable FXM functionality on an external website and track visits to that site:</p><ul><li>You must have installed Sitecore xDB.</li><li>You must have access to the backend of the external website to be able to deploy the tracking script on the website.</li><li>Your Sitecore site and the external site must both have the same type of connection – http or https.</li><li>Your license file controls your ability to use FXM, so you must ensure that the appropriate permission is specified in your license file – <code class="sccode">license.xml</code>.</li></ul><p>FXM supports:</p><ul><li>Sitecore xDB Cloud Edition</li><li>Sitecore xDB on-premise</li></ul><p>FXM supports these internal Sitecore features:</p><ul><li>Experience Profile</li><li>Experience Analytics</li><li>Experience Editor</li><li>Personalization</li><li>WFFM (MVC)</li></ul><p>The following content is deployed externally through the Sitecore content mark-up:</p><ul><li>Renderings</li><li>Sublayouts</li></ul><h2 class="heading2" expand-collapse="">Limitations</h2><div class="collapsable"><p>FXM has the following limitations:</p><ul><li>On Internet Explorer 11, to ensure that FXM can process web service requests correctly, the host website must have a top-level domain name. </li><li>The Sitecore website and the external website must use the same application level protocol – http or https.</li><li>Tracking of visits does not work if the external website is a single page application (SPA). If the external website is a SPA, all visits are associated with the single URL.</li><li>You cannot use the same fully qualified domain name (FQDN) for a Sitecore site and a non-Sitecore page or site.<bookmark></bookmark></li><li>FXM does not currently support:<ul class="scbullet2ndlevel"><li>Content testing (M/V and A/B testing)</li><li>Path Analyzer</li><li>Workflows</li><li>Language versions. All requests return the default language version.</li></ul></li></ul><p>The FXM module embeds standardized code to external websites to activate the functionality. However, this approach is incompatible with certain website functionalities. </p><p>FXM does not support external websites that use:</p><ul><li>RequireJS</li><li>Cookie-based authentication to website pages.</li><li>Dynamic HTML generated by Document Object Model (DOM) or modified by JavaScript. </li><li>Parts of the HTML page that are loaded using AJAX technologies.</li><li>Navigational links that are generated by JavaScript.</li><li>Client-side JavaScript code for navigation.</li><li>302 HTTP redirects for navigation.</li><li>Custom ports. You must use the standard HTTP (80) and HTTPS (443) ports.</li><li>The <code class="sccode">&lt;base /&gt;</code> tag.</li></ul><p>In the Experience Editor, placeholder content and personalization does not work if the external website uses:</p><ul><li>Dynamic HTML generated by DOM or modified by JavaScript. </li><li>Loading parts of the HTML page using AJAX technologies.</li></ul><p></div>Tue, 28 Aug 2018 13:51:36 +0200{E8AC97A4-F510-407B-A349-E7C8E6F8A5CE}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/80/Digital_marketing/Federated_Experience_Manager/Configuring/Requirements_and_limitations.aspxRequirements and limitations<p>The Federated Experience Manager (FXM) is an integrated part of Sitecore 8.0 and is enabled by default.</p><p>To enable FXM functionality on an external website and track visits to that site:</p><ul><li>You must have installed Sitecore xDB.</li><li>You must have physical access to the website. <p>You must be able to deploy the Beacon JavaScript on the website.</p></li><li>Your Sitecore site and the external site must both have the same type of connection – http or https.</li><li>Your license file controls your ability to use FXM, so you must ensure that the appropriate permission is specified in your license file – <code class="sccode">license.xml</code>.</li></ul><p>FXM supports:</p><ul><li>Sitecore xDB Cloud Edition</li><li>Sitecore xDB on-premise</li></ul><p>FXM supports these internal Sitecore 8.0 features:</p><ul><li>Experience Profile</li><li>Experience Analytics</li><li>Experience Editor</li></ul><p>The following content is deployed externally through the Sitecore content mark-up:</p><ul><li>Renderings</li><li>Sublayouts</li></ul><h2 class="heading2" expand-collapse="">Limitations</h2><div class="collapsable"><p>FXM does not currently support the following functionality on external websites:</p><ul><li>Multivariate (M/V) testing</li><li>Sitecore Web Forms for Marketers (WFFM) </li><li>Path Analyzer</li><li>Workflows</li><li>MVC renderings (supported only on Sitecore 8.0 Update-2 or later)</li></ul><p>These features are expected to be supported in future versions of Sitecore XP.</p><p><p>FXM has the following limitations:</p><ul><li>FXM does not support external websites that use RequireJS.</li><li>On Internet Explorer 11, to ensure that FXM can process web service requests correctly, the host website must have a top-level domain name. </li><li>The Sitecore website and the external website must use the same application level protocol – http or https.</li><li><bookmark></bookmark>You cannot use the same fully qualified domain name (FQDN) for a Sitecore site and a non-Sitecore page or site.</li></ul><p></div>Tue, 28 Aug 2018 13:36:33 +0200{8B451B4D-CCFE-4C7F-A7CB-0CC9471DDE02}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Search_and_indexing/Indexing/Switch_Solr_indexes.aspxSwitch Solr indexes<p>You can set up Solr to rebuild an index in a separate core so that the rebuilding does not affect the search index that is currently used. Once the rebuilding and the optimization of the index completes, Sitecore switches the two cores, and the rebuilt and optimized index is used. </p><p>The <em class="scemphasis">SwitchOnRebuildSolrSearchIndex</em> class inherits from the <em class="scemphasis">SolrSearchIndex</em> class and adds the capability of maintaining two cores for a particular index. Because this is only important for production environments, you can reconfigure your custom index with the <em class="scemphasis">SwitchOnRebuildSolrSearchIndex</em> implementation during testing and before moving to a production environment. </p><p class="scnotebody">In Sitecore 9, Update 2, and later there is also <a href="#_Swtch_SolrCloud_indexes" go-to-section="">support for switching SolrCloud indexes</a>.</p><p>When it has fully rebuild the index, Sitecore switches the primary and secondary cores by sending a <a href="https://cwiki.apache.org/confluence/display/solr/CoreAdmin+API">SWAP</a> request to Solr.</p><p>To create a duplicate Solr index and set up Solr to rebuild an index in a separate core:</p><ol><li>From the Solr server, copy the existing <em class="scemphasis">itembuckets</em> folder. Call the copy <code class="sccode">itembuckets_sec</code>.</li><li>Update the <code class="sccode">itembuckets_sec/core.properties</code> file and set name of the new core:<p><code class="sccode">name=itembuckets_sec</code></p></li><li>Restart Solr.</li><li>Check the two cores. You can do this by visiting these URLs (change as appropriate for your actual setup):<p><code class="sccode">http://localhost:8983/solr/itembuckets/select/?q=*:*&amp;version=2.2&amp;start=0&amp;rows=10&amp;indent=on</code></p><p><code class="sccode">http://localhost:8983/solr/itembuckets_sec/select/?q=*:*&amp;version=2.2&amp;start=0&amp;rows=10&amp;indent=on</code></p><p>Both should return 0 results (but you will see some XML).</p></li><li>To use this implementation, change the type reference on a particular search index to <code class="sccode">Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndex</code>, and add the <code class="sccode">rebuildcore</code> parameter:<pre class="codesnippet"><code class="prettyprint">&lt;indexes hint=&quot;list:AddIndex&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;index id=&quot;content_index&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> type=&quot;Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndex, </code></pre><pre class="codesnippet"><code class="prettyprint"> Sitecore.ContentSearch.SolrProvider&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> </code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;param desc=&quot;name&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;param desc=&quot;core&quot;&gt;itembuckets&lt;/param&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;param desc=&quot;rebuildcore&quot;&gt;itembuckets_sec&lt;/param&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">...</code></pre></li></ol><p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">After you have changed the configuration file, your website uses indexes from the primary core. Each time you initiate a full index rebuild, Sitecore does this in the secondary core. The secondary core then becomes the primary one after the rebuild.</p></section><h2 class="heading2" expand-collapse="">Separate cores for each index</h2><div class="collapsable"><p>If you configure multiple indexes to share the same core, then the secondary core becomes the primary for <em class="scemphasis">all</em> indexes each time you perform a full index rebuild. </p><p>For example, assume that you have a configuration similar to this:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;index id=&quot;sitecore_web_index&quot; type=&quot;Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndex, Sitecore.ContentSearch.SolrProvider&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;name&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;core&quot;&gt;itembucket&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;rebuildcore&quot;&gt;itembucket_web_rebuild&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">...</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;index id=&quot;sitecore_master_index&quot; type=&quot;Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;name&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;core&quot;&gt;itembucket&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;propertyStore&quot; ref=&quot;contentSearch/databasePropertyStore&quot; param1=&quot;$(id)&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">...</code></pre><p>When Sitecore has finished rebuilding the index, both indexes use the <code class="sccode">itembucket_web_rebuild</code> core, even if you have not specified the <em class="scemphasis">SwitchOnRebuild</em> behavior for the <code class="sccode">sitecore_master_index</code> index.</p><p>For this reason, you should configure separate cores for each index in production. You can do this by using configuration similar to this:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;index id=&quot;sitecore_web_index&quot; type=&quot;Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrSearchIndex, Sitecore.ContentSearch.SolrProvider&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;name&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;core&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;rebuildcore&quot;&gt;$(id)_rebuild&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">...</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;index id=&quot;sitecore_master_index&quot; type=&quot;Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;name&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;core&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;propertyStore&quot; ref=&quot;contentSearch/databasePropertyStore&quot; param1=&quot;$(id)&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">...</code></pre><p>This helps you avoid unclear behaviors involving <em class="scemphasis">SwitchOnRebuild</em> and cache clearing.</p><p></div><h2 class="heading2" expand-collapse="" id="_Swtch_SolrCloud_indexes" id="_GoBack"><bookmark></bookmark>Swi<bookmark></bookmark>tch SolrCloud indexes</h2><div class="collapsable"><p class="scnotebody">The features described in this section are available in Sitecore 9, Update 2, and later.</p><p>You use the <em class="scemphasis">SwitchOnRebuildSolrSearchIndex</em> class to rebuild and switch Solr indexes. This implementation uses the Solr SWAP command to swap the active and the rebuild indexes.</p><p>The mechanism for maintaining and switching two indexes is different when use SolrCloud. The implementation in the <em class="scemphasis">SwitchOnRebuildSolrCloudSearchIndex</em> class uses collection aliases: it uses the active alias for search and update operations and the rebuild alias for rebuild operations. When a rebuild operation finishes, the CREATEALIAS command swaps the collections the aliases reference.</p><p>The configuration is similar to what is described for Solr, except for this:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;index id=&quot;sitecore_web_index&quot; type=&quot;Sitecore.ContentSearch.SolrProvider.SwitchOnRebuildSolrCloudSearchIndex, Sitecore.ContentSearch.SolrProvider&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;mainalias&quot;&gt;$(id)MainAlias&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;rebuildalias&quot;&gt;$(id)RebuildAlias&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;collection&quot;&gt;$(id)&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;rebuildcollection&quot;&gt;$(id)_rebuild&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">...</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/index&gt;</code></pre><p>where</p><ul><li><code class="sccode">mainalias</code> and <code class="sccode">rebuildalias</code>: names for active and rebuild aliases respectively which will be used by a Sitecore index.</li><li><code class="sccode">collection</code> and <code class="sccode">rebuildcollection</code>: names of Solr collections which will be used for storing the Sitecore index.</li></ul><p>If the ContentSearch.Solr.EnforceAliasCreation setting is true, a Sitecore instance creates aliases and maps them to collections if they do not already exist. You can also create the aliases manually.</p><p></div>Tue, 28 Aug 2018 13:24:50 +0200{952018C4-FA70-4BBF-A283-9B454CBE26C9}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Sitecore_on_Azure/Deploying/Walkthrough_Deploy_a_new_Sitecore_environment_to_the_Microsoft_Azure_App_service.aspxWalkthrough: Deploy a new Sitecore environment to the Microsoft Azure App service<p>With the Sitecore Azure Toolkit, you can deploy a new Sitecore environment to the Microsoft Azure App Service&#174;.</p><p>This walkthrough describes how to:</p><ul><li><a href="#_Configure_Sitecore" go-to-section="">Configure Sitecore</a></li><li><a href="#_Prepare_the_Authentication" go-to-section="">Prepare the authentication certificate</a></li><li><a href="#_Download_and_configure" go-to-section="">Download and configure an environment template</a></li><li><a href="#_Deploy_with_Solr" go-to-section="">Deploy with Solr as a search provider</a><u> (</u><u>only applies to 9.0.2 and later)</u></li><li><a href="#_Invoke_the_deployment" go-to-section="">Invoke the deployment command and start provisioning</a></li><li><a href="#_Configure_post_deployment" go-to-section="">Configure post deployment</a></li></ul><h2 class="heading2" expand-collapse="" id="_Configure_Sitecore"><bookmark></bookmark>Configure Sitecore</h2><div class="collapsable"><p>To configure Sitecore:</p><ul><li>You must use the right configuration to suit your Sitecore solution. Sitecore version 9.0 supports the following Sitecore configurations by default:<table class="table"><tbody><tr><th style="width: 18%;"><p><span class="scwindow">Configuration</span></p></th><th style="width: 81%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><span class="scwindow">XP Single</span></p></td><td><p>This is the Sitecore Experience Platform configuration that runs: </p><p class="scbulletedlist">Four Sitecore roles: <em class="scemphasis">Content Delivery</em>, <em class="scemphasis">Content Management</em>, <em class="scemphasis">Processing</em>, and <em class="scemphasis">Reporting</em> as a single WebApp instance.</p><p class="scbulletedlist">Five xConnect roles: <em class="scemphasis">Search</em>, <em class="scemphasis">Collection</em>, <em class="scemphasis">Reference Data</em>, <em class="scemphasis">Marketing Automation</em>, and <em class="scemphasis">Marketing Automation Reporting</em> as a single WebApp instance.</p><p>Use this configuration for development and testing. For security and scalability reasons, it is best practice to use the XM or XP configuration in production environments.</p></td></tr><tr><td><p><span class="scwindow">XP Scaled</span></p></td><td><p>This is the Sitecore Experience Platform configuration that runs: </p><p class="scbulletedlist">Four Sitecore roles: <em class="scemphasis">Content Delivery</em>, <em class="scemphasis">Content Management</em>, <em class="scemphasis">Processing</em>, and <em class="scemphasis">Reporting.</em></p><p class="scbulletedlist">Five xConnect roles: <em class="scemphasis">Search</em>, <em class="scemphasis">Collection</em>, <em class="scemphasis">Reference Data</em>, <em class="scemphasis">Marketing Automation</em>, <em class="scemphasis">Marketing Automation Reporting.</em></p><p>Use this environment when you are planning a fully featured Sitecore Experience Platform installation.</p></td></tr><tr><td><p><span class="scwindow">XM Single</span></p></td><td><p>This is the Sitecore Experience Management configuration that runs the <em class="scemphasis">Content Delivery</em> and <em class="scemphasis">Content Management</em> roles as a single WebApp instance. Use this configuration for development and testing when you are not planning to use the <em class="scemphasis">Analytics</em> and <em class="scemphasis">Marketing</em> features of the Sitecore Experience Platform (that is, in CMS-only mode).</p></td></tr><tr><td><p><span class="scwindow">XM Scaled</span></p></td><td><p>This is the Sitecore Experience Management configuration that runs both the <em class="scemphasis">Content Delivery</em> and <em class="scemphasis">Content Management</em> roles. Use this environment when you are not planning to use the <em class="scemphasis">Analytics</em> and <em class="scemphasis">Marketing</em> features of the Sitecore Experience Platform (that is, in CMS-only mode).</p></td></tr><tr><td><p><span class="scwindow">xDB Single</span></p></td><td><p>This is the Sitecore Experience Database configuration that runs: </p><p class="scbulletedlist">Two Sitecore roles: <em class="scemphasis">Processing</em> and <em class="scemphasis">Reporting</em> as a single WebApp instance.</p><p class="scbulletedlist">Five xConnect roles: <em class="scemphasis">Search</em>, <em class="scemphasis">Collection</em>, <em class="scemphasis">Reference Data</em>, <em class="scemphasis">Marketing Automation</em>, and <em class="scemphasis">Marketing Automation Reporting</em> as a single WebApp instance.</p><p>Use this configuration for development and testing in combination with an on-premise Sitecore XM installation to provide the Experience Database features.</p></td></tr><tr><td><p><span class="scwindow">xDB Scaled</span></p></td><td><p>This is the Sitecore Experience Database configuration that runs:</p><p class="scbulletedlist">Two Sitecore roles: <em class="scemphasis">Processing</em>, and <em class="scemphasis">Reporting.</em></p><p class="scbulletedlist">Five xConnect roles: <em class="scemphasis">Search</em>, <em class="scemphasis">Collection</em>, <em class="scemphasis">Reference Data</em>, <em class="scemphasis">Marketing Automation</em>, and <em class="scemphasis">Marketing Automation Reporting</em>. </p><p>Use this environment in combination with an on-premise Sitecore XM installation to provide the Experience Database features.</p></td></tr></tbody></table></li></ul><p>When planning your <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/14/10/56/Sitecore_configurations_and_topology_for_Azure.aspx">topologies, and sizing</a> as well as <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/05/09/15/29/Deploy_a_new_Sitecore_environment_to_the_Azure_App_Service.aspx">the type of environment you want to deploy</a>, consult the Sitecore Azure Toolkit documentation on the Doc site. </p></div><h2 class="heading2" expand-collapse="" id="_Prepare_the_Authentication"><bookmark></bookmark>Prepare the authentication certificate</h2><div class="collapsable"><p>To prepare the authentication certificate:</p><ol><li>Before starting a Sitecore 9.0 deployment, you must <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/16/16/55/The_client_certificate_for_Sitecore_deployments.aspx">obtain or generate an authentication certificate and store it in PKCS #12 format</a> (.pfx).<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">XConnect requires client authentication certificates with a valid trust chain by default. Due to a limitation, in the Azure App Service, a certificate can only have a valid trust chain if the root certificate for it is issued by a globally trusted Certificate Authority.</p></section></li><li>If you use a self-signed certificate or a certificate issued by a private Certificate Authority, such as Active Directory Certificate Services, then you must set the <code class="sccode">allowInvalidClientCertificates</code> parameter to <code class="sccode">true and </code>extend the <code class="sccode">azuredeploy.parameters.json</code> file with the following:<pre class="codesnippet"><code class="prettyprint"> &quot;allowInvalidClientCertificates&quot;: {</code></pre><pre class="codesnippet"><code class="prettyprint"> &quot;value&quot;: true</code></pre><pre class="codesnippet"><code class="prettyprint"> }</code></pre></li></ol><p>More details on the parameters file and how to extend it are described in step 4 of the following section. </p></div><h2 class="heading2" expand-collapse="" id="_Download_and_configure"><bookmark></bookmark>Download and configure an environment template</h2><div class="collapsable"><p>To download and configure the environment template for your planned Sitecore configuration:</p><ol><li>Go to <a href="https://github.com/Sitecore/Sitecore-Azure-Quickstart-Templates">the GitHub repository</a> and locate the templates for your selected Sitecore configuration and version (for example, folder: Sitecore 9.0, subfolder: xp)</li><li>In the appropriate subfolder of your selected configuration and version, identify the <code class="sccode">azuredeploy.json</code> file. This is the main ARM template that you use during the deployment process. Obtain the raw URL for this file from GitHub by selecting the file, then clicking <span class="scwindow">Raw</span>. The file opens in a new browser window. Copy the URL directly from the address bar and make a note of this for later use.</li><li>In the relevant subfolder for your selected configuration and version, identify and download the <code class="sccode">azuredeploy.parameters.json</code> file. To control the deployment process, the ARM templates use this file to pass parameters. </li><li>Save the file locally and fill in the parameters within the file, according to the configuration that is described in the relevant table: </li></ol><p><table class="table"><tbody><tr><th colspan="2" style="width: 37%;"><p><span class="scwindow">XP Single</span></p></th></tr><tr><td><p><span class="scwindow">Parameter</span></p></td><td><p><span class="scwindow">Description</span></p></td></tr><tr><td><p><code class="sccode">location </code></p></td><td><p>The geographical region of the current deployment.</p></td></tr><tr><td><p><code class="sccode">sqlServerLogin </code></p><p></td><td><p>The name of the administrator account to be created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sqlServerPassword </code></p></td><td><p>The password for the administrator account for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sitecoreAdminPassword </code></p></td><td><p>The new password for the Sitecore admin account.</p></td></tr><tr><td><p><code class="sccode">singleMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Sitecore XP Single Web Deployment package (WDP).</p></td></tr><tr><td><p><code class="sccode">xcSingleMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for an XConnect Single WDP.</p></td></tr><tr><td><p><code class="sccode">authCertificateBlob </code></p></td><td><p>A Base64-encoded blob of <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/16/16/55/The_client_certificate_for_Sitecore_deployments.aspx">the authentication certificate in PKCS #12 format</a> (.pfx). See the deployment command example in the next section for encoding instructions.</p></td></tr><tr><td><p><code class="sccode">authCertificatePassword </code></p></td><td><p>The password for the authentication certificate.</p></td></tr><tr><td><p><code class="sccode">templateLinkAccessToken</code></p></td><td><p>The access token for the nested infrastructure and application templates. For example, Azure Storage Explorer can generate a SAS token for you to access the location where the templates were uploaded.</p></td></tr></tbody></table><p><table class="table"><tbody><tr><th colspan="2" style="width: 37%;"><p><span class="scwindow">XP Scaled</span></p></th></tr><tr><td><p><span class="scwindow">Parameter</span></p></td><td><p><span class="scwindow">Description</span></p></td></tr><tr><td><p><code class="sccode">location </code></p><p></td><td><p>The geographical region of the current deployment.</p></td></tr><tr><td><p><code class="sccode">sqlServerLogin </code></p><p></td><td><p>The name of the administrator account to be created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sqlServerPassword </code></p><p></td><td><p>The password for the administrator account for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sitecoreAdminPassword</code></p></td><td><p>The new password for the Sitecore admin account.</p></td></tr><tr><td><p><code class="sccode">repAuthenticationApiKey </code></p><p></td><td><p>A unique value, for example, a GUID, which is used to authenticate when communicating from Content Management role to the Reporting Web App. The minimum length required is 32 characters.</p></td></tr><tr><td><p><code class="sccode">cmMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Sitecore XP Content Management Web Deploy package (WDP).</p></td></tr><tr><td><p><code class="sccode">cdMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Sitecore XP Content Delivery WDP.</p></td></tr><tr><td><p><code class="sccode">prcMsDeployPackageUrl</code></p></td><td><p>The HTTP(s) URL for a Sitecore XP Processing WDP.</p></td></tr><tr><td><p><code class="sccode">repMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Sitecore XP Reporting WDP.</p></td></tr><tr><td><p><code class="sccode">xcRefDataMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for an XConnect Reference Data service WDP.</p></td></tr><tr><td><p><code class="sccode">xcCollectMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for an XConnect Collection service WDP.</p></td></tr><tr><td><p><code class="sccode">xcSearchMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for an XConnect Collection Search service WDP.</p></td></tr><tr><td><p><code class="sccode">maOpsMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Marketing Automation service WDP.</p></td></tr><tr><td><p><code class="sccode">maRepMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Marketing Automation Reporting service WDP.</p></td></tr><tr><td><p><code class="sccode">authCertificateBlob </code></p><p></td><td><p>A Base64-encoded blob of <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/16/16/55/The_client_certificate_for_Sitecore_deployments.aspx">the authentication certificate in PKCS #12 format</a> (.pfx). See the deployment command example in the next section for encoding instructions.</p></td></tr><tr><td><p><code class="sccode">authCertificatePassword </code></p></td><td><p>The password for the authentication certificate.</p></td></tr><tr><td><p><code class="sccode">templateLinkAccessToken</code></p></td><td><p>The access token for the nested infrastructure and application templates. For example, Azure Storage Explorer can generate a SAS token for you to access the location where the templates were uploaded.</p></td></tr></tbody></table><p><table class="table"><tbody><tr><th colspan="2" style="width: 37%;"><p><span class="scwindow">XM Single</span></p></th></tr><tr><td><p><span class="scwindow">Parameter</span></p></td><td><p><span class="scwindow">Description</span></p></td></tr><tr><td><p><code class="sccode">location</code></p></td><td><p>The geographical region of the current deployment.</p></td></tr><tr><td><p><code class="sccode">sqlServerLogin</code></p></td><td><p>The name of the administrator account that is being created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sqlServerPassword</code></p></td><td><p>The password for the administrator account that is being created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sitecoreAdminPassword</code></p></td><td><p>The new password for the Sitecore admin account.</p></td></tr><tr><td><p><code class="sccode">singleMsDeployPackageUrl</code></p></td><td><p>The HTTP(s) URL for a Sitecore XM Single deployment package (WDP).</p></td></tr><tr><td><p><code class="sccode">authCertificateBlob</code></p></td><td><p>A Base64-encoded blob of <a href="#_Prepare_the_Authentication" go-to-section="">the authentication certificate in PKCS #12 format</a> (.pfx). See the deployment command example in the next section for encoding instructions.</p></td></tr><tr><td><p><code class="sccode">authCertificatePassword</code></p></td><td><p>The password for the authentication certificate.</p></td></tr><tr><td><p><code class="sccode">templateLinkAccessToken</code></p></td><td><p>The access token for the nested infrastructure and application templates. For example, Azure Storage Explorer can generate a SAS token for you to access the location where the templates were uploaded.</p></td></tr></tbody></table><p><span class="scwindow"> </span></p><table class="table"><tbody><tr><th colspan="2" style="width: 37%;"><p><span class="scwindow">XM Scaled</span></p></th></tr><tr><td><p><span class="scwindow">Parameter</span></p></td><td><p><span class="scwindow">Description</span></p></td></tr><tr><td><p><code class="sccode">location</code></p></td><td><p>The geographical region of the current deployment.</p></td></tr><tr><td><p><code class="sccode">sqlServerLogin</code></p></td><td><p>The name of the administrator account being created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sqlServerPassword</code></p></td><td><p>The password for the administrator account for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sitecoreAdminPassword</code></p></td><td><p>The new password for the Sitecore admin account.</p></td></tr><tr><td><p><code class="sccode">cmMsDeployPackageUrl</code></p></td><td><p>The HTTP(s) URL to a Sitecore XM Content Management deployment package (WDP).</p></td></tr><tr><td><p><code class="sccode">cdMsDeployPackageUrl</code></p></td><td><p>The HTTP(s) URL for a Sitecore XM Content Delivery WDP.</p></td></tr><tr><td><p><code class="sccode">authCertificateBlob</code></p></td><td><p>A Base64-encoded blob of <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/16/16/55/The_client_certificate_for_Sitecore_deployments.aspx">the authentication certificate in PKCS #12 format</a> (.pfx). See the deployment command example in the next section for encoding instructions.</p></td></tr><tr><td><p><code class="sccode">authCertificatePassword</code></p></td><td><p>The password for the authentication certificate.</p></td></tr><tr><td><p><code class="sccode">templateLinkAccessToken</code></p></td><td><p>The access token for the nested infrastructure and application templates. For example, Azure Storage Explorer can generate a SAS token for you to access the location where the templates were uploaded.</p></td></tr></tbody></table><p><table class="table"><tbody><tr><th colspan="2" style="width: 37%;"><p><span class="scwindow">xDB Single</span></p></th></tr><tr><td><p><span class="scwindow">Parameter</span></p></td><td><p><span class="scwindow">Description</span></p></td></tr><tr><td><p><code class="sccode">location</code></p></td><td><p>The geographical region of the current deployment.</p></td></tr><tr><td><p><code class="sccode">sqlServerLogin</code></p></td><td><p>The name of the administrator account being created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sqlServerPassword</code></p></td><td><p>The password for the administrator account being created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sitecoreAdminPassword</code></p></td><td><p>The new password for the Sitecore admin account.</p></td></tr><tr><td><p><code class="sccode">singleMsDeployPackageUrl</code></p></td><td><p>The HTTP(s) URL for a Sitecore xDB Single Web Deployment package (WDP).</p></td></tr><tr><td><p><code class="sccode">xcSingleMsDeployPackageUrl</code></p></td><td><p>The HTTP(s) URL for an XConnect Single (WDP).</p></td></tr><tr><td><p><code class="sccode">authCertificateBlob</code></p></td><td><p>A Base64-encoded blob of <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/16/16/55/The_client_certificate_for_Sitecore_deployments.aspx">the authentication certificate in PKCS #12 format</a> (.pfx). See the deployment command example in the next section for encoding instructions.</p></td></tr><tr><td><p><code class="sccode">authCertificatePassword</code></p></td><td><p>The password for the authentication certificate.</p></td></tr><tr><td><p><code class="sccode">templateLinkAccessToken</code></p></td><td><p>The access token for the nested infrastructure and application templates. For example, Azure Storage Explorer can generate a SAS token for you to access the location where the templates were uploaded.</p></td></tr></tbody></table><p><table class="table"><tbody><tr><th colspan="2" style="width: 37%;"><p><span class="scwindow">xDB Scaled</span></p></th></tr><tr><td><p><span class="scwindow">Parameter </span></p></td><td><p><span class="scwindow">Description</span></p></td></tr><tr><td><p><code class="sccode">location</code></p></td><td><p>The geographical region of the current deployment.</p></td></tr><tr><td><p><code class="sccode">sqlServerLogin</code></p></td><td><p>The name of the administrator account being created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sqlServerPassword</code></p></td><td><p>The password for the administrator account being created for Azure SQL server.</p></td></tr><tr><td><p><code class="sccode">sitecoreAdminPassword</code></p></td><td><p>The new password for the Sitecore admin account.</p></td></tr><tr><td><p><code class="sccode">repAuthenticationApiKey</code></p></td><td><p>A unique value, for example, a GUID, which is used to authenticate when communicating from Content Management role to the Reporting Web App. The minimum length required is 32 characters.</p></td></tr><tr><td><p><code class="sccode">prcMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Sitecore xDB Processing WDP.</p></td></tr><tr><td><p><code class="sccode">repMsDeployPackageUrl</code></p></td><td><p>The HTTP(s) URL for a Sitecore xDB Reporting WDP.</p></td></tr><tr><td><p><code class="sccode">xcRefDataMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for an XConnect Reference Data service WDP. </p></td></tr><tr><td><p><code class="sccode">xcCollectMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for an XConnect Collection service WDP. </p></td></tr><tr><td><p><code class="sccode">xcSearchMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for an XConnect Collection Search service WDP.</p></td></tr><tr><td><p><code class="sccode">maOpsMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Marketing Automation service WDP.</p></td></tr><tr><td><p><code class="sccode">maRepMsDeployPackageUrl </code></p></td><td><p>The HTTP(s) URL for a Marketing Automation Reporting service WDP.</p></td></tr><tr><td><p><code class="sccode">authCertificateBlob</code></p></td><td><p>A Base64-encoded blob of <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/16/16/55/The_client_certificate_for_Sitecore_deployments.aspx">the authentication certificate in PKCS #12 format</a> (.pfx). See the deployment command example in the next section for encoding instructions.</p></td></tr><tr><td><p><code class="sccode">authCertificatePassword</code></p></td><td><p>The password for the authentication certificate.</p></td></tr><tr><td><p><code class="sccode">templateLinkAccessToken</code></p></td><td><p>The access token for the nested infrastructure and application templates. For example, Azure Storage Explorer can generate a SAS token for you to access the location where the templates were uploaded.</p></td></tr></tbody></table><ol><li>Optionally, you can also append additional parameters to the <code class="sccode">azuredeploy.parameters.json</code> file by extending it with any parameter declared in <code class="sccode">azuredeploy.json</code>. The <code class="sccode">README.md</code> file in the root folder for each Sitecore environment configuration gives additional information.</li><li>You can override the default “<code class="sccode">Extra Small</code>” value of the <code class="sccode">sitecoreSKU</code> parameter for any scaled topology (XP, XM, xDB), and change it to &quot;<code class="sccode">Small</code>&quot;, &quot;<code class="sccode">Medium</code>&quot;, &quot;<code class="sccode">Large</code>&quot; and &quot;<code class="sccode">Extra Large</code>&quot;. For example, to change it to <code class="sccode">Medium</code>, use the following:<pre class="codesnippet"><code class="prettyprint"> &quot;sitecoreSKU&quot;: {</code></pre><pre class="codesnippet"><code class="prettyprint"> &quot;value&quot;: &quot;Medium&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> }</code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Invoke_the_deployment" id="_Deploy_with_Solr" id="_Hlk517080690"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark>Deploy with Solr as a search provider</h2><div class="collapsable"><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">This section only applies to Sitecore version 9.0.2 and later</p></section><p>Azure Search is the default provider for Azure deployments. From version 9.0.2 and later you can choose to use Solr as an alternative to Azure Search. The Solr server is not provisioned by an ARM template, therefore you must deploy and manage it separately. To use the Solr server when the Azure Search resource is not being provisioned, pass the parameters in the following tables:</p><p><span class="scwindow">XM Scaled and XM Single</span></p><table class="table"><tbody><tr><th style="width: 37%;"><p><span class="scwindow">Parameter</span></p></th><th style="width: 62%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p>The connection string to the existing Solr server.</p></td></tr><tr><td><p><code class="sccode">searchProvider</code></p></td><td><p>The name of the search provider. The supported values for this parameter include:</p><p><code class="sccode">Azure</code> - This is the default value.</p><p><code class="sccode">Solr</code> - The value for the standalone Solr server.</p><p><code class="sccode">Solr.SolrCloud</code> - The value for Solr Cloud.</p></td></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p id="_GoBack">The connection string to your<bookmark></bookmark> existing Solr server.</p></td></tr></tbody></table><p><span class="scwindow">XP Scaled</span></p><table class="table"><tbody><tr><th style="width: 37%;"><p><span class="scwindow">Parameter</span></p></th><th style="width: 62%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p>The connection string to the existing Solr server that passes on to the Sitecore Platform roles.</p></td></tr><tr><td><p><code class="sccode">xcSolrConnectionString</code></p></td><td><p>The connection string to the existing Solr server that passes on to XConnect roles. If you do not specify the parameter, the default value is: <code class="sccode">solrConnectionString</code>.</p></td></tr><tr><td><p><code class="sccode">xcSearchMsDeployPackageUrl</code></p></td><td><p>A blob storage URL to the Solr XConnect Search web deploy package.</p></td></tr><tr><td><p><code class="sccode">searchProvider</code></p></td><td><p>The name of the search provider. The supported values for this parameter include:</p><p><code class="sccode">Azure</code> - This is the default value.</p><p><code class="sccode">Solr</code> - The value for the standalone Solr server.</p><p><code class="sccode">Solr.SolrCloud</code> - The value for Solr Cloud.</p></td></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p>The connection string to your existing Solr server.</p></td></tr><tr><td><p><code class="sccode">?collection wdp?</code></p></td><td><p>The URL to the xConnect collection role for the Web Deploy Package (WDP) with Solr support. You can download WDPs from dev.sitecore.net</p></td></tr></tbody></table><p><span class="scwindow">XP Single</span></p><table class="table"><tbody><tr><th style="width: 37%;"><p><span class="scwindow">Parameter</span></p></th><th style="width: 62%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p>The connection string to the existing Solr server that passes on to the Sitecore Platform roles.</p></td></tr><tr><td><p><code class="sccode">xcsolrConnectionString</code></p></td><td><p>The connection string to the existing Solr server that passes on to XConnect roles. If you do not specify the parameter, the default value is: <code class="sccode">solrConnectionString</code>.</p></td></tr><tr><td><p><code class="sccode">xcSingleMsDeployPackageUrl</code></p></td><td><p>A blob storage URL to the Solr XConnect Single web deploy package.</p></td></tr><tr><td><p><code class="sccode">searchProvider</code></p></td><td><p>The name of the search provider. The supported values for this parameter include:</p><p><code class="sccode">Azure</code> - This is the default value.</p><p><code class="sccode">Solr</code> - The value for the standalone Solr server.</p><p><code class="sccode">Solr.SolrCloud</code> - The value for Solr Cloud.</p></td></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p>The connection string to your existing Solr server.</p></td></tr><tr><td><p><code class="sccode">?collection wdp?</code></p></td><td><p>The URL to the xConnect collection role for the Web Deploy Package (WDP) with Solr support. You can download WDPs from dev.sitecore.net</p></td></tr></tbody></table><p><span class="scwindow">xDB Scaled</span></p><table class="table"><tbody><tr><th style="width: 37%;"><p><span class="scwindow">Parameter</span></p></th><th style="width: 62%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">xcsolrConnectionString</code></p></td><td><p>The connection string to the existing Solr server that passes on to XConnect roles. If you do not specify the parameter, the default value is: <code class="sccode">solrConnectionString</code>. </p></td></tr><tr><td><p><code class="sccode">xcSearchMsDeployPackageUrl</code></p></td><td><p>A blob storage URL to the Solr XConnect Search web deploy package. This applies to the xDB Scaled and XP Scaled topologies.</p></td></tr><tr><td><p><code class="sccode">searchProvider</code></p></td><td><p>The name of the search provider. The supported values for this parameter include:</p><p><code class="sccode">Azure</code> - This is the default value.</p><p><code class="sccode">Solr</code> - The value for the standalone Solr server.</p><p><code class="sccode">Solr.SolrCloud</code> - The value for Solr Cloud.</p></td></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p>The connection string to your existing Solr server.</p></td></tr><tr><td><p><code class="sccode">?collection wdp?</code></p></td><td><p>The URL to the xConnect collection role for the Web Deploy Package (WDP) with Solr support. You can download WDPs from dev.sitecore.net</p></td></tr></tbody></table><p><span class="scwindow">xDB Single</span></p><table class="table"><tbody><tr><th style="width: 37%;"><p><span class="scwindow">Parameter</span></p></th><th style="width: 62%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">xcsolrConnectionString</code></p></td><td><p>The connection string to the existing Solr server that passes on to XConnect roles.</p></td></tr><tr><td><p><code class="sccode">xcSearchMsDeployPackageUrl</code></p></td><td><p>A blob storage URL to the Solr XConnect Single web deploy package for XP Scaled and xDB Scaled topologies.</p></td></tr><tr><td><p><code class="sccode">searchProvider</code></p></td><td><p>The name of the search provider. The supported values for this parameter include:</p><p><code class="sccode">Azure</code> - This is the default value.</p><p><code class="sccode">Solr</code> - The value for the standalone Solr server.</p><p><code class="sccode">Solr.SolrCloud</code> - The value for Solr Cloud.</p></td></tr><tr><td><p><code class="sccode">solrConnectionString</code></p></td><td><p>The connection string to your existing Solr server.</p></td></tr><tr><td><p><code class="sccode">?collection wdp?</code></p></td><td><p>The URL to the xConnect collection role for the Web Deploy Package (WDP) with Solr support. You can download WDPs from dev.sitecore.net</p></td></tr></tbody></table></div><h2 class="heading2" expand-collapse="">Invoke the deployment command and start provisioning</h2><div class="collapsable"><p>To invoke the PowerShell command and initiate provisioning:</p><ol><li>In PowerShell, in the <em class="scemphasis">Sitecore Azure Toolkit</em>folder, load the Sitecore Azure Toolkit module:&#160;<code class="sccode">Import-Module .\tools\Sitecore.Cloud.Cmdlets.psm1</code>.</li><li>Add the following Azure account to your PowerShell session:&#160;<code class="sccode">Add-AzureRMAccount</code>.</li><li>If you have access to multiple subscriptions, select the subscription that you want to deploy to:&#160;<code class="sccode">Set-AzureRMContext -SubscriptionName &quot;&lt;name of the subscription&gt;&quot;</code>.</li><li>Start provisioning by using the <code class="sccode">Start-SitecoreAzureDeployment</code> commandlet:<p><code class="sccode">Start-SitecoreAzureDeployment [-location] &lt;String&gt; [-Name] &lt;String&gt; [-ArmTemplateUrl] &lt;String&gt; [-ArmParametersPath] &lt;String&gt; [-LicenseXmlPath] &lt;String&gt; [-SetKeyValue] &lt;Hashtable&gt; </code></p><p>The <code class="sccode">Start-SitecoreAzureDeployment</code> commandlet accepts the following parameters:</p><table class="table"><tbody><tr><th style="width: 27%;"><p><span class="scwindow">Parameter</span></p></th><th style="width: 72%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p><code class="sccode">Location</code></p></td><td><p>The name of the Azure datacenter where you want the resources deployed. The <a href="https://kb.sitecore.net/articles/617478">Azure datacenter compatibility table</a> lists the Microsoft Azure datacenters that the Sitecore Experience Platform supports deployment to.</p></td></tr><tr><td><p><code class="sccode">Name</code></p></td><td><p>The name of the resource group for the new environment. It can refer to a new or an existing resource group, and is usually the same as the deployment ID.</p></td></tr><tr><td><p><code class="sccode">ArmTemplateUrl</code></p></td><td><p>The URL of the ARM template file for the environment configuration that you want to deploy. It points to the HTTP(S) location that is hosting the templates.</p><p class="scnoteheader">Note</p><p class="scnotebody">If you are pointing to GitHub, use ‘raw’ links, for example:</p><p class="scnotebody"><a href="https://raw.githubusercontent.com/Sitecore/Sitecore-Azure-Quickstart-Templates/master/Sitecore 9.0.0/xp/azuredeploy.json">https://raw.githubusercontent.com/Sitecore/Sitecore-Azure-Quickstart-Templates/master/Sitecore%209.0.0/xp/azuredeploy.json</a><em class="scemphasis"> </em></p></td></tr><tr><td><p><code class="sccode">ArmParametersPath</code></p></td><td><p>The path to the populated <code class="sccode">azuredeploy.parameters.json</code> file for the template that you selected.</p></td></tr><tr><td><p><code class="sccode">LicenseXmlPath</code></p></td><td><p>The path to the Sitecore license file that you want to deploy to the environment.</p></td></tr><tr><td><p><code class="sccode">SetKeyValue</code></p></td><td><p>A dictionary of environment-specific parameters that are in addition to the parameters in the <code class="sccode">azuredeploy.parameters.json</code> file. You can use this to pass the client authentication certificate while encoding it to Base64, as shown in the following full script example. This ensures it meets the parameters requirement.</p></td></tr></tbody></table><p>Full script example:</p><pre class="codesnippet"><code class="prettyprint">$SCSDK=&quot;Path to Sitecore Azure Toolkit&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">$SCTemplates=&quot;https://raw.githubusercontent.com/Sitecore/Sitecore-Azure-Quickstart-Templates/master/Sitecore%209.0/xp/&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">$DeploymentId = &quot;Deployment ID&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">$LicenseFile = &quot;Path to the Sitecore license.xml file&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">$SubscriptionId = &quot;Microsoft Azure SubscriptionId&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">$Location=&quot;Target location of deployment&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">$ParamFile=&quot;Path to filled-in azuredeploy.parameters.json file&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">$Parameters = @{</code></pre><pre class="codesnippet"><code class="prettyprint">&#160; &#160; &#160;#set the size of all recommended instance sizes&#160; &#160;</code></pre><pre class="codesnippet"><code class="prettyprint">&#160; &#160; &#160;&quot;sitecoreSKU&quot;=&quot;Medium&quot;;</code></pre><pre class="codesnippet"><code class="prettyprint">&#160;&#160;&#160;&#160; #by default this installs azuresearch</code></pre><pre class="codesnippet"><code class="prettyprint">&#160;&#160;&#160; &#160;#if you uncomment the following it will use an existing solr connectionstring that</code></pre><pre class="codesnippet"><code class="prettyprint">&#160;&#160;&#160;&#160; # you have created instead of using AzureSearch</code></pre><pre class="codesnippet"><code class="prettyprint">&#160; &#160; &#160;#&quot;solrConnectionString&quot;= &quot;https://myinstancesomewhere/solr&quot;;</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre><pre class="codesnippet"><code class="prettyprint">Import-Module $SCSDK\tools\Sitecore.Cloud.Cmdlets.psm1</code></pre><pre class="codesnippet"><code class="prettyprint">Add-AzureRMAccount</code></pre><pre class="codesnippet"><code class="prettyprint">Set-AzureRMContext -SubscriptionId $SubscriptionId</code></pre><pre class="codesnippet"><code class="prettyprint">Start-SitecoreAzureDeployment -Name $DeploymentId -Location $Location -ArmTemplateUrl &quot;$SCTemplates/azuredeploy.json&quot; -ArmParametersPath $ParamFile -LicenseXmlPath $LicenseFile -SetKeyValue $Parameters</code></pre><pre class="codesnippet"><code class="prettyprint"></code></pre></li><li>Run the script and wait while the environment fully provisions. </li></ol></div><h2 class="heading2" expand-collapse="" id="_Configure_post_deployment"><bookmark></bookmark>Configure post deployment</h2><div class="collapsable"><p>When you deploy a new Sitecore environment to the Microsoft Azure App service, HTTP 1.1 is enabled by default. However, <a href="https://http2.github.io/faq/">many browsers also support HTTP 2.0</a>. To change your HTTP setting, navigate to: <span class="scwindow">Microsoft Azure</span>, <span class="scwindow">App Services</span>, <span class="scwindow">Settings</span>, <span class="scwindow">Application settings</span>, <span class="scwindow">HTTP Version</span>, you can select HTTP Version 1.1 or <a href="https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/http2-on-iis">2.0</a>.</p><p><img src="/~/media/2893174901B94FB0948B5DF709CB09C7.ashx?la=en" height="396" width="624" alt="A screenshot of a cell phone Description generated with very high confidence" title="" class="documentimage" doc-fancy-image=""></p></div>Tue, 28 Aug 2018 11:56:23 +0200{46B7026C-D10D-4C0D-B66A-A6A156B36275}https://doc.sitecore.net/en/Products/Sitecore_Commerce/90/Setting_up_Commerce_Connect/Setting_up_Commerce_Connect/Use_a_custom_product_repository_name_or_location.aspxUse a custom product repository name or location<p>When you set up Sitecore to integrate with an external commerce system that uses product synchronization, you must create a <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2016/12/20/12/59/Understanding_the_product_repository.aspx">product repository</a>. The default name and location for the product repository is <em class="scemphasis">/sitecore/content/Product Repository</em>. If you want to use a custom product repository name or location, you must adjust the configuration.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">It is best practice to store the product repository in its own folder under <em class="scemphasis">/sitecore/content</em> to avoid getting it mixed up with the websites that are typically stored under <em class="scemphasis">/sitecore/content/</em>. </p></section><p>To use a custom product repository name or location:</p><ol><li>In the <code class="sccode">/App_Config/Include/ Sitecore.Commerce.Products.config</code> file, edit the following attribute:<p><code class="sccode">&lt;paths productRepository=&quot;/sitecore/content/Product Repository&quot;&gt;</code></p></li><li>To change the configuration of the two index files for the Solr indexing engine, update the lines marked in bold in the following samples:<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">If you use the Azure indexing engine, then you must modify the <code class="sccode">Sitecore.Commerce.Products.Azure.Index.Master.config </code>and<code class="sccode"> Sitecore.Commerce.Products.Azure.Index.Web.config </code>files instead.</p></section><ul class="scbullet2ndlevel"><li>In the <code class="sccode">Sitecore.Commerce.Products.Solr.Index.Master.config</code> file, update the root of the ProductItemCrawler:</li></ul><pre class="codesnippet"><code class="prettyprint">&lt;locations hint=&quot;list:AddCrawler&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;crawler type=&quot;Sitecore.Commerce.Search.ProductItemCrawler, </code></pre><pre class="codesnippet"><code class="prettyprint"> Sitecore.Commerce.Connect.Core&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;Database&gt;master&lt;/Database&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;Root&gt;/sitecore/content/Product Repository&lt;/Root&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/crawler&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/locations&gt;</code></pre><ul class="scbullet2ndlevel"><li>In the <code class="sccode">Sitecore.Commerce.Products.Solr.Index.Web.config</code> file, update the root of the ProductItemCrawler:</li></ul><pre class="codesnippet"><code class="prettyprint">&lt;locations hint=&quot;list:AddCrawler&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;crawler type=&quot;Sitecore.Commerce.Search.ProductItemCrawler, Sitecore.Commerce.Connect.Core&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;Database&gt;web&lt;/Database&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;Root&gt;/sitecore/content/Product Repository&lt;/Root&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/crawler&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/locations&gt;</code></pre></li><li>If you change the ID of the index for the master database from the default <code class="sccode">commerce_products_master_index</code>, you must also replace the ID in the <code class="sccode">ProductSynchronization.ProductIndexes</code> setting in the <code class="sccode">Sitecore.Commerce.Products.Config</code> file. <p>The setting contains a list of index IDs that will be paused, resumed, and rebuilt during product synchronization:</p><pre class="codesnippet"><code class="prettyprint">&lt;!-- PRODUCT INDEXES.</code></pre><pre class="codesnippet"><code class="prettyprint"> The indexes used to store synchronized products.</code></pre><pre class="codesnippet"><code class="prettyprint"> Can be stopped, resumed and rebuilt automatically during product synchronization.</code></pre><pre class="codesnippet"><code class="prettyprint">--&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;setting name=&quot;ProductSynchronization.ProductIndexes&quot; value=&quot;sitecore_master_index, commerce_products_master_index&quot; /&gt;</code></pre></li></ol>Tue, 28 Aug 2018 11:20:56 +0200{399F1C93-6534-4B61-AF04-EC3C19046328}https://doc.sitecore.net/en/Products/Sitecore_Commerce/90/Commerce_Connect_Components/Abstract_service_layers/Understanding_product_synchronization_performance.aspxUnderstanding product synchronization performance<p>Commerce Connect has its own <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2016/12/20/16/03/Product_catalog_data.aspx">product data model</a> and <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2016/12/20/16/03/Understanding_the_Product_Synchronization_service_layer.aspx">Product Synchronization service layer</a> for exchanging product data with one or more external commerce systems. Product synchronization is potentially very time consuming, but you can configure some elements of your system to reduce the time needed to synchronize products between the external commerce system and Sitecore. </p><p>This topic describes the following elements that can impact product synchronization performance:</p><ul><li><a href="#_Item_buckets" go-to-section="">Item buckets</a></li><li><a href="#_Multithreading" go-to-section="">Multithreading</a></li><li><a href="#_Delayed_item_events" go-to-section="">Delayed item events and indexing</a></li><li><a href="#_Limited_calls_between" go-to-section="">Limited calls between systems</a></li><li><a href="#_External_resources" go-to-section="">External resources</a></li><li><a href="#_Product_IDs" go-to-section="">Product IDs</a></li></ul><h2 class="heading2" expand-collapse="" id="_Item_buckets"><bookmark></bookmark>Item buckets</h2><div class="collapsable"><p>When a new item is created in an item bucket, it is automatically placed in the root folder. In order to move it into its correct location within the bucket, the bucket needs to be synchronized. </p><h3>Item bucket synchronization versus product synchronization </h3><p><a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2014/12/10/11/54/Item_buckets.aspx">Item buckets</a> use synchronization that works on items locally within the bounds of the bucket. Product synchronization occurs across boundaries between Sitecore and external systems, and it does not work on items, but on a product domain model.</p><h3>Item bucket synchronization strategies</h3><p>The product synchronization process offers two different strategies for when the bucket is synchronized. The strategy that is best for your situation depends on the size of the catalog and especially the number of products being added during synchronizations. The number of products being added often depends on whether the catalog contains seasonal products and on the type of products being sold. The two strategies are:</p><ul><li><em class="scemphasis">Instant bucket synchronization </em>– this is the default strategy. Within a bucket, it is possible to synchronize a single item, possibly containing subitems, by calling the <code class="sccode">BucketManager.MoveItemIntoBucket(entityItem, root)</code> method. When a single product is synchronized, this strategy is always used. With bulk product synchronization, the process breaks up the list of products and handles the products individually, although possibly in parallel. Depending on the number of items being added to the bucket, this strategy can become unfeasible.</li><li><em class="scemphasis">Delayed bucket synchronization –</em>. with this strategy, a temporary bucket is used for new product items and bucket synchronization is delayed until all products have been processed and new product items have been created in the root of the bucket. After synchronization, the bucket content is moved to the main bucket. This eliminates the time spent during bucket synchronization on accessing all existing bucket items in order to check if the new product items already exist. The time reduction can be significant, especially with big catalogs. You can configure delayed bucket synchronization and the use of a temporary bucket in pipelines; see the configuration file: <code class="sccode">/App_Config/Include/Sitecore.Commerce.Products.Delayed- SyncProductRepository.config.disabled.</code></li></ul></div><h2 class="heading2" expand-collapse="" id="_Multithreading"><bookmark></bookmark>Multithreading</h2><div class="collapsable"><p>Multithreading is built into the product synchronization. By default, a single thread is spawned from the processors that synchronize products, manufacturers, types, resources, divisions, and specifications. The threads are spawned for each repository being synchronized. The number of threads can be configured in the <code class="sccode">Sitecore.Commerce.Products.config</code> file by adding the <code class="sccode">ProductSynchronization. NumberOfThreads</code> setting and specifying the number of concurrent threads.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Due to issues in Sitecore CMS, using more than one thread can result in a SQL server deadlock. This is why the default configuration specifies 1 thread.</p></section></div><h2 class="heading2" expand-collapse="" id="_Delayed_item_events"><bookmark></bookmark>Delayed item events and indexing</h2><div class="collapsable"><p>Commerce Connect disables the triggering of item events and indexing during synchronization to avoid wasting resources on firing events or maintaining indexes before synchronization is done. Indexing is turned on after synchronization has finished. The following context and disablers are instantiated during synchronization: </p><ul><li><code class="sccode">Sitecore.SecurityModel.SecurityDisabler()</code></li><li><code class="sccode">Sitecore.Data.Proxies.EventDisabler()</code></li></ul></div><h2 class="heading2" expand-collapse="" id="_Limited_calls_between"><bookmark></bookmark>Limited calls between systems</h2><div class="collapsable"><p>All product entities in Commerce Connect are synchronized using the Commerce Connect pipeline, which reads the data from the external system in the individual pipelines.</p><p>Depending on the technical characteristics of the server you are using, you can choose to:</p><ul><li>Read product data once and process it in multiple pipelines, which reduces CPU usage by decreasing the number of calls between Sitecore and the external systems. This option, however, increases memory usage.</li><li>Synchronize a single product, which can result in many calls between systems. Each call takes time and impacts CPU resources. This option, however, reduces memory usage.</li></ul></div><h2 class="heading2" expand-collapse="" id="_External_resources"><bookmark></bookmark>External resources</h2><div class="collapsable"><p>Resources can be located externally. Resources in Sitecore are stored as media items in the Media Library. Media items are binary blobs and can be large and time-consuming to import into Sitecore. Therefore, resources can either be imported into the Sitecore Media Library or simply referred to externally. If resources are imported, they are stored in a bucketed <em class="scemphasis">Products</em> folder under the Media Library. If not imported, they can be referred to by a URI stored on the resource reference item. </p></div><h2 class="heading2" expand-collapse="" id="_Product_IDs"><bookmark></bookmark>Product IDs</h2><div class="collapsable"><p>The external product repository is always regarded as the main repository, which by default owns the products. This makes the ID of the products and artifacts in the external system the primary key. In Sitecore, the IDs of the corresponding items for products and artifacts are generated by Commerce Connect instead of relying on the default Sitecore implementation that automatically generates a new GUID. The default implementation is based on the MD5 hash algorithm and has the following format: </p><p class="scindent"><code class="sccode">Item.ID = MD5.ComputeHash(Prefix + ExternalID);</code></p><p class="scindent">By using a hash algorithm, a direct mapping between the IDs coming from the external system and the item IDs in Sitecore is generated. This has the following benefits:</p><ul><li>There is no need for mapping tables, which take up space and are time-consuming to maintain and query.</li><li>Getting the item IDs is very fast.</li><li>There is no need to search for an item in Sitecore – by using the external ID as input to the hashing algorithm, the Sitecore item ID is calculated instantaneously.</li></ul></div>Mon, 27 Aug 2018 14:45:41 +0200{BB97B768-F880-4AD0-A68B-A9B0453987CA}https://doc.sitecore.net/en/Products/Sitecore_Commerce/90/Setting_up_Commerce_Connect/Setting_up_Commerce_Connect/Set_up_Commerce_Connect.aspxSet up Commerce Connect<p>After you install the Sitecore Commerce Connect zip package using the Sitecore Installation Wizard, you must complete the set up in Sitecore. You can <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2018/07/30/16/04/Set_up_the_Storefront_Abandoned_Cart_marketing_automation_campaign.aspx">set up the Storefront Abandoned Cart marketing automation campaign</a> that comes with Commerce Connect. If your external commerce system uses the product synchronization feature to store product data in Sitecore, you must also create a product repository to integrate the external commerce system with Sitecore.</p><h2 class="heading2" expand-collapse="" id="_Configure_Commerce_Connect" id="_Create_a_product"><bookmark></bookmark><bookmark></bookmark>Create a product repository for product synchronization</h2><div class="collapsable"><p>After you have installed a connector to integrate Sitecore with an external commerce system that uses product synchronization, you must create a product repository. If the external commerce system does not use the product synchronization approach, skip this procedure.</p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">Create only one repository that is shared across all your webshops. Use <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2016/12/20/12/59/Understanding_the_product_repository.aspx">Divisions</a> to indicate which webshop each product belongs to. </p></section><ol><li>In the Content Editor, in the <em>/</em><em>sitecore</em><em>/Content</em> folder, create a product repository item based on the <em class="scemphasis">Product Repository</em> branch template in <em>Templates/Branches/</em><em>CommerceConnect</em><em>/Products</em>. The subfolders needed for product synchronization are automatically created. <p><img src="/~/media/4E4DA6250F294D2182548D151C643925.ashx?la=en" height="254" width="614" alt="ContentEditor_ProductRepository_Products" title="Product Repository and sub folders" class="documentimage" doc-fancy-image=""></p><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">If necessary, instead of placing the product repository in the <em class="scemphasis">Content</em> folder and naming it Product Repository, you can <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2016/12/20/12/54/Use_a_custom_product_repository_name_or_location.aspx">specify a custom product repository name or change the location of the product repository</a>.</p></section></li><li>Copy the item ID from the <em>Manufacturer</em><em>s</em> item in the product repository (<em>/</em><em>sitecore</em><em>/content/Product Repository/Manufacturers</em>) and save it in a text editor (for example, Notepad). <p>Repeat this step for the <em class="scemphasis">ProductType</em> item (<em>/</em><em>sitecore</em><em>/content/Product Repository/</em><em>ProductType</em>).</p></li><li>In the <em>Product</em> template (<em>/</em><em>sitecore</em><em>/templates/</em><em>CommerceConnect</em><em>/Products/Product</em>), in the <span class="scwindow">Source</span> field for <em>Manufacturer</em>, enter <em>StartSearchLocation</em><em>=&lt;</em><em>itemid</em><em>&gt;</em> where <em>&lt;</em><em>itemid</em><em>&gt;</em> is the <em>Manufacturer</em> item ID you copied in the previous step. <p><img src="/~/media/7B566066462845389DE3C508DD60D532.ashx?la=en" height="241" width="595" alt="ContentEditor_Templates_CommerceConnect_Products_Product" title="Commerce Connect Product template" class="documentimage" doc-fancy-image=""></p><p>Repeat this step for the <em>ProductType</em> item.</p></li><li>Save the template.</li><li>In the Content Editor, select the <em>Product Repository</em> item in the <em>/</em><em>sitecore</em><em>/</em><em>C</em><em>ontent</em> folder and click <span class="scwindow">Synchronize all products</span>. The product and master indexes are rebuilt during synchronization.<p><img src="/~/media/E22A0027F6B54C2088F8B5BE6242C26E.ashx?la=en" height="327" width="611" alt="ContentEditor_ProductRepository" title="Synchronize Product Repository" class="documentimage" doc-fancy-image=""></p></li><li>On the <span class="scwindow">Publish</span> tab, click the <span class="scwindow">Publish </span>drop-down arrow and click <span class="scwindow">Publish Site</span>. <p><img src="/~/media/0EAFB176632D46F987EB54EB849D0F13.ashx?la=en" height="330" width="612" alt="PublishSite_RepublishAll" title="The Publish Site window" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Publish Site</span> dialog box, select <span class="scwindow">Republish</span> and click <span class="scwindow">Publish</span>.</li></ol></div>Mon, 27 Aug 2018 13:48:09 +0200{EFAD9E70-4551-4634-959C-4110AE387AAA}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/90/Developing/Developing_with_Sitecore/Federated_authentication/Configure_federated_authentication.aspxConfigure federated authentication<p>You <a href="https://doc.sitecore.net:443/en/Products/Sitecore_Experience_Platform/90/Developing/Developing_with_Sitecore/Federated_authentication/Using_federated_authentication_with_Sitecore.aspx">use federated authentication</a> to let users log in to Sitecore though an external provider. Federated authentication requires that you configure Sitecore a specific way, depending on which external provider you use. Configuring federated authentication involves a number of tasks:</p><ul><li><a href="#_Configure_an_identity" go-to-section="">Configure an identity provider</a></li><li><a href="#_Sitecore_user_name" go-to-section="">Sitecore user name generation</a></li><li><a href="#_Map_claims_and" go-to-section="">Map claims and roles</a></li><li><a href="#_Map_properties" go-to-section="">Map properties</a></li><li><a href="#_Connect_user_accounts" go-to-section="">Connect a user account</a></li><li><a href="#_Configure_virtual_and" go-to-section="">Configure virtual and persistent users</a></li><li><a href="#_Generate_sign-in_links" go-to-section="">Generate sign-in links</a></li></ul><h2 class="heading2" expand-collapse="" id="_Enable_and_configure" id="add-provider" id="add-map-entry" id="add-code" id="integration-with-owin-pipeline" id="_Integrate_with_the" id="_Configure_an_identity"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark>Configure an identity provider</h2><div class="collapsable"><p>You must configure the identity provider you use. How you do this depends on the provider you use. The primary use case is to use Azure Active Directory (Azure AD). <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-openid-connect-code">Authorize access to web applications using OpenID Connect and Azure Active Directory</a> describes how Azure AD works.</p><p>To configure an identity provider: </p><ol><li>Patch the <code class="sccode">configuration/sitecore/federatedAuthentication/identityProviders</code> node by creating a new node with the name <code class="sccode">identityProvider</code>. </li><li>Enter values for the <code class="sccode">id</code> and <code class="sccode">type</code> attributes. The <code class="sccode">type</code> must implement the abstract class <code class="sccode">Sitecore.Owin.Authentication.Configuration.IdentityProvider</code>. Sitecore has a default implementation –<code class="sccode">Sitecore.Owin.Authentication.Configuration.DefaultIdentityProvider</code>.</li><li>Under the node you created, enter values for the <code class="sccode">param</code>, <code class="sccode">caption</code>, <code class="sccode">domain</code>, and <code class="sccode">transformations</code> child nodes. </li><li>Under the <code class="sccode">configuration/sitecore/federatedAuthentication/identityProvidersPerSites</code> node, create a new node with name <code class="sccode">mapEntry</code>. </li><li>Enter values for the <code class="sccode">name</code> and <code class="sccode">type</code> attributes. The value of the <code class="sccode">name</code> attribute must be unique for each entry. The <code class="sccode">type</code> must be <code class="sccode">Sitecore.Owin.Authentication.Collections.IdentityProvidersPerSitesMapEntry</code>,<code class="sccode"> Sitecore.Owin.Authentication</code>, or inherit from this.</li><li>Under the node you created, enter values for the <code class="sccode">sites</code> (the list of sites where the provider(s) will work), <code class="sccode">identityProviders</code> (the list of providers), and <code class="sccode">externalUserBuilder</code> child nodes.</li></ol><p>The <code class="sccode">App_config\Include\Examples\Sitecore.Owin.Authentication.Enabler.config.example</code> file does two things:</p><ul><li>It patches the <code class="sccode">sitecore/services</code> configuration node by configuring a dependency injection to replace implementations of the <code class="sccode">Sitecore.Abstractions.BaseAuthenticationManager</code>, <code class="sccode">Sitecore.Abstractions.BaseTicketManager</code> and <code class="sccode">Sitecore.Abstractions.BasePreviewManager</code> classes with implementations that work with OWIN authentication.</li><li>It patches the <code class="sccode">FederatedAuthentication.Enabled</code> setting by setting it to <code class="sccode">true</code>.</li></ul><p>If you enable this config file by removing the <code class="sccode">example</code> extension, Sitecore applies these two patches. </p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Be aware of these potential problems if you enable this config file:</p><p class="scnotebody">DI patches are applied, but <code class="sccode">FederatedAuthentication.Enabled</code> is false. In this case, ASP.NET Identity is used, but an API for retrieving the external login links always returns nothing and external authentication endpoints will not work.</p><p class="scnotebody">DI patches are not applied, but <code class="sccode">FederatedAuthentication.Enabled</code> is set to true. In this case, the SitecoreConfigurationException error will be thrown at startup.</p></section><h3>Add code for the provider</h3><p>You must create a new processor for the <code class="sccode">owin.identityProviders</code> pipeline. </p><p>To create a new processor:</p><ol><li>Inherit the <code class="sccode">Sitecore.Owin.Authentication.Pipelines.IdentityProviders.IdentityProvidersProcesso</code>r class. </li><li>Override the <code class="sccode">IdentityProviderName</code> property with the name you specified for the <code class="sccode">identityProvider </code>in the configuration.</li><li>Override the <code class="sccode">ProcessCore</code> method.</li></ol><h3>Integrate with the owin.identityProviders pipeline</h3><p>Next, you must integrate the code into the <code class="sccode">owin.identityProviders</code> pipeline. </p><p>For example, this sample uses Azure AD as the identity provider:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;configuration xmlns:patch=&quot;http://www.sitecore.net/xmlconfig/&quot; xmlns:role=&quot;http://www.sitecore.net/xmlconfig/role/&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;sitecore role:require=&quot;Standalone or ContentDelivery or ContentManagement&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;pipelines&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;owin.identityProviders&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;processor type=&quot;Sitecore.Owin.Authentication.YourIdentityProviders.AzureAd, YourAssembly&quot; resolve=&quot;true&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/owin.identityProviders&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/pipelines&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_Map_claims_and" id="_Sitecore_user_name" id="_GoBack"> &lt;/sitecore&gt;<bookmark></bookmark><bookmark></bookmark><bookmark></bookmark>Sitecore user name generation</h2><div class="collapsable"><p>User names must be unique across a Sitecore instance. You cannot use user names from different external providers as Sitecore user names because this does not guarantee that the user names are unique. </p><p>The <code class="sccode">DefaultExternalUserBuilder</code> class creates a sequence of user names for a given external user name. It then uses the first of these names that does not already exist in Sitecore. The values in the sequence depend only on the external username and the Sitecore domain configured for the given identity provider. </p></div><h2 class="heading2" expand-collapse="">Map claims and roles</h2><div class="collapsable"><p id="OLE_LINK1" id="OLE_LINK2"><bookmark></bookmark><bookmark></bookmark>A provider issues claims and gives each claim one or more values. Sitecore reads the claims issued for an authenticated user during the external authentication process. You can restrict access to some resources to identities (clients or users) that have only specific claims.</p><p>An external user is a user that has claims. Mapping claims to roles allows the Sitecore role-based authentication system to authenticate an external user.</p><p>Azure AD does not send the groups claims of the user back by default. To make it do so:</p><ol><li>Choose your app in the Azure portal, click on the <span class="scwindow">Manifest</span> button to edit the app manifest.</li><li>Change the <em class="scemphasis">groupMembershipClaims</em> parameter from <code class="sccode">null</code> to <code class="sccode">All</code>, and save changes.</li></ol><p>Note that Azure AD resets the <em class="scemphasis">groupMembershipClaims</em> parameter each time you make changes in the Reply URLs list in the app settings.</p><p>To map claims to roles:</p><ol><li>Add an <code class="sccode">&lt;identityProvider&gt;</code> node to <code class="sccode">configuration/sitecore/federatedAuthentication/identityProviders.</code></li><li>Add a <code class="sccode">&lt;transformations hint=&quot;list:AddTransformation&quot;&gt;</code> node to the <code class="sccode">&lt;identityProvider&gt;</code> node.</li><li> Add transformation nodes as child nodes. <p>For example, a transformation node looks like this:</p><pre class="codesnippet"><code class="prettyprint">&lt;transformation type=&quot;Sitecore.Owin.Authentication.Services.DefaultTransformation, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;sources hint=&quot;raw:AddSource&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;claim name=&quot;groups&quot; value=&quot;f04b11c5-323f-41e7-ab2b-d70cefb4e8d0&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;claim name=&quot;groups&quot; value=&quot;40901f21-29d0-47ae-abf5-184c5b318471&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/sources&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;targets hint=&quot;raw:AddTarget&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;claim name=&quot;http://schemas.microsoft.com/ws/2008/06/identity/claims/role&quot; value=&quot;Sitecore\Developer&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/targets&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;keepSource&gt;true&lt;/keepSource&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/transformation&gt;</code></pre><ul class="scbullet2ndlevel"><li>The <code class="sccode">type</code> must inherit from the <code class="sccode">Sitecore.Owin.Authentication.Services.Transformation</code> class.</li><li>In this example, the transformation adds a claim with the name <a href="http://schemas.microsoft.com/ws/2008/06/identity/claims/role">http://schemas.microsoft.com/ws/2008/06/identity/claims/role</a> and the value <code class="sccode">Sitecore\Developer</code> to those identities that have two claims with name <code class="sccode">group</code> and values <code class="sccode">f04b11c5-323f-41e7-ab2b-d70cefb4e8d0</code> and <code class="sccode">40901f21-29d0-47ae-abf5-184c5b318471</code> at the same time.</li><li><code class="sccode">keepSource==true</code> specifies that the original claims (two <code class="sccode">group</code> claims, in this example) will not be removed. The default is <code class="sccode">false</code>, and this means that if the transformation is successfully applied to the identity, then the original claims are replaced with the ones that are stated in the <code class="sccode">&lt;targets&gt;</code> nodes.</li></ul></li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you specify claims transformations in the <code class="sccode">sitecore/federatedAuthentication/sharedTransformations</code> node, these transformations are for all identity providers.</p></section><p></div><h2 class="heading2" expand-collapse="" id="_Map_properties"><bookmark></bookmark>Map properties</h2><div class="collapsable"><p>You must map identity claims to the Sitecore user properties that are stored in user profiles.</p><p>The <code class="sccode">propertyInitializer</code> node, under the <code class="sccode">sitecore\federatedAuthentication</code> node, stores a list of maps. Each map has inner source and target nodes. These nodes have two attributes: <code class="sccode">name</code> and <code class="sccode">value</code>. You map properties by setting the value of these properties.</p><p>If a claim matches the <code class="sccode">name</code> attribute of a source node (and <code class="sccode">value</code>, if specified), the <code class="sccode">value</code> attribute of a user property specified by the <code class="sccode">name</code> attribute of a target node is set to the value of the matched claim (if the <code class="sccode">value</code> attribute is not specified in the <code class="sccode">target</code> node).</p><p>For example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;propertyInitializer type=&quot;Sitecore.Owin.Authentication.Services.PropertyInitializer, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;maps hint=&quot;list&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;map name=&quot;status to UserStatus&quot; type=&quot;Sitecore.Owin.Authentication.Services.DefaultClaimToPropertyMapper, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;data hint=&quot;raw:AddData&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;source name=&quot;status&quot; value=&quot;first&quot;/&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;target name=&quot;UserStatus&quot; value=&quot;1&quot;/&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/data&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/map&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/maps&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/propertyInitializer&gt;</code></pre><p>In this example, the source <code class="sccode">name</code> and <code class="sccode">value</code> attributes are mapped to the <code class="sccode">UserStatus</code> target name and value <code class="sccode">1</code>.</p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">If you split up your configuration files, you must add the <code class="sccode">name</code> attribute to the map nodes to make sure that your nodes are unique across all the files. This is due to the way Sitecore config patching works.</p></section></div><h2 class="heading2" expand-collapse="" id="_Connect_users_accounts" id="_Connect_user_accounts"><bookmark></bookmark><bookmark></bookmark>Connect a user account</h2><div class="collapsable"><p>An account connection allows you to share profile data between multiple external accounts on one side and a persistent account on the other side. If a persisted user has roles assigned to them, federated authentication shares these with the external accounts.</p><p>Under the following circumstances, the connection to an account is automatic. Sitecore signs out the authenticated user, creates a new persistent or virtual account, and then authenticates it:</p><ul><li>The user is already authenticated on the site. </li><li>The user signs in to the same site with an external provider. </li><li>There is not already a connection between an external identity and an existing, persistent account. In ASP.NET Identity, <code class="sccode">signInManager.ExternalSignIn(...)</code> then returns <code class="sccode">SignInStatus.Failure</code>.</li></ul><p id="change-user-attach-behavior-when-loging-">To bind the external identity to an already authenticated account, you must override the <code class="sccode">Sitecore.Owin.Authentication.Services.UserAttachResolver</code> class using dependency injection. The following steps shows an example of doing this:<bookmark></bookmark></p><ol><li>Extend <bookmark></bookmark>the <code class="sccode">Sitecore.Owin.Authentication.Services.UserAttachResolver</code> class:<p><code class="sccode">using System;</code></p><p><code class="sccode">using System.Threading.Tasks;</code></p><p><code class="sccode">using Microsoft.Owin;</code></p><p><code class="sccode">using Sitecore.Owin.Authentication.Services;</code></p><p><code class="sccode">using Sitecore.Text;</code></p><p><p><code class="sccode">namespace Sitecore.Owin.Authentication.Samples.Services</code></p><p><code class="sccode">{</code></p><p><code class="sccode"> public class SampleUserAttachResolver : UserAttachResolver</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> public override UserAttachResolverResult Resolve(UserAttachContext context)</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> IFormCollection formData = Task.Run(async () =&gt; await context.OwinContext.Request.ReadFormAsync()).Result;</code></p><p><code class="sccode"> string consentResult = formData[&quot;uar_action&quot;];</code></p><p><p><code class="sccode"> UserAttachResolverResultStatus resultStatus;</code></p><p><code class="sccode"> if (Enum.TryParse(consentResult, true, out resultStatus))</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> return new UserAttachResolverResult(resultStatus);</code></p><p><code class="sccode"> }</code></p><p><p><code class="sccode"> string redirectUrl = new UrlBuilder(&quot;/dialogs/consent&quot;) { [&quot;returnUrl&quot;] = context.ReturnUrl }.ToString();</code></p><p><p><code class="sccode"> context.OwinContext.Response.Redirect(redirectUrl);</code></p><p><code class="sccode"> return new UserAttachResolverResult(UserAttachResolverResultStatus.DelayedResolve);</code></p><p><code class="sccode"> }</code></p><p><code class="sccode"> }</code></p><p><code class="sccode">} }</code></p><p><code class="sccode">}</code></p><p>The <code class="sccode">Resolve</code> method takes <code class="sccode">UserAttachContext</code> as a value argument, sends a request to the controller, and handles the answer from the controller that it calls. </p></li><li><bookmark></bookmark>Create an endpoint by creating an MVC controller and a layout. <p>The MVC controller:</p><p><code class="sccode">using System.Web.Mvc;</code></p><p><p><code class="sccode">namespace Sitecore.Owin.Authentication.Samples.Controllers</code></p><p><code class="sccode">{</code></p><p><code class="sccode"> public class ConsentController : Controller</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> public ActionResult Index()</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> this.ViewBag.User = this.HttpContext.User.Identity.Name;</code></p><p><code class="sccode"> this.ViewBag.ReturnUrl = this.Request.Params[&quot;ReturnUrl&quot;];</code></p><p><p><code class="sccode"> return this.View();</code></p><p><code class="sccode"> }</code></p><p><code class="sccode"> }</code></p><p><code class="sccode">}</code></p><p>The layout:</p><p><code class="sccode">html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;</code></p><p><code class="sccode">&lt;head&gt;</code></p><p><code class="sccode"> &lt;title&gt;Consent window&lt;/title&gt;</code></p><p><code class="sccode">&lt;/head&gt;</code></p><p><code class="sccode">&lt;body&gt;</code></p><p><code class="sccode"> &lt;p&gt;The @ViewBag.User user is already logged in. Would you like to attach to the user or create new record?&lt;/p&gt;</code></p><p><code class="sccode"> &lt;br /&gt;</code></p><p><code class="sccode"> &lt;form method=&quot;POST&quot; action=&quot;@ViewBag.ReturnUrl&quot;&gt;</code></p><p><code class="sccode"> &lt;button type=&quot;submit&quot; name=&quot;uar_action&quot; value=&quot;attach&quot;&gt;Attach&lt;/button&gt;</code></p><p><code class="sccode"> &lt;button type=&quot;submit&quot; name=&quot;uar_action&quot; value=&quot;new&quot;&gt;New&lt;/button&gt;</code></p><p><code class="sccode"> &lt;/form&gt;</code></p><p><code class="sccode">&lt;/body&gt;</code></p><p><code class="sccode">&lt;/html&gt;</code></p></li><li><bookmark></bookmark>Register the extended class in Sitecore by creating a new service configurator class:<p><code class="sccode">using Microsoft.Extensions.DependencyInjection;</code></p><p><code class="sccode">using Sitecore.DependencyInjection;</code></p><p><code class="sccode">using Sitecore.Owin.Authentication.Samples.Services;</code></p><p><code class="sccode">using Sitecore.Owin.Authentication.Services;</code></p><p><p><code class="sccode">namespace Sitecore.Owin.Authentication.Samples.Infrastructure</code></p><p><code class="sccode">{</code></p><p><code class="sccode"> public class ServicesConfigurator : IServicesConfigurator</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> public void Configure(IServiceCollection serviceCollection)</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> serviceCollection.AddSingleton&lt;UserAttachResolver, SampleUserAttachResolver&gt;();</code></p><p><code class="sccode"> }</code></p><p><code class="sccode"> }</code></p><p><code class="sccode">}</code></p></li><li>Define the created class in a custom configuration file, by adding following node under the <code class="sccode">&lt;sitecore&gt;</code> node:<p><code class="sccode">&lt;services&gt;</code></p><p><code class="sccode"> &lt;configurator type=&quot;Sitecore.Owin.Authentication.Samples.Infrastructure.ServicesConfigurator, Sitecore.Owin.Authentication.Samples&quot; /&gt;</code></p><p><code class="sccode">&lt;/services&gt;</code></p></li></ol></div><h2 class="heading2" expand-collapse="">Programmatic account connection management</h2><div class="collapsable"><p>Sitecore uses the ASP.NET Identity for account connections, so account connections are handled in an identical way to the ASP.NET Identity API: </p><ol><li>Retrieve a <em class="scemphasis">UserManager</em> object from the Owin context: <p><code class="sccode">using Sitecore.Owin.Authentication.Extensions;</code></p><p><code class="sccode"> [...]</code></p><p><code class="sccode"> IOwinContext context = HttpContext.Current.GetOwinContext();</code></p><p><code class="sccode"> UserManager&lt;ApplicationUser&gt; userManager = context.GetUserManager();</code></p></li><li>Use these methods for CRUD operations:<p><code class="sccode">Task&lt;IdentityResult&gt; AddLoginAsync(ApplicationUser user, UserLoginInfo login);</code></p><p><code class="sccode">Task&lt;IdentityResult&gt; RemoveLoginAsync(ApplicationUser user, UserLoginInfo login);</code></p><p><code class="sccode">Task&lt;IList&lt;UserLoginInfo&gt;&gt; GetLoginsAsync(ApplicationUser user);</code></p><p><code class="sccode">Task&lt;ApplicationUser&gt; FindAsync(UserLoginInfo login);</code></p></li></ol><p></div><h2 class="heading2" expand-collapse="" id="_Configure_virtual_and"><bookmark></bookmark>Configure virtual and persistent users</h2><div class="collapsable"><p>Sitecore supports virtual users. When you authenticate users through external providers, Sitecore creates and authenticates a virtual user with proper access rights. </p><p>However, there are some drawbacks to using virtual users. User profile data cannot be persisted across sessions, as the virtual user profile exists only as long as the user session lasts. You should therefore create a real, persistent user for each external user. When a user uses external authentication for the first time, Sitecore creates and persists a new user, and binds this user to the external identity provider and the user ID from that provider. The next time that the user authenticates with the same external provider and the same credentials, Sitecore finds the already created and persisted user and authenticates it.</p><h3>User builder</h3><p>The <code class="sccode">identityProvidersPerSites/mapEntry</code> node contains an <code class="sccode">externalUserBuilder</code> node. Add a user builder like this:</p><ul><li>Specify a class that inhertis from <code class="sccode">Sitecore.Owin.Authentication.Services.ExternalUserBuilder</code>. The user builder is responsible for creating a Sitecore user, based on the external user info.<p>The default implementation that you configure to create either persistent or virtual users is based on the <code class="sccode">isPersistentUser</code> constructor parameter:</p><p><code class="sccode">&lt;externalUserBuilder type=&quot;Sitecore.Owin.Authentication.Services.DefaultExternalUserBuilder, Sitecore.Owin.Authentication&quot;&gt;</code></p><p><code class="sccode"> &lt;param desc=&quot;isPersistentUser&quot;&gt;true&lt;/param&gt;</code></p><p><code class="sccode">&lt;/externalUserBuilder&gt;</code></p></li></ul><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">When you implement the user builder, you must not use it to create a user in the database. It must only create an instance of the <code class="sccode">ApplicationUser</code> class<code class="sccode">.</code></p></section><h3>Applying builder to site</h3><p>Find <code class="sccode">mapEntry</code> within the <code class="sccode">identityProvidersPerSites</code> node of the site that you are going to define a user builder for, and specify the <code class="sccode">externalUserBuilder</code> node. For example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;mapEntry type=&quot;Sitecore.FederatedAuthentication.Collections.IdentityProvidersPerSitesMapEntry, Sitecore.FederatedAuthentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;sites hint=&quot;list&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;site&gt;shell&lt;/site&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;site&gt;admin&lt;/site&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;site&gt;website&lt;/site&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/sites&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;identityProviders hint=&quot;list:AddIdentityProvider&quot;&gt;mapEntry</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;identityProvider ref=&quot;federatedAuthentication/identityProviders/identityProvider[@id=&#39;AzureAd&#39;]&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;identityProvider ref=&quot;federatedAuthentication/identityProviders/identityProvider[@id=&#39;IdentityServer&#39;]&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/identityProviders&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;externalUserBuilder type=&quot;Sitecore.Owin.Authentication.Services.DefaultExternalUserBuilder, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;isPersistentUser&quot;&gt;true&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/externalUserBuilder&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/mapEntry&gt;</code></pre><p>In the example above, Sitecore applies the builder to the <code class="sccode">shell</code>, <code class="sccode">admin</code>, and <code class="sccode">websites</code> sites.</p><p>The applied builders override the builders for the relevant site(s).</p></div><h2 class="heading2" expand-collapse="" id="_Generate_sign-in_links"><bookmark></bookmark>Generate sign-in links</h2><div class="collapsable"><p>When you have configured external identity providers for a Sitecore site, you can generate URLs for them through the <code class="sccode">getSignInUrlInfo</code> pipeline. This pipeline retrieves a list of sign-in URLs with additional information for each corresponding identity provider in this list. </p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">You must only use sign in links in POST requests.</p></section><p>To generate sign in links:</p><ul><li>Use the <code class="sccode">getSignInUrlInfo</code> pipeline as in the following example:<pre class="codesnippet"><code class="prettyprint">using Sitecore.Pipelines.GetSignInUrlInfo;</code></pre><pre class="codesnippet"><code class="prettyprint">/*</code></pre><pre class="codesnippet"><code class="prettyprint">[...]</code></pre><pre class="codesnippet"><code class="prettyprint">*/</code></pre><pre class="codesnippet"><code class="prettyprint">var args = new GetSignInUrlInfoArgs(site: &quot;website&quot;, returnUrl: &quot;/&quot;);</code></pre><pre class="codesnippet"><code class="prettyprint"></code></pre><pre class="codesnippet"><code class="prettyprint">GetSignInUrlInfoPipeline.Run(corePipelineManager, args); </code></pre></li></ul><p>The <code class="sccode">args.Result</code> contains a collection of <code class="sccode">Sitecore.Data.SignInUrlInfo</code> objects. These objects have the follwing properties:</p><ul><li><code class="sccode">Href</code> – the URL.</li><li><code class="sccode">IdentityProvider</code> – the name of the identity provider. You could, for example, use it as a CSS class for a link.</li><li><code class="sccode">Caption</code> – the caption of the identity provider. You should use this as the link text.</li></ul><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Use the Sitecore dependency injection to get an implementation of the <code class="sccode">BaseCorePipelineManager</code> class.</p></section><p id="account-connection-configuration" id="mapping-user-properties-from-claims" id="description" id="example-1" id="example-2" id="important-note" id="example" id="retrieving-urls-to-sign-in" id="configuration-azure-ad-instance-with-sit" id="create-azure-ad-if-you-dont-have-it" id="create-an-app" id="create-groups-and-users" id="adopt-new-azure-ad-with-fedauth-project" id="applaying-choosen-builder-to-site" id="create-custom-user-builder"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark></p></div>Mon, 27 Aug 2018 13:18:32 +0200{6EC6D377-64F8-4AB0-B362-B2D59F46A0DB}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Developing/Developing_with_Sitecore/Federated_authentication/Configure_federated_authentication.aspxConfigure federated authentication<p>You <a href="https://doc.sitecore.net:443/en/Products/Sitecore_Experience_Platform/90/Developing/Developing_with_Sitecore/Federated_authentication/Using_federated_authentication_with_Sitecore.aspx">use federated authentication</a> to let users log in to Sitecore though an external provider. Federated authentication requires that you configure Sitecore a specific way, depending on which external provider you use. Configuring federated authentication involves a number of tasks:</p><ul><li><a href="#_Configure_an_identity" go-to-section="">Configure an identity provider</a></li><li><a href="#_Sitecore_user_name" go-to-section="">Sitecore user name generation</a></li><li><a href="#_Map_claims_and" go-to-section="">Map claims and roles</a></li><li><a href="#_Map_properties" go-to-section="">Map properties</a></li><li><a href="#_Connect_user_accounts" go-to-section="">Connect a user account</a></li><li><a href="#_Configure_virtual_and" go-to-section="">Configure virtual and persistent users</a></li><li><a href="#_Generate_sign-in_links" go-to-section="">Generate sign-in links</a></li></ul><h2 class="heading2" expand-collapse="" id="_Enable_and_configure" id="add-provider" id="add-map-entry" id="add-code" id="integration-with-owin-pipeline" id="_Integrate_with_the" id="_Configure_an_identity"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark>Configure an identity provider</h2><div class="collapsable"><p>You must configure the identity provider you use. How you do this depends on the provider you use. The primary use case is to use Azure Active Directory (Azure AD). <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-openid-connect-code">Authorize access to web applications using OpenID Connect and Azure Active Directory</a> describes how Azure AD works.</p><p>To configure an identity provider: </p><ol><li>Patch the <code class="sccode">configuration/sitecore/federatedAuthentication/identityProviders</code> node by creating a new node with the name <code class="sccode">identityProvider</code>. </li><li>Enter values for the <code class="sccode">id</code> and <code class="sccode">type</code> attributes. The <code class="sccode">type</code> must implement the abstract class <code class="sccode">Sitecore.Owin.Authentication.Configuration.IdentityProvider</code>. Sitecore has a default implementation –<code class="sccode">Sitecore.Owin.Authentication.Configuration.DefaultIdentityProvider</code>.</li><li>Under the node you created, enter values for the <code class="sccode">param</code>, <code class="sccode">caption</code>, <code class="sccode">domain</code>, and <code class="sccode">transformations</code> child nodes. </li><li>Under the <code class="sccode">configuration/sitecore/federatedAuthentication/identityProvidersPerSites</code> node, create a new node with name <code class="sccode">mapEntry</code>. </li><li>Enter values for the <code class="sccode">name</code> and <code class="sccode">type</code> attributes. The value of the <code class="sccode">name</code> attribute must be unique for each entry. The <code class="sccode">type</code> must be <code class="sccode">Sitecore.Owin.Authentication.Collections.IdentityProvidersPerSitesMapEntry</code>,<code class="sccode"> Sitecore.Owin.Authentication</code>, or inherit from this.</li><li>Under the node you created, enter values for the <code class="sccode">sites</code> (the list of sites where the provider(s) will work), <code class="sccode">identityProviders</code> (the list of providers), and <code class="sccode">externalUserBuilder</code> child nodes.</li></ol><p>The <code class="sccode">App_config\Include\Examples\Sitecore.Owin.Authentication.Enabler.config.example</code> file does two things:</p><ul><li>It patches the <code class="sccode">sitecore/services</code> configuration node by configuring a dependency injection to replace implementations of the <code class="sccode">Sitecore.Abstractions.BaseAuthenticationManager</code>, <code class="sccode">Sitecore.Abstractions.BaseTicketManager</code> and <code class="sccode">Sitecore.Abstractions.BasePreviewManager</code> classes with implementations that work with OWIN authentication.</li><li>It patches the <code class="sccode">FederatedAuthentication.Enabled</code> setting by setting it to <code class="sccode">true</code>.</li></ul><p>If you enable this config file by removing the <code class="sccode">example</code> extension, Sitecore applies these two patches. </p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Be aware of these potential problems if you enable this config file:</p><p class="scnotebody">DI patches are applied, but <code class="sccode">FederatedAuthentication.Enabled</code> is false. In this case, ASP.NET Identity is used, but an API for retrieving the external login links always returns nothing and external authentication endpoints will not work.</p><p class="scnotebody">DI patches are not applied, but <code class="sccode">FederatedAuthentication.Enabled</code> is set to true. In this case, the SitecoreConfigurationException error will be thrown at startup.</p></section><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">For Sitecore 9.0, update 1, on Azure, you must open the web.config and change &quot;false&quot; to &quot;true&quot; in this setting:</p><p class="scnotebody"><code class="sccode">&lt;add key=&quot;owin:AutomaticAppStartup&quot; value=&quot;true&quot; /&gt;</code></p></section><p><h3>Add code for the provider</h3><p>You must create a new processor for the <code class="sccode">owin.identityProviders</code> pipeline. </p><p>To create a new processor:</p><ol><li>Inherit the <code class="sccode">Sitecore.Owin.Authentication.Pipelines.IdentityProviders.IdentityProvidersProcesso</code>r class. </li><li>Override the <code class="sccode">IdentityProviderName</code> property with the name you specified for the <code class="sccode">identityProvider </code>in the configuration.</li><li>Override the <code class="sccode">ProcessCore</code> method.</li></ol><h3>Integrate with the owin.identityProviders pipeline</h3><p>Next, you must integrate the code into the <code class="sccode">owin.identityProviders</code> pipeline. </p><p>For example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;configuration xmlns:patch=&quot;http://www.sitecore.net/xmlconfig/&quot; xmlns:role=&quot;http://www.sitecore.net/xmlconfig/role/&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;sitecore role:require=&quot;Standalone or ContentDelivery or ContentManagement&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;pipelines&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;owin.identityProviders&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint" id="_GoBack"> &lt;processor type=&quot;Sitecore.Owin.Authentication. YourIdentityProvidersAzureAd, YourAssembly&quot; resolve=&quot;true&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/owin.identityProviders&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/pipelines&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/sitecore&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/configuration&gt;</code></pre></div><h2 class="heading2" expand-collapse="" id="_Map_claims_and" id="_Sitecore_user_name"><bookmark></bookmark><bookmark></bookmark>Sitecore user name generation</h2><div class="collapsable"><p>User names must be unique across a Sitecore instance. You cannot use user names from different external providers as Sitecore user names because this does not guarantee that the user names are unique. </p><p>The <code class="sccode">DefaultExternalUserBuilder</code> class creates a sequence of user names for a given external user name. It then uses the first of these names that does not already exist in Sitecore. The values in the sequence depend only on the external username and the Sitecore domain configured for the given identity provider. </p></div><h2 class="heading2" expand-collapse="">Map claims and roles</h2><div class="collapsable"><p id="OLE_LINK1" id="OLE_LINK2"><bookmark></bookmark><bookmark></bookmark>A provider issues claims and gives each claim one or more values. Sitecore reads the claims issued for an authenticated user during the external authentication process. You can restrict access to some resources to identities (clients or users) that have only specific claims.</p><p>An external user is a user that has claims. Mapping claims to roles allows the Sitecore role-based authentication system to authenticate an external user.</p><p>To map claims to roles:</p><ol><li>Add an <code class="sccode">&lt;identityProvider&gt;</code> node to <code class="sccode">configuration/sitecore/federatedAuthentication/identityProviders.</code></li><li>Add a <code class="sccode">&lt;transformations hint=&quot;list:AddTransformation&quot;&gt;</code> node to the <code class="sccode">&lt;identityProvider&gt;</code> node.</li><li> Add transformation nodes as child nodes. <p>For example, a transformation node looks like this:</p><pre class="codesnippet"><code class="prettyprint">&lt;transformation type=&quot;Sitecore.Owin.Authentication.Services.DefaultTransformation, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;sources hint=&quot;raw:AddSource&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;claim name=&quot;groups&quot; value=&quot;f04b11c5-323f-41e7-ab2b-d70cefb4e8d0&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;claim name=&quot;groups&quot; value=&quot;40901f21-29d0-47ae-abf5-184c5b318471&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/sources&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;targets hint=&quot;raw:AddTarget&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;claim name=&quot;http://schemas.microsoft.com/ws/2008/06/identity/claims/role&quot; value=&quot;Sitecore\Developer&quot; /&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/targets&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;keepSource&gt;true&lt;/keepSource&gt;</code></pre><pre class="codesnippet"><code class="prettyprint">&lt;/transformation&gt;</code></pre><ul class="scbullet2ndlevel"><li>The <code class="sccode">type</code> must inherit from the <code class="sccode">Sitecore.Owin.Authentication.Services.Transformation</code> class.</li><li>In this example, the transformation adds a claim with the name <a href="http://schemas.microsoft.com/ws/2008/06/identity/claims/role">http://schemas.microsoft.com/ws/2008/06/identity/claims/role</a> and the value <code class="sccode">Sitecore\Developer</code> to those identities that have two claims with name <code class="sccode">group</code> and values <code class="sccode">f04b11c5-323f-41e7-ab2b-d70cefb4e8d0</code> and <code class="sccode">40901f21-29d0-47ae-abf5-184c5b318471</code> at the same time.</li><li><code class="sccode">keepSource==true</code> specifies that the original claims (two <code class="sccode">group</code> claims, in this example) will not be removed. The default is <code class="sccode">false</code>, and this means that if the transformation is successfully applied to the identity, then the original claims are replaced with the ones that are stated in the <code class="sccode">&lt;targets&gt;</code> nodes.</li></ul></li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you specify claims transformations in the <code class="sccode">sitecore/federatedAuthentication/sharedTransformations</code> node, these transformations are for all identity providers.</p></section></div><h2 class="heading2" expand-collapse="" id="_Map_properties"><bookmark></bookmark>Map properties</h2><div class="collapsable"><p>You must map identity claims to the Sitecore user properties that are stored in user profiles.</p><p>The <code class="sccode">propertyInitializer</code> node, under the <code class="sccode">sitecore\federatedAuthentication</code> node, stores a list of maps. Each map has inner source and target nodes. These nodes have two attributes: <code class="sccode">name</code> and <code class="sccode">value</code>. You map properties by setting the value of these properties.</p><p>If a claim matches the <code class="sccode">name</code> attribute of a source node (and <code class="sccode">value</code>, if specified), the <code class="sccode">value</code> attribute of a user property specified by the <code class="sccode">name</code> attribute of a target node is set to the value of the matched claim (if the <code class="sccode">value</code> attribute is not specified in the <code class="sccode">target</code> node).</p><p>For example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;propertyInitializer type=&quot;Sitecore.Owin.Authentication.Services.PropertyInitializer, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;maps hint=&quot;list&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;map name=&quot;status to UserStatus&quot; type=&quot;Sitecore.Owin.Authentication.Services.DefaultClaimToPropertyMapper, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;data hint=&quot;raw:AddData&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;source name=&quot;status&quot; value=&quot;first&quot;/&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;target name=&quot;UserStatus&quot; value=&quot;1&quot;/&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/data&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/map&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/maps&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/propertyInitializer&gt;</code></pre><p>In this example, the source <code class="sccode">name</code> and <code class="sccode">value</code> attributes are mapped to the <code class="sccode">UserStatus</code> target name and value <code class="sccode">1</code>.</p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">If you split up your configuration files, you must add the <code class="sccode">name</code> attribute to the map nodes to make sure that your nodes are unique across all the files. This is due to the way Sitecore config patching works.</p></section></div><h2 class="heading2" expand-collapse="" id="_Connect_users_accounts" id="_Connect_user_accounts"><bookmark></bookmark><bookmark></bookmark>Connect a user account</h2><div class="collapsable"><p>An account connection allows you to share profile data between multiple external accounts on one side and a persistent account on the other side. If a persisted user has roles assigned to them, federated authentication shares these with the external accounts.</p><p>Under the following circumstances, the connection to an account is automatic. Sitecore signs out the authenticated user, creates a new persistent or virtual account, and then authenticates it:</p><ul><li>The user is already authenticated on the site. </li><li>The user signs in to the same site with an external provider. </li><li>There is not already a connection between an external identity and an existing, persistent account. In ASP.NET Identity, <code class="sccode">signInManager.ExternalSignIn(...)</code> then returns <code class="sccode">SignInStatus.Failure</code>.</li></ul><p id="change-user-attach-behavior-when-loging-">To bind the external identity to an already authenticated account, you must override the <code class="sccode">Sitecore.Owin.Authentication.Services.UserAttachResolver</code> class using dependency injection. The following steps shows an example of doing this:<bookmark></bookmark></p><ol><li>Extend <bookmark></bookmark>the <code class="sccode">Sitecore.Owin.Authentication.Services.UserAttachResolver</code> class:<p><code class="sccode">using System;</code></p><p><code class="sccode">using System.Threading.Tasks;</code></p><p><code class="sccode">using Microsoft.Owin;</code></p><p><code class="sccode">using Sitecore.Owin.Authentication.Services;</code></p><p><code class="sccode">using Sitecore.Text;</code></p><p><p><code class="sccode">namespace Sitecore.Owin.Authentication.Samples.Services</code></p><p><code class="sccode">{</code></p><p><code class="sccode"> public class SampleUserAttachResolver : UserAttachResolver</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> public override UserAttachResolverResult Resolve(UserAttachContext context)</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> IFormCollection formData = Task.Run(async () =&gt; await context.OwinContext.Request.ReadFormAsync()).Result;</code></p><p><code class="sccode"> string consentResult = formData[&quot;uar_action&quot;];</code></p><p><p><code class="sccode"> UserAttachResolverResultStatus resultStatus;</code></p><p><code class="sccode"> if (Enum.TryParse(consentResult, true, out resultStatus))</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> return new UserAttachResolverResult(resultStatus);</code></p><p><code class="sccode"> }</code></p><p><p><code class="sccode"> string redirectUrl = new UrlBuilder(&quot;/dialogs/consent&quot;) { [&quot;returnUrl&quot;] = context.ReturnUrl }.ToString();</code></p><p><p><code class="sccode"> context.OwinContext.Response.Redirect(redirectUrl);</code></p><p><code class="sccode"> return new UserAttachResolverResult(UserAttachResolverResultStatus.DelayedResolve);</code></p><p><code class="sccode"> }</code></p><p><code class="sccode"> }</code></p><p><code class="sccode">} }</code></p><p><code class="sccode">}</code></p><p>The <code class="sccode">Resolve</code> method takes <code class="sccode">UserAttachContext</code> as a value argument, sends a request to the controller, and handles the answer from the controller that it calls. </p></li><li><bookmark></bookmark>Create an endpoint by creating an MVC controller and a layout. <p>The MVC controller:</p><p><code class="sccode">using System.Web.Mvc;</code></p><p><p><code class="sccode">namespace Sitecore.Owin.Authentication.Samples.Controllers</code></p><p><code class="sccode">{</code></p><p><code class="sccode"> public class ConsentController : Controller</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> public ActionResult Index()</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> this.ViewBag.User = this.HttpContext.User.Identity.Name;</code></p><p><code class="sccode"> this.ViewBag.ReturnUrl = this.Request.Params[&quot;ReturnUrl&quot;];</code></p><p><p><code class="sccode"> return this.View();</code></p><p><code class="sccode"> }</code></p><p><code class="sccode"> }</code></p><p><code class="sccode">}</code></p><p>The layout:</p><p><code class="sccode">html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;</code></p><p><code class="sccode">&lt;head&gt;</code></p><p><code class="sccode"> &lt;title&gt;Consent window&lt;/title&gt;</code></p><p><code class="sccode">&lt;/head&gt;</code></p><p><code class="sccode">&lt;body&gt;</code></p><p><code class="sccode"> &lt;p&gt;The @ViewBag.User user is already logged in. Would you like to attach to the user or create new record?&lt;/p&gt;</code></p><p><code class="sccode"> &lt;br /&gt;</code></p><p><code class="sccode"> &lt;form method=&quot;POST&quot; action=&quot;@ViewBag.ReturnUrl&quot;&gt;</code></p><p><code class="sccode"> &lt;button type=&quot;submit&quot; name=&quot;uar_action&quot; value=&quot;attach&quot;&gt;Attach&lt;/button&gt;</code></p><p><code class="sccode"> &lt;button type=&quot;submit&quot; name=&quot;uar_action&quot; value=&quot;new&quot;&gt;New&lt;/button&gt;</code></p><p><code class="sccode"> &lt;/form&gt;</code></p><p><code class="sccode">&lt;/body&gt;</code></p><p><code class="sccode">&lt;/html&gt;</code></p></li><li><bookmark></bookmark>Register the extended class in Sitecore by creating a new service configurator class:<p><code class="sccode">using Microsoft.Extensions.DependencyInjection;</code></p><p><code class="sccode">using Sitecore.DependencyInjection;</code></p><p><code class="sccode">using Sitecore.Owin.Authentication.Samples.Services;</code></p><p><code class="sccode">using Sitecore.Owin.Authentication.Services;</code></p><p><p><code class="sccode">namespace Sitecore.Owin.Authentication.Samples.Infrastructure</code></p><p><code class="sccode">{</code></p><p><code class="sccode"> public class ServicesConfigurator : IServicesConfigurator</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> public void Configure(IServiceCollection serviceCollection)</code></p><p><code class="sccode"> {</code></p><p><code class="sccode"> serviceCollection.AddSingleton&lt;UserAttachResolver, SampleUserAttachResolver&gt;();</code></p><p><code class="sccode"> }</code></p><p><code class="sccode"> }</code></p><p><code class="sccode">}</code></p></li><li>Define the created class in a custom configuration file, by adding following node under the <code class="sccode">&lt;sitecore&gt;</code> node:<p><code class="sccode">&lt;services&gt;</code></p><p><code class="sccode"> &lt;configurator type=&quot;Sitecore.Owin.Authentication.Samples.Infrastructure.ServicesConfigurator, Sitecore.Owin.Authentication.Samples&quot; /&gt;</code></p><p><code class="sccode">&lt;/services&gt;</code></p></li></ol></div><h2 class="heading2" expand-collapse="">Programmatic account connection management</h2><div class="collapsable"><p>Sitecore uses the ASP.NET Identity for account connections, so account connections are handled in an identical way to the ASP.NET Identity API: </p><ol><li>Retrieve a <em class="scemphasis">UserManager</em> object from the Owin context: <p><code class="sccode">using Sitecore.Owin.Authentication.Extensions;</code></p><p><code class="sccode"> [...]</code></p><p><code class="sccode"> IOwinContext context = HttpContext.Current.GetOwinContext();</code></p><p><code class="sccode"> UserManager&lt;ApplicationUser&gt; userManager = context.GetUserManager();</code></p></li><li>Use these methods for CRUD operations:<p><code class="sccode">Task&lt;IdentityResult&gt; AddLoginAsync(ApplicationUser user, UserLoginInfo login);</code></p><p><code class="sccode">Task&lt;IdentityResult&gt; RemoveLoginAsync(ApplicationUser user, UserLoginInfo login);</code></p><p><code class="sccode">Task&lt;IList&lt;UserLoginInfo&gt;&gt; GetLoginsAsync(ApplicationUser user);</code></p><p><code class="sccode">Task&lt;ApplicationUser&gt; FindAsync(UserLoginInfo login);</code></p></li></ol><p></div><h2 class="heading2" expand-collapse="" id="_Configure_virtual_and"><bookmark></bookmark>Configure virtual and persistent users</h2><div class="collapsable"><p>Sitecore supports virtual users. When you authenticate users through external providers, Sitecore creates and authenticates a virtual user with proper access rights. </p><p>However, there are some drawbacks to using virtual users. User profile data cannot be persisted across sessions, as the virtual user profile exists only as long as the user session lasts. You should therefore create a real, persistent user for each external user. When a user uses external authentication for the first time, Sitecore creates and persists a new user, and binds this user to the external identity provider and the user ID from that provider. The next time that the user authenticates with the same external provider and the same credentials, Sitecore finds the already created and persisted user and authenticates it.</p><h3>User builder</h3><p>The <code class="sccode">identityProvidersPerSites/mapEntry</code> node contains an <code class="sccode">externalUserBuilder</code> node. Add a user builder like this:</p><ul><li>Specify a class that inhertis from <code class="sccode">Sitecore.Owin.Authentication.Services.ExternalUserBuilder</code>. The user builder is responsible for creating a Sitecore user, based on the external user info.<p>The default implementation that you configure to create either persistent or virtual users is based on the <code class="sccode">isPersistentUser</code> constructor parameter:</p><p><code class="sccode">&lt;externalUserBuilder type=&quot;Sitecore.Owin.Authentication.Services.DefaultExternalUserBuilder, Sitecore.Owin.Authentication&quot;&gt;</code></p><p><code class="sccode"> &lt;param desc=&quot;isPersistentUser&quot;&gt;true&lt;/param&gt;</code></p><p><code class="sccode">&lt;/externalUserBuilder&gt;</code></p></li></ul><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">When you implement the user builder, you must not use it to create a user in the database. It must only create an instance of the <code class="sccode">ApplicationUser</code> class<code class="sccode">.</code></p></section><h3>Applying builder to site</h3><p>Find <code class="sccode">mapEntry</code> within the <code class="sccode">identityProvidersPerSites</code> node of the site that you are going to define a user builder for, and specify the <code class="sccode">externalUserBuilder</code> node. For example:</p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;mapEntry type=&quot;Sitecore.FederatedAuthentication.Collections.IdentityProvidersPerSitesMapEntry, Sitecore.FederatedAuthentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;sites hint=&quot;list&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;site&gt;shell&lt;/site&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;site&gt;admin&lt;/site&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;site&gt;website&lt;/site&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/sites&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;identityProviders hint=&quot;list:AddIdentityProvider&quot;&gt;mapEntry</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;identityProvider ref=&quot;federatedAuthentication/identityProviders/identityProvider[@id=&#39;AzureAd&#39;]&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;identityProvider ref=&quot;federatedAuthentication/identityProviders/identityProvider[@id=&#39;IdentityServer&#39;]&quot; /&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/identityProviders&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;externalUserBuilder type=&quot;Sitecore.Owin.Authentication.Services.DefaultExternalUserBuilder, Sitecore.Owin.Authentication&quot;&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;param desc=&quot;isPersistentUser&quot;&gt;true&lt;/param&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &lt;/externalUserBuilder&gt;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&lt;/mapEntry&gt;</code></pre><p>In the example above, Sitecore applies the builder to the <code class="sccode">shell</code>, <code class="sccode">admin</code>, and <code class="sccode">websites</code> sites.</p><p>The applied builders override the builders for the relevant site(s).</p></div><h2 class="heading2" expand-collapse="" id="_Generate_sign-in_links"><bookmark></bookmark>Generate sign-in links</h2><div class="collapsable"><p>When you have configured external identity providers for a Sitecore site, you can generate URLs for them through the <code class="sccode">getSignInUrlInfo</code> pipeline. This pipeline retrieves a list of sign-in URLs with additional information for each corresponding identity provider in this list. </p><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">You must only use sign in links in POST requests.</p></section><p>To generate sign in links:</p><ul><li>Use the <code class="sccode">getSignInUrlInfo</code> pipeline as in the following example:<pre class="codesnippet"><code class="prettyprint">using Sitecore.Pipelines.GetSignInUrlInfo;</code></pre><pre class="codesnippet"><code class="prettyprint">/*</code></pre><pre class="codesnippet"><code class="prettyprint">[...]</code></pre><pre class="codesnippet"><code class="prettyprint">*/</code></pre><pre class="codesnippet"><code class="prettyprint">var args = new GetSignInUrlInfoArgs(site: &quot;website&quot;, returnUrl: &quot;/&quot;);</code></pre><pre class="codesnippet"><code class="prettyprint"></code></pre><pre class="codesnippet"><code class="prettyprint">GetSignInUrlInfoPipeline.Run(corePipelineManager, args); </code></pre></li></ul><p>The <code class="sccode">args.Result</code> contains a collection of <code class="sccode">Sitecore.Data.SignInUrlInfo</code> objects. These objects have the follwing properties:</p><ul><li><code class="sccode">Href</code> – the URL.</li><li><code class="sccode">IdentityProvider</code> – the name of the identity provider. You could, for example, use it as a CSS class for a link.</li><li><code class="sccode">Caption</code> – the caption of the identity provider. You should use this as the link text.</li></ul><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Use the Sitecore dependency injection to get an implementation of the <code class="sccode">BaseCorePipelineManager</code> class.</p></section><p id="account-connection-configuration" id="mapping-user-properties-from-claims" id="description" id="example-1" id="example-2" id="important-note" id="example" id="retrieving-urls-to-sign-in" id="configuration-azure-ad-instance-with-sit" id="create-azure-ad-if-you-dont-have-it" id="create-an-app" id="create-groups-and-users" id="adopt-new-azure-ad-with-fedauth-project" id="applaying-choosen-builder-to-site" id="create-custom-user-builder"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark></p></div>Mon, 27 Aug 2018 13:12:08 +0200{01FD1F53-1B90-40CA-9576-7BD0FAF654CE}https://doc.sitecore.net/en/Products/Managed_Cloud/10/Sitecore_Managed_Cloud_overview/IP_whitelisting_for_Azure_SQL_Server_and_Web_Apps.aspxIP whitelisting for Azure SQL Server and Web Apps<p>Sitecore on Azure uses the Azure Web App and Azure SQL server technologies. IP whitelisting provides access to Azure Web Apps and SQL server resources for the computers that access the service from specific IP addresses. At the same time, it blocks access for computers attempting unauthorized access from all unspecified IP addresses.</p><p>This topic describes:</p><ul><li><a href="#_Considerations" go-to-section="">Considerations</a></li><li><a href="#_Configuring_an_IP" go-to-section="">Configuring an IP whitelist for Sitecore 9.0.x</a> </li><li><a href="#_Configuring_an_IP_1" go-to-section="">Configuring an IP whitelist for a SQL server firewall</a></li></ul><h2 class="heading2" expand-collapse="" id="_Configuring_an_IP"><bookmark></bookmark>Considerations</h2><div class="collapsable"><p>Before you configure IP whitelisting for Azure SQL Server and Web Apps, consider the following:</p><ul><li>The Azure Web Apps services do not offer static IPs. However, Microsoft does provide approximately 90 days&#39; notice before changing an IP address in the backend. Sitecore cannot guarantee technical cases where the IP addresses can change without our prior knowledge. For example, scaling up an App Service plan or moving an application from one app service plan to another can result in changes to IP addresses.</li><li>Microsoft can share outbound IP addresses between Web Apps and other tenants of the Azure App services products. This means there is a minor risk that Azure tenants owned by other subscribers could theoretically access external resources, such as an MLab cluster, when those resources whitelist the Azure outbound IP address associated with Sitecore web applications. <p>The potential impact associated with non-static, non-unique IP addresses is relatively small. Even so, Azure offers an isolated hosting environment (<a href="https://docs.microsoft.com/en-us/azure/app-service/environment/app-service-app-service-environment-intro">the App Service Environment</a>), that offers a static, unique IP address along with the other standard features. </p></li><li>A <a href="https://peter.intheazuresky.com/2016/02/26/azure-web-apps-outgoing-ip-questionanswer/">change of service plan</a> for your web application (such as scaling up or out), can cause Web Apps to acquire a new outbound IP address. This could invalidate the IP whitelisting configuration settings, which would then refer to obsolete IP addresses.</li></ul></div><h2 class="heading2" expand-collapse="">Configuring an IP whitelist for Sitecore 9.0.x </h2><div class="collapsable"><p>You can restrict the access of a specific web application to specified IP addresses through the menu of your web application. However, to configure your IP whitelist for a specific web application, navigate to <span class="scwindow">Settings</span>, <span class="scwindow">Networking</span>, &lt;<em class="scemphasis">the Web App overview page&gt;</em>. Under <span class="scwindow">IP restrictions</span>, click <span class="scwindow">Configure IP restrictions</span>. You can add a rule by specifying an IP address, or an IP address range, and providing a subnet mask. </p><p><img src="/~/media/0B365F74E7F44E2E92B3F5E8AD1FF19D.ashx?la=en" height="388" width="450" alt="A screenshot of a cell phone Description generated with very high confidence" title="" class="documentimage" doc-fancy-image=""></p><p>Sitecore instances such as Azure Web Apps or on-premise ASP.Net applications (specifically in Sitecore 9 topologies) reference each other with connection strings in configuration files. This means that if you enable IP whitelisting for specific Sitecore instances, you must also whitelist the outbound IP address of that Sitecore instance, (and <em class="scemphasis">all</em> other instances it references). </p><p>For example, if your content delivery role references three Sitecore instances (such as, the xConnect collection, xDB reference data, and Marketing automation), then you must whitelist the outbound IP address of your content delivery instance for all three instances. </p><p>The component references that your instance has will vary based on factors such as topology and size. Sitecore Managed Cloud offers various Sitecore products and topologies of different sizes on Azure. Due to different architecture and scaling properties, these component references and connection strings can vary from one product to another. </p><p>You can use the <code class="sccode">GetConnectionString.ps1</code> PowerShell script to find the component references of your Sitecore instances on Azure, and then apply IP whitelisting as described previously. </p><p>The PowerShell script requires values for the following parameters:</p><p class="scbullet2ndlevel"><code class="sccode">Resource Group Name</code> - the name of the resource group that contains the Managed Cloud set. </p><p class="scbullet2ndlevel"><code class="sccode">Subscription ID</code> - the GUID of the Azure subscription that contains the Resource Group </p><p>The script generates JSON code similar to the following example: </p><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">{</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;test-whitelisting-9x-131490-cm&quot;: {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">&quot;ReferencedWebAppsComponents&quot;: [</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;ConnectionStringName&quot;: &quot;xconnect.collection&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppUrl&quot;: &quot;https://test-whitelisting-9x-131490-xc-search.azurewebsites.net&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppName&quot;: &quot;test-whitelisting-9x-131490-xc-search&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> },</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;ConnectionStringName&quot;: &quot;xdb.referencedata.client&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppUrl&quot;: &quot;https://test-whitelisting-9x-131490-xc-refdata.azurewebsites.net&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppName&quot;: &quot;test-whitelisting-9x-131490-xc-refdata&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> },</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;ConnectionStringName&quot;: &quot;reporting.apikey&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppUrl&quot;: &quot;https://test-whitelisting-9x-131490-rep.azurewebsites.net&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppName&quot;: &quot;test-whitelisting-9x-131490-rep&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> },</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;ConnectionStringName&quot;: &quot;xdb.marketingautomation.reporting.client&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppUrl&quot;: &quot;https://test-whitelisting-9x-131490-ma-rep.azurewebsites.net&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppName&quot;: &quot;test-whitelisting-9x-131490-ma-rep&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> },</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> </code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> {</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;ConnectionStringName&quot;: &quot;xdb.marketingautomation.operations.client&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppUrl&quot;: &quot;https://test-whitelisting-9x-131490-ma-ops.azurewebsites.net&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppName&quot;: &quot;test-whitelisting-9x-131490-ma-ops&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> }</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> ],</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;WebAppName&quot;: &quot;test-whitelisting-9x-131490-cm&quot;,</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint"> &quot;OutboundIpAddresses&quot;:&quot;52.230.1.186,52.230.15.158,52.230.7.174,52.230.11.232,52.230.7.87&quot;</code></pre><pre class="codesnippet" ng-non-bindable=""><code class="prettyprint">}</code></pre><p>This example shows a portion of the complete output file. Depending on the Sitecore product and topology, the number of resources in an output file can vary considerably. Therefore, remember to whitelist all the roles if they reference any components. </p><p>In this example, the Content Management role references five other instances. This means that you must whitelist the outbound IP addresses of Content Management in all five instances.</p><p>This specific example is for Sitecore products that all have components hosted on Azure. Some roles of other topologies, such as xDB, can have instances hosted on Azure, or on on-premise servers. In that case, you must whitelist the IP address for that particular component, whether hosted on Azure or on-premise servers.</p><p>For xDB, the on-premise XMcontent management role references the <em class="scemphasis">xdb.referencedata.client</em> role that is hosted on Azure. Therefore, you must whitelist the IP address of the server that is hosting the Content Management role in the <em class="scemphasis">xdb.referencedata.clien</em>t Azure Web app. In <a href="https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/sitecore_on_azure/deploying/configure_sitecore_90_for_xdb_cloud">Configure Sitecore 9.0 for xDB on Azure</a>, you can learn how to configure the Content Delivery and Content Management roles for the Managed Cloud xDB set.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">The <code class="sccode">reporting.apikey</code> connection string corresponds to the key used by the Sitecore Reporting role to authenticate incoming requests. In the Reporting Web App, you must whitelist the IP address of any Sitecore role that references the <code class="sccode">reporting.apikey</code> connection string.</p></section></div><h2 class="heading2" expand-collapse="" id="_Configuring_an_IP_1"><bookmark></bookmark>Configuring an IP whitelist for a SQL server firewall</h2><div class="collapsable"><p>If your Sitecore on Azure solution uses Microsoft SQL Server, then you must explicitly whitelist the IP addresses of the computers that need to access the databases on the server. Otherwise, the SQL Server firewalls will prevent all access. You can configure the SQL Server firewall permissions and rules in any of the following ways: </p><ul><li><em class="scemphasis">Allow access to Azure services</em> - this allows <em class="scemphasis">any</em> Azure resource to gain access through the firewall. This includes the Azure resources that are in subscriptions owned by other organizations. </li><li><em class="scemphasis">Disable access to Azure services</em> - this option requires you to explicitly whitelist the IP addresses associated with the computers and resources on Azure that require access to the SQL server. This procedure varies from one Sitecore version to another and from one topology to another. </li><li><em class="scemphasis">Specify the machine IP address for the Azure SQL Server firewall</em> - for on-premise instances that connect to databases on Azure. For Azure SQL server, you must whitelist the IP addresses of on-premise machines by <a href="https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/sitecore_on_azure/deploying/configure_sitecore_90_for_xdb_cloud">configuring the Content Delivery and Content Management roles for the Managed Cloud xDB set</a>. The Azure SQL server firewall contains the databases that the connection strings of client instances reference. This is where you must whitelist the client IP address. </li><li><em class="scemphasis">Whitelisting resources, specifically Web Apps on Azure</em> - for each Sitecore web application running Sitecore on Azure, use the <code class="sccode">GetConnectionString.ps1</code> PowerShell script to list all the connection strings of the database. The script generates the list in a JSON file and requires values for the following parameters:<ul class="scbullet2ndlevel"><li><code class="sccode">The Resource Group Name</code> - The name of the Resource Group that contains the Managed Cloud set. </li><li><code class="sccode">The Subscription ID</code> - The GUID of the Azure subscription that contains the Resource Group. </li></ul><p>The PowerShell script generates the following JSON code:</p><pre class="codesnippet"><code class="prettyprint">&quot;test9xbd-113010-rep&quot;: {</code></pre><pre class="codesnippet"><code class="prettyprint"> &quot;connectionStrings&quot;: </code></pre><pre class="codesnippet"><code class="prettyprint"> [</code></pre><pre class="codesnippet"><code class="prettyprint"> {</code></pre><pre class="codesnippet"><code class="prettyprint" id="_GoBack"> &quot;name&quot;: &quot;core&quot;,</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;initialcatalog&quot;: &quot;test9xbd-113010-core-db&quot;, </code></pre><pre class="codesnippet"><code class="prettyprint">&quot;datasource&quot;: &quot;test9xbd-113010-sql.database.windows.net,1433&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> },</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;name&quot;: &quot; master &quot;,</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;initialcatalog&quot;: &quot;test9xbd-113010-master-db&quot;,</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;datasource&quot;: &quot;test9xbd-113010-sql.database.windows.net,1433&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> },</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;name&quot;: &quot;web&quot;,</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;initialcatalog&quot;: &quot; test9xbd-113010-web-db&quot;, </code></pre><pre class="codesnippet"><code class="prettyprint">&quot;datasource&quot;: &quot;test9xbd-113010-sql.database.windows.net,1433&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> },</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;name&quot;: &quot;reporting&quot;,</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;initialcatalog&quot;: &quot; test9xbd-113010-rep-db&quot;, </code></pre><pre class="codesnippet"><code class="prettyprint">&quot;datasource&quot;: &quot;test9xbd-113010-sql.database.windows.net,1433&quot;</code></pre><pre class="codesnippet"><code class="prettyprint"> },</code></pre><pre class="codesnippet"><code class="prettyprint"> ]</code></pre><pre class="codesnippet"><code class="prettyprint"> </code></pre><pre class="codesnippet"><code class="prettyprint">&quot;OutboundIpAddresses&quot;: &quot;104.43.16.94,104.43.20.5,104.43.13.79,207.46.235.213&quot;</code></pre></li></ul><p>This code sample lists the connection string to the databases of a SQL server that a reporting Web App is referencing. You must specify the Outbound IP addresses of a reporting Web App in the SQL server firewall. To do so:</p><ul><li>Specify an IP address or a range of start and end IP addresses for IP whitelisting, using the <a href="https://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-configure">Microsoft Azure firewall guidelines</a>. </li><li><a href="https://docs.microsoft.com/en-us/azure/sql-database/sql-database-vnet-service-endpoint-rule-overview">Configure virtual networks</a>. Virtual network rules control whether the Azure SQL Database server accepts communications sent from specific subnets in virtual networks. </li></ul><p id="_Considerations"><bookmark></bookmark></p></div>Fri, 24 Aug 2018 10:57:37 +0200{42405F02-3BAD-4D48-B6CC-09E1B1B0A856}https://doc.sitecore.net/en/Products/Managed_Cloud/10/Sitecore_Managed_Cloud_overview/Sitecore_Experience_Platform_behavior_on_Azure.aspxSitecore Experience Platform behavior on Azure<p>For most aspects of Sitecore development, all standard Sitecore facilities, operations, and requirements work in the same way on Azure as they do when Sitecore runs on an on-premise server. With Managed Cloud, Sitecore maintains the platform, so you can focus on implementing your solution.</p><p>From Sitecore 8.2 Update-1 and later, the Sitecore Experience Platform is released ready for deployment into Azure Web Apps. The Sitecore platform architecture creates a similar experience for Sitecore customers using the platform, whether in the Cloud or on-premise. This approach guarantees that all platform features, configuration settings, security, API, and scaling options apply to both Sitecore on-premise and Sitecore deployed in Azure Web Apps, (regardless of whether you deploy Sitecore through the Managed Cloud service, manually, by using the Sitecore Azure Toolkit, or through the Azure Marketplace). </p><p>Learn more about <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/02/15/47/Introducing_the_Sitecore_Managed_Cloud_service.aspx">the Sitecore Managed Cloud service</a> and <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/02/02/14/35/Deploying_your_Sitecore_customizations_with_Microsoft_Azure.aspx">deploying your customizations with Microsoft Azure</a> on the <a href="https://doc.sitecore.net/">Sitecore Doc site</a> or on the <a href="https://kb.sitecore.net/">Sitecore Knowledge Base</a>.</p><h2 class="heading2" expand-collapse="">Integration</h2><div class="collapsable"><p>The default Sitecore setup in Azure connects Sitecore to appropriate Azure PaaS services such as Azure Search, Azure Redis (for session state), and Application Insights, (for logging, monitoring, and performance counters). </p><p id="_GoBack">Sitecore patches configuration files to integrate into each of these services, which means that it is very simple to swap out some of the services if you want to. The only exception is the <a href="https://kb.sitecore.net/articles/768387">Sitecore Platform parts compatibility</a><u>.</u><bookmark></bookmark></p></div>Thu, 23 Aug 2018 10:50:58 +0200{8B963EA6-96EF-4577-BA02-3489479A7928}https://doc.sitecore.net/en/Products/Sitecore_Experience_Accelerator/17/Working_with_content/Composites/Configure_a_snippet.aspxConfigure a snippet<p>Snippets enable content editors to work more efficiently by reusing predefined sets of renderings on site pages. You can specify the behavior of snippets reuse in the Content Editor. For example, whether you allow content editors to duplicate and change the snippet locally.</p><p>To configure a snippet:</p><ol><li>Navigate to the <em class="scemphasis">Data</em> folder of the site, right-click <span class="scwindow">Snippet</span>, and click <span class="scwindow">Snippet Item</span>.</li><li>In the <span class="scwindow">Datasource configuration</span> section, in the <span class="scwindow">Global data source selection behavior </span>field, select one of the following options:<ul class="scbullet2ndlevel"><li><span class="scwindow">Do not copy</span> – The default setting. The snippet uses a globally assigned data source. The source of the content is in the site data folder. When you reuse this snippet on different pages and then change it, all instances of the snippet on all pages are updated automatically. </li><li><span class="scwindow">Copy global data source to local context upon selection </span>– A copy of the snippet, its configuration, and content are added to the page. Changes made to the snippet are only applied for that specific page.</li><li><span class="scwindow">Ask user whether the copy of global data source to local context is required upon selection </span>– This option allows the content editor to choose how to reuse the snippet and displays the following message in the Experience Editor:<p id="_GoBack"><bookmark></bookmark><img src="~/media/E5E16EB6C5A94730BB3A0DAB133E4E73.ashx" height="163" width="343" alt="Picture 5" title="" class="documentimage" doc-fancy-image=""></p></li></ul></li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you do not see the <span class="scwindow">Datasource</span> <span class="scwindow">configuration</span> section, you must add the <em class="scemphasis">Global Datasource Behavior</em> template to the snippet item. To do this, navigate to the <em class="scemphasis">Templates</em> folder and go to <code class="sccode">Feature/Composite/Datasource/Snippet/Snippet Item</code> and in the <span class="scwindow">Data</span> section add the <em class="scemphasis">Global Datasource Behavior</em> template <code class="sccode">(/sitecore/system/Settings/Foundation/Experience Accelerator/Local Datasources/Enums/Datasource Selection Behavior</code>).</p></section><p>Wed, 22 Aug 2018 10:53:27 +0200{C1156D70-BDE8-48B0-8F7B-72207E9F590F}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Sitecore_on_Azure/Analytics/Configure_Application_Insights_post_deployment.aspxConfigure Application Insights post deployment<p>Microsoft charges for Application Insights based on the amount of data that Application Insights collects. Depending on the topology and SKU size, Sitecore deploys environments with either a <a href="https://kb.sitecore.net/articles/362749">Basic or an Enterprise pricing plan</a>. </p><p>To avoid unexpected bills and limit costs, Microsoft sets a configurable daily cap on the amount of data collected. If you reach that cap, the Application Insights service stops saving the telemetry data and Microsoft sends a warning email message so that you can extend it if necessary. Microsoft stores the collected data for 90 days before discarding it; therefore, it is useful to set up a continuous export to ensure the data persists.</p><p>Sitecore deployments that use either the Sitecore Azure toolkit or Azure Marketplace, including Managed Cloud and self-managed Azure customers, are set up with an Application Insights <a href="https://kb.sitecore.net/articles/362749">standard daily cap</a> of 100GB per day. This is by default. Sitecore is configured by default to gather telemetry information, which it submits to Application Insights. The combination of these configurations means that, depending on use, the standard deployment can potentially reach the daily cap. Therefore, to lower costs, you can reduce the amount of data that Sitecore is logging or, to ensure Sitecore continues logging data, increase the daily cap. </p><p>This topic describes how to:</p><ul><li><a href="#_Reduce_the_Sitecore" go-to-section="">Reducing the Sitecore telemetry logging</a></li><li><a href="#_Increase_the_Daily" go-to-section="">Increasing the daily cap</a></li><li><a href="#_Exporting_logs_continuously" go-to-section="">Exporting logs continuously to a blob storage</a></li><li><a href="#_Using_activity_logs" go-to-section="">Using activity logs</a></li></ul><h2 class="heading2" expand-collapse="" id="_Reduce_the_Sitecore"><bookmark></bookmark>Reducing the Sitecore telemetry logging </h2><div class="collapsable"><p>You can use the Microsoft App Service Editor &#174;, (formerly Visual Studio Online (Monaco)), to reduce the amount that Sitecore logs for Application Insights on a counter-by-counter basis.</p><p>To use the Microsoft App Service to reduce or configure the performance counters being logged:</p><ol><li>Log in to the Azure portal with an account that has access to the subscription that hosts the app services where your Sitecore solution is deployed.</li><li>In <span class="scwindow">Microsoft Azure</span>, <span class="scwindow">All resources</span>, <span class="scwindow">Resources groups</span>, click the relevant resource group to open the App Service for your <em class="scemphasis">Content Management</em> role. <p><img src="/~/media/41CF8590A31D49DDB0B3146B4E7A3BCA.ashx?la=en" height="335" width="574" alt="Cloud_SitecoreAzureToolkit_OpenAnAppService_screenshot" title="Open an App Service" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">App Service</span> menu, <span class="scwindow">Development Tools</span>, click <span class="scwindow">App Service Editor</span>.<p><img src="/~/media/2790B09ABC6447A8AC8C0BFA81ABD9F8.ashx?la=en" height="332" width="574" alt="Picture 6" title="" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">App Service Editor</span>, navigate to <span class="scwindow">WWWROOT</span><code class="sccode">, </code><span class="scwindow">App_Config</span><code class="sccode">, </code><span class="scwindow">Include</span><code class="sccode">, </code><span class="scwindow">zzz</span>. Open<code class="sccode"> the Sitecore.Cloud.ApplicationInsights.config</code> file and scroll to the <code class="sccode">counterLoader</code> section.<p><img src="/~/media/E34E92D694B6464681B266E8F9ABBD7F.ashx?la=en" height="326" width="574" alt="Cloud_SitecoreAzureToolkit_CounterLoader_screenshot" title="Counter Loader" class="documentimage" doc-fancy-image=""></p></li><li>Edit the file and remove any <code class="sccode">&lt;add category=”…</code> entries for the performance counters that you no longer want to record in Application Insights. Alternatively, you can reduce the telemetry to the lowest possible throughput by removing all <code class="sccode">&lt;add category=”…</code> entries.</li><li>Repeat steps 1 to 5 for the <em class="scemphasis">Content Delivery</em>, <em class="scemphasis">Processing</em>, and <em class="scemphasis">Reporting</em> App Services roles.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Increase_the_Daily"><bookmark></bookmark>Increasing the daily cap</h2><div class="collapsable"><p>To modify the Application Insights Daily Cap:</p><ol><li>Log in to the Azure portal with an account that has access to the subscription that hosts the app services where your Sitecore solution is deployed.</li><li>In <span class="scwindow">Microsoft Azure</span>, <span class="scwindow">All resources</span>, click the relevant resource group to open the Application Insights resource.<p><img src="/~/media/EEDA7782FF02408EAAD061D280378C8A.ashx?la=en" height="308" width="601" alt="Cloud_SitecoreAzureToolkit_ResourcesGroup_screenshot" title="Resources Group" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Application Insights</span> menu, under <span class="scwindow">Configure</span>, <span class="scwindow">Usage and estimated costs</span>, click <span class="scwindow">Daily cap</span>.<p><img src="/~/media/A54C9D647EB2434F9A9DDB498A4E8D68.ashx?la=en" height="303" width="602" alt="Cloud_SitecoreAzureToolkit_DailyCaps_screenshot" title="Daily Caps" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Daily volume cap</span> dialog box, adjust the properties to match the Application Insights data volume requirements for your Sitecore Installation. </li><li>Click <span class="scwindow">OK,</span> to apply the changes and close the form.<p><img src="/~/media/5BB59F866BD24774A106944B4B841A0A.ashx?la=en" height="378" width="348" alt="Cloud_SitecoreAzureToolkit_DailyVolumeCap_screenshot" title="Daily volume cap" class="documentimage" doc-fancy-image=""></p></li></ol><section class="note"><p class="scnoteheader"> Note</p><p class="scnotebody" id="_GoBack">The daily cap is set for the entire Application Insights service, regardless of the number of exporting <bookmark></bookmark>nodes. The maximum daily limit that you can set is 1,000GB.</p></section><p><img src="/~/media/6311AC8788D8418F9C7AE5081F4610EF.ashx?la=en" height="351" width="624" alt="DataSampling_Cloud_SitecoreOnAzure_screenshot" title="Data Sampling" class="documentimage" doc-fancy-image=""></p><p>To capture more errors in your data samples, go to the <span class="scwindow">Data sampling</span> drop down list and select <span class="scwindow">All data (100%)</span>.</p><p><img src="/~/media/29648A0BDF9D41DBB29012E978D784A1.ashx?la=en" height="294" width="470" alt="DataSampling100Percent_Cloud_SitecoreOnAzure_screenshot" title="Data sampling 100%" class="documentimage" doc-fancy-image=""></p></div><h2 class="heading2" expand-collapse="" id="_Exporting_logs_continuously"><bookmark></bookmark>Exporting logs continuously to a blob storage</h2><div class="collapsable"><p>If you must store data longer than the data retention period, it is a good idea to <a href="https://docs.microsoft.com/en-us/azure/application-insights/app-insights-export-telemetry">set up continuous export of your data to a blob storage account</a>. This means that all the telemetry will be copied there and stored for as long as you need it.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Continuous Export can incur additional charges, in addition to storage costs. Check Application Insights Pricing.</p></section></div><h2 class="heading2" expand-collapse="" id="_Using_activity_logs"><bookmark></bookmark>Using activity logs</h2><div class="collapsable"><p><a href="https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-activity-logs">An activity log</a> describes what happens to resources in your subscription when someone is working with the Azure Platform. This. includes: who was working with the platform, what activities occurred, and when. You can also see the status of operations applied to services. </p><p>There are many different categories of activity logs:</p><ul><li><span class="scwindow">Administrative</span> - Contains a record of all <em class="scemphasis">create</em>, <em class="scemphasis">update</em>, <em class="scemphasis">delete</em>, and <em class="scemphasis">action</em> operations performed through Resource Manager. The Administrative category also includes any changes to role-based access control in a subscription.</li><li><span class="scwindow">Service Health</span> - Contains a record of any service health incidents that occurred in Azure. </li><li><span class="scwindow">Alert</span> - Contains a record of every time an Azure alert is activated. For example, if the %CPU time of a resource ran over 80%. You can create your own alert rules then receive notifications if they are activated. </li><li><span class="scwindow">Autoscale</span> - Contains the record of any events related to the operation of the autoscale engine. This is based on any autoscale settings you defined in your subscription. </li><li><span class="scwindow">Recommendation</span> - This category contains <em class="scemphasis">recommendation</em> events from Azure Advisor.</li><li><span class="scwindow">Security</span> - Contains a record of any alerts generated by the Azure Security Center.</li><li><span class="scwindow">Policy and Resource Health</span> – These are reserved categories and currently do not contain any records.</li></ul><section class="note"><p class="scnoteheader">Important</p><p class="scnotebody">Similar to Application Insights, the data stored in Activity Logs is only kept for 90 days. If you want to access it for longer than 90 days, you can archive the Azure Activity Log.</p></section></div>Wed, 22 Aug 2018 08:49:43 +0200{713C85BD-E116-4473-BA5A-B3ABAA279E31}https://doc.sitecore.net/en/Products/xDB_Cloud/20/Working_with_xDB_Cloud/Configuring/Configure_a_Sitecore_xDB_Cloud_connection.aspxConfigure a Sitecore xDB Cloud connection<p>Sitecore xDB Cloud comes with open tenancy improvements for increased privacy in the Cloud. You can connect to xDB Cloud by following the standard Sitecore configuration guidelines.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Before configuring Sitecore for xDB Cloud 2.0, you must ensure that you are running Sitecore 8.0 or later and you must upgrade to the latest supported update for the Sitecore version that you are running. See the <a href="https://kb.sitecore.net/articles/966080">xDB Cloud service compatibility tables</a> for the list of versions that are supported by the xDB Cloud service for new xDB Cloud customer sets.</p></section><p>This topic describes how to:</p><ul><li><a href="#_Request_the_xDB" go-to-section="">Request the xDB Cloud 2.0 customer set</a></li><li><a href="#_Prepare_a_local" go-to-section="">Prepare a scaled on-premise Sitecore environment</a></li><li><a href="#_Prepare_a_standalone" go-to-section="">Prepare a standalone Sitecore instance</a></li><li><a href="#_Upgrade_the_xDB" go-to-section="">Upgrade the xDB Cloud components</a></li><li><a href="#_Configure_the_xDB" go-to-section="">Configure the xDB Cloud client and connection to the xDB Cloud service</a></li><li><a href="#_Configure_xDB_Cloud" go-to-section="">Configure xDB Cloud indexing</a></li><li><a href="#_Configure_Lucene_for" go-to-section="">Configure Lucene for content search</a></li><li><a href="#_Configure_Solr_for" go-to-section="">Configure Solr for content search</a></li><li><a href="#_Deploy_marketing_definitions" go-to-section="">Deploy marketing definitions</a></li></ul><h2 class="heading2" expand-collapse="" id="_Pre_requisites" id="_Prerequisites" id="_Request_the_xDB"><bookmark></bookmark><bookmark></bookmark><bookmark></bookmark>Request the xDB Cloud 2.0 customer set</h2><div class="collapsable"><p>To request an xDB Cloud 2.0 customer set, <a href="https://kb.sitecore.net/articles/654910">register a support ticket through the Sitecore Support portal</a>. If you do not have a valid Sitecore certification you must contact your Sitecore Implementation Partner to register the support ticket for you. If this is not possible, contact your Sitecore representative to access the Sitecore Support portal. Ensure that you include:</p><ul><li>Your License ID.</li><li>Your deployment ID.</li><li>The version of Sitecore that you are running.</li><li>The preferred location for your xDB Cloud environment. See the xDB Cloud Service compatibility tables for <a href="https://kb.sitecore.net/articles/966080">compatible data center locations</a>. </li><li>You will receive the following from Sitecore Support:<ul class="scbullet2ndlevel"><li>MongoDB connection strings: <code class="sccode">analytics</code>, <code class="sccode">tracking.live</code>, <code class="sccode">tracking.history</code>, <code class="sccode">tracking.contact.</code></li><li><code class="sccode">Reporting API key (for Sitecore 8.2 Update-1 and later.</code></li><li>A Search index connection string: For Sitecore 8.2 Initial release:<code class="sccode"> analytics.cloud.index</code>, or for Sitecore 8.2 Update-1 and later: <code class="sccode">cloud.search.</code></li><li>Reporting service settings, including the address of the service and the thumbprint of the SSL certificate.</li></ul><section class="note"><p class="scnoteheaderindent">Important</p><p class="scnotebodyindent">Save these details because you will need them when you configure xDB on your Sitecore instances.</p></section></li></ul></div><h2 class="heading2" expand-collapse="" id="_Prepare_a_local" id="_Prepare_a_scaled"><bookmark></bookmark><bookmark></bookmark>Prepare a scaled on-premise Sitecore environment</h2><div class="collapsable"><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">This procedure describes how to prepare a local Sitecore environment. To <a href="#_Prepare_a_standalone" go-to-section="">prepare a standalone Sitecore instance</a><u>,</u> skip to the next section.</p></section><p>The Sitecore xDB Cloud service for 2.0 supports scaled Content Management (CM) and Content Delivery (CD) servers. You do not need to set the database connection strings at this stage because you do it later when you <a href="#_Configure_the_xDB" go-to-section="">configure the xDB Cloud client and connection to the xDB Cloud service</a>. </p><p>To prepare a local scaled on-premise Sitecore environment: </p><ol><li>Download the spreadsheet that lists of all the configuration files that you must enable or disable for each server type. <ul> <li>For Sitecore 8.0, refer to the <a href="https://doc.sitecore.net/sitecore_experience_platform/80/setting_up_and_maintaining/xdb/configuring_servers/configure_a_content_delivery_server#_Files_to_enable_2">table of files to enable or disable to configure a Content Delivery server</a>.</li> <li>For Sitecore 8.1, Update 1, and Update 2, download the <a href="https://doc.sitecore.net//~/media/6F7BAEE97BDC4BE0AC149E8767684918.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.1</a>.</li> <li>For Sitecore 8.1 Update 3, download the <a href="https://doc.sitecore.net//~/media/11D14B0134D24C4983E56D0B4E24EA74.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.1 Update 3</a>.</li> <li>For Sitecore 8.2, download the <a href="https://doc.sitecore.net//~/media/8EF47E1F5FA146F59B4AD160F86BBDD9.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.2 initial release</a>.</li> <li>For Sitecore 8.2 Update 1, download the <a href="https://doc.sitecore.net//~/media/BD14A86DCDEE490186F7DEEEFB32A2AB.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.2 Update 1</a>.</li> <li>For Sitecore 8.2 Update 2, Update 3, Update 4, and Update 5, download the <a href="https://doc.sitecore.net//~/media/FE19CE65CAD44D26B3878C70EDEE8719.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.2 Update 2-5</a>.</li> <li>For Sitecore 8.2 Update 6 and Update 7, download the <a href="https://doc.sitecore.net//~/media/7FC2B38AB608457A87DBF3EF0085AAEE.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.2 Update 6-7</a>.</li> </ul> </li><li>Configure the CD servers, by following the instructions in the <a href="https://doc.sitecore.net/sitecore_experience_platform/82/setting_up_and_maintaining/xdb/configuring_servers/configure_a_content_delivery_server">Configure a content delivery server</a> topic. However, you must also:<ul class="scbullet2ndlevel"><li>Go to the <span class="scwindow">Configure a content delivery server</span> section and follow the instructions. Skip the steps that require you to set the database connection strings for MongoDB.</li><li>In the <span class="scwindow">Config enable disable</span><em class="scemphasis"> </em>spreadsheet, consult the <span class="scwindow">Content Delivery (CD)</span> column and ensure that the relevant configuration files are enabled and disabled.</li><li>Refer to the <span class="scwindow">Changes to configuration file settings</span> table and update the parameter values of your configuration files accordingly. </li></ul></li><li>Configure the CM servers, by following the instructions in the <a href="https://doc.sitecore.net/sitecore_experience_platform/82/setting_up_and_maintaining/xdb/configuring_servers/configure_a_content_management_server_to_use_a_remote_reporting_service_server">Configure a content management server topic</a>. However, you must also:<ul class="scbullet2ndlevel"><li>Go to the <span class="scwindow">Configure a content management server</span> section and follow the instructions. Skip the steps that require you to set the database connection strings for MongoDB.</li><li>In the <span class="scwindow">Config enable disable</span> spreadsheet, consult the <span class="scwindow">Content Management (CM)</span> column and ensure that the relevant configuration files are enabled and disabled.</li></ul></li></ol></div><h2 class="heading2" expand-collapse="" id="_Prepare_a_standalone"><bookmark></bookmark>Prepare a standalone Sitecore instance</h2><div class="collapsable"><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">This procedure describes how to prepare a standalone Sitecore environment. To <a href="#_Prepare_a_local" go-to-section="">prepare a scaled on-premise Sitecore environment</a>, see the previous section.</p></section><p>For development and demonstrations purposes, you can configure a standalone instance of Sitecore to use with xDB Cloud 2.0. Ensure that you use dedicated CD and CM instances in your production environment.</p><p>To use a Sitecore standalone instance with xDB Cloud 2.0:</p><ol><li>Ensure that the following configuration files are disabled or removed from your local installation by adding <code class="sccode">.disabled</code> to the end of the file name.<table class="table"><tbody><tr><th style="width: 30%;"><p><span class="scwindow">File path (relative to the website root)</span></p></th><th style="width: 69%;"><p><span class="scwindow">Configuration file name</span></p></th></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code></p></td><td><p><code class="sccode">Sitecore.Analytics.Processing.Aggregation.Services.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code></p></td><td><p><code class="sccode">Sitecore.Analytics.Processing.Services.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code></p></td><td><p><code class="sccode">Sitecore.Analytics.Tracking.Database.ScaledCM.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code></p></td><td><p><code class="sccode">Sitecore.MarketingProcessingRole.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code></p></td><td><p><code class="sccode">Sitecore.PathAnalyzer.Processing.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code>/<code class="sccode">CES</code></p></td><td><p><code class="sccode">Sitecore.CES.DeviceDetection.CheckInitialization.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code>/<code class="sccode">ContentTesting</code></p></td><td><p><code class="sccode">Sitecore.ContentTesting.Processing.Aggregation.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code>/<code class="sccode">ExperienceAnalytics</code></p></td><td><p><code class="sccode">Sitecore.ExperienceAnalytics.Aggregation.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code>/<code class="sccode">ExperienceAnalytics</code></p></td><td><p><code class="sccode">Sitecore.ExperienceAnalytics.ReAggregation.config</code></p></td></tr><tr><td><p>/<code class="sccode">App_Config</code>/<code class="sccode">Include</code>/<code class="sccode">ExperienceAnalytics</code></p></td><td><p><code class="sccode">Sitecore.ExperienceAnalytics.StorageProviders.config</code></p></td></tr><tr><td><p><code class="sccode">/App_Config/Include/ExperienceAnalytics</code></p></td><td><p><code class="sccode">Sitecore.ExperienceAnalytics.Reduce.config</code></p></td></tr></tbody></table></li><li>Follow all of the instructions in the <a href="https://doc.sitecore.net/sitecore_experience_platform/82/setting_up_and_maintaining/xdb/configuring_servers/configure_a_content_management_server_to_use_a_remote_reporting_service_server">Configure a content management server to use a remote Reporting Service server</a><u> topic</u>. Ensure you enable and disable your configuration files according to the table in the <span class="scwindow">Configure Path Analyzer</span> section.</li></ol></div><h2 class="heading2" expand-collapse="" id="_Upgrade_the_xDB"><bookmark></bookmark>Upgrade the xDB Cloud components</h2><div class="collapsable"><p>To upgrade the xDB Cloud components, you must connect to xDB Cloud and then use the wizard to install the package:</p><ol><li> To connect to xDB Cloud 2.0, <a href="https://dev.sitecore.net/Downloads.aspx">upgrade the xDB Cloud client components</a> on your Sitecore installation. </li><li>In the xDB Cloud Service compatibility tables, check the <a href="https://kb.sitecore.net/articles/966080">Compatible xDB Cloud Client versions</a> to ensure the relevant xDB Cloud Client version is installed on your server. </li><li> To install the Cloud components package, in the <em class="scemphasis">XdbCloud</em> folder (<em class="scemphasis">Website</em><code class="sccode">/</code><em class="scemphasis">App_Config</em><code class="sccode">/</code><em class="scemphasis">Include</em>), delete the following files (iIf they already have the <code class="sccode">.disabled</code> extension, it is a good idea to delete them at this point).<ul class="scbullet2ndlevel"><li><code class="sccode">Sitecore.Cloud.Xdb.config</code></li><li><code class="sccode">Sitecore.ContentSearch.Cloud.Index.Analytics.config</code></li><li><code class="sccode">Sitecore.ContentSearch.Cloud.Default.IndexConfiguration.config</code></li></ul><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent" id="_GoBack"><bookmark></bookmark>If you do not have the <em class="scemphasis">XdbCloud</em> folder in <em class="scemphasis">Website</em><code class="sccode">/</code><em class="scemphasis">App_Config</em><code class="sccode">/</code><em class="scemphasis">Include</em>, then you do not need to perform this step. </p></section></li><li>Use the Sitecore <span class="scwindow">Installation Wizard</span> to install the package.<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">Sitecore Experience Platform 8.2 rev. 160729 (8.2 Initial Release) includes xDB Cloud client files and does not require a separate download of the xDB Cloud client package.</p></section></li></ol></div><h2 class="heading2" expand-collapse="" id="_Configure_the_xDB"><bookmark></bookmark>Configure the xDB Cloud client and connection to the xDB Cloud service</h2><div class="collapsable"><p>When the CD and CM instances are installed and configured, the next stage is to configure them to communicate with dedicated Azure services of Sitecore xDB Cloud.</p><p>To configure the xDB Cloud client and connection:</p><ol><li>In the <code class="sccode">ConnectionStrings.config</code> file (<em class="scemphasis">Website/App_Config</em>), configure the following MongoDB database <a href="https://doc.sitecore.net/sitecore_experience_platform/82/setting_up_and_maintaining/xdb/configuring_servers/database_connection_strings_for_configuring_servers">connection strings</a> using the connection strings from the response that you received from Sitecore Support.<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">For a CD instance, you do not require the <code class="sccode">tracking.history</code> connection string. After completing step 1, you can skip to step 4.</p></section><p>The MongoDB connection strings,</p><ul class="scbullet2ndlevel"><li><code class="sccode">analytics</code></li><li><code class="sccode">tracking.live</code></li><li><code class="sccode">tracking.history </code></li><li><code class="sccode">tracking.contact</code> </li></ul></li><li>In the <code class="sccode">ConnectionStrings.config</code> file (<em class="scemphasis">Website/App_Config</em>), <ul class="scbullet2ndlevel"><li>For Sitecore 8.2 Update-1 and later: add the <em class="scemphasis">Search index and Reporting API key</em> connection string from the response that you received from Sitecore Support. For example:</li></ul><p><code class="sccode">&lt;add name=&quot;cloud.search&quot; connectionString=&quot;[</code><em class="scemphasis">cloud.search connection string</em><code class="sccode">]&quot;/&gt;</code></p><p><code class="sccode">&lt;add name=&quot;reporting.apikey&quot; connectionString=&quot;[</code><em class="scemphasis">reportingapikey</em><code class="sccode">]&quot;/&gt;</code></p><ul class="scbullet2ndlevel"><li>For versions prior to 8.2 Update-1: add the Cloud Search index connection string from the response that you received from Sitecore Support. For example:</li></ul><p><code class="sccode">&lt;addname=&quot;analytics.cloud.index&quot; connectionString=&quot;[</code><em class="scemphasis">analytics.cloud.index connection string</em><code class="sccode">]&quot;/&gt;</code></p><section class="note"><p class="scnoteheaderindent">Note </p><p class="scnotebodyindent">You must use the <em class="scemphasis">actual</em> connection strings from the response you received from Sitecore Support.</p></section></li><li>In the <code class="sccode">ConnectionStrings.config</code> file (<em class="scemphasis">Website/App_Config</em>), ensure the following connection string is removed:<p><code class="sccode">&lt;add name=&quot;reporting&quot; connectionString=&quot;Data Source=…&quot;/&gt;</code></p></li><li>For versions 8.2 Update-1 and later, enable the following configuration files:<ul class="scbullet2ndlevel"><li><code class="sccode">Website/App_Config/Include/XdbCloud/Sitecore.Cloud.Xdb.config</code></li><li><code class="sccode">Website/App_Config/Include/Sitecore.ContentSearch.Azure.Index.Analytics.config</code></li><li><code class="sccode">Website/App_Config/Include/Sitecore.ContentSearch.Azure.DefaultIndexConfiguration.config</code></li></ul></li><li>For versions prior to 8.2 Update-1, enable the following configuration files:<ul class="scbullet2ndlevel"><li><code class="sccode">Website/App_Config/Include/XdbCloud/Sitecore.Cloud.Xdb.config</code></li><li><code class="sccode">Website/App_Config/Include/XdbCloud/Sitecore.ContentSearch.Cloud.DefaultIndexConfiguration.config</code></li><li><code class="sccode">Website/App_Config/Include/XdbCloud/Sitecore.ContentSearch.Cloud.Index.Analytics.config</code></li></ul></li><li>Disable the following configuration files in the <span class="scwindow">Xdb Cloud</span> folder:<ul class="scbullet2ndlevel"><li><code class="sccode">Website/App_Config/Include/Sitecore.ContentSearch.Lucene.Index.Analytics.config</code>or<code class="sccode"> Website/App_Config/Include/Sitecore.ContentSearch.Solr.Index.Analytics.config</code></li><li><code class="sccode">Website/App_Config/Include/Social/Sitecore.Social.Lucene.Index.Analytics.Facebook.config</code></li></ul></li><li>In the <code class="sccode">Sitecore.Cloud.Xdb.config</code> file (<em class="scemphasis">Website/App_Config/Include/Xdb Cloud</em>), configure the reporting service by using the <em class="scemphasis">actual</em> Service URL and SSL certificate thumbprint from the response that you received from Sitecore Support. For example:<pre class="codesnippet"><code class="prettyprint"> &lt;httpTransportFactory patch:instead=&quot;httpTransportFactory&quot; type=&quot;Sitecore.Cloud.Xdb.CloudBasedTransportFactory, Sitecore.Cloud.Xdb&quot; singleInstance=&quot;true&quot;&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;param desc=&quot;serviceUrl&quot;&gt;[reporting service URL]&lt;/param&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;param desc=&quot;certificateThumbprint&quot;&gt;[SSL certificate thumbprint]&lt;/param&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"> &lt;/httpTransportFactory&gt;</code></pre><pre class="codesnippet"><code class="prettyprint"></code></pre></li></ol></div><h2 class="heading2" expand-collapse="" id="_Configure_xDB_Cloud"><bookmark></bookmark>Configure xDB Cloud indexing</h2><div class="collapsable"><p>xDB Cloud uses Cloud Search, an index for analytics that is separate from the indexes and search provider that you use for content indexing. </p><p>You must configure your content search differently depending on whether you use Solr or Lucene. As a guide, use Solr if you are using multiple content delivery servers. Lucene is more suitable for single content delivery server environments.</p></div><h2 class="heading2" expand-collapse="" id="_Configure_Lucene_and" id="_Configure_Lucene_for"><bookmark></bookmark><bookmark></bookmark>Configure Lucene for content search</h2><div class="collapsable"><p>To configure Lucene with the Cloud Search index: </p><ul><li>Enable the following configuration file by removing the <code class="sccode">.disable</code> extension from the file name: <ul class="scbullet2ndlevel"><li><code class="sccode">Website/App_Config/Include/Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config</code></li></ul></li></ul></div><h2 class="heading2" expand-collapse="" id="_Configure_Solr_and" id="_Configure_Solr_for"><bookmark></bookmark><bookmark></bookmark>Configure Solr for content search</h2><div class="collapsable"><p>Sitecore enables Lucene configuration files, and disables Solr configuration files, by default. Therefore, to configure Solr and Cloud Search, you must:</p><ol><li>Disable all Lucene files by adding the <code class="sccode">.disabled</code> extension to the file name.</li><li><a href="https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/search_and_indexing/walkthrough_setting_up_solr">Configure Solr</a>.</li><li>Enable the following Solr configuration file by removing the <code class="sccode">.disabled</code> extension from the file name:<ul class="scbullet2ndlevel"><li><code class="sccode">Website/App_Config/Include/Sitecore.ContentSearch.Solr.DefaultIndexConfiguration.config</code> </li></ul></li></ol></div><h2 class="heading2" expand-collapse="" id="_Deploy_marketing_definitions"><bookmark></bookmark>Deploy marketing definitions</h2><div class="collapsable"><p>To complete the xDB Cloud client configuration and connection to the xDB Cloud service, you must deploy marketing definitions.</p><p>Important</p><p>If you are using the Sitecore Experience Database (xDB) functionality, you must first set the <code class="sccode">Xdb.Enabled</code> and <code class="sccode">Xdb.Tracking.Enabled</code> parameters to <em class="scemphasis">true </em>in the<em class="scemphasis"> Website/App_Config/Include/Sitecore.Xdb.config </em>file. If you do not do this, you cannot deploy marketing definitions.</p><p>To deploy marketing definitions:</p><ol><li>Enable the following configuration file by removing the <code class="sccode">.disabled</code> extension from the file name.<ul class="scbullet2ndlevel"><li><code class="sccode">Website/App_Config/Include/Sitecore.Xdb.Remote.Client.MarketingAssets.config</code></li></ul></li><li>On the <span class="scwindow">Sitecore Launchpad</span>, click <span class="scwindow">Control Panel</span>, <span class="scwindow">Analytics</span>, <span class="scwindow">Deploy marketing definitions</span>.</li><li>In the <span class="scwindow">Deploy marketing definitions</span> dialog box, select all of the definitions and taxonomies and click <span class="scwindow">Deploy</span>.</li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you do not deploy marketing definitions, the binary data stored in the <span class="scwindow">Data</span> column in the definition tables (<span class="scwindow">CampaignActivityDefinitions</span>, <span class="scwindow">GoalDefinitions</span>), might not be compatible with Sitecore XP 8.2 rev. 170407 (Update-3).</p></section><p></div>Tue, 21 Aug 2018 10:15:22 +0200{4C95B5D0-40F3-4631-8B36-E92F21728869}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/81/Setting_up_and_maintaining/xDB/Contacts/IP_address_hashing.aspxIP address hashing<p>All contact IP addresses are hashed when they are saved to the xDB database. There are two settings in the <code class="sccode">Sitecore.Analytics.config</code> file that specify how the IP addresses are stored: </p><table class="table"><tbody><tr><th style="width: 50%;"><p><span class="scwindow">Setting</span></p></th><th style="width: 50%;"><p><span class="scwindow">Description</span></p></th></tr><tr><td><p>Analytics.RedactIpAddress</p></td><td><p id="_GoBack">If <code class="sccode">true</code>, all IP addresses are stored as 0.0.0.0 in xDB and all IP address identification is lost. <bookmark></bookmark></p><p>The default setting is <code class="sccode">false</code>. When this setting is <code class="sccode">false</code>, real IP addresses are stored.</p></td></tr><tr><td><p>Sitecore.Analytics.Lookups.IpHashProvider</p></td><td><p>This provider is always used. It hashes IP addresses using the MD5 hash algorithm. The setting contains the <code class="sccode">salt</code> parameter used by the hashing provider. For security reasons, it is best practice that you specify at least six characters for the <code class="sccode">salt</code> parameter. When you have specified a value, do not change this value again. If you do, visits from an IP address that is already stored as a hash will not be recognized and will be stored with a different hashed value.</p></td></tr></tbody></table><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Sitecore provides a tool called <a href="https://dev.sitecore.net/Downloads/Sitecore Experience Platform/Sitecore 81/Sitecore Experience Platform 81 Initial Release">Hash Stored IPs</a>. You use this tool when upgrading from a version earlier than Sitecore 8.1, where IP addresses were not hashed. You must only use this tool on the xDB MongoDB database.</p></section><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">IP addresses are always hashed in the Geoips collection.</p></section><p><p>&#160;</p><p>&#160;</p>Tue, 14 Aug 2018 15:27:13 +0200{7EF6BA2F-B1F3-4880-ACA1-008EB1D8FA43}https://doc.sitecore.net/en/Products/Sitecore_Experience_Platform/901/Setting_up_and_maintaining/Search_and_indexing/Sitecore_Azure_Search_overview.aspxSitecore Azure Search overview<p>The Sitecore Azure Search provider integrates the <a href="https://doc.sitecore.net:443/en/Products/Sitecore_Experience_Platform/82/Content_authoring/Searching/Searching.aspx">Sitecore Search</a> engine with the <a href="https://azure.microsoft.com/en-us/documentation/articles/search-what-is-azure-search/">Microsoft Azure Search</a> service. The Microsoft Azure Search service is a part of the Microsoft Azure computing platform, you can read more about the Microsoft Azure Search service on <a href="https://azure.microsoft.com/en-us/services/search/">their website</a>.</p><p>This topic applies to Sitecore Experience Platform 8.2 Update-1 and later and describes:</p><ul><li><a href="#_Features_of_Azure" go-to-section="">Features of Azure Search</a></li><li><a href="#_Limitations_of_Azure" go-to-section="">Limitations of Azure Search</a></li><li><a href="#_Unsupported_Azure_Search" go-to-section="">Unsupported Azure Search features</a></li></ul><h2 class="heading2" expand-collapse="" id="_Features_of_Azure"><bookmark></bookmark>Features of Azure Search</h2><div class="collapsable"><p>The Microsoft Azure Search service provides the following features:</p><ul><li>Extreme scalability, simplicity, and stability.</li><li>A highly available infrastructure with 99.95% uptime as a part of the Microsoft Azure <a href="http://www.windowsazure.com/en-us/support/legal/sla">service level agreement</a> (SLA).</li><li>An easy way to scale up and scale down as needed.</li></ul><p>The Sitecore Azure Search provider includes the following features:</p><ul><li>Support for all Sitecore search-driven UIs, including user-typed queries, and faceted searches.</li><li>Support for the majority of LINQ expressions, to enable rapid development of search-powered applications.</li><li>Native support for fundamental data types such as numbers and dates in faceting, and range queries.</li><li>Flexible configuration and precise control over the schema of the indexes.</li><li>Support for running Sitecore in geo-replicated scenarios.</li></ul><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Sitecore Azure Search behaves slightly differently from the Lucene and Solr search providers; this is important to consider if you are going to switch between search providers. Read more about Sitecore Azure Search limitations and behavioral differences in the <a href="#_Limitations_of_Azure" go-to-section="">Limitations of Azure Search</a> section.</p></section><p>Sitecore Azure Search is the default provider for Sitecore instances that are deployed using the Sitecore Azure SDK. It supports on premise and IaaS deployments. Follow the instructions in <a href="https://doc.sitecore.net:443/en/Products/Sitecore_Experience_Platform/82/Setting_up_and_maintaining/Search_and_indexing/Configure_Azure_Search.aspx">Configure Azure Search</a> to configure Sitecore Azure Search.</p></div><h2 class="heading2" expand-collapse="" id="_Limitations_of_Azure"><bookmark></bookmark>Limitations of Azure Search</h2><div class="collapsable"><p>Compared to Sitecore Search on <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/09/15/13/Using_Solr_or_Lucene.aspx">Lucene and Solr</a>, Sitecore Search on Azure Search has <a href="https://docs.microsoft.com/en-us/azure/search/search-limits-quotas-capacity">several limitations</a>:</p><ul><li><em class="scemphasis">Automatic tokenization</em> - The Azure Search service automatically tokenizes document field values and queries when searching and faceting. This means that:<ul class="scbullet2ndlevel"><li>Substring searches that are limited to a single term, for instance, predicates, <code class="sccode">.StartsWith()</code>,<code class="sccode"> .EndsWith()</code> and <code class="sccode">.Contains()</code>, will match parts of terms, and will match terms that are located in any part of the field value. When multiple terms are passed, each term is searched separately, (this can provide more results than expected).</li><li>Regular expressions spanning multiple terms (containing spaces) returns 0 results.</li><li>Multiple terms that are passed to <code class="sccode">.Wildcard()</code> are interpreted as individual wildcards in a field-scoped query.</li><li>The facet values are calculated based on individual terms in faceted fields, not on whole field values when a value contains multiple words, (unlike Lucene and Solr).</li></ul><section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">This limitation only applies to Sitecore versions 8.2.7 and 9.0.1 or earlier. For later versions, you can change the behavior only by applying a lowercase analyzer to specific fields, for example:</p></section><p><code class="sccode">&lt;fieldNames hint=&quot;raw:AddFieldByFieldName&quot;&gt; &lt;field fieldName=&quot;_fullpath&quot; … cloudAnalyzer=&quot;lowercase_keyword&quot; /&gt;…</code></p></li><li><em class="scemphasis">Same name fields</em> - The Azure Search service has a strong schema, this means you cannot have, for example, fields that have the same name but different types in different documents. </li><li><em class="scemphasis">Joining queries</em> - Using <code class="sccode">.GroupJoin()</code>, <code class="sccode">.SelfJoin ()</code>, and other operators that join queries, is not supported and results in an error. </li><li><em class="scemphasis">Maximum content length</em> - For filterable, sortable, or facetable fields, the length is: 32766 bytes.</li><li><em class="scemphasis">Retrieve specific fields from documents with Azure Search</em> - Even though this is possible, the functionality is not currently visible through the Sitecore Content Search API.</li><li><em class="scemphasis">Switch-on rebuild</em> - Is only supported from Sitecore versions 8.2.7, 9.0.2, and later.</li><li><em class="scemphasis">Media indexing</em> - Is not supported.</li><li><em class="scemphasis">Language-specific analysis</em> - Is only supported from Sitecore versions 8.2.7, 9.0.1, and later.</li><li><em class="scemphasis">Range queries</em> - Are always expressed as filters. This means:<ul class="scbullet2ndlevel"><li>Combining range queries with Search using the logical operator <code class="sccode">OR</code> (<code class="sccode">||</code>) produces an error.</li><li>Range queries on string fields always operate on the whole field value without tokenization and are case-sensitive.</li></ul></li><li><em class="scemphasis">Date-time and numeric values</em> - The Azure Search service stores date-time and numeric values as native types and only allows filtering on these fields. Search and filter parts can only be combined with the logical operator AND (<code class="sccode">&amp;&amp;</code>), this returns the following result: <ul class="scbullet2ndlevel"><li>Complex queries involving fields with different types that are combined with the logical operator <code class="sccode">OR</code> (<code class="sccode">||</code>) can return an error.</li><li><code class="sccode">.Union()</code> and <code class="sccode">.Except()</code> operators may generate queries that return an error, depending on the types of the fields used.</li><li>Certain user queries in the Content Editor that span multiple fields with different types (such as creation date or version), return an error.</li></ul></li><li><em class="scemphasis">Fields</em> - a search index can contain up to 1000 fields. This is enough for a clean Sitecore database. However, if your database has more fields, then you must index the database into two or more search indexes.<section class="note"><p class="scnoteheaderindent">Note</p><p class="scnotebodyindent">The limitation of 1000 fields per index means the <a href="https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/sitecore_on_azure/deploying/introducing_azure_search_culture_support">Azure Search capabilities for multilingual solutions</a> are also limited.</p></section></li><li><em class="scemphasis">Pivot faceting</em> - Used with the <code class="sccode">FacetPivotOn</code> operator is not supported.</li><li><em class="scemphasis">Multiple-word fuzzy queries</em> - You cannot combine the <code class="sccode">similarity</code> and <code class="sccode">slop</code> parameters in the Azure Search Lucene syntax. This means multiple-word fuzzy queries, such as <code class="sccode">.Like()</code> are always interpreted as a phrase query with a <code class="sccode">slop</code>.</li></ul></div><h2 class="heading2" expand-collapse="" id="_Unsupported_Azure_Search"><bookmark></bookmark>Unsupported Azure Search features</h2><div class="collapsable"><p>Refer to the following list for features that exist in Azure that are not currently supported by your Sitecore provider:</p><ul><li>Scoring profiles</li><li>Geospatial data types</li><li>Indexers</li><li>Suggestions</li><li>Highlighters<bookmark></bookmark></li></ul></div>Fri, 10 Aug 2018 10:22:01 +0200{0BCAF97A-0189-4239-A801-9CE8A55C6387}https://doc.sitecore.net/en/Products/Managed_Cloud/10/Sitecore_Managed_Cloud_Standard/The_Managed_Cloud_Standard_onboarding_process.aspxThe Managed Cloud Standard onboarding process<p>Gain an overview of the <a href="https://kb.sitecore.net/articles/062788">Sitecore Managed Cloud Standard onboarding process</a> and understand the key milestones for each member of the process, namely:</p><ul><li>The customer/partner</li><li>Sitecore Sales</li><li>Sitecore Operations</li></ul><p>On the <a href="https://kb.sitecore.net/articles/062788">Sitecore Knowledge Base</a>, you can read more about the key milestones in the onboarding process. Including an outline of what is involved in the following stages:</p><ul><li>Signing your contract</li><li>Activating your digital contract</li><li>Provisioning your environment</li><li>Accessing your environment</li></ul><p id="_GoBack"><bookmark></bookmark></p>Thu, 09 Aug 2018 16:04:35 +0200{FA0B6898-5137-4CAD-B4F3-BA88E16A8BB5}https://doc.sitecore.net/en/Products/Managed_Cloud/10/Sitecore_Managed_Cloud_Standard/Getting_started_with_Sitecore_Managed_Cloud_Standard/Request_a_Managed_Cloud_Standard_environment.aspxRequest a Managed Cloud Standard environment<p>To request an environment with Sitecore Managed Cloud Standard, you <a href="https://kb.sitecore.net/articles/463549">register a support ticket through the Sitecore Support portal</a>.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you do not have authorization to log in to the Sitecore Support portal, you must contact your Sitecore Implementation Partner to register the ticket for you. If this is not possible, <a href="https://profile.sitecore.net/">register a Sitecore user account</a>, then contact your Sitecore representative for access to the Sitecore Support portal.</p></section><p>You must specify the following information in your support request:</p><ul><li>Your Sitecore Managed Cloud contract identifier. This is the 32-character code (GUID) in your contract activation email message, for example: 12c8c7ef-58e3-47ea-9b1b-acf37eadda21.</li><li><a href="https://kb.sitecore.net/articles/768387">The specific release</a> you want to provision, for example: Sitecore 8.2 Update-2.</li><li>The type of environment that you want to connect to the deployment (for example, production or nonproduction).</li><li>The <a href="https://kb.sitecore.net/articles/206155">specific location</a> of the deployment (for example, the Microsoft Azure center or region).</li><li>The <a href="https://kb.sitecore.net/articles/206155">specific location</a> of your Microsoft Application Insights&#174; resources. </li><li>Your Sitecore configuration, for example, XM1.</li><li>Whether it is a premium or standard tier.</li><li>The live IDs of the technical contacts who you want to have access to the Sitecore environment in Microsoft Azure.</li><li>A license.xml file to use in the environment (if empty - Sitecore will provision you with a temporary license)</li><li><bookmark></bookmark><bookmark></bookmark>Stipulate whether Sitecore needs to install any additional modules</li></ul><p>For a list of supported locations and Sitecore configurations in Sitecore Managed Cloud, consult the <a href="https://kb.sitecore.net/articles/768387">Sitecore Managed Cloud compatibility tables</a>. </p><h2 class="heading2" expand-collapse="">Get started with a Sitecore Managed Cloud environment</h2><div class="collapsable"><p>After you have completed your request, you can log in to the Microsoft Azure Portal&#174; and see your Sitecore environment. Sitecore pre-generates passwords for your SQL Azure&#174; logical server and a Sitecore Admin password for a secure initial deployment.</p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Sitecore provisions you with a <em class="scemphasis">temporary</em> license file that is valid for one month. <em class="scemphasis">When the temporary license expires, Sitecore stops working</em>, therefore it is important that you upload a valid permanent <code class="sccode">license.xml</code> file as soon as possible.</p></section><p>You can read the temporary Sitecore Admin password in the SITECORE_PASSWORD tag of the Microsoft Azure resource group. You must reset your Sitecore Admin password when you first log in to Sitecore.</p><section class="note"><p class="scnoteheader">Important </p><p class="scnotebody">Always change the default Sitecore Admin password to a new, secure password when you first log in to the system. Keeping the default Sitecore Admin password can compromise the security of your Sitecore environment. Remove the SITECORE_PASSWORD tag from the resource group after you change the password.</p></section><p>You can <a href="https://docs.microsoft.com/en-us/azure/sql-database/sql-database-troubleshoot-permissions">reset the administration password</a> for your SQL Azure logical server by selecting the server from the list of resources in Resource Group and clicking <span class="scwindow">Reset Password</span>. </p></div>Thu, 09 Aug 2018 09:24:01 +0200{A4CFC719-0D7E-406C-B87A-B94FC412B0F3}https://doc.sitecore.net/en/Products/Managed_Cloud/10/Sitecore_Managed_Cloud_overview/View_your_Managed_Cloud_consumption.aspxView your Managed Cloud consumption<p id="_GoBack">To view the overall usage and monthly consumption of your Managed Cloud service, you must first go to your Sitecore Launchpad and <a href="https://doc.sitecore.net/sitecore_experience_platform/901/setting_up_and_maintaining/sitecore_app_center/using_the_sitecore_app_center/access_the_sitecore_app_center">access the Sitecore App Center</a>, then log in to the Sitecore App Center <bookmark></bookmark>using your Sitecore Portal credentials.</p><p>By default, the primary and technical contacts from your Managed Cloud agreement can only access the consumption application from their respective e-mail accounts. For additional users to access the Managed Cloud Consumption application, you must <a href="https://kb.sitecore.net/articles/137210">submit an appropriate request</a>.</p><p>After successfully logging in to Sitecore App Center, proceed with the steps below. </p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">If you do not currently have access to the App Center then contact the primary or secondary contact on your Managed Cloud contract.</p></section><p>To view your Managed Cloud consumption:</p><ol><li>In the Sitecore App Center, open the <span class="scwindow">Managed Cloud</span> application to view the consumption for your current payment cycle. <p><img src="/~/media/EBF1646B420B43E9AF3A98CD452716B1.ashx?la=en" height="263" width="595" alt="Cloud_ManagedCloud_MC_AppCenter_screenshot" title="MC App Center" class="documentimage" doc-fancy-image=""></p></li><li>In the <span class="scwindow">Managed Cloud</span> data table, look at the columns to see the monthly consumption associated with each slot. The <span class="scwindow">Provisioned slots</span> summary on the right shows the total consumption of each slot (<span class="scwindow">Total spend</span>), and provides information about the corresponding Managed Cloud agreement that applies to that particular slot. </li></ol><p>For example, the summary for the <em class="scemphasis">XP–Non-Prod</em> monthly consumption includes the following fields:</p><ul><li><span class="scwindow">Total spend </span>– the total consumption for this slot in this payment period to date in USD. All consumption is recorded in USD, regardless of the currency associated with your agreement. The total consumption to date for this slot in this example is 7,000 USD.</li><li><span class="scwindow">Cycle quota –</span> the amount of consumption specified for a payment cycle before Sitecore applies an overage. The cycle quota associated with this slot is 18,000 USD. </li><li><span class="scwindow">Start date – </span>the start of the current cycle.</li><li><span class="scwindow">Deployment ID –</span> the unique hexadecimal identification of your specific deployment.</li><li><span class="scwindow">Service level –</span> either<span class="scwindow"> </span>Standard or Premium. The service level for this slot in this example is Standard.</li><li><span class="scwindow">Payment cycle –</span> measured in months, this is the commitment period of the agreement associated with this slot. Sitecore uses this to calculate the cycle quota. In this example, the Payment cycle associated with this slot is 12 months. </li><li><span class="scwindow">Overage multiplier –</span> if your consumption exceeds the cycle quota within a payment cycle, Sitecore invoices your organization for the consumption that runs over the cycle quota. This extra consumption is multiplied by the cycle quota on a monthly basis until the payment cycle ends and a new period begins. In this example, the multiplier for this slot is 1.8. <p><img src="/~/media/5980B1C949BA49E3A1FCB3BA2FB1AA6F.ashx?la=en" height="516" width="576" alt="Cloud_ManagedCloud_MC_ProvisionedSlots_screenshot" title="MC Provisioned slots" class="documentimage" doc-fancy-image=""></p></li></ul>Wed, 08 Aug 2018 15:25:20 +0200{12C14E9A-CEB3-4E2D-94A6-5C0FC849CF8D}https://doc.sitecore.net/en/Products/Managed_Cloud/10/Sitecore_Managed_Cloud_overview/Getting_started_with_Sitecore_Managed_Cloud/Prepare_a_Sitecore_82_onpremise_environment_for_Managed_Cloud_xDB.aspxPrepare a Sitecore 8.2 on-premise environment for Managed Cloud xDB<p id="_GoBack"><bookmark></bookmark>The Sitecore Managed Cloud xDB supports scaled content management (CM) and content delivery (CD) servers. When you prepare an on-premise environment, you do not set the database connection strings because you do this later when you <a href="https://doc.sitecore.net/xdb_cloud/working_with_xdb_cloud/configuring/connect_to_xdb_cloud_20">configure the xDB Cloud client and connection to the xDB Cloud service</a>. </p><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">This procedure describes how to prepare a scaled on-premise Sitecore environment. To <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/02/16/24/Prepare_a_standalone_Sitecore_82_onpremise_environment_for_Managed_Cloud_xDB.aspx">prepare a standalone Sitecore instance</a>, or to <a href="https://doc.sitecore.net:443/en/Repositories/Topics_bucket/2017/10/16/15/08/Configure_Sitecore_90_for_xDB_on_Azure.aspx">prepare a Sitecore 9.0 on-premise environment for Managed Cloud xDB</a>, see the Sitecore documentation.</p></section><p>To prepare a local, scaled on-premise Sitecore environment: </p><ol><li>Download the spreadsheet that lists of all the configuration files that you must enable or disable for each server type. <ul> <li>For Sitecore 8.2 Update 1, download the <a href="https://doc.sitecore.net//~/media/BD14A86DCDEE490186F7DEEEFB32A2AB.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.2 Update 1</a>.</li> <li>For Sitecore 8.2 Update 2, Update 3, Update 4, and Update 5, download the <a href="https://doc.sitecore.net//~/media/FE19CE65CAD44D26B3878C70EDEE8719.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.2 Update 2-5</a>.</li> <li>For Sitecore 8.2 Update 6 and Update 7, download the <a href="https://doc.sitecore.net//~/media/7FC2B38AB608457A87DBF3EF0085AAEE.ashx?la=en">Config Enable Disable Excel spreadsheet for Sitecore 8.2 Update 6-7</a>.</li> </ul></li><li>Configure the CD servers by following the instructions in the <a href="https://doc.sitecore.net/sitecore_experience_platform/82/setting_up_and_maintaining/xdb/configuring_servers/configure_a_content_delivery_server">Configure a content delivery server</a> topic. However, you must also:<ul class="scbullet2ndlevel"><li>Go to the <span class="scwindow">Configure a content delivery server</span> section and follow the instructions. Skip the steps that require you to set the database connection strings for MongoDB.</li><li>In the <span class="scwindow">Config enable disable</span> spreadsheet, consult the <span class="scwindow">Content Delivery (CD)</span> column and ensure that the relevant configuration files are enabled or disabled.</li><li>Refer to the <span class="scwindow">Changes to configuration file settings</span> table and update the parameter values of your configuration files accordingly. </li></ul></li><li>Configure the CM servers by following the instructions in the <a href="https://doc.sitecore.net/sitecore_experience_platform/82/setting_up_and_maintaining/xdb/configuring_servers/configure_a_content_management_server">Configure a content management server</a> topic. However, you must also:<ul class="scbullet2ndlevel"><li>Go to the <span class="scwindow">Configure a content management server</span> section and follow the instructions. Skip the steps that require you to set the database connection strings for MongoDB.</li><li>In the <span class="scwindow">Config enable disable</span> spreadsheet, consult the Content Management (CM) column and ensure that the relevant configuration files are enabled or disabled.</li></ul></li></ol><p>Fri, 03 Aug 2018 13:29:55 +0200{9B2E4EE2-DC0C-4EBB-B98A-C5B8A146690E}https://doc.sitecore.net/en/Products/Cloud/20_Azure_Toolkit/Working_with_Sitecore_Azure_Toolkit/Deployment/Configure_the_Bootloader_module_for_a_Sitecore_deployment.aspxConfigure the Bootloader module for a Sitecore deployment<p>The Bootloader module is a tiny module that facilitates the installation of supported Sitecore modules. You must always add the Bootloader module to the <code class="sccode">modules</code> parameter of your Sitecore App Service deployment when installing other modules. </p><p>To configure the Bootloader module:</p><ol><li><a href="https://dev.sitecore.net/Downloads/Sitecore_Azure_Toolkit.aspx">Locate the WebDeploy package</a> (WDP), which is the Sitecore.Cloud.Integration.Bootload.wdp.zip) of the Bootloader module in <code class="sccode">resources</code>\<code class="sccode">&lt;version to be deployed&gt;</code>\<code class="sccode">addons</code> folder of your Sitecore Azure Toolkit installation.</li><li>Upload the WDP to the storage account and note the URL of the package because you will need to add it to the snippet in step 4. If you are running Sitecore 8.2.7, then in step four change the parameter value to: <code class="sccode">bootloaderMsDeployPackageUrl</code></li></ol><section class="note"><p class="scnoteheader">Note</p><p class="scnotebody">Sitecore version 8.2.7 uses an ARM template that has already configured the bootloader by default, so if you are running Sitecore 8.2.7 ignore the following steps, (3, 4, and 5),</p></section><ol><li>On <a href="https://github.com/Sitecore/Sitecore-Azure-Quickstart-Templates">Github</a>, in the <span class="scwindow">addons</span> folder of your Sitecore version and environment configuration, locate the <span class="scwindow">bootloader.json</span> template. </li><li>Add the following snippet to the <code class="sccode">modules</code> parameter of your <code class="sccode">azuredeploy.parameters.json</code> file:<pre class="codesnippet"><code class="prettyprint">{</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;modules&quot;: {</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;value&quot;: {</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;items&quot;: [</code></pre><pre class="codesnippet"><code class="prettyprint">{</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;name&quot;: &quot;bootloader&quot;,</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;templateLink&quot; : &quot;&lt;link to the Bootloader template&gt;&quot;,</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;parameters&quot;: {</code></pre><pre class="codesnippet"><code class="prettyprint">&quot;msDeployPackageUrl&quot; : &quot;&lt;link to the Bootloader WDP&gt;&quot;</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre><pre class="codesnippet"><code class="prettyprint">]</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre><pre class="codesnippet"><code class="prettyprint">}</code></pre></li><li>Populate the parameters for the Bootloader module:<ul class="scbullet2ndlevel"><li>For <code class="sccode">templateLink</code>, go to <a href="https://github.com/Sitecore/Sitecore-Azure-Quickstart-Templates">Github</a> and use the URL of the <span class="scwindow">bootloader.json</span> template for your particular topology. You can also upload the template to your storage account. </li><li>For <code class="sccode">msDeployPackageUrl</code>, use the URL of the WDP package for the Bootloader module. </li></ul></li></ol><p>Tue, 31 Jul 2018 15:08:17 +0200