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)
Показаны сообщения с ярлыком Разработка решений. Показать все сообщения
Показаны сообщения с ярлыком Разработка решений. Показать все сообщения

Потеря оформления текста задания, отправляемого как HTML

Симптом.
Настроена отправка текста задания в виде HTML (функция "Задание" бизнес-процесса). Создано собственное преобразование для текста задания. При этом письмо приходит без шаблона оформления.

В чем причина.
Причина заключается в некоторых параметрах оформления шаблона, которые мешают применению его к xml данным.


Что нужно сделать.
В тексте шаблона нужно заменить строку
<body style="padding-top: 0px; padding-left: 0px">
на
<body>
Читать дальше

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

Работа с файлами в карточках конструктора

В карточках конструктора решений для управления файлами используется свойство «Список файлов». Я приведу несколько примеров кода, в которых демонстрируется, как работать с этим элементом управления программно. Для всех операций понадобится получить элемент управления файлами.



//создаем экземпляр вспомогательного класса, он нам понадобится для поиска элемента свойства
LayoutHelper layoutHelper = new LayoutHelper(CardControl.LayoutControl, CardControl.BarManager, Session, CardData.Type.Id);
//получаем элемент свойства
ICustomPropertyItem propitem = layoutHelper.GetCustomPropertyItem("fileList");
//если он null, то выходим
if(propitem == null)
return;
//получаем элемент управления файлами
FileListView fileListView = propitem.PropertyControl as DocsVision.BackOffice.View.WinForms.Controls.FileListView;
//если он null (вдруг это свойство не "Список файлов"), то выходим.
if(fileListView == null)
return;


После того как элемент управления файлами получен, можно выполнять интересующие нас операции.

1)Добавление файла.

a) явно передавая пути к файлам, которые необходимо добавить в список


//создаем переменную, типа "Список", записываем в нее пути к файлам, которые нужно добавить
System.Collections.Generic.List files = new System.Collections.Generic.List();
//например, в данном случае добавляется всего 1 файл (указывается полный путь к файлу)
files.Add(@"c:\dvmanagement.lic");
//вызываем метод добавления файлов у элемента управления файлами
fileListView.AddFiles(files);

//в этом методе есть небольшая недоработка, чтобы ее обойти, воспользуемся средствами рефлексии
//вызываем Protected метод OnListChanged с помощью Reflection, после его вызова элемент управления понимает, что нужно сохранять данные
Type filiListViewType = fileListView.GetType().BaseType;
if(filiListViewType == null)
return;
MethodInfo onListChangedMethidInfo = filiListViewType.GetMethod("OnListChanged", BindingFlags.Instance | BindingFlags.NonPublic);
if(onListChangedMethidInfo == null)
return;
onListChangedMethidInfo.Invoke(fileListView, new object[1]{ EventArgs.Empty });


б) с помощью выбора файлов с файловой системы

//вызываем метод добавления файлов у элемента управления файлами. появится диалог выбора файлов. после нажатия на Ok файлы добавятся в список.
fileListView.AddFiles();

в) с помощью выбора карточки файла из DocsVision

//будет показан диалог выбора карточки файла. параметр false определяет, показывать только карточки, не являющиеся шаблонами
fileListView.AddCardFile(false)


2) Удаление файла(ов)

Удалить выбранные в списке файлы можно следующим образом

fileListView.DeleteFiles();

3) Сохранение файлов на файловую систему

a) всех файлов

fileListView.SaveFiles();

б) выбранных файлов

fileListView.SaveFiles(fileListView.SelectedFileReferences);

4) Открытие файла

//булевский флаг readOnly определяет, открывать файл на редактирование или только чтение
fileListView.OpenSelectedFile(readOnly);

5) Блокировка выделенного файла

fileListView.CheckOut();

6) Снятие блокировки c выделенного файла с сохранением изменений

fileListView.CheckIn();

