Как добавить сценарий базы данных в пользовательском пакете разработки модулей DNN?

я сделал пользовательский модуль на DNN, создали его пакет и интегрированный с другим приложением DNN. Это хорошо работает. Но после загрузки модуля в другом приложении DNN я создаю базу данных модуля manually.thats что моя проблема..

Я хочу создать пакет модуля с его базой данных script.so, что, когда конечный пользователь загружают мой модуль, база данных модуля должна создать автоматически.

В простых словах мне нужно одно решение для щелчка точно так же, как коммерческие модули, avilable на рынке. предложите любое решение.

6
задан ThinkingStiff 8 March 2013 в 19:21
поделиться

1 ответ

Добро пожаловать к разработке для разработки для Dotnetnuke, где официальный сайт предоставляет нулевую документацию, и все извлечено из экспериментов, блогов, форумов и сайтов, пытающихся вам что-то продать.

Я предлагаю перейти к вашей корневой папке DNN и открывающую файл /install/module/usersonline_05.01.00_Install.resources. Это просто архив Zip, переименованный в .resources. Внутри этого архив является упакованным модулем «пользователей онлайн», и это пример, который я собираюсь пройтись.

Если у вас уже есть свой пакет .dnn XML, созданный для вашего модуля, необходимо добавить новую <компонент> , чтобы 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 выполнит сценарии, введенные здесь, в порядке их номера версии. Если текущий модуль устанавливается, не был установлен, то он будет идти в этом порядке:

  1. 04.09.04
  2. 05.01.00

Если модуль уже установлен и обновляется (от 04.09.04), Он пропустил бы скрипты предыдущих версий (предполагая, что они уже были выполнены) и просто запустите новый сценарий 05.01.00, который должен принести все в курсе. Ваша обязанность создать ваши сценарии SQL для поддержки встроенного механизма обновления.

Существует также сценарий «удаления», который выполняется, когда пользователь не устанавливает модуль. Это позволяет убирать после вашего модуля.

Каждый SQL-скрипт содержит команды T-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                     *****/
/************************************************************/

Примечание. Использование {matabase wonler} и {objectQualifier} Перед каждой таблицей или процедурой создается в базе данных. Это токены и заменены во время выполнения с настройками из файла Web.config установки. Как правило, вы можете предположить, что они будут заменены на «DBO». Но если вы продаете свой модуль или предоставляете его третьим сторонам для установки, вам нужно будет поддерживать пользовательские владельцы и квалификаторы.

Вот некоторые дополнительные ресурсы:

26
ответ дан 8 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: