суббота, 28 февраля 2009 г.

Десять SQL скриптов для DocsVision

Это первая публикация со T-SQL скриптами для решения различных задач в DocsVision.
Скрипты подходят для версий 4.0 и 4.1

1. Перевод всех поисковых запросов на виртуальной папке в режим таблицы

Фактически производится удаление всей разметки - положения элементов управления на форме запроса.

DECLARE @Query as varchar (1024)
-- Задайте имя поискового запроса
SET @Query='test'

DELETE FROM dbo.[dvtable_{DC8A71DC-D2BB-4875-8B9F-0BBFF04383F7}]
WHERE ParentRowID=
(

SELECT TOP (1) RowID FROM dbo.[dvtable_{FB2AC41F-1911-4F7C-B631-18CFAEB311BD}]
WHERE [Name]=@Query

)


2. Очистка журнала экземпляра бизнес-процесса

DECLARE @ProcessID uniqueidentifier
SET @ProcessID='' -- здесь нужно указать идентификатор карточки экземпляра бизнес-процесса без скобок {}
DELETE FROM dbo.[dvtable_{388F390F-139E-498E-A461-A24FBA160487}]
WHERE InstanceID=@ProcessID


3. Включение отображения диалога о несовпадении версий в Навигаторе.

Начиная с версии 4.0 показ диалога о несовпадении версий библиотек можно отключить, установив опцию в окне. Чтобы включить отображение этого сообщения нужно выполнить приложенный скрипт (подходит и для 4.1)

В поле @AccountName указывается учетная запись пользователя DOMAIN\Name

DECLARE @AccountName AS varchar(256)
SET @AccountName='учетная запись пользователя'

DELETE ProfileSettings FROM [dbo].[dvtable_{EBAF1DE7-AB00-44D4-82AC-2CF3C16C93DC}] AS ProfileSettings
JOIN dvsys_users AS Users ON Users.UserRefID=ProfileSettings.InstanceID
WHERE ObjectID='FB028B36-5F93-4923-9580-15F5E1021831'
AND Users.AccountName=@AccountName


4. Запуск всех бизнес-процессов, которые приостановлены по ошибке

UPDATE dbo.[dvtable_{97CC73BA-1953-4A70-8460-415BD4BCAAAE}]
SET State=2
WHERE State = 5
UPDATE dbo.[dvtable_{0EF6BCCA-7A09-4027-A3A2-D2EEECA1BF4D}]
SET State=1, ReadyToRun='true'
WHERE State = 3


5. Запуск всех бизнес-процессов, которые приостановлены (нажата кнопка "пауза")

UPDATE dbo.[dvtable_{0EF6BCCA-7A09-4027-A3A2-D2EEECA1BF4D}]
SET State=1, ReadyToRun='true'
WHERE State = 2


6. Назначить всем объектам в системе прав Everyone - FullAccess

UPDATE dvsys_security SET SecurityDesc='AQAEjDAAAABAAAAAAAAAABQAAAACABwAAQAAAAADFAAfAA8QAQEAAAAAAAEAAAAAAQIAAAAAAAUgAAAAIAIAAAEBAAAAAAAFEgAAAA=='


7. Поиск в журнале Навигатора операций создания карточки

За временной период:

DECLARE @StartDate AS datetime
DECLARE @EndDate AS datetime

-- Задание временных рамок поиска
SET @StartDate = '20080703 00:00:00'
SET @EndDate = '20090116 23:59:59'

SELECT AccountName,Date,ComputerName, InstanceID,Description FROM dvsys_log AS L
INNER JOIN dvsys_users as U
ON L.UserID=U.UserID
INNER JOIN dvsys_instances AS I
ON L.ResourceID=I.InstanceID
WHERE Operation=3
AND Date>@StartDate AND Date<@EndDate


По идентификатору:

DECLARE @CardID AS uniqueidentifier

SET @CardID = 'FF841489-E3DC-4E5C-96A8-01B1609EBC47' --идентификатор карточки

SELECT AccountName,Date,ComputerName, InstanceID,Description FROM dvsys_log AS L
INNER JOIN dvsys_users as U
ON L.UserID=U.UserID
INNER JOIN dvsys_instances AS I
ON L.ResourceID=I.InstanceID
WHERE Operation=3
AND ResourceID=@CardID


8. Получение идентификатора сильного ярлыка карточки.

DECLARE @CardID uniqueidentifier
SET @CardID='19C91B93-A195-41AD-B4C1-831DCB191A02' -- идентификатор карточки

SELECT RowID FROM [dbo].[dvtable_{EB1D77DD-45BD-4A5E-82A7-A0E3B1EB1D74}]
WHERE HardCardID=@CardID


9. Получение списка папок на которых стоят ограничения на создание определенных типов карточек.

SELECT Folders.RowID,Folders.[Name]
FROM dbo.[dvtable_{5B7091C7-18DA-4E82-9C62-883F5237EED2}] AS Types
LEFT JOIN dbo.[dvtable_{FE27631D-EEEA-4E2E-A04C-D4351282FB55}] AS Folders
ON Types.ParentRowID=Folders.RowID


10. Снимаем блокировки от пользователей, сессий которых больше нет

-- Удаляем старые сессии
DECLARE @RC int
EXECUTE @RC = [dbo].[dvsys_session_clear_old]

-- Снимаем блокировки с объектов, сессий которых уже не существует
DELETE FROM dvsys_locks
WHERE (LockOwnerID NOT IN (SELECT UserID FROM dvsys_sessions))


Если нужно снять блокировки только с файлов, то запрос должен быть таким. Внимание, пользователи могут выгружать файлы (CheckOut) в работу. Автоматически снимать блокировки с файлов не совсем корректно.

DELETE FROM dvsys_locks
WHERE (ResourceType=2 AND LockOwnerID NOT IN (SELECT UserID FROM dvsys_sessions))

4 комментария:

  1. По поводу 7-го скрипта.
    Периодически приходится делать отчёт об активности пользователей в системе, по принципу: кто, когда и какую карточку открывал. Сейчас я делаю это выгружая лог навигатора и обрабатывая полученный xml-файл.
    С помощью скрипта sql нужный отчёт можно получить значительно быстрее и проще.
    Спасибо за идею!
    Только не знаю, какой код для операции открытия карточки? Интересно также понять общий принцип: какой операции соответствует код Operation?

    ОтветитьУдалить
  2. Код операции открытия карточки = 40.

    Приведу наиболее полезные коды операций.
    Вход = 1
    Выход = 2
    Создание карточки = 3
    Удаление карточки в корзину = 4
    Установка признака прочтения = 5
    Удаление карточки = 6
    Копирование карточки = 7
    Создание строки = 8
    Обновление строки = 9
    Удаление строки = 10
    Архивирование карточки = 32
    Извлечение с архива = 33


    Самостоятельно узнать код операции можно следующам образом.
    1. Выполните операцию
    2. Откройте журнал Навигатора.
    3. Выполните поиск операции по названию.
    4. Затем выполните запрос к таблице dvsys_log в котором ищите строчку по дате операции (которую можно выяснить из журнала Навигатора), и по имени компьютера - чтобы сузить варианты.

    ОтветитьУдалить
  3. Спасибо за информацию и сэкономленное время, а то бы действительно пришлось искать таким не самым быстрым способом.

    ОтветитьУдалить
  4. Код операции можно посмотреть в библиотеки ObjectManager (используя OLE View или возможности студии).

    // Операции системного журнала
    typedef [v1_enum] enum EventOperationEnum
    {
    EVENT_OPERATION_NONE = 0,
    EVENT_OPERATION_LOGIN = 1,
    EVENT_OPERATION_LOGOUT = 2,
    EVENT_OPERATION_CREATE_CARD = 3,
    EVENT_OPERATION_MARK_CARD_AS_DELETED = 4,
    EVENT_OPERATION_MARK_CARD_AS_READ = 5,
    EVENT_OPERATION_DELETE_CARD = 6,
    EVENT_OPERATION_COPY_CARD = 7,
    EVENT_OPERATION_ADD_ROW = 8,
    EVENT_OPERATION_UPDATE_ROW = 9,
    EVENT_OPERATION_DELETE_ROW = 10,
    EVENT_OPERATION_MOVE_ROW = 11,
    EVENT_OPERATION_COPY_ROW = 12,
    EVENT_OPERATION_ROW_RIGHTS_CHANGED = 13,
    EVENT_OPERATION_CREATE_FILE = 14,
    EVENT_OPERATION_OPEN_FILE = 15,
    EVENT_OPERATION_WRITE_FILE = 16,
    EVENT_OPERATION_CLOSE_FILE = 17,
    EVENT_OPERATION_DELETE_FILE = 18,
    EVENT_OPERATION_SECTION_RIGHTS_CHANGED = 19,
    EVENT_OPERATION_CARD_RIGHTS_CHANGED = 20,
    EVENT_OPERATION_FILE_RIGHTS_CHANGED = 21,
    EVENT_OPERATION_OBJECT_RIGHTS_CHANGED = 22,
    EVENT_OPERATION_REPORT_RIGHTS_CHANGED = 23,
    EVENT_OPERATION_COPY_FILE = 24,
    EVENT_OPERATION_REPLACE_FILE = 25,
    EVENT_OPERATION_TYPE_RIGHTS_CHANGED = 26,
    EVENT_OPERATION_ADD_TO_TOPIC_CHAIN = 27,
    EVENT_OPERATION_TAKE_FILE_OFFLINE = 28,
    EVENT_OPERATION_BRING_FILE_ONLINE = 29,
    EVENT_OPERATION_ARCHIVE_FILE = 30,
    EVENT_OPERATION_DEARCHIVE_FILE = 31,
    EVENT_OPERATION_ARCHIVE_CARD = 32,
    EVENT_OPERATION_DEARCHIVE_CARD = 33,
    EVENT_OPERATION_NUMERATOR_CHANGE_LEFT_BOUND = 34,
    EVENT_OPERATION_NUMERATOR_CHANGE_RIGHT_BOUND = 35,
    EVENT_OPERATION_NUMERATOR_ALLOCATE_NUMBER = 36,
    EVENT_OPERATION_NUMERATOR_ALLOCATE_NUMBERS = 37,
    EVENT_OPERATION_NUMERATOR_RELEASE_NUMBER = 38,
    EVENT_OPERATION_NUMERATOR_RELEASE_NUMBERS = 39,
    EVENT_OPERATION_OPEN_CARD = 40,
    EVENT_OPERATION_EXPORT_CARD = 41,
    EVENT_OPERATION_CREATE_SHORTCUT = 42,
    EVENT_OPERATION_DELETE_SHORTCUT = 43,
    EVENT_OPERATION_MOVE_SHORTCUT = 44,
    EVENT_OPERATION_COPY_SHORTCUT = 45,
    EVENT_OPERATION_SESSION_TERMINATE = 46
    } EventOperationEnum;

    ОтветитьУдалить