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)

Опция Enable Integrated Windows Authentication

В настройках Internet Options, на вкладке Advanced есть опция Enable Integrated Windows Authentication.



Название данной опции может ввести в заблуждение. В не зависимости от того, установлена опция или нет Internet Explorer сможет соединяться с IIS, передавая данные по Integrated Windows Authentication.
Отличия в том, что если опция включена, то при передаче авторизационных данных будет использоваться протокол Kerberos, если отключена, то NTLM.

Обратите внимание, что если возникает ситуация, что встроенная авторизация при входе в DocsVision, и Integrated Authentication включена на виртуальной папке в IIS, то попробуйте отключить данную опцию.

Несколько ссылок по теме.

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

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

Генерация документа - Описание полей карточек

Многие пользовались документом "Описание полей карточек DocsVision". Данный документ генерируется при помощи утилиты. Данная утилита будет полезна разработчикам, которые хотят создавать подобный документ для своих схем.

Скачать инструмент Читать дальше

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

Запуск сервисов DocsVision в консольном режиме

Windows сервисы DocsVision Storage Server Service и DocsVision Workflow Service можно запускать как обычные процессы в консольном режиме. Это может потребоваться для того, чтобы определить по какой причине сервис нельзя запустить вручную, - возможно видели ошибку при запуске: "Служба была запущена но затем остановлена, так как ей нечего делать".

Для запуска необходимо в командной строке вызвать исполняемый файл с ключом /console:

WorkflowService.exe /console
StorageServer.exe /console

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

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

Опрос по важнейшим качествам системы DocsVision

Цель опроса - выбрать наиболее важные для наших заказчиков и внедряющих партнеров качества системы DocsVision. По этим требованиям мы будем формировать задание на разработку следующих версий продукта и оценивать результаты разработки.

Опрос полностью анонимный, никаких личных данных вам вводить не придется. Читать дальше

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

Получение поля FullNumber из скрипта карточки на событии сохранение в DocsVision 4.3

Обращаю внимание разработчиков. В DocsVision 4.3. поле FullNumber и NumberRef переносится в CardData только после события "Сохранение". Следовательно получить данные из этого поля в скрипте на данном событии нельзя. Сделано это для еще большего улучшения стабильности работы с нумераторами.
Поэтому если есть необходимость работы с номером у только что созданной карточки, то нужно реализовывать логику в скрипте на событие "Выделение номера"

1. Создается скрипт на событие "Выделение номера"
2. В данном скрипте номер записывается и производятся необходимые действия с ним, например, запись в свойства. Читать дальше

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

Ошибка при работе в CardManager "Cannot find linked section"

Симптом.
При загрузке собственной разработанной схемы библиотеки карточек в базу данных появляется ошибка:

System.InvalidOperationException: Cannot find linked section
   в DocsVision.Platform.Data.Scripting.MsSqlModelBuilder.Visit(SectionField
sectionField)


В чем причина.
В CardManager не загружена библиотека карточек на секцию которой ссылается карточка из разработанной библиотеки. Идентификатор секции будет указан в тексте ошибки - . Часто это происходит из-за того, что в CardManager не загружены схемы стандартных библиотек DocsVision: системная, делопроизводство, управление процессами.


Что нужно сделать.
Загрузить в CardManager нужную схему библиотеки через File | Open | Open library Читать дальше

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

Установка DocsVision средствами групповой политики Active Directory

Установить клиентскую часть DocsVision можно средствами групповых политик. Пошаговая инструкция как это сделать (пример на Windows 2008 Server).

1. Есть подразделение Organization Unit (OU) для которого будем создавать политику



 2. Открываем консоль Group Policy Management и создаем новую политику в нашей OU



3.Выбираем в контекстном меню Edit. Открывается редактор политик. Нам нужен узел Software Installation. Выбираем Computer Configuration если политика применяется на компьютер целиком.
Далее в контекстном меню создаем новый пакет через New | Package




4. Добавляем пакет  DocsVision 4.3 Prerequisites. Важно помнить, что все пакеты должны лежать в сетевой папке, которая доступна с машин пользователей. И указывать нужно именно сетевой путь. (На этом скриншоте указано неверно :)





5. Пакеты DocsVisionClient и TakeOfficeClient требуют установки с определенными настройками. Данные настройки нужно сделать в виде *.mst преобразований. Для создания преобразования. открываем консоль настройки. Выбираем ветку "Генератор преобразований". В поле "путь к msi файлу" указываем пакет DocsVisionClient<версия>.msi.



