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

<channel>
	<title>Raman Khalupau &#8211; SaM Solutions</title>
	<atom:link href="https://sam-solutions.com/author/raman-khalupau/feed/" rel="self" type="application/rss+xml" />
	<link>https://sam-solutions.com</link>
	<description></description>
	<lastBuildDate>Thu, 12 Mar 2026 10:06:43 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Highlighting of Untranslated Items in Sitecore</title>
		<link>https://sam-solutions.com/blog/sitecore-translation-highlighting/</link>
					<comments>https://sam-solutions.com/blog/sitecore-translation-highlighting/#respond</comments>
		
		<dc:creator><![CDATA[Raman Khalupau]]></dc:creator>
		<pubDate>Fri, 22 Apr 2022 14:38:32 +0000</pubDate>
				<guid isPermaLink="false">https://sam-solutions.de/?post_type=article&#038;p=619</guid>

					<description><![CDATA[In one of my previous blog posts, I shared my impression of what I liked in Umbraco CMS and which of its killer features would be great to have in Sitecore. I’ve since decided to implement one of these capabilities — the highlighting of untranslated items in Sitecore’s Content Tree. Read on to learn how [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In one of my previous blog posts, I shared my impression of what I liked in Umbraco CMS and which of its killer features would be great to have in Sitecore. I’ve since decided to implement one of these capabilities — the <strong>highlighting of untranslated items in </strong><a href="/services/portals-wcms/sitecore/"><strong>Sitecore</strong></a><strong>’s Content Tree</strong>. Read on to learn how I got it done.</p>



<span id="more-619"></span>



<h2 class="wp-block-heading">Why Do We Need the Highlighting of Untranslated Items?</h2>



<p class="wp-block-paragraph">The highlighting of translated items is a very useful feature when translating content, as it highlights text that hasn’t been altered yet.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="706" height="278" src="https://sam-solutions.com/wp-content/uploads/Highlighting-in-Sitecore-1-image-min.png" alt="Highlighting-in-Sitecore-1-photo" class="wp-image-3492"/></figure>
</div>


<h2 class="wp-block-heading">How Did I Do This?</h2>



<p class="wp-block-paragraph">I decided to use the Gutter in the Sitecore Content Editor (which you can activate by right-clicking on the gutter area to the left of the Content Tree).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="229" height="654" src="https://sam-solutions.com/wp-content/uploads/Highlighting-in-Sitecore-2-image-min.png" alt="Highlighting-in-Sitecore-2-photo" class="wp-image-3494"/></figure>
</div>


<p class="wp-block-paragraph">Then, choose the language.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1079" height="188" src="https://sam-solutions.com/wp-content/uploads/Highlighting-in-Sitecore-3-image-min.png" alt="Highlighting-in-Sitecore-3-photo" class="wp-image-3497"/></figure>
</div>


<p class="wp-block-paragraph">After that, a custom icon in the gutter will indicate items that haven’t been translated yet (in other words, that don’t have language versions). By the way, you can choose the Gutter icon you like best. After the language has been changed, icons will update automatically across items in the Content Tree.</p>



<p class="wp-block-paragraph">For example, when switching to German, we can see that the <em>About</em> page hasn’t been translated, while <em>Contacts</em> is in German.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1079" height="257" src="https://sam-solutions.com/wp-content/uploads/Highlighting-in-Sitecore-4-image-min.png" alt="Highlighting-in-Sitecore-4-photo" class="wp-image-3499"/></figure>
</div>


<h2 class="wp-block-heading">Does Sitecore Really Have Nothing of the Kind?</h2>



<p class="wp-block-paragraph">Actually, Sitecore has a similar functionality by default — the Missing Versions Gutter, but it’s not that I needed.</p>



<p class="wp-block-paragraph">How does it work in Sitecore? When enabled, a round red icon is displayed in front of each item that has missing versions, for all languages at once. To see the list of languages, you need to hover over the icon.</p>



<p class="wp-block-paragraph">In my case, the icon is displayed only for the context language. So, when I change the language, I can see untranslated items only in the language I need.</p>



<h2 class="wp-block-heading">To Sum Up My Experience</h2>



<p class="wp-block-paragraph">The technical implementation isn’t complex. It includes a class that checks whether there is a version available in another language and a Gutter item in the Core database.</p>



<p class="wp-block-paragraph">The source code is available on <a href="https://github.com/RamanKhalupau/Sitecore.LanguageVersionGutter" target="_blank" rel="noreferrer noopener nofollow">GitHub</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sam-solutions.com/blog/sitecore-translation-highlighting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[TechSpeak] Migrating a Legacy Solution to Helix Architecture: a Step-by-Step Guide</title>
		<link>https://sam-solutions.com/blog/migrating-to-helix/</link>
					<comments>https://sam-solutions.com/blog/migrating-to-helix/#respond</comments>
		
		<dc:creator><![CDATA[Raman Khalupau]]></dc:creator>
		<pubDate>Fri, 11 Feb 2022 13:15:47 +0000</pubDate>
				<guid isPermaLink="false">https://sam-solutions.de/?post_type=article&#038;p=555</guid>

					<description><![CDATA[Considering the benefits that Sitecore Helix provides to a Sitecore implementation, such as future-proof architecture that is easy to maintain and extend, I strongly recommend transferring pre-Helix projects to Helix. You’ll probably ask, what does a process of transforming pre-Helix app into one that’s Helix-based include? Read on to learn! Project Requirements There are certain [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Considering the benefits that <a href="/blog/sitecore-helix/">Sitecore Helix</a> provides to a <a href="/services/portals-wcms/sitecore/">Sitecore</a> implementation, such as future-proof architecture that is easy to maintain and extend, I strongly recommend transferring pre-Helix projects to Helix. You’ll probably ask, what does a process of transforming pre-Helix app into one that’s Helix-based include? Read on to learn!</p>



<span id="more-555"></span>



<h2 class="wp-block-heading">Project Requirements</h2>



<p class="wp-block-paragraph">There are certain requirements that the process should meet. The process should:</p>



<ul class="wp-block-list">
<li>be executed phase by phase</li>



<li>not interrupt development</li>



<li>not change the existing CI configuration that is focused on the deployment of one single solution.</li>
</ul>



<h2 class="wp-block-heading">The Migration Process</h2>



<p class="wp-block-paragraph">Let’s delve into the specifics of the migration process using a real-life example from my work. It’s a solution that consists of four legacy projects — one web and three class libraries.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="400" height="132" src="https://sam-solutions.com/wp-content/uploads/Solution-project-sitecore-helix-image.png" alt="Solution-project-sitecore-helix-photo" class="wp-image-3526"/></figure>
</div>


<p class="wp-block-paragraph">Our plan for migration is simple: we transfer the group logic from <em>Core</em>, <em>Data</em> and <em>Utils</em> projects into Helix-based modules. All we need is a reference <a href="/services/web-app-development-services/">web project</a> when detaching pieces of code and grouping them into separate modules.</p>



<p class="wp-block-paragraph">After part of the logic is refactored, the solution now has the following structure:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="333" height="358" src="https://sam-solutions.com/wp-content/uploads/Solution-demo-sitecore-helix-image-min.png" alt="Solution-demo-sitecore-helix-photo" class="wp-image-3528"/></figure>
</div>


<p class="wp-block-paragraph"><em>Project.Web</em> is renamed to <em>Demo.Project</em> and moved into the Project folder. Certain functionalities from <em>Core</em>, <em>Data</em> and <em>Utils</em> are transferred into separate modules, then gathered in the Feature and Foundation folders. Once all classes are migrated to modules, <em>Core</em>, <em>Data</em> and <em>Utils</em> can be deleted. Until their deletion, <em>Demo</em><em>.Web</em> will continue to refer to them.</p>



<h2 class="wp-block-heading">Deployment</h2>



<p class="wp-block-paragraph">At this point, we still shouldn’t change the deployment configuration, which is why we add references to modules in <em>Demo</em><em>.Web</em>. Therefore, we don’t need to update the deployment process in CI, and we can separate functionality in new modules in process.</p>



<h2 class="wp-block-heading">Module Presentation Files and Config</h2>



<p class="wp-block-paragraph">How do we deal with presentation files and config? If there are any presentation or config files related to a specific module in <em>Project.Web</em>, we leave them there. We are planning to move them into a module-related project once all the functionality is split:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="422" height="620" src="https://sam-solutions.com/wp-content/uploads/Solution-demo-sitecore-image-min.png" alt="Solution-demo-sitecore-photo" class="wp-image-3531"/></figure>
</div>


<p class="wp-block-paragraph">Then, we take the following steps:</p>



<ul class="wp-block-list">
<li>Gradually split the rest of the functionality into modules</li>



<li>Migrate module presentation files and configs to module projects</li>



<li>Reconfigure the deployment</li>
</ul>



<h2 class="wp-block-heading">Intermediate Results</h2>



<p class="wp-block-paragraph">So, we have started code migration to Helix, but are not done yet. We have met all the requirements that we had made. Step by step, we can split the code gathered in <em>Core</em>, <em>Data</em> and <em>Utils</em> into Feature and Foundation modules, and implement the brand-new functionality right in Feature or Foundation projects.</p>



<p class="wp-block-paragraph">To learn more about <a href="/blog/what-is-sitecore/">this content management system</a>, Helix or migrating to Helix, or to discuss your own experience, feel free to contact me.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sam-solutions.com/blog/migrating-to-helix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Setting Up Unicorn for Sitecore Projects: A Practical Guide</title>
		<link>https://sam-solutions.com/blog/set-up-sitecore-unicorn/</link>
					<comments>https://sam-solutions.com/blog/set-up-sitecore-unicorn/#respond</comments>
		
		<dc:creator><![CDATA[Raman Khalupau]]></dc:creator>
		<pubDate>Thu, 02 Dec 2021 14:45:58 +0000</pubDate>
				<guid isPermaLink="false">https://sam-solutions.de/?post_type=article&#038;p=598</guid>

					<description><![CDATA[This article is about working with Sitecore Unicorn. It will explain how to get started with Unicorn, look at the build and deployment workflow, and outline the specific features of the tool. It will also provide a quick overview of existing alternatives to Unicorn and summarize the ways content can be serialized in Sitecore. What [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">This article is about working with Sitecore Unicorn. It will explain how to get started with Unicorn, look at the build and deployment workflow, and outline the specific features of the tool. It will also provide a quick overview of existing alternatives to Unicorn and summarize the ways content can be serialized in Sitecore.</p>



<span id="more-598"></span>



<h2 class="wp-block-heading">What Is Sitecore Unicorn?</h2>



<p class="wp-block-paragraph">Let’s start with the definition. <b>Unicorn</b> is a utility for content serialization in <a href="/services/portals-wcms/sitecore/">Sitecore-based projects</a>. In simple words, this tool allows developers to automatically move content items (templates, layouts, renderings, etc.) between instances and store them as part of source control.</p>



<h2 class="wp-block-heading">How Is Unicorn Set Up?</h2>



<p class="wp-block-paragraph">Generally, three things are needed to set up Unicorn:</p>



<ul class="wp-block-list">
<li>Sitecore and content to sync</li>



<li>A folder under the source control to store the serialized items as files</li>



<li>Unicorn itself to do the job</li>
</ul>



<p class="wp-block-paragraph">I will assume you already have the Sitecore instance and need to set up the folder and Unicorn.</p>



<p class="wp-block-paragraph">Unicorn installation is very simple.</p>



<ul class="wp-block-list">
<li>If you are following Helix architecture, you need to add a project for Serialization under the Foundation layer. Then, install Unicorn packages as shown in the screenshot below.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="975" height="527" src="https://sam-solutions.com/wp-content/uploads/Sitecore-Unicorn-1.png" alt="Setting up Sitecore Unicorn" class="wp-image-3556"/></figure>
</div>


<p class="wp-block-paragraph"><b>Note:</b> the demo project in the screenshot is available with source code on my <a href="https://github.com/RamanKhalupau/Foundation.Serialization" rel="nofollow noopener" target="_blank">github</a>.</p>



<ul class="wp-block-list">
<li>Select a Unicorn package and additionally Unicorn Users/Roles if you need to serialize users or roles and install packages.</li>
</ul>



<p class="wp-block-paragraph">Once you are ready with the new project and packages, the next important thing is setting Base configuration and defining the folder on the disk to store the serialized files.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1305" height="473" src="https://sam-solutions.com/wp-content/uploads/Sitecore-Unicorn-2.png" alt="How to set up Sitecore Unicorn" class="wp-image-3558"/></figure>
</div>


<p class="wp-block-paragraph">In my demo project, the folder is defined in Demo.Unicorn.Base.config. This config file is used as basic and inherited by others.</p>



<p class="wp-block-paragraph">If you have different folders for your environments, you can use config transformations to define appropriate paths for them.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1015" height="290" src="https://sam-solutions.com/wp-content/uploads/Sitecore-Unicorn-3.png" alt="Set up Unicorn for SItecore projects" class="wp-image-3561"/></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1142" height="280" src="https://sam-solutions.com/wp-content/uploads/Sitecore-Unicorn-4.png" alt="Setting up Sitecore Unicorn" class="wp-image-3563"/></figure>
</div>


<p class="wp-block-paragraph">As you can see in the screenshot, Unicorn allows you to define multiple <i>configurations</i>, giving you a lot of flexibility: you can serialize items to different places on the disk, set up groups that can be synced separately, and override any aspect of Unicorn in each configuration. Configurations may also define dependencies between each other.</p>



<p class="wp-block-paragraph">In my example, you can see four configuration files:</p>



<ul class="wp-block-list">
<li>Base — contains basic configuration with a folder under the source control to store the serialized files.</li>
</ul>



<p class="wp-block-paragraph">Three other files are inherited from the base file. This is the approach to take when you define a separate config for each database (and probably useful for legacy projects).</p>



<ul class="wp-block-list">
<li>Core — used to serialize items from the Core database</li>



<li>Master — used to serialize items from the Master database</li>



<li>MasterContent — used to serialize custom content that should sometimes be synced with environments; e.g., labels that need to be created once if they don’t already exist</li>
</ul>



<p class="wp-block-paragraph">The Helix-based approach is more modern, of course.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1409" height="693" src="https://sam-solutions.com/wp-content/uploads/Sitecore-Unicorn-9.png" alt="Sitecore Unicorn setting up" class="wp-image-3565"/></figure>
</div>


<p class="wp-block-paragraph">In the screenshot, you can see an example from the Habitat solution. In fact, there is a basic configuration for all layers as well as one for each layer individually. When you create your custom layer, you simply inherit it from the relevant configuration depending on layer type — Project, Foundation, or Feature.</p>




 
    
    <div class="editor-list-cta editor-list-cta_style_1 editor-list-cta_index_1">
        
    <div class="editor-list-cta__items">
                                    
                    			    				<style>
    					.editor-list-cta_index_1 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-button {
            				            					color: #000000;
            				            				
            				    					}
    				</style>
    			    			
    			    			    				<style>
    					.editor-list-cta_index_1 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-left {
    					    padding-left: 10px;
    					}
    					
    					.editor-list-cta_index_1 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-left:before {
    					    left: 0;
    					    top: 50%;
    					    width: 3px;
    					    content: '';
    					    position: absolute;
    					    margin-left: -10px;
    					    height: calc(100% + 10px);
    					    transform: translateY(-50%);

            				            					    							    background: linear-gradient(45deg, #6dc7ff, #e6abff);
    							            				    					}
    					
    					@media (max-width: 475px) {
    					    .editor-list-cta_index_1 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-left:before {
    					        width: 2px;
                                margin-left: -3.5px;
    					    }
    					}
    				</style>
    			                
                    			    			        			        <style>
        					.editor-list-cta_index_1 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-inner {
        					            						    background: #166dbd;
        						        					}
        				</style>
    			        
    			
                    			
                                
                <div class="editor-list-cta__item editor-list-cta__item_index_1">
                    <div class="editor-list-cta__item-inner">
            		                		                                <div class="editor-list-cta__item-left">
                                                                                                    <div class="editor-list-cta__item-title"><p><strong>Does your Sitecore comply with the Helix Guidelines?</strong> SaM Solutions is ready to perform an audit of your Sitecore instance to uncover any inconsistencies with Sitecore Helix Documentation and pinpoint development roadblocks.</p>
</div>
                                                	        </div>
            	        
            	                    	            <div class="editor-list-cta__item-right">
            	                                    	                                	                                	            <div class="editor-list-cta__item-event">
                    	                <div class="editor-list-cta__item-button button button_style_1">
                                            <a class="button__inner" href="/contacts/?utm_source=blog&#038;utm_medium=post_ID_598&#038;utm_campaign=cta_post_content_4006">                                                <div class="button__name">Request an Audit</div>
                                            </a>                                        </div>
                                    </div>    
                                                                        
            	            </div>
            	                	        </div>
                </div>
                        </div>
    </div>
    



<p class="wp-block-paragraph">Basic configurations contain a general list of items to serialize. If you need to serialize something else — for example, something specific to your Feature — add item paths into your new custom configuration. In the screenshot above, you can see three files.</p>



<p class="wp-block-paragraph">If you sync custom content that can be edited by a customer, you should be careful <i>not</i> to override already existing content.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1341" height="332" src="https://sam-solutions.com/wp-content/uploads/Sitecore-Unicorn-7.png" alt="set up Sitecore Unicorn" class="wp-image-3567"/></figure>
</div>


<p class="wp-block-paragraph">With Unicorn, you can achieve this by using <b>NewItemOnlyEvaluator </b>to create content once only, if it doesn’t already exist. Thus, you will only deploy new items in the environment.</p>



<p class="wp-block-paragraph">Okay, so you are ready with the Project, you’ve installed Unicorn and set up custom configuration. Once you deploy it, you should be able to open the Unicorn admin page.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="779" height="517" src="https://sam-solutions.com/wp-content/uploads/Sitecore-Unicorn-8.png" alt="Introduction to Unicorn" class="wp-image-3569"/></figure>
</div>


<p class="wp-block-paragraph">Here you can see each config as a separate group that can be synced independently. When you do production deploy, you can open this page and click the SYNC buttons for configurations. This is how you make the items on the disk appear in Sitecore.</p>



<h3 class="wp-block-heading">Automated Deployment</h3>



<p class="wp-block-paragraph">If you want to automate the process, Unicorn provides the tools to do this.</p>



<p class="wp-block-paragraph">Unicorn has an <b>automated tool API </b>whereby you can invoke actions in the Unicorn control panel from a script, for example, invoking sync after code deployment.</p>



<p class="wp-block-paragraph">Another option is <b>Transparent Sync</b>. When this tool is used, the items on the disk magically appear in Sitecore without syncing. Transparent Sync looks simpler, but personally, I prefer to control sync manually. So during deployment, I use the Unicorn admin page to sync content.</p>



<p class="wp-block-paragraph">If you are interested more in how serialization works in Unicorn and who actually does it, you should see Unicorn.DataProvider.config. This class is responsible for the Sitecore content serialization on the disk.</p>



<h2 class="wp-block-heading">Alternatives to Unicorn</h2>



<h3 class="wp-block-heading">TDS</h3>



<p class="wp-block-paragraph">Working with Unicorn, you probably have to deal with TDS too. Sitecore TDS and Unicorn share a similar functionality: they can serialize Sitecore items to the file system and store them in source control.</p>



<p class="wp-block-paragraph">The difference between Unicorn and TDS is that Unicorn forces all the merging to be done on the disk, so you never have to manually select what to update when you&#8217;re running a sync operation or remember to write changed items to the disk.</p>



<p class="wp-block-paragraph">Moreover,<b> Unicorn is free </b>while Sitecore TDS is licensed per developer and available as an annual subscription for $399. Still, TDS is worth the price.</p>



<h3 class="wp-block-heading">SCS</h3>



<p class="wp-block-paragraph">Another alternative is the most exciting new feature in Sitecore 10 —<b> Sitecore Content Serialization (SCS)</b>, a tool for serializing, sharing, version control and deployment of content items.</p>



<p class="wp-block-paragraph">I can recommend SCS as a new progressive tool that can be used instead of TDS and Unicorn and that combines the best of both.</p>




 
    
    <div class="editor-list-cta editor-list-cta_style_1 editor-list-cta_index_2">
        
    <div class="editor-list-cta__items">
                                    
                    			    				<style>
    					.editor-list-cta_index_2 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-button {
            				            					color: #000000;
            				            				
            				    					}
    				</style>
    			    			
    			    			    				<style>
    					.editor-list-cta_index_2 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-left {
    					    padding-left: 10px;
    					}
    					
    					.editor-list-cta_index_2 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-left:before {
    					    left: 0;
    					    top: 50%;
    					    width: 3px;
    					    content: '';
    					    position: absolute;
    					    margin-left: -10px;
    					    height: calc(100% + 10px);
    					    transform: translateY(-50%);

            				            					    							    background: linear-gradient(45deg, #6dc7ff, #e6abff);
    							            				    					}
    					
    					@media (max-width: 475px) {
    					    .editor-list-cta_index_2 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-left:before {
    					        width: 2px;
                                margin-left: -3.5px;
    					    }
    					}
    				</style>
    			                
                    			    			        			        <style>
        					.editor-list-cta_index_2 .editor-list-cta__item.editor-list-cta__item_index_1 .editor-list-cta__item-inner {
        					            						    background: #166dbd;
        						        					}
        				</style>
    			        
    			
                    			
                                
                <div class="editor-list-cta__item editor-list-cta__item_index_1">
                    <div class="editor-list-cta__item-inner">
            		                		                                <div class="editor-list-cta__item-left">
                                                                                                    <div class="editor-list-cta__item-title"><p><strong>Not on Sitecore 10 yet?</strong> Regardless of the Sitecore version you’re on now, our team – managed by a four-time Sitecore MVP – will smoothly and quickly move your solution to the latest Sitecore release.</p>
</div>
                                                	        </div>
            	        
            	                    	            <div class="editor-list-cta__item-right">
            	                                    	                                	                                	            <div class="editor-list-cta__item-event">
                    	                <div class="editor-list-cta__item-button button button_style_1">
                                            <a class="button__inner" href="/contacts/?utm_source=blog&#038;utm_medium=post_ID_598&#038;utm_campaign=cta_post_content_4005">                                                <div class="button__name">Upgrade your Sitecore</div>
                                            </a>                                        </div>
                                    </div>    
                                                                        
            	            </div>
            	                	        </div>
                </div>
                        </div>
    </div>
    



<p class="wp-block-paragraph">SCS has a Visual Studio plugin to manage content and a Sitecore command-line interface (CLI).</p>



<p class="wp-block-paragraph">The CLI tool can be used for serialization, creating item packages and publishing. No license is required — just install and start using it.</p>



<p class="wp-block-paragraph">Visual Studio plugin can push and pull changes, show differences between disk and database content, and sync items.</p>



<p class="wp-block-paragraph">The only requirement for using the VS plugin is to have an appropriate Sitecore TDS license. Installing this plugin will add an additional window called <b>Sitecore Module Explorer </b>to VS.</p>



<p class="wp-block-paragraph">Internally, CLI and VS plugin both use a Sitecore GraphQL endpoint to interact with the Sitecore instance to retrieve item information.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">We’ve discussed how to get started with Unicorn, configure and deploy it. We also compared three possible ways to serialize content in Sitecore.</p>



<p class="wp-block-paragraph"><b>Unicorn</b></p>



<ul class="wp-block-list">
<li>A free, open-source, powerful serialization tool</li>



<li>Can be used with Sitecore 10</li>



<li>Can sync users</li>



<li>Requires complex configurations that are challenging for non-expert users</li>



<li>Has community support</li>
</ul>



<p class="wp-block-paragraph"><b>TDS</b></p>



<ul class="wp-block-list">
<li>Available by subscription</li>



<li>Backed by dedicated enterprise support</li>
</ul>



<p class="wp-block-paragraph"><b>Sitecore Content Serialization (SCS)</b></p>



<ul class="wp-block-list">
<li>A new progressive tool</li>



<li>Combines the best of TDS and Unicorn</li>
</ul>



<p class="wp-block-paragraph">All of these tools are great at doing the work they were built for. It’s up to you to decide which one to choose. Hopefully, you’ve found the information in this article helpful. If you have any questions, feel free to contact me via LinkedIn or Twitter.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sam-solutions.com/blog/set-up-sitecore-unicorn/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SiteCron Integration: A Practical Guide</title>
		<link>https://sam-solutions.com/blog/sitecron-integration/</link>
					<comments>https://sam-solutions.com/blog/sitecron-integration/#respond</comments>
		
		<dc:creator><![CDATA[Raman Khalupau]]></dc:creator>
		<pubDate>Wed, 28 Jul 2021 14:37:42 +0000</pubDate>
				<guid isPermaLink="false">https://sam-solutions.de/?post_type=article&#038;p=621</guid>

					<description><![CDATA[When you need to perform repeated tasks in Sitecore CMS, you can either schedule jobs using the built-in mechanism or leverage a simpler alternative — the SiteCron module. In this article, I would like to share my experience of integrating SiteCron as a separate Helix module by adding a new Feature project to an existing [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When you need to perform repeated tasks in Sitecore CMS, you can either schedule jobs using the built-in mechanism or leverage a simpler alternative — the SiteCron module.</p>



<p class="wp-block-paragraph">In this article, I would like to share my experience of integrating SiteCron as a separate Helix module by adding a new Feature project to an existing solution. In this way, we get compliance with the <a href="/blog/migrating-to-helix/">Helix</a> principles and have the place to store our custom jobs.</p>



<span id="more-621"></span>



<h2 class="wp-block-heading">What Is SiteCron?</h2>



<p class="wp-block-paragraph">SiteCron is a module by <a href="https://www.akshaysura.com/" target="_blank" rel="nofollow noopener">Akshay Sura</a> used for running scheduled tasks (jobs) in Sitecore. It provides an advanced way to run Cron-based jobs using Sitecore and Quartz Scheduler, and the CronTrigger functionality to help you schedule both simple and complex tasks.</p>



<p class="wp-block-paragraph">Basically, <a href="/services/portals-wcms/sitecore/">Sitecore</a> has its own scheduling mechanism. It runs the jobs on the basis of the end time of the last run and over time; hence, there is a delay in the jobs triggering. If you need your jobs to run at a certain time, SiteCron is a good solution.</p>



<h2 class="wp-block-heading">SiteCron Integration</h2>



<p class="wp-block-paragraph"><b></b><b>1. Add a new Feature.Scheduler project in the solution.</b></p>



<p class="wp-block-paragraph"><b></b><b>2. Install the SiteСron nugget package.</b></p>



<p class="wp-block-paragraph">You can see the list of files added to the project once the SiteCron package is installed.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1878" height="736" src="https://sam-solutions.com/wp-content/uploads/SiteCron1-1.png" alt="SiteCron-integration-guide" class="wp-image-5919"/></figure>
</div>


<p class="wp-block-paragraph">Let’s see what these files are and what they are used for.</p>



<ul class="wp-block-list">
<li>Z.SiteCron — configuration files. We will leave them as they are.</li>



<li>SiteCron.aspx — a jobs viewer, the page where you can see your scheduled tasks.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="989" height="454" src="https://sam-solutions.com/wp-content/uploads/SiteCron2-1.png" alt="SiteCron-integration-guide" class="wp-image-5921"/></figure>
</div>


<ul class="wp-block-list">
<li>Konabos.Minions.RunMinion.dll — as per the documentation, you should include this as part of commerce deployment. Also, there is a sample job that shows you how to run a minion on a schedule in the SiteCron source on GitHub.</li>



<li>SitecorePackage — contains FULL and Items Only Sitecore packages. Use <i>SiteCron FULL Sitecore Package.zip</i> if you want to install the module onto your Sitecore environment without creating an additional module in your solution. This will prevent you from installing the SiteCron nugget package into your solution. That is the fastest way to start working with SiteCron. Personally, I prefer a <i>SiteCron Items Only Sitecore Package.zip</i> and the NuGet package combination with further integration of Feature.Scheduler into the CI process, and using the project to store my custom jobs.<br><b></b><b></b></li>
</ul>



<p class="wp-block-paragraph"><b>3. Install </b><b><i>SiteCron Items Only Sitecore Package.zip</i></b><b> in Sitecore.</b></p>



<p class="wp-block-paragraph"><b></b><b>4. Update Unicorn configuration and serialize SiteCron items.</b></p>



<p class="wp-block-paragraph">You should also be careful with content deployment and ensure that items are not lost during deployment. Looking into the <i>SiteCron Items Only Sitecore Package.zip</i> package, you can easily define what items need to be serialized. Below is an example of the Unicorn configuration for syncing items.</p>



<p class="wp-block-paragraph"><b></b><b>5. Update CI configuration to deploy the Feature.Scheduler project.</b></p>



<p class="wp-block-paragraph">This step depends on the deployment workflow you follow. But in my case, I just added new publish profiles in the Feature.Scheduler project and made a few changes in the deployment script.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="366" height="312" src="https://sam-solutions.com/wp-content/uploads/SiteCron3-1.png" alt="SiteCron-integration-guide" class="wp-image-5924"/></figure>
</div>


<p class="wp-block-paragraph">We are done with the installation and deployment setup. SiteCron is now in your solution. You should be able to open the <i>/sitecore/admin/SiteCron.aspx</i> page in your browser and create new jobs under <i>/sitecore/system/Modules/Sitecron</i>.</p>



<h2 class="wp-block-heading">SiteСron Job Example</h2>



<p class="wp-block-paragraph">Let&#8217;s take a look at how to create and configure a new job. As an example, I&#8217;ll take the <a href="https://github.com/akshaysura/Sitecron/blob/master/SampleJob/SampleJob/Publishing/SmartSitePublishJob.cs" target="_blank" rel="nofollow noopener">SmartSitePublishJob</a> provided by the module author. It is quite simple and straightforward, so I will not dwell on its implementation. The main thing is that you can write your own custom implementation of the <i>Execute</i> method.</p>



<p class="wp-block-paragraph">Job is a class inherited from the <i>Quartz.IJob</i> interface. The <i>Execute</i> method runs when the job is triggered and contains custom code which does the job.</p>



<p class="wp-block-paragraph">Let&#8217;s copy the code as it is to our project, and just slightly correct <i>Namespace</i>.</p>



<p class="wp-block-paragraph">Now, let&#8217;s add a new SiteCron Job to Sitecore.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1262" height="417" src="https://sam-solutions.com/wp-content/uploads/SiteCron4-1.png" alt="SiteCron-integration-guide" class="wp-image-5926"/></figure>
</div>


<p class="wp-block-paragraph">Move on to the settings. The job calling interval is set up by using Cron expressions. Let&#8217;s say we want the job to run every Wednesday at 12:00 pm, so the expression should look like &#8220;0 0 12? * WED&#8221;. More examples and detailed parameter descriptions can be found on the <a href="http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontriggers.html" target="_blank" rel="nofollow noopener">Quartz Scheduler website</a>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1388" height="672" src="https://sam-solutions.com/wp-content/uploads/SiteCron5-1.png" alt="SiteCron-integration-guide" class="wp-image-5928"/></figure>
</div>


<p class="wp-block-paragraph">Your job will now run according to the specified schedule and will be displayed on the jobs viewer page.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1214" height="478" src="https://sam-solutions.com/wp-content/uploads/SiteCron6-1.png" alt="SiteCron-integration-guide" class="wp-image-5930"/></figure>
</div>


<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">In this article, we reviewed an example of SiteCron integration within a separate Feature module into an existing solution. Generally speaking, this module works like a charm and is an excellent solution for running scheduled jobs.</p>



<p class="wp-block-paragraph">The source code is available on <a href="https://github.com/RamanKhalupau/Feature.Scheduler" target="_blank" rel="nofollow noopener">Github</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sam-solutions.com/blog/sitecron-integration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[TechSpeak] Frontend Development for Sitecore SXA: Key Considerations</title>
		<link>https://sam-solutions.com/blog/sitecore-sxa-frontend-development/</link>
					<comments>https://sam-solutions.com/blog/sitecore-sxa-frontend-development/#respond</comments>
		
		<dc:creator><![CDATA[Raman Khalupau]]></dc:creator>
		<pubDate>Thu, 25 Feb 2021 14:39:56 +0000</pubDate>
				<guid isPermaLink="false">https://sam-solutions.de/?post_type=article&#038;p=615</guid>

					<description><![CDATA[The look and feel of your Sitecore-based solution largely depends on SXA themes — sets of assets, such as images, scripts, fonts and style sheets enabled by CSS and JavaScript. They aren’t closely tied to the content and functionality of the solution, and can be created separately from them.&#160;To provide the integrity and modularity of [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The look and feel of your Sitecore-based solution largely depends on <strong>SXA themes</strong> — sets of assets, such as images, scripts, fonts and style sheets enabled by CSS and <a href="/services/technologies/javascript-development-services/">JavaScript</a>. They aren’t closely tied to the content and functionality of the solution, and can be created separately from them.&nbsp;To provide the integrity and modularity of a Sitecore-based solution and compile the styling of a number of projects, we rely on <strong>Gulp</strong>, a JavaScript-based manager that automates frequently performed tasks. With this tool, we can compile scattered stylesheets from different projects in a single CSS file, and place them right where they belong.&nbsp;Read on to learn how styling in <a href="/services/portals-wcms/sitecore/">Sitecore</a> 9 works in practice.</p>



<span id="more-615"></span>



<h2 class="wp-block-heading">Choosing and Creating a Theme</h2>



<p class="wp-block-paragraph">First, make sure you have access to Sitecore 9 and <a href="/blog/sitecore-accelerator-benefits/">SXA</a> 1.8.</p>



<p class="wp-block-paragraph">There are a few different ways to create a new Sitecore theme:</p>



<ul class="wp-block-list">
<li>Add one when developing a website</li>



<li>Add one using a script</li>



<li>Create one manually</li>
</ul>



<p class="wp-block-paragraph">It should have a similar structure to that shown in the screenshot below.</p>



<p class="wp-block-paragraph"><em>Image 1. The Themes.Wireframe</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="246" height="367" src="https://sam-solutions.com/wp-content/uploads/Themes.Wireframe-image.png" alt="Themes.Wireframe-photo" class="wp-image-6299"/></figure>
</div>


<p class="wp-block-paragraph">Also, there should be a Gulp folder. In this example, I am using the existing <em>Wireframe</em> theme.</p>



<h2 class="wp-block-heading">Using a Theme on a Site Component</h2>



<p class="wp-block-paragraph">To use a theme on a website component, open Experience Editor, click <strong>Theme</strong> in the Select Theme&nbsp;pop-up window, and then choose what you need.</p>



<p class="wp-block-paragraph"><em>Image 2. The Theme button</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="779" height="134" src="https://sam-solutions.com/wp-content/uploads/Theme-button-SXA-Sitecore-image.png" alt="Theme-button-SXA-Sitecore-photo" class="wp-image-6301"/></figure>
</div>


<p class="wp-block-paragraph">Themes can be different for different devices. A specific one can even be created for mobiles and for printing purposes. We are choosing Wireframe, a standard theme, for this item and for the default device.</p>



<h2 class="wp-block-heading">Sitecore 9 and Gulp Setup</h2>



<ol class="wp-block-list">
<li>Browse to App_config and enable Gulp. Then, remove the <em>.disabled</em> extension to enable <em>\Website\App_Config\Include\Feature\z.SPE.Sync.Enabler.Gulp.config.disabled.</em></li>



<li>In Experience Editor, choose the Experience Accelerator tab and press the Export button. In the modal window, make sure that you export a ZIP file and that you choose the proper context.</li>
</ol>



<p class="wp-block-paragraph"><em>Image 3. Theme export</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="619" height="150" src="https://sam-solutions.com/wp-content/uploads/Theme-export-Sitecore-SXA-image.png" alt="Theme-export-Sitecore-SXA-photo" class="wp-image-6303"/></figure>
</div>


<p class="wp-block-paragraph">3. After you press Next, all pages of this site are exported. Certain errors can arise if the component isn’t adjusted to work in Experience Editor. Then, download the archive and unpack it into the project’s repository. Later, this code will be pushed into the repository.</p>



<p class="wp-block-paragraph"><em>Image 4. Export popup</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="406" height="195" src="https://sam-solutions.com/wp-content/uploads/Export-popup-Sitecore-SXA-image.png" alt="Export-popup-Sitecore-SXA-photo" class="wp-image-6306"/></figure>
</div>


<p class="wp-block-paragraph">4. Browse to the theme’s root. In our example, the path is <em>D:\MyProject\-\media\Themes\Wireframe\gulp. Generally, the path is: -/media/Themes/[Tenant Name]/[Site Name]/[Theme Name]/gulp.</em></p>



<p class="wp-block-paragraph"><em>5. Open the </em><em>gulp/config.js</em> file and change the <em>server</em> box to the name of your site in the Server Options object.</p>



<p class="wp-block-paragraph"><em>Image 5. Config.js</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="624" height="477" src="https://sam-solutions.com/wp-content/uploads/Config.js-Sitecore-SXA-image.png" alt="Config.js-Sitecore-SXA-photo" class="wp-image-6308"/></figure>
</div>


<h2 class="wp-block-heading">Configuring a Theme</h2>



<p class="wp-block-paragraph">Open the <em>gulp/serverConfig.json</em> file and configure it in accordance with the current theme. By the way, ProjectPath and ThemePath boxes can be specified in the <em>gulp/config.js</em> file; it depends on the standard template configuration.</p>



<p class="wp-block-paragraph"><em>Image 6. ServerConfig.json</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="568" height="21" src="https://sam-solutions.com/wp-content/uploads/ServerConfig.json-Sitecore-SXA-image.png" alt="ServerConfig.json-Sitecore-SXA-photo" class="wp-image-6310"/></figure>
</div>


<ol class="wp-block-list">
<li>In VS Code, press the View tab and open the Terminal in the current folder. Make sure that you use the appropriate version of <a href="/services/technologies/node-js-development-services/">Node.js</a> (6.10 and later). To check it, type <em>node -v </em>in the Terminal.</li>
</ol>



<p class="wp-block-paragraph"><em>Image 7. Node.js version</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="459" height="60" src="https://sam-solutions.com/wp-content/uploads/Node.js-version-Sitecore-SXA-image.png" alt="Node.js-version-Sitecore-SXA-photo" class="wp-image-6312"/></figure>
</div>


<p class="wp-block-paragraph">If the <em>node -v </em>command can’t be executed, it’s likely that Node.js hasn’t been installed on the PC.</p>



<p class="wp-block-paragraph">2. Type the <em>npm install</em> command to install all dependencies required to use Gulp that are specified in <em>json</em> and wait for the execution of the command.</p>



<p class="wp-block-paragraph"><em>Image 8. Npm install</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="635" height="125" src="https://sam-solutions.com/wp-content/uploads/Npm-install-Sitecore-SXA-image.png" alt="Npm-install-Sitecore-SXA-photo" class="wp-image-6314"/></figure>
</div>


<p class="wp-block-paragraph">3. Type <em>npm install -g gulp-cli</em> to install Gulp and Gulp CLI and wait for the command execution.</p>



<p class="wp-block-paragraph"><em>Image 9. Install gulp-cli</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="496" height="66" src="https://sam-solutions.com/wp-content/uploads/Install-gulp-cli-Sitecore-SXA-image.png" alt="Install-gulp-cli-Sitecore-SXA-photo" class="wp-image-6316"/></figure>
</div>


<p class="wp-block-paragraph">4. Type the <em>gulp</em> Authorize if required, or just press <em>Enter</em>.</p>



<p class="wp-block-paragraph"><em>Image 10. The Gulp</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="650" height="216" src="https://sam-solutions.com/wp-content/uploads/Gulp-Sitecore-SXA-image.png" alt="Gulp-Sitecore-SXA-photo" class="wp-image-6318"/></figure>
</div>


<p class="wp-block-paragraph"><em>Image 11. The Gulp</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="350" height="193" src="https://sam-solutions.com/wp-content/uploads/Gulp-Sitecore-image.png" alt="Gulp-Sitecore-photo" class="wp-image-6320"/></figure>
</div>


<p class="wp-block-paragraph">From this moment on, our files can be tracked. Gulp can detect changes in any file and, using PowerShell scripts, sends the information to the server where the theme is located.</p>



<p class="wp-block-paragraph"><em>Image 12. The Wireframe theme</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="407" height="325" src="https://sam-solutions.com/wp-content/uploads/Wireframe-theme-Sitecore-SXA-image.png" alt="Wireframe-theme-Sitecore-SXA-photo" class="wp-image-6322"/></figure>
</div>


<p class="wp-block-paragraph">If we make changes to a SASS file, it will transform into a CSS file, and then SASS and CSS files will be sent to the server.</p>



<p class="wp-block-paragraph">The configuration is located in <em>gulp/config.js</em> and can be changed if required.</p>



<h2 class="wp-block-heading">Adding a Custom Script</h2>



<p class="wp-block-paragraph">Create a <em>custom.js</em> file in the Scripts folder.</p>



<p class="wp-block-paragraph"><em>Image 12. The Custom.js file</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="391" height="184" src="https://sam-solutions.com/wp-content/uploads/Custom.js-file-Sitecore-SXA-image.png" alt="Custom.js-file-Sitecore-SXA-photo" class="wp-image-6324"/></figure>
</div>


<p class="wp-block-paragraph">Gulp detects the file immediately after it has been added, and the script that adds it to the server gets executed.</p>



<p class="wp-block-paragraph">Then, add the following code to <em>custom.js.</em></p>



<p class="wp-block-paragraph"><em>Image 13. The Custom script</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="631" height="25" src="https://sam-solutions.com/wp-content/uploads/Custom-script-Sitecore-SXA-image.png" alt="Custom-script-Sitecore-SXA-photo" class="wp-image-6326"/></figure>
</div>


<p class="wp-block-paragraph">Open Experience Editor and browse to the console.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1027" height="43" src="https://sam-solutions.com/wp-content/uploads/Gulp-file-Sitecore-SXA-image.png" alt="Gulp-file-Sitecore-SXA-photo" class="wp-image-6328"/></figure>
</div>


<p class="wp-block-paragraph">To learn more about Sitecore 9 styling, SXA themes and Gulp, feel free to contact me.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sam-solutions.com/blog/sitecore-sxa-frontend-development/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[TechSpeak] What Is Sitecore Helix?</title>
		<link>https://sam-solutions.com/blog/sitecore-helix/</link>
					<comments>https://sam-solutions.com/blog/sitecore-helix/#respond</comments>
		
		<dc:creator><![CDATA[Raman Khalupau]]></dc:creator>
		<pubDate>Fri, 29 Jan 2021 14:41:46 +0000</pubDate>
				<guid isPermaLink="false">https://sam-solutions.de/?post_type=article&#038;p=608</guid>

					<description><![CDATA[Today, there’s a wide variety of principles that software developers use extensively, such as OOD, SOLID, design patterns and others. Although they are all suited for development on Sitecore, this powerful platform has specific requirements, and Helix is at its heart. What is it? Let’s figure it out. What Is Sitecore Helix? Helix was created [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Today, there’s a wide variety of principles that software developers use extensively, such as OOD, SOLID, design patterns and others. Although they are all suited for development on <a href="/services/portals-wcms/sitecore/" target="_blank" rel="noreferrer noopener">Sitecore</a>, this powerful platform has specific requirements, and Helix is at its heart. What is it? Let’s figure it out.</p>



<span id="more-608"></span>



<h2 class="wp-block-heading">What Is Sitecore Helix?</h2>



<p class="wp-block-paragraph"><a href="https://www.sitecore.com/knowledge-center/blog/511/introducing-sitecore-helix-4380" target="_blank" rel="nofollow noopener noreferrer">Helix</a> was created by Sitecore, a major vendor of <a href="/blog/what-is-sitecore/" target="_blank" rel="noreferrer noopener">systems for content management</a>, in 2016. It is a collection of practices, guidelines and rules for the development lifecycle that provides recommendations on technical design principles and solution architecture of Sitecore product implementations.</p>



<p class="wp-block-paragraph">However, Helix is theory, and Habitat is practice. Habitat is a sample application that perfectly illustrates theoretical recommendations specified by Helix. At the end of 2019, Sitecore Habitat was replaced by Sitecore Helix Examples.</p>



<h2 class="wp-block-heading">The Layer Concept of Helix</h2>



<p class="wp-block-paragraph">The main purpose of Helix is to provide developers with clear-cut guidelines to help them build solutions that are:</p>



<ul class="wp-block-list">
<li>future-proof</li>



<li>easy to maintain</li>



<li>easy to extend.</li>
</ul>



<p class="wp-block-paragraph">With its recommendations, it’s easy to get through all stages of Sitecore implementations.</p>



<h2 class="wp-block-heading">The Benefits of Helix</h2>



<p class="wp-block-paragraph">Although aimed at making life easier for developers, this set of rules provides benefits to customers and Sitecore partners as a result.</p>



<p class="wp-block-paragraph">Helix gives<strong> Sitecore partners</strong> an opportunity to implement projects with clean code, guided by unified, tried-and-true development methodology approved and supported by the vendor. This helps build consistently, and efficiently and quickly onboard new developers.</p>



<p class="wp-block-paragraph"><strong>Customers</strong> also enjoy the benefits of the tried-and-true development methodology, such as high quality and quick time to market of implementations, and their easy management.</p>



<h2 class="wp-block-heading">Helix: the Main Principles of the Implementation Process</h2>



<p class="wp-block-paragraph">Generally, a Habitat project sample will provide an understanding of what Helix rules–based architecture looks like.</p>



<p class="wp-block-paragraph"><em>Image 1. The Solution ‘Habitat’</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="310" height="105" src="https://sam-solutions.com/wp-content/uploads/The-Solution-Habitat.png" alt="The-Solution-Habitat" class="wp-image-6383"/></figure>
</div>


<p class="wp-block-paragraph">Helix has three layers: Project, Feature and Foundation (or three folders in a solution, respectively) with downward dependency.</p>



<p class="wp-block-paragraph">The <strong>Project</strong> layer includes everything that is related to websites. Also, it brings together all features in one place.</p>



<p class="wp-block-paragraph"><em>Image 2. The Project Layer</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="364" height="172" src="https://sam-solutions.com/wp-content/uploads/The-Project-Layer-image-min.png" alt="The-Project-Layer" class="wp-image-6385"/></figure>
</div>


<p class="wp-block-paragraph"><em>As the name suggests, the</em><em><strong> Feature</strong></em>&nbsp;layer contains all features, such as listings, news, blog posts, product descriptions and others. Solution features aren’t interdependent, and changes in one feature don’t bring about changes in other places.</p>



<p class="wp-block-paragraph"><em>Image 3. The Feature Layer</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="338" height="600" src="https://sam-solutions.com/wp-content/uploads/The-Feature-Layer-image-min.png" alt="The-Feature-Layer" class="wp-image-6387"/></figure>
</div>


<p class="wp-block-paragraph">The <strong>Foundation</strong> layer is the basic, lowest level of the Sitecore system. Any change that happens here impacts other modules, which is why it should be reliable and robust.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A module is any project in the Foundation or Feature layer that relates to a specific business goal.</p>
</blockquote>



<p class="wp-block-paragraph"><em>Image 4. The Foundation Layer</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="257" height="360" src="https://sam-solutions.com/wp-content/uploads/The-Foundation-Layer-image-min.png" alt="The-Foundation-Layer" class="wp-image-6390"/></figure>
</div>


<h2 class="wp-block-heading">Helix and Unicorn</h2>



<p class="wp-block-paragraph">As you will notice when surfing a Habitat solution, Unicorn is used here by default. The <em>Sitecore.Foundation.Serialization</em> module contains the main setup.</p>



<p class="wp-block-paragraph"><em>Image 5. The Sitecore.Foundation.Serialization Module</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="260" height="401" src="https://sam-solutions.com/wp-content/uploads/The-Sitecore.Foundation.Serialization-Module-image-min.png" alt="The-Sitecore.Foundation.Serialization-Module" class="wp-image-6392"/></figure>
</div>


<p class="wp-block-paragraph">Sometimes, other modules will contain configuration to serialized items specific to a certain module.</p>



<p class="wp-block-paragraph"><em>Image 6. An Example of Serialization Location</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="624" height="204" src="https://sam-solutions.com/wp-content/uploads/An-Example-of-Serialization-Location-image-min.png" alt="An-Example-of-Serialization-Location" class="wp-image-6394"/></figure>
</div>


<p class="wp-block-paragraph">Serialized items are stored in the <em>serialization</em> folder inside a module.</p>



<p class="wp-block-paragraph"><em>Image </em><em>7. The Serialization Folder</em></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="295" height="355" src="https://sam-solutions.com/wp-content/uploads/The-Serialization-Folder-image-min.png" alt="The-Serialization-Folder" class="wp-image-6396"/></figure>
</div>


<h2 class="wp-block-heading">Helix and TDS</h2>



<p class="wp-block-paragraph">Hedgehog, an IT company that specializes in Sitecore, has built its own version of Habitat, based on TDS (Team Development for Sitecore). This version is especially helpful for developers who use TDS.</p>



<h2 class="wp-block-heading">Well-Thought-Out, Rule-Based Sitecore Development</h2>



<p class="wp-block-paragraph">Although Sitecore development is possible without Helix, I strongly recommend following its principles and relying on it in your implementations. It helps enhance <a href="/services/qa-services/">development quality</a> and create solutions that are easy to use, maintain and extend, regardless of your business requirements.</p>



<p class="wp-block-paragraph">To learn more about it or about <a href="/blog/migrating-to-helix/">migrating to it</a>, feel free to contact me.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sam-solutions.com/blog/sitecore-helix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
