Navigatie

Contact

Send mail to the author(s) E-mail

View Richard Soeteman's profile on LinkedIn

RSS 2.0 | Atom 1.0 | CDF

Archief

Categorieën

Blogroll

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Sign In

Zoeken

# Monday, 07 June 2010
Monday, 07 June 2010 12:42:40 (GMT Daylight Time, UTC+01:00) ( MemberExport | Package | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

A few weeks back I’ve blogged about the new MemberExport package I was working on. Today I can tell you it’s released, both the free and the Pro (commercial) version. For those who missed the last blogpost…. MemberExport (Pro) helps you export members from your Umbraco installation to a csv file. The Free edition is limited to export only 200 records. With the PRO version it’s  possible to save the export options  steps for later use .

screenshot 

Free Edition

The free edition of MemberExport can be found on our.umbraco.org. Please vote the project up if you used and liked it.

Pricing

You can buy a single domain license of MemberExport PRO. With a single domain license you are allowed to use  MemberExport PRO  for a single domain and all subdomains, such as www.example.com, accept.example.com, and local.example.com. We also have a Enterprise license available. With an Enterprise license you are allowed to install the MemberExport PRO package on unlimited production web servers, and use it for unlimited Umbraco instances within the Enterprise. A single domain license will be available for  39 Euro, an enterprise license for 149 euro.  When you buy a license you’ll get free updates within 90 days of purchase and  free updates for all minor releases within a major release.  For example, if you purchased a  1.0 version of MemberExport PRO, you get free updates of all 1.x versions through our client area.

Special 1.0 offer. When you buy the 1.0 release you’ll get a free update to 2.x. This is a 1.0 offer only!

More Info

For more info, download, or purchase you can check out the MemberExport website

Comments [0] | | # 
# Friday, 28 May 2010
Friday, 28 May 2010 15:51:58 (GMT Daylight Time, UTC+01:00) ( MemberExport | Package | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

For those who follow me on twitter probably know that I’m working on a new package for Umbraco that can export Members to a csv file. Below you see the first screenshot of the package. Basically you select the groups and fields you want to export, you specify the export options and when you click the export button a csv file is generated on the fly which you can download.

 MemberExport

Two days ago I started tweeting about this because I was very happy that exporting a few hundred members only took 2 seconds. Immediately people warned me about the fact that I used Member.GetAll to get a list of all the members which is very slow when you want to export more than 500 records. Thanks again for this warning guys (also for the brain breaking sql I had to write to improve the performance ;-)).  So I changed the Member.GetAll functionality to a custom SQL query, imported 5000 extra records  and did a performance test to see if  the modification was a success. Guess what, the export of 5000+ records only took 2142 milliseconds. I think that’s a great result to end the week with.

When will this package be available?

Next Monday I will send the package to a few people that  want to beta test MemberExport. When it’s stable enough I’ll release the package. There will be two versions of the package, a free (limited to export 200) records version and a PRO version that can also save the export options for later use. The price for the pro version will be 39 euro (ex 19% Dutch VAT, only for Dutch customers) .

I hope you find the package interesting!

Comments [1] | | # 
# Friday, 16 April 2010
Friday, 16 April 2010 14:09:04 (GMT Daylight Time, UTC+01:00) ( CMSImport | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

When I released CMSImport 1.0 two months ago, I briefly described the FieldAdapters feature that  I was going to build for version 1.1. Today I want to go more into detail about the FieldAdapters feature for CMSImport.

The problem

The reason I started to think about fieldadapters was because I wanted to solve a very common problem. As you might know Umbraco only accepts three kinds of  data; string, integer and datetime. What happens when you try to map a boolean value to  a yes/no Umbraco datatype? An exception is thrown.  The following screenshot contains several products that we want to import into Umbraco.

products

When we’ve mapped the InStore column to a yes/no datatype the import will fail because it can’t map the boolean value to a 0 or 1 and we will see the following ugly screen

errors 

And a FieldAdapter can fix that?

Yes a fieldadapter inspects the value and tries to parse it, in this case it will try to pares a true/false value to 1/0, best to explain by exploring the source code. The whole feature is based on the new IFieldAdapter interface.

using System;

namespace CMSImportLibrary.Interfaces
{
    /// <summary>
    /// Implement the IFieldAdapter interface to convert an mallformed field to a correct type.
    /// </summary>
    public interface IFieldAdapter
    {
        /// <summary>
        /// Contains the GUID of the datatype we want to parse using this FieldAdapter
        /// </summary>
        Guid DataTypeId { get; }

        /// <summary>
        /// Parse the data 
        /// </summary>
        /// <param name="value">The value to parse</param>
        /// <returns></returns>
        object Parse(object value);
    }
}

As you can see in the code snippet the interface contains the property DataTypeId. The value needs to correspondent to the Id (GUID) of the datatype you are creating the fieldadapter for. During the import a factory inspects the underlying datatype of the document property, if a fieldadapter is found it will execute  the Parse method. This will work on all Umbraco datatypes (also custom datatypes or datatypes from third party packages) as long as you know the Id of the datatype. You can find the id by opening the datatype in Umbraco, there you see the RenderControl .

truefalsedatatype

When opening the source code of the rendercontrol you’ll see the Id of the datatype (a GUID). Don’t worry if you can’t open the source code of the datatype i’ll add the Id’s of all known datatypes to the documentation of CMSImport and I’ll make a free tool that shows the Id of any datatype.

Implementation of the BooleanFieldAdapter

Now enough with all the boring stuff, let’s see the fieldadapter in action. Below you’ll see the implementation of the BooleanFieldAdapter. I’ve mapped the id of the True/false datatype to the DataTypeId property so CMSImport knows that it needs to call the Parse method during the mapping of a yes/no document property. In the Parse method I simply check if the value is already in the correct format , if not it will try to convert the value to 1 or 0 and return that , otherwise it will just return the original value.

using System;
using CMSImportLibrary.Interfaces;

namespace CMSImportLibrary.FieldAdapters.DefaultFieldAdapters
{
    public class BooleanFieldAdapter : IFieldAdapter
    {
        #region IFieldAdapter Members

        public Guid DataTypeId
        {
            get { return new Guid("38b352c1-e9f8-4fd8-9324-9a2eab06d97a"); }
        }

        public object Parse(object value)
        {
            if (!(value.Equals("0") || value.Equals("1")))
            {
                bool boolValue = false;
                if (bool.TryParse(value.ToString(), out boolValue))
                {
                    return boolValue ? 1 : 0;
                }
            }
            return value;
        }

        #endregion
    }
}

Now when we run the import  again it will just import the data without any errors, just by adding a few lines of code, isn’t that powerful?

Beyond fixing problems

Now that we have this mechanism we can also use it to modify data during the import. Let’s say we import a piece of content from an old site that contains an image tag. This will just run fine but when you have a reference to an image on your old site and  you delete that old site all the references to the images are dead. FieldAdapters can help solve this issue by inspecting the text, extract the image tags, import these images into the media library and update the image tag with a reference to the media item. This will really help keep your site consistent. The same applies for Upload fields.

Will all of this be included in the free version of CMSImport also?

All FieldAdapters that fix errors (Like the BooleanFieldAdapter) will be included into the free version of CMSImport. FieldAdapters that helps you updating the content will only be included in the PRO version of CMSImport. And again you can also create your own FieldAdapters, free for both versions.

This will be the major feature of the V1.1 release of CMSImport. Please let me know what you think about this feature.

Comments [0] | | # 
# Sunday, 04 April 2010
Sunday, 04 April 2010 19:22:10 (GMT Daylight Time, UTC+01:00) ( Package | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

With Taskscheduler you can schedule url's/pages to be executed on a certain date and time. It’s a simplified version of the Windows task scheduler, build on top of the Umbraco scheduler functionality. If you’ve used  CMSImport PRO, the package should look familiar because TaskScheduler is based on the scheduled import functionality of CMSImport PRO.  When you installed the package and browse to the developer section you’ll notice the new Scheduled Tasks tree. From here you can create new Scheduled tasks, or browse to existing ones.

Schedule a task

When you create a scheduled task, you’ll see the following screen. In this screen you can configure the scheduled task.

TaskScheduler

The scheduled task name contains the name of the scheduled task. This will also be shown in the tree and you can use this in the notification email template.

The Schedule Url contains the url that you want to execute. You can insert a full url (http://mydemosite.com/scheduledpage.aspx), an absolute path(/scheduledpage.aspx) or a relative path(~/scheduledpage.aspx). The last option will come handy when you start working with Umbraco 4.1 where virtual folders are supported. When you want to retrieve the HTTP output of the page and use that in your notify email you can set the url output to true.

If you want to retrieve a notification email that tells you the scheduled task has executed you can fill in your emailaddress in the notify emailaddress field.

Basically you’ll have three options

  • Execute every week on certain days and a certain time.
  • Execute every day on a certain time
  • Execute every hour

Settings

Not a lot of settings to configure. Only the settings for the notification email. You can configure the from address, the subject  and the email template. In the email template you can use two tags.

  • [#Taskname]. Will be replaced with the name of the configured task
  • [#Output] . Will be replaced with the html that got returned from the page if you had checked “Use Url output in url”.

taskschedulersettings

System Requirements

TaskScheduler is tested on Umbraco 4.0.3.1, is compatible with .NET Framework 2.0  and is compatible with SQL Server(Express) 2005, 2008.

Download

You can download the package from our.umbraco.org

As always I hope that you like the package and it’s useful for you.

Comments [1] | | # 
# Friday, 26 March 2010
Friday, 26 March 2010 22:53:02 (GMT Standard Time, UTC+00:00) ( SiteAnalyzer | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Apart from developing client websites,  writing a manual for CMSImport and  developing CMSImport V1.1 I’ve started the development of SiteAnalyzer last week.  In the coming blogposts about SiteAnalyzer I will describe the development process of this package.

What is SiteAnalyzer?

SiteAnalyzer is tool that checks published pages for broken links, broken images in both content and Templates/ XSLT/Usercontrols. In next versions of SiteAnalyzer it will check more and more. My goal is to check for every SEO rule which you can turn on/off.  It will be using a plugin architecture so you can add custom rules. SiteAnalyzer will report back pages where the rules failed to validate, like the Link failed due a 404 etc.

Now I hear you think, “Tools like these already exist why develop your own?”".  I have a few reasons for that, first I was not finished and second I think integrating such a tool into Umbraco is better so people can maintain their site through one interface instead of having a tool for everything. This is why the Google Analytics package for Umbraco is so popular.

Again I was not finished. The killer feature of SiteAnalyzer will be the auto repair functionality(only for content) . Best to explain by an example. Let’s say the content editor entered the url  “www.umbraco.org” in the Rich Text editor. The validator will fail due a 404 page not found. The auto repair function will try to fix the url and in this example it will convert “www.umbraco.org” to “http://www.umbraco.org/” So instead of just reporting that a url failed to validate, it will report that it found a link that failed and repaired it for you, which saves you a few clicks.

Will SiteAnalyzer be open source?

No just as CMSImport  SiteAnalyzer comes in two editions, standard (free) and a PRO commercial edition. The difference between standard and pro will be that the standard edition can handle only a certain amount of pages, the Pro version can be scheduled instead of manual start of the scan and the Pro version comes with advanced reporting which sends you a pdf after it executed.

When will we see a first release?

A first Preview release will be on our.umbraco.org in Q2,  before Codegarden. The first preview will focus on the Standard functionality.

The next blogpost will describe the architecture of this package.

Comments [3] | | # 
# Monday, 08 March 2010
Monday, 08 March 2010 12:48:25 (GMT Standard Time, UTC+00:00) ( Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Recently I’ve developed a rather large website for a customer. To make the structure as simple as possible to understand I like to use different Icons for each document type. I was very happy with the FamFamFam Icons project from The Farm. After Installing this I got another challenge and that was to pick the right Icon.

iconspng 

Today I started working on a new project, installed the FamFamFam Icons package again and thought that it would be better to assign document types to the Image instead of assigning the image to a document type. I’ve created a small Usercontrol that lists all the icons (except for the default Umbraco sprites). Next to the Icon you find  a dropdown with the possible documenttypes which you can select.

selecticon

I did not create a package out of this. It’s working for me, but it needs some improvements before I can add it to our.umbraco.org.  Maybe that  will never happen, so attached you find a zip file. Add the IconPickerDashboard.dll file to your bin folder, the IconPickerDashboard.ascx to your usercontrol folder.

Add the following section to your  the Dashboard.config file.

    <section>
        <areas>
            <area>settings</area>
        </areas>
        <tab caption="IconPicker">
            <control>/usercontrols/IconPickerDashboard.ascx</control>
        </tab>
    </section>

Now browse to the settings section and select the icons you like.

Download the zip (Requires .net 3.5).

Or download the source:

Comments [3] | | # 
# Tuesday, 16 February 2010
Tuesday, 16 February 2010 08:57:09 (GMT Standard Time, UTC+00:00) ( CMSImport | Package | UmbImport | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

I’m very pleased to announce that CMSImport 1.0.3 is released. Now I can hear you think CMSImport? Must be a fork of the great UmbImport package. No this isn’t the case. A few weeks back Niels (AKA @Umbraco) asked me to change the name since Umbraco HQ got a lot of requests about this package. So now the name is CMSImport and that’s not going to change anymore.

CMSImport PRO

Finally we’ve finished our commercial edition of CMSImport.  CMSImport PRO gives you all the options of the default package and the following extra features:

  • Update Content
  • Save Import Steps
  • Schedule imports for a certain time and day

Pricing

You can buy a single domain license of CMSImport. With a single domain license you are allowed to use  CMSImport PRO for a single domain and all subdomains, such as www.example.com, accept.example.com, and local.example.com.

We also have a Enterprise license available. With an Enterprise license you are allowed to install the CMSImport PRO on unlimited production web servers, and use it for unlimited Umbraco instances within the Enterprise. 

A single domain license will be available for  99 Euro, an enterpise license for 389 euro.

When you buy a license you’ll get free updates within 90 days of purchase and  free updates for all minor releases within a major release.  For example, if you purchased a  1.0 version of CMSImport, you get free updates of all 1.x versions through our client area.

Special 1.0 offer.When you buy the 1.0 release you’ll get a free update to 2.x. This is a 1.0 offer only!

What’s more in this release?

Several issues are solved in this release(both in the free and Pro release):

  • "item with the same key already added" error when using duplicate column names
  • Automapping column names
  • The imported document creator is not always the administrator anymore. It's using the logged in user now. When you schedule an import you can select the user that should be used as the creator of the document
  • Special characters in CSV are now supported, we’ve changed the reader from ANSI text to Unicode
  • Sometimes CSV replaced spaces with empty strings, this is solved now
  • With member import you can now merge any member property into the template. Simply surround the member property with [#(property here)]
  • Using a renamed Umbraco folder. This is possible now, although it will be better to change it after install, otherwise you have to install manually.
  • We’ve removed the limitation to allow only one DataAdapter. We are thinking to build a DataAdapter pack which contains adapters to import from wordpress, Rss, Outlook, excel etc. These adapters will be available for free in the Commercial Edition and for a small fee for the Free edition.

Roadmap

In the 1.x version we will add the following functionality:

  • FieldAdapters. Sounds boring but this is a big thing. When you import data now, sometimes the import will fail. For example if you import boolean as text (true/false) and want to store that in a True/False field in Umbraco it will fail. Umbraco expects that the value will be 0/1. FieldAdapters will solve this problem. If a insert of data fails. CMSImport will check if 1 o more FieldAdapters are available to convert the data in the right format. This will be added to version 1.1 which must be ready before CodeGarden 2010.
  • Dictionary Import. Need I say more?
  • Hierarchical imports(PRO only).

In the 2.x version we will add the following functionality:

  • Hierarchical import support in Data Adapters. Not the same as the 1.x Hierarchical import feature ;-)
  • Export/import definitions (PRO only). An easy way to deploy Import definitions

More Info

For more info, download, or purchase you’ll go to http://www.cmsimport.com/

Comments [0] | | # 
# Wednesday, 03 February 2010
Wednesday, 03 February 2010 15:45:02 (GMT Standard Time, UTC+00:00) ( Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Just a small blogpost to announce that I’ve just made a new release of the Package Action Contrib project. The following actions are added to the project:

  • AddConfigurationSection
  • PermissionForApp
  • AddLanguageFileKey
  • MoveFile
  • UpdateAppTree

You can download the new release and documentation from codeplex. I’ve also updated the WIKI page on our.umbraco.org.


Many thanks to the contributors of this release, Simon Dingley, Chris Houston, Dirk de Grave and Søren Spelling Lund for submitting their code!

Comments [1] | | # 
# Monday, 04 January 2010
Monday, 04 January 2010 21:37:53 (GMT Standard Time, UTC+00:00) ( Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

This forum post  triggered me to share some code that I had. A while back I was building a site which  let the customers define their own custom overviews One requirement was that users could define the sort by property . To do this you can use the property picker but it wasn’t friendly enough for my case so I ended up building a custom macro parameter type.

To start you need to create a new class library and add references to the following assemblies:

  • Businesslogic
  • Cms
  • Interfaces
  • Umbraco
  • System.web

In the example below I’ve created a class that inherits from dropdownlist. This was the easiest way since I needed a dropdownlist and didn’t want to play with the control tree, Now more important is that this class inherits from the IMacroGuiRendering Interface.  This add two properties ShowCaption, to show the caption on the parameters tab and more important value which holds the selected value . 

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:  using System.Web.UI.WebControls;
   5:  using umbraco.interfaces;
   6:   
   7:  namespace MacroRenderDemo
   8:  {
   9:      public class OrderBy : DropDownList, IMacroGuiRendering
  10:      {
  11:          protected override void OnLoad(EventArgs e)
  12:          {
  13:              base.OnLoad(e);
  14:              if (this.Items.Count == 0)
  15:              {
  16:                  this.Items.Add(new ListItem("Title", "nodeName"));
  17:                  this.Items.Add(new ListItem("Date", "createDate"));
  18:              }
  19:          }
  20:   
  21:          #region IMacroGuiRendering Members
  22:   
  23:          public bool ShowCaption
  24:          {
  25:              get { return true; }
  26:          }
  27:   
  28:          public string Value
  29:          {
  30:              get
  31:              {
  32:                  return this.SelectedValue;
  33:              }
  34:              set
  35:              {
  36:                  this.SelectedValue = value;
  37:              }
  38:          }
  39:   
  40:          #endregion
  41:      }
  42:  }

When you build the project and add the binary into the bin folder of your Umbraco site you still can’t select the new type from the parameter type list. First we need to register the class  in the database. Below you’ll see the database table that holds all the Macro property types.

dbrecords 

It is important that you add the Assemblyname  including the namespace to the macroPropertyTypeRenderAssembly column and add the name of your class to the  macroPropertyTypeRenderAssembly column .

Now we can use the parameter in our macro’s

parameters

and off course we can now use the new parameter in our template when we select the macro

InsertMacro

Another example how flexible Umbraco is. If a requirement isn’t available out of the box, usuallyall it takes is to implement an interface and write a few lines of code.

Comments [4] | | # 
# Saturday, 02 January 2010
Saturday, 02 January 2010 09:34:32 (GMT Standard Time, UTC+00:00) ( Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Let’s start with wishing you all the best for 2010. 2009 was an insane year for me, I had given myself one year  being successful in business running my own Umbraco  projects instead of being a .net contractor. That turned out great, I’ve got a lot of new customers, have build a few great sites for my customers  and did a few Umbraco consulting jobs. So now it’s time to make plans for 2010.  First thing is that I’m moving to a real office instead of working from home. I’m really excited about this because I’m moving to an office building with lots of small companies, I think that’s really inspiring.

When I’ve started investigating Umbraco back in 2008 we had a small amount of companies in the Netherlands (mostly freelancers) that where building websites based on Umbraco. Nowadays I see new companies that build Umbraco websites every week, not only small shops but also really big agencies. For this year my focus will be on helping companies (worldwide) being successful implementing Umbraco sites for their clients by offering consultancy services and custom package development  instead of building sites from front to end.

As you might know I’m also working for a long time on UmbImport PRO. My plan was to release this package last year. It’s the top prio on my todolist for Q1 this year. Also another package will see the light this year, UmbLinkChecker. As the name says this will be a package that checks every link in your published site, not only in content but also hard coded links in your templates etc., I will build a free and Pro version. Since Umbraco has more than 75000 active installs I think it’s profitable to build commercial packages for Umbraco and we will see more and more commercial packages from different vendors. Hope the Umbraco store will be back up in 2010 and filled with great products.

The last year I couldn’t find enough time to blog or write WIKI’s and helping the community with their problems on the forum. I’m hoping this year that will change, since I’ve got a lot of info that I’d like to share.

Have a great 2010!

Comments [0] | | #