- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 DNN 上制作了一个自定义模块,创建了它的包并与另一个 DNN 应用程序集成。它工作正常。但是在另一个 DNN 应用程序中上传模块后,我正在手动创建模块数据库。这就是我的问题..
我想用它的数据库脚本创建一个模块包。这样当最终用户上传我的模块时,模块数据库应该自动创建。
简单来说,我需要一键式解决方案,就像市场上可用的商业模块一样。请提出任何解决方案。
最佳答案
欢迎使用 DotNetNuke 开发,官方网站提供零文档,一切都是从实验、博客、论坛和试图向您推销东西的网站中学到的。
我建议转到您的 DNN 根文件夹并打开/Install/Module/UsersOnline_05.01.00_Install.resources 文件。它只是一个重命名为 .resources 的 zip 存档。在该存档中是打包的“在线用户”模块,这就是我要介绍的示例。
如果您已经为您的模块创建了 .DNN xml 包,则需要添加一个新的 <component>
让 DNN 知道在安装期间执行您的 SQL 脚本的条目:
...snip...
<components>
<component type="Script">
<scripts>
<basePath>DesktopModules\UsersOnline</basePath>
<script type="Install">
<path>Providers\DataProviders\SqlDataProvider</path>
<name>04.09.04.SqlDataProvider</name>
<version>04.09.04</version>
</script>
<script type="Install">
<path>Providers\DataProviders\SqlDataProvider</path>
<name>05.01.00.SqlDataProvider</name>
<version>05.01.00</version>
</script>
<script type="UnInstall">
<path>Providers\DataProviders\SqlDataProvider</path>
<name>Uninstall.SqlDataProvider</name>
<version>05.01.00</version>
</script>
</scripts>
</component>
...snip...
在模块安装过程中,DNN 将按照版本号的顺序执行此处输入的脚本。如果当前正在安装的模块从未安装过,那么它将按以下顺序安装:
如果模块已经安装并且正在升级(从 04.09.04 开始),它会跳过以前版本的脚本(假设它们已经被执行)并且只运行较新的 05.01.00 脚本,这应该会启动所有内容迄今为止。您有责任创建 SQL 脚本以支持内置升级机制。
还有一个“UnInstall”脚本,在用户卸载模块时执行。这使您可以在模块之后进行清理。
每个 SQL 脚本都包含创建模块架构、默认数据、存储过程等所需的 T-SQL 命令。以下是 OnlineUsers 模块脚本的片段:
/************************************************************/
/***** SqlDataProvider *****/
/***** *****/
/***** *****/
/***** Note: To manually execute this script you must *****/
/***** perform a search and replace operation *****/
/***** for {databaseOwner} and {objectQualifier} *****/
/***** *****/
/************************************************************/
if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}DNNUOL_GetOnlineUsers]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE {databaseOwner}{objectQualifier}DNNUOL_GetOnlineUsers
GO
CREATE PROCEDURE {databaseOwner}{objectQualifier}DNNUOL_GetOnlineUsers
@PortalID int,
@IncludeHosts bit
AS
IF @IncludeHosts = 0
BEGIN
SELECT
UO.UserID,
U.UserName,
U.DisplayName,
U.FirstName,
U.LastName,
U.FirstName + ' ' + U.LastName AS FullName
FROM
{databaseOwner}{objectQualifier}UsersOnline UO INNER JOIN {databaseOwner}{objectQualifier}Users U ON UO.UserID = U.UserID INNER JOIN {databaseOwner}{objectQualifier}UserPortals UP ON U.UserID = UP.UserID
WHERE
UO.PortalID = @PortalID AND UO.UserID = U.UserID AND UP.Authorised = 1 AND U.IsSuperUser = 0 -- Inner Join takes care of SU = 0, but for sanity.
END
ELSE
BEGIN
SELECT DISTINCT
UO.UserID,
U.UserName,
U.DisplayName,
U.FirstName,
U.LastName,
U.FirstName + ' ' + U.LastName AS FullName
FROM
{databaseOwner}{objectQualifier}UsersOnline UO INNER JOIN {databaseOwner}{objectQualifier}Users U ON UO.UserID = U.UserID, {databaseOwner}{objectQualifier}UserPortals UP
WHERE
UO.PortalID = @PortalID AND UO.UserID = U.UserID AND UP.Authorised = 1
END
GO
/************************************************************/
/***** SqlDataProvider *****/
/************************************************************/
请注意在数据库中创建的每个表或过程前面使用 {databaseOwner} 和 {objectQualifier}。这些是标记,在运行时被安装的 web.config 文件中的设置替换。您通常可以假设这些将被替换为“dbo”。但如果您要出售模块或将其提供给第三方进行安装,则需要支持自定义所有者和限定符。
这里有一些额外的资源:
关于c# - 如何在DNN自定义模块开发包中添加数据库脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2095318/
我的第一个 DNN 站点。请放轻松。 我正在尝试加载一些扩展(博客和 PayPal 扩展)。 虽然管理控制台显示它们已安装,但我看不到它们或无法启动它们。它们在任何菜单上都不明显。 主题创作者说这不是
我对神经网络还很陌生,这就是我决定使用 Tflearn 的原因,因为它非常直观。但是我找不到我的问题的答案。 tflearn 文档提供了以下示例,用于让深度神经网络预测某些内容: network =
我尝试在暗网上运行 Openpose 并使用从这里下载的权重和配置文件:https://github.com/lincolnhard/openpose-darknet 这是我尝试在 Opencv 中创
屏幕截图:getBlob 返回的错误结果: 这里是附加代码: resize(img, img, Size(224, 224)); dnn::Blob inputBlob = dnn::Blob::fr
我正在尝试使用 publisher-subcriber no 通过从我的网络摄像头流式传输图像来运行我的对象识别程序。在我的程序中,我使用的是 opencv_dnn 库提供的 readNetFromT
我对 DNN 中的本地化过程了解不多。问题是如何本地化新模块? 是否可以分别在每个模块中包含本地化文件?你能想出什么解决方案? 最佳答案 多亏了 DotNetNuke,模块的本地化非常容易。 无论您的
我正在尝试通过创建数据库的副本并将 .net 文件复制到新文件夹中来复制用于测试目的的现有 DNN 门户。 在我复制站点并将 webconfig 更改为指向新站点并更改数据库中的别名后,我收到此错误。
DNN 6.0 有没有办法自动重新索引搜索结果。因为除非我们点击主机->搜索管理->重新索引内容,否则最近上传的一些内容在手动重新索引之前不会出现在搜索结果中。我想知道是否有一种方法可以自动化这个过程
我希望我的 DNN 网站的“内容管理器”仅编辑特定 HTML 模块实例的内容,而不是其设置。我如何实现这一目标?如果我允许此角色“编辑”模块,他们也可以访问和更改模块设置。 提前感谢您的投入。 最佳答
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在 DotNetNuke(DNN) 博客模块中,如何更改博客文章的顺序?默认情况下,最新的博客条目将始终显示在顶部。如何更改博客条目的顺序? 最佳答案 这需要您下载博客模块的源代码并自行添加此功能。它
我正在处理 DNN 皮肤,我需要在底部位置设置背景图像。 我试过在 skin.css 中设置背景位置并使用管理面板中的自定义样式表工具。但是在检查这个 css 时FireFox 或 Safari 中的
我一直在尝试使用 DNN(我已经使用了两周)向网站添加 JavaScript。我目前使用的版本是 07.04.00 (353)。我尝试将脚本粘贴到“页面设置”->“高级设置”中的标题和“模块设置”->
我想知道 dnn 模块的内存布局,以便我可以将权重移植到另一个库。 我可以按如下方式访问权重和偏差 cv::Mat weight = input_net.getParam(input_layer_na
我正在开发一个模块,当当前用户登录我们的网站或在我们的网站上注册一个新帐户时,它会自动在姊妹网站上创建一个新用户。注册新帐户后,我已经可以使用该模块。现在我需要找到一种在用户登录时触发它的方法。非常感
在 DNN 中,如何获取页面 ID、门户语言等门户设置作为 javascript 的变量?我试过这样的事情: 和 var pageTitle = dnn.getVar('pageTitle'); 但
我真的对这个问题感到沮丧,我正在尝试在 Windows Server 2008 中安装 DNN 7,我按照 DNN 站点中的步骤进行安装,但是当我运行安装程序向导时出现连接错误,我授予用户权限在文件夹
我在我的 DNN 模块中添加了一项检查,以排除某些用户在登录时不必回答某些问题。我不想对每个单独的角色进行硬编码,而只是排除特定角色组中的任何人。这样,如果我们将来有更多角色,如果我们希望将它们排除在
我使用从皮肤文件(皮肤对象)复制的代码创建了一个 DotNetNuke 模块。 我试图把它变成一个模块,这样我就可以把它放在任何页面上,并以我喜欢的任何方式移动和操纵它。 我已经设法让模块工作,但只是
我正尝试在我制作的 DNN 模块中发送电子邮件。但是,尽管它不会崩溃,但不会发送电子邮件。我认为这与我尝试使用的发件人电子邮件有关。我不是 100% 确定我应该为第一个参数使用哪个电子邮件。 Prot
我是一名优秀的程序员,十分优秀!