Search

Latest Community DotNetNuke Blog Posts

Active Modules, Inc.
Friday, February 05, 2010 6:14:41 AM
It’s that time again … this week I have a few reminders from last week and a few new things to tell you about!  First, as I’ve mentioned before, with the release of Active Social 1.3, we have added to the available documentation and have consolidated it in the Knowledge Base.  Ben has added another guide this afternoon: Active Social Login and SignUp Setup Guide.  Make sure you have set up your site using the Getting Started Guide; then follow this guide for public registration.  Please continue to let us know what areas you would like to see documented more.

Secondly, thank you for those who responded about being a “Featured Site.”  We are still looking for a few more sites and are also interested in publishing some customer testimonials on our website.  If you can provide either of these for us, we will be happy to reward you with a $30 coupon toward a future purchase or renewal.  Please use the Contact Us form if you would like to be used as a featured site or if you would like to provide us with a testimonial about your use of Active Social or Active Forums.

On to the “new” news … We would like to share some great feedback we received from a few of our Active Social customers this week.  First, Steven Webster, has shared his 30 Day Report Card – the short term effects of Active Social 1.3 on our site in the Community Forums.  Since upgrading to Active Social 1.3, his site has experienced an increase in page views and average time on the site.  To read more, click here.  We hope you have experienced or will experience similar results!

A second customer, Will Strohl, posted a few comments about Active Social in his blog today.  “Out [of] all of the available solutions for DNN that I could demo, this was the only one that just worked, with minimal set-up and had the best usability,” he wrote.  One new thing Will mentions in his blog is a few, FREE webinars that Active Modules plans to offer. 

We are excited to announce these two webinars, which will occur in the next few weeks and will help you get started building a social network with DotNetNuke and Active Social.  The first, Getting Started with Active Social, will take place on February 11th at 2:00 pm EST.  This webinar will cover how to setup a site with Active Social from scratch and will actually go through the setup and configuration of our demo site, www.activsocial.com. 

The second webinar will take place on February 24th at 2:00 pm EST.  This meeting, Building Social Networks and Online Communities with DotNetNuke, will explore the tools available to DNN users to create social networks on existing or new sites.  Both meetings will last about an hour, and all who are interested in participating are welcome to join.  Learn more about the webinars, and sign up to participate here!


The Mighty Blog
Friday, February 05, 2010 5:34:00 AM

Active Modules If you follow anything that I do, then you might have picked up on the fact that I am a big fan of Active SocialActive Social is a complete social networking solution for DotNetNuke®.  Out all of the available solutions for DNN that I could demo, this was the only one that just worked, with minimal set-up and had the best usability.  Needless to say, I am using this solution on a handful of sites, from a mission-critical travel website, to a simple family website.  It has worked great!*

* To be fair, I have of course had difficulties like we do with nearly any software product. But they weren’t anything that didn’t get resolved appropriately and timely.

One of the notable things about this solution is that it has a template and theme system built into it, that allows you to extend the look and functionality of the existing module.  In theory, you could completely change it to the point that you would recognize it being Active Social.  For example, if you’re building a book review network website, you could add a “view” to the implementation to support the addition and management of reviews from people within the social network.

As great as those features are, they are not for the faint of heart.  Not everyone will be able to just build a theme or view.  Luckily, Active Modules as come to the rescue!  They are offering two different webcasts to help get you started with Active Social.  If you are interested in any level of social activity on your website or a client’s website, then I suggest you check it out.  And get this… They’re FREE!  {happy dance}

Getting Started with Active Social

February 11, 2010 @ 2:00 PM EST – Register Now
Learn how quick and easy it is to add Active Social to your site.   We will walkthrough the setup and configuration of activesocial.com and show how to setup a site from scratch.

Building Social Networks and Online Communities with DotNetNuke®

February 24, 2010 @ 2:00 PM EST – Register Now
How can you make your site more "social?" Do you want to improve communication with your customers? Would you like to add more capabilities to your existing community? Are social tools a good fit for your site, your users and for you? We will look at what capabilities exist today within DotNetNuke along with administrative and maintenance tasks that you should consider. We will also review what modules and widgets you can easily add to your existing site. Then we will show how you can interact with other popular social networking tools. Finally, we will walkthrough how you can leverage DotNetNuke and various modules to build your own social networking site.

Active Modules, Inc.
Friday, February 05, 2010 3:09:52 AM

Building Social Networks and Online Communities with DotNetNuke

How can you make your site more "social?" Do you want to improve communication with your customers? Would you like to add more capabilities to your existing community? Are social tools a good fit for your site, your users and for you? We will look at what capabilities exist today within DotNetNuke along with administrative and maintenance tasks that you should consider. We will also review what modules and widgets you can easily add to your existing site. Then we will show how you can interact with other popular social networking tools. Finally, we will walkthrough how you can leverage DotNetNuke and various modules to build your own social networking site.


Join us for a Webinar on February 24


Space is limited.
Reserve your Webinar seat now at:
https://www1.gotomeeting.com/register/366584312

Title:   Building Social Networks and Online Communities with DotNetNuke

Date:
Thursday, February 24, 2010

Time:
2:00 PM - 3:00 PM EST

After registering you will receive a confirmation email containing information about joining the Webinar.

System Requirements
PC-based attendees
Required: Windows® 2000, XP Home, XP Pro, 2003 Server, Vista

