What is Sitecore publishing Service

Sitecore has released Publishing Service Module 1.1 along with Sitecore 8.2 version. Latest version of publishing service avaiable on Sitecore website is Sitecore Publishing Service 2.0 Update-1. This version of the Publishing Service is compatible with Sitecore 8.2 Update-2 and Sitecore 8.2 Update-3. This module is based on Windows Server Hosting (.NET Core). Below are FAQs about Sitecore publishing service

What is Sitecore publishing service?
The Sitecore Publishing Service (“SPS”) module is an optional replacement for the existing Sitecore publishing methods. This module increases publishing throughput, reduces the amount of time spent publishing large volumes of items, and offers greater data consistency and reliability. The module also improves the user experience and provides better visual feedback to the user on the state of the publishing system. The Publishing Service does not use any of the features, pipelines, and settings in the current publishing system, it is an entirely new way of publishing Sitecore items and media.

Does Sitecore publishing service require new license?
There are no incremental Sitecore license implications for installing the service.

What are the infrastructure requirement of Sitecore publishing service? Can it be installed in existing DB/CM servers?
Sitecore Publishing Service is a lightweight service which can be installed on an existing CM/DB server or entirely new VM. While Sitecore Publishing Service will improve publishing performance, it will be important to test and monitor for potential bottlenecks in the Master and Web databases during high throughput publishing. Installation Guide for Publishing Service has some settings that can be configured to improve performance. https://dev.sitecore.net/Downloads/Sitecore_Publishing_Service.aspx
Generally, it is better to have SPS as ‘close’ to the Database Server as possible. It does not have a large footprint and is not massively CPU/Memory hungry so a new dedicated VM may not be necessary. The Sitecore Publishing Host needs to be installed first and has a dependency on .NET Core. Sitecore recommend running it under IIS which requires installing Windows Server Handling package.

Does publishing service uses old APIs?
One of the main differences between the new and old publishing is the data layer. Unlike the old publishing, the publishing service doesn’t talk to the databases via the Sitecore item APIs. However, it uses its own data layer, which only performs databases operations in bulks. The bulk operations improve the performance dramatically by mitigating the network latency problems

How fast is Sitecore Publishing Service as compare to old publishing Method?
We did a POC to compare the performance of the new publishing service vs old publishing method on Sitecore 8.2 with 100,000 items. Standard publishing method took 4:37 hours to publish 100,000 items whereas publishing service took only 6-7 minutes. We did this test on standard VM so this performance can be higher with better hardware machine but important point is that publishing server is much faster than old publishing method

Sitecore on Azure web apps – Trouble Shooting error – AppGallery Deploy Failed – System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature

We were trying to deploy Sitecore XP1 environment on Azure Web App. To deploy Siecore on azure web apps we need to provide Web Deploy Packages as input to Azure. as per this link {}, sitecore recommend deploy the Web Deploy Packages to Azure Storage Account in Blob Container. To allow access for downloading these packages, we have created Shared Access Signatures and added the SAS Token correctly to the Blob Service in my parameter.json file. While deploying the Sitecore XP1 instance we go the below error.

Error Message: AppGallery Deploy Failed: ‘System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature

Details:

{ “status”: “failed”, “error”: { “code”: “ResourceDeploymentFailure”, “message”: “The resource operation completed with terminal provisioning state ‘failed’.”, “details”: [ { “code”: “Failed”, “message”: “AppGallery Deploy Failed: ‘System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature\r\n at Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(Uri address, StorageCredentials& parsedCredentials, Nullable`1& parsedSnapshot)\r\n at Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(StorageUri address, StorageCredentials& parsedCredentials, Nullable`1& parsedSnapshot)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.ParseQueryAndVerify(StorageUri address, StorageCredentials credentials)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlob..ctor(StorageUri blobAbsoluteUri, Nullable`1 snapshotTime, StorageCredentials credentials)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.IsPremiumApp()\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.CheckCanDeployIfAppIsPremium(AppGalleryPackageInfo packageInfo, Boolean& isPremium)’\r\nFailed to download package.\r\nAppGallery Deploy Failed: ‘System.Net.WebException: The remote server returned an error: (403) Forbidden.\r\n at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)\r\n at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)\r\n at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__a.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__0.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.<DownloadPackageAndSettings>d__1b.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.<DownloadAndDeployPackage>d__d.MoveNext()'” } ] } }
From error message, you can understand that Server couldn’t authorize the request and so it returned 403 forbidden error and the Web Deploy Packages couldn’t be downloaded.

There are couple of solutions you can try -

1. When you generate the Shared Access Signature, you should be careful with the Start Time and TimeZone.
By default, it takes, UTC. You should be setting your local Timezone.
Please make sure you set start time less then the current time. Hopefully this will resolve this issue but if you are still facing the same issue then you can try an alternative approch mentioned in second post

2. Instead of using storage account on azure you can deploy you SCWDP (Sitecore web deply package) to some server in your network and pass URL of this file as parameter in ARM parameter file. URL of SCWDP.zip file must accessable to your azure account. It should resolve the above issue

Redis Cache – Sitecore

Redis Cache – Sitecore

What is Redis cache? Redis is an open source, in-memory data structure store, used as a database, cache and message broker. It supports data structures like strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperlogs and geospatial indexes with radius queries.

Sitecore Azure Redis Cache is:

  • Fully-managed
  • High throughput
  • Low-latency
  • High performance
  • Secure

Azure’s Redis Cache is based on the popular open-source Redis cache and it gives you access to a secure, dedicated Redis cache that can be accessed and managed within Azure.

Azure Redis Cache in 3 Tiers

Azure Redis Cache is available in 3 tiers: Basic, Standard and Premium!

azure-Redis-Cache-1

Features of Sitecore Azure Redis Cache

Some of the beneficial features of Azure Redis Cache – Sitecore are as follows:

1. Azure Redis Cache offers high performance, helping your application to become more responsive even when user load increases. It also offers consistent low-latency data access to power fast, scalable Sitecore Azure applications.

azure-Redis-Cache-2

2. Redis is an advanced key-value store. Keys can contain data structures like strings, hashes, lists, sets and sorted sets.

3. Redis behaves like a cache with features like transactions, publish/subscribe, Lua scripting and other configuration settings.

azure-Redis-Cache-3

4. Another good thing about Redis is that you can use it from most of the programming languages used today.

5. It is pretty easy to use and manage. You can easily monitor the health and performance of your cache through the preview portal.

6. Creating your first Redis cache is easy and can be done within a few seconds. Even managing one is easier. See through an example below using the Microsoft Azure portal:

azure-Redis-Cache-4

azure-Redis-Cache-5

azure-Redis-Cache-6

Azure Search Sitecore

Azure Search – Sitecore

With the advancing technology, you can’t continue using the same methods and tools for your business every time. It is essential to make use of the new technologies and tools so as to meet the changing and growing needs and demands of your business. One such new technology that has come up is Sitecore, which acts as an extensible platform to capture, store, manage and distribute your content in a secure and reliable manner. It is getting massively popular amongst businesses because of the flexibility, security and scalability that it provides, which helps in enhancing user experience and allows businesses to effectively maintain their online brand presence and visibility. Sitecore CMS enables businesses to have full control of their website.

Sitecore Azure

Although Sitecore itself has had a lot of success as an ‘on-premises’ software solution and content management system that facilitates on-premises deployments, deploying #Sitecore on #Azure makes it even more better as ‘Sitecore Azure’.

azure-search-1

There are two very important terms in Sitecore Azure:

1. Azure Search – Sitecore

2. Redis Cache – Sitecore

Here in this post, we are going to know in depth about Azure Search feature of Sitecore.

Sitecore Azure Search

Sitecore Azure Search provider integrates the Sitecore Search engine with Microsoft Azure’s Search Service, which is a part of Microsoft Azure computing platform.

Features of Azure Search

Which features of Azure Search make it a good deal to deploy Sitecore on Azure? And how does Azure Search – Sitecore help businesses? Some of the beneficial features of Azure Search services of Sitecore are as follows:

1. Azure Search offers extreme simplicity, scalability and stability that can be utilized to boost the user experience and performance on any business website.

2. You get support for all Sitecore search-driven UIs, including user-typed queries, and faceted searches.

3. Sitecore Azure Search also provides support for the majority of LINQ expressions, to enable rapid development of search-powered applications.

4. You get local/native support for fundamental data types such as numbers and dates in faceting, and range queries.

5. With Sitecore Azure Search, you get flexible configuration and precise control over the schema of the indexes.

6. It also offers support for running Sitecore in geo-replicated scenarios.

It is important to note here that Sitecore Azure Search is the default provider for Sitecore instances that are deployed using Sitecore Azure SDK.  Sitecore Azure Search supports on-premises and IaaS (Infrastructure as a Service) deployments. However, you shall have to configure Azure Search service with your Sitecore instance by creating a Search service, formatting the connection strings, setting up configuration files, rebuilding the indexes, mapping the Azure field types and fields and support for Azure Search.

How is Sitecore Azure Search different from Lucene and Solr search providers?

While using Sitecore Azure Search you must be aware that Sitecore Azure Search is different from the Lucene and Solr search providers. This is important to know, especially when you plan to switch between search providers.

azure-search-2.jpg

Azure Search Service is a fully managed, cloud-based service that allows developers to build rich search applications using REST APIs. This includes full-text search scoped over your content, along with advanced search behaviours similar to the ones found in commercial web search engines, like type-ahead, suggested queries based on near matches, and faceted navigation.

You can use Solr if you have a scaled environment with two or more delivering servers or two or more content authoring servers or in case you have separate servers for email, processing, reporting and publishing. The indexes are available to all servers in the environment.

On the other hand Lucene is a file-based indexing system, which means that if an index is not located on the server that the request is coming from you have to ensure that indexes across all servers remain in sync.

In the coming post, I shall also be talking about Redis Cache, what it is about and what it has to do with Sitecore.

What is Sitecore Azure

What is Sitecore Azure?

If you have come to this post, I assume that you’re a beginner with the terms Azure and Sitecore Azure. When you don’t want to be in charge of your own physical kit, you choose to deploy to something like Azure. This includes stuff like hardware, operating system, network load balancing and things that have nothing much to do with the core application.

Before moving forward to Sitecore Azure, let’s have a brief overlook at Microsoft Azure’s interface.

Microsoft Azure Interface

The Management Portal for Microsoft Azure looks somewhat like this:

sitecore-azure-1

Here is how the services look like:

Sitecore-Azure-2

Sitecore Azure

Now that you saw how the interface for Microsoft’s much hyped Azure looks like, let us come to using Azure for Sitecore.

We all know that Sitecore itself has had a lot of success as an ‘on-premises’ software solution and content management system that facilitates on-premises deployments. Sitecore, with its advanced personalization capabilities and marketing automation, gives all the power to deliver relevant content or ecommerce offers that their audiences want to see.

And then, deploying #Sitecore on #Azure makes it even better as #Sitecore Azure.

Sitecore-Azure-3

Implementing a cloud version of Sitecore, using Azure, is definitely a great idea because of the many added benefits you get while using Sitecore on Azure or Sitecore Azure. While using Azure to enjoy the cloud version of Sitecore, you get to choose from cloud platform services like IaaS and PaaS and increase your productivity. Hybrid cloud solutions open new IT options for you without adding on to the complexity of the whole thing. Sitecure Azure makes it way easier and way more efficient to build applications and dal with stuff like data storage, backup, recovery, etc. It’s not only scalable but economical with its per-minute billing to ensure that you pay only for what you use.

Sitecore-Azure-4

Going for Microsoft Azure with Sitecore only brings you more flexibility, superior infrastructure, predictable costs, enhanced performance and opportunity to review workload.

Understanding cloud platform services: IaaS, PaaS, SaaS

When using Sitecore on Azure, it is important to know what the cloud platform services like IaaS, PaaS and SaaS, have to do with Azure and services. Moving to the cloud is a very much hyped things but most remain confused about the various services and what each of them means for organizations. Here we shed some light on the differences between them.

IaaS, PaaS and SaaS are basically three approaches to deploy or consume ‘cloud’ applications.

What do IaaS, PaaS, SaaS stand for?

IaaS stands for Infrastructure as a Service

PaaS stands for Platform as a Service

SaaS stands for Software as a Service

Sitecore-Azure-5

The three of them are not services in themselves. These are just choices that you make about the level of abstraction you require. You can choose a final setup with the elements of any of these or your final Azure setup may also be a combination of IaaS, PaaS and SaaS elements.

Major Difference between IaaS, PaaS, SaaS

IaaS: IaaS or infrastructure as a Service means that you are handling over the responsibility of machines and network to a cloud platform. So, basically, with IaaS approach, you choose virtual machines over physical machines. You can still log in to the virtual machines and configure IIS, mess around in MSSQL or look at your web root.

The basic infrastructure including hardware, networking, servers is supplied by a service provider. A central, knowledgeable group holds the responsibility for infrastructure.

Sitecore-Azure-6

PaaS: However, while using PaaS or Platform as a Service, you are handling over the responsibility for SQL management to the cloud platform using its services. The 5 Azure PaaS services in Sitecore Azure module are:

1. Cloud Service

2. Storage Service

3. SQL Databases Service

4. Traffic Manager Service

5. Cache Service

Under PaaS approach, you let the cloud platform manage all these aspects.

Application platform components like persistence, runtime, frameworks, etc. are provided by a third-party. Private PaaS cloud offered as service provider and Public PaaS cloud that is offered by a third-party company.

The application development organization builds their solutions on a known, stable platform with a consistent set of components.

With PaaS, you need only to develop the application or business level logic.

The application teams and companies would have to pay a fee for this service.

Sitecore-Azure-7

SaaS: Finally, SaaS or Software as a Service takes over all your responsibility. All you need to do is to sign up, SaaS takes care of everything else. For example, Google Apps for Work is a SaaS.

In Saas, business or consumer software application is provided by a third party. Rather than calling it as Software as a Service, you can also call it Application as a Service.

Salesforce.com CRM and SAP SuccessFactors are a good example of SaaS in the business world while Facebook, Gmail and My Yahoo are consumer focused SaaS examples.

Customers typically pay some subscription, either time-based like monthly or yearly, or service-based like pay for n no. of messages, volume of photos, etc.

Where the three approaches should be used?

Who should use IaaS?

IaaS achieves cost-benefit gains at physical infrastructure level. It is a widely applicable approach. Small and medium sized organizations use IaaS from a third-party to alleviate the need for expensive infrastructure and resources in-house. Publc IaaS is used by large organizations to share up internal data centers by taking on additional load during peak periods or is used for temporary purposes like testing.

Who should use PaaS?

PaaS is applicable to organizations who develop their own comprehensive applications. PaaS drives consistency by enforcing a common application framework. It also provides access to a common development platform across the globe. As an organization, you must have knowledge of:

1. The programming languages you need to support

2. Application services/frameworks

3. Accessibility by development and the user base

4. Security policies and regulations

Who should use SaaS?

SaaS can be used by organizations of any size and in any type of business. Any organization can be used as a single SaaS application while large organizations can make use of several different SaaS applications like Salesforce.com for CRM, Office365 or Box.net.

Other Important Terms

Once you start with Sitecore Azure, there are two very important terms in Sitecore Azure:

1. Azure Search – Sitecore

2. Redis Cache – Sitecore

Check out my next posts to know more about what each one of them means and what they have to do with Sitecore Azure.

Migrate Sitecore SQL databases to Amazon RDS

This blog post will guide you to migrate Sitecore SQL Server databases to Amazon RDS.

Unfortunately, you won’t be able to directly use the MDF and LDF files in AWS at the moment so to migrate SQL database to Amazon RDS we are going to use SQL Azure Migration Wizard. Follow below steps for migration –

  1. Before starting migration please make sure
    1. You are able to connect to Amazon RDS. To check it you can utilize SQL Server Management Studio
  2. Down SQL Azure Migration Wizard tool
    1. Extract the downloaded zip file and open SQLAzureMW.exe file.
  3. Start migration
    1. Once you open SQLAzureMW.exe. you will see a page like shown in below image. In this step you have to select process. Since we are migrating Sitecore database so we will select Database under Analyze/Migrate. For Target Server dropdown list select Azure SQL Database and click next
      1Script Wizard<br /><br /><br /><br /><br /><br />
Select Process<br /><br /><br /><br /><br /><br />
Select the process you want the wizard to wak you through.<br /><br /><br /><br /><br /><br />
SQLAzureMW<br /><br /><br /><br /><br /><br />
This wizard gives you the options to anayzes, generate scripts,<br /><br /><br /><br /><br /><br />
and migrate database schemas and data from:<br /><br /><br /><br /><br /><br />
1) SQL Server to Azure SQL Database.<br /><br /><br /><br /><br /><br />
2) Azure SQL Database to SQL Server<br /><br /><br /><br /><br /><br />
3) Azure SQL Database to Azure SQL Database<br /><br /><br /><br /><br /><br />
It will also anayze SQL Profiler trace files and TSQL script for<br /><br /><br /><br /><br /><br />
compatibiltö,' Sues with Azure SQL Database.<br /><br /><br /><br /><br /><br />
NOTE: You must be DB Owner in order to anayze or migrate a<br /><br /><br /><br /><br /><br />
database.<br /><br /><br /><br /><br /><br />
Target Server<br /><br /><br /><br /><br /><br />
Anayze Onty<br /><br /><br /><br /><br /><br />
O SQL Profiler Trace File<br /><br /><br /><br /><br /><br />
O TSQL Folder<br /><br /><br /><br /><br /><br />
Anayze / Migrate<br /><br /><br /><br /><br /><br />
@ Database<br /><br /><br /><br /><br /><br />
O TSQL File<br /><br /><br /><br /><br /><br />
Run TSQL without Anayzng<br /><br /><br /><br /><br /><br />
O TSQL File<br /><br /><br /><br /><br /><br />
Server Maintenance<br /><br /><br /><br /><br /><br />
O Maintenance<br /><br /><br /><br /><br /><br />
Azure SQL Database<br /><br /><br /><br /><br /><br />
< Back<br /><br /><br /><br /><br /><br />
Next >
  4. Choose Source database
    1. This step allows you to choose the source database. First connect to your SQL server database by providing connection details. Once database server is connected successfully select source database and click on the button that says ‘Next.’ Please see below image
      5
  5. Choose action
    1. Once source database is selected then in this step select an option named as ‘Script all database objects’. This option can enable to do the complete migration of the database. But if you don’t want to migrate entire database then you select an option that says ‘Select specific database objects.’ Please see below image
      3
  1. Create SQl script
    1. Tool will create script of selected source database for the objects selected in previous step. You should save the script on local hard drive and the move ahead by hitting a click on a button ‘Next’.                         4
  2. Select Destination Database
    1. In this step provide your Amazon RDS server details and connect it. Once connected select the target database. If you have not created any database earlier, then create a new one using Create Database option and go next
      2
  3. Final Step and Review Target server Response
    1. Once you hit next in above step migration will start and you can review result of migration in this step. You can now connect to RDs database using your SQL Server Management Studio and check all the migrated data.  This tool will save a lot of time.
      6

      You may see below errors in migration report
      StoredProcedure [dbo].[aspnet_Setup_RemoveAllRoleMembers] — sp_helpuser is not supported in current version of Azure SQL DatabaseTo make sure there is no problem in migrated database because of above error I recommend connect to RDS database and make sure Stored Procedure  aspnet_Setup_RemoveAllRoleMembers is there.

Sitecore Missing valid xDB license

Problem – In Sitecore versions 8.1 and above Sitecore analytics is not working and Sitecore logs show below information

INFO  **********************************************************************
INFO  xDB is disabled.
INFO
INFO  Tracking is enabled.
INFO
INFO  Missing valid xDB license.
INFO  **********************************************************************

Cause - Sitecore added an additional key to its license file. Sitecore 8.1 requires this new key to enable xDB features. Following could be the reason:

  • Your license does not contain this new key.
  • Your license does not allow xDB features.

Solution
Sitecore 8.1 now requires a license with the “Sitecore.xDB.base” key to enable all features of the Experience Platform. If your license file does not contain this key, Sitecore will default to Experience Management (CMS-only) mode. Any customers or partners with a license to Experience Platform should contact their account manager or login to SPN if they are missing this key.

Click here for more details

Sitecore upgrade recommendations and best practices

If you are planning to upgrade your Sitecore to latest version, there are a few different ways of doing it. But be careful. Sitecore upgrades aren’t always straightforward.

Sitecore upgrade could introduce many problems if it’s done without planning. Here I will talk about recommendations and best practices to follow-up while doing upgrade

There are two upgrade approaches mentioned below–

  • Install of 8.X and migration of content
  • Incremental upgrades as per Sitecore’s documentation

Lets talk about each approach in detail

Install of 8.X and migration of content

o   In this approach we can move content (content items and media library) from old Sitecore installation to new fresh Sitecore installation via Sitecore packages. It’s a quick upgrade approach for small websites but it’s not the recommended approach.

o   Pros

  • Quick upgrade process for small websites

o   Cons

  • Not supported by Sitecore
  • Migrating content to a new solution can be a bit risky since the moved items are not updated and new versions of the UpdateInstallationWizard performs some post installation steps which fixes some field values on standard fields
  • Migrating Sitecore users to new solution reset their password. Admin has to resent password to all the users
  • Migrating content to new solution does not work well for larger projects, it’s become time consuming as compare with installing the upgrade packages

Incremental upgrade

If you are upgrading from 6.6 to 8.1, for example, this approach requires a series of intermediate steps of installing packages, updating configuration files and running update scripts on the databases

o   Pros

  • Supported by Sitecore
  • No need to worry about package installation and user migration
  • Give opportunity to migrate analytics database
  • Opportunity to upgrade Sitecore modules like WFFM and ECM without losing data

o   Cons

  • With this approach we have to run upgrade two time first during development and second before prod release with content freeze
  • Content freeze time in this upgrade is bit longer than earlier

Steps to do Sitecore Incremental upgrade

We normally divide upgrade process in eight steps

  1. Analysis and Planning
    1. What is initial and target Sitecore version
    2. How many Sitecore modules are installed in current Sitecore version
      • i.      Do these modules support target Sitecore version? Check Sitecore modules compatibility by clicking here (https://kb.sitecore.net/articles/541788)
      • For Sitecore modules such as Email Campaign Manager, Web Forms for Marketers, or the CRM connector, be aware that each module has its own upgrade path and compatibility timeline
    3.  Is there any Sitecore customizing done in Sitecore that will not be available in target version
    4.  Does current infrastructure support target Sitecore version
    5. Customers should check with their Sitecore sales rep to ensure that an upgrade to version 7.5 or 8 is fully supported by their current Sitecore license.
  2. Run Sitecore Upgrade
    • Setup project on local development machine (codebase and database)
    • Depending on initial Sitecore version start upgrade process
    • Take backup of complete code and database after upgrading to next Sitecore version
    • Make sure to upgrade Sitecore supported modules as well
    • Once upgrade reach to target version. Login to Sitecore and perform below steps –
      • Publish an item
      • Try to change presentation of item
      • Create item
      • Delete an item
  3. Internal Testing
    • Setup dev site
    • QA will do smoke testing of website and record and error found. Common error after upgrading from version to 6 to 7 is
      • The major API change between 6 and 7 is Sitecore.Search. This can be a big task depending on project size and lucene usage
      • If there are some modules installed which are not supported by Sitecore then update their code to support new API
      • If there any customization in Sitecore using OLD API that may not work in new version
  4. Bug fixing
    • Fix the issues raised by QA
  5. Alpha Testing
    • QA will run one more round of testing and validate issues raised during internal testing
  6. Beta Testing
    • Setup UAT environment so that client can validate website
  7. Preparation for Prod release
    • This is content freeze and code freeze step. From the start of this step till prod release client’s content team is not allow to make any update on content tree
    • Take latest database backups from production server and restore it on local development machine
    • Run upgrade again from initial Sitecore version
    • To save some time and avoid any human error we can do below
      • Install the Sitecore recommended upgrade packages and run the sql scripts.
      • For config updates don’t do it again instead copy all the configs from back that was created during initial upgrade for specific Sitecore version. Manually updating config files consumes lots of time and increase chances of error because of human mistake.
    • Merge any code update to UAT (if client IT team is doing it)
      • i. Make sure client IT team is not doing any major code update using initial version Sitecore API
    • Smoke testing of website by QA
    • Client can validate website and latest content
  8. Prod Release

Extend Sitecore Dedicated Publishing Log

There is now a separate publishing log in Sitecore 7.2. Any operations happening as part of the publishing pipeline will now log to this file. This includes AUDIT entries. Mainly for backwards compatibility reasons, the main log.txt will still show main publishing related entries.

Challenge
Extend the Sitecore dedicated publishing log to show main publishing entries so that it’s easy for website admin to review publishing actives

Solution
We can can use Sitecore’s “Sitecore.Publishing.Diagnostics.PublishingLog” to write any custom information into publishing log file. In our case we have followed below steps to achieve it -

  • Create a class with the name let’s say  “PublishLogExtensions.cs” and inherit it from PublishItemProcessor
  • Code of this class looks something like below

public class PublishLogExtensions : PublishItemProcessor
 {
 public override void Process(PublishItemContext context)
 {
 Assert.ArgumentNotNull(context, "context");
 Assert.ArgumentNotNull(context.PublishOptions, "context.PublishOptions");
 Assert.ArgumentNotNull(context.PublishOptions.SourceDatabase, "context.PublishOptions.SourceDatabase");
 Assert.ArgumentNotNull(context.PublishOptions.TargetDatabase, "context.PublishOptions.TargetDatabase");
 Assert.ArgumentCondition(!ID.IsNullOrEmpty(context.ItemId), "context.ItemId", "context.ItemId must be set!");
 Assert.ArgumentNotNull(context.User, "context.User");

Database sourceDatabase = context.PublishOptions.SourceDatabase;
 Database targetDatabase = context.PublishOptions.TargetDatabase;
 ID itemId = context.ItemId;
 string userName = context.User.Name;
 Item item = context.PublishHelper.GetItemToPublish(context.ItemId);

if (item.HasContextLanguageVersion())
 {
 PublishingLog.Info("Publishing Path :" + item.Paths.FullPath.ToString() + ", ID: " + item.ID.ToString() + ", Item Language Verion: " + item.Language.Name + ", By User : " + userName);
 }
 }
}
  • Above code is will append below information to publishing log about items that gets published
    - Item Path
    - Item GUID
    - Language version
    - User who published this item
  • Finally you need to create a patch config file to hook this class to pipeline and config file looks like below
<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<publishItem>
<processor type="Class,Assembly"                    patch:after="processor[@type='Sitecore.Publishing.Pipelines.PublishItem.UpdateStatistics, Sitecore.Kernel']" />
</publishItem>
</pipelines>
</sitecore>
</configuration>

After following above steps you should be able to see below entries on publishing log

publishing-log

 

Google Events Integration with Sitecore

Purpose of this module

With the help this module user can easily create onclick events on different elements like anchors. Content editor can edit arguments of google events directly from Sitecore without opening code file.

What is google event tracking

  • Event Tracking is a method available in the ”ga.js” tracking code that we can use to record user interaction with website elements.
  • To track any event we need to call “on click” attribute with tracking arguments on anchor tag.
  • The specification for the _trackEvent() method is:
    _trackEvent(category, action, opt_label, opt_value, opt_noninteraction)

How this module work

To use this module please follow below steps –

  1. Install the provided Sitecore package. Package name is “GoogleEventTracking-1.0.zip”
  2. Update your web.config file to replace standard GetLinkFieldValue processor with the custom one
    1. Standard GetLinkFieldValue –
      <processor type=”Sitecore.Pipelines.RenderField.GetLinkFieldValue, Sitecore.Kernel” />
    2. Custom (Replace standard with this)
      <processor type=”Oasis.GoogleEventTracking.CustomGetLinkFieldValue, Oasis.GoogleEventTracking” />
  3. Once above setting is updated open Sitecore content tree. You can add google events to anchors using two fields type in Sitecore
    1. Rich Text Editor
    2. General Link
  4. To insert google event using Rich Text Editor follow below steps –
    1. Select any item which Contains RTE field.
      sitecorecode-GET1
    2. Select show editor option highlighted in above image. In RTE type any text like “Google Event”. Select this text and insert link on this text by selecting Hyperlink Manger from the tools of RTE.
      sitecorecode-GET2
    3. Select Analytics Events tab in Hyperlink Manager Popup and enter events details in the form as shown in below image
      sitecorecode-GET3
    4. Click ok when you are done
    5. Accept the changes in RTE and save the Sitecore item. This event will look like below in html of page. You can see this in Sitecore as well by clicking on HTML tab of RTE
      <a onclick=”_gaq.push(['_trackEvent','Category','Action','Label',1]);”>goolge event</a>
  5. To insert google event using General Link Field Type follow below steps –
    1. Select any item which Contains General Link field.
    2. Inset link detail by selecting Insert option Link
      sitecorecode-GET4
    3. To crate google event click on Google Event option highlighted in above image. It will open a popup with the form. Fill the form with proper argument for google event
      sitecorecode-GET5
    4. Click ok when you are done
    5. Save the Sitecore item. This event will look like below in html of page. You can see this in Sitecore as well by selecting raw value checkbox
      onclick=”_gaq.push(['_trackEvent','Category','Action','Label',Value]);”

Note – This package is based on assumption that webpages are already rending google event tracking js provided by google.

Sitecore Package is available on Sitecore market marketplace Click here to download