Меняем свойства и сохраняем mst файл на диск. Данный mst файл указываем в свойствах пакета политики, на вкладке Modifications



Процедуру нужно повторить для TakeOfficeClient


6. В результате в политике будут определены пакеты, которые установятся при входе машины в домен.




 Если для исправления вам был выслан пакет msp то его так же можно поставить средствами политик (оригинальная статья).

1. На машину, на которой установлен сервер DocsVision и с которого устанавливаются пакеты политиками копируем *.msp патч


2. Переходим в папку с компонентом и выполняем следующую команду:
msiexec /a имя msi пакета /P имя msp патча

3. Видим окно инсталлятора


4.Указываем путь к сетевой папке, в которой лежит наш пакет. В данной папке будет собран образ пакета


5.В нашей папке появилось кучка подпапок

6.Но не это главное. Главное то, что дата изменения msi пакета стала текущей. Сам пакет был пересобран уже с исправлением. Теперь нужно установить измененный пакет на все машины. Для этого нужно выполнить Redeploy

Для этого

1. Нужно открыть консоль Group Policy Management. Найти Organization Unit, для которого делалась политика. Найти её и нажать Edit


2. Найти пакет, который был пропатчен и в контекстном меню выбрать All tasks / Redeploy application.Пакет будет переустановлен с исправлением, и что немаловажно новая установка будет производиться исправленным пакетом.



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

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

Пакет скриптов powershell для работы с сервисами DocsVision 4.3

Измененные скрипты для администрирования сервисов DocsVision 4.3 из PowerShelll консоли.
Скрипты для 4.1. есть в постах один, два, три

Скачать скрипты


>restart-dv43
перезапускает сервисы по порядку

>restart-dv43 -ro
перезапускает, только те сервисы, которые на данный момент активны. Полезно в случаях, когда некоторые из них остановлены вручную.

>stop-dv43
останавливает сервисы DocsVision и IIS


>start-dv43
запускает сервисы DocsVision и IIS


>enable-wflog43 "C:\Logs\workflow.log" 4
включает журнал сервиса Workflow, при запуске нужно указать два параметра: путь к файлу журнала и уровень журналирования: 1 - информация, 2 - предупреждения, 3 - ошибки, 4 - отладочные сообщения.

>disable-wflog43
выключает журнал сервиса Workflow

>enable-serverlog43 C:\Logs\Server.log
включает журналирование сервера DocsVision в файл C:\Logs\Server.log

>disable-serverlog43
выключает журналирование сервера DocsVision Читать дальше

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

T-SQL Скрипт для рассчета количества рабочего времени между двумя датами с учетом бизнес-календаря (с изменениями от 15.10)

Для решения задачи расширенного отчета мне требовалось вычислять рабочее время потраченное сотрудником на поставленную ему задачу в днях.

Попробовал использовать уже имеющиеся решения этой задачи, но столкнулся с небольшими проблемами, поэтому написал свой вариант решения.

На мой взгляд, получилось совсем не плохо :-)

Первый вариант пришлось немного изменить (для тех кто уже успел с ним ознакомиться), так как для расчета необходимо было вызывать процедуру, а не функцию, что осложняло использование решения в запросах для построения отчетов.


И так, решение теперь состоит из 4 функций:

1. Функция расчета рабочего времени в первый день заданного периода
2. Функция расчета общего рабочего времени в первый день заданного периода
3. Функция расчета рабочего времени в последний день заданного периода
4. Функция расчета рабочего времени за период

Есть несколько допущений:

1. Если дата старта не задана, то она приравнивается к началу текущего дня
2. Если дата окончания не задача, то она приравнивается к текущему моменту времени
3. Если не указан идентификатор бизнес-календаря, то выполняется поиск первого в системе.
4. Если календарей нет в системе, то календарем по умолчанию считается рабочий день с 09 до 18 с перерывом на обед с 13 до 14 пять дней в неделю

При запуске процедуры расчета рабочего времени есть параметры:

@OnlyFullDay:
1 - учитываются только полные рабочие дни, т.е. без первого рабочего дня и последнего;
0 - в дополнение к полным дням учитываются первый и последний день, если в них было рабочее время

@Mode:
1 - результат возвращается в минутах (параметр @OnlyFullDay тогда игнорируется)
0 - результат в днях

Функция возвращает количество рабочих дней или количество рабочего времени в минутах.

Рабочее время вычисляется за любой промежуток времени, в том числе, при переходе между годами.

