OrmLite SQL Server Example

December 24th, 2014 | Posted by Robert Curlette in OrmLite | ServiceStack - (0 Comments)

ORMLite is a great example of a framework that does one thing and does it well. If we’re looking for a efficient and solid way to get and put data in a DB within .Net (or Mono) then the ServiceStack ORMLite micro-orm is a great choice. It was created by Demis Bellot. One of the great things about ServiceStack is the high level of support from Demis and you can find many of his answers on StackExchange. In this post I will explain how to quickly setup a connection to SQL Server and add / query 1 row. If you have used ORMLite before this article might not shed any new light into the ORMLite scenario for you. Note that the current version of OrmLite (v4) is paid software and uses a quota system for small projects and evaluations. The license allows a developer to use it for a DB of up to 10 tables for free.

Getting Started

1. Create a new .Net Console Application
2. Add a NuGet reference to OrmLite.SqlServer library

Prepare SQL Server

1. Create a new Database User (if needed) for your new DB.
2. Create a new Database (ORMLite does not do this for you)
3. Give the DB User permissions to the new DB
4. Create the connection string: “Server=Dev2011;Database=ItemInfoDb;User Id=MyNewDbUser;Password=S3cr3tPw;”

Write the code

The below code creates an instance of a POCO, and then saves it to the DB. Note the AutoIncrement data attribute. This creates our PK.

For more in-depth information I highly recommend the official ServiceStack documentation. and ORMLite example here.

After my first entry to the Tridion Bookmarklet Challenge, to count items in the Dashboard, here is my second entry: View the Schema ID and Title for a selected Component. Drag the below box to your Bookmarks toolbar. Warning: The first time you use it the Schema Title will not load. However, from the 2nd time it will show. This has to do with the .load() argument and my lack of callbacks. It could probably be improved.

Frank Taylor implemented the same idea as an Alchemy Plugin:  What’s the Schema? It works from the Context Menu, so we can use it in more places than the Bookmarklet, and in his blog post he also explains how he made it.  Excellent!

View Schema Info

Big thanks to Peter Kjaer’s StackExchange answer about getting the $models object.

Have you ever wondered how many items are in this folder or Structure Group and wanted an easy way to count them? In the good bad old days of IE6 and Tridion 5.x we could see the amount of items selected in the status bar at the bottom of our browser. Today I don’t know if they removed that feature or it’s disabled, but in Chrome and Firefox I don’t have a way to see how many items are in a Folder or Structure Group. I often want to know because I am writing Core Service scripts to process all items in a folder and it is helpful knowing how big it is. Otherwise, it is sometimes interesting to see how many images, templates, schemas, etc are located in the system and having a simple ‘count’ of the items would be helpful.
Tridion Item Count
Install: Drag the box above to your Bookmarks Toolbar. When the Tridion GUI is open, select the bookmark to see the item count.

So this is my official entry into Dominic Cronin’s ‘Bookmarklet Challenge’. Although my Bookmarklet is simple, I believe it contains the essence of a Bookmarklet, something small and provide a useful value to those who use it.

Bookmarklet

Special thanks to Alexander Orlov, aka UI Beardcore, for the much needed help in getting access to the Dashboard in a nice, clean way without hardcoding the array position of it.

Before developing the Bookmarklet I had to consider what kind of feature to build with a Bookmarklet. The first thing to consider is the ‘context’ in which the Bookmarklet will be run. For example, when I have the Tridion GUI loaded, the context is what I can see in my view: Publications, dashboard items, and the ribbon menu bar. Another example could be the selected item, and this would then be our context and we could call WhereUsed, get Blueprint children, or access other private details of the selected item that are useful for our users. Finally, we can also perform actions with the Anguilla GUI, so if our context is a selected item, we could then do something to it.

A previous Bookmarklet created by Dominic Cronin, with code from Alex Klock, and inspired by my Stack Overflow question, allowed us to clear the MessageCenter warnings and notices in the Dashboard. Recently Roel van Rozendaal wrapped up this functionality into a pretty Chrome Extension, added it to the Chrome Webstore, and made a nice blog post of how he did it.

Only a few days left in Dom’s Bookmarklet Challenge. Good luck and may the browser be with you!

DD4T Training

December 15th, 2014 | Posted by Robert Curlette in Tridion - (1 Comments)

Want to have a DD4T Application running within 1 hour? Not possible? Today I did that at the first Tridion DD4T training taught by Quirijn Slings and hosted at the Trivident office in Amsterdam. In this course we start at the very beginning and throughout 2 days go very deep inside DD4T and learn not only how to do many things, but why they were created that way in the first place!

The atmosphere of the course is similar to other SDL Tridion courses I have attended or taught, informal and focussed on the participant. Quirijn was kind enough to entertain all of our questions and comments, providing real-time coding examples or on several occassions diving deep into the DD4T Source code to show us how it was built and why it behaves in a certain way. This is priceless and the information is not found anyplace else.

On the first morning Quirijn gave us an overview of the DD4T concepts and why the framework was created. Shortly after this he led to us create a DD4T project from scratch, and it felt effortless. I’ve spent a lot of time previously creating DD4T projects from scratch, and nothing compares to how easy it was in the class. Small tips from Quirijn saved us many hours if we were to do this alone.

Later in the day we created Page views and Component views and the exercises were very easy to get into and the environment supported us very well. The exercise content of the course is really nice, with animals imported from a BBC website, making it feel like a nice training environment. Our new views looked great on the screen with the nice content. We used Visual Studio 2013 and MVC 5 to create our solutions.

Day 2 was more in depth than day 1 and we looked into the link level logic and were given some best practices and real-life examples of when to use what link level and the implications of it. We also went over publishing sitemaps, resource files (resx), and also hints about what is coming up in DD4T 2.0. We had a long discussion on caching with DD4T and the different approaches to be used for caching.  Finally we learned how easy it is to make Preview work in DD4T (it really is easy) and see this article from Quirijn on the Trivident blog.  He also showed us how to read a configuration file from a Compound Template and wrote another nice post here.

We were also given many tips that will save us hours of time during real projects. Below I will outline some of the tips he shared, but for the full experience I highly recommend to attend this training.

Minimize XML in DD4T

– Removes Publication, Folders (saves 30%)
– JSON publishing coming in DD4T 2.0, using compressed JSON

Template Builder Popup- to select Folder or Structure Group

– Using Template Builder, when creating Template Metadata fields, starting the XML fieldname with ‘sg_’ or ‘folder_’ allows us to select the items from the Template Builder!

RenderedContent in DD4T

– RenderedContent property contains the output if it is not DD4T XMl. The DD4T TBB examines the output of the Component Presentation, if not DD4T XML, puts in RenderedContent

Resources

– Resx is published to DB
– In web.config, tell it to use the DD4T Resources provider
– Resource page path defined in the web.config
– Need to create our own TBB to publish the resx file. Reason is that DD4T does not want to imply the structure of the Key/Value Schema you need to use in Tridion. There are many different aproaches to store key/value fields.

Index Pages with DD4T

Index pages with DD4T using custom controller and action method. This allows us to easily query the Broker directly or another external system and the Component on the page is a ‘placeholder’ that says directs the Page to output the results of the Query where the Author places it.

– On the CT Metadata, add 2 fields for the name of controller and name of action. XML Names are:
– controller
– action

Summary

This training will help those without DD4T knowledge get up and running very quickly. It also will provide information and tips for seasoned DD4T experts including in-depth caching explanations, using Broker queries with DD4T, link-level philosophy, and ideas where DD4T will improve in the future. Finally, SDL is showing increased support of the DD4T framework, with the inclusion of it in the Tridion Reference Implementation, using it on SDL.com, and also recommending it for current and future customers. It’s here to stay and now we have a great place to learn more about it in person.