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)

Поздравляем с новым годом!

Коллеги! Поздравляем вас с новым годом! Наш блог уходит на 10 дневные каникулы. После праздников вас ждет много интересного. Публикация утилиты, которая производит синхронизацию ActiveDirectory и справочника сотрудников по расписанию. Описание нашего нового инструмента HelpDesk для технической поддержки DocsVision, и технологий его создания. И многое другое!


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

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

Вебинар "Обзор возможностей Конструктора Решений"

Доступна для скачивания запись вебинара Олега Баранова "Обзор возможностей Конструктора Решений".

Первая часть

Вторая часть Читать дальше

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

Альфа-версия Конструктора Решений

Доброго времени суток!

Доступна для скачивания "альфа-версия" Конструктора Решений:

Applications Designer включает в себя установочные пакеты серверной и клиентской части, руководство администратора, а также установочные пакеты примера библиотеки карточек;

Applications Designer SDK - установочный пакет SDK для разработчиков на Конструкторе решений, руководство разработчика и пример кода.

Поддерживаемая версия платформы: DocsVision 4.3 SR1 (4.3.1848). Читать дальше

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

Эмуляция нагрузки на сервер DV с использованием MS Visual Studio.

Среди программных продуктов существует множество как платных, так и бесплатных специализированных решений для эмуляции нагрузки на WEB-сервера.К сожалению, почти все они не очень хорошо подходят для эмуляции нагрузки на сервер DocsVision. Связано это главным образом с тем, что данные продукты заточены для нагрузочного тестирования WEB-сайтов, а не сложных клиент-серверных приложений, где весь трафик является персонально-зависимым.В данном посте хочу в общих чертах описать процедуру эмуляции нагрузки на сервер с использованием Microsoft Visual Studio Team System.


Данная редакция позволяет создавать Test Project, который среди нескольких типов тестов содержит Load Test (нагрузочный тест). Данный тип теста имеет следующую функциональность – запуск участков кода, объединенных атрибутом [Test Method] во множестве потоков. (То есть эмулировать выполнение этих участков одновременно от имени нескольких виртуальных пользователей). Плюс к этой функциональности, данный тип теста содержит большое число настроек и параметров, для гибкого управления конфигурацией. Сложив вместе сказанное в абзаце выше легко прийти к выходу, что Load Test в Visual Studio позволяет во-первых, создавать нагрузочные тесты для сервера DocsVision, а во-вторых, гибко управлять параметрами данной нагрузки. Вот небольшой пример кода, содержащего два теста – открытие карточки входящего документа и загрузка файла на диск из карточки файла:


[TestClass]
class MyTestClass
{
[TestMethod]
public void OpenCardDocument()
{
UserSession session = this.GetUserSession();
Assert.IsNotNull(session);

// open card
Guid cardID = (Guid)this.TestProperties["InstanceID"];

CardData cardData = session.CardManager.GetCardData(cardID);

// emulate reading data
cardData.SaveXml(new MemoryStream());
}

[TestMethod]
public void OpenCardFile()
{
UserSession session = this.GetUserSession();
Assert.IsNotNull(session);

// open card
Guid cardID = (Guid)this.TestProperties["InstanceID"];

CardData cardData = session.CardManager.GetCardData(cardID);


// emulate reading data
cardData.SaveXml(new MemoryStream());

// download file to disk
DownloadFile(session, cardData);
}
}


TestProperties["InstanceID"] – параметр из конфигурационного файла, соответствующий ID карточки входящего документа и карточки файла соответственно.

Теперь нам осталось только сконфигурировать параметры нагрузки, например так:

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

Данный небольшой обзор не претендует на какую-либо полноту, показана лишь принципиальная возможность эмуляции нагрузки на сервер DocsVision с помощью Visual Studio. Очевидно, что данная среда позволяет эмулировать любые тест-кейсы, сложность и приближенность к реальным юзкейсам зависят лишь от разработчика данных тестов.
Читать дальше

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

Переезд...



Наш переезд завершен. Работа вошла в привычный ритм, и можно продолжить ведение блога.
Если не получали рассылку с информацией, обратите внимание, что наш адрес изменился
http://www.docsvision.com/nc/contact/ Читать дальше

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

Возможности программного расширения платформы DocsVision

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


Сценарии (скрипты) в стандартных карточках решения Делопроизводство.

Позволяют незначительно модифицировать или дополнять логику работы стандартных карточек документов в решении Делопроизводство (Входящий, Исходящий, Внутренний, Универсальный документ) путем выполнения пользовательских сценариев в ключевые моменты стандартного жизненного цикла карточек. Язык разработки сценариев – VBScript. Функциональные возможности – любые, с использованием стандартной объектной модели (API) DocsVision или любых вспомогательных COM-объектов (в том числе внешних систем). Текст сценария может быть зашифрован с использованием пароля для защиты авторских прав.
Примеры использования:
  • При создании новой карточки, заполнить поля предопределенными значениям
  • При закрытии карточки, проверить корректность введенных пользователем данных
  • При изменении значения свойства, автоматически вычислить значения других свойств и полей
Не рекомендуется использовать данный тип расширения для моделирования сложных сценариев и объектов, в этом случае лучше прибегуть к разработке нового типа карточки.


Сценарии (скрипты) в бизнес-процессах

Выполняются в рамках стандартной функции “Сценарий”. Используются для реализации сложной логики, которую нельзя реализовать с помощью других стандартных функций; а также для повышения производительности сложных операций. Язык разработки сценариев – C# или VB.NET. Функциональные возможности – любые, с использованием стандартной объектной модели (API) DocsVision или любых вспомогательных .NET-сборок. Текст сценария может быть зашифрован с использованием пароля для защиты авторских прав.
Примеры использования:
  • • Обработка в цикле большого количества карточек, найденных мониторингом
  • • Сложные вычисления над данными
  • • Взаимодействие с внешней системой, для которой нет стандартного шлюза
Недостатком сценариев является их слабая гибкость в настройке (для изменения поведения, требуется менять программный код). Для создания более дружественных к пользователю программных расширений, необходимо прибегнуть к разработке новых функций.


Внешние утилиты и приложения

Любые внешние по отношению к DocsVision приложения, выполняющиеся за рамками процессов Навигатора и сервера DocsVision. Основные сценарии использования:
  • Специализированные АРМы (функциональные рабочие места) – например, Личный помощник, Рабочее Место Руководителя, и т.д.
  • Интеграция с другими приложениями (например, панель инструментов в приложениях Microsoft Office)
  • Утилиты для синхронизации или потоковой загрузки данных (например, утилита импорта справочника сотрудников из Excel; сервис периодической синхронизации с AD)
Язык разработки – любой, допускающий использование API DocsVision (COM или .NET).


Новые типы карточек

Создаются для автоматизации новых сценариев, не предусмотренных стандартными набором решений – то есть, когда для моделирования бизнес-объектов не подходят карточки стандартных решений Делопроизводство и Управление процессами (даже с помощью пользовательских свойств), а также не существует специализированных сторонних решений.
При разработке нового типа карточки можно определить любую структуру хранения данных, а также произвольный пользовательский интерфейс для работы с ними. Частным случаем нового типа карточек являются также справочники.
Язык разработки карточек – любой COM-ориентированный (VB, C++) или .NET (C#, VB.NET).
Набор из нескольких новых типов карточек и справочников чаще всего образует законченное решение, которое может быть тиражируемым.
Пример решений:
  • HelpDesk (карточка обращения, карточка уровня сервиса)
  • Управление совещаниями (карточка протокола совещания, справочник доступности ресурсов)


Расширения Навигатора

Используются для расширения функциональности стандартного клиентского приложения системы DocsVision Навигатор (аналог плагинов в других системах). Позволяют дополнить интерфейс Навигатора новыми кнопками панели инструментов, командами контекстного меню для различных объектов; а также изменить его поведение в некоторых сценариях (работе виртуальных папок, выборе пользователей из справочника, и т.д.). Язык разработки – любой COM-ориентированный (VB, C++) или .NET (C#, VB.NET).

Сценарии использования:
  • При запуске Навигатора, установить соединение с внешней системой
  • Добавить на панель инструментов Навигатора и в контекстное меню карточек новые команды, экспортирующие информацию во внешюю систему
  • В диалоге назначения прав, заменить выбор пользователя их справочника сотрудников DocsVision на выбор пользователя из внешней системы


Сценарии (скрипты) в справочнике расширенных команд Навигатора

Менее функциональный, но более простой в использовании вариант расширений Навигатора. Позволяет расширить функциональность Навигатора ограниченным набором способов:
  • Новая команда на панели инструментов
  • Новая команда в контекстном меню карточек или папок
При инициации дополнительной команды, вызывается разработанный сценарий на языке VBScript. Функциональные возможности сценария – любые, с использованием стандартной объектной модели (API) DocsVision или любых вспомогательных COM-объектов (в том числе внешних систем). Текст сценария может быть зашифрован с использованием пароля для защиты авторских прав.


Серверные расширения

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


Функции Worfklow

Предназначены для реализации новых типовых сценариев работы с объектами в бизнес-процессах. Функция может предоставлять возможность работы с объектами внешней системы, для которой не существует стандартного шлюза; либо реализовывать новые алгоритмы обработки объектов базовых шлюзов, которые не могут быть реализованы с помощью стандартных функций. Язык разработки – COM (VB, C++) и .NET (C#, VB.NET).
Основное отличие функции бизнес-процесса от сценария - это наличие пользовательского интерфейса, который позволяет пользователю самостоятельно изменять параметры работы функции.
Примеры функций:
  • Функция обработки карточек поручений, специализированная для работы в рамках решения “Административное Делопроизводство”
  • Функция распознавания документа с использованием FineReader


Шлюзы Workflow

Позволяют реализовать интеграцию решения «Управление процессами» с внешними системами, для которых не предусмотрено стандартных шлюзов. Шлюз позволяет оперировать в процессе новыми типами объектов (переменных) с помощью стандартных функций (универсальная функция, универсальный обмен данными) либо специализированных функций (обычно распространяются вместе со шлюзом). Язык разработки – COM (VB, C++) и .NET (C#, VB.NET).
Примеры:
  • Шлюз к системе Lotus Notes, предоставляющий возможность обработки новых типов переменных “Сообщение Lotus Notes” и “Пользователь Lotus Notes”


Процессы WWF

Позволяют создавать новые (и использовать существующие) активности, и исполнять их с помощью решения «Процессы Window Workflow Foundation”. Основным преимуществом данной подсистемы по сравнению с DocsVIsion Workflow является более высокая скорость работы, и наличие большого количества готовых активностей, созданных сторонними разработчиками и компанией Microsoft. Язык разработки – C# или VB.NET.


Модули расширения Консоли Настройки

Модули расширения Консоли Настройки (Snap-Ins) предназначены для интеграции новых решений и модулей в интерфейс Консоли Настройки DocsVision, а также для управления процессом установки решения. В процессе инсталляции, модуль расширения может предоставлять информацию о решении для погрузки в базу данных и интеграции с сервером DocsiVision. После окончания установки, решение может быть представлено дополнительной веткой в дереве настроек, которой соответствует набор элементов управления в правой части для изменения основных конфигурационных параметров решения. Язык разработки модулей расширения – C# или VB.NET.


Модули расширения справочника системных настроек

Данный тип расширений позволяет интегрировать настройки любых решений в стандартный справочник Системных Настроек (начиная с версии DocsVIsion 4.3). Решение будет представлено дополнительной веткой в дереве решений, в каждой из которых может храниться произвольное количество настроек (с возможною группировки в подветки). Платформа предоставляет центарлизованное хранилище настроек, задача разработчика – обеспечить пользовательских интерфейс для их ввода. Язык разработки – C# или VB.NET.
Сценарии использования: при создании тиражируемых решений, подразумевающих возможность тонкой настройки в процессе внедрения.
Отличие от модулей расширнения Консоли Настройки: модули расширения Консоли Настройки обычно предназначаются для “грубых” настроек, без которых решение или модуль вообще не может функционировать (например, настройки соединения с базой данных, или учетные записи); тогда как настройки в справочнике предназначены уже для “тонкой” настройки специфических параметров работы решения.


Расширенные отчеты

Требуют наличия дополнительного модуля “Расширенные отчеты”.
Применяются для формирования:
  • сложных отчетов, которые нельзя построить с помощью стандартных представлений
  • статистических отчетов, формирование которых создает большую вычислительную нагрузку на сервер
  • итерактивных отчетов в формате HTML, с использованием ссылок и элементов управления
  • отчетов в формате Word и Excel
  • отчетов, включающих в себя данные из сторонних систем
  • отчетов в формате Microsoft SQL Server Reporting
Язык разработки отчета: SQL (хранимая процедура) и XSLT-преобразование.


Web-формы карточек

Требуют наличия дополнительного модуля “Легкий клиент”.
Позволяют реализовать HTML-формы для работы с данными карточек в Легком клиенте DocsVision. Реализуются как элементы управления ASP.NET, и могут быть динамически добавлены для любых типов карточек в системе (в том числе, карточек и справочников стандартных решений). Язык разработки - C# или VB.NET.
Скачать отдельным документом
Читать дальше

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

Особенности работы шлюза 1С и DV

1. Рекомендуется использование последней версии платформы 1 С (8.1.14.72) и выше.
2. Для подключения к 1С шлюз DocsVison использует COM connector системы 1С. V81.COMConnector накладывает на способ взаимодействия с ним в многопоточном окружении дополнительные нестандартные ограничения, в связи с чем,для повышения стабильности работы шлюза рекомендуется установить парамтр ключа реестра 1C HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{48EE4DBA-DE11-4af2-83B9-1F7FD6B6B3E3}\InprocServer32 в Apartment. Данный ключ переводит работу V81.COMConnector COM connector 1С в однопоточный режим. Читать дальше

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

Возможности интеграции платформы DocsVision

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


База данных

Данный способ позразумевает чтение и запись данных напрямую из таблиц базы данных DocsVIsion.
Преимущества:

  • Самый быстрый с точки зрения производительности способ интеграции
Недостатки:

  • Необходимо досконально знать структуру базы DV и внешней системы
  • Большой риск нарушить целостность БД, что может привести к некорректной работе приложения
  • Доступ к данным в DocsVision без учета назначенных прав (в обход подсистемы безопасности)
Рекомендация:
  • Применять при однократной загрузке (выгрузке) больших объемов данных (десятки и сотни тысяч записей)
XML

Система DocsVision умеет экспортировать свои записи (карточки) и импортировать обратно из XML-файлов определенной структуры. На этой функциональности могут базироваться способы интеграции с системами, которые также поддерживают обмен данными в формате XML. Формат XML внешней системы может преобразовываться к формату DocsVision с помощью XSL-преобразований.

Преимущества:

  • XML – открытый формат, поддерживаемый большинством современных систем
  • Не требуется специальных знаний о системе DocsVision для реализации интеграции
Недостатки:

  • Процессы экспорта и импорта XML очень медленные
  • Накладные расходы самого формата приводят к значительному увеличению объема данных
Рекомендации:

  • Использовать для периодического переноса небольших объемов данных
Объектная модель (API)

Система DocsVIsion имеет открытую объектную модель API (на базе технологий COM и. NET Framework), которая позволяет из внешних приложений выполнять операции с данными DocsVision. На базе этой объектной модели можно разрабатывать специализированные приложения и утилиты для загрузки и выгрузки данных (например, сервис, выполняющийся по расписанию); а также реализовать более тесную интеграцию непосредственно в интерфейс внешних систем (для тех систем, которые поддерживают программные расширения в виде плагинов или сценариев).

Преимущества:

  • Возможность реализации сколь угодно сложно логики обработки данных с использованием средств алгоритмических языков программирования
  • Объектная модель контролирует целостность данных и полномочия доступа к ним
Недостатки:

  • Посредственная скорость обработки данных
  • Необходимость изучения объектной модели DocsVision
  • Сложность модификации алгоритмов обработки данных в процессе эксплуатации
Рекомендации:

  • Применять при необходимости сложной алгоритмической обработки данных
  • Для обеспечения более тесной интеграции с внешними системами
Шлюзы Workflow

Подсистема управлениям бизнес-процессами DocsVIsion является мощным средством организации процессов обработки данных - и в том числе, организаци интеграции с внешними системами при помощи специализированных компонент – шлюзов. Для некоторых внешних систем существуют готовые шлюзы, которые входят в базовый комплект поставки (шлюз к почте, шлюз к файловой системе) либо могут быть приобретены дополнительно (шлюз к Microsoft SharePoint Services, шлюз к 1Сv8, и т.д.). Если же для внешней системы не существует готового шлюза, то его можно разработать самостоятельно с использованием открытых интерфейсов.

Преимущества:
  • Простой и удобный визуальный интерфейс, позволяющий организовать сложные процессы обработки данных без навыков программирования
  • Возможность использования всей функциональности подсистемы управления бизнес-процессами DocsVision
Недостатки:

  • Низкая скорость обработки данных
  • Значительная трудоемкость разработки собственных шлюзов
Рекомендации:

  • Использовать при создании тиражируемых решений, или при необходимости частой модификации алгоритмов обработки данных
Сценарии в бизнес-процессах

В редакторе бизнес-процессов можно оперировать только конечным числом атомарных операций -функций. Однако, при этом имеется возможность бесконечного наращивания возможностей за счет выполнения произвольного кода в спецаильной функции Сценарий. Этот код может взаимодействовать как с данными системы DocsVIsion (с помощью объектной модели) – так и с любыми внешними системами, обладающими собственным API.

Преимущества:

  • Значительно меньшая по сравнению с разработкой шлюза трудоемкость реализации
  • Более высокая производительность при обработке больших объемов данных
  • Возможность использования всей функциональности подсистемы управления бизнес-процессами DocsVision для пре- и пост-обработки данных
Недостатки:

  • Сложность модификации алгоритмов обработки данных в процессе эксплуатации
Рекомендации:

  • Использовать для решения узкоспециализированных интеграционных задач при участии бизнес-процессов

Процессы WWF


Процессы WWF (Windows Workflow Foundation) – отдельная подсистема в составе DocsVision, которая позволяет проектировать и исполнять бизнес-процессы в ядре Windows Workflow. Такие процессы отличаются весьма высокой скоростью обработки, но вместе с тем являются более низкоуровневыми, чем процессы DocsVision Workflow, и требуют навыков программирования для разработки. Однако, для подсистемы Windows Workflow существует немалое количество готовых функциональных блоков – активностей – в том числе, выполняющих задачи интеграции с внешними системами. Также существует возможность создания собственных активностей.

Преимущества:

  • Высокая скорость обработки процессов
  • Широкий спектр готовых активностей
Недостатки:

  • Нужны узкоспециализированные знания подсистемы WWF и языков программирования
  • Сложность модификации алгоритмов обработки данных в процессе эксплуатации


Скачать в отдельном документе

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

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

Еще один пример работы с правами

Еще один пример работы с правами и DocsVision API. Приложение которое ищет карточки бизнес-процесса, на которые исполнитель не имеет прав, и назначает соответствующие права.
Ссылки установлены на библиотеки DocsVision 3.6

Скачать (VS 2008, vb.net) Читать дальше

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

Еще 7 эккаунтов Google Wave

У меня тоже появились к раздаче 7 эккаунтов. Как уже писал Михаил, чтобы с этим работать надо иметь эккаунт в Gmail.
Обращайтесь на skurjanov(собака)gmail.com.
Читать дальше

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

Синхронизация данных карточки и формы InfoPath

Продолжая тему интеграции с офисными приложениями из VBS-скриптов (см. пост про работу с Word), привожу скрипт, работающий с формой InfoPath, вложенной в карточку документа в виде файла. Пафос слова "интеграция" несколько спадает если вспомнить, что форма InfoPath - это всего лишь XML файл.
Итак, что требовалось от скрипта:
  • записывать значения заданных полей карточки документа в файл формы;
  • записывать значения заданных полей формы InfoPath в карточку;
  • производить указанные действия при открытии карточки и ее сохранении.
Алгоритм работы скрипта прост:
  1. получить первый вложенный в карточку документа файл и выгрузить его на файловую систему во временный файл;
  2. прочитать из файла значения заданных полей формы и записать их в поля (и/или пользовательские свойства) карточки документа;
  3. записать в файл значения других заданных полей карточки в поля формы;
  4. сохранить файл в карточке и удалить его с файловой системы.
Соответствие полей карточки и полей формы задается в скрипте в виде двух массивов (ReadMappings и WriteMappings). Поля формы задаются с помощью выражений XPath (что дает некоторую гибкость и универсальность). Поля карточки задаются по именам, которые интерпретируются в скрипте в функциях GetPropValue, GetPropDisplayValue и процедурах SetPropValue, SetPropDisplayValue. В этой интерпретации допущен некоторый произвол, благодаря которому в скрипте появились "псевдополя" типа поля "текущий пользователь открывший карточку" (@CurrentUser).
Для пользовательских свойств карточки отдельно синхронизируется значение и отдельно отображаемое значение.
А вот, собственно, и сам скрипт:


Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)
StoreProps CardData, UserSession
LoadProps CardData, UserSession
DoEvent = 1
End Function


' Синхронизировать свойства из файла в карточку
Sub LoadProps(CardData, UserSession)
Dim File, Path
Set File = FirstFile(CardData, UserSession)
If FIle Is Nothing Then Exit Sub
Path = SaveFileOnFs(File)
ReadPropsFromFile Path, CardData
DeleteFileFromFs Path
End Sub

' Синхронизировать свойства из карточки в файл
Sub StoreProps(CardData, UserSession)
Dim File, Path
Set File = FirstFile(CardData, UserSession)
If FIle Is Nothing Then Exit Sub
Path = SaveFileOnFs(File)
WritePropsToFile UserSession, Path, CardData
File.Upload Path
DeleteFileFromFs Path
End Sub

' Соответствие свойста карточки и полей xml-файла
Class PropMapping
Public PropName
Public ValueXPath
Public DisplayValueXPath
End Class

' Создать соответствие свойста карточки и полей xml-файла
Function Map(PropName, ValueXPath, DisplayValueXPath)
Set Map = New PropMapping
With Map
.PropName = PropName
.ValueXPath = ValueXPath
.DisplayValueXPath = DisplayValueXPath
End With
End Function

' Соответствия свойств карточки и полей xml-файла для передачи из файла в карточку
Dim ReadMappings : ReadMappings = Array( _
Map("Тема", "/my:Protocol/my:Subject", "/my:Protocol/my:Subject"), _
Map("Номер", "/my:Protocol/my:Number", "/my:Protocol/my:Number"), _
Map("Место совещания", "/my:Protocol/my:Place", "/my:Protocol/my:Place"), _
Map("Подписанты", "/my:Protocol/my:AllSigners", "/my:Protocol/my:AllSigners"), _
Map("Участники", "/my:Protocol/my:AllAttendees", "/my:Protocol/my:AllAttendees"), _
Map("Присутствовали от контрагентов", "/my:Protocol/my:AllContragents", "/my:Protocol/my:AllContragents"), _
Map("Дата", "/my:Protocol/my:Date", "/my:Protocol/my:Date"), _
Map("Филиал", "/my:Protocol/my:BranchID", "/my:Protocol/my:BranchName") _
)

' Соответствия свойств карточки и полей xml-файла для передачи из карточки в файл
Dim WriteMappings : WriteMappings = Array( _
Map("Регистратор", "/my:Protocol/my:RegistratorID", "/my:Protocol/my:RegistratorName"), _
Map("Состояние", "/my:Protocol/my:State", "/my:Protocol/my:State"), _
Map("Вид протокола", Null, "/my:Protocol/my:Type"), _
Map("ConfirmationStartProcessTempl", "/my:Protocol/my:ConfirmationStartProcessTempl", Null), _
Map("ConfirmationStartProcessFolder", "/my:Protocol/my:ConfirmationStartProcessFolder", Null), _
Map("ResolutionTemplateID", "/my:Protocol/my:ResolutionTemplateID", Null), _
Map("ResolutionFolderID", "/my:Protocol/my:ResolutionFolderID", Null), _
Map("DeliveryStartProcessTempl", "/my:Protocol/my:DeliveryStartProcessTempl", Null), _
Map("DeliveryStartProcessFolder", "/my:Protocol/my:DeliveryStartProcessFolder", Null), _
Map("@Card", "/my:Protocol/my:CardID", Null), _
Map("@CurrentUser", "/my:Protocol/my:CurrentUserID", Null) _
)

' Прочитать свойства из xml-фала в карточку
Sub ReadPropsFromFile(Path, CardData)
Dim XDoc, Mapping, CardProp
Set XDoc = CreateObject("Msxml2.DOMDocument.3.0")
XDoc.async = False
XDoc.load Path
For Each Mapping In ReadMappings
If Not IsNull(Mapping.ValueXPath) Then
SetPropValue CardData, Mapping.PropName, XDoc.selectSingleNode(Mapping.ValueXPath).Text
If Not IsNull(Mapping.DisplayValueXPath) Then
SetPropDisplayValue CardData, Mapping.PropName, XDoc.selectSingleNode(Mapping.DisplayValueXPath).Text
End If
End If
Next
End Sub

' Записать свойства из карточки в xml-файл
Sub WritePropsToFile(UserSession, Path, CardData)
Dim XDoc, Mapping, CardProp
Set XDoc = CreateObject("Msxml2.DOMDocument.3.0")
XDoc.async = False
XDoc.load Path
For Each Mapping In WriteMappings
If Not IsNull(Mapping.ValueXPath) Then
XDoc.selectSingleNode(Mapping.ValueXPath).Text = GetPropValue(UserSession, CardData, Mapping.PropName)
End If
If Not IsNull(Mapping.DisplayValueXPath) Then
XDoc.selectSingleNode(Mapping.DisplayValueXPath).Text = GetPropDisplayValue(UserSession, CardData, Mapping.PropName)
End If
Next
XDoc.save Path
End Sub

' Получение первого приложенного к карточке файла
Function FirstFile(CardData, UserSession)
Dim FileList, FileRefs, VerFile, VersionID, FileID
Set FileList = UserSession.CardManager.CardData(MainInfo(CardData).Value("FilesID"))
Set FileRefs = Sect(FileList, "FileReferences")
If FileRefs.Rows.Count = 0 Then
Set FirstFile = Nothing
Exit Function
End If
Set VerFile = UserSession.CardManager.CardData(FileRefs.Rows(0).Value("FileID"))
VersionID = Sect(VerFile, "MainInfo").FirstRow.Value("CurrentID")
FileID = Sect(VerFile, "Versions").GetRow(VersionID).Value("FileID")
Set FirstFile = UserSession.FileManager.File(FileID)
End Function

' Сохранение файла на файловой системе во временный файл (возвращает путь к файлу)
Function SaveFileOnFs(File)
Dim Fso, Fld
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Fld = Fso.GetSpecialFolder(2)
SaveFileOnFs = Fso.BuildPath(Fld.Path, Fso.GetTempName)
File.Download SaveFileOnFs
End Function

' Удаление файла с файловой системы
Sub DeleteFileFromFs(Path)
Dim Fso
Set Fso = CreateObject("Scripting.FileSystemObject")
Fso.DeleteFile Path, True
End Sub

' Получение секции карточки по имени
Function Sect(CardData, Alias)
Set Sect = CardData.Sections(CardData.Type.AllSections.GetByAlias(Alias).ID)
End Function

' Нулевая строка секции MainInfo
Function MainInfo(CardData)
Set MainInfo = Sect(CardData, "MainInfo").FirstRow
End Function

' Строка свойства
Function Prop(CardData, Alias)
Set Prop = Nothing
Dim Row: For Each Row In Sect(CardData, "Properties").Rows
If Row.Value("Name") = Alias Then
Set Prop = Row
Exit Function
End If
Next
End Function

' Получение значения свойства
Function GetPropValue(UserSession, CardData, PropName)
Select Case PropName
Case "@Card"
GetPropValue = CardData.ID
Case "@CurrentUser"
GetPropValue = StaffObject(UserSession).GetCurrentUserID
Case Else
Dim PropRow
Set PropRow = Prop(CardData, PropName)
GetPropValue = PropRow.Value("Value")
End Select
End Function

' Получение отображаемого значения свойства
Function GetPropDisplayValue(UserSession, CardData, PropName)
Select Case PropName
Case "@Card"
GetPropDisplayValue = CardData.Description
Case "@CurrentUser"
Dim Staff
Set Staff = StaffObject(UserSession)
GetPropDisplayValue = Staff.GetEmployeeName(Staff.GetCurrentUserID)
Case Else
Dim PropRow
Set PropRow = Prop(CardData, PropName)
GetPropDisplayValue = PropRow.Value("DisplayValue")
End Select
End Function

' Установка значения свойства
Sub SetPropValue(CardData, PropName, Value)
Select Case PropName
Case "Дата"
Value = CDate(Value)
End Select
Dim PropRow
Set PropRow = Prop(CardData, PropName)
PropRow.Value("Value") = Value
End Sub

' Установка отображаемого значения свойства
Sub SetPropDisplayValue(CardData, PropName, DisplayValue)
Select Case PropName
Case "@Card"
CardData.Description = CStr(DisplayValue)
Case Else
Select Case PropName
Case "Дата"
DisplayValue = FormatDateTime(CDate(DisplayValue), 2)
End Select
Dim PropRow
Set PropRow = Prop(CardData, PropName)
PropRow.Value("DisplayValue") = CStr(DisplayValue)
End Select
End Sub

' Получение StaffObject
Function StaffObject(UserSession)
Set StaffObject = CreateObject("TOHelperObjects.StaffObject")
Set StaffObject.UserSession = UserSession
End Function
Читать дальше

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

GoogleWave

Коллеги, у меня есть 7 инвайтов на GoogleWave. Кому необходимо, напишите мне mikhail.zakharov[cобаka)gmail.com

upd. закончились.

Сам wave полезен в коллективной работе, и лучше его тестировать совместно с кем то, кто уже имеет аккаунт. 


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

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

Методический материал "Создание распределенных решений"

Службой консалтинга DocsVision выпущен новый методический материал «Создание распределенных решений на базе DocsVision». Данный вопрос особенно актуален для территориально-распределенных организаций-заказчиков. Материал включает в себя:
1. Документ, в котором рассмотрены существующие в системе DocsVision механизмы построения распределенных решений, принципы выбора архитектуры таких решений и пример решения для распределенной обработки задач в распределенной многосерверной системе.
2. XML-файлы бизнес-процессов DocsVision, реализующих рассматриваемый пример.
Этот методический материал поможет Вам лучше понять возможности cоздания распределенных решений на базе DocsVision, эффективно использовать эти знания в продажах и внедрениях в территориально-распределенных организациях.
Материал можно скачать в разделе «Внедрение» Комплекта Партнера DocsVision на нашем сайте. Читать дальше

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

Ещё один способ развернуть клиента DV в сети

Уверен, что многие из читателей занимались установкой клиентской части DV. Способов инсталляции существует немало. Я хочу предложить ещё один, который, на мой взгляд, будет достаточно востребован при установке на n-ое количество компьютеров.

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

Кто-то из читателей наверняка слышал про утилиту psexec. С её помощью можно выполнять команды на удалённом компьютере(-ах). Вот ею мы и воспользуемся.

Ставить будем клиента версии 4.3. Для полноценной его работы требуется .NET Framework 3.5 SP1. По своему опыту могу сказать, что далеко не всегда он установлен, поэтому его тоже включим в скрипт.

Для начала нужно создать два ресурса: один с пакетами инсталляции, второй для журналов установки.
К примеру такие:

\\SERVERNAME\dv_install
\\SERVERNAME\dv_install_logs

Минимальные права для первого - чтение для учётной записи из-под которой будет происходит установка, для второго - чтение\запись для этой же учётной записи.

Если нужно, скачиваем полный дистрибутив NET Framework 3.5 SP1 (231 мб) и кладём его в папку с пакетами клиента DV.

Далее, при помощи генератора преобразований (в консоли настройки) нужно создать преобразования для пакетов DocsVision TakeOffice и DocsVision Client.
В первом пакете, в общем случае, нужно откорректировать значения свойств: BASE_NAME, SERVER_NAME, SITE_URL, SOAP_SERVICE_URL. Во втором - DV_URL. Преобразования сохранить в директории с целевым пакетом.

Теперь нужно создать bat-файлы для установки пакетов.

Файл InstallDVClient.bat

\\SERVERNAME\dv_install\dotnetfx35_wSP1.exe /quiet /norestart

msiexec /i \\SERVERNAME\dv_install\Prerequisites\Prerequisites.msi /quiet /norestart /l* \\SERVERNAME\dv_install_logs\Prerequisites_%COMPUTERNAME%.log
msiexec /i \\SERVERNAME\dv_install\DocsVisionClient\DocsVisionClient1848.msi TRANSFORMS="\\SERVERNAME\dv_install\DocsVisionClient\dv43.mst" ALLUSERS=1 /quiet /norestart /l* \\SERVERNAME\dv_install_logs\Client_%COMPUTERNAME%.log
msiexec /i \\SERVERNAME\dv_install\TakeOfficeClient\TakeOfficeClient1848.msi TRANSFORMS="\\SERVERNAME\dv_install\TakeOfficeClient\dv43.mst" ALLUSERS=1 /quiet /norestart /l* \\SERVERNAME\dv_install_logs\TakeOffice_%COMPUTERNAME%.log
msiexec /i \\SERVERNAME\dv_install\WorkflowClient\WorkflowClient1848.msi ALLUSERS=1 /quiet /norestart /l* \\SERVERNAME\dv_install_logs\Workflow_%COMPUTERNAME%.log
msiexec /i \\SERVERNAME\dv_install\DocsVisionManagedClient\DocsVisionManagedClient1848.msi ALLUSERS=1 /quiet /norestart /l* \\SERVERNAME\dv_install_logs\ManagedClient_%COMPUTERNAME%.log

del %WINDIR%\System32\InstallDVClient.bat


Кому не нужно ставить Framework - убирают первую строку.
Установка будет производиться в режиме "для всех пользователей", на что указывает флаг ALLUSERS=1 (Prerequisites и ManagedClient всегда ставятся в этом режиме). Кому было лень создавать файлы-трансформеры, могут также указать все нужные параметры прямо в файле, но мне это кажется слишком громоздким. Логи будут складываться во вторую шарку. Для каждого компьютера свои логи для каждого пакета.

Файл Install.bat

psexec.exe @C:\DV_Remote_Install\Comps.txt -u Administrator -p password -d -c -f InstallDVClient.bat

В файле Comps.txt хранится список имён (или IP-адресов) компьютеров на которых нужно произвести установку.

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

Параметр -d указывает программе не дожидаться окончания выполнения команды. Если его не указать, то установка будет производиться последовательно на каждом компьютере, что значительно увеличит время развёртывания.

Опции и -f указывают, что файл InstallDVClient.bat нужно перед выполнением предварительно скопировать на целевую машину, т.к. его там изначально нет.

Вот и всё. Можно запускать Install.bat и ждать. NET Framework будет ставиться 10-20 минут, потом установятся пакеты пакеты клиентской части (~5 минут). В случае возникновения проблем смотрим логи.

Таким же образом, в случае необходимости, пакеты можно удалить с клиентских машин. Для этого у msiexec существует ключ -x.



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

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

Советы по разработке оптимальных бизнес-процессов

На партнерском форуме в 2007 году Натальей Евдокимовой был сделан доклад на тему оптимальной разработки бизнес-процессов. Данная тема периодически всплывает в запросах в службу ТП. И я решил поднять его, немного дополнив.


Как это работает.
Модуль "Управление процессами" функционально состоит из двух частей: сервиса DocsVision Workflow Service, и процесса ExecLogic.exe. Сервис осуществляет подготовку процесса к запуску и другие системные операции. ExecLogic.exe непосредственно выполняет функции. Если посмотреть загрузку процессора через Performance Monitor, то можно увидеть, что нагрузка идет пиками.




Происходит это потому, что ExecLogic обрабатывает пакеты функций не постоянно, а периодами - тиками. Последовательность действий такова.

  • Построение списка активных процессов
  • Сортировка процессов по приоритетам
  • Исполнение процессов по приоритетам
  • Проверка нормативного времени тика
Процессы могут различаться по степени их важности, и в случае если невозможно выполнить все процессы сразу и быстро часто хочется чтобы что-то выполнилось в первую очередь: именно для этого и была введена возможность приоритизации процессов. Существует 5 уровней приоритета процессов:

  • Наивысший (процесс гарантированно обрабатывается каждый тик)
  • Высокий (процесс гарантированно обрабатывается каждый третий тик)
  • Обычный (процесс гарантированно обрабатывается каждый пятый тик)
  • Низкий (процесс гарантированно обрабатывается каждый седьмой тик)
  • Самый низкий (процесс гарантированно обрабатывается каждый девятый тик)
Слово «гарантированно» не означает то, что процесс с приоритетом «Обычный» будет обрабатываться только на каждый третий тик: в случае, если не будет процессов с более высоким приоритетом он может быть обработан и раньше, хотя бы каждый тик, как процесс с наивысшим приоритетом.
С введением приоритизации связано введение возможности ограничения времени тика . Этот параметр можно указать в консоли настройки, задается в секундах. Этот параметр задает промежуток времени, при превышении которого обработка процессов прекращается и начинается ожидание следующего тика. На практике реальное время тика может быть несколько выше введенного желаемого. Это связано с тем, что некоторые могут выполняться довольно продолжительное (а самое главное совершенно непредсказуемое по длительности) время, причем прерывать их выполнение Workflow не имеет права. Также, тик может выполняться дольше чем хотелось бы в случае, если в системе присутствует большое количество процессов с наивысшим приоритетом (или приравненных к ним): тик не прерывается до тех пор пока не будут обработаны все процессы с наивысшим приоритетом. К процессам приравненным к процессам с наивысшим приоритетом относятся процессы для которых подошло время их гарантированной обработки (каждый третий тик для обычного приоритета и так далее…).

Параметрами обработки можно управлять. Назначение и подробное описание приведено в статье http://dvprofessionals.blogspot.com/2009/08/workflow.html

Немного о функциях.
Условно функции можно разделить на 3 группы:


  1. Функции, которые работают с данными в базе: мониторинг, универсальный обмен, и т.п. Таких большинство.
  2. Функции, которые работают со внешними системами: мониторинг 1С, CRM и т.д
  3. Функции, который работают только на стороне Workflow: объединение, разветвление, сценарий (в некоторых случаях)
Понятно, что основную роль в производительности может играть отклик сервера DocsVision.

Как правильно стоить схему процесса.
 Операции получения данных и преобразования переменных следует объединить в одну функцию универсального обмена данными
Неправильно:





Правильно:





К свойству нужно обращаться по имени, а не по индексу.
Не правильно:










Правильно:






Необходимо делать параллельные ветки, там где это возможно.
Не оптимально:




Оптимально:








Старайтесь не использовать историю мониторинга, а заменять её дополнительными условиями поиска. Например, есть задача обработки карточек. Создан родительский процесс, который осуществляет мониторинг, и передает найденную карточку в дочерний асинхронный подпроцесс. Нужно, чтобы переданная карточка второй раз не искалась мониторингом. В этом случае эффективнее добавить в карточку свойство типа "Да/Нет", в котором устанавливать "Да", если карточка ушла в обработку.  И на данное свойство добавить условие .






У циклических процессов, которые работают постоянно, отключайте ведение журнала. А так же удаляйте все завершенные подпроцессы. Настроить автоматическое удаление можно в свойствах процесса, на вкладке "Дополнительно", по кнопке "Завершение процесса".


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






Снижайте количество поисков. Если функция мониторинга должна вернуть набор карточек, то лучше возвращать значение в переменную - коллекцию. А затем в цикле получать каждый элемент коллекции.

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


Конец. Внимание опрос. Есть желание написать подробно, как читать сообщения в журнале Workflow. Но поскольку в версии 4.3 структура журнала поменялась, то нужно делать два описания, либо под какую-то наиболее актуальную версию. Вопрос в том, какая версия для вас актуальна: 4.3. или все, что раньше?

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

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

Получение значения из справочника в XSLT преобразовании

В DocsVision существует возможность создавать XSLT преобразования для создания печатной формы - диалог "Экспорт и печать" карточки. Принцип работы таков. Печатная форма - это HTML документ, который получается следующим образом:
XML карточки + XSLT преобразование = HTML.
При этом нужно отметить, что для формирования печатной формы берется не просто XML карточки, а XML карточки + связанные карточки + связанные строки из справочников.


На рисунке показан пример xml со связанными карточки внутреннего документа. В xml есть данные карточки, данные связанной сильной ссылкой карточки "Список файлов", и данные из справочника сотрудников. Важно отметить, что из справочника сотрудников получена только одна строка, на которую ссылается карточка документа.




Итак:
1. Присоединяются только карточки на которые ссылается поле типа refcardid
 




2. Присоединяются строки из справочников, на которые ссылается поле типа refid



Рассмотрим как получить данные из справочника. Пример, необходимо вывести имя и учетную запись регистратора карточки внутреннего документа. Поскольку строка из справочника сотрудников есть в xml то нужно получить её данные по идентификатору. XPath адрес должед быть таким:


//EmployeesRow[@RowID=//CardOrd[1]/MainInfo/@RegisteredBy]/@AccountName
Т.е. получаем строку из данных справочника, у которой RowID = значению из поля RegisteredBy.

Полный текст шаблона:


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/">
  
   
    <link href="%ServerUrl%/StorageServer/Fetch.aspx?BaseName=%BaseName%&amp;TransformID=B5344DA1-D28F-4024-8798-3FC3992C94B7" rel="stylesheet" type="text/css"></link>
    <title>&lt;xsl:value-of select="//CardOrd[1]/MainInfo/@Name"/&gt;</title>
   
   
     <xsl:value-of select="//EmployeesRow[@RowID=//CardOrd[1]/MainInfo/@RegisteredBy]/@AccountName">
     <xsl:value-of select="//EmployeesRow[@RowID=//CardOrd[1]/MainInfo/@RegisteredBy]/@LastName">
 
   
  
 </xsl:value-of>
</xsl:value-of>
</xsl:template></xsl:stylesheet>

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

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

Модернизация панели "Читатели" в блоге


Совершенно неожиданно для меня, Blogger модернизировал панель "Читатели". Теперь по нажатию на иконку можно отправить сообщение, переслать ссылку, пригласить друга и опубликовать ссылку в какой-либо сети.
Пользуйтесь :) Читать дальше

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

Получение идентификатора пользователя, который открыл карточку

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


Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)

        'ID Справочника сотрудников и секции "Сотрудники"
        Const DIC_STAFF = "6710B92A-E148-4363-8A6F-1AA0EB18936C"
        Const SEC_STAFF = "DBC8AE9D-C1D2-4D5E-978B-339D22B32482"
        
        Dim Groups, oRows, FindUserID

        'Получаем пользователя, который открыл карточку
        Set RefStaff = UserSession.CardManager.DictionaryData(DIC_STAFF)
        Set oRows = RefStaff.Sections.Item(SEC_STAFF).FindRows( _
         "AccountNameSTREQ'" & _
         UserSession.Properties("AccountName") & "'")

        If oRows.Count = 0 Then
            'Не найден
            MsgBox ("ОШИБКА! Невозможно найти вашу учетную запись в справочнике")
            Exit Function
        End If
    
        'Это ID пользователя, открывшего карточку
        FindUserID = oRows.Item(0).ID
End Function



Развитие темы. Определение, входит ли пользователь в определенную группу.
Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)
'ID Справочника сотрудников и секции "Сотрудники"
Const DIC_STAFF = "6710B92A-E148-4363-8A6F-1AA0EB18936C"
Const SEC_STAFF = "DBC8AE9D-C1D2-4D5E-978B-339D22B32482"

Dim Groups, oRows, FindUserID

'Получаем пользователя, который открыл карточку
Set RefStaff = UserSession.CardManager.DictionaryData(DIC_STAFF)
'Поиск по справочнику сотрудников
Set oRows = RefStaff.Sections.Item(SEC_STAFF).FindRows( _
"AccountNameSTREQ'" & _
UserSession.Properties("AccountName") & "'")
If oRows.Count = 0 Then
'Не найден
MsgBox ("ОШИБКА! Невозможно найти вашу учетную запись в справочнике")
Exit Function
End If

'Это ID пользователя, открывшего карточку
FindUserID = oRows.Item(0).ID

'Поиск в группах
Dim StaffObject
Set StaffObject = CreateObject("TOHelperObjects.StaffObject")
Set StaffObject.UserSession = UserSession

Const GROUPID = "ID группы"
If StaffObject.IsEmployeeInGroup(FindUserID, GROUPID) = True Then
'Пользователь, открывающий карточку - в группе.
End If
Set StaffObject = Nothing
End Function

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

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

Открытие приложенного документа Word и перенос некоторых полей в документ

Данный скрипт был создан еще для 3.6. Думаю он будет полезен и сейчас.

Пример взаимодействия с внешним приложением MS Word. Рассматриваемый скрипт карточки открывает приложенный файл *.doc, и производит вставку значений полей секции «Основная информация» в текст документа.
Вставка производится следующим образом: В тексте документа размещены названия полей в виде @Name или @Digest – т.н. теги. Скрипт производит замену этих тегов на значения из полей с таким же названием.



Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)
    'Открываем файл, присоединенный к карточке
    
    'Создается объект FileList
    Dim sFilesID
    sFilesID = CardDa-ta.Sections.Item(CardData.Type.Sections.GetByAlias("MainInfo").ID).FirstRow.Value("FilesID") & ""
    If sFilesID = vbNullString Then Exit Function
    Dim oFileList
    Set oFileList = CreateObject("TOFileList.FileList")
    Set oFileList.UserSession = UserSession
    
    Dim rows
    Set rows = CardDa-ta.Sections.Item(CardData.Type.Sections.GetByAlias("Properties").ID).rows
    Set oFileList.PropertyRows = rows
    
    oFileList.ID = sFilesID
    
    'Количество файлов
    Dim n: n = oFileList.FileRefs.Count
    
    'Если нет файлов, то выход
    If n = 0 Then
        Exit Function
    End If

    'Открытие файла
    Dim oFile
    Set oFile = oFileList.FileRefs.Item(1)
    oFile.OpenFile

    'Получаем объект WORD
    Dim objWord
    Set objWord = GetObject(, "Word.Application")
    
    'Меняем
    Dim arrFields, strField, oFlag
    arrFields = Array("Name", "Digest") 'Здесь перечислены все теги и поля
    Dim rngStory
    Dim oMainRow
    Set oMainRow = CardData.Sections.Item(CardData.Type.Sections.GetByAlias("MainInfo").ID).FirstRow
        
    Do
        oFlag = False
        For Each strField In arrFields
            objWord.Selection.Start = 0
            objWord.Selection.End = 0
            objWord.Selection.Find.Forward = True
            If objWord.Selection.Find.Execute("@" & strField) = True Then
                If IsNull(oMainRow.Value(strField)) Then
                    objWord.Selection.TypeText (" ")
                Else
                    objWord.Selection.TypeText (oMainRow.Value(strField))
                End If
              oFlag = True
            End If
        Next
    Loop Until oFlag = False

  
    Set oFileList = Nothing
