Skip to content
October 29, 2019 / kiranpatils

Have you noticed OOTB Sitecore Diagnostics Service (Beta)?

Recently, I was trying to generate Sitecore Support Package using SSPG.

Which looks like following on last step:


Following screen got revealed as soon as I clicked on Done button.

In past, I’ve used SDT (Sitecore Diagnostics Tool) in the past for validating Sitecore instance (I’m sure you as well). But after Azure Web Apps you can’t install SDT. SDS latest version has reesolved this issue, where you can provide SSPG generated package to SDT as input and same analysis will be done by SDT.

As always Sitecore team has gone one step further to SDT as part of Sitecore Support Package generator admin page. When you click on “Agree and Continue”, Tool will upload SSPG Package and provide you analysis report. Which looks like following — Which is Standard SDT report.

Hope this makes your diagnostics faster – Thank to Sitecore!

October 21, 2019 / kiranpatils

Sitecore Publishing Service Nirvana

Challenge:

Recently SUGNCR team provided (Thank you team!) me an opportunity to share my learnings on “Sitecore Publishing Service (SPS)”.

This year – I’ve used all power of SPS for our Enterprise clients. And the more I used it the more I love it. Have come across few common questions/myths from Sitecore community folks. During this webinar was I’ve attempted to answer all those basic questions and make your SPS on-boarding as smooth as possible.

Eager to get hold of it? Let’s delve into it.

Solution:

  • You can watch Webinar from here :

It also has nice story which will help you understand why we need Sitecore publishing service.

Read from Left to right

Hope this helps you!

Happy Sitecore publishing! 🙂

September 29, 2019 / kiranpatils

Sitecore Package Deployer (SPD) learnings

Challenge:

We love automation, I hope you too! If you/your company culture, don’t have time to automate then following is a good read:

https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/en/thing_78/

Image result for we are busy

As you know in Sitecore eco system, Templates/Layouts/Rendering/Items are as critical and important as your code files.

There are few ways to automate Sitecore Items deployment. We have been relying on SPD – Sitecore Package Deployer.

It just works! But recently we faced two nice challenges with it and this post is about those challenges and our approach towards solving it.

Eager to know more about it? Let’s read:

Solution:

Package installation order

Generally, we generate 3 update packages out of our 3 TDS solution:

  1. TDS.Core : Core DB related item updates.
  2. TDS.Master : Master DB related item updates, Excluding Content section.
  3. TDS.Master.Content : Master DB related item updates, Only Content section.

During deployment, we used to face one challenge that at times, TDS.Master.Content update package will install before TDS.Master update package. In other words, Item will be installed first it’s template.

Unfortunately, there is no easy way to control this using SPD. We tried options and out of that following solution has worked for us:

With the help of SPD Team, we learnt that SPD installs packages in alphabetical order.

We used that learning to solve our challenge. We prefixed “A”, “B”, “C” for our TDS packages in TDS’s Update Package configuration.

TDS Update Package Configuration

After above configuration, TDS Update package names were:

  1. A.TDS.Core.update
  2. B.TDS.Master.update
  3. C.TDS.Master.Content.update

During our research we also came across, Package bundling : http://hedgehogdevelopment.github.io/tds/chapter4.html#package-bundling – This is something we haven’t tried. But this should also solve problem. Will leave this for your brevity to try this!

And that fixed our ordering issue! 🙂 But wait – Is life that easy? It’s not – We faced another challenge. Which is mentioned below.

Sync Package Installation :

We have XP Scaled environment, Where CM and CD is isolated and our Octopus deployment has following steps:

  1. Deploy TDS Update packages on CM Environment : Deploys update package on CM Environments under SPD folder.
  2. Wait for TDS Update package installation : There is no easy way to monitor update package installation. So, there was some configured wait time in power shell before going to next step.
  3. Perform Sitecore publish : Triggers Sitecore publish.

Above process works perfectly fine for few items. But as items grew it was hard to configure accurate “Wait time” for step#2. At times, Sitecore publish used to get triggered even step #2 was not completed.