7) Снятие блокировки c выделенного файла с потерей изменений

fileListView.UndoCheckOut();

8) Добавление комментария к выделенному файлу

//будет показан специальный диалог
fileListView.AddFileComment();

9) Переименование выделенного файла

fileListView.Rename();

10) Вставить файл из буфера клавиатуры

fileListView.PasteFromClipboard();


Примечание.

1) Необходимо добавить ссылки на сборки
DocsVision.TakeOffice.ObjectModel.dll
DocsVision.Platform.CardLib.dll
DevExpress.Utils.v9.2.dll
DevExpress.Data.v9.2.dll
DevExpress.XtraLayout.v9.2.dll


2) Необходимо в код скрипта в заголовок вставить набор директив "using"
using System;
using System.Reflection;
using System.Windows.Forms;
using DocsVision.BackOffice.Model;
using DocsVision.BackOffice.Model.CardProperties.Entities;
using DocsVision.BackOffice.View.WinForms;
using DocsVision.BackOffice.View.WinForms.Controls;
using DocsVision.BackOffice.View.WinForms.PropertyControls;
using DocsVision.BackOffice.View.WinForms.LayoutItems;
using DocsVision.BackOffice.View.WinForms.Helpers;
using DocsVision.TakeOffice.ObjectModel;
using DocsVision.TakeOffice.ObjectModel.FileList;
using DocsVision.TakeOffice.ObjectModel.File;
using DocsVision.Platform.ObjectManager;
Читать дальше

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

Устранение неисправностей при установке "Расширений SharePoint" на SharePoint 2010

В SharePoint 2010 доработаны средства определения неисправностей. Очень хороший доклад на эту тему http://www.techdays.ru/videos/2765.html

Но я хочу выделить из этого одну часть. При возникновении ошибок с компонентами модуля "Расширения SharePoint, сайт отображает окно:


В этом случае необходимо открыть журнал SharePoint, который расположен в папке Programm Files\Common Files\Microsoft Shared\WebServer Extensions\14\LOGS. В данном журнале нужно найти запись об ошибке соответствующую "Идентификатору взаимосвязи" (Correlation ID).

В тексте ошибки будет более детальное описание.
Читать дальше

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

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

Добрый день!


Эта заметка предназначена для тех, кто пишет код для работы с данными карточек DV с помощью объектной модели, предоставляемой платформой (сборка DocsVision.Platform.ObjectManager.dll).
Практически сразу разработчик сталкивается с необходимостью искать в документации или с помощью утилиты CardManager какие-то непонятные гуиды и прочие строковые константы, используемые в описании карточки. Естественно, эти строки оформляются как константы и т.д., но за актуальностью значений приходится следить, опечатки обнаруживаются только на этапе тестирования (а хотелось бы при компиляции).
Очевидно, с этими трудностями когда то столкнулись и разработчики DV и чтобы облегчить свое существование разработали инструмент, генерирующий удобную объектную модель для доступа к константам описания карточки. Этот инструмент можно использовать из командной строки или интегрировать в MS Visual Studio версии 8.0 - 10.0. После этого про гуиды можно больше не вспоминать!

Пример файла, сгенерированного с помощью этого инструмента можно найти в проекте, предоставляемом вместе с руководством разработчика (например, Samples\Cards\TestCardLib\Test\Constants\TestCard.cs)

Для запуска из командной строки надо воспользоваться командой
ConstGenerator.exe /i:YourCard.xml

Список параметров командной строки можно посмотреть запустив генератор с ключом /?:
ConstGenerator.exe /?

Для интеграции с MS VS надо зарегистрировать сборку с помощью команды regasm:
regasm ConstGeneratorTool.dll /codebase

После этого надо добавить в проект файл с описанием карточки и указать в поле CustomTool значение DVConstGenerator:


Генерация будет выполняться автоматически при сохранении файла с описанием карточки или по команде контекстного меню RunCustomTool :


