2010-01-19 3 views
6

DNN에서 사용자 정의 모듈을 만들었고 패키지를 만들고 다른 DNN 응용 프로그램과 통합되었습니다. 다른 DNN 응용 프로그램에 모듈을 업로드 한 후 모듈 데이터베이스를 수동으로 생성합니다. 내 문제는 무엇입니까?DNN 사용자 정의 모듈 개발 패키지에 데이터베이스 스크립트를 추가하는 방법은 무엇입니까?

최종 사용자가 내 모듈을 업로드 할 때 모듈 데이터베이스가 자동으로 만들어 져야한다는 데이터베이스 script.so와 함께 모듈 패키지를 만들고 싶습니다.

간단히 말해서 시판되는 상용 모듈처럼 클릭 솔루션이 필요합니다. 어떤 해결책을 제안하십시오.

답변

24

DotNetNuke의 개발에 오신 것을 환영합니다. 공식 웹 사이트에서는 아무 것도 제공하지 않으며 모든 것은 실험, 블로그, 포럼 및 사이트에서 귀하에게 무언가를 판매하려고 시도하는 것으로부터 배웁니다.

DNN 루트 폴더로 이동하여 /Install/Module/UsersOnline_05.01.00_Install.resources 파일을 여는 것이 좋습니다. .resources로 이름이 변경된 zip 아카이브 일뿐입니다. 그 보관소 안에는 패키지 된 "사용자 온라인"모듈이 있는데 그것은 내가 걷게 될 예제입니다. 모듈 설치, DNN 동안

...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의 XML 패키지는 모듈 생성하는 경우

, 당신은 DNN 설치하는 동안 SQL 스크립트를 실행하도록 알려 새로운 <component> 항목을 추가 할 필요가 여기에 입력 된 스크립트가 버전 번호 순서대로 실행됩니다. 현재 모듈이 다음 설치된 적이없는 설치되는 경우이 순서대로 갈 것 :

  1. 04.09.04
  2. 05.01.00

모듈이 이미 설치 및 업그레이드되는 경우 (04.09.04부터), 이전 버전의 스크립트 (이미 실행되었다고 가정 함)를 건너 뛰고 최신 05.01.00 스크립트를 실행하면 모든 것을 최신으로 유지해야합니다. 내장 된 업그레이드 메커니즘을 지원하는 SQL 스크립트를 작성하는 것은 귀하의 책임입니다.

사용자가 모듈을 설치 해제 할 때 실행되는 "설치 해제"스크립트도 있습니다. 이렇게하면 모듈을 정리할 수 있습니다.

/************************************************************/ 
/*****    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 {의 사용 :

각 SQL 스크립트는 모듈의 스키마를 만드는 데 필요한 T-SQL 명령, 기본 데이터, 저장 프로 시저 등이 여기에 OnlineUsers 모듈의 스크립트의 스 니펫의를 포함 } 및 {objectQualifier}를 데이터베이스에 생성되는 각 테이블 또는 프로 시저 앞에 추가하십시오. 이러한 토큰은 런타임에 설치의 web.config 파일의 설정으로 대체됩니다. 당신은 일반적으로 이들이 "dbo"로 대체 될 것이라고 가정 할 수 있습니다. 모듈을 판매하거나 제 3 자에게 설치를 제공하는 경우 맞춤 소유자 및 한정자를 지원해야합니다.

는 여기에 몇 가지 추가 자료입니다

+10

+1 첫 번째 단락 –

관련 문제