Sitecore Rocks – SitecoreCop

SitecoreCop is a cool little feature in Sitecore Rocks, which can check a lot of the Sitecore configurations. It can be executed by connecting to a Sitecore instance using Sitecore Explorer, then right-clicking on a Sitecore Item -> SitecoreCop -> Run SitecoreCop.

By default there are already a whole lot of rules available, from checking whether fields contain Lorem Ipsum text to whether the license is about to expire and from whether media items have actual media attached to them to whether the admin password is still the default – and a whole lot more still.

Even so, if one would want to add their own rules to it, that’s also possible but requires a bit more than just the code (which I didn’t find out until @TheRocksGuy gave me some pointers): The assemblyname has to start with Sitecore.Rocks.Server, so for instance Sitecore.Rocks.Server.CustomRules. Also, the assembly needs to reference Sitecore.Rocks.Server.Core and Sitecore.Rocks.Server.Validation.

The class then needs to be marked with the [Validation] attribute, in which you can specify a rule name and the rule category.

namespace Sitecore.Rocks.Server.CustomRules
{
  [Validation("This is a custom rule", "Items")]
  public class SomeCustomRule : ItemValidation
  {
    ...
  }
}

There are multiple existing Validation types to inherit from, such as ItemValidation or RenderingValidation.

You will then need to implement the CanCheck and Check methods. CanCheck will execute to see if the rule can be executed in the context you’re running it in and the Check method has the actual logic.

...
public bool CanCheck(string contextName, Sitecore.Data.Items.Item item)
{
  Assert.ArgumentNotNull(contextName, "contextName");
  return contextName == "Site";
}

public void Check(ValidationWriter output)
{
  // You'd probably want some logic here to make sure it only flags the problem in the right cases.
  output.Write(SeverityLevel.Warning, "Title", "This is the problem", "This is the solution");
}
...

When you then execute SitecoreCop (after making sure your assembly is copied across to the bin folder of your webroot) you might have your problem flagged up:

SitecoreCop custom rule