У себя тестил на различных вариантах настроек календаря и без него - работает.

Скачать скрипт

Для тех, у кого не работает первая ссылка

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

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

Настройка системы для увеличения быстродействия при работе с деревом папок

Для подсветки непрочитанных карточек в папке, для каждого пользователя, выполняется SQL процедура, которая определяет и подсчитывает количество непрочитанных пользователем карточек. Выполнение этой процедуры, влияет на время загрузки дерева папок, навигацию по вложенным узлам дерева папок, отображение содержимого папки, особенно для папок с большим количеством карточек.

Для увеличения быстродействия при работе с деревом папок рекомендуется отключать подсветку непрочитанных карточек на всех папках системы, кроме личных папок пользователей.

Ниже приведен скрипт, отключающий подсветку непрочитанных карточек на всех папках, кроме личных папок пользователей.

SET XACT_ABORT ON;

IF OBJECT_ID('dbo.FolderInfo') IS NULL
BEGIN
CREATE TABLE dbo.FolderInfo
(
FolderID uniqueidentifier PRIMARY KEY
,Flags int NULL
)
END

DECLARE @Folders TABLE (Id uniqueidentifier PRIMARY KEY)

-- Select folders from UserProfile card
INSERT @Folders(Id)
SELECT DISTINCT DefaultFolderID
FROM dbo.[dvtable_{C64843C3-484F-45E0-9B8A-900EA91BE54D}] WITH(NOLOCK)
WHERE DefaultFolderID IS NOT NULL;

BEGIN TRAN;

-- Backup old folder flags
WITH UserFoldersTree(FolderID, NestLevel)
AS
(
SELECT
Id
,1
FROM @Folders

UNION ALL

SELECT
RowID
,tPrev.NestLevel + 1
FROM dbo.[dvtable_{FE27631D-EEEA-4E2E-A04C-D4351282FB55}] tFld WITH(NOLOCK)
JOIN UserFoldersTree tPrev ON tPrev.FolderID = tFld.ParentTreeRowID
)
INSERT dbo.FolderInfo
(
FolderID
,Flags
)
SELECT
RowID
,Flags
FROM dbo.[dvtable_{FE27631D-EEEA-4E2E-A04C-D4351282FB55}] tFld WITH(NOLOCK)
LEFT JOIN UserFoldersTree tUserFld ON tUserFld.FolderID = tFld.RowID
WHERE tUserFld.FolderID IS NULL

-- Switch off Unread count
UPDATE tFld
SET Flags = ISNULL(tFld.Flags, 0) | 4 -- NO_UNREAD_COUNT flag
FROM dbo.[dvtable_{FE27631D-EEEA-4E2E-A04C-D4351282FB55}] tFld WITH(TABLOCK)
JOIN dbo.FolderInfo tInfo WITH(NOLOCK) ON tInfo.FolderID = tFld.RowID

IF @@ERROR <> 0
ROLLBACK TRAN;

COMMIT TRAN;
Читать дальше

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

Рисование интерфейсов

Наткнулся на сервис для создания набросков интерфейсов. Подходит для рисования макетов карточек, да и любых приложений.
Ресурс:
http://iplotz.com/ Читать дальше

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

Управление пользовательскими сессиями

Неактивные сессии автоматически закрываются через указанный в консоли настройки период. Но нужно учитывать следующее
1) Каждый час Навигатор (а на самом деле любое приложение, которое использует DocsVision API - ObjectManager.dll) отправляет сообщение KeepAlive на сервер. Т.е. если пользователь оставит Навигатор открытым, то его сессия закрыта не будет
2) Сессии закрывает задание (job) SQL сервера. Следовательно, чтобы закрытие неактивных сессий работало, нужно чтобы работал SQL Server Agent
3) Не рекомендуется устанавливать маленький таймаут для неактивных сессий. Это может привести к тому, что бизнес процессы будут останавливаться по ошибке "Указанная сессия не существует"

Если необходимо закрывать сессии, с таймаутом менее 1 часа, то можно сделать следующее.
1) Выставить таймаут > 1 часа, чтобы не было проблем с Workflow,
2) Hазработать свой job, который будет удалять неактивные более N минут сессии от учеток пользователей из dvsys_sessions Читать дальше

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

Примочка к Canon 220P

