This Blog is not active anymore, further posts will be available on my company website. Read new posts here
This post is deprecated
Check out documentation on http://www.cmsimport.com/documentation.aspx instead
As I mentioned earlier it's possible to create a custom data adapter which can be plugged into umbImport. The free edition supports one custom data adapter, the pro edition will support multiple adapters. In this multi part series I will demonstrate how you can create your own data adapter by building an RSS import adapter. In this first part we will create the basic adapter in later post we will refine the functionality. For this first part I've installed Umbraco 4.0.1 and the packages Blog4Umbraco and UmbImport beta 1.
Create the adapter
You can create a custom data adapter by deriving from two classes:
- UmbImportLibrary.BaseTypes.ImportDataAdapter.
- UmbImportLibrary.BaseTypes.ImportDataUI.
The ImportDataAdapter class provides the real communication to the datasource and holds a reference to the ImportDataUI class which is responsible for the user input. For our RSS import adapter we will start by creating the UI class.
1: public class RSSDataAdapterUI : ImportDataUI
2: {
3: private Panel _rssContentPanel = new Panel();
4: private Literal _selectRssSourceLiteral = new Literal();
5: private TextBox _rssLocation = new TextBox();
6:
7: protected override void OnInit(EventArgs e)
8: {
9: base.OnInit(e);
10:
11: _rssContentPanel.ID = "RssContentPanel";
12: _selectRssSourceLiteral.ID = "SelectRssSourceLiteral";
13: _selectRssSourceLiteral.Text = "Specify the RSSLocation";
14: _rssLocation.ID = "RssLocation";
15: _rssLocation.Width = 400;
16: _rssContentPanel.Controls.Add(new LiteralControl(""));
17: _rssContentPanel.Controls.Add(_selectRssSourceLiteral);
18: _rssContentPanel.Controls.Add(new LiteralControl(" | "));
19: _rssContentPanel.Controls.Add(_rssLocation);
20: _rssContentPanel.Controls.Add(new LiteralControl(" example http://feeds.feedburner.com/umbracoblog |
"));
21:
22: this.Controls.Add(_rssContentPanel);
23: }
24:
25: ///
26: /// Returns the Datasource
27: ///
28: public override string DataSource
29: {
30: get
31: {
32: return _rssLocation.Text;
33:
34: }
35: }
36: }
The OnInit method generates the form. The only real interesting thing in this class is the datasource property. This will be used in UmbImport to initialize the import with the selected datasource.
1: public class RSSDataAdapter : ImportDataAdapter
2: {
3: private ImportDataUI _xmlImportUI;
4:
5: ///
6: /// Alias of the import adapter
7: ///
8: public override string Alias
9: {
10: get { return "RssImport"; }
11: }
12:
13: ///
14: /// Get XML Data
15: ///
16: ///
17: public override IDataReader GetData()
18: {
19: return XmlToDataReader(DataSource, "//item");
20: }
21:
22: ///
23: /// Validates the selected datasource
24: ///
25: public override bool Validate()
26: {
27: bool result = false;
28: try
29: {
30: using (IDataReader datareader = XmlToDataReader(DataSource, "//item"))
31: {
32: result = true;
33: }
34: }
35: catch
36: {
37: result = false;
38: }
39: return result;
40: }
41:
42: ///
43: /// Holds a reference to the UI control of the adapter
44: ///
45: public override ImportDataUI UIControl
46: {
47: get
48: {
49: if (_xmlImportUI == null)
50: {
51: _xmlImportUI = new RSSDataAdapterUI();
52: _xmlImportUI.ID = "RssImport";
53: }
54: return _xmlImportUI;
55: }
56: }
57: }
The Alias property will return the unique alias that we can use to select our adapter during the Import process. The GetData method will return a datareader initialized with the datasource. When importing XML it needs to be converted to a datareader first. The ImportDataAdapter Base class has a method XmlToDataReader what will convert the xml file to a datareader. The Validate method will check if the selected datasource is valid. The UIControl property holds a reference to the RSSDataAdapterUI class. The ImportDataAdapter base class has more properties/methods that you can override but for this data adapter we are done.
When you compile the project and put the DLL in the bin folder of the Umbraco install the DLL will be picked up automatically by UmbImport.
Using the RSS import adapter
When you start UmbImport you will see in step 2 that you can select the RssImport data adapter
In the next step we will see the form that we have created in the RSSDataAdapterUI class. Here we can specify the RSS location.
In the Next step we can specify the location where to store the blogposts (Note: When using the Blog package blogposts will be arranged by data automatically) and we select the blogpost as document type. In step 5 we will create the mapping between the fields from the RSS feed and the Umbraco Document Properties. You will see a lot of other fields from the RSS Feed. Just ignore them for now. In a later post we will filter the columns.
The result
When you click next and next again on the confirm screen the RSS feed will be imported.
In the next post I will show you how to Import the comment data with the same Adapter. I will also show you how to filter the columns for the property mapping dropdowns. When you want to play with this import adapter then download the source here.