Скачать генератор констант можно тут

PS. Эта тема уже освещалась в блоге: http://dvprofessionals.blogspot.com/2009/11/blog-post.html но, к сожалению, осталась незамеченной ...
Кроме того, в новой версии генератора констант добавлена регистрация в 10-й студии.
Читать дальше

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

Пояснение к возвращаемым значениям скрипта карточки на кнопку-функцию

Скрипт карточки на кнопку-функцию может вернуть набор значений, которые влияют на дальнейшую логику работы карточки. Об этом подробно написано в документации разработчика. Я же хочу немного прокомментировать данные значения. Пояснения актуальны для DocsVision 4.5, 4.5 SR1 и 4.5 SR2

1 - кнопка становится недоступной
- кнопка-функция блокируется, и становится серой

2 - обновить элементы управления карточки
- Данные из CardData карточки будут отображены в элементах управления формы. Во всех полях, за исключением полей на основной вкладке. На ней они останутся без изменения.

4 - установка режима “только чтение” для карточки
- карточка будет переведена в режим "Только чтение". Пользователь не сможет внести изменения в карточку

8 - закрытие карточки
- карточка будет закрыта. При этом если в ней были сделаны изменения, то пользователю будет отображен диалог с предложением сохранения изменений.
Так же будет вызвано событие "закрытие карточки"

16 — немедленное сохранение изменений
- данные из CardData карточки будут отправлены на сервер.

32 — установка флага изменения данных карточки
- при возврате данного значения карточка будет считать, что в неё внесены изменения. При закрытии вызовется соответствующий диалог.

64 — установка флага сохранения изменений
- карточка будет считать, что все изменения сохранены. Диалог при закрытии не будет отбражен. Значения 32 и 64 исключают друг друга.

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

4096 – загрузить номер в карточку (если он был изменен)
- карточка отобразит измененный номер. Т.к. данное поле находится на основной вкладке, то для того, чтобы состояние отобразилось нужен данный флаг
Читать дальше

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

Програмное выделение номера в карточках конструктора решений

В карточках конструктора решений есть свойство типа "Нумератор". Оно позволяет пользователю выделить номер. Но как решить задачу автоматического выделения номера, например, при открытии карточки?

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


Обработчик события AfterActivate - будет выполнен сразу после открытия карточки.

на С#
// обработчик события AfterActivate - будет выполнен сразу после открытия карточки
private void cardControl_AfterActivate(System.Object sender, System.EventArgs e)
{
// получаем свойство типа "Нумератор". Нужно указать название свойства
var numeratorProperty = GetCardProperty("Регистрационный номер");
// если номер уже задан, то выходим из метода, ничего не делая
if (numeratorProperty.Value != null)
return;
// получаем атрибут правила и его значение (идентификатор)
var ruleAttribute = numeratorProperty.Description.GetAttribute("Rule");
Guid? ruleId = (Guid?)ruleAttribute.Value;
// с помощью преобразователя данных создаем новый номер по правилу
var numeratorMapper = new DocsVision.BackOffice.Model.CardProperties.DataAccess.NumeratorNumberMapper(
Session, CardData.Id, DomainObject.NumbersSectionId.Value);
var number = numeratorMapper.Create(ruleId.Value);
// устанавливаем новое значение свойства
numeratorProperty.Value = number;
// обновляем элементы карточки, чтобы отобразить новое значение
RefreshControls();
}

// вспомогательный метод поиска элемента по названию
private CardProperty GetCardProperty(string propertyName)
{
foreach (CardProperty property in PropertyController.CardProperties)
{
if (property.Name == propertyName)
return property;
}
return null;
}

Vb.net

