среда, 20 апреля 2011 г.

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

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



//создаем экземпляр вспомогательного класса, он нам понадобится для поиска элемента свойства
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;

среда, 13 апреля 2011 г.

Устранение неисправностей при установке "Расширений 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).

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

среда, 6 апреля 2011 г.

понедельник, 4 апреля 2011 г.

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

Эта заметка будет полезна тем, кто сталкивается с необходимостью писать скрипты в бизнес-процессах DV.
Вы наверняка заметили, что объектная модель, используемая для работы с данными карточки немного отличается от привычной DocsVision.Platform.ObjectManager. От этой неприятности можно легко избавиться. Понять это невозможно, это можно только скопипастить :-)

Пример процесса с правильным скриптом тут
(Не пропустите первую строчку в тексте скрипта :-)