End Function


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

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

Обновление мастера сбора данных при сбоях


Выпущена новая версия мастера сбора данных при сбоях.

Скачать можно по ссылке.
Либо воспользовавшись кнопкой "Проверить наличие обновлений" Читать дальше

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

Права на ярлыки в DocsVision 4.3

В документе "Новое в DocsVision 4.3" есть такая строчка "Отменено назначение прав на ярлык карточки." Она означает, что ярлыки (строки в секции "Ярлыки") не имеют описателей прав. Следовательно при адаптации решения нужно убрать назначение прав на ярлыки, если оно использовалось. Права с папки наследуются непосредственно на карточки. Читать дальше

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

Пример. Получение пользователей, которые подписали файл.

Небольшой пример на VB. Получение пользователей, которые подписали файл.

Set m_oAccessManager = UserSession.AccessManager
Set m_oFile = UserSession.FileManager.File(FileID)

' oSignRows - DVObjectManager.InfoRowCollection
Set oSignRows = m_oAccessManager.ListCryptObjects(m_oFile.ID, 0)

For Each oSignRow In oSignRows
    ' кто подписал?
    MsgBox oSignRow.Value("AccountName")

Next oSignRow

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

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

Несколько примеров бизнес-процессов, работающих со свойствами карточек

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

1. Добавление простого свойства типа строка.xml - пример создания простого свойства типа Строка, Целое, Дата/Время, сотрудник и т.п.Если свойства с таким названием нет в карточке, оно будет создано. Если есть, будет изменено его значение.