Private Sub cardControl_AfterActivate(sender As System.Object, e As System.EventArgs)
 
  ' получаем свойство типа "Нумератор"
  Dim numeratorProperty AS DocsVision.BackOffice.Model.CardProperties.Entities.CardProperty  = GetCardProperty("Регистрационный номер")
  ' если номер уже задан, то выходим из метода, ничего не делая

  If numeratorProperty.Value IsNot Nothing Then
   Return
  End If
  ' получаем атрибут правила и его значение (идентификатор)
  Dim ruleAttribute as DocsVision.BackOffice.Model.Layouts.Entities.PropertyAttribute = numeratorProperty.Description.GetAttribute("Rule")
  
  Dim ruleId As System.Nullable(Of Guid) = CType(ruleAttribute.Value, System.Nullable(Of Guid))
  ' с помощью преобразователя данных создаем новый номер по правилу
  Dim numeratorMapper as DocsVision.BackOffice.Model.CardProperties.DataAccess.NumeratorNumberMapper  = New DocsVision.BackOffice.Model.CardProperties.DataAccess.NumeratorNumberMapper(me.Session, CardData.Id, DomainObject.NumbersSectionId.Value)
  Dim number as DocsVision.BackOffice.Model.CardProperties.Entities.NumeratorNumber  = numeratorMapper.Create(ruleId.Value)
  ' устанавливаем новое значение свойства
  numeratorProperty.Value = number
  ' обновляем элементы карточки, чтобы отобразить новое значение

  me.PropertyController.RefreshControls
  
    End Sub


 ' вспомогательный метод поиска элемента по названию
 Private Function GetCardProperty(propertyName As String) As DocsVision.BackOffice.Model.CardProperties.Entities.CardProperty 
  For Each [property] As DocsVision.BackOffice.Model.CardProperties.Entities.CardProperty In PropertyController.CardProperties
   If [property].Name = propertyName Then
    Return [property]
   End If
  Next
  Return Nothing
 End Function
Читать дальше

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

Значения по умолчанию в поле типа Дата

В конструкторе решений есть поля типа "Дата", для которого можно выбрать значение по умолчанию - "Сегодня". Но если нужно добавить дату со смещением? Например, как добавить несколько дней?

Для этого достаточно указать значение

Сегодня+NД

где N - нужное количество дней Читать дальше

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

Контроль за временем отклика сервера.


В версии DocsVision 4.5 есть встроенный функционал проверки длительности выполнения определенных операций. Настройка выполняется, как обычно, в консоли, параметр "Время отклика сервера"

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

Как быть пользователям предыдущих версий. Конечно, переходить на 4.5 :)
Но можно также сделать подобный функционал проверки в виде внешней утилиты.

Каким функционалом должен обладать данный инструмент.
1. Проверять время создания сессии
2. Проверять длительность получения данных карточки
3. Проверять время выполнения поиска и т.п.

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

Пример подобной утилиты я выложил на ftp. В архиве утилита, скомпилированная для DocsVision 4.1, инструкция, и исходный код.


Комментарий для желающих доработать. Основные методы проверки реализованы в библиотеке DVCheckObjects. Т.е. можно написать, например, консольное приложение, которое будет использовать данную библиотеку, и назначить это приложение как задачу в Task Scheduler на сервере. Читать дальше

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

Програмное завершение задания бизнес-процесса

Програмно завершить задание бизнес-процесса можно следующим образом

1. В секции "Performing"  установить
    а) в поле TaskState значение 5 (исполнено)
    б) в поле ActualEndDate текущую дату (дату завершения)
2. В секции "CurrentPerformer" установить
    а)  в поле PerformerState значение 5 (исполнено), если задание было делегировано, то 13 (возврат с делегирования)

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

Так же нужно завершить задания контроллеров, если такие есть. Читать дальше

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

Сохранение данных карточки в скрипте конструктора решений.

Задача сохранения данных карточки бывает двух видов: сохранение данных из контролов в CardData, и сохранение CardData на сервер.

