Blog Home  Home Feed your aggregator (RSS 2.0)  
Venexus DotNetNuke Blog
DotNetNuke Articles, Code Snippets, Errors, and News
 
 Tuesday, December 18, 2007

As you can tell there has not been much activity on this blog, but not because there has not been anything going on. There has been so much going on that I simply have not had the time to make a post....here. However, we have a new blog that allows all Venexus employees to post that can be found here: http://www.venexus.com/Resources/Blog.aspx

You can update your feeds here:

Feed Title RSS
25 Latest Articles
DotNetNuke
Error Messages
Modules
Search Engine Optimization
Skins
SQL Server

I will make one more post here to sum up the year, but this is definitely the next to last post for this blog. We will move some of the most popular articles from this blog to the new one, but eventually this blog will be shutdown. More later...

Tuesday, December 18, 2007 6:28:38 AM (US Eastern Standard Time, UTC-05:00)  #    Comments [0]    |   | 
 Thursday, October 11, 2007

We all know that the keyboard is faster than the mouse right? Well here is a quick way to open any application with about 3 keystrokes:

  1. Create a new folder anywhere you like. I put mine in c:\utils\shortcuts.
  2. Place the folder in your path. You can do this by
    1. Opposite click My Computer and choose Properties
    2. Select the Advanced tab.
    3. Choose Environment Variables
    4. Select Path in the System Variables and choose Edit
    5. At the end of the Variable Value path add “;c:\utils\shortcuts” or the path to your shortcut folder. The “;” may already be there.
  3. Create or copy shortcuts to frequently used applications to your new folder. You can also use shortcuts to folder locations.
  4. Rename the shortcuts with 2 or 3 letter identifiers for quick typing. Here are a few I use:
    1. mo = Microsoft Outlook
    2. ie = Internet Explorer
    3. ff = Firefox
    4. rdc = Remote Desktop Client
    5. ps = Windows PowerShell
    6. data = My data directory

Now when I want to run a program, I open the Run box by pressing Windows Key + R, type my shortcut name (ex. mo), and press Enter. It’s faster and easier than finding an icon with the mouse

- By Michael Sullivan

Thursday, October 11, 2007 8:24:28 AM (US Eastern Standard Time, UTC-05:00)  #    Comments [1]    | 
 Tuesday, September 11, 2007

Venexus has a job opening for a DotNetNuke Module Developer.

Title: DotNetNuke Module Developer

 

Skills Required:

1.      VB.Net OR C#

2.      SQL Server

3.      Code Generation Techniques

4.     DotNetNuke (must know architecture of DotNetNuke web application framework)

Skills Desired:

1.      EntitySpaces

2.      Gemini

3.      Subversion

4.      CruiseControl.Net

5.      VB.Net AND C# (Ability to read and code in both)

Location:

We would prefer to find a local candidate (Raleigh, NC), but if you have the skills, it does not matter where you live.

 

Description:

This position will be responsible for assisting in the analysis, design, development and ongoing support of DotNetNuke and the modules we create and modify for our clients. This position will assist with verification testing, troubleshooting and failure analysis of new versions of DotNetNuke, core modules, 3rd party modules, and custom modules. The developer must be able to commit and meet deadlines.

 

The person filling this position will be working in a team environment and may be expected to have on-call responsibilities. The candidate should have excellent verbal and written communications skills with a positive customer support attitude. A person who is flexible and self-motivated will be the selected candidate.

 

Additional Requirements:

1.      You must love code.

         If you didn’t love it, you wouldn’t be doing it, right? 

 

Compensation:

Dependant upon experience

 

Please send salary expectations and resumes to careers (at) venexus (dot) com. No recruiters please!

 

Tuesday, September 11, 2007 3:28:57 PM (US Eastern Standard Time, UTC-05:00)  #    Comments [1]    |  |   | 

Venexus has 2 positions open for DotNetNuke Support Specialist.

Title: DotNetNuke Support Specialist

Skills Required:

1.     DotNetNuke (must have previous experience running and managing DotNetNuke sites)

2.     Excellent communication skills

 

Skills Desired:

1.      Gemini

2.      RDC/RDP

3.      IIS

4.      SQL Server

 

Location:

Any.

 

