Recap of SUGCON 2018 – Berlin

I have decided to share with you my impressions from SUGCON 2018 as fast as possible to give as many details as I can about the event.

It was my second time when I had a chance to be on SUGCON and I have to say that this year it was better and bigger than year before. I believe next year it can be only better than the current one so it means that if you will decide to go there you have to be ready for enormous amount of knowledge and huge group of attendees.

Organizers of the SUGCON informed us that in these year almost 600 people have decided to join the event – so next year can be 1000! Community is growing very fast and that is the fact which also was visible during presentations – so great quality of them means that people which had been chosen to conduct presentations were the best experts in the world.

If you were not be able to be in Berlin this year – try to do everything to attend on SUGCON 2019 – date and venue were already announced – London, on 4&5 April 2019 – see you there!

But ok – what actually was so cool this year? Below you will find a list of presentations which I choosed. If you want to know more about what I experienced on SUGCON – just read on.

DAY 1

On first day very important change has been announced. Starting from now  every new Sitecore version will be published in line with following assumptions.

After the introduction Jason Wilkerson and Richard Seal told us a story about marketing automation in Sitecoreland – it was very interesting and let understand many people why Sitecore is something more than just and CMS.

After that Kam Figy showed us how JSS & GraphQL can empower frontend layer of Sitecore solutions and how we can use the GraphQL to feed other services with data from Sitecore.

Then Alexei Vershalovich made a great show during his presentation. I had never seen so many Sitecore features working together in so complex example. Marketing automation was looking so easy as never before – I have to try use more of it in the future ( I think that not only me have plan like this).

Then I went to see Rob’s Habraken presentation about GDPR – extremely important thing but not very popular topic in developers community.

Rob shared with us many good tips and starts with really obvious thing – we are developers not a lawyers – we should not be the people who decides what will be implemented – that should be defined by the lawyers and client. Check few slides from his presentation here:

At the end of the day you have to remember that:

That was my last presentation of this day.

Later we were celebrating during Hackathon award ceremony (congrats LasVegans from Poland! – Robert Dębowski, Tomasz Juranek, Wojciech Urban) and MVP award ceremony.

DAY 2

On second day I was waiting for Dmytro’s Shevchenko presentation – last year it was the best presentation on the SUGCON (in my opinion) and this year he presented like continuation of last year presentation. All attendees had a chance to know what is under the hood of xConnect.

Dmytro explained for instance what is the difference between pessimistic and optimistic concurrency control of contact updates

and why we do not have to worry about that too much in Sitecore 9

At the end of presentation he showed the summary which can help you in decision “to upgrade Sitecore or not to upgrade”.

Later I wanted to check what Sitecore Installation Extensions (SIX) will bring for developers. Robert Senktas showed us how easly we can extend Sitecore Installation Framework (SIF) and why we do not have start with extensions from scratch because we have got already an option – SIX which provides many very useful features like installation of SIF prerequisites or installation of older Sitecore versions. Check this here: Sitecore Installation Extensions (SIX).

Next presentation “White hat hacker’s guide to the internet” conducted by Mikkel Romer was very interesting. Even subject of it was so interesting that people were coming to the room with chairs which were taken from other rooms!

Mikkel showed us why we NEVER should not underestimate the value of security. Everything what is in internet can be hacked by bad people and used to do very bad things.

But for me – the biggest value of this presentations is fact that many people had started to think about security and I bet that many of them had decided to check if they used provided by Sitecore recommendations available in security hardening documentation.

After so popular topic I have decided to check something very new to me – “Sitecore & the Blockchain” – I do not sure if I understood all the information which Jason Bert was trying to share with us. Presentation was great and very interesting but I guess I just needed some additional preparation before it.

Then we had a chance to see long chain of presentations.

Kamruz Jaman & Mike Reynolds conducted funny presentation about new Forms module – I would never say that anyone will be able to use Forms with so big smile on the face – but Jammykam and SitecoreJunkie really did that.

Alex Shyba & Adam Weber showed us JSS in action and after that Pieter Brinkman closed the event and announced the time&venue of next year SUGCON.

At the end we all thanked for SUGCON organizers team for great job which they did. Event was great but we are waiting for more in next year – thank you all once more time!

PS. Sorry for the quality of the photos – it was not easy to be closer to the screen 😉