Macintosh®-based attendees
Required: Mac OS® X 10.4 (Tiger® or newer





Active Modules, Inc.
Friday, February 05, 2010 2:45:22 AM

Getting Started with Active Social

Learn how quick and easy it is to add Active Social to your site.   We will walkthrough the setup and configuration of activesocial.com and show how to setup a site from scratch.


Join us for a Webinar on February 11


Space is limited.
Reserve your Webinar seat now at:
https://www1.gotomeeting.com/register/840196608

Learn how quick and easy it is to add Active Social to your site.   We will walkthrough the setup and configuration of activesocial.com and show how to setup a site from scratch.

Title:   Getting Started with Active Social

Date:
Thursday, February 11, 2010

Time:
2:00 PM - 3:00 PM EST

After registering you will receive a confirmation email containing information about joining the Webinar.

System Requirements
PC-based attendees
Required: Windows® 2000, XP Home, XP Pro, 2003 Server, Vista

Macintosh®-based attendees
Required: Mac OS® X 10.4 (Tiger® or newer





Charles Nurse
Monday, February 01, 2010 9:50:03 AM

In earlier blogs (Part 1 and Part 2 of this series) I described how I have developed a Framework that allows developers to create DotNetNuke (DNN) modules using the new ASP.NET MVC Framework.  In this blog I will describe the new base class which is used to enable this ability - MvcModuleApplication.

Prior to DotNetNuke 5.0, all module controls had to be ASP.NET User Controls that inherited from PortalModuleBase – a base class in the DotNetNuke Web Application Framework that provided the context necessary for DotNetNuke’s Module Injection logic to load and inject the module control in the page. (Since about DNN 4.4 a module control was not required to be an ascx file – it could be a compiled server control, but it still had to inherit from PortalModuleBase and thus ultimately from UserControl).

IModuleControl

In DNN 5.0 an interface was introduced – IModuleControl – and the Module Injection logic was refactored to require the control to implement IModuleControl, rather than inherit from PortalModuleBase.  PortalModuleBase itself was refactored to implement this interface so no existing modules were broken.

Creation of this interface means that it is no longer necessary to inherit from UserControl – although we are still required to ultimately inherit from the base class Control.

MvcModuleApplication

As demonstrated in Part 1 of this series, MVC Modules are required to include a class that inherits from MvcModuleApplication.

Listing 1 – The MVC_TestApplication class
   1:  public class MVC_TestApplication : MvcModuleApplication
   2:  {
   3:      protected override string FolderPath
   4:      {
   5:          get { return "MVC_Test"; }
   6:      }
   7:   
   8:      protected override void Init()
   9:      {
  10:          base.Init();
  11:          RegisterRoutes(Routes);
  12:      }
  13:   
  14:      private static void RegisterRoutes(RouteCollection routes)
  15:      {
  16:          routes.RegisterDefaultRoute("MVC_Test.Controllers");
  17:      }
  18:  }

Listing 1 shows the class we added to the Test MVC module we created in the first part of this series.  As discussed above, DotNetNuke Modules need to implement the interface IModuleControl and inherit from Control (this is necessary as the framework either needs to load a UserControl (ie ascx) or instantiate a Control and add it to the Controls collection of the Container.  This is demonstrated in Listing 2, which shows the new base class – MvcModuleApplication - before we add any  MVC Framework enabling code.

Listing 2 – The MvcModuleApplication class
   1:  namespace DotNetNuke.Web.Mvc
   2:  {
   3:      public abstract class MvcModuleApplication : Control, IModuleControl
   4:      {
   5:          #region IModuleControl Implementation
   6:   
   7:          public Control Control
   8:          {
   9:              get { throw new NotImplementedException(); }
  10:          }
  11:   
  12:          public string ControlPath
  13:          {
  14:              get { throw new NotImplementedException(); }
  15:          }
  16:   
  17:          public string ControlName
  18:          {
  19:              get { throw new NotImplementedException(); }
  20:          }
  21:   
  22:          public string LocalResourceFile
  23:          {
  24:              get { throw new NotImplementedException(); }
  25:              set { throw new NotImplementedException(); }
  26:          }
  27:   
  28:          public ModuleInstanceContext ModuleContext
  29:          {
  30:              get
  31:              {
  32:                  if (_moduleContext == null)
  33:                  {
  34:                      _moduleContext = new ModuleInstanceContext(this);
  35:                  }
  36:                  return _moduleContext;
  37:              }
  38:          }
  39:   
  40:          #endregion
  41:      }
  42:  }

Now that we have our base class, we can add the pieces to enable MVC modules.  In Part 2 of this series I described the MVC Pipeline.  We are going to plug in to this pipeline right at the beginning by implement logic similar to the ProcessRequest method of the MvcHandler. (So readers don’t have to refer back to the earlier blog, this method is shown in Listing 3).

Listing 3 - MvcHandler, ProcessRequest method
   1:  protected internal virtual void ProcessRequest(HttpContextBase httpContext) {
   2:      AddVersionHeader(httpContext);
   3:   
   4:      // Get the controller type
   5:      string controllerName = RequestContext.RouteData.GetRequiredString("controller");
   6:   
   7:      // Instantiate the controller and call Execute
   8:      IControllerFactory factory = ControllerBuilder.GetControllerFactory();
   9:      IController controller = factory.CreateController(RequestContext, controllerName);
  10:      if (controller == null) {
  11:          throw new InvalidOperationException(
  12:              String.Format(
  13:                  CultureInfo.CurrentUICulture,
  14:                  MvcResources.ControllerBuilder_FactoryReturnedNull,
  15:                  factory.GetType(),
  16:                  controllerName));
  17:      }
  18:      try {
  19:          controller.Execute(RequestContext);
  20:      }
  21:      finally {
  22:          factory.ReleaseController(controller);
  23:      }
  24:  }

As the MvcModuleApplication class inherits from Control it is part of the WebForms Page Life Cycle.  We will override the OnInit method which is our first opportunity to implement our own code (Listing 4).

Listing 4 – MvcModuleApplication, OnInit
   1:  protected override void OnInit(EventArgs e)
   2:  {
   3:      base.OnInit(e);
   4:   
   5:      //Wrap the http Context
   6:      HttpContextBase httpContext = new HttpContextWrapper(HttpContext.Current);
   7:   
   8:      // Setup the module's context
   9:      ModuleRequestContext moduleRequestContext = new ModuleRequestContext
  10:      {
  11:          ModuleContext = ModuleContext,
  12:          ModuleRoutingUrl = "", // for now we will pass in an empty string
  13:          HttpContext = httpContext
  14:      };
  15:   
  16:      _moduleResult = ExecuteRequest(moduleRequestContext);
  17:  }

In this method we first create an instance of HttpContextBase – from the HttpContext (line 6).  The MVC Framework uses this abstract base class to enable better testability, so we need to do the same. 

Next, we create a ModuleRequestContext object (lines 9-14).  This class is a helper class that enables us to pass around the ModuleContext (from IModuleControl) a RoutingUrl and the HttpContext to any method that needs this information. 

Finally we call the ExecuteRequest method, passing it this helper object and getting a ModuleRequestResult back (line 16).

Listing 5 – MvcModuleApplication, ExecuteRequest
   1:  public virtual ModuleRequestResult ExecuteRequest(ModuleRequestContext context) {
   2:      EnsureInitialized(context.HttpContext);
   3:   
   4:      // Create a rewritten HttpRequest (wrapped in an HttpContext) to provide to the 
   5:      //routing system
   6:      HttpContextBase rewrittenContext = new RewrittenHttpContext(context.HttpContext, 
   7:                                                  context.ModuleRoutingUrl);
   8:   
   9:      // Route the request
  10:      RouteData routeData = GetRouteData(rewrittenContext);
  11:   
  12:      // Setup request context
  13:      string controllerName = routeData.GetRequiredString("controller");
  14:      RequestContext requestContext = new RequestContext(context.HttpContext, routeData);
  15:   
  16:      // Construct the controller using the ControllerFactory
  17:      IControllerFactory factory = ControllerBuilder.GetControllerFactory();
  18:      IController controller = factory.CreateController(requestContext, controllerName);
  19:      try {
  20:          // DotNetNuke Mvc Modules must implement IModuleController (not just IController)
  21:          // Because we need to retrieve the ActionResult without executing it, IController
  22:          // won't cut it so attempt to adapt the Controller if it does not directly 
  23:          // implement IModuleController
  24:          IModuleController moduleController = controller as IModuleController;
  25:          if (moduleController == null)
  26:          {
  27:              moduleController = AdaptController(controller);
  28:          }
  29:          if (moduleController == null) {
  30:              throw new InvalidOperationException("Could not construct ModuleController");
  31:          }
  32:   
  33:          // Execute the controller and capture the result
  34:          moduleController.Execute(requestContext);
  35:          ActionResult result = moduleController.ResultOfLastExecute;
  36:   
  37:          // Return the final result
  38:          return new ModuleRequestResult {
  39:              ActionResult = result,
  40:              ControllerContext = moduleController.ControllerContext,
  41:              ModuleContext = context.ModuleContext
  42:          };
  43:      }
  44:      finally {
  45:          factory.ReleaseController(controller);
  46:      }
  47:  }

The ExecuteRequest method (Listing 5) is very similar to the ProcessRequest method of MvcHandler, and so it should be as we need to do the same things, construct a Controller class and execute the Controller so it can Invoke the appropriate action.  So lines 17 and 18 of Listing 5 are almost identical to lines 8 and 9 of Listing 3.

However there are a few differences.

  • At the beginning of the method we do some setup work that is handled by other classes in the ASP.NET MVC Pipeline (lines 2-10).
  • DotNetNuke MVC Modules must implement IModuleController (not just IController), so we attempt to cast the returner controller to IModuleController, and if that fails we attempt to adapt it (line 27)
  • After we call the Execute method of Controller we then use the IModuleController’s "ResultOfLastExecute property to trap the ActionResult, which is returnedd by the Controller’s “action” method (lines 34-35).
  • We generate a ModuleRequestResult to return to the caller code in OnInit (lines 38-42)

The important difference here is that unlike the main MVC Framework we need to trap the ActionResult.  Two helper classes allow us to achieve this.

MvcControllerAdapter and ResultCapturingActionInvoker classes

Listing 6 – The MvcControllerAdapter Class
   1:  public class MvcControllerAdapter : IModuleController
   2:  {
   3:      #region Private Members
   4:   
   5:      private Controller _adaptedController;
   6:      private ResultCapturingActionInvoker _actionInvoker;
   7:   
   8:      #endregion
   9:   
  10:      #region Constructors
  11:   
  12:      public MvcControllerAdapter(Controller controller)
  13:      {
  14:          _adaptedController = controller;
  15:          _actionInvoker = new ResultCapturingActionInvoker();
  16:          _adaptedController.ActionInvoker = _actionInvoker;
  17:      }
  18:   
  19:      #endregion
  20:   
  21:      #region IModuleController Members
  22:   
  23:      public ActionResult ResultOfLastExecute
  24:      {
  25:          get { return _actionInvoker.ResultOfLastInvoke; }
  26:      }
  27:   
  28:      public ControllerContext ControllerContext
  29:      {
  30:          get { return _adaptedController.ControllerContext; }
  31:      }
  32:   
  33:      #endregion
  34:   
  35:      #region Public Methods
  36:   
  37:      public void Execute(RequestContext requestContext)
  38:      {
  39:          if (_adaptedController.ActionInvoker != _actionInvoker)
  40:          {
  41:              throw new InvalidOperationException("Could not construct Controller");
  42:          }
  43:          ((IController)_adaptedController).Execute(requestContext);
  44:      }
  45:   
  46:      #endregion
  47:   
  48:  }

The MvcControllerAdapter class (Listing 6) allows us to adapt standard MVC Framework Controller’s so that they implement the additional IModuleController interface.  The main job of the MvcControllerAdapter is to replace the Controller’s ActionInvoker with a ResultCapturingActionInvoker (line 15).  The ResultCapturingActionInvoker (Listing 7) captures the result of the Action and exposes it as the ResultofLastInvoke property.

Listing 7 – The ResultCapturingActionInvoker Class
   1:  public class ResultCapturingActionInvoker : ControllerActionInvoker
   2:  {
   3:      #region Public Properties
   4:   
   5:      public ActionResult ResultOfLastInvoke { get; set; }
   6:   
   7:      #endregion
   8:   
   9:      #region Protected Methods
  10:   
  11:      protected override void InvokeActionResult(ControllerContext controllerContext, 
  12:                                                  ActionResult actionResult)
  13:      {
  14:          // Do not invoke the action.  Instead, store it for later retrieval
  15:          ResultOfLastInvoke = actionResult;
  16:      }
  17:   
  18:      #endregion
  19:  }

So why do we need to capture the ActionResult? 

In the standard MVC Pipeline the next phase after invoking the action is to render the View.  DotNetNuke modules need to render their View inside the Container provided.  The ExecuteRequest method of the MvcModuleApplication class returns the ModuleRequestResult (which contains the captured ActionResult) and saves it in a private variable.

Now, we need to remember that the MvcModuleApplication class inherits from the base Control class.  DotNetNuke will have instantiated this class and added it to the Controls collection of the Container.  We use this fact in the RenderControl method to render our View, by executing the ActionResult (which as long as a ViewResult was returned will render the View inside the Container). (see Listing 8)

Listing 8 – MvcModuleApplication, RenderControl
   1:  public override void RenderControl(System.Web.UI.HtmlTextWriter writer)
   2:  {
   3:      if (_moduleResult != null)
   4:      {
   5:          //Execute the ActionResult
   6:          _moduleResult.ActionResult.ExecuteResult(_moduleResult.ControllerContext);
   7:      }
   8:  }

And that’s how its done.

Conclusions

So in conclusion the process used to enable MVC modules to be created is as follows.

  1. During the Init phase of the Page Lifecycle, mimic the MvcHandler to instantiate an MVC Controller class
  2. Adapt the Controller to modify its ActionInvoker so we can capture the ActionResult from the Controller’s action method.
  3. During the render phase of the Page LifeCycle, execute the returned ActionResult, to render the View.
DNN Creative Magazine
Monday, February 01, 2010 4:10:00 AM
February 2010

Welcome to Issue 53 of DNN Creative Magazine

Issue 53 - DotNetNuke Module Administration, DataSprings Dynamic Forms, File Action OWS, Localization with RAD

In this issue we focus on Module Administration, in particular configuring how to limit which modules are available to use in the control panel (Premium Modules), how to configure which modules non-administrators can add to a page, and also working with the DotNetNuke Recycle bin. Each of these elements are important to ensure your website administrators get the most from their DotNetNuke portals.

Following this we provide part one of a quick start guide to using DataSprings Dynamic Registration module. This is a very powerful module which enables you to quickly create a custom registration form without the need for editing the DotNetNuke core code. Most users require a customized registration process for their visitors and this module allows you to achieve this easily, we walk you through a custom registration form which demonstrates a selection of the registration options available.

Next we continue the Open Web Studio tutorials, this month we demonstrate working with File Action in your OWS configurations. File Action provides many possibilities for working with files in your website, including: How to edit a file on your website, how to upload a file to your website and how to import an Excel or CSV file into a table within your SQL database.

To finish, we have part three of the "How to Build a News Application with DotNetMushroom Rapid Application Developer (RAD)" article, where we demonstrate how to implement Multi-Language functionality in the News application.



This issue comes complete with 12 videos.

Administrators: 

How to Limit Modules Available in the Control Panel (Premium Modules)
How to Limit Modules Available in the Control Panel (Premium Modules)
(1 video - 8mins)
How to Configure Which Modules Non-Administrators Can Add to a Page How to Configure Which Modules Non-Administrators Can Add to a Page
(1 video - 9mins)
DotNetNuke Recycle Bin DotNetNuke Recycle Bin
(1 video - 7mins)
Premium Modules:

DataSprings Dynamic Registration Module Quick Start Guide Part 1
DataSprings Dynamic Registration Module Quick Start Guide Part 1
(6 videos - 56mins)
Module Development Series:

Working with File Action in Open Web Studio
Working with File Action in Open Web Studio
(3 Videos - 22mins)
How to Implement Multi-Language Localization With DotNetMushroom RAD
How to Implement Multi-Language Localization With DotNetMushroom RAD

View issue 53 to download all of the videos in one zip file




DNN Creative Magazine for DotNetNuke Web Designers
Covering DotNetNuke module video reviews, video tutorials, mp3 interviews, resources and web design tips for working with DotNetNuke.

In 53 issues we have created 534 videos!
The Mighty Blog
Monday, February 01, 2010 2:52:00 AM

Toronto Area DotNetNuke User Group

Do you live in the Toronto Area and need your DotNetNuke® fix?  Well, Paul Scarlett has that fix ready for you!  He has just founded the Toronto Area DotNetNuke User Group.  Paul recently announced this on the DotNetNuke® Forums, and is currently looking for your input.  So, if you’re passionate about DNN, or just want to learn more about DNN, go to the user group website and register.  You don’t have to be an expert to contribute to or attend user group meetings.  You just have to have an interest. 

On another note, Paul’s community efforts don’t stop there.  He regularly speaks about DNN around the world, including at last year’s Day of DotNetNuke®.  This year, he is coming back to Florida in March to present an updated version SQL Tips and Tricks for DotNetNuke® Site Administration.  Either way, make sure you stop by and see him.

TechBubble
Friday, January 29, 2010 7:29:14 PM
In an average week, I communicate on the phone, by email, through webinars and in person, with some 100 DotNetNuke business customers, prospects and partners. A majority of them use DotNetNuke in some mission-critical way. I enjoy these conversations and get many insights on their real-world experience with DotNetNuke. I have noticed that there are [...]
Charles Nurse
Friday, January 29, 2010 9:46:43 AM

In an earlier blog I introduced the idea of using ASP.NET MVC to develop DotNetNuke modules, and I walked through how you could create a simple ASP.NET MVC Module Application.  Now that I have demonstrated that it is feasible to use the MVC Framework in a WebForms Application, I will start to dig into how this was done.

But first, before we look at the code, lets review how the standard ASP.NET MVC Pipeline works. This is summarized effectively by Steve Sanderson, on his blog.

Figure 1 – ASP.NET MVC Pipeline

This diagram was based on an early Preview of the ASP.NET MVC Framework, but the basic process has not changed.  There are 4 stages in the standard ASP.NET MVC pipeline; Routing, Instantiate Controller, Locate and Execute Action, Instantiate and Render View.

Routing

In the routing step the Incoming Http Request is mapped to the MvcHandler and the MvcHandler’s ProcessRequest method is called, assuming of course that you have registered the handler in your web.config file (Listing 1).

Listing 1 – Registering the MVCHttpHandler in web.config
<add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" 
type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"
/>


Controller Instantiation

The ProcessRequest method (Listing 2) creates a ControllerFactory (line 8), which in term attempts to create a Controller (line 9), using the RouteData  which is part of the RequestContext.  Assuming that the ControllerFactory is able to create a Controller Instance, ProcessRequest will call the Execute method of the Controller (line 19), thus passing control to the Controller.

Listing 2 – MvcHandler, ProcessRequest method
   1:  protected internal virtual void ProcessRequest(HttpContextBase httpContext) {
   2:      AddVersionHeader(httpContext);
   3:   
   4:      // Get the controller type
   5:      string controllerName = RequestContext.RouteData.GetRequiredString("controller");
   6:   
   7:      // Instantiate the controller and call Execute
   8:      IControllerFactory factory = ControllerBuilder.GetControllerFactory();
   9:      IController controller = factory.CreateController(RequestContext, controllerName);
  10:      if (controller == null) {
  11:          throw new InvalidOperationException(
  12:              String.Format(
  13:                  CultureInfo.CurrentUICulture,
  14:                  MvcResources.ControllerBuilder_FactoryReturnedNull,
  15:                  factory.GetType(),
  16:                  controllerName));
  17:      }
  18:      try {
  19:          controller.Execute(RequestContext);
  20:      }
  21:      finally {
  22:          factory.ReleaseController(controller);
  23:      }
  24:  }


Action Invoker

We have now successfully routed control to the appropriate Controller. 

The Execute method of the ControllerBase class calls the ExecuteCore (Listing 3) method of the Controller class.  This in turn calls the ActionInvoker (line 6), which again uses the RouteData to invoke the specific action on the Controller. 

Listing 3 – Controller, ExecuteCore method
   1:  protected override void ExecuteCore() {
   2:      TempData.Load(ControllerContext, TempDataProvider);
   3:   
   4:      try {
   5:          string actionName = RouteData.GetRequiredString("action");
   6:          if (!ActionInvoker.InvokeAction(ControllerContext, actionName)) {
   7:              HandleUnknownAction(actionName);
   8:          }
   9:      }
  10:      finally {
  11:          TempData.Save(ControllerContext, TempDataProvider);
  12:      }
  13:  }

An action maps to a method name in the Controller class.

Listing 4 – The HomeController class
   1:  public class HomeController : Controller
   2:  {
   3:      public ActionResult Index()
   4:      {
   5:          ViewData["Message"] = "Welcome to ASP.NET MVC!";
   6:   
   7:          return View();
   8:      }
   9:   
  10:      public ActionResult About()
  11:      {
  12:          return View();
  13:      }
  14:  }

For example in Listing 4 which shows the HomeController in the default ASP.NET MVC project – the Index and About methods represent the index and about actions of the HomeController. 

You would reach these methods using the routes “/home/index” and “/home/about”, although as the first route represents the default controller “home” and the default action “index”, the null route would also reach the Index method.

Render View

Finally the ActionInvoker gets the returned ActionResult from the action method ands calls its ExecuteResult method.  If the ActionResult is a ViewResult (Listing 5) this in turn will render the View (line 17).

Listing 5 – ViewResultBase, ExecuteResult
   1:  public override void ExecuteResult(ControllerContext context) {
   2:      if (context == null) {
   3:          throw new ArgumentNullException("context");
   4:      }
   5:      if (String.IsNullOrEmpty(ViewName)) {
   6:          ViewName = context.RouteData.GetRequiredString("action");
   7:      }
   8:   
   9:      ViewEngineResult result = null;
  10:   
  11:      if (View == null) {
  12:          result = FindView(context);
  13:          View = result.View;
  14:      }
  15:   
  16:      ViewContext viewContext = new ViewContext(context, View, ViewData, TempData);
  17:      View.Render(viewContext, context.HttpContext.Response.Output);
  18:   
  19:      if (result != null) {
  20:          result.ViewEngine.ReleaseView(context, View);
  21:      }
  22:  }


Plugging in to the ASP.NET MVC Pipeline

So, given that DotNetNuke is a WebForms Application how do we plug in to this Pipeline with the least possible impact .  What I mean by this is that we don’t want to have to rewrite the MVC Framework in order to get everything to work.  We want to be able to use all of the extensibility points that the Framework enables, with a minimum amount of effort.

In the next part of this series I will describe how we achieve this goal.

Active Modules, Inc.
Friday, January 29, 2010 5:41:11 AM
I hope everyone has had a good week!  It’s been another busy one here at Active Modules.  As our Active Social customers continue to install 1.3 on new sites or upgrade to 1.3 on existing ones, I want to remind everyone to be sure to read over the documentation BEFORE installing or upgrading Active Social.  Documentation for Active Social has been consolidated here.  In addition, Ben posted a guide to Creating a Custom Theme in Active Social 1.3 yesterday afternoon.

As we continue to update our website, one thing you may notice is that we are now offering installation and setup services for Active Social.  For $199.95, we will install and configure Active Social on your site.  You can choose from two configuration options: Basic and Standard; customizations will have an additional charge.

The Basic Configuration is the bare essentials and consists of four pages.
1.    Forums - Contains the Active Forums module, which has your discussion forums and your Active Social group forums
2.    Groups – Contains the listing of all the groups and displays individual groups when selected
3.    Profiles – Shows the member list and the profile of a chosen member
4.    Messaging – Contains the private messaging interface

The Standard Configuration consists of nine pages and will offer improved search engine optimization by allowing each group and profile to have separate addresses.
1.    Forums – Same as Basic Configuration
2.    GroupsList – Contains the list of all the groups in the network
3.    GroupsView – Default view of a group profile, only visible once a group has been created.
4.    MemberList – Searchable listing of all members of the network
5.    ProfileView – Displays a member’s profile
6.    Messaging – Same as Basic Configuration
7.    Summary – The Social Stream, shows updates and activity for members and groups on the site
8.    Login – A separate page containing only the active social login, used for verified registration or other non-standard logins
9.    Sign-Up – A page containing the Active Social Sign-Up wizard

Lastly, we would like to showcase more customer sites on our redesigned website.  If you are using Active Social and would like to share your site with others, please Contact Us.  In addition to some extra traffic, we should be able to give you some extra incentive for allowing us to feature your site!  I look forward to hearing from you!
Charles Nurse
Thursday, January 28, 2010 9:42:56 AM

Last week, shaun posted a blog in which he discussed whether DotNetNuke (DNN) should be rewritten in ASP.NET MVC.  This blog created quite a stir, both within the DotNetNuke Community and within the ASP.NET Community as a whole. 

In a comment that I added to shaun’s post I suggested that the debate should not be over whether DNN should be rewritten in ASP.NET MVC (or any other framework that may come in the future), the discussion should be on “How can we enable developers to use the ASP.NET Technologies of their choice when developing extensions for DNN.”  After all, if we rewrite DNN in MVC we effectively lock out WebForm developers.

Thanks to an idea from my son Andrew (much of what I used in this work was from his Maverick project on codeplex) I have been able the create a Framework that sits on top of DotNetNuke (and System.Web.MVC) and allows modules to be created using the ASP.NET MVC Framework (DotNetNuke.Web.Mvc).

In this article I will review how – using this add-on layer we can go about creating a simple ASP.NET MVC module.  First, add an ASP.NET MVC Application to your Visual Studio solution. (See Figure 1 below)

Figure 1 – Add a new MVC Web Application in the Desktop Modules folder called MVC_Test
MVCModule01

Note that the location of the project is in the DesktopModules folder of our test website.  This is exactly the same process we would use to add a WAP (Web Application Project) style module. Figure 2 below shows the Solution Explorer after adding this project.

Figure 2 – The new Project in Solution Explorer
MVCModule02

Before we go any further – we should prove to ourselves that this is a valid ASP.NET MVC Web Application, by selecting the Default.aspx file, and selecting View in Browser from the Context menu (see Figure 3 below)

Figure 3 – Browsing to the site demonstrates that this is a valid ASP.NET MVC Application
MVCModule03

So now we have an MVC Application, how do we make it run as a Module in our DotNetNuke website?  First we need to add a new class to our project – MVC_TestApplication.cs (see Figure 4).

Figure 4 – Add a new class MVC_TestApplication to the root of the Application
MVCModule04

And we need to add references to our DotNetNuke Library project and to the new DotNetNuke.Web.Mvc project (see Figure 5)

Figure 5 – Add references to the DotNetNuke Library and the new DotNetNuke.Web.Mvc project
MVCModule05

When we have done that we need to open the new class we added and add some very simple code.

Listing 1 – The MVc_TestApplication class
   1:  using System.Web.Routing;
   2:  using DotNetNuke.Web.Mvc;
   3:  using DotNetNuke.Web.Mvc.Routing;
   4:   
   5:  namespace MVC_Test
   6:  {
   7:      public class MVC_TestApplication : MvcModuleApplication 
   8:      {
   9:          protected override string FolderPath 
  10:          {
  11:              get { return "MVC_Test"; }
  12:          }
  13:   
  14:          protected override void Init() 
  15:          {
  16:              base.Init();
  17:              RegisterRoutes(Routes);
  18:          }
  19:   
  20:          private static void RegisterRoutes(RouteCollection routes) 
  21:          {
  22:              routes.RegisterDefaultRoute("MVC_Test.Controllers");
  23:          }
  24:      }
  25:  }

The most important thing to note is that this class inherits from MvcModuleApplication, a new base class in the new DotNetNuke.Web.Mvc project.  The Init method allows us to register any routes that our MVC Module Application will need and the FolderPath property tells the DotNetNuke.Web.Mvc project where our Views are located.  Finally we need to make a very small change to the default View (Listing 2).

Listing 2 – Index.aspx
   1:  <%@ Page Language="C#" MasterPageFile="../Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage" %>
   2:   
   3:  <asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
   4:      Home Page
   5:  </asp:Content>
   6:   
   7:  <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
   8:      <h2><%= Html.Encode(ViewData["Message"]) %></h2>
   9:      <p>
  10:          To learn more about ASP.NET MVC visit <a href=http://asp.net/mvc 
                               title="ASP.NET MVC Website">http://asp.net/mvc</a>.
  11:      </p>
  12:  </asp:Content>

If you blink you won’t see the change. 

The change is to the reference to the MasterPageFile – the value of the attribute is changed from “~/Views/Shared/Site.Master” to “../Views/Shared/Site.Master”.  The reference points to the same file – but the original reference assumes that the Views folder is at the root of the IIS Application – as a module it is actually at ~/DesktopModules/MVC_Test/Views”.  By making the reference relative it will work in both scenarios.

Next we need to create our Module Extension.  This is done in much the same way as we do today, the only difference being that when we register the Module Control we use the Namespace for the new class that we added – MVC_Test.MVC_TestApplication (See Figure 6 below).  Since version 5.0, DNN has allowed module controls to be server controls and ultimately our new MVC_TestApplication class inherits from Control.

Figure 6 – Add the MVC_TestApplication as the Source for the Default Module Control
MVCModule06

Finally build our new MV Module Application and copy the assembly from the bin folder of the project to the bin folder of the Website.

We are now ready to see if everything works.  Add a new Page and add the newly registered Module to the Page and “hey presto” we get a Module that looks like the MVC Application (See Figure 7 below)

Figure 7 – Add the Module to the Page
MVCModule07

The really cool thing is that we can still browse to the site (as an MVC Application) by selecting the Default.aspx page, and selecting View in Browser from the context menu, as we did in Figure 3 above.

Conclusions

In summary I have demonstrated in this article, that using ASP.NET MVC for Module Development is a possibility.  There still are a number of issues to resolve however, including, but not limited to:

  1. Handling routes other than the default route.
  2. Do the Html Helpers in ASP.NET MVC still work? and if not how can we make them work?
  3. As Webforms allows only one Form tag which is defined in the base page -Default.aspx -how do we handle Forms in an MVC Module.
  4. Issues around the use of Master pages and styles, and DNN skinning – we can solve this by removing the dependency on Master pages which is not a requirement of ASP.NET MVC.

I don’t expect any of these to be show-stoppers, but much more work still needs to be done.  In future blogs, I will describe how what I describe in this article was done and report on my attempts to resolve the remaining issues.

Active Modules, Inc.
Thursday, January 28, 2010 4:11:11 AM

Creating a theme

The steps here are different than Active Social 1.2. Creating a theme does not have to be a difficult process however. It can be used to fix small issues in layout. As always, please try to accomplish all modifications using css before editing a template.

  1. Navigate to the DesktopModules/ActiveSocial directory. Locate the themes directory. This is the folder that contains all the themes for Active Social.
  2. Inside this directory you should only see two folders. _activesocial and empty-theme. If you still have the active and _default themes from Active Social version 1.2.7, you can delete these as they are no longer compatible.
  3. Right click on the _activesocial folder and select "Copy". Right click in the blank space and select "Paste". Rename the new folder. You have just created a new theme. It will look exactly like the _activesocial theme if you were to apply it, but we will add to it.
  4. Double click on the new-theme directory, right click and create a new folder.
  5. Name the new folder templates. This folder is empty for now.
  6. Open the folder and create another new folder. You do not need to rename this one at this point. You may need to repeat this step if you are modifying multiple different types of template files. This guide is only going to show editing a single template, but the process will be the same later.
  7. Navigate back to the DesktopModules/ActiveSocial directory. Locate the config directory and open it.
  8. Locate the templates directory and open it.
  9. Here you will see a list of the different types of template groups. If you did any custom theme work in Active Social 1.2.7, this will look familiar. The biggest difference however, is that we only need the templates we plan on editing. If a particualar template does not need editing, DO NOT touch it. Active Social will use these default templates if it can not find a customized one in the templates directory.
  10. The example I am going to use is for a site where they have changed the word username to "Email Address", and it has made the Login view break into two lines of text. We are going to need to make the container a little wider and give the text some room to fit on one line.
  11. Looking this template up in the Templates and Tokens guide, I know that it resides in the folder "Other" and is called "Login.ascx". Open the "Other" directory and find the file. Right click on the file and select "Copy".
  12. Navigate back to this directory: DesktopModules/ActiveSocial/themes/new-theme/templates. You will see the folder that we created earlier. Now that we know the name of the folder that our template belongs in, we can rename this. Right click on the folder and rename it "Other".
  13. Open the "Other" folder, right click and select "Paste". This will place the Login.ascx file in the directory. Notice that we only copied one file, not all the files in the default "Other" directory.
  14. Open the "Login.ascx" file in your favorite html editor. I am using Visual Studio 2008 in this example.
  15. In this example I made a few changes.
    1. I increased the width in the first line to 260px.
    2. I added an inline width to the first td element. This is what contains the "Email Address:" text.
    3. I removed the style="width:100%" from the other td element.
  16. Save your changes and close the file. At this point the custom theme is complete and we need to apply it to the module. Navigate to a page that contains an Active Social module; while logged in as an administrator. In this example I will go to the Login page, so I can view my changes. Click on the "Control Panel" link.
  17. On the Settings page of the Control Panel you will see a section labeled "Default Theme". This is where you can select your new theme. Expand the drop down list and click on new-theme.
  18. You will now see the new-theme listed in the box.
  19. Scroll down and click the Save button, then exit the control panel.
  20. Navigate to the Login page and view the changes. In this example the container is a bit wider and the text appears on a single line.
  21. We have now successfully created and applied a custom theme for Active Social! If you need to perform further modifications, repeat the steps again. It is important that you do not simply copy all the templates in the config directory. Also note that you can not make changes to the _activesocial theme as they will be reset every time you access the Control Panel. If you have any questions please ask in the Active Social customizations forum.
DNNDaily.com
Thursday, January 28, 2010 1:13:19 AM
What happened to all the DotNetNuke Tips? Life once again happened, life and work. I’ve been travelling a lot the past two months doing onsite DotNetNuke Training, and as of right now that isn’t slowing down! I’m going to try to get back into the swing of posting tips again, not likely daily, but I will do my best to try to get at least two or three a week cranked out. To start things back off I’m going to tackle a simple, yet commonly overlooked one.
The Mighty Blog
Wednesday, January 27, 2010 3:42:00 AM

I was helping someone out on twitter today.  They were very upset about DotNetNuke®, claiming that it sucked.  That’s fine.  Everyone thinks that something sucks.  But usually that statement arises as an emotional response to being frustrated by something that should be “simple.”  I agree. All applications should be simple.  However, not everyone gets it right the first time.  Luckily for us, the DotNetNuke® Corporation is fully aware of the usability shortcomings of DNN, and are actively fixing them in each release.  You can easily see evidence of this when comparing version 3.x to version 5.x.

Today’s frustrated DNN user was very upset.  He uploaded an image using the File Manager module, and then couldn’t find the image.  I would suspect that this happens a lot more than we realize.  He assumed that since he uploaded the image to the file manager’s “root” folder, the image would be in the root of the website.  That’s not correct. 

DotNetNuke File Manager Module

As you can see above, the images are in the “Portal Root,” but what does that mean?  To some people, they might not even know what a “portal” is, or they might have their own definition for the term.  That being said, it is very likely that many people will also misinterpret where the images physically live on the web server.  In this case, here is the kind of URL being used to try to access an image file in the “Portal Root” of their website:

http://www.domain.com/imagename.gif

They will be immediately be met with an HTTP 404 File Not Found error though.  That’s because the portal root is actually deeper in the website directory.  That same image will actually need to be referenced using a URL closer to the following:

http://www.domain.com/Portals/#/imagename.gif

Replace the # symbol above with the PortalID of the website in question.

Why is that?  Simple.  DNN can and very often does host multiple websites from a single hosting account.  That’s done for a variety of reasons, usually unique to each person(s) managing the site.  Since we wouldn’t want each portal to share the same files uploaded by their own users (usually), they need to have their own “sandbox” to play in.  This is for both security and to prevent files from being accessed or overwritten by other website users.

It Gets Better!

While that seems like a pain, DNN does a great job of making those files easy to access.  For example, most modules make use of a file control that allows you to select files directly from your own portals directory.

DotNetNuke Text Editor

Other modules that use the text editor make this even easier, if you’re looking for images.  The default WYSISYG editor has a browser to help you find images.

DotNetNuke Text Editor: Image Properties

Once you click on the images button in the toolbar, there’ll be a “Browse Server” button in the resulting dialog that allows you to see the images loaded in your portals directory.  You can even upload images and create folders from this dialog too!

DotNetNuke Text Editor: Browse Server

I hope this helps clear up this issue for a few people out there. Let me know if there are any other issues that you’re facing with DotNetNuke®.  I’d love to help you!

Technorati Tags: ,,
Active Modules, Inc.
Tuesday, January 26, 2010 10:14:45 PM

Active Modules announces Active Social 1.3, the latest version of the company’s social networking solution

Active Social delivers the most complete, out of the box social networking solution for DotNetNuke.

Charleston, SC (PRWEB) January 27, 2010 -- Active Modules, Inc, a software development company that is known for producing several of the top modules for the DotNetNuke Web Application Framework, announces the latest version of Active Social. Active Social is an extremely flexible and user-friendly social networking solution that builds and promotes strong online communities. Both site administrators and users will benefit from this version, which includes several new features and many enhancements to existing features.

Active Social for DotNetNuke
Active Social for DotNetNuke
“Active Social delivers the most complete, out of the box social networking solution for DotNetNuke. We knew, based on Active Modules’ long track record of delivering high quality, enterprise class and extensible modules for DotNetNuke that their latest release of Active Social would be perfect for us to move beyond a vertical market forum into an organic specialty social network. “ says Steven Webster, owner of BikeClicks.com. “Active Social allows us to have our site up and running quickly, but still customized every last detail from how it works to what it looks like without writing code. This flexibility has allowed us to incorporate Active Social into our site seamlessly.”

“BikeClicks.com is a perfect example of how Active Social can take a large, but simple forum based community to the next level of social networking and on-line communities. Active Social provides site owners with the tools necessary to attract new members and encourage site participation,” says Will Morgenweck, President of Active Modules, Inc. “We know we have a successful product when we see sites such as BikeClicks.com achieve their own goals using Active Social.”

BikeClicks.com was part of the Active Social Beta release which allowed Steven Webster to upgrade his site and launch with Active Social 1.3 two weeks early. He says, “The results have already paid off. Since re-launching our site on Active Social 1.3 we've seen an immediate increase in traffic, membership, activity and can literally watch new user to user connections being made in real time.”

Active Social 1.3 includes several new features including: Social Summary, Categories, Auto Friend, RSS Manager, Welcome Messages and more. The template and skinning systems have also been updated, which allows for simpler customization of the module and better site design integration out of the box.

With the ability to create customized member profiles, groups, forums, private messages, events, photo albums, and much more, Active Social offers all the tools needed to start a strong, online community or to enhance an existing site. To learn more about Active Social, please visit http://www.activemodules.com or http://www.activesocial.com, the interactive demo site for Active Social.

Headquartered in Charleston, S.C., Active Modules, Inc. is a software development company offering custom solutions focused around DotNetNuke and the Microsoft .NET Framework. The ease of use and affordable pricing of the Active Modules product line makes the modules ideal solutions for large companies, small groups, start-up businesses, or interest groups of any size.

TechBubble
Tuesday, January 26, 2010 7:13:59 PM
Here’s an illustration depicting a common scenario for DotNetNuke Deployment in the Enterprise. Click the image for a higher-res version. If you find the image helpful, feel free to use it as needed without any restrictions or attribution requirements. Share this on del.icio.us Digg this! Post this on Diigo Share this on Reddit Stumble upon something good? Share it on [...]
The Mighty Blog
Tuesday, January 26, 2010 4:04:00 PM

For the first time, there will be a Regional Qualifier for the Florida Microsoft Speaker Idol contest on February 20th.  This contest was announced a few months ago.  Basically, you present a technical presentation on anything “Microsoft” for up to 10 minutes.  User groups all over the state have been participating in this event, and that includes the Orlando DotNetNuke® Users Group (ODUG). 

We held our competition at our December meeting where we had several ODUG members give us some great presentations.  However, we rebranded our instance of the event as the DotNetNuke® Speaker Idol.  :)  We made sure to keep our version focused on DNN for obvious reasons, and it worked out really well.  I had more compliments and feedback about this meeting than any other.  Also, the attendance was very high.  The competition proved to be stiff.  We have 6 DNN presentations to choose from.  In the end, there could only be one winner though.  That winner was Darrell Hardy.

On February 20th @ 5PM, he will be going up against the winners from the Orlando .Net User Group (ONETUG), and the Lakeland .Net User Group to find out who is going to represent the Central Florida user groups at the state competition.

This should prove to be an outstanding event.  It’s being held at the Tatame Tea & Sake Lounge, in Winter Park, FL.  This place has been getting nothing but great reviews, so I am super excited!  The place is run by the former ONETUG President, Jessica Sterner. 

Following the Idol competition, we will be holding a .Net Jeopardy game, where you will be able to compete with your fellow user group members and members of the other user groups for many prizes.  Put your .Net knowledge to the test, and show us what you got!

Roy Lawson, the President of the Lakeland .Net User Group, is bringing a grill and cooking up what he is telling us is “the best smoked chicken and ribs on the planet!”  I don’t know about you, but I am going to definitely try those! 

Now that you know what’s going on, make sure that you register to attend on the ONETUG website…  See you there!

Register to Attend the Regional Microsoft Speaker Idol on February 20th @ 5PM

Active Modules, Inc.
Tuesday, January 26, 2010 2:12:25 AM
I had several specific goals in mind when we first created Active Purchase.  Shortly after the first release It became very apparent that there was a growing need for an e-commerce module for DotNetNuke. I found it very odd that people were considering Active Purchase over all the other well established e-commerce modules for DotNetNuke.  After several months of pre-sales inquiries the pattern became fairly obvious.  Most modules could do 80% of what the user wanted, but the remaining 20% was the most important.  This meant that most people wanted a "semi-custom" solution.  We saw the same pattern with Active CRM.  The problem we had with both of those products is that you simply couldn't get that remaining 20% without heavy source code modifications.  The architecture behind Active Social is the direct result of experiences we have had with other products.  Active Social has been on the market for nearly a year, with hundreds of customers.  We have yet to come across an implementation request that required source code. 

What's next for Active Purchase?
In case you haven't noticed some of the changes to our site, we are now 100% focused around building solutions for on-line communities.  This means that all of our products moving forward must compliment each other in some fashion.  I have no doubt in my mind that we could build the top selling e-commerce module for DotNetNuke, but that isn't our goal.  Our goal is to provide an e-commerce solution that is tailored specifically for on-line communities.  First, you need to be able to accept payments in various ways.  Second, you need design and navigation flexibility.  Finally, transaction management tools for administrators and end users are primary functions, not after thoughts.  Why is this important?  We want it to be clear that we are not going to add feature after feature just so Active Purchase can be considered an e-commerce platform.  We are going to provide a robust API and numerous integration points so that our customers building on-line communities or social crm applications will have the e-commerce tools they need.

More details regarding specific functionality and release date will be posted soon.
DNNDev_Blog
Tuesday, January 26, 2010 12:13:00 AM

Have you heard the news? We've just released XMod Pro 2.0.  Just like we've done with XMod, we are letting our customers guide XMod Pro's development. In this release, you will see dramatic improvements in your ability to quickly create forms and views from your DotNetNuke databases. The best news is that, because of our policy of providing a year of upgrade protection to our customers, all XMod Pro 1.x owners get 2.0 for FREE. Read on for a list of new features

More...
Active Modules, Inc.
Monday, January 25, 2010 11:53:45 AM
Active Social 1.3 introduced a new feature for you to categorize groups.  While this is a great feature for helping you organize your social groups within your DotNetNuke site, there is still much more you can do with a group.

A group has some fairly common data elements.  A few of which include: Name, Description, Address, and Web Site.  A group is also an easy way to associate multiple users with a common interest or entity.  Within Active Social, a group also has numerous features which have unique permissions to that specific group and members of the group.  Depending on how much customization you would like to do, you can even have unique templates and designs for each group.  

Tomorrow we will be releasing another update for Active Social which includes a new feature called "Group Types".   A group type allows you to further define the actual purpose of a group.  For example, let's say you are using Active Social for the community section of the website of a Software Company.  The obvious choice for implementing groups would be for each product and members are those that have purchased or might be interested in the product.  Another purpose for a group could be to associate customers from the same company.  You could create a group type called Company.  You could setup one master contact for the company (group owner) which could manage who belongs to that company.  Within the "Company" view you could create custom tabs for creating help desk tickets, downloading updates, viewing license information, etc.  You could use the Active Social API to automatically create the "Company" after a product was purchased and then populate it with all the relevant information from the purchase.  

The scenario above is just one example of extending groups for multiple purposes.  If plan your site properly using Categories and Group Types, you can use groups for many things including: Directories, Catalogs, Property Listings, Project Management, etc.  Hopefully this will give you an idea of the flexibility within Active Social.    


RSS URL

About Us

Why DotNetNukeBlogs.com? Our goal is to be the premier aggregator of DotNetNuke related materials. DotNetNukeBlogs.com was started by DotNetNuke Core Team member Chris Hammond with the intention to provide a place for the leaders in the DotNetNuke Community to push their content to those needing it most, the users.

Stay tuned as we continue to grow. If you're a DotNetNuke Expert be sure to get your feed added into our aggregate system.

You can read more about us here

Built On DotNetNuke

This site is built with and supports the DotNetNuke open source project.
DotNetNuke Powered!

Resources

DotNetNuke.com The DNN mothership.

Community-Credit.com A place to aggregate all of your community contributions and recieve recognition for these contributions.

DotNetNuke Training from Engage Software

Copyright (c) 2010 DotNetNuke Blogs On DNN, For DNN

DotNetNuke and DNN are trademarks of DotNetNuke Corporation