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

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

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

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

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.

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

301 Redirect for Media Item

We recently had a requirement about 301 redirect for media item like pdf files. Sitecore Shared Source 301 Redirect module was used for 301 redirect, but it does not support 301 redirect for media item requested url, because sitecore MediaRequestHandler redirect to ItemNotFoundUrl, if requested URL does not exist in sitecore.

CustomMediaRequestHandler allows you to extend the default MediaRequestHandler, so you can easily check if the requested media Url from redirect url module, does not exist in sitecore media library, then get value of “Redirect to Item” or “Redirect to Url”, and redirect web request on these value.

Custom DoRedirect function process if request media is not in sitecore.

Because this configuration is not within the /configuration/sitecore element, this requires one or two updates to the /web.config file itself. Under the /configuration/system.webServer/handlers element:

<!–<add verb=”*” path=”sitecore_media.ashx” type=”Sitecore.Resources.Media.MediaRequestHandler, Sitecore.Kernel” name=”Sitecore.MediaRequestHandler”/>–>
<add verb=”*” path=”sitecore_media.ashx” type=”Project.Framework.CustomMediaRequestHandler, Project.Framework” name=”Sitecore.MediaRequestHandler”/>

public class CustomMediaRequestHandler : MediaRequestHandler
{
protected override bool DoProcessRequest(HttpContext context)
{
Assert.ArgumentNotNull((object)context, “context”);
MediaRequest request = MediaManager.ParseMediaRequest(context.Request);
if (request == null)
return false;
Media media = MediaManager.GetMedia(request.MediaUri);
if (media != null)
return this.DoProcessRequest(context, request, media);
using (new SecurityDisabler())
media = MediaManager.GetMedia(request.MediaUri);
string str;
if (media == null)
{
str = DoRedirect(context) ? string.Empty : Settings.ItemNotFoundUrl;
}
else
{
Assert.IsNotNull((object)Context.Site, “site”);
str = Context.Site.LoginPage != string.Empty ? Context.Site.LoginPage : Settings.NoAccessUrl;
}
if (!string.IsNullOrEmpty(str))
{
if (Settings.RequestErrors.UseServerSideRedirect)
HttpContext.Current.Server.Transfer(str);
else
HttpContext.Current.Response.Redirect(str);
}
return true;
}

private IEnumerable<Item> GetRedirects(Database db, string templateName, string versionedTemplateName, string queryType)
{
IEnumerable<Item> enumerable = (IEnumerable<Item>)null;

string setting = Sitecore.Configuration.Settings.GetSetting(SharedSource.RedirectModule.Constants.Settings.RedirectRootNode);

switch (queryType)
{
case “fast”:
IEnumerable<Item> first = (IEnumerable<Item>)db.SelectItems(string.Format(“fast:{0}//*[@@templatename='{1}']“, (object)setting, (object)templateName));
IEnumerable<Item> source = (IEnumerable<Item>)db.SelectItems(string.Format(“fast:{0}//*[@@templatename='{1}']“, (object)setting, (object)versionedTemplateName));
enumerable = Enumerable.Any<Item>(source, (Func<Item, bool>)(i => i.Versions.Count > 0)) ? Enumerable.Union<Item>(first, Enumerable.Where<Item>(source, (Func<Item, bool>)(i => i.Versions.Count > 0))) : first;
break;
case “query”:
enumerable = (IEnumerable<Item>)db.SelectItems(string.Format(“{0}//*[@@templatename='{1}' or @@templatename='{2}']“, (object)setting, (object)templateName, (object)versionedTemplateName));
break;
default:
Item obj = db.SelectSingleItem(setting);
if (obj != null)
{
enumerable = Enumerable.Where<Item>((IEnumerable<Item>)obj.Axes.GetDescendants(), (Func<Item, bool>)(i => i.TemplateName == templateName || i.TemplateName == versionedTemplateName));
break;
}
else
break;
}
return enumerable ?? (IEnumerable<Item>)new Item[0];
}

protected bool DoRedirect(HttpContext context)
{
string input = HttpContext.Current.Request.Url.ToString();
string absolutePath = HttpContext.Current.Request.Url.AbsolutePath;

Database database = Context.Database;

//bool isRedirectUrl = false;
Item redirectUrlItem = null;
foreach (Item redirectItem in GetRedirects(database, SharedSource.RedirectModule.Constants.Templates.RedirectUrl, SharedSource.RedirectModule.Constants.Templates.VersionedRedirectUrl, Sitecore.Configuration.Settings.GetSetting(SharedSource.RedirectModule.Constants.Settings.QueryExactMatch)))
{
if (input.Equals(redirectItem[SharedSource.RedirectModule.Constants.Fields.RequestedUrl], StringComparison.OrdinalIgnoreCase) ||
absolutePath.Equals(redirectItem[SharedSource.RedirectModule.Constants.Fields.RequestedUrl],
StringComparison.OrdinalIgnoreCase))
{
//isRedirectUrl = true;
redirectUrlItem = redirectItem;
break;
}
}

if (redirectUrlItem != null)
{
context.Response.StatusCode = 301;
if (!string.IsNullOrEmpty(redirectUrlItem[SharedSource.RedirectModule.Constants.Fields.RedirectToItem]))
{

var sitecoreItem = redirectUrlItem[SharedSource.RedirectModule.Constants.Fields.RedirectToItem];
var item = Sitecore.Context.Database.GetItem(sitecoreItem);
//MediaItem mediaItem = item;

var isMediaItem = MediaManager.HasMediaContent(item);

if (isMediaItem)
{
var mediaItemUrl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + MediaManager.GetMediaUrl(item);
context.Response.AddHeader(“Location”, mediaItemUrl);
return true;
}

var redirecturl = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + LinkManager.GetItemUrl(item);
context.Response.AddHeader(“Location”, redirecturl);
return true;
}
if (!string.IsNullOrEmpty(redirectUrlItem[SharedSource.RedirectModule.Constants.Fields.RedirectToUrl]))
{
var redirecturl = redirectUrlItem[SharedSource.RedirectModule.Constants.Fields.RedirectToUrl];

context.Response.AddHeader(“Location”, redirecturl);
return true;
}

}

return false;
}
}

This way we can 301 redirect for sitecore media item .

 

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

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.

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

Sitecore Experience Accelerator – What is new in rendering data source

I recently started looking into the features of Sitecore Experience Accelerator module and in this post I will share my understanding for few new ways of assigning datasource to a rendering that comes with SXA.

Motivation

With the new concept of page/partial design in SXA I noticed following things those motivated me to know more about it and write this blog post.

1. Relative Data Source:
The first thing I noticed is the datasource field value as relative path in the rendering. As you can see in the below image, the selected item is a partial design item named as “Footer” and the control properties window shows the relative datasource for a control with some special starting keyword as “local” and after that a relative item path.

SXA-datasource-1

Figure 1: Page Relative Datasource

Clearly it means there must be some resolvers those will be doing the magic of converting a relative path to full item path.
The questions are which resolver is doing that? And are there any more resolvers?

2. Datasource change is not allowed from page for a rendering that belongs to partial design:
On a page if rendering is coming from partial design than from that page content authors cannot change the datasource for the item. The datasource can only be set on the partial design itself.

But lets assume there is a requirement to design a product detail page with using partial design. A rendering should be there in the partial design that must pick the content from product item field itself.
The question is does SXA has any solution?

Findings

Let’s start from Sitecore configuration, showconfig.aspx contains following resolvers to resolve rendering datasources:

SXA-datasource-2

Figure 2: SXA pipeline processors to resolve datasource for renderings

There are six resolvers but in this post I am I will cover the three processors highlighted in the box.

1. Field Datasource
A field name from Context Item can be given in datasource and SXA will do following:

  • If the field type is link field than the target item id will be used as datasource.
  • If the field type is not link field and field value is not empty than field raw value will be used as datasource.

This method of datasourcing can solve the problem discussed for product detail page design in the motivation section.

Pipeline Processor:
<processor type="Sitecore.XA.Foundation.LocalDatasources.Pipelines.ResolveRenderingDatasource.DatasourceFromField, Sitecore.XA.Foundation.LocalDatasources" patch:source="Sitecore.XA.Foundation.LocalDatasources.config"/>

Syntax:
field:{FIELD NAME}

Example:
field:Title

2. Code Datasource:
A custom class can be created and type name of the class can be passed in the datasource. The custom class must implement the interface Sitecore.Buckets.FieldTypes.IDataSource. This interface contains single method named ListQuery. The method signature is as follows:

Item[] ListQuery(Sitecore.Data.Items.Item item)

As per the method signature, a Sitecore item will be retrieved as input and array of item will be returned. The resulting data source will be the IDs list of all items returned.

Pipeline Processor:
<processor type="Sitecore.XA.Foundation.LocalDatasources.Pipelines.ResolveRenderingDatasource.CodeDatasource, Sitecore.XA.Foundation.LocalDatasources" patch:source="Sitecore.XA.Foundation.LocalDatasources.config"/>

Syntax:
code:{FULLY QUALIFIED TYPE NAME}

Example:
code:SXA.POC.DataSources.CodeDataSource,SXA.POC


3. Page Relative Datasource
Instead of giving the full path of the item, a relative path can be passed that will be evaluated in respect of the Context Item, SXA will get the full path of the context item, appends the relative path mentioned in datasource at end and creates a full item path. This new full item path will be used as datasource value for the rendering. This resolver is used for the Relative Data Source item I mentioned in motivation section.

Pipeline Processor:
<processor type="Sitecore.XA.Foundation.LocalDatasources.Pipelines.ResolveRenderingDatasource.PageRelativeDatasource, Sitecore.XA.Foundation.LocalDatasources" patch:source="Sitecore.XA.Foundation.LocalDatasources.config"/>

Syntax:
page:{RELATIVE PATH}
local:{RELATIVE PATH}

Example:
page:/contact-us

Sample Code

Let’s create a sample to verify the above discussion.

To keep it simple I am creating a simple view rendering that will only render the datasource value and nothing else. Here is the rendering code:

<p>Datasource value is = @RenderingContext.Current.Rendering.DataSource</p>

1. Page Relative Datasource
I have few items created under the home page and one of those is “About Us” page. I have placed the rendering on home page and used the relative page path in data source.

SXA-datasource-3

Figure 3: Page Relative Datasource assignment in presentation

Once published we can see the full item path on the page:

SXA-datasource-4

Figure 4: Page Relative Datasource result

2. Field Datasource
I have placed the rendering on the home page and used the field data source method and used the field name as “title”.

SXA-datasource-5

Figure 5: Field Datasource assignment in presentation

Once published we can see the title field value on the page:

SXA-datasource-6

Figure 6: Field Datasource result

There is no sample in this post with a link field but that is easy to do. You can add a link field to the page template and assign it a target Sitecore item. After that just go to the presentation details and change the field name to your link field name, publish all changes and open the page, you will see the item id of the item selected in link field.

3. Code Datasource
Let’s first decide what should the custom code must perform. For simplicity I want to build a custom code functionality that will treat all children item from the context item as datasource. Let’s add a custom data source class:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sitecore.Buckets.FieldTypes;
using Sitecore.Data;
using Sitecore.Data.Items;
namespace SXA.POC.Datasources
{
  public class CodeDataSource : IDataSource
  {
    public Item[] ListQuery(Sitecore.Data.Items.Item item)
    {
      var l = newList<Item>();
      if (item.Children != null)
      {
        foreach(var child in item.Children)
        {
          l.Add(child asItem);
        }
      }
     return l.ToArray();
    }
  }
}

Build the solution and publish.

At the Sitecore end we have two items under the home item, let’s check their IDs first.

SXA-datasource-7

Figure 7: First child item under home

SXA-datasource-8

Figure 8: Another child item under home

Now let’s place the code source in the rendering data source:

SXA-datasource-9

Figure 9: Code Datasource assignment in presentation

Once published we can see the IDs of children pages on the home page:

SXA-datasource-10

Figure 10: Code Datasource result

Conclusion

Sitecore provides several ways to assign data source to a rendering. The existing data souring ways include providing full path of the Sitecore item, providing a Sitecore item ID or writing a query. SXA adds some new ways for data souring and gives more flexibility and power to the Sitecore architectures to design the solution.

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

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.
Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

Sitecore User Group Jaipur Successfully Launched

sugimg

The First Meetup organized by Sitecore User Group Jaipur

SUGJPR or the Sitecore User Group Jaipur organized their first ever technical meetup in Jaipur on November 19, 2016 from 2 p.m.-6p.m. at Hotel Sarovar Portico, Vaishali Nagar. The entire event was sponsored by Unicolumn Software Private Limited, which is a digital agency established in 2011 and a pioneer in the field of Sitecore development.

Why SUGJPR?

The founders talked about why they have come up with SUGJPR. And the reason is to foster use of Sitecore development. The platform aims to connect developers and people who have interest in learning new tips and tricks about Sitecore development.

Founders –

Topics and Presentations – 

Sitecore® Experience Platform™ – How you can own experience (Presented by Jagmohan Rathore Sitecore MVP 2017) 

The meetup event started with a presentation on Introduction to Sitecore where we explore the power of Sitecore and learn Features and talked about the need of using a CMS, what Sitecore is, how it brings a lot of opportunities for developers, content writers as well as marketers. The features, which make it such a desirable asset for large enterprises were also talked about such as managing multiple websites, using content between different websites, multi-lingual, drag and drop functionality, SEO optimization, automated deployment, easy integration of APIs, AB testing, Sitecore Analysis, etc.

The idea was to make the audiences aware of what Sitecore CMS is and how its ample amount of features could actually be very beneficial for your businesses.

Getting started with Sitecore – Building A Very Simple Website (Presented by Mahendra Shekhawat and Gaurav Agarwal) –

Basic of Sitecore installation, configuration and tuning of Sitecore in .NET environment, design and implement templates & layouts for a very simple website. Both gave a demo on how to build a website using Sitecore, which involved the basic functionality of the platform, hosting and accessing tools.

Networking Break -

The SUGJPR meetup event included a short networking break where students, developers, core organizers and others from the audience took some time to interact and connect with each other while enjoying snacks with tea or coffee.

Sitecore Experience Accelerator (SXA) (Presented by Vipin Banka)-

Later in the day, Vipin Banka, Solution Architect at Unicolumn and a Sitecore certified .NET developer 6.0, introduced Sitecore Experience Accelerator (SXA) to the audience. He also gave a detailed demo on the installation process and use of SXA among developers and content editors

Whats Next?

Next meet up is plan in the first quarter of 2017, So please stay tune and join us on Meetup –

https://www.meetup.com/Sitecore-User-Group-Jaipur-Meetup/

Thanks

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

First ever Sitecore Technical User Group Event in Jaipur by SUGJPR

SUGJPR happy to announce our first upcoming event on Saturday, November 19th, 2016 from 2.00 PM – 6.00 pm. Venue - Hotel Sarovar Portico Vaishali nagar, Jaipur

SUGJPR

Agenda: 

  • Sitecore® Experience Platform™ – How you can own experience -Explore the power of Sitecore and learn Features, Uses of Sitecore and how it is better then other CMSs.
  • Getting started with Sitecore – Building A Very Simple Website – Basic of Sitecore installation, configuration and tuning of Sitecore in .NET environment, design and implement templates & layouts for a very simple website.
  • Sitecore Experience Accelerator (SXA) -A set of toolings and processes to allow the rapid creation of websites by increasing the amount of work that can be done in parallel.

schedule Details- 

  • 2:00PM – 2:15PM – Welcome/Registration
  • 2:15PM – 2:30PM – Introduction
  • 2.30PM – 3:15PM – Presentation – Introduction to Sitecore® Experience Platform™
  • 3.15PM – 3:30PM – Break
  • 3:30PM – 4:15PM – Presentation -Getting started with Sitecore – Building A Very Simple Website
  • 4:15PM – 4:45PM – Snacks and Tea
  • 4:45PM – 6:00PM – Presentation -Sitecore Experience Accelerator (SXA)

Please join us  – https://www.meetup.com/Sitecore-User-Group-Jaipur-Meetup/events/235463719/

If you have any questions. Please contact us -

  • email – sitecoreugjaipur@gmail.com
  • Mahendra - +91 92525 82898
  • Gaurav - +91 80581 54358
  • Office - 0141-2358028
Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn

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

Share thisEmail this to someonePrint this pageTweet about this on TwitterShare on FacebookShare on Google+Share on TumblrShare on LinkedIn