DNN 模块插件开发全程详解 (一)

我今天刚开发了一个DNN插件,也是我第一次开发DNN插件,我把开发的过程描述下来,对于精通DNN的希望多多指点,对于希望涉足DNN的起到抛砖引玉的作用.

本示例以一张基本的表Department的CRUD来说明用C#制作DNN4.3插件的全过程

1:首先创建Department表   

(ModuleID,DepartmentID,DepartmentName,CreatedByUser,CreatedDate),

DepartmentID是主键

通过ModuleID建立Department表和Modules表的关系(ModuleID字段是实现模块插件的关键)

创建对应的CRUD存储过程

2:创建部门模块的内核部分

 2.1: 创建VS2005的类库项目

 2.2 添加DotNetNuke.dll 引用

  2.3 添加DepartmentInfo实体类

using System;
using System.Configuration;
using System.Data;

namespace ISS.DNN.Modules.Department
{
    
/**//// -----------------------------------------------------------------------------
    
///<summary>
    
/// The Info class for the Department
    
/// </summary>
    
/// <remarks>
    
/// </remarks>
    
/// <history>
    
/// </history>
    
/// -----------------------------------------------------------------------------

    public class DepartmentInfo
    
{

    Private Members
Private Members

    Constructors
Constructors

    Public Methods
Public Methods
    
    }

}

         2.4 创建DataProvider抽象类并添加一下代码

using System;
using DotNetNuke;
using System.Data;

using DotNetNuke.Framework;

namespace ISS.DNN.Modules.Department
{
    
/**//// -----------------------------------------------------------------------------
    
/// <summary>
    
/// An abstract class that provides the DAL contract
    
/// </summary>
    
/// <remarks>
    
/// </remarks>
    
/// <history>
    
/// </history>
    
/// -----------------------------------------------------------------------------

    public abstract class DataProvider
    
{

    Shared
/Static MethodsShared/Static Methods

    Abstract methods
Abstract methods
    
    }

}

      2.5 创建业务控制类DepartmentController

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Xml;
using System.Web;
using DotNetNuke;
using DotNetNuke.Common;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Services.Search;

namespace ISS.DNN.Modules.Department
{
    
/**//// -----------------------------------------------------------------------------
    
///<summary>
    
/// The Controller class for the Department
    
/// </summary>
    
/// <remarks>
    
/// </remarks>
    
/// <history>
    
/// </history>
    
/// -----------------------------------------------------------------------------

    public class DepartmentController : ISearchable, IPortable
    
{

    Constructors
Constructors

    Public Methods
Public Methods

    Optional Interfaces
Optional Interfaces

    }

}

         2.6 创建UI 部门浏览控件ViewDepartment,这个类一定要继承PortalModuleBase,该类是DNN模块的基类也是模块插件机制的关键,提供了很多默认的实现,该类又实现了一个接口IActionable,这个接口指明该控件又哪些操作行为,本类指明了可以对Department进行添加操作

Actions.Add(this.GetNextActionID(), Localization.GetString(ModuleActionType.AddContent, this.LocalResourceFile), ModuleActionType.AddContent, "", "", this.EditUrl(), false, SecurityAccessLevel.Edit, true, false);

namespace ISS.DNN.Modules.Department
{
    
using System;
    
using System.Data;
    
using System.Collections;
    
using System.Drawing;
    
using System.Web;
    
using System.Web.UI.WebControls;
    
using System.Web.UI.HtmlControls;
    
using System.Reflection;
    
using DotNetNuke;
    
using DotNetNuke.Common.Utilities;
    
using DotNetNuke.Entities.Modules;
    
using DotNetNuke.Entities.Modules.Actions;
    
using DotNetNuke.Security;
    
using DotNetNuke.Services.Exceptions;
    
using DotNetNuke.Services.Localization;
    

    
/**//// <summary>
    
///        ViewDepartment 的摘要说明。
    
/// </summary>

    public class ViewDepartment : PortalModuleBase, IActionable
    
{
        
protected System.Web.UI.WebControls.DataList lstDepartment;

        
        Web 窗体设计器生成的代码
Web 窗体设计器生成的代码

        Public Methods
Public Methods

        Event Handlers
Event Handlers

        Optional Interfaces
Optional Interfaces
    }

}

2.7  创建UI 部门编辑控件EditDepartment(实现CUD),该类也要继承PortalModuleBase

2.8 创建模块设置控件Settings,该类一定要继承ModuleSettingsBase

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DotNetNuke;
using DotNetNuke.Common;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Services.Localization;
using DotNetNuke.Services.Exceptions;

namespace ISS.DNN.Modules.Department
{
    
public abstract class Settings : DotNetNuke.Entities.Modules.ModuleSettingsBase
    
{
        Web Form Designer generated code
Web Form Designer generated code

        
public override void LoadSettings()
        
{
            
try 
            
{
                
if (!Page.IsPostBack) 
                
{
                    
string setting1 = ((string)TabModuleSettings["settingname1"]);
                    
string setting2 = ((string)Settings["settingname2"]);
                }

            }
 
            
catch (Exception exc) 
            
{
                Exceptions.ProcessModuleLoadException(
this, exc);
            }

        }


        
public override void UpdateSettings()
        
{
            
try 
            
{
                DotNetNuke.Entities.Modules.ModuleController objModules 
= new DotNetNuke.Entities.Modules.ModuleController();
                objModules.UpdateTabModuleSetting(TabModuleId, 
"settingname1""value");
                objModules.UpdateModuleSetting(ModuleId, 
"settingname2""value");
                Response.Redirect(Globals.NavigateURL(), 
true);
            }
 
            
catch (Exception exc) 
            
{
                Exceptions.ProcessModuleLoadException(
this, exc);
            }

        }

    }

}

OK,现在已经完成了系统的关键开发了,编译项目生成ISS.DNN.Modules.Department.dll,下一篇介绍SqlDataProvider的开发,UI界面的开发,以及安装包的制作!

原文地址:https://www.cnblogs.com/netcasewqs/p/568684.html