Want to help your business user? Create a custom Macro

When talking to business users (people that actually work with Sitecore on a day to day base) I created a small list of minor custom changes that would help the business users with there day to day work.

One of the items on this list is the condition for User Profile fields, by default the input of this field is a manual typed String. Which is a painful process for the business user They are not sure of the fieldname and go to the usermanager to verify the name. And even when they know the fieldname they surely can make a typo. After all even a business user is just human.

Typo and human errors

So after a small thought I started coding. My solution for this problem is simple. Create  a custom Macro with a tree selection and return the item name! Let’s do this!

Create the custom Macro class

Open VS, and create a class called UserProfileFieldMacro that inherits from the IRuleMacro class.

Override the Execute method, in this method we need to define the custom Macro. Please read the code comments for explanation.

The UserProfileFieldMacro class has the following code
[code language=”c#”]
public class UserProfileFieldMacro : IRuleMacro
{
public UserProfileFieldMacro() { }

public void Execute(XElement element, string name, UrlString parameters, string value)
{
Database coreDatabase = Sitecore.Configuration.Factory.GetDatabase(“core”);

//Define default path to profile template
string profilePath = “/sitecore/templates/System/Security/User”;

//Check if custom path is set in Macro parameters
if (parameters.HasPath)
profilePath = parameters.Path;

Item userProfileRootItem = coreDatabase.GetItem(profilePath);

//The path isn’t correct, we want to log this error and send the user to the system administrator
if (userProfileRootItem == null)
{
string error = string.Format(“The path ({0}) set in the user profile field condition doesn’t exist”, profilePath);
Sitecore.Diagnostics.Log.Error(error, this);
SheerResponse.ShowError(error + ” Please contact your system administrator”, string.Empty);
return;
}

SelectItemOptions options = new SelectItemOptions();

//Set and hide the root of the tree in the dialog window
options.Root = userProfileRootItem;
options.ShowRoot = false;

//User can only select Templatefields
options.IncludeTemplatesForSelection = new List { TemplateManager.GetTemplate(TemplateIDs.TemplateField, coreDatabase) };

//Return the item name to the public property
options.ResultType = SelectItemOptions.DialogResultType.Name;

//Set dialog window info
options.Title = “Select User profile field”;
options.Text = “Select the user profile field to use in this rule.”;
options.Icon = “applications/32×32/media_stop.png”;

//Trigger the dialog window
SheerResponse.ShowModalDialog(options.ToUrlString().ToString(), true);
}
}
[/code]
Compile your code.

Create the Items in Sitecore

Login to Sitecore and open the content editor.

Create the macro item

Go to  the /sitecore/system/Settings/Rules/Common/Macros folder and create a new Macro item called UserProfileFieldMacro. Set the Type field to match your custom Macro class and assembly.

image

Create the condition item

Go to the /sitecore/system/Settings/Rules/Common/Conditions/Security folder and duplicate the User Profile Condition Item, name the duplicated itemUser Profile Field Selection Condition.

Now we need to change the Text field so it will use the custom create Macro instead of the default string input. Go to the Text field, I highlighted the part that we are changing

where user profile [FieldName,,,specific] field [operatorid,StringOperator,,compares to] [Value,,,value]

What you see is a four column seperated string. The four columns are representing the following functionatily:

  1. the public property in the condition that will be set.
  2. the macro used to get the user input (blank is string input)
  3. optional parameters to pass to the macro
  4. the text value that appears to the business user when the value is not set

Now change this to use the custom created Macro

where user profile [FieldName,ProfileFieldOperator,,specific] field  [operatorid,StringOperator,,compares to] [Value,,,value]

If you look at the Macro code you will see that if no parameters are passed we use the path to the default user profile. If you have custom user profile you can pass the path as a parameter. For example;

where user profile [FieldName,ProfileFieldOperator,/sitecore/templates/System/Security/Jetstream User,select] field [operatorid,StringOperator,,compares to] [Value,,,value]

Now where all set to test the new condition!

Activate and test the condition

Open the page editor and select a presentation component you want to personalize. Click the personalize button and create a new rule.

Select the for the where user profile select field compares to value  condition and click the red select link. The custom Macro will now fire the dialog window where all the profile fields are available for selection.

image

And the best thing is if the business user selects a Field section the a message will appear. No more humon errors here 🙂

So for my example I configured the following rule for a component called Summer sun.

image

Test the conditional rendering rule

If I visit the website as a logged-in user with the firsts name Pieter the Summer sun component will appear. Otherwise the component will be hidden.

Let’s visit the website as a anonymous visitor.

image

Now after I login with my account (and yes my first name is Pieter) the control will appear.

image

Wrap up!

This solution is specifically created for user profile fields, you could also create a more generic Macro with more custom parameters. For me the most important part is that I showed you how easy it is to create a custom Macro. The next time the business user confront you with their problems, don’t just tell them this is the way Sitecore works. Tell them that you can easily change the behavior of Sitecore within a few hours. And of course share your customizations with us!

Don’t forget to hide the old user profile field condition. Read the article about removing conditions and actions for you business user based on Security.

If you have any questions, comments or own customizations you want to share? Please leave a comment.

Happy coding!

Daily Tip: Use the SitecoreInstaller to create quick Sitecore instances including modules

As Solution Architect a part of my job is doing product demo’s and building Proof Of Concepts. The best way for me is to build stuff based on a clean install of Sitecore with the involved modules installed (like DMS, SES or ECM). Normally you will do this with the default Sitecore installer and manually install the modules you need, but this will take to much of your precious time.

With the  SitecoreInstaller you can install Sitecore with selected modules in one click.

How to use the Sitecore Installer?

There are two things you need to do for the SitecoreInstaller:

  • Create the build library
  • Download and configure the SitecoreInstaller

Create the build library

The build library is where the tool stores files needed for installation such as Sitecore versions, licenses and modules.  And has the following structure:

  • <PathToBuildLibrary>\Licenses
  • <PathToBuildLibrary>\Sitecore
  • <PathToBuildLibrary>\Modules

Read all the information on the projectpage on codeplex:
http://sitecoreinstaller.codeplex.com/wikipage?title=Build library

Download and configure the SitecoreInstaller

  1. Download the Sitecore Installer from Codeplex
    http://sitecoreinstaller.codeplex.com/
  2. Extract the .zip and open the SitecoreInstaller.exe
    Sitecore Installer
  3. First time a configuration wizard will open, insert your SQL credentials
    Sitecore SQL setting
  4. Next step is to select your Build Library folder.

Sitecore Build Library

Run the SitecoreInstaller

By default the SitecoreInstaller runs in a “User friendly” mode, with wizard functionality.

Sitecore Installer example

I’m not that fan of the wizard. But locally you can set the Installer in a more advance mode by selecting View –> Use Developer layout and View –> Show Advanced View.

Sitecore Advance settings

This will give you a great all-in-one interface. Where you can give your install a name, select the CMS version and modules and install with one click.

Sitecore module installer

All credits go to Rasmus Rasmussen for creating and sharing this great tool!

Daily Tip: Great tool the Sitecore Log Analyzer

Did you hear of the Sitecore Log Analyzer? The Sitecore Log Analyzer is a great tool. It does what the name claims; It will help you analyze your log files!

A short list of some great features:

  • Quick analyze of all log files in a directory
  • Date and string filter

Sitecore Log Analyzer Date Filter

  • Tabs for the different categories; Messages, Audit and Health Monitor
  • Filters for log levels; Errors, Warnings and Info’s

Sitecore Log Analyzer Categories Error Warning Info

  • Log entries sorted on number of occurrences

Sitecore Log Analyzer Sorting

  • Timeline overview of the (filtered) log entries

Sitecore Log Analyzer Timeline overview

  • Great statistics 🙂

Sitecore Log Analyzer Statistics

Go ahead and download the Log Analyzer from SDN and analyze you’re log files on a regular basis:
http://sdn.sitecore.net/resources/tools/log%20analyzer/download.aspx

Happy Analyzing,
Pieter

DailyTip: Enable Personalization section in Sitecore 6.5

In Sitecore you can personalize your website with conditions and actions using the Rules Engine (so called Conditional Rendering rules).  In Sitecore 6.5 the interface for defining conditional rendering rules is integrated in to the page-editor, this way it´s easier for the marketeer to create and maintain pesonalization rules.

But as a developer you want to create predefined rules and activate them on the template standard values, the same way personalisation was working in Sitecore 6.4. This is still posible with 6.5 only by default the Personalisation section of the presentation component properties is hidden in Sitecore 6.5.

The following steps will enable the Personalisation section in the Presentation Component Properties dialog window.

Open the Content Editor, press the Sitecore Logo button on the top left and select Application Options.

In the Application Options dialog window go to the View tab. Underneath the Control Properties section, tick the checkbox Show Personalization Section and press Ok.

That´s it! The Personalization Section will be visible again.

 

Daily Tip: Use the Customized Startbar module

Tired of switching between the Master and Core database during development? Making the mistake of making changes on the wrong database? Install the Customized Startbar Module.

This module will do multiple things, but the main two things that I really like are:

  • You can add buttons to the Quicklaunch bar.
  • Add the database name next to the database icon (bottom right)

The startbar before installation

The startbar after installation

image image

You can download the Customized Startbar module from trac:
http://trac.sitecore.net/CustomizedStartbar/ (Thanks to Alistair Deneys for this module.)

A good example of the use of the customized start bar is a startbar with Quick action buttons that open the Content editor for the master, web and core database.

image

You can download this CUSTOM customized startbar here.

Happy developing!

Daily Tip: Add icons to Fieldsections

To make thinks easier for the business-users you can use Icons for templates. This is a great way to make the business-user recognize the different types of content they can create. But did you know you can also use icons for your Fieldsections?

Set Icon with the webinterface

You can set icons for Fieldsections the same way as you do for your templates. Just open the content editor, expand a template and underneath a template you will find all your FieldSections. Select a field section and set the icon!`

For example. Let’s say we have a template called Sample Item with a Fieldsection Page Title and Text.
If you expand Sample Item Template you can see that there is a Item named Page Title and Text this is the Template Section defined in the Template builder.

Sitecore Template Icon

Select the Page Title and Text item and assign a icon (Configure –> Appearance –> Icon). That’s it. Now create a new Item based on the template and see the result.

Sitecore fieldtype item content editor

Try doing this on your templates. It’s so easy and it will make the Content Editor more attractive for your business-user. Feel free to add comments of questions below.

Update: Set Icon with Sitecore Rocks

You can also set the Template Section Icon with Sitecore Rocks. Expand the template in the Sitecore Explorer and right click the Template Section. Go to Tasks, Set Icon and select the Icon.  (Thanks to @kayeeNL for his Tweet about setting the icon with Rocks)

image

If you want more information about Sitecore Rocks please watch the (Dutch) webinar I gave about Sitecore Rocks.

Webinar: Sitecore and Continuous Integration

webinar sitecore continuous integration

Today Lucas Bol gave the first Dutch Sitecore guest Webinar. The subject of this webinar was continuous integration with Sitecore based on open source products. The video is in Dutch and posted below.

[youtube]http://www.youtube.com/watch?v=Nd__rUJtLq0[/youtube]

In the next few days Lucas will post his documentation and explanation of the webinar in English. Follow us on Twitter @new_guid or subscribe to our RSS feed if you want an update when this is posted.