zoukankan      html  css  js  c++  java
  • 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界面的开发,以及安装包的制作!

  • 相关阅读:
    第九篇:网络编程
    第十篇:并发编程
    Python-GIL 进程池 线程池
    Python-生产者消费模型 线程
    Python-互斥锁 进程间通讯
    第八篇:异常处理
    第六篇:面向对象
    第四篇:模块与包
    【转】英语中的并列连词,只知道 and 和 but?11组并列连词,一篇搞定!
    【转】英语中的从属连词,28个,一篇搞定(句子结构2)
  • 原文地址:https://www.cnblogs.com/netcasewqs/p/568684.html
Copyright © 2011-2022 走看看