Lifecycle of services and support

From time to time we all hear some rumors about Sitecore plans. People say interesting or sometimes strange things about incoming changes. Until today I was trying to filter what is true and what is just a gossip – but you know what? – we do not have to think about those things too much! At least in topics like cloud services and support.

I was not aware about fact that Sitecore provides clear information about their plans in terms of cloud services and support. Read on to know more about that publications.

Sitecore Cloud Services Lifecycle

In article about Sitecore Cloud Services Lifecycle you will find information about:

  • Sitecore Managed Cloud
  • Sitecore Email Cloud
  • IP Geolocation Service
  • Device Detection

And many others. What is interesting? Sitecore prepared new version of Device Detection service which replaced old one. It is not longer available for Sitecore 8 so if you want to use it you should upgrade your Sitecore to version 9. Google Apps and  Page Preview cloud services are not longer available.

More about that you will find here.

If you want to check extended information about changes in Device Detection you should check article here.

Sitecore Product Support Lifecycle

This part for some of you can be even more interesting than previous one. Why? Because partially it answers for question “when upgrade Sitecore to version 9?”.

Of course everyone who has bigger experience with Sitecore would answer:

  • “now”
  • “as fast as it is possible”

But if you need more time then in table “Support Phases For Specific Products” you will find the date when Sitecore will stop providing support for Sitecore 8.  I will not give you here the answer – you have got some time, but check particular dates here.

Summary

Both articles from links where updated week or two weeks ago. I believe they will be updated after every Sitecore update or even more often. That means that it would be good idea to add them to yours favorite links – I did that and recommend the same for you.

WFFM – incorrect formsRoot ID – Multisite

Today I want to share with you an solution for very unclear error which can occurs when we use Web Forms For Marketers in multisite solution.

You will see this error inside Experience Editor when you will be able to select forms:

Regarding to Sitecore documentation if you will add “formsRoot” parameter to the “site” node in configuration file – you will be able to define different forms root for every page.

