Добро пожаловать в разработку для DotNetNuke, где на официальном веб-сайте нет документации и все изучено на экспериментах, блогах, форумах и сайтах, пытающихся что-то вам продать.
Я предлагаю перейти в корневую папку DNN и открытьвверх /Install/Module/UsersOnline_05.01.00_Install.resources файл.Это просто zip-архив, переименованный в .resources.Внутри этого архива находится упакованный модуль «Пользователи в сети», и я собираюсь пройти этот пример.
Если у вас уже есть пакет .DNN xml для вашего модуля, вам нужно добавить новый *Запись 1005 *, чтобы сообщить 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
Еслимодуль уже установлен и обновляется (с 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».но если вы продаете свой модуль или предоставляете его третьим сторонам для установки, вам потребуется поддержка пользовательских владельцев и квалификаторов.
Вот некоторые дополнительные ресурсы: