Sunday, February 27, 2022

Troubleshooting Sitecore GraphQL search query- Part-1

Sitecore GraphQL is one of my recent favorites, and I would love to play around with it. I have faced a scenario that I wanted to blog about it.

Use case:

     My Sitecore application has numerous articles and the requirement is to fetch the articles based on certain conditions using Sitecore GraphQL.

Problem:

    Articles created in the Sitecore by the authors are not the exact results displayed on the webpage.          

   What can cause the items missing?

                         


                               

  Yes, even I had similar questions, when I saw the items mismatch between the results displayed and Sitecore content. 

Solution: 

    I have found one of the techniques to troubleshoot what could be the cause for the incorrect results.  Assuming all the contents were published and in an approved state.




 

Step-1:  Get the query used in the GraphQL

Step-2:  Use the same Query SOLR index and check if both the results returned in GraphQL and SOLR query is the same.

Step-3: Most probably if you are pointing to the right SOLR it will be the same result. If not check your SOLR endpoint.

Step-4: If SOLR and GraphQL return the same result, then the item does not get indexed. In this case, re-indexing would be the solution. 

I will also cover how to troubleshoot those with the sample query examples in the upcoming series.

Monday, February 14, 2022

Migrating Legacy Multisite Sitecore Project into Sitecore JSS

  In most recent times, we tend to upgrade to a higher version. Similarly, legacy Sitecore applications are also planning to migrate into Sitecore latest version. Since Sitecore offers flexible features in the latest JSS releases.     

  Problem: 

          In our scenario, we wanted to rewrite the legacy Multisite application into Sitecore JSS without SXA and Headless. Once we have rewritten, the application structure is looked at as below. Site-B does not inherit Site-A as Sitecore out of box feature.


Solution :         

       We have to inherit the Site-A items into Site-B. Only the dictionary content between Site-A and Site-B is different.

           To achieve this, follow the below steps:

  •     Add custom site definition in the Sitecore.JavaScriptServices.Apps.config


  <?xml version="1.0" encoding="utf-8" ?>

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">

  <sitecore>

    <javaScriptServices>

      <apps>

          <app name="custom-defaults"

          filesystemPath="/dist/SiteA"

          serverBundle="server.bundle"

          importUser="sitecore\JssImport"

          importLanguage="en"

          importDatabase="master"

          importDevice="/sitecore/layout/Devices/Default"

          templatesPath="/sitecore/templates/Project/SiteA"

          renderingsPath="/sitecore/layout/renderings/Project/SiteA"

          layoutPath="/sitecore/layout/Layouts/Project/presto-contactless/SiteB Layout"

          placeholdersPath="/sitecore/layout/placeholder settings/Project/SiteA"

          appDatasourcesPath="$sitecorePath/Components"

          dictionaryPath="$sitecorePath/SiteB Dictionary"

          dictionaryDomain="SiteB Dictionary"

          routeDatasourcesPath="Page Components"

          mediaLibraryPath="/sitecore/media library/SiteA"

          ...

      </apps>

    </javaScriptServices>

  </sitecore>

</configuration>

  • In the Apps config  inherit the custom created site definition.
   <javaScriptServices>
      <apps>
        <!--
          JSS App Registration        
       
        <app name="SiteB"
             sitecorePath="/sitecore/content/SiteB"
             useLanguageSpecificLayout="true"
             graphQLEndpoint="/api/SiteB"
             inherits="custom-defaults"
        />
      </apps>

      


   In this model, I tried only Sitecore First Approach. By this inheritance, Sites can still share the templates, Layouts.