Решением первого случая будет вызов
this.PropertyController.Save();
Для сохранения данных на сервер нужно воспользоваться неким трюком. Для решения подошел бы метод SaveData, используемый внутри карточки, но он не является открытым (вероятно, это будет изменено в следующих версиях). Сейчас им можно воспользоваться следующим способом:
typeof(BaseCardControl).GetMethod("SaveData", System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance).Invoke(CardControl, null);
Читать дальше

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

Конструктор решений. Запуск бизнес-процесса из скрипта на событие

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

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

Не удалось разобрать SOAP сообщение, полученное от сервера

При открытии Навигатора, либо при программном соединении с сервером вы можете встретить сообщение об ошибке "Не удалось разобрать SOAP сообщение, полученное от сервера". В чем может быть причина.

Данное сообщение об ошибке отображается в случае если ожидается ответ от сервера в определенном формате, а приходит что-то другое.




В каких случаях это может быть?
1. Сервер возвращает какую-либо страницу об ошибке: 403, 404
2. Подключение идет по неверному адресу (к другому сайту и т.п.)

Для проверки нужно под пользователем, под которым производится соединение открыть страницу http://server/DocsVision/StorageServer/StorageServerService.asmx

Либо можете другим способом. Переведите транспортный протокол в консоли настройки на HTTP+SOAP. Затем запустите на машине, на которой работает ваш код какой-либо HTTP отладчик. Например Fiddler. И посмотрите, какой ответ возвращает сервер.

В версии DocsVision 4.5, если соединение происходит через ISA сервер вы сможете столкнуться с другой причиной данной ошибки. Но об этом в следующем посте. Читать дальше

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

Особенности обновления скриптов карточек при переходе на 4.5

Ранее разработчики при отладке скриптов в некоторых случаях встречались с ситуациями, когда поля карточек очищались, либо высвобождался номер.В версии 4.5 была несколько изменена логика поведения скриптов карточек.

1. Из скрипта на событие "изменение свойства" записать новое состояние невозможно, т.к. оно всегда перезаписывается на то, что в данный момент выбрано в UI.
Смену состояния надо делать в скрипте кнопки тулбара (функция), сохранения или закрытия.
Для кнопки тулбара есть специальный флаг DoEvent = 1024 показывающий то, что состояние было изменено.

2. При возврате DoEvent=16 - сохранение изменений, значения из вкладки "Основная" будут записаны из UI в CardData. Т.е. если вы в скрипте на кнопку-функцию изменили, например Название карточки, а затем вернули DoEvent=16, то ваши изменения будут затерты значениями из UI. Решением для такого случая будет перенос кода, который изменяет поля, на событие "сохранение". Событие "Сохранение" теперь вызывается каждый раз при возврате DoEvent=16

3. Если карточка только что создана, а в скрипте на кнопку-функцию вы возвращаете флаг DoEvent=64 (установка признака сохранения), то при первом закрытии так же будет отображаться диалог с предложением сохранить карточку. Дело в том, что в 4.5 при первом сохранении создается ярлык на карточку (чего не делается при указании флага 64). Следовательно появляется данный диалог Читать дальше

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

Настройка дайджеста с помощью XSLT

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

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


Чтобы вывести в дайджест значение поля, необходимо написать конструкцию вида:
<xsl:value-of select="//Имя_секции/@Имя_поля"/>

А для вывода в дайджест значения свойства:

<xsl:value-of select="//CustomPropertiesRow[@Property_Name='Имя свойства']/@Value"/>



Теперь продемонстрируем пример дайджеста,
выводящего данные о названии маршрута и его типе из карточки Маршрута:

Маршрут "<xsl:value-of select="//CustomPropertiesRow[@Property_Name='Название маршрута']/@Value"/>". Тип: <xsl:value-of select="//Main/@RouteType"/>

Результат настройки дайджеста будет выглядеть так:

Маршрут "Для согласования юр.док-ов". Тип: последовательный
Читать дальше

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

Редактирование данных в связанных полях

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

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