По словам питерского Пирита, в сетевом сканере Canon 220P отсутствует или не работает функция импорта адресной книги Exchange, и соответствнно отправлять по почте отсканированный документ не очень удобно.
А ведь сделать такую утилиту несложно. Причем с вариантами - импорт адресов из адресной книги Exchange либо из справочника сотрудников DocsVision. И сделать эту утилиту может любой партнер, имеющий опыт программирования под DocsVision. Сканер 220P - программируемый, по сути это компьютер, его софт имеет API, документированный и доступный через Canon.
Не надо я думаю объяснять тех возможностей которые это даст разработчику для продвижения через канал Canon. Утилиту ведь можно и английскую сделать - в мире немало Exchange'ей установлено.... Читать дальше

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

Что делать, если вы нечаянно удалили сотрудника из справочника

И в полях карточек, где был указан данный сотрудник, теперь отображается "Значение недоступно", а задания, в которых он является исполнителем, вообще не открываются.

Пересоздание сотрудника ситуацию не исправит, так как в карточках хранится ссылка на запись сотрудника в справочнике, т.е. его идентификатор, а идентификатор нового сотрудника пусть даже с такой же фамилией и учетной записью будет совершенно другим.

К счастью, помимо перевыбора сотрудника во всех тысячах карточек, есть другое решение. Порядок действий следующий:

1. Найти идентификатор старого сотрудника. Это можно сделать, открыв xml карточки (Экспорт и печать - XML карточки) и из поля, в котором был указан данный сотрудник, скопировать идентификатор. Например, если сотрудник был указан в поле Зарегистровал, в xml нужно искать RegisteredBy в секции MainInfo.
Названия полей карточек вы можете узнать из документа "Описание полей стандартных карточек", входящего в комплект разработчика.

2. В базе DocsVision в таблице dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482} найти вновь созданного сотрудника и заменить идентификатор в столбце RowID на ID, скопированный из xml.
Либо можно сделать то же самое, выполнив SQL запрос

UPDATE [dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482}]
SET RowID='Старый ID'
WHERE LastName='Фамилия сотрудника'

где Старый ID - скопированный из xml идентификатор.

(Данный запрос подойдет только в том случае, если сотрудник с такой фамилией один. Если их несколько, необходимо использовать другое условие WHERE). Читать дальше

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

Состояние индексов в базе данных

К базе данных DocsVision применимы те же самые лучшие практики администрирования, что и к любой БД на MSSQL, о чем не всегда вспоминают. Если замечено снижение производительности во всех операциях и на всех машинах, в том числе и сервере, впервую очередь нужно обратить внимание на базу данных.

Итак.

1. Состояние индексов.
При создании базы, на некоторые таблицы создаются определенные индексы. Крайне важно следить за их уровнем фрагментации. В план обслуживания базы должно быть включено периодическое перестроение индексов. В MS SQL 2005 и 2008, есть удобный инструмент: Maintenance Plans. Высокий уровень фрагментации значительно снижает производительность при выборке данных на больших базах.

2. Производительность дисковой подсистемы.
Рекомендации в данном случае бывают разные. Но как правило лог транзакций выносится на отдельный физический диск, как и системные таблицы.

Ресурсы
http://www.cyberguru.ru/database/sqlserver/sqlserver-effective-service.html
http://www.sql-server-performance.com/ Читать дальше

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

Некоторые системные таблицы в базе данных DocsVision

При анализе данных, да и при построении расширенных отчетов иногда необходимо обратиться к системным таблицам. Я приведу описание некоторых из них, которые могут быть полезны.

dvsys_instances - в таблице хранятся записи о всех карточках в системе
поля:
InstanceID - идентификатор карточки
CardTypeID - идентификатор типа карточки
Description - дайджест
SDID  - сылка на дескриптор безопасности в dvsys_security
Deleted - признак, является ли карточка помещенной в корзину
Template - признак, что карточка является шаблоном
TopicIndex - порядок в теме обработки

dvsys_instances_read - информация о прочтенных пользователем карточках
InstanceID - идентификатор карточки
UserID - идентификатор пользователя из таблицы dvsys_users

dvsys_links - информация о ссылках
SourceCardID - идентификатор карточки, которая ссылается
DestinationCardID - идентификатор карточки, на которую ссылкаются
Type - тип ссылки: 1- слабая, 2 - сильная

dvsys_log - таблица, хранящая журнал навигатора.

dvsys_sessions - таблица, хранящая информацию обо всех сессиях. Удаление строки из этой таблицы, то же самое что и отключение пользователя.

dvsys_users - информация обо всех пользователях, которые хоть раз открывали навигатор. Читать дальше

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