Why Sitecore’s Online Marketing Suite beats Google Analytics

March 20th, 2010

Wooohoo.. I’m writing.

I’m quite fascinated that I’m really writing a blog post again. Sorry, but I’ve been busy 24/7, but to let you know. It’s great! I’ve met so many great people and have seen a lot’s of different cities so far. ;-)

I’ll be moving my blog to a new server and will migrate it to Sitecore – far away from Wordpress, but as you can imagine this will take some time.

Back to topic: I’ve stumpled upon a post by a Google Analytics Team Member, unfortunately it’s in german. Summary: Google creates a Browser Plugin to disable Google Analytics of the website. The result: Your statistics will be incorrect and may lead you to a wrong conclusion. You may invest money in something which doesn’t make sense at all, because everybody of your important visitors disabled the analytics tracker by Google.

Why is Sitecore Analytics better? Sitecore Analytics works on the server side! :-) So here you have the correct statistics along with real-time personalization, the best of it in my eyes. 

Unfortunately I’ve to get back to my work. Just to let you know what will come up in the future and that I’m not dead. :-)

 Hope you have a great weekend.

 cheers chris

it goes on…

December 31st, 2009

Hey guys,

hope everybody have had a great Christmas and is looking forward to tonight. Likely you’ll read this on Monday and I hope you have had a nice new years eve as well. ;-)

For me it was a year with a bunch of ups and downs and I think everyone of has faced various issues this year. Everybody is talking about the global crisis and the huge economic impact – do we really face this in the IT world? I’m still searching for the answer, but it seems that a great year is on its way!

While I’m writing this – I remember this morning when I woke up. Reading about our Chancellor who’s talking about the next year pretty in a pretty pessimistic way.

I really don’t see this for my personal future. There is a German expression, but even my personal “Aussie” friend can’t translate it. “Mit einem weinenden Auge, mit einem Lachenden Auge” – means that I’m looking into the future with some sad emotions, but also I’m really looking forward and I’m happy about it!

The reason I’m saying this is: I’m leaving netzkern GmbH, the best Sitecore partner ;-) , after almost seven years. I started there as a student administrating servers and sorting a bunch of lists. I grew up with this company and they are still growing into a great future. I had the honour to get to know to so many really great guys, and to work with them on a day to day basis. As I already said personally, we faced so many different customers and have had to tackle every single wish. We made it almost every time! It was a pleasure for me.
It was a great time, but at some point in your life you have to change – or you’ll never make a step forward.

With the beginning of 2010, I’ll start my new job as a Solution Architect at Sitecore International! :-) I’ll take care of the German speaking customers as well as partners and their technical questions. I’ll focus on the Germany / Austria and Swiss region, but I’ll (hopefully) take care of some international customers as well. ;-) (There are also a couple of things going on behind the scenes, stay tuned.)

Remember my sentence about the great year which is on its way. Afters years working with Sitecore as a “Client”, I’ll change to the other side and we’ll push Sitecore to the German speaking market. From now on I can assist Marc Schneider and all the German speaking customers / partners in getting a faster response to their technical related questions and of course wishes!

Okay guys, as I mentioned on my first post on this blog almost two years ago. I’m not the “writer type”. I wish you a happy new year and a good start in 2010! Life is what you make of it, so never give up ;-)

See you soon. best Chris

Sitecore performance, too many items read, load times are too long

November 17th, 2009

Hey guys,

after a couple of hours searching, testing and debugging a complete (pretty nice) international (>20 languages) solution we still experienced a (at this point) strange behaviour by Sitecore.

Imagine that:

- subitem 1
- subitem 2
- subitem 3
- subitem 4
- subitem 5
- subitem 6

All these subitems have no(!) fields. And there are no proxies or any other things which can influence the performance. How long does it take to evaluate this xpath statement: ./item (the context node is the root node)?

It takes approx. 19 ms! So long for such a basic operation, wtf? (Also in the profiler view we see approx. 3000 items read)

… some random time later (after changing the icon as well ;-) ) …

Check the “Subitems sorting” field on the root item! In our case the value was “Created”, if you set it to default (or nothing) it takes 0,12 ms!

Checking the code of the “Created” method reveals the explanation: By each call of DoCompare() it compares each version as well. Now: 24 languages with 1 version and 8 subitems…. now it’s quite understandable why it took so long. Also the items count in the profile are less!

So, be careful when applying “Created” as subitems sorting on a large enviroment.

Enjoy the rest of the week.

best chris

Page Editor conflict with master pages

September 25th, 2009

Hey guys,

