用CodeSmith及DNNProjectTemplates进行DNN模块开发(1)

来源:互联网 发布:springmvc json date 编辑:程序博客网 时间:2024/05/24 05:49
   DNNProjectTemplate介绍见http://dnnjungle.vmasanas.net。该项目的主要目标是提供一种简单但功能强大的方式来扩展VS.NET支持DotNetNuke模块的创建。
   概览
    尽管有许多种方式来完成自定义DNN模块构建的任务,本教程按照以下顺序完成不同的任务。注意,这些步骤假定模块设计――它的目的和功能――已经被规划好。
1.创建数据库表――使用VS.NET或Sql Server企业管理器,创建任何模块功能所需要的表。
2.创建存储过程。使用CodeSmith,产生基本操作增、删、改、选的存储过程。
3.安装重要的项目――在VS.NET中打开DNN解决方案,创建两个项目:DNN Modul,和DNN SqlDataProvider DAL,在这里只产生通用代码;特定模块(或模块相关)的代码在下一步产生。
4.使用CodeSmith产生Data Provider 代码――为基于模块表和存储过程的DNN SqlDataProvider DAL项目产生代码。
5.生成抽象DAL代码――使用CodeSmith,在DNN Module项目中生成DataProvider.vb代码。
6.生成BLL代码――使用CodeSmith,在DNN Module项目中为业务逻辑层生成代码。
7.创建视图控制――产生一个基本的视图控制来从数据库中显示数据测试模块功能。这包括:
   A.使用VS.NET编写DNN Module项目的 .ascx和 .ascx.vb文件代码。
   B.通过DotNetNuke为自定义模块手工产生一个模块定义。
8.创建一个 Edit Control ――在VS.NET中,创建一个DNN 模块Edit control,以给与自定义模块一种方式来允许用户为自定义模块增加/编辑数据库中的数据。
9.创建一个Settings Control――在VS.NET中,创建一个DNN模块Settings control,它可以提供改变视图显示模块数据的选项。
10.打包自定义模块――创建一个DNN安装配置文件(.dnn)并打包整个自定义模块代码以便于DNN web站点上传并安装模块。
 
    注意这个完整的自定义模块包括两个单独的项目,都是作为原始的DNN解决方案的一部分创建的。上面几个步骤中的许多代码都是使用CodeSmith和VS.NET项目模板自动产生的。但是,创建一个自定义模块仍然包括一些相当多的工作,主要在于原始的设计努力和对模块视图、编辑及选项控件的描述。      
我们以标准的HelloWorld为例来一步步说明具体的开发过程。
 
数据库(Database
首先我们需要一张表来存储数据。所以让我们在Sql Server数据库中创建如下一个表:

 

注意:
A.itemID是标识列。
B.确保moduleID与Modules表的ModuleId建立关联。确定你选中了“Cascade Delete Related Records”,以便于当一个HelloWorld模块实例被删除时所有该实例相关的数据也被删除。
 
注意,尽管我把表名称之为VMasanas_HelloWorld,通常在你的对象名前面加公司名称为前缀以避免可能与其它模块表发生冲突不失为一种好的做法。我们将对数据库的每个对象采取同样的做法。
我们为什么要在表名前加公司前缀?假定另一个开发者使用同样的表名创建了一个扩展的HelloWorld模块。在安装该模块时它将丢弃我们的HelloWorld表,并且我们将失去所有已经存储在该表中的的信息。此外,新的HelloWorld表可能与我们所设计的HelloWorld表不兼容,这样就会破坏我们原来的自定义模块!
在此情况下这或许不是一个大问题,但是,删除一个自定义表的所有信息又如何?可能麻烦就大了。
 
现在让我们为这个表创建存储过程。
打开 CodeSmith ,找到 StoredProcedures.cst 模板。双击它,你会看到如下窗体。 CodeSmith 是一个基于表的代码生成工具,所以我们首先需要做的是选择我们刚才创建的表 ("VMasanas_HelloWorld") 。你可以为左边的每个选择使用这个窗体来查看生成的代码。注意表前缀 "VMasanas_" ( 对象限定符 )
 
 
使用与下面图片所示的同样的选择,单击“生成”按钮,并把生成的结果代码保存到一个缓存文件中(比如“ StoredProcs.sql ”)。该代码会在后面我们打包分发最终的模块时使用。
 
 
现在我们应该在数据库中创建所有这些存储过程。为完成此任务,我们将使用DNN Portal作为我们的开发环境。打开并浏览你的DNN portal,以host身份登陆,并从主机(Host)菜单中选择SQL项。然后拷贝通过CodeSmith生成的代码到SQL 模块的文本框中。确保选择了“以脚本方式运行(Run as script)”,然后单击执行命令。
 
备注:作为可供选择的方式,如果可以使用的话,你也可以在查询分析器中完成这一步;DNN portal方式是为那些以MSDE作为他们的数据库来使用以及不能访问查询分析器的用户准备的。如果你使用这种方式来安装的话,你需要在所有出现”数据库拥有者”限定符{databaseOwner}{objectQualifier}的地方用适当的值来代替。
 
不要把这些改变保存到你先前保存的文件中!我们在后面会需要原始产生的代码。


二.项目设置(Project Setup

Ok,现在我们拥有了数据库并准备了所有相关的代码。让我们开始模块项目。 

DotNetNuke包含几个解决方案文件。当开发新的模块时,从那些解决方案中拷贝一份用于你自己的开发不失为一种好的尝试。我建议使用DotNetNuke.Core 解决方案,因为这样你将不必顶着许多项目但仍然能够通过DotNetNuke核心代码进行调试。 

导航到你安装DotNetNuke的文件夹,并找到解决方案文件夹。这里存放着所有不同的解决方案。 

让我们为我们新的解决方案文件创建一个特定的文件夹: 

1.   选择DotNetNuke.Core文件夹,并将它拷贝一份。重命名新文件夹为HelloWorld.Core

2.   打开HelloWorld.Core文件夹并重命名文件DotNetNuke.Core.slnHelloWorld.Core.sln。如果你在许多不同的项目中工作,这一个简单的步骤会有助于你在VS.NET起始页中区别解决方案。 

如果你不使用默认的DotNetNuke文件夹,作为一种可选的方式,你可能需要修改一些文件。阅读Framework页中的指导以获取更多的信息来正确设置进行DNN的开发。

 

在VS.NET中打开HelloWorld.Core解决方案,并添加一个新项目。确保你没有选择关闭现存的解决方案;实际上,你必须在它上面添加。确保在位置文本框中你输入的路径是你用来开发的DNN portal 的DesktopModules文件夹。

第一步,我们创建主要的模块项目,所有相关的代码都在其中。

我们将在DesktopModules文件夹中创建此模块,并将它的名称设置为HelloWorld。如果一切顺利的话,你的解决方案应当看起来是这个样子:

注意项目模板已经创建了一些文件和文件夹,它们将在后面的步骤中使用。
 
现在我们需要该项目访问数据库,所以让我们添加一个新项目来构建模块数据层。这种类型的项目称之为一个data Provider。

所有的providers应当被构建在/DesktopModules/HelloWorld/查看下边截屏中的Location文本框下的 Providers文件夹中。你使用这个文件夹是重要的,只有这样模板才可以寻找到你的/bin主文件夹相关的路径。导航到该文件夹并指定新项目为和你的主模块相同的名称:HelloWorld。名称同样非常重要,因为模板将使用项目名称来构建正确的引用和文件路径。

(待续)

 
原创粉丝点击