RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)

Работа с правами на объекты через DocsVision API

Частый вопрос, который возникает при разработке на платформе DocsVision, как выполнить различные операции с правами. Описание работы с правами приведено в документации "Руководство разработчика на платформе".

По ссылке вы можете скачать небольшой пример работы с правами. Проект на VB.NET для Visual Studio 2008.

Скачать пример. Читать дальше

Оставить комментарий (всего: 3)

Десять 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)

Программное выделение полного номера карточки 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

Читать дальше

Оставить комментарий (всего: 11)

Включение журнала 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

Читать дальше

Оставить комментарий (всего: 0)

Включение журнала сервера из командной строки

Для того, чтобы включить журнал сервера 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

Читать дальше

Оставить комментарий (всего: 0)

Скрипт PowerShell для перезапуска сервисов DocsVision

Зачастую возникает задача перезапуска сервисов DocsVision и IIS. Для этого нужно либо открывать 2 консоли управления, либо останавливать из командной строки все по очереди.
При этом нужно помнить, что если клиенты соединяются по 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 Читать дальше

Оставить комментарий (всего: 1)

Ответы на вопросы

В: Что это за ресурс?
О: Это блог профессионалов DocsVision, на котором публикуются различные материалы, связанные с DocsVision. Причем статьи публикуют не только сотрудники DocsVision, но и специалисты других компаний, работающих с DocsVision.

В: Какая информация здесь публикуется?
О: Статьи, советы, трюки, примеры по разработке на платформе, администрированию DocsVision. Та информация, которая появляется в процессе поддержки, разработки и внедрения платформы. Пока техноблог, в будущем, возможно маркетинговые и др. статьи.

В: Для кого предназначены эти статьи?
О: Для администраторов DocsVision, разработчиков, специалистов по внедрению. Для тех, кто только выбирает систему.

В: Я выполнил скрипт, запустил утилиту, применил совет, но ничего не получилось, все сломалось. Что делать?
О: Пишите в комментарии к статье.

В: У меня есть вопрос по статье, у кого можно уточнить?
О: Задавайте вопрос в комментариях. Так же можно задавать вопросы читателям блога. Рекомендуем поэтому создать свой Google account / profile, для того, чтобы другие читатели могли задать вопрос вам.

В: У меня есть вопрос не связанный со статьей, как его можно решить?
О: Лучше всего отправить в отдел технической поддержки DocsVision. Так же можно воспользоваться сообществом на сайте http://forum.idoc.ru/

В: Как часто публикуются статьи?
О: Публикуются как получится, в свободное время. Подписывайтесь на RSS ленту.

В: Можно ли продать, включить в собственное решение опубликованную утилиту или скрипт?
О: Можно.

В: У меня есть интересный совет или пример, как мне опубликовать его? Так же есть предложение по улучшению блога, кому отправить?
О: Отправьте на адрес mikhail.zakharov[coбакa]gmail.com. Сделаем вас автором. Читать дальше