just a short note. After coming across the known issue that the page editor fails with master pages. I want to remind you that’s always useful to check the known issues after stumbling on a weird bug.

Anyway, the Sitecore Support always helps you finding a solution, even if you didn’t take a look at the known issues first :-) . Thanks.

Best, chris

sheer ui: create webedit ribbons (part 3)

September 7th, 2009

Hey guys,

let’s get back to the blogsphere by writing again. After the sumer hole 2009, the autumn seems to start in Germany. A lot’s of stuff happened in the last time: The OMS release, Sitecore 6.1 and I’ve passed my Sitecore Trainer Exam.

Thanks again Alex, Bert, Peter and Sven. :-)

Like in the first post of this series. I show you the different Sitecore Buttons which you know already, I guess.  

  • Large Combo Button: The field “Gallery” specifies the control id of the “Menu” to display. The control is a xaml file like any other “sitecore client xaml application”. The code looks like this:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<control xmlns:def=”Definition” xmlns=”http://schemas.sitecore.net/Visual-Studio-Intellisense“>
    <Stylesheet Key=”Gallery.WorkflowEdit”>
      body {
      <CodeBeside Type=”Sitecore.Shell.Applications.ContentManager. Galleries.WorkflowEdit.GalleryWorkflowEditForm, Sitecore.Client”/>
<Menu ID=”Options” Border=”none”/>

  • Panel: The complete layout is specified in the code behind. The type field is where your <namespace + class name>,<assembly name> goes in. Here “Sitecore.Shell.Applications.ContentManager.Panels.NewPanel,Sitecore.Client”. The code is pretty long though, but the important thing is that you have to inherit the “RibbonPanel” class and override the Render method.

public class NewPanel : RibbonPanel
    // Methods
    public NewPanel();
    protected virtual string GetClick(Item item);
    protected static UrlString GetUrl(Item item);
    public override void Render(HtmlTextWriter output, Ribbon ribbon, Item button, CommandContext context);
    private static void RenderOptions(HtmlTextWriter output, List<InsertOption> options);

  • Large Menu Combo Button: The Items which build your menu, are of the “menu item” template. You can pass the id of the current item by using parameters like this: “item:deletechildren(id=$Target)” (The delete children menu).

Hope I could bringt some light into the dark. I already got another idea about topics to write about, so stay tuned.

Best, Chris

iKloetzchen 1.0 released

July 30th, 2009

Hey guys,

 some offtopic in my holidays ;-) . I’m still try to catch up with all the todos I still have on my list. So here we go.

In the last two month Matthias Bruch and me got the Apple contract to publish applications to the app store. We bought an iMac and started to learn Cocoa (Obj-C). As we though about what we can code we thought about children games, though. If you have an iphone you are not playing games where you spend much time on, rigth?

What do children play? Build towers with “Kloetzchen” :-) … so we made a game where you have to build two towers on both screen sides to get to the next level. Try it!

iKloetzchen released on the App Store.

 Cheers Chris

Sitecore Analytics / Sitecore Online Marketing Suite

June 2nd, 2009

Hey guys,

finally Sitecore made it and published informations about the new Sitecore Online Marketing Suite and Sitecore Analytics. The Sitecore MVPs have been invited to take part at the presentation a couple of weeks ago, but the NDA don’t allow us to publish any information about it. Till now! :) I guess, if Sitecore posted the news, I’m allowed as well.

Check it out @ http://www.sitecore.net/en/Products/Sitecore-Online-Marketing-Suite.aspx 

I definitely enjoyed the demo and tour around it, such a great integrated analytics application within Sitecore. I’m a bit curious about writing the release date Sitecore told us, because they didn’t mention it though. But it will be soon.

That’s a good start, from a long weekend in Germany.

cheers chris

sheer ui: create webedit ribbons (part 2)

April 26th, 2009

Hey guys,

here we go again. So after we know all relevant items and templates we can now go to create some and demonstrate how easy it is (after you know how :-) ).

Let’s create a chunk to demonstrate how to create your own strip:

/sitecore/content/Applications/Content Editor/Ribbons/Chunks: You find all existing chunks in Sitecore here. To create your own: Insert a new Item of the type “Chunk” (/sitecore/templates/system/ribbon/chunk). There are different fields in the data section (You have to scroll down to see them.).

  • Header: self explaining, isn’t it? – It’s the text below the buttons
  • Click: That is a command field, for my series I will call it that way. Commands are strings which are definied in App_Config/Commands.config. You have to specify the name and the type attribute.
    Be careful: The name has to be lower case!
    The type is “<namespace>.<class name>, <assembly name>”. This type is the link to the class which inherit the command class (Sitecore.Shell.Framework.Commands.Command). You have to implement the abstract method: public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context). The context parameter passes the current item in context.Items[0] (mostly, I didn’t find any methods where it is not).
    If you fill a value there, you will get a clickable header on the bottom, like the insert chunk where you can set your allowed templates.
  • Access key: Does not make sense for me, though. I don’t know how to move to a chunk by having an access key. Also I did not find any examples for this behaviour in Sitecore. Maybe some Sitecore devs can tell me more about it.
  • Tool Tip: Same here. I can’t find where it is displayed when I filled it with some value.
  • ID: Now get back to the important fields. This field has to be unique and no white spaces in it. I think you all know element ids and the requirements. I’m always using “<myChunkName>Chunk” as the value.

After you did this, you have your own chunk without any buttons. I will get back to the possible buttons and panels in my next post by demonstrating all buttons.

Let’s see how to integrate your own strip with your empty chunk. Go to Ribbons/Strips and create a new item of the type “Strip” (/sitecore/templates/system/ribbon/strip), there you have different fields:

  • Header: Self explaining, the title of the strip
  • Contextual Header: Sorry, but I can’t get this to work. If anyone knows how to use this field, please add a comment.
  • ID: Same as above, unique id of the current element.
  • Access key: Type a char in there and you can access your strip by pressing [alt] + <your Access key>
  • Tooltip: A tooltip next to the header of your strip.
  • Type: Of course you can create a dynamically strip which could be personalized, pulls something from an external database etc. The type is in the “normal Sitecore format”: <namespace>.<class name>, <assembly name>

Great! So far so good. After you created your strip, you need to let the strip know which chunks are in there. That’s why we created an empty chunk first. Under your strip you have to create a new item of type “Reference” (/sitecore/templates/system/reference) and give it the name of your chunk. There you will find a field called “Reference”: link your chunk here.

Now, if you want to see your strip in the Sitecore Client Content Editor, you have to go to …/Ribbons/Ribbons/Default and create a new item of type “Reference“, give it the name of your strip. Link your newly created strip item in the reference field.

After you saved the current item, you can right-click on your ribbon navigation and should now see your strip unchecked. If you click on your strip, it will get inserts in the content editor.

Other locations like WebEdit / Preview or Debug are also possible, I will tell you where in my next posts. As well as all possible buttons and panels you can add.

Have a nice sunday, I will go out for some sports now and enjoying the sun :)

cheers chris

Sheer UI: Create webedit ribbons (part 1)

April 21st, 2009

Hey guys,

sorry that I didn’t write anything for a while, but I digged myself into a couple of books for my study.

The last days I worked to customize the webedit ribbon bar and added my own functionality. I really like working in the sheer ui and hopefully there come more tasks to tackle and I can write about them.

Here we go, everybody of you know the new webedit in Sitecore and the ribbon (button) above. I want to create a new strip (like “Page Editor” and “Home”) and in there I want a new chunk with a panel.

Ribbon structure
Here you see the Ribbon structure in Sitecore. It may be useful. :-) Now, your new friend is the Sitecore Core database and the Item: /sitecore/content/Applications/Content Editor/Ribbons; there you find all the relevant items you need to create or change. In there are different folders:

  • Chunks – defines all different chunks. If you want to create a new one, this is your first point.
  • Contextual Ribbons – You remember the context ribbons e.g. when you create a new template, this is done here.
  • Ribbons – under Default you can define the default strips you have in your normal content editor and if they are hidden by default (right click on the toolbar you see the developer and my toolbar which are hidden by default for example).
  • Strips – In the image above you see that this whole thing is strip. Define it’s details and chunks here, but I get back on that later.

Unfortunately I have not that much time at the moment, so I will split up this tutorial into several parts. Check back soon to see how to connect these items and see it in action. I will also describe how to create a panel such as insert, where you can change the behaviour programmatically.

cheers chris

Language embedding in urls

February 17th, 2009

Hey there,

Sitecore 6 provides a functionality to embed your language as parts in the url e.g. http://www.test.com/en-US/test.aspx.

You can control this feature by using the web.config entries:

<linkManager defaultProvider=”sitecore”>
    <add name=”sitecore” type=”Sitecore.Links.LinkProvider, Sitecore.Kernel” addAspxExtension=”true” alwaysIncludeServerUrl=”false” encodeNames=”true” languageEmbedding=”asNeeded” languageLocation=”filePath” shortenUrls=”true” useDisplayName=”false”/>

Cheers chris