Sitecore Doc August 4, 2018
It's difficult to get a grasp on a large Sitecore project, which is the main impetus behind writing Sitecore Doc. It generates HTML to summarize an entire Sitecore application on one page.
Sitecore solutions can become large and unweildy. Recently I was tasked with the following: Find out which page each of these service methods (40-50) are called. With how .NET and Sitecore applications (generally all good applications) are written, a service method call would be written within a component, but that component could be put on any page!
Luckily these components manifest themselves in Sitecore as "renderings". They can have data sources and parameters. And code, which is what leads us to this mess in the first place ;)
First we'd need a way to map these renderings to service calls. I came up with a generic "info" data field to do that in a JSON file which defines all of the renderings we're interested in. On a side note, I only provide those that we're interested in, this current project would yield a 4-5 MB result file which would be ridiculous if it included everything. That JSON looks like this:
{
"includeUndefined": false,
"renderings": [
{
"id": "6A8BB729-E186-45E7-A72E-E752FDEC2F48",
"name": "AccountBalancePurgeSublayout",
"info": [
"CustomerInformationService.GetCardStatusV4(authHeader, accountId)",
"CustomerInformationService.GetPurgeInfo(authHeader, accountID)"
]
}
}
Using my (recently updated to accommodate this request) Go Sitecore API, I was able to take that information and map it against every page renderings (or standard values renderings) and produce a file that is filled with every page and their (eventual) calls into service methods. These aren't directly called within the page code (usually), and there's heavy caching going on as well. Here's what the output looks like:
Name: booking-calendar
ID: f1837270-6aca-4115-94bc-08d1a4ed43ad
Path: /sitecore/content/REDACTED/booking-calendar
Url: https://www.REDACTED.com/booking-calendar
Renderings:
Default
CalendarBooking
Path: /layouts/REDACTED2013/REDACTED/SubLayouts/Booking/Calendar/CalendarBooking.ascx
Placeholder: content
Info:
ReservationService.GetAllRoomTypesV2()
ReservationService.GetCashCalendarV3(GetAuthHeader(),promoCode,startDate,endDate,isHearingAccess,isMobilityAccess, isWeb)
ReservationService.GetCashCalendarWithArrivalV3(GetAuthHeader(), promoCode, roomType, arrivalDt, numNights, isWeb)
Mobile
CalendarBookingMobile
Path: /layouts/REDACTED2013/REDACTEDMobile/SubLayouts/Booking/Calendar/CalendarBookingMobile.ascx
Placeholder: content
Info:
ReservationService.GetAllRoomTypesV2()
ReservationService.GetCashCalendarV3(GetAuthHeader(),promoCode,startDate,endDate,isHearingAccess,isMobilityAccess, isWeb)
ReservationService.GetCashCalendarWithArrivalV3(GetAuthHeader(), promoCode, roomType, arrivalDt, numNights, isWeb)
This was very useful for this specific task, however it's written in a way that will be very useful going forward, to provide insights into our Sitecore implementations and how the content is structured.
This app will see updates (sorry the code isn't available for now) so that it will show usages among different renderings, unused ones or broken (exists in a renderings field but not as an actual item in sitecore [was deleted or not imported]), and other stuff that I can think of. This binary is named "scdoc" as I like to keep my names short :) The Sitecore Code Generation tool I wrote is simply "scgen".
Check out that Go Sitecore API though if you want to easily query your Sitecore database! Happy Coding :)