Поиск
Ярлыки
Работа с правами на объекты через DocsVision API
По ссылке вы можете скачать небольшой пример работы с правами. Проект на VB.NET для Visual Studio 2008.
Скачать пример. Читать дальше
Десять 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)) Читать дальше
Программное выделение полного номера карточки DocsVision
Частой задачей при разработке решения на платформе DocsVision является выделение номера. В данной публикации будет продемонстрировано, как можно выделить полный номер, вместе с префиксами и суффиксами, програмно.
Итак будем делать скрипт для версии DocsVision 4.1. Это будет дополнительная команда Навигатора, которая будет назначена на контекстное меню карточек документов. Т.е. пользовать сможет нажать правой кнопкой мыши на карточку в Навигаторе и назначить полный номер, не открывая карточку.
Скрипт:
Для получения номера используем объект TOHelperObject.NumeratorObject.
Sub DoEvent(UserSession, CardHost, FolderType, FolderID, SelectionIDs)
Dim sDetails, bFlag
bFlag = True
sDetails = "Номера присвоены следующим карточкам: "
' Создаем объект "Нумератор"
Set oNumerator = CreateObject("TOHelperObjects.NumeratorObject")
' Для каждой карточки из коллекции
For Each sID In SelectionIDs
' Получаем карточку
Set oCard = UserSession.CardManager.CardData(sID)
' Получаем основную секцию
Set oMainRow = oCard.Sections(oCard.Type.Sections.GetByAlias("MainInfo").ID).FirstRow
If IsNull(oMainRow.Value("NumberRef")) Then
' Если номера нет
Set oNumerator.CardData = oCard
Set oNumerator.UserSession = UserSession
sNumID = ""
sFullNum = ""
If oNumerator.GetNewNumber(sNumID, sFullNum) Then
oMainRow.Value("FullNumber") = sFullNum
oMainRow.Value("NumberRef") = sNumID
sDetails = sDetails + oMainRow.Value("Name") + ","
Else
CardHost.ShowMessage "Комманда Навигатора", "Не найден нумератор для '" + oMainRow.Value("Name") + "'", , 3
End If
End If
Next
CardHost.ShowMessage "Комманда Навигатора", "Номера выделены успешно", sDetails, 4
Set oNumerator = Nothing
End Sub
Включение журнала DocsVision Workflow из командной строки
В предыдущей публикации я показал, как при помощи скрипта PowerShell можно включать и выключать журнал сервера DocsVision. Здесь я приведу скрипт, который включает и выключает журнал сервиса бизнес-процессов.
Внимание. Скрипты написаны для версии DocsVision 4.1. Для других версий нужно изменить путь к ключу реестра "HKLM:\SOFTWARE\DocsVision\Platform\4.1"
1. Включение журнала Workflow.
Поскольку информация так же вносится в реестр, необходимо определить разрядность системы, для указания правильной ветки. Скрипт приведен для версии DocsVision 4.1. Для использования с другими версиями, измените параметр - путь к ключу "HKLM:\SOFTWARE\Wow6432Node\DocsVision\Workflow\4.1\WorkflowServer".
Function is64
{
$os=Get-WMIObject win32_operatingsystem
if ($os.OSArchitecture -eq "64-bit") {
return $true
}
else {
return $false
}
}
if ($args)
{
$FilePath=$args[0]
if ($args[1] -ne $null) {[int]$TLevel=$args[1]} else {write-host ("Please enter a trace level 1..4");break;}
if ($TLevel -lt 1) {$Tlevel = 1}
if ($TLevel -gt 4) {$Tlevel = 4}
}
else
{
write-host ("Please enter a full log file path")
break
}
if (is64 -eq $true)
{
#64bit
$path="HKLM:\SOFTWARE\Wow6432Node\DocsVision\Workflow\4.1\WorkflowServer"
}
else
{
#32bit
$path="HKLM:\SOFTWARE\DocsVision\Workflow\4.1\WorkflowServer"
}
Set-itemproperty -Path $path -Name "LogFile" -type "String" -value $FilePath
Set-itemproperty -Path $path -Name "TraceLevel" -type "DWord" -value $TLevel
Пример использовования. Например, скрипт сохранен в файл enable-wflog.ps1. При запуске нужно указать два параметра: путь к файлу журнала и уровень журналирования: 1 - информация, 2- предупреждения, 3 - ошибки, 4 - отладочные сообщения.
>enable-wflog "C:\Logs\workflow.log" 4
2. Выключение журнала Workflow
Function is64
{
$os=Get-WMIObject win32_operatingsystem
if ($os.OSArchitecture -eq "64-bit") {
return $true
}
else {
return $false
}
}
if (is64 -eq $true)
{
#64bit
$path="HKLM:\SOFTWARE\Wow6432Node\DocsVision\Workflow\4.1\WorkflowServer"
}
else
{
#32bit
$path="HKLM:\SOFTWARE\DocsVision\Workflow\4.1\WorkflowServer"
}
Set-itemproperty -Path $path -Name "TraceLevel" -type "DWord" -value 0
Пример использования. Например, скрипт сохранен в файл disable-wflog.ps1. При запуске передавать параметры не нужно.
>disable-wflog
Включение журнала сервера из командной строки
Для того, чтобы включить журнал сервера DocsVision, можно воспользоваться консолью настройки. Но мне удобнее это делать из командной строки. Для этих целей были написаны следующие скрипты.
Внимание. Скрипты написаны для версии DocsVision 4.1. Для других версий нужно изменить путь к ключу реестра "HKLM:\SOFTWARE\DocsVision\Platform\4.1\Server"
1. Включение журнала сервера DocsVision (StorageServer)
Function is64
{
$os=Get-WMIObject win32_operatingsystem
if ($os.OSArchitecture -eq "64-bit") {
return $true
}
else {
return $false
}
}
if ($args)
{
$FilePath=$args[0]
}
else
{
write-host ("Please enter a full log file path")
break
}
if (is64 -eq $true)
{
#64bit
$path="HKLM:\SOFTWARE\Wow6432Node\DocsVision\Platform\4.1\Server"
}
else
{
#32bit
$path="HKLM:\SOFTWARE\DocsVision\Platform\4.1\Server"
}
Set-itemproperty -Path $path -Name "LogFile" -type "String" -value $FilePath
Итак, как известно 32 битные приложения работая в 64 битной операционной системе хранят ключи реестра в подветке \Software\Wow6432Node. Поэтому в сценарии реализована ф-ция "Is64", которая проверяет, является ли ОС 64разрядной.
Пример использования скрипта. Например, скрипт сохранен в файл enable-serverlog.ps1.
Для включения журнала запустите скрипт с параметром - путь к файлу журнала.
>enable-serverlog C:\Logs\Server.log
2. Отключение журнала
Function is64
{
$os=Get-WMIObject win32_operatingsystem
if ($os.OSArchitecture -eq "64-bit") {
return $true
}
else {
return $false
}
}
if (is64 -eq $true)
{
#64bit
$path="HKLM:\SOFTWARE\Wow6432Node\DocsVision\Platform\4.1\Server"
}
else
{
#32bit
$path="HKLM:\SOFTWARE\DocsVision\Platform\4.1\Server"
}
Set-itemproperty -Path $path -Name "LogFile" -type "String" -value $null
Пример использования. Например, скрипт сохранен в файл disable-serverlog.ps1.
>disable-serverlog
Скрипт PowerShell для перезапуска сервисов DocsVision
При этом нужно помнить, что если клиенты соединяются по net pipes c Windows сервисом DocsVision Storage Server Service, то останавливать его нужно в последнюю очередь.
Для упрощения задачи можно использовать скрипты на PowerShell для автоматизации процесса.
Скрипты приведены для версии DocsVision 4.1. Для других версий нужно указать другие имена сервисов в массиве $Services
Скачать готовые скрипты
1. Перезапуск сервисов DocsVision и службы IIS
Function SmartStop ([string]$Name, [bool]$RO)
{
$Service = Get-Service -Name $Name
If ($RO -eq $true)
{
If ($Service.Status -eq "Running")
{
write-host ("Stopping:" + $Name)
Stop-Service -Name $Name -force
return $Name
break
}
} else {
write-host ("Stopping:" + $Name)
Stop-Service -Name $Name
return $Name
}
}
$ErrorActionPreference="SilentlyContinue"
$Services=("WFServer41","WWFServer41","DVReportServer41","DVStorageServer41")
$Stopped=@()
$RunningOnly=$false
if ($args)
{
if ($args[0] -eq "-ro")
{
$RunningOnly=$true
write-host ("Restarting only running services")
}
}
foreach ($ServName in $Services) {
[string]$a=SmartStop $ServName $RunningOnly
$Stopped=$Stopped+$a
}
Stop-Process "ExecLogic.exe"
write-host ("IIS restarting")
IISRESET /RESTART
$i=0
while ($Stopped[$i] -ne $null)
{
if ($Stopped[$i] -ne "")
{
write-host ("Starting:" + $Stopped[$i])
Start-Service -Name $Stopped[$i]
}
$i+=1
}
Например, скрипт сохранен в restart-dv.ps1. Есть два варианта использования
>restart-dv1
перезапускает сервисы по порядку
>restart-dv1 -ro
перезапускает, только те сервисы, которые на данный момент активны. Полезно в случаях, когда некоторые из них остановлены вручную.
2. Остановка всех сервисов DocsVision и службы IIS.
$ErrorActionPreference="SilentlyContinue"
$Services=("WFServer41","WWFServer41","DVReportServer41","DVStorageServer41")
foreach ($ServName in $Services) {
write-host ("Stopping:" + $ServName)
Stop-Service -Name $ServName
}
Stop-Process "ExecLogic.exe"
iisreset /STOP
3. Запуск всех сервисов DocsVision и службы IIS.
$ErrorActionPreference="SilentlyContinue"
$Services=("DVStorageServer41","WFServer41","WWFServer41","DVReportServer41")
iisreset /START
foreach ($ServName in $Services) {
write-host ("Starting:" + $ServName)
Start-Service -Name $ServName
}
Помните про установку политики безопасности скриптов >Set-ExecutionPolicy Читать дальше
Ответы на вопросы
О: Это блог профессионалов DocsVision, на котором публикуются различные материалы, связанные с DocsVision. Причем статьи публикуют не только сотрудники DocsVision, но и специалисты других компаний, работающих с DocsVision.
В: Какая информация здесь публикуется?
О: Статьи, советы, трюки, примеры по разработке на платформе, администрированию DocsVision. Та информация, которая появляется в процессе поддержки, разработки и внедрения платформы. Пока техноблог, в будущем, возможно маркетинговые и др. статьи.
В: Для кого предназначены эти статьи?
О: Для администраторов DocsVision, разработчиков, специалистов по внедрению. Для тех, кто только выбирает систему.
В: Я выполнил скрипт, запустил утилиту, применил совет, но ничего не получилось, все сломалось. Что делать?
О: Пишите в комментарии к статье.
В: У меня есть вопрос по статье, у кого можно уточнить?
О: Задавайте вопрос в комментариях. Так же можно задавать вопросы читателям блога. Рекомендуем поэтому создать свой Google account / profile, для того, чтобы другие читатели могли задать вопрос вам.
В: У меня есть вопрос не связанный со статьей, как его можно решить?
О: Лучше всего отправить в отдел технической поддержки DocsVision. Так же можно воспользоваться сообществом на сайте http://forum.idoc.ru/
В: Как часто публикуются статьи?
О: Публикуются как получится, в свободное время. Подписывайтесь на RSS ленту.
В: Можно ли продать, включить в собственное решение опубликованную утилиту или скрипт?
О: Можно.
В: У меня есть интересный совет или пример, как мне опубликовать его? Так же есть предложение по улучшению блога, кому отправить?
О: Отправьте на адрес mikhail.zakharov[coбакa]gmail.com. Сделаем вас автором. Читать дальше