2. Создаем свойство типа карточка.xml - создание свойств других типов, на примере свойства типа Карточка.Необходимо добавить строку в секцию Свойства, затем записать в эту строку необходимые значения. Обязательными являются - Порядковый номер, Тип свойства, Название свойства, Значение свойства, Отображаемое значение.

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

4. Создаем свойство типа Перечисление.xml
Шаги по созданию свойства, записи его типа, названия аналогичны примеру 2.
Возможные значения свойства данного типа хранятся в подчиненной по отношению к секции Свойства секции Значения перечисления. Чтобы создать вариант перечисления, необходимо добавить новую строку в эту секцию и заполнить ID значения (соответствует Значению при заполнении перечисления в карточке из UI) и Название значения (соответствует Отображаемому значению). Если необходимо, чтобы в свойстве был выбран определенный вариант перечисления, необходимо заполнить Значение свойства строки секции Свойства одним из ID значения и Отображаемое значение - соответствующим Названием значения из секции Значения перечисления (В примере выбран 1-й вариант - value 1).

5. Добавляем значения в коллекционное свойство типа Подразделение.xml Отличие свойства-коллекции от обычного свойства в том, что значения свойства хранятся не в поле Значение свойства в секции Свойства, а в подчиненной секции Выбранные значения. Соответственно, чтобы добавить новое значение необходимо добавить строку в эту секцию и заполнить поля Порядок и Выбранное значение.Чтобы сформировать новое Отображаемое значение свойства, необходимо получить исходное отображаемое значение, название добавляемого подразделения и объединить их универсальной функцией Объединение строк с разделителем.

