用CodeSmith及DNNProjectTemplates进行DNN模块开发(6)(完结篇)

八.设置控制(Settings Control)

作为最后一步,我们将学会如何使用模块的设置控制。该控制将使用标准的DotNetNuke核心特性被添加到模块动作菜单的默认设置选项中。
打开Settings.ascx用户控件并添加一个CheckBox控件(将它命名为Checkbox1)并设置文本属性为“Header in bold”。
打开该控件的代码文件并将下面的代码代替LoadSettings中的代码:
Public Overrides Sub LoadSettings()
  Try
        If Not Page.IsPostBack Then
            CheckBox1.Checked = CType(Settings("HelloBold"), Boolean)
        End If
    Catch exc As Exception
        ProcessModuleLoadException(Me, exc)
    End Try
End Sub
用下面的代码代替UpdateSettings中的代码:
Public Overrides Sub UpdateSettings()
    Try
        Dim objModules As New Entities.Modules.ModuleController
        objModules.UpdateModuleSetting(ModuleId, "HelloBold",
            CheckBox1.Checked.ToString)
    Catch exc As Exception
        ProcessModuleLoadException(Me, exc)
    End Try
End Sub
现在你可以重新编译项目,测试一下看是否工作正常。增加几条信息并改变模块设置中的粗体选项,看看模块是如何工作的。

一切ok!你现在在DotNetNuke 3.X中已经拥有了一个很好的HelloWorld模块。



九.打包(Packaging)
        如果你打算分发该模块,你应当把所有必需的文件打包到一个zip文件中,并创建一个配置文件(其扩展名为 .dnn)。之后你就可以在任何站点使用DotNetNuke的自动处理来安装该模块。
        如果你遵从先前的指导的话,压根儿你就不需要修改HelloWorld.dnn文件(你可以在VS.NET中你的项目的Install文件夹下找到该文件)。为了确信该文件的正确性,检查其中列出的文件并查看它们是否和你创建的文件相同。
除了zip文件自身,对于zip压缩文件中的每个文件,确信HelloWorld.dnn包含一节:       
<file>
                  <name>……</name>
</file>
在App_LocalResources文件夹下的文件应该象下面这样列出:
<file>
        <path>App_LocalResources </path>
        <name>……</name>
</file>
Zip文件中应当包含如下文件:
HelloWorld.ascx
HelloWorldEdit.ascx
Settings.ascx
VMasanas.DNN.Modules.HelloWorld.dll (dll for the module project)
VMasanas.DNN.Modules.HelloWorld.SqlDataProvider.dll (dll for the dataprovider)
HelloWorld.dnn (install file)
icon_HelloWorld_32px.gif
module.css
HelloWorld.ascx.res (from the App_LocalResources folder)
HelloWorldEdit.ascx.res (from the App_LocalResources folder)
Settings.ascx.res (from the App_LocalResources folder)
还应该包含2个文件:
01.00.00.SqlDataProvider。该文件包含第四步(数据库DataBase)中产生的代码。还记得我们把那些代码保存到一个文件中吗?把这些生成的代码复制到该文件中并把它包含在zip压缩文件中。名称的第一部分应当和dnn文件(<version>01.00.00</version>)中的数字相同。该文件会在这个私有程序集(PA)被安装到DotNetNuke中时执行。你也必须添加sql脚本来创建在该指南中我们先前创建的HelloWorld表(你可以使用VS.NET或企业管理器来生成该表的创建脚本)。在生成的脚本中你应当移除所有对你使用的数据库的引用-数据库拥有者,并用{databaseOwner}替代。同样的,如果你对你所有的DotNetNuke对象(在web.config中所指定)使用了一个对象限定符,你应当把所有的引用用{objectQualifier}来替代。
uninstall.SqlDataProvider。你应当把当模块卸载时清理数据库所需要的代码放到这里。在我们的用例中,它应当包含用于存储过程和HelloWorld表的drop语句。
你会在HelloWorldSqlDataProvider文件夹中找到上述的两个文件。
这是一个在任何给定的DotNetNuke安装中用来创建HelloWorld表的正确的脚本:
if exists (select * from dbo.sysobjects where id = object_id(
N'{databaseOwner}{objectQualifier}VMasanas_HelloWorld') and
OBJECTPROPERTY(id, N'IsUserTable') = 1)
{databaseOwner}{objectQualifier}VMasanas_HelloWorld
GO

if not exists (select * from dbo.sysobjects where id = object_id(
N'{databaseOwner}{objectQualifier}VMasanas_HelloWorld') and
OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
CREATE TABLE {databaseOwner}{objectQualifier}VMasanas_HelloWorld (
[itemID] [int] IDENTITY (1, 1) NOT NULL ,
[moduleID] [int] NOT NULL ,
[message] [nvarchar] (50) NOT NULL
) ON [PRIMARY]
END

GO
ALTER TABLE {databaseOwner}{objectQualifier}VMasanas_HelloWorld
WITH NOCHECK ADD
CONSTRAINT [PK_VMasanas_HelloWorld] PRIMARY KEY  CLUSTERED
(
  [itemID]
)  ON [PRIMARY]
GO

ALTER TABLE {databaseOwner}{objectQualifier}VMasanas_HelloWorld ADD
CONSTRAINT [FK_VMasanas_HelloWorld_Modules] FOREIGN KEY
(
  [moduleID]
) REFERENCES {databaseOwner}{objectQualifier}Modules (
  [ModuleID]
) ON DELETE CASCADE
GO

你需要用一个干净的,没有安装HelloWorld的DotNetNuke站点来测试私有程序集安装包。

来源:中国DNN
作者:jerry051