Description:

This position will be responsible for assisting in the support of DotNetNuke for client websites. This position will assist with verification testing, troubleshooting and failure analysis of new versions of DotNetNuke, core modules, 3rd party modules, and custom modules.

 

The person filling this position will be working in a team environment and may be expected to have on-call responsibilities. The candidate should have excellent verbal and written communications skills with a positive customer support attitude. A person who is flexible and self-motivated will be the selected candidate.

 

Compensation:

Dependant upon experience

Please send salary expectations and resumes to careers (at) venexus (dot) com. No recruiters please!

 

Tuesday, September 11, 2007 3:23:06 PM (US Eastern Standard Time, UTC-05:00)  #    Comments [0]    |  |   | 
 Thursday, July 19, 2007

Ready to configure DotNetNuke to use Active Directory for authentication? Here are some basic instructions for configuring AD in DNN that works with DNN 4.5.3:

ADMIN SETTINGS

1.    Log into DNN as Host

2.    Go to Admin > Authentication

3.    Check "Windows Authentication".

4.    Check "Synchronize Role?"

5.    Provider is "ADSIAuthenticationProvider"

6.    AuthType is "Delegation"

7.    Domain: dc=yourdomainminusthedotcom, dc=com

8.    Email domain: @yourdomain.com

9.    Click "Update".

10.  You should see a message like this...unless it does not work ;-):
 Accessing Global Catalog:
OK
Checking Root Domain:
OK
Accessing LDAP:
OK
Find all domains in network:
1 Domain(s):
yourdomain.com (SN)
  

 

IIS SETTINGS: 

1.  Open IIS Manager and find the following file within the DNN site: /Admin/Security/WindowsSignin.aspx,

2.  Right click on WindowsSigin.aspx and select “Properties”

3.  Click “File Security” tab

4.  Click “Edit” in the ‘Authentication and access control’ section

5.  UNCheck box for "Enable anonymous access" and check "Integrated Windows authentication".

6.  Choose “OK” until out of the Properties box

 

ENABLE AUTHENTICATION HTTPMODULE IN WEB.CONFIG:

1.                  Open web.config file with editor

2.                  UNComment the authentication in httpmodule section (<httpmodules>) in Web.config and save file:

<add name="Authentication" type="DotNetNuke.HttpModules.AuthenticationModule, DotNetNuke.HttpModules.Authentication" />

You should be able to login and authenticate to the site.

We performed an upgrade and Active Directory configuration this morning for a client, using DNN 4.5.3 and the above instructions worked flawlessly. This is a slightly modified version of instructions found on the DNN Forums by kimberlyrox.

Thursday, July 19, 2007 12:51:29 PM (US Eastern Standard Time, UTC-05:00)  #    Comments [1]    |   | 
 Tuesday, June 05, 2007

We have installed and upgraded quite a few sites to the latest DNN version, 4.5.3, that came out last week and most went seamlessly. However, we have found one issue that has raised it's ugly head quite a few times. After upgrading, if you clicked on "Register" you would be redirected to an admin skinned page with no account fields/content. Looking at the url you can see "/ctl/returnurl". Since the site(s) uses a custom page using a 3rd party module for registration for the account info, it is specified in Admin > Site Settings > Advanced Settings > Page Management > User Page.

Here is the error message:

System.Web.HttpException: Could not load type ''. ---> System.ArgumentException: String cannot have zero length. at System.Reflection.Assembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase) at System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) --- End of inner exception stack trace --- at System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) at DotNetNuke.Framework.Reflection.CreateType(String TypeName, String CacheKey, Boolean UseCache, Boolean IgnoreErrors)

Luckily we found a post on the DNN Forums concerning the quick fix...

4.5.3 New user registration not working if specific page defined

In the above post someone else was having a similar issue. It looks like there was a bug reported as well:

http://support.dotnetnuke.com/issue/ViewIssue.aspx?id=5746

While there could definitely been a longer or better description of the problem, it was quickly closed with "unable to reproduce in 4.5.3" the next day without any followup. Luckily the thread on the forums gained the interest of other having the issue and vitkoz was kind enough to run it through debugging to find the issue and hence the issue has been reopened in the DNN issue tracker.

Here is his fix:

"In the file admin/skins/user.ascx.vb, line 142 needs to be changed:

 

 FROM THIS:

Response.Redirect(NavigateURL(PortalSettings.UserTabId,"returnurl=" & ReturnUrl), True)

TO THIS:

Response.Redirect(NavigateURL(PortalSettings.UserTabId, "Register", "returnurl=" & ReturnUrl), True)

You can simply go to that file, make that change, and IIS will recompile it on the next run." - vitkoz

Tuesday, June 05, 2007 11:02:33 AM (US Eastern Standard Time, UTC-05:00)  #    Comments [0]    |   | 
 Thursday, May 31, 2007

After a brief debut of DNN 4.5.2 on Tuesday, DNN 4.5.3 was released today. Here is a list of changes in 4.5.2:

Component Issue Type Issue ID Summary Resource Status
(4.5.2) Stabilization Release Admin / Host Functions Bug DNN-5516 Exclude .dnn.config file from Module Packaging   Checked-In
Admin / Host Functions Bug DNN-5452 AddRoleGroup does not return new RoleGroupID   Checked-In
Admin / Host Functions Bug DNN-5529 Adding a Page in 4.5.1 Puts the Page Name in the other fields on edit   Checked-In
Admin / Host Functions Bug DNN-5703 URL Control and postback? when? Checked-In
Admin / Host Functions Bug DNN-5546 Import Portal Template fails due to unknown attributes >Shaun Walker Checked-In
Admin / Host Functions Enhancement DNN-5724 Date/Time Edit Controls   Checked-In
Admin / Host Functions Enhancement DNN-5649 Block website access based on defined criteria >Joe Brinkman Checked-In
Admin / Host Functions Enhancement DNN-1901 Please expose CDO configuration field "smtpserverport" in Host Settings tab.   Checked-In
Admin / Host Functions New Feature DNN-5536 Log application shutdown reason   Checked-In
Admin / Host Functions Task DNN-4371 Generated html code needs tidying   Checked-In
General Bug DNN-5691 GeoIP Detection   Checked-In
General Enhancement DNN-5725 Add TokenReplace support for Custom Profile Properties   Checked-In
Installation / Upgrade Bug DNN-5720 Versioning in Module Definitions doesn't work Checked-In
Installation / Upgrade Bug DNN-5690 Exception during installation of 4.x WSP modules >Shaun Walker Checked-In
Installation / Upgrade Bug DNN-5483 Edit Module Definition / Update erases the state of DNN Interfaces   Checked-In
Localization / ML Bug DNN-5526 Resource Verifier does not catch all resource files   Checked-In
Localization / ML Bug DNN-2612 XML Error in Resource Verifier   Reopened
Security Bug DNN-5510 Permission Grid - Username Edit - Enables All Users Edit   Checked-In

I am not sure what was changed in DNN 4.5.3 except for the following task in Gemini:

Component Issue Type Issue ID Summary Resource Status
(4.5.3) Stabalization Release Admin / Host Functions Bug DNN-5736 Admin notification of User/Vendor (un)registration contains empty fields   Checked-In

Scott Schecter made a post on his blog about how to disable new search features in DNN 4.5.2. I have not checked to see if these changes still apply to DNN 4.5.3.

Anyone know what else prompted the new release today?

UPDATE 6-1-2007:

Joe Brinkman of the core team commented that it was security related and provided a URL to Sebastian Leupold's post concerning the upgrade. Here is the list:

  • banner advertising disabled for all users by default
  • tab permission grid issue, where individual user permissions affected "all users" role's permission
  • incorrect display of "Upgrade available" icon for Layout Objects in Module Definitions eliminated
  • issue with login page redirect after signin corrected
  • updated ModuleControl definition for Adsense module and FeedbackExplorer, removing SolutionsExplorer
  • problem with [custom] tokens in system messages fixed
  • Thursday, May 31, 2007 10:33:57 PM (US Eastern Standard Time, UTC-05:00)  #    Comments [1]    | 
     Saturday, May 26, 2007

    We had a DNN 4.4.1 to 4.5.1 upgrade that threw a few SQLDataProvider errors during the installer that were caused by duplicate files in DNN Files table. Not sure how they got there, but here is a SQL statement to check if they exist:

    SELECT PortalID, Filename, Folder, COUNT(Filename) AS NumOccurrences

    FROM files

    GROUP BY Filename, PortalID, Folder

    HAVING ( COUNT(Filename) > 1 AND Count(PortalID) > 1 AND Count(Folder) > 1)

    Here is the SQL that was provided in the log file from the installer:

    /* add unique constraint to Files table */
    IF NOT EXISTS (select * from dbo.sysobjects where id = object_id(N'dbo.[IX_FileName]') and OBJECTPROPERTY(id, N'IsConstraint') = 1)
    BEGIN
      declare @FolderID int
      declare @FileName nvarchar(100)
      declare @FileID int
      declare @MinFileID int

      select @FolderID = min(FolderID)
      from Folders
      while @FolderID is not null
      begin 
        /* check for duplicate Filenames */
        select @FileName = null
        select @FileName = FileName
        from Files
        where FolderID = @FolderID
        group by FileName
        having COUNT(*) > 1
     
        /* if duplicates exist */
        if @FileName is not null
        begin
          /* iterate through the duplicates */
          select @FileID = min(FileID)
          from Files
          where FolderID = @FolderID
          and FileName = @FileName

          /* save min FileID */
          select @MinFileID = @FileID

          while @FileID is not null
          begin
            if @FileID <> @MinFileID
            begin
              /* remove duplicate file */
              delete
              from Files
              where FileID = @FileID
            end

            select @FileID = min(FileID)
            from Files
            where FolderID = @FolderID
            and FileName = @FileName
            and FileID > @FileID
          end
        end

        select @FolderID = min(FolderID)
        from Folders
        where FolderID > @FolderID
      end
      
      ALTER TABLE dbo.Files ADD CONSTRAINT
        IX_FileName UNIQUE NONCLUSTERED
        (
          FolderID,
          FileName
        ) ON [PRIMARY]
    END

     

    Saturday, May 26, 2007 12:48:57 PM (US Eastern Standard Time, UTC-05:00)  #    Comments [0]    |   | 
     Wednesday, May 16, 2007

    We have immediate openings for DotNetNuke Module Developers.

    Title: DotNetNuke Module Developer
     
    Skills Required:
    1. VB.Net or C#
    2. SQL Server
    3. Visual Studio 2005
    4. Code Generation Techniques
    5. DotNetNuke
     
    Skills Desired
    1. EntitySpaces
    2. Gemini
    3. Subversion
    4. CruiseControl.Net
    5. VB.Net AND C# (Ability to read and code in both)
     
    Location:
    We would prefer to find a local candidate (Raleigh, NC), but if you have the skills, it does not matter where you live.
     
    Description:
    This position will be responsible for assisting in the analysis, design, development and ongoing support of DotNetNuke and the modules we create and modify for our clients. This position will assist with verification testing, troubleshooting and failure analysis of new versions of DotNetNuke, core modules, 3rd party modules, and custom modules. The developer must be able to commit and meet deadlines.
     
    The person filling this position will be working in a team environment and may be expected to have on-call responsibilities. The candidate should have excellent verbal and written communications skills with a positive customer support attitude. A person who is flexible and self-motivated will be the selected candidate.
     
    Additional Requirements:
    1. You must love code.

             If you didn’t love it, you wouldn’t be doing it, right?

    1. The weak shall not apply.
             Please do not waste our time if you do not know how to code or have never used DotNetNuke.
     

    Request for more information and resumes can be submitted to careers (at) venexus (dot) com. No recruiters please!

    Wednesday, May 16, 2007 3:25:00 PM (US Eastern Standard Time, UTC-05:00)  #    Comments [0]    |   | 
     Sunday, April 29, 2007

    If you didn't catch it, DotNetNuke announced the first officially sponsored DotNetNuke conference in Las Vegas November 5-8, 2007. Last year was the first time I had been to Vegas, when we went to a modular software development conference last September. It was fun meeting some of the guys in the DNN community and I look forward to meeting them and others again this year. According to Joe Brinkman's blog, DotNetNuke is actively seeking speakers to submit session proposals and selected speakers will receive "3 nights of lodging at the Mandalay Bay Casino and Hotel". While I probably will not be giving a speech, Michael, Scott and I have already marked our calendars, and we may have to twist the arm of a couple more staff to go with us, depending on development schedules. Sounds like fun, see ya there!

    Sunday, April 29, 2007 2:40:03 PM (US Eastern Standard Time, UTC-05:00)  #    Comments [0]    | 
     Friday, April 20, 2007

    Continuous integration is a software development term describing the process that completely rebuilds and tests applications frequently. We recently implemented a continuous integration environment to “publish” our DotNetNuke modules to our development/staging DotNetNuke sites.

    The main advantages of a continuous integration environment are:

    • Issues are detected and fixed continuously!
    • Enhancements and new features are published continuously!
    • You are warned about problematic code before it is published.
    • Immediate unit testing of all changes.
    • Constant availability of a "current" build for testing, demos, or releases.
    • Bragging rights for developers who have the least number of broken builds.
    • Huge conservation of time when considering the normal administrative process of Build > Package > install in DNN > Test.
    • Did I mention this is continuous?

    How Our CI and DNN Environment Works

    Below is a picture to show you the basics of how our continuous integration environment works.

    Disclaimer:

    1. If you are running Visual Studio 2005 Web Developer Express, our setup will not work for you. You can stop reading here, or upgrade, unless you are just curious, then read on…
    2. There have been long discussion on Web Site Projects (WSP) versus Web Application Projects (WAP) and this post is not one to argue about which is better, rather than to say this is what we do, and the basics of how it works.
    3. You are free to comment and collaborate with others on this post. Feel free to even argue about WAP versus WEP, or that you may know of a way to integrate CI with DNN and WSP, we really do not care. However, we do not have time to walk you through setting any of this up, so please do not ask…unless you are interested in one of our DNN support packages, then by all means we can help ;-)
       

    Basics of the process:

    1. A developer “commits” the DNN module code to Subversion.
    2. The commit triggers CruiseControl.Net to “build” the DNN module using a “Trigger” for the project.
    3. CruiseControl.Net can be configured to unit test the module before publishing.
    4. An “ExecutableTask” is used with our custom assembly publisher application to send the .DLL file to the DNN website.
    5. A “BuildPublisher” sends the code from the source directory to the DNN site (D:\DNNSites\ClientDevSite\DesktopModules\CustomDNNModule as example).
    6. Results of “build” are visible in the CruiseControl.Net Web Dashboard.
       

    Implementing CI for DNN Development

    Development:

    We started DotNetnuke 4 development using the WSP methodology for all of our DNN projects. This has been successful for us for quite a while, especially when using EntitySpaces for the Persistence Layer and Business Objects (it's so easy using ES to generate the DAL. You must check this out if you are not using it). However, we found that to make this work we have to use WAP projects. I have a very fast laptop, but using WSP and doing a build of all of DNN to compile a module can be quite time consuming, taking several minutes sometimes. But, building a WAP project is FAST, saving some development time when debugging and testing builds, especially when doing those final little tweaks. One could argue that WSP is better, but for our setup with one to many developers working on a single module, WAP is the best decision. So, it did not take much to twist our arm to changing our methodology. It is unfortunate that in order to use this for our existing clients and projects, we will need to convert our WSP modules to WAP. But, we have started developing all new modules as WAPs and converting WSP modules to WAP is not a difficult task.

    To read about the great WSP versus WAP debate, see the following links:

    Shaun Walker’s post on WAP

    http://www.dotnetnuke.com/Community/Blogs/tabid/825/EntryID/434/Default.aspx

    An interesting debate between Michael Washington and Vladan Strigo

    http://www.dotnetnuke.com/Projects/ModuleNews/Forums/tabid/953/forumid/111/threadid/91268/threadpage/6/scope/posts/Default.aspx

    WAP Methodology

    “Web Application Projects provide a companion web project model that can be used as an alternative to the built-in Web Site Project in Visual Studio 2005. This new model is ideal for web site developers who are converting a Visual Studio .Net 2003 web project to Visual Studio 2005. (Released May 8, 2006)” - http://msdn2.microsoft.com/en-us/asp.net/aa336618.aspx

    Michael Washington has a great post on creating a DNN WAP Module:

    http://www.adefwebserver.com/DotNetNukeHELP/DNN4_WAP/

    Once the module is ready for testing on our client development site, we use TortoiseSVN to “commit” code to Subversion (http://tortoisesvn.tigris.org/).

    Source Code Version Control:

    We use Subversion for our source code repository and version control system (http://subversion.tigris.org/). We have tried Visual SourceSafe and CVS, but have been using Subversion with success for quite some time now. CruiseControl.Net integrates with Subversion easily. It is also nice that there is a plugin for Subversion that allows us to send our comments directly to Gemini (project management/tracking application) when we commit new code.

    Continuous Integration Software:

    We use CruiseControl.Net, a .Net port of the Java based CruiseControl 

    Continuous Integration Server using CruiseControl.Net

    The CruiseControl.Net Server automates the integration process by monitoring the team's source control repository directly. Every time a developer commits a new set of modifications for the DNN module, the server will automatically launch an integration build to validate the changes. When the build is complete, the server notifies the developer whether the changes that they committed integrated successfully or not.

    CruiseControl.Net allows for several different types of “Tasks”, such as:

    • EmailPublisher (for emailing of build details)
    • ExecutableTask (for kicking off executables, such as our custom assembly publisher)
    • NAntTask (for unit testing)
    • NUnitTask (for unit testing)
    • RSSBuildsPublisher (for generating a RSS feed with details)
    • VisualStudioTask (for running something in VS)
    • Etc.

    Here is an example ccnet.config:
    <!--<ccnetconfig><configurationVersion>1.2.1</configurationVersion></ccnetconfig>-->
    <cruisecontrol>
      <project name="BPLWantList">
        <workingDirectory>D:\cibuilds\ProjectName\ModuleName</workingDirectory>
        <webURL>http://ourCIdomain.com/server/local/project/ModuleName/ViewProjectReport.aspx</webURL>
        <sourcecontrol type="svn">
          <trunkUrl>svn://localhost/ProjectName/ModuleName</trunkUrl>
        </sourcecontrol>
        <triggers>
          <intervalTrigger name="Quarter Hour Build" seconds="900" />
        </triggers>
        <tasks>
      <exec>
          <executable>VenexusAssemblyPublisher.exe</executable>
          <baseDirectory>D:\</baseDirectory>
          <buildArgs>"d:\Source\ProjectName\DesktopModules\ModuleName\obj\Debug" "d:\DevSites\ProjectName\bin"</buildArgs>
      </exec>
        </tasks>
        <publishers>
          <buildpublisher>
            <sourceDir>D:\cibuilds\ProjectName\ModuleName</sourceDir>
            <publishDir>D:\DevSites\ProjectName\DesktopModules\ModuleName</publishDir>
      <useLabelSubDirectory>false</useLabelSubDirectory>
          </buildpublisher>
          <xmllogger />
          <statistics />
        </publishers>
      </project>
    </cruisecontrol>


    CruiseControl.Net Web Dashboard

    The CruiseControl.Net Web Dashboard Application is used for reporting a wide range of information about the builds. At one end of the scale it reports summary details of all projects in your organisation and at the other it can give specific metric output for any specific build.

    Here is an example of a simple DNN Module being used in our CI environment:

    Notice the failed build notification. While we have not setup unit testing, you can see in the left menu in the image, there are quite a few different options.

    Conclusion

    For long term DotNetNuke module projects, setting up a continuous integration environment will save a tremendous amount of time in the long run. All of the tools to implement CI are free, lowering the total cost of DNN module development. With a little bit of time setting up your environment, you can provide continuous updates to your clients, all while forcing good coding practices among your developers. 
     

    Friday, April 20, 2007 1:47:50 AM (US Eastern Standard Time, UTC-05:00)  #    Comments [1]    |  |   | 
     Sunday, April 08, 2007

     I have been asked to compare the differences between our search engine and Open-SearchEngine. I agree this is an important question that needs to be answered, so I decided to put together a comparison between the core DNN Search, Open-SearchEngine, and Venexus Search Engine. While my opinion of which is the best, is defintely biased toward our own product, I have tried to provide an in-depth look at the basics of how each search engine works, a feature matrix, and simple search results analysis. Without further ado, read on...

    DotNetNuke Search (core project)
    DNN Search is part of the DNN core that is installed and configured out of the box.
     
    DotNetNuke Search consists of 4 main pieces:
    • Scheduled Task

    The scheduled task initiates the process of indexing the modules, at the scheduled time interval. An iteration of all modules that support iSearchable is performed. During this process, text that is extracted from the module is cleaned, parsed, and added to search word and search items tables.

    • Search Admin

                        The search admin is for setting the maximum word length, minimum word length, option to include common words, and the option to include numbers. 

    • Search Input Module

    A module or skin object can be used to provide the form for the search query. In module settings, you can use the default button, or an image. You do not have the option to change this image within the module, nor change the text. Styles can be used to make some look and feel changes, but it is limited. When a search is performed, the user is redirected to the Search Results page.

    • Search Results Module
    This module provides the search results. In the settings, you can set the maximum search results, results per page, maximum title length, maximum description length, and the option to show description. Results are limited to the exact word queried.
     
    Oddly enough, there no longer appears to be a DNN forum for search, or a blog dedicated to it on the DotNetNuke website. However, a good place to find out more about the core module is ecktwo’s site. There is a lot of information about how all the pieces work together, as well as the bugs/issues of DotNetNuke Search. There is also a tutorial and report on DNN Search for DNN 4.
     
    Open-SearchEngine
    Open-SearchEngine is developed by Xepient Solutions. The package is capable of indexing HTML content as well as PDF’s and several Office documents. Open-SearchEngine uses Lucene.Net, a port of the Java Lucene Search Engine, for indexing and querying.
     
    Open-Search Engine consists of 4 main pieces:
    • Scheduled Task

    Test The scheduled task initiates the process of spidering, at the scheduled time interval. Lucene.Net handles indexing of the data.

    • Search Engine Admin Module

    This module provides an interface for configuring the search engine to your preferences. You can add a starting URL and by default, spidering is enabled. This allows you to offer multiple sites in your search engine. However, unless disabled, each time you run the process to update the index, all URLs are re-crawled. With many URLs on the site(s) you index, it can lead to a very long time between the completion of crawling and indexing runs.

    • Search Input Module 

    A module or skin object can be used to provide the form for the search query. In module settings, you can use the default button, or an image. You also have the option to add “Search” as text or image before the textbox.

    • Search Results Module
    This module provides the search results. In the settings, you can set which sites are part of the results scope, maximum results per page, maximum title length, title link target, and the option to hide description.
     
     
     
    Venexus Search Engine
    The Venexus Search Engine is quite different than the other 2 solutions. The package includes 2 modules and requires MS SQL Server Full-Text Indexing. Like traditional crawlers, VSE can crawl and index a variety of data, but where the real difference is seen is in it's ability to also “crawl” and index RSS feeds. This is the key to keeping the search results up-to-date, while conserving server and bandwidth resources. Rather than recrawling and reindexing all content, "smart caching" is used to determine when RSS feeds need to be aggregated, and when non-syndicated content needs to be recrawled on the site.
      
    The Venexus Search Engine consists of 2 main pieces:
    • Seamus Module

    The Seamus module is the “search engine aggregation module utilizing syndication”. On the first load of the module, Seamus iterates through the core DNN modules on all portals that support the iPortable interface. Seamus uses this “initial dump” to gather other URLs for the site. You also have the ability to add feeds to Seamus, not only for your site, but any external site. With “global crawler” enabled, any external site URLs that are discovered during crawling, are added to the queue as well.  Using AJAX, Seamus performs crawling of 3 feeds and 3 URLs with each load. If the user remains on the page, using AJAX, Seamus will continue to crawl and save the data to the table for indexing.  This decreases the load on the server by spreading the crawling and indexing across several user sessions, rather than a single scheduled task.

    • Search Module

    The Search module provides the search box, as well as the results. Using Microsoft SQL Server’s feature of Full-Text Indexing, data is indexed from the crawling and storing provided by Seamus. Within the settings you can specify the search button text or use you own custom image for the button, set maximum search length, set search bx size, maximum results, results per page, set maximum length of display URL, specify remote connection string (database other than DNN), specify portal specific search, or allow user to select between site or all of the web search.

    Feature Comparison Matrix:

    Below you will find a list of features for DNN Search, Open-SearchEngine, Venexus Search Engine Standard, and Venexus Search Engine PRO.

    Feature
    DNN Search
    Open-SearchEngine
    Venexus Search Engine Standard
    Venexus Search Engine PRO
    Crawling Method
    Module Indexer (Must implement iSearchable)
    Custom URL crawler/spider (Must have starting URL for each site, with crawling enabled)
    Custom Crawler
    (Uses iPortable interface, traditional URL crawler/spider, and RSS aggregation)
    Custom Crawler
    (Uses iPortable interface, traditional URL crawler/spider, and RSS aggregation)
    Crawl and Index Start
    Requires DNN Scheduled Task
    Requires DNN Scheduled Task
    User Interactive (AJAX in aggregation module)
    User Interactive (AJAX in aggregation module)
    Global Crawler
    No
    No (Requires input of each domain)
    No
    Yes
    DNN User Impersonation
    No
    Yes
    No
    No (Version 2.0)
    Windows Authentication
    No
    Yes
    No
    No (Version 2.0)
    Exclude List
    No
    Yes
    Yes
    Yes
    Excel Documents
    No
    Yes
    No
    Yes
    PDF Files
    No
    Yes
    No
    Yes
    PowerPoints
    No
    Yes
    No
    Yes
    RTF Files
    No
    No
    No
    Yes
    Word Docs
    No
    Yes
    No
    Yes
    Index File System
    No
    Yes
    No
    No (Version 2.0)
    Index
    Table Driven Index
    Lucene.Net (flat file)
    Full-Text Indexing in SQL Server (flat file)
    Full-Text Indexing in SQL Server (flat file)
    RSS
    No
    No
    No
    Yes
    Enclosure Support (podcast/vodcast)
    No
    No
    No
    Yes
    Feed Discovery
    No
    No
    Yes
    Yes
    Smart Caching
    No
    No
    Yes
    Yes
    Allow users to add feeds
    No
    No
    No
    Yes
    Generates RSS Feed of latest items indexed
    No
    No
    Yes
    Yes
    Blog and Feed Aggregator Pinging
    No
    No
    No
    Yes
    Search Skin Object
    Yes
    Yes
    Yes
    Yes
    Utilize DNN Search Skin
    Yes
    No
    Yes
    Yes
    Modify search box and image
    No
    Yes
    Yes
    Yes
    Use Image or Text for Search button
    No
    Yes
    Yes
    Yes
    Portal(site) or Web search
    No
    No
    Yes
    Yes
    Keyword Highlighting
    No
    Yes
    Yes
    Yes
    Cached Version
    No
    No
    No
    No (Version 2.0)
    User Saved Searches
    No
    No
    No
    No (Version 2.0)
    Social Bookmarking
    No
    No
    No
    Yes
    Price
    Free
    $49
    Free
    $199

    Performance and Relevancy:

    What about performance and the relevancy of the results? I setup a test site with 5 total pages of content and installed/configured DNN Search, Open-SearchEngine, and Venexus Search Engine on separate pages. I also installed PageGenerated module from Ventrian Systems to show page execution time. I am not sure of any accuracy for a benchmark here, but the following results are the best of 5 consecutive query executions against each search engine using "truman" without quotes as the search query. In reality, there are only 2 relevant pages associated with "truman". There is a link from the home page of the site with the text "Truman Doctrine" as a contextual link that directs the user to the full document about the "Truman Doctrine". Ideally, we should expect the document that is all about "truman" and his doctrine to be listed first:

    DNN Search:

    Best Execution Time: 0.218531 seconds

    Results Returned: 1

    Notes:

    The only result returned is not the most relevant page on the site. In fact, the "Truman Doctrine" page is not even listed as a result. This must be because the word "truman" does not actually appear in the content of the text/html module on the Truman Doctrine page. There is "HARRY S. TRUMAN'S ADDRESS" in the content, but DNN Search can only return results where the query is spelled EXACTLY like something in the content.

    Open-SearchEngine:
     

    Best page Execution: 0.1093155 seconds

    Returned Results: 10

    Notes:

    Notice the poor description and the fact that the true most relevant d