6. Получаем значения свойства коллекции типа Сотрудник.xml
Аналогично предыдущим примерам ищем свойство по названию мониторингом, далее получаем все строки секции Выбранные значения, в цикле из каждой строки секции получаем сотрудника, добавляем сотрудника в переменную-коллекцию.
Читать дальше

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

Отключение FileStream

Начиная с версии 4.1 появилась возможность при использовании СУБД MS SQL Server 2008 выгружать файлы на диск с использованием технологии FileStream.

В консоли настройки сейчас нет кнопки, которая отключает выгрузку FileStream, и возвращает файлы в базу. Если в этом есть необходимость, то воспользуйтесь следующими скриптами (скачать).

Последовательность выполнения

1.    CopyFileStreamToDb.sql – копируются данные файлов из FileStream-хранилища в базу данных
2.    RemoveFileStream.sql – удаляется файловая группа с Filestream Читать дальше

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

Генерация класса с константами по схеме карточки

В тестовом проекте библиотеки карточек есть интересный комментарий, в классе с константами.



Что это за инструмент, который генерирует код автоматически, я опишу в данной статье.


Инструментов два:
  • DVConstGenerator – по XML-описанию карточки создает cs-файл с константами (идентификаторы секций, названия полей)
  • ObjectModelGenerator – по  XML-описанию карточки создает cs-файл с объектной моделью для работы с данными. Объектная модель включает в себя также и константы, поэтому при использовании этой утилиты, предыдущая уже не требуется.
