2015 in review

Dear Readers,

Wish you all a very Happy and Prosperous 2016. The WordPress.com stats helper monkeys prepared a 2015 annual report for this blog.

Here’s an excerpt:

The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 26,000 times in 2015. If it were a concert at Sydney Opera House, it would take about 10 sold-out performances for that many people to see it.

Click here to see the complete report.

Sitecore Module: Sitecore Community Project Templates

Dear Sitecore Family,

Happy Belated Thanksgiving!

My friend Brijesh Patel and I, were working on this module from at least 4 weeks, and we planned to publish this Sitecore Module right on Thanksgiving, as a vote of thanks to Sitecore and the great Sitecore healthy and helping Community.

Thank you!

Sitecore Community Project Templates, is created by 2 Sitecore Community members, and its for the Community!

Yes, all of you!

Inspiration:

All passionate developers have one thing in common, learning a new thing and then doing a small demo regarding it to understand its core concept. — isn’t it?

And, while doing so, we create a Sitecore solution and a Visual Studio project solution. Now, for our help, Alen Pelin has already created SIM, which helps in setting up a Sitecore solution very quick. But still, we spend a lot of time in setting up the visual studio solution. We thought, why not create a set of project templates (for individual projects) and starter kits (a project solution containing multiple projects) so that the time to setup things is set to minimum and a developer only concentrates on one thing — The POC of his/her learning!

With this noble cause, started a journey of formulating the projects and what you see is a very basic first cut of the project templates. We have a future plan of upgrading these and making it very useful not just for POC stuff, but even for live projects. We dream to make it so worth of use, that for every Web project / Project solution that any Architect/Lead Developer of a project makes, he/she uses Sitecore Community Project Templates!

And as you know, nothing can be achieved by a single person — IT NEEDS A TEAM TO ACHIEVE A DREAM! — THE BIGGER THE DREAM, THE MORE IMPORTANT THE TEAM! And hence, we need your help!

We need a lot of suggestions to be incorporated into the Project Templates and if you want to contribute, just go ahead and fork the Development Branch on GitHub and submit your changes back, we would be more than happy to accept until there are any breaking changes or malicious code!

Oh, you exited about it? Want to know more about the module?

Sure, here you go!

Documentation: Sitecore Community Project Templates

Sitecore Marketplace: Sitecore Marketplace Module

Source code: GitHub

Visual Studio Gallery Link: Check here, review and rate the Template we have created. Tell us what you liked and what you think should be included so that our developer lives are better! :)

 

Have a great Thanksgiving!

Solution for Caching issue if Lambda Expression used with Glass Mapper Models

Hello Sitecore Family,

Recently, we were doing a POC of upgrading a Sitecore solution from Sitecore 7.0 to Sitecore 8.0 and while moving there (as in, not InPlace upgrade but by Migrating to new instance), we were doing a number of foundational tasks – like, upgrading  the .Net framework to 4.5, upgrading ASP.NET version to 5.1, upgrading Glass Mapper to 4.0.5.54 and some others.

Challenge:

Now this solution we have is a multisite Sitecore solution and after upgrading a pretty basic website project with the above mentioned assemblies, we found that a couple of locations were showing images from some other site! weird.

We later found, that whichever site was loaded first, that image got loaded and that image was shown on other sites of the similar structure.

CACHING ISSUE! — Oh yes!

Oh but it was a simple Glass Mapper Html Helper, how can it lead us to caching issue?

@Html.Raw(GlassHtml.RenderImage(Model, x => Model.Logo, null, true))

With all these questions, I contacted Mike Edwards. — Oh well, I first contacted Mark Stiles by mistake and explained him every bit of the issue I faced — Bummer!

Solution:

Firstly, thanks to Mike Edwards for being approachable on Slack chat and giving a solution to the problem that we had. Glass Mapper is really well documented, and that’s where the solution was:

http://www.glass.lu/Mapper/Sc/Documentation/GlassHtml

Quoting Mike Edwards here:

If you have written your lambda expression with reference to the Model as you have in your example you will need to turn off the lambda cache.

That’s what we did and bingo, the error was solved!

What we did?

We added the following code in the method called CreateResolver in the class GlassMapperScCustom in App_Start folder:

config.UseGlassHtmlLambdaCache = false;