But what will happen if ID which you will define will not exist in content tree or you will make a typo and it will not be properly ID? You will see following error:

Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.]
   System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args) +14649723
   System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args) +105
   System.String.Format(String format, Object[] args) +103
   Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateCommand(String sql, Object[] parameters) +189
   Sitecore.Data.DataProviders.Sql.<>c__DisplayClass12.b__10() +30
   Sitecore.Data.DataProviders.NullRetryer.Execute(Func`1 action, Action recover) +286
   Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateReader(String sql, Object[] parameters) +281
   Sitecore.Data.DataProviders.Sql.SqlDataProvider.ResolvePaths(String itemPath) +406
   Sitecore.Data.DataProviders.Sql.SqlDataProvider.SelectSingleID(String query, CallContext context) +126
   Sitecore.Data.DataProviders.DataProvider.SelectSingleID(String query, CallContext context, DataProviderCollection providers) +118
   Sitecore.Data.DataManager.SelectSingleItem(String query, Boolean& processed) +66
   Sitecore.Data.DefaultDatabase.SelectSingleItem(String query) +74
   Sitecore.Form.Core.Utility.SiteUtils.GetFormsSites() +620
   Sitecore.Form.Core.Utility.Utils.GetFormRoots() +138
   Sitecore.Forms.Shell.UI.CreateFormWizard.OnLoad(EventArgs e) +1109
   Sitecore.Forms.Shell.UI.InsertFormWizard.OnLoad(EventArgs e) +99

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0
   System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) +128
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +146
   Sitecore.Reflection.ReflectionUtil.InvokeMethod(MethodInfo method, Object[] parameters, Object obj) +89
   Sitecore.Web.UI.Sheer.ClientPage.OnLoad(EventArgs e) +593
   System.Web.UI.Control.LoadRecursive() +68
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3811

Do not loose your time for debugging – just check IDs for ALL sites – it is not important which site you are editing at the moment.

You can have there typo or root item does not exist in content tree. You have to verify all sites because during opening InsertFormWizard control – WFFM loads all configuration nodes.

Sitecore 9 development with Visual Studio 2015

If you have been using Visual Studio 2015 and now you want to start new project with Sitecore 9 you might have a small issue with supported by VS .Net Versions because VS2015 by default supports .Net up to 4.6.1 and Sitecore 9 works only with .Net 4.6.2.

There is an easy solution for this issue – install following “Microsoft .NET Framework 4.6.2 Developer Pack” which will add 4.6.2 support into yours Visual Studio 2015.

Sitecore 9 – set up SOLR SSL step by step

I’ve noticed that many people have many issues with set up of SSL for SOLR instance. In this blog post you will find everything what you need to know to do this. Just follow all steps which you will find below.

  1. Download SOLR 6.2.2
    If you want to install SOLR on Windows get zip file from following page: http://ftp.ps.pl/pub/apache/lucene/solr/6.6.2/
    then extract files into (you can choose different directory if you want).

    C:\solr\solr-6.6.2
  2. Download Not Sucking Service Manager and install Solr as a service
    You will find zip here: https://nssm.cc/download – just extract it somewhere and go to this path in your PowerShell window. Then call

    .\nssm.exe install NameOfSolrService

    and you will see new window with some settings. Set there following values:

    - Path: C:\solr\solr-6.6.2\bin\solr.cmd
    
    - Startup Directory: C:\solr\solr-6.6.2\bin
    
    - Arguments: start -p 662 -f -v

    After form submission you should see new service on the list of services (Windows > Run > Services) . If your service is not running – just run it from services windows – it will start automatically after restart.
    We have chosen port 662 so our SOLR instance currently will be available under url http://localhost:662/solr/

  3. Generate SOLR Certificates
    We use approach from this website https://lucene.apache.org/solr/guide/6_6/enabling-ssl.html#EnablingSSL-BasicSSLSetup
    At the beginning you should check if you have JRE installed – if not install it and then in the path

    C:\Program Files (x86)\Java\jre1.8.0_141\bin\keytool.exe

    you will find keytool.exe which will generate certificates for you (you might have different path – depends on version of JRE).
    Then open again PowerShell and enter into SOLR directory

    C:\solr\solr-6.6.2\server\etc

    and run following command

    & 'C:\Program Files (x86)\Java\jre1.8.0_141\bin\keytool.exe' -genkeypair -alias solr-ssl -keyalg RSA -keysize 2048 -keypass secret -storepass secret -validity 9999 -keystore solr-ssl.keystore.jks -ext SAN=DNS:localhost,IP:127.0.0.1 -dname "CN=localhost, OU=Organizational Unit, O=Organization, L=Location, ST=State, C=Country"

    You should notice that we have got there keypass equal to “secret” which can be changed on local, and should be changed on other environments.
    Then we need to convert key to PEM format with command:

    & 'C:\Program Files (x86)\Java\jre1.8.0_141\bin\keytool.exe' -importkeystore -srckeystore solr-ssl.keystore.jks -destkeystore solr-ssl.keystore.p12 -srcstoretype jks -deststoretype pkcs12

    You will be asked few times for password – use “secret” or your own.
    Then we need to convert generated key for next format with OpenSSL – download OpenSSL from here https://indy.fulgan.com/SSL/openssl-0.9.8r-x64_86-win64-rev2.zip and extract into

    C:\Program Files (x86)\OpenSSL

    and run command:

    & 'C:\Program Files (x86)\OpenSSL\openssl.exe' pkcs12 -in solr-ssl.keystore.p12 -out solr-ssl.pem
  4. Import certificate to the trusted certificates
    Opem “Windows > Run > mmc” and manage certificates. Import created certificate to the list of trusted ones.
  5. Change SOLR settings
    In final step you need to change yours configuration for SOLR. Open SOLR server directory

    C:\solr\solr-6.6.2\bin

    and open to edit of solr.in.cmd file. Then add at the end following settings:

    set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
    
    set SOLR_SSL_KEY_STORE_PASSWORD=secret
    
    set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
    
    set SOLR_SSL_TRUST_STORE_PASSWORD=secret
    
    REM Require clients to authenticate
    
    set SOLR_SSL_NEED_CLIENT_AUTH=false
    
    REM Enable clients to authenticate (but not require)
    
    set SOLR_SSL_WANT_CLIENT_AUTH=false
  6. Test
    To test if it works you need to restart yours SOLR service. After restart SOLR will not longer work with http protocol – so you need to go into “https://localhost:662/solr” to check how your SSL works.

And now you are ready to install Sitecore 9 and xConnect. Have a good fun with it!