Использование утилит.

1. Запуск из командной строки.
Каждая утилита имеет мини справку по своим параметрам. Достаточно запустить с ключом "/?".
Пример запуска:
ConstGenerator.exe /i:SLA.xml /l:CS
или
ObjectModelGenerator.exe /in:SLA.xml

2. Интеграция с Visual Studio 2005/2008
Для этого нужно зарегистрировать ее библиотеку (*.dll) командой:


regasm.exe <путь к dll-файлу> /codebase

Далее нужно включить в состав проекта файл с XML-описанием (схемой) карточки. В свойствах файла, указать CustomToolName

  • DVConstGenerator – для генератора констант
  • DVAdapterGenerator – для генератора объектной модели

В поле Custom tool namespace можно отдельно специфицировать пространство имен, которое будет использоваться в сгенерированном файле.

После этого правой кнопкной мыши на XML-файле вызвать команду Run custom tool. Будет сгенерирован cs-файл.

Скачать утилиты

Известная особенность: код генерируется только для C#, для VB.net, хоть такой параметр и есть, код не создается. (кстати, если нужно перевести код, то есть хороший переводчик: http://www.developerfusion.com/tools/convert/csharp-to-vb/) Читать дальше

Оставить комментарий (всего: 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)

Интеграция DocsVision и Outlook

Как можно скрестить DocsVision и Outlook, чтобы работая только с одним приложением выполнять операции сразу в двух.


Опыт первый. Работаем с DocsVision через Outlook.

Создаем папку в Outlook


В свойствах на вкладке "Домашняя страница" указываем адрес сервера DocsVision.



Готово. В папке теперь показывается DocsVision Навигатор.



Опыт второй. "Переносим" Outlook внутрь DocsVision
Данный вариант требует, чтобы в организации был сервер Exchange и развернут Outlook Web Access

Создаем папку в DocsVision и в свойствах указываем адрес Outlook Web Access и опцию "По умолчанию отображать URL"


Готово. В папке теперь показывается Outlook.




Так же можно сделать папку с любым почтовым сервером. Например с GMail.


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

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