Решение.
В карточке документа размещаем 3 основных контрола:
- Выбор маршрута (контрол типа Ссылка на карточку)
- Тип маршрута (контрол типа Группа радиокнопок)
- Согласующие лица (контрол типа Сотрудники)
а также 2 вспомогательных контрола:
- Тип маршрута Вспомогательный (контрол типа Группа радиокнопок)
- Согласующие лица Вспомогательный (контрол типа Сотрудники)
Вспомогательные контролы делаем невидимыми (устанавливая атрибут Visibility в Invisible или EmptySpace) и привязываем по ссылке к соответствующим полям карточки маршрута согласования, выбираемой в контроле Выбор маршрута (как это сделать, описано в руководстве администратора).
Затем пишем следующий скрипт для события ControlValueChanged контрола Выбор маршрута:

using System;
using System.Windows.Forms;
using DocsVision.Platform.ObjectManager;
using DocsVision.BackOffice.View.WinForms;
using DocsVision.BackOffice.Model;
namespace ScriptNamespace
{
public class ScriptClass
{
public void Execute(UserSession session, CardData cardData, baseCardControl cardControl)
{
// Получение значения связанного свойства, которое на форме сделано невидимым.
// Его единственная задача - получить значение по ссылке
object propertyValue = cardControl.PropertyController.GetPropertyValue("Тип маршрута Вспомогательный");
// Запись значения в свойство
cardControl.PropertyController.UpdateProperty("Тип маршрута", propertyValue);
// То же для контрола типа Список сотрудников
object propertyValue2 = cardControl.PropertyController.GetPropertyValue("Согласующие лица Вспомогательный");
cardControl.PropertyController.UpdateProperty("Согласующие лица", propertyValue2);
// Обновление элементов управления
cardControl.PropertyController.RefreshControls();
}
}
}

Все!
Теперь после выбора ссылки на карточку маршрута можно редактировать тип маршрута и список согласующих лиц.
Читать дальше

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

Скрипт для переноса базы DocsVision 4.5 с редакции Enterprise на другую

В продолжение статьи.

Для переноса базы DocsVision 4.5 с MS SQL Enterprice (Developer), на редакцию MS SQL Standart. Необходимо предварительно выполнить специальный скрипт, а затем создавать и переносить бекап.

Скачать скрипт для DocsVision 4.5

Скрипт для предыдущих версий 4.1 и 4.3 Читать дальше

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

Создание ярлыка для DocsVision Навигатор как RemoteApp

