2010-01-19 19 views
6

tôi đã tạo mô-đun tùy chỉnh trên DNN, tạo gói và tích hợp với ứng dụng DNN khác.Nó hoạt động tốt.Nhưng sau khi tải lên mô-đun trong ứng dụng DNN khác, tôi đang tạo cơ sở dữ liệu mô-đun theo cách thủ công.những gì vấn đề của tôi ..Làm thế nào để thêm tập lệnh cơ sở dữ liệu trong gói phát triển mô-đun tùy chỉnh DNN?

Tôi muốn tạo một gói mô-đun với tập lệnh cơ sở dữ liệu của nó.so khi người dùng cuối tải lên mô-đun của tôi, cơ sở dữ liệu mô-đun sẽ tự động tạo.

Nói cách đơn giản, tôi cần một giải pháp nhấp chuột giống như mô-đun thương mại có thể sử dụng được trên thị trường. xin vui lòng đề nghị bất kỳ giải pháp.

Trả lời

24

Chào mừng bạn đến với DotNetNuke, nơi trang web chính thức cung cấp tài liệu và tất cả mọi thứ được học từ thử nghiệm, blog, diễn đàn và trang web cố bán cho bạn thứ gì đó.

Tôi khuyên bạn nên chuyển đến thư mục gốc DNN và mở tệp /Install/Module/UsersOnline_05.01.00_Install.resources. Nó chỉ là một kho lưu trữ zip được đổi tên thành .resources. Bên trong kho lưu trữ đó là mô-đun "Người dùng trực tuyến" được đóng gói và đó là ví dụ tôi sẽ đi qua.

Nếu bạn đã có gói xml .DNN đã tạo cho mô-đun của bạn, bạn cần phải thêm một <component> mục mới để cho DNN biết để thực hiện các kịch bản SQL của bạn trong khi cài đặt:

...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... 

Trong khi cài đặt mô-đun, DNN sẽ thực thi các tập lệnh được nhập ở đây theo thứ tự số phiên bản của chúng. Nếu các mô-đun hiện đang được cài đặt chưa bao giờ được cài đặt sau đó nó sẽ đi theo thứ tự này:

  1. 04.09.04
  2. 05.01.00

Nếu các mô-đun đã được cài đặt và đang được nâng cấp (từ 04.09.04), nó sẽ bỏ qua các kịch bản của các phiên bản trước (giả sử chúng đã được thực thi) và chỉ chạy kịch bản 05.01.00 mới hơn, điều này sẽ làm cho mọi thứ được cập nhật. Bạn có trách nhiệm tạo các tập lệnh SQL của mình để hỗ trợ cơ chế nâng cấp được cài sẵn.

Cũng có một tập lệnh "UnInstall" được thực hiện khi người dùng bỏ cài đặt mô-đun. Điều này cho phép bạn dọn dẹp sau khi mô-đun của bạn.

Mỗi kịch bản SQL chứa các lệnh T-SQL cần thiết để tạo schema của mô-đun của bạn, dữ liệu mặc định, các thủ tục lưu trữ, vv Đây là một đoạn kịch bản OnlineUsers mô-đun của:

/************************************************************/ 
/*****    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      *****/ 
/************************************************************/ 

Lưu ý việc sử dụng {databaseOwner } và {objectQualifier} ở phía trước mỗi bảng hoặc thủ tục được tạo trong cơ sở dữ liệu. Đây là các thẻ và được thay thế tại thời gian chạy với các cài đặt từ tệp web.config của cài đặt. Bạn thường có thể giả định rằng chúng sẽ được thay thế bằng "dbo". nhưng nếu bạn đang bán mô-đun của bạn hoặc cung cấp cho các bên thứ ba để cài đặt, bạn sẽ cần phải hỗ trợ chủ sở hữu tùy chỉnh và vòng loại.

Dưới đây là một số nguồn lực bổ sung:

+10

+1 cho đoạn đầu tiên –