我在DNN上創建了一個自定義模塊,創建了它的軟件包並與另一個DNN應用程序集成在一起。它工作正常。但是在將模塊上傳到另一個DNN應用程序後,我正在手動創建模塊數據庫。這就是我的問題所在。如何在DNN自定義模塊開發包中添加數據庫腳本?
我想用它的數據庫腳本創建一個模塊包,當最終用戶上傳我的模塊時,模塊數據庫應該自動創建。
簡而言之,我需要一個點擊解決方案就像商業模塊avilable在市場上。請提出任何解決方案。
我在DNN上創建了一個自定義模塊,創建了它的軟件包並與另一個DNN應用程序集成在一起。它工作正常。但是在將模塊上傳到另一個DNN應用程序後,我正在手動創建模塊數據庫。這就是我的問題所在。如何在DNN自定義模塊開發包中添加數據庫腳本?
我想用它的數據庫腳本創建一個模塊包,當最終用戶上傳我的模塊時,模塊數據庫應該自動創建。
簡而言之,我需要一個點擊解決方案就像商業模塊avilable在市場上。請提出任何解決方案。
歡迎開發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」。但如果您銷售您的模塊或將其提供給第三方進行安裝,則需要支持自定義所有者和限定符。
這裏有一些額外的資源:
+1第一段 – 2010-11-14 22:56:57