Начиная с Windows Server 2008 в службе терминалов появилась возможность создавать ярлыки для приложений терминального сервера. Так называемые RemoteApp (http://technet.microsoft.com/ru-ru/library/cc731340%28WS.10%29.aspx). Это позволяет работать в терминальной сессии с одним определенным приложением. Я опишу как создать такой ярлык для Навигатора DocsVision, тем более, что в этом случае есть особенности.

1. Открываем консоль RemoteApp Manager на сервере терминалов (в данном примере это Windows 2008 R2)


2. В данной консоли выбираем Add RemoteApp Programs


3. В списке приложений нам предлагаю указать нужное. И тут есть одна особенность. Логичным выглядит выбор ярлыка DocsVision Навигатор (C:\Program Files\DocsVision\Platform\4.5\Client\Navigator.url). Однако, здесь поджидает сюрприз. Если создать таким образом RemoteApp, то при открытии пользователем, оно будет закрываться автоматически через 10 - 15 секунд. Эта особенность не связана с ярлыком Навигатора, а происходит с любыми ярлыками на интернет ресурсы. Для проверки можете создать ярлык (*.url) на сайт, например, dvprofessionals.blogspot.com. Разверните его как RemoteApp. Как только пользователи откроют его, он через 10 секунд закроется.

Поэтому в списке приложений нужно указать Internet Explorer (iexplore.exe). Причем, если сервер 64 битный, то нужно выбирать 32 разрядную версию Internet Explorer, которая находится в папке C:\Program Files (x86)\Internet Explorer.


3. После выбора приложения Internet Explorer мастер создания завершит работу. Дальше в списке приложений находим только что созданное и вызываем в контекстном меню свойства.


4. В свойствах указываем опцию Always use the following command-line arguments, и в строке параметров указываем адрес сервера DocsVision


5. Все, осталось только создать ярлык. В свойствах выбираем Create .rdp File


Файл появится в папке C:\Program Files\Packaged Programs. Теперь достаточно передать его пользователям и они смогут работать в терминальной сессии с Навигатором, как с RemoteApp
Читать дальше

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

Загрузка файла имеющего две точки перед расширением в SharePoint

Если через "Универсальную функцию / Шлюз SharePoint / Элемент общего списка / Добавить вложение из файловой системы" попытаться добавить файл у которого есть две точки перед расширением (например test..txt), то при добавлении будет ошибка:

"При выполнении универсальной функции 'Добавить файловое вложение из файловой системы' произошла ошибка.
Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown."

По данному сообщению понять причину нельзя. Однако, она тривиальна. В SharePoint нельзя загрузить такие файлы. Можно попробовать выполнить это непосредственно из интерфейса портала.
Читать дальше

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

Заполнение описания в поле типа "Гиперссылка", элемента общего списка SharePoint

В SharePoint у элемента общего списка может быть поле типа "Гиперссылка". У данного поля есть два свойства: URL и описание.

Как при помощи бизнес-процесса заполнить это описание?

Ответ можно получить, попробовав прочитать это поле. Если значение из данной колонки записать в строковую переменную, то можно увидеть что оно будет сохранено в виде "URL, Описание". Значит, чтобы добавить описание нужно точно такую же строку записать в поле этой колонки.

Воспользуемся ф-цией универсального обмена данными. Источник строка вида "http://docsvision.com, DocsVision". Приемник элемент общего списка документов. В качестве свойства указываем название колонки:

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

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

Заполнение свойств при открытии карточки, созданной в конструкторе решений.

Рассмотрим пример заполнения свойства типа "Текст" при открытии карточки.
При помощи утилиты CardGenerator создано описание библиотеки и карточки. Описание библиотеки загружено в базу. В конструкторе решений на нашу карточку добавляем несколько полей. Пусть это будет карточка сообщения, у которой будут поля "От", типа "Сотрудник", "Кому", типа "Сотрудник", и "Текст", типа "Текст".



Для того, чтобы назначить скрипт на открытие необходимо в окне "Структура разметки" выбрать узел с карточкой, и открыть вкладку "Свойства".
У карточки довольно много свойств и событий. Это может ввести в заблуждение. Например, какое событие использовать для создания скрипта на открытие: CardActivating, CardActivated, или AfterActivate? Для подобного скрипта нужно использовать событие AfterActivate - оно в списке выделено.

Кликаем на это поле, и открывается окно редактирования скрипта.

Разработчики скриптов карточек и сценариев БП, часто просили реализовать подсветку. И при создании Конструктора решений эти пожелания учтены. В нашем редакторе скриптов есть не только подсветка, но и InteliSense!

Для заполнения поля "Текст" пишем такой сценарий.
using System;
using System.Windows.Forms;
using DocsVision.Platform.ObjectManager;
using DocsVision.BackOffice.View.WinForms;
using DocsVision.BackOffice.Model;

namespace ScriptNamespace
{
    public class ScriptClass
    {
        public void Execute(UserSession session, CardData cardData, BaseCardControl cardControl)
        {
            cardControl.PropertyController.UpdateProperty("Текст","Салют!");
            cardControl.PropertyController.RefreshControls();
        }
    }
}
"Refresh" нужен, чтобы поля обновились.
Важно. После внесения изменений в карточку необходимо перезапустить сервисы DocsVision.
Готово. При открытии карточки наше поле заполняется.


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

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