A small suggestion Mike,  documentation is great but search is good to have on Glass Mapper site. :)

Happy Solving Caching Issues! :)

Sitecore Module: Sitecore Interactive Publish

Hello Sitecore Family,

I and my colleague Vrushal Talegaonkar created a Sitecore Module called Sitecore Interactive Publish a couple of weeks ago.

This module, is mainly prepared keeping the Sitecore Business Users in our focus, but obviously is useful for all of us — whether a Business User, a Developer or an Administrator.

Inspiration for the Module: 

Whenever there are multiple users publishing simultaneously, and one publish job starts and the other users get a queued message in the publishing dialog. We thought, how nice would it be to add a table in the publishing status screen to show the current publishing job going on as well as other publishing related jobs and when would our queued job be taken up.
It would be good to have the current publishing job highlighted so that the user gets understands the status of his/her publishing job. Again, a situation, where business users are so busy working on Sitecore that they don’t want to wait for the Publish Dialog to show them the finished publishing message. So won’t it be nice, if in some way, we can show our users a Publish History.

This idea, led to the development of this module, and its live for all of you to use, comment upon, and even contribute to.

Oh, you exited about it? Want to know more about the module?

Sure, here you go!

Documentation: Sitecore Interactive Publish

Sitecore Marketplace: Sitecore Marketplace Module

Source code: GitHub

Sitecore Package: Take the latest Package from this location

One thing to mention, the Sitecore package is the quick and easy way to configure and check the Sitecore Interactive Publish. It contains both items and files (includes config and assembly) and hence it would restart your Sitecore instance once installed. Also, that this module is available for Sitecore 8 and above only. Refer to the Readme for more details on configuration.

Happy Sitecore Publishing using Sitecore Interactive Publish Module! :)

My Learnings of using Sitecore Development Toolkit

Dear Sitecore Family,

Today’s post is about my experience of working with Sitecore Development Toolkit.

Firstly, Thank you Alen Pelin for a nice simple yet powerful tool, for syncing the Sitecore Items between different Developer Boxes as well as different environments.

Yes, I agree that TDS is by far the best tool for Item Sync, but there are other good options available too, like Sitecore Development Toolkit and Unicorn, which are developed by Sitecore Enthusiasts and the main benefit is they are free to use for the Sitecore Community.

Note: This post is about sharing my experience of using Sitecore Development Toolkit and nothing more.

Pros:

  • SDT is FREE and is available on Sitecore Marketplace for the Sitecore Community to use.
  • SDT is hooked with various item state events – Saved, Moving, Moved, Renamed, Deleting – and based on these, it serializes the items on disk.
  • We can commit the serialized .item files and their corresponding folders into our repository, and take full advantage of versioning and revision control system (SVN, TFS, GIT, etc).
  • When Sitecore starts, SDT deserializes all the Serialized items. So, to add item changes of different developers of our team to our local development environment, after taking the latest build, we simply need to recycle the application pool of the Sitecore application so that our Local box is updated. So no human intervention is required to apply item changes of other developers to our local database.

Cons

  • The serialized items are not managed as a project, the way they are in TDS, and it becomes a little difficult to work with them as individual files. Often times, we might want to add the folder to our Visual Studio solution, to manage these files and commit in our repository rather than an individual folder or directory.
  • On Multiple saves for an item, the same item is saved as different revision numbers and sometimes the item changes are lost if someone in the team forgets to commit all the serialized files – i.e. the ones with different revision numbers.
  • If two developers are working on the same item, the revision IDs of the item will be different in both the developers and there is a strong possibility that we overwrite the item changes of the other developers.
  • The last point in Pros can also be considered in Cons, say we take the latest build and see only CSS changes are available and move ahead without recycling the application pool, the item of other developers will be overwritten by us on performing different activities like – Save, Rename, etc.
  • In case we configure SDT in the midst of an ongoing project, then we cannot directly have the items serialized. We need to fire some action – say save or rename to get all the required items serialized on disk.

Have you used SDT or any other Free Item Sync Tool? Do you have any other learnings? Yes?

Well, then please share, because Sharing is Caring!

Happy Sitecoring! :)

Create TDS Package with only specific Sitecore Items

Dear Sitecore Family,

How are you all doing? Sincere Apologies for being away from the blog for quite sometime. I was busy with a number of things along with working on a few of my personal projects on Raspberry PI.

Well, the only thing that I can say right now is:

terminator-back

Lets talk a little bit about today’s post. A couple of days back, I had a discussion with a few Sitecore developers regarding a challenge that they were facing. They wanted to create a package using TDS, but only for some items, say for the ones which are created and committed in a given Sprint. So lets discuss it.

Challenge:

Can we have only specific items in a TDS Package rather than having all the synced items?

Solution:

I am sure you know that we can create a Sitecore Update Package using TDS. For those who don’t here’s check this to know the configurations that we need to do for enabling it.

As we all know TDS is a great tool and after getting the ease of its use as well as the features that it provides, our gut feeling says there has to be some way of getting it done.

And the answer of the above, is YES! It can be done, using the “Exclude Item From” property and selecting the Visual Studio Solution configuration, from where we want to exclude it.

Lets see how can we do it.

These are the Build Settings that we do in our TDS Project:

TDS-Build-Settings

And these are the Update Package Settings we do in our TDS Project:

TDS-Update-Package-Settings

Now, lets create some items in our Sitecore Solution.

TDS-Items-in-Sitecore

Lets sync these items with our TDS Project.

TDS-Synced-Items

Now, when we build, based on the Solution Configuration that we have set in our Visual Studio, a directory is created in our project directory.

VS-Solution-Configuration

TDS-Project-Bin-Package-Folder

In here, is the update package created. To check its contents, we can rename it to .zip from .update and open it like any other zip file and check.

TDS-Package-Main-Templates-Project-FolderTDS-Inner-Items

Now, say this is Package 1 – which we have created and installed on all the required environments. In the next package, we don’t want these items to be packaged. Say we created new items only under the Base Item and dont want Page-Items item to be packaged. So here’s what we do.

TDS-New-Items-in-Sitecore

After the items are synced, Set the “Exclude Items From” property in the item/s which we don’t want to be included in the Sitecore Package.

TDS-Item-Properties

Now, when we build and check the Sitecore Package, we will be able to find, that the Page-Items Item will not be present in the Package.

TDS-Package-Page-Items-Not-in-Package

TDS-Package-New-Items-Added

Hope you enjoyed the post!

Happy Sitecoring! :)

Page Editor Experience – Set the Datasource Template for the Presentation Component

Dear Sitecore Family,

Yesterday, we saw how selecting a Datasource Location helps the Business User.

Today, lets take it a little further, lets see if we can do something so that the Business User is not confused between selecting the type of Datasource Item for a component, if there are a number of components available at the specified Datasource Location.

Challenge:

Can we make the Business User journey easier while working with Sitecore by specifying the Type of Item that is expected as a Datasource Item by the Presentation Component?

Solution:

Again, the answer is Yes! Thank you Sitecore!

Oh, you want to know how can this be done?

Well, lets check that out.

Quoting an example from the Launch Sitecore 8 Demo Site and again considering the Carousel Component. In every Presentation Component – whether a Rendering or a Sublayout, there is an item field called Datasource Template. [Note: Sitecore as already provided the value for this field in Launch Sitecore site, I have removed it for our understanding purpose, of how things work when this field value is not specified at first and then specified later.]

We will make use of this field, to specify the Type of Datasource expected by the component.

Datasource-Template-Field

By default, for any Presentation Component, this field is empty. So, whenever the Business User tries to set the Datasource from Page Editor, this is what he/she will see.

Select-anyitem-as-datasource

Select-anyitem-as-datasource-2

See that, the Business User can select any item as a Datasource.

Now, lets check what happens when we set the Datasource Template, for the Rendering.

Template-in-Datasource-Template-Field

Datasource-Template-Field-Set

And now checking the Select Associated Content dialog from Page Editor.

Select-anyitem-as-datasource-2

Datasouce-Item-cannot-be-selected-if-type-doesnt-match

Oh Wow!

So this is what happens. Sitecore Validates the item that is selected as a Datasource and if the Datasource Item is not of the Template specified above, it cannot be added as a Datasource.

At the same time, Sitecore gives us a nice validation message for the understanding purpose.

Simple and Useful right?

Hope you enjoyed the post!

Happy Sitecoring! :)