We did a quick search to solve this problem and we found this post : https://sitecorerap.wordpress.com/2017/09/26/synchronous-deployments-with-sitecore-package-deployer/

As you can see from above post, it suggests updating few core DLLs. Which we wanted to avoid.

After some research we came up with following option:

  1. We disabled this agent : “<agent type=”Hhogdev.SitecorePackageDeployer.Tasks.InstallPackage, Hhogdev.SitecorePackageDeployer” method=”Run” interval=”00:01:00″/> “ which will not install package automatically.
  2. We added a octopus step which does following things:
    1. It triggers Update package install using this URL : [YourSite]/sitecore/admin/StartSitecorePackageDeployer.aspx [You can also call it with force parameter : [YourSite]/sitecore/admin/StartSitecorePackageDeployer.aspx?force=1] – This post explains this nicely : https://prcode.blog/2018/08/08/quick-tips-for-the-sitecore-package-deployer/ – At times we have been noticing failure. So, we used force parameter and it helped us make this process stable!
    2. SPD generates “JSON” file for each update package. As soon as package installation is done. And adds status “success”/”failure”. Our PS Script monitors this and it will keep monitoring till all packages are installed and their respective JSON files are created. If all are success then it proceeds to next step, which is Sitecore publishing else it aborts Octopus deployment process.[Credits : https://twitter.com/vyas_manglesh]

Above solutions helped us stabilize our Sitecore item deployment process. Hope it does for you as well! You do it differently and more efficiently? Why don’s share with world? Blog it!

Happy Deployment! [Go home, your loves ones are waiting for you!]

September 27, 2019 / kiranpatils

Module : Hotfix Checker (HFC)

Challenge:

As a Developer/Architect you always want to make sure your Sitecore app has latest and greatest hot fixes deployed.

Hot fixes are part/heart of any product. Sitecore being enterprise level CMS and with this IaaS/PaaS/Micro service world. New scenarios gets identified which introduces one new hotfix.

Over the years, community has identified that it’s tough to be in sync with all Sitecore hot fixes for your current solution. At the same time, you don’t want your team to spend N number of hours investigating something which is already identified by Sitecore team and they already have hot fix out there.

To solve this challenge Sitecore team, came up with an idea of Github repository : https://github.com/SitecoreSupport

But it was still tough to search and locate any particular hot fix which applies to your Sitecore version. https://twitter.com/MariaBorhem and https://twitter.com/bramstoopcom identified this challenge and they came up with https://www.sitecorehotfixversionselector.com/ using this URL, you can search and check all available Sitecore hot fixes. It also has RSS Feed. Which is being plugged in Sitecore Slack’s #hotfixfeed channel.

One fine morning, I was thinking to simplify this further. I wanted someone to do automatic comparison for my Sitecore version and tell me the result. You also think the same? Then Hotfix checker [a.k.a. HFC] is for you!

Solution:

  • HFC simplifies all steps, which you as a human will do to compare your installed hot fixes and Sitecore’s recommended hot fix.
  • This is how result looks like:
HFC V 1.0

Curious to try this out? Please visit : https://klpatil.github.io/HotFixChecker/

I would like to give a huge shout out and lot of credits to Maria and Bram for simplifying data and providing me feed to access this data – Thank you, Thank you, Thank you folks!

Have a bug free Sitecore application!

September 13, 2019 / kiranpatils

Coveo for Sitecore (C4S) Quick Start guide

Challenge:

Your client/your company has got Coveo for Sitecore license and you have to get your Coveo implementation done. And you have few of the following questions:

  • How to approach?
  • Does Coveo replaces Solr/AzureSearch?
  • Coveo for Sitecore setup is complex?
  • Coveo is on Cloud only?
  • How much development time it takes? I must develop everything on my own?
  • Can I have Coveo on premise setup?
  • From where I should start?

Then this post is for you only!

Solution:

Before I go in step by step approach let me try to answer few of the above common questions:

  1. Coveo doesn’t replace Solr/AzureSearch/Lucene [If you are still using Lucene]. Even if you have Coveo you will need to use Solr/AzureSearch because Sitecore still relies on it. Also, for some of the functionality which doesn’t need Machine learning and relevance based tuning capabilities. Would strongly recommend not to use Coveo. But use Solr/AzureSearch. As Coveo has query limits and Coveo is not right fit for those kinds of needs.
  2. Coveo for Sitecore is only available on Cloud — Coveo has stopped giving on premise version any more. Coveo for Cloud setup is straight forward and in cloud.

I hope these answers few of your basic questions. You have more? please drop a note in comment section of this post.

Have been involved in few of the Coveo for Sitecore implementations and based on my learning came up with my approach towards starting Coveo project.

Before you delve further, I’m not Coveo Guru. And following list is just few pointers based on my learning. Hope it works for you as well. And I encourage you to amend to this list. So, someone can have smooth start on Coveo as you had

For saving my keystrokes, As I’ve also limited keystrokes left : https://keysleft.com/ instead of writing Coveo for Sitecore, I will mention C4S. They both are same.

Let’s delve in to this:

Hope you found this information helpful. If yes, then Thanks to Coveo team, Few awesome community members for all such helpful material for someone to get started.

Everything has been there already. This post has just indexed all the information in single post — Like Coveo does with your data!

Happy Coveo Implementation! 🙂

Featured image credits : https://blog.coveo.com/coveo-for-sitecore-5-the-ultimate-search-recommendations-engine-for-sitecore/

September 5, 2019 / kiranpatils

NullReferenceException when trying to load Coveo indexes in Indexing Manager

Challenge:

After successful configuration of Coveo instance, We thought to add Coveo transform files in our deployment process and do deployment.

As soon as we did deployment we started noticing following Stacktrace:

120 13:19:48 ERROR [Sitecore Services]: HTTP GET URL https://scbasics/coveo/api/index/v1/indexes   Exception System.NullReferenceException: Object reference not set to an instance of an object.  at Coveo.SearchProvider.AbstractSearchIndexSummary.<get_NumberOfDocuments>b__42_1()  at Coveo.SearchProvider.AbstractSearchIndexSummary.TryPerformCallToIndexCommunication[T](Func`1 p_CallToIndexCommunication, T p_DefaultValue) .................................................................System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()  at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)  at System.Linq.Enumerable.ToList[TSource]System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext() --- End of stack trace from previous location where exception was thrown ---

If you are already facing this error and trying to find a solution. Then this post might help you.

Solution:

  • We also checked Coveo Diagnostics page, and it was showing all green.
  • Command center was not showing list of indexes
  • Sitecore log file was showing above stack trace for each Command center screen load
  • As you do, we also did quick google search and came across this post from my colleague – Dan S.

https://connect.coveo.com/s/question/0D50d00006UQwvjCAD/nullreferenceexception-when-trying-to-load-indexes-in-indexing-manager

We checked all our config files. But we haven’t found anything suspicious.

After spending lot of time, we could figure this out. After looking at log file from start — We found following entry:

As soon as we seen this, We thought to check Coveo admin user (We recommend different user for Coveo) was locked out somehow.

This might have been locked out due to deployment errors/transformation errors. But stacktrace what we seen in staring of this post didn’t help us pin point that.

So, It is good to check full log file. As there are few main errors will happen during Initialization only.

Special thanks to Varun to work along with me to troubleshoot this.

August 9, 2019 / kiranpatils

Sitecore 91 Azure PaaS Identity service error

Challenge:

Recently we were trying to setup Sitecore 9.1 (XP Single) on Azure PaaS with Sitecore’s ARM Template : https://github.com/Sitecore/Sitecore-Azure-Quickstart-Templates/tree/master/Sitecore%209.1.1/XPSingle

We were able to run setup successfully. But post login, it was showing blank screen. Instead of Sitecore Launchpad.

And we noticed following error on Identity server:

019-08-05T21:02:26.6633964+00:00 [FTL] (Sitecore STS/RD0003FF6419BC) Unhandled exception: “IDX10630: The ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’ for signing cannot be smaller than ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’ bits. KeySize: ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’.
Parameter name: key.KeySize”
System.ArgumentOutOfRangeException: IDX10630: The ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’ for signing cannot be smaller than ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’ bits. KeySize: ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’.
Parameter name: key.KeySize
   at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider.ValidateAsymmetricSecurityKeySize(SecurityKey key, String algorithm, Boolean willCreateSignatures)
   at Microsoft.IdentityModel.Tokens.AsymmetricSignatureProvider..ctor(SecurityKey key, String algorithm, Boolean willCreateSignatures)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateSignatureProvider(SecurityKey key, String algorithm, Boolean willCreateSignatures)
   at Microsoft.IdentityModel.Tokens.CryptoProviderFactory.CreateForSigning(SecurityKey key, String algorithm)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.CreateEncodedSignature(String input, SigningCredentials signingCredentials)
   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.WriteToken(SecurityToken token)
   at IdentityServer4.Services.DefaultTokenCreationService.CreateJwtAsync(JwtSecurityToken jwt)
   at IdentityServer4.Services.DefaultTokenCreationService.CreateTokenAsync(Token token)
   at IdentityServer4.Services.DefaultTokenService.CreateSecurityTokenAsync(Token token)
   at IdentityServer4.ResponseHandling.AuthorizeResponseGenerator.CreateImplicitFlowResponseAsync(ValidatedAuthorizeRequest request, String authorizationCode)
   at IdentityServer4.ResponseHandling.AuthorizeResponseGenerator.CreateHybridFlowResponseAsync(ValidatedAuthorizeRequest request)
   at IdentityServer4.ResponseHandling.AuthorizeResponseGenerator.CreateResponseAsync(ValidatedAuthorizeRequest request)
   at IdentityServer4.Endpoints.AuthorizeEndpointBase.ProcessAuthorizeRequestAsync(NameValueCollection parameters, ClaimsPrincipal user, ConsentResponse consent)
   at IdentityServer4.Endpoints.AuthorizeCallbackEndpoint.ProcessAsync(HttpContext context)
   at IdentityServer4.Endpoints.AuthorizeCallbackEndpoint.ProcessAsync(HttpContext context)
   at IdentityServer4.Hosting.IdentityServerMiddleware.Invoke(HttpContext context, IEndpointRouter router, IUserSession session, IEventService events)
2019-08-05T21:02:26.6665182+00:00 [ERR] (Sitecore STS/RD0003FF6419BC) Connection id “”0HLOPSKHN4OKD””, Request id “”0HLOPSKHN4OKD:00000005″”: An unhandled exception was thrown by the application.
System.ArgumentOutOfRangeException: IDX10630: The ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’ for signing cannot be smaller than ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’ bits. KeySize: ‘[PII is hidden by default. Set the ‘ShowPII’ flag in IdentityModelEventSource.cs to true to reveal it.]’.
Parameter name: key.KeySize

If you are also facing similar issue or noticing same error, then this post may have a solution for you.

Solution:

To troubleshoot this further, we had to look at each role to find out what was going on under the hood:

  1. CM Server:
    1. Logs : We were not able to find anything useful. Config file : We checked Config file here \App_Config\Sitecore\Owin.Authentication.IdentityServer\Sitecore.Owin.Authentication.IdentityServer.config and it also had nothing suspicious.
  2. Identity Server :
    1. We could see above listed error in Identity server’s log

It was tough to decrypt that error. Because it’s not general stack trace. So, thought to do quick google search and found only one link, which was related to Sitecore.

Once we couldn’t find anything. We thought to reach out to Sitecore and they were able to help us.

This is what Sitecore support shared:

Looking at the exception it seems the same issue reported here:
https://github.com/IdentityServer/IdentityServer3/issues/2845

In order to solve it you will need a new certificate with 2048 bits key length.

We checked our Certificate and it was using 1024 bits. And as soon as we generated new certificate with 2048, reinstalled Sitecore app and we were able to fix this error.

One more thing — When you delete app from portal. It doesn’t clean certificate. So, before redeploying your app with new certificate. Please make sure all old certificated are deleted.

Hope this helps!

%d bloggers like this: