Это первая публикация со 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))
По поводу 7-го скрипта.
ОтветитьУдалитьПериодически приходится делать отчёт об активности пользователей в системе, по принципу: кто, когда и какую карточку открывал. Сейчас я делаю это выгружая лог навигатора и обрабатывая полученный xml-файл.
С помощью скрипта sql нужный отчёт можно получить значительно быстрее и проще.
Спасибо за идею!
Только не знаю, какой код для операции открытия карточки? Интересно также понять общий принцип: какой операции соответствует код Operation?
Код операции открытия карточки = 40.
ОтветитьУдалитьПриведу наиболее полезные коды операций.
Вход = 1
Выход = 2
Создание карточки = 3
Удаление карточки в корзину = 4
Установка признака прочтения = 5
Удаление карточки = 6
Копирование карточки = 7
Создание строки = 8
Обновление строки = 9
Удаление строки = 10
Архивирование карточки = 32
Извлечение с архива = 33
Самостоятельно узнать код операции можно следующам образом.
1. Выполните операцию
2. Откройте журнал Навигатора.
3. Выполните поиск операции по названию.
4. Затем выполните запрос к таблице dvsys_log в котором ищите строчку по дате операции (которую можно выяснить из журнала Навигатора), и по имени компьютера - чтобы сузить варианты.
Спасибо за информацию и сэкономленное время, а то бы действительно пришлось искать таким не самым быстрым способом.
ОтветитьУдалитьКод операции можно посмотреть в библиотеки 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;