Реализация стандартных интерфейсов
Сначала необходимо создать новый проект — компонент, который будет реализовывать визуальную часть карточки. Проект должен иметь тип "Windows Forms Control Library":
-
DocsVision.Platform.WinForms.dll
— содержит интерфейс для взаимодействия с контейнером карточек (средой, в которой запускаются и работают компоненты карточек), а также элементы управления Docsvision для карточек в среде WinForms.Вместо
DocsVision.Platform.WinForms.dll
, можно использовать библиотекуDocsVision.Platform.WPF.dll
— она позволяет разрабатывать карточки по технологии Windows Presentation Foundation (WPF). При этом основные принципы разработки и интерфейсы остаются точно такими же, как и в случае WinForms. -
DocsVision.Platform.ObjectManager.dll
— библиотека менеджера объектов. В этой библиотеке определены основные интерфейсы для взаимодействия с сервером и другими объектами системы (API).
Следует подключить пространства имён этих сборок в область видимости текущего проекта при помощи директивы using
:
using DocsVision.Platform.WinForms;
using DocsVision.Platform.ObjectManager;
Чтобы карточка могла быть использована совместно с другими компонентами платформы, её программный компонент должен реализовывать набор предопределённых интерфейсов, которые уже реализованы в специальном классе DocsVision.Platform.WinForms.CardControl. Все что остается сделать — это унаследовать основной класс своей карточки от базового класса CardControl
вместо стандартного UserControl
:
public sealed partial class TestCard : CardControl
{
}
-
CardData
— объект данных текущей карточки. -
CardHost
— объект контейнера карточек. -
Session
— текущая сессия пользователя (точка входа к остальным объектам API).
-
FolderID
— идентификатор папки, из которой открыта карточка. -
ShortcutID
— идентификатор ярлыка, из которого открыта карточка. -
ModeID
— идентификатор текущего режима карточки.
Таким, готовый код компонента карточки может выглядеть следующим образом (такая карточка будет создаваться и активироваться, но не несет в себе никакой полезной функциональности):
using System;
using System.Windows.Forms;
using DocsVision.Platform.ObjectManager;
using DocsVision.Platform.WinForms;
namespace DocsVision.Test
{
public sealed partial class TestCard : CardControl
{
public TestCard()
{
InitializeComponent();
}
}
}
Чтобы карточка поддерживала механизм настройки разметок через справочник "Конструктор разметок", а также обладала дополнительной встроенной функциональностью (работа с бизнес-процессами, переходы по автомату состояний) следует унаследовать класс не от CardControl
, а от BaseCardControl
, входящей в сборку DocsVision.BackOffice.WinForms.dll
. Данная сборка входит в клиентский инсталляционный пакет Docsvision и является одним из компонентов библиотеки карточек "Базовые объекты".
Для разработки на основе |
BaseCardControl
в свою очередь унаследован от CardControl
, поэтому все вышеуказанные свойства также будут доступны. Кроме того, в такой карточке автоматически можно использовать элементы объектной модели:
-
BaseObject
— базовый объект карточки, предоставляющий доступ к её основным свойствам. -
ObjectContext
— контекст объектов, позволяющий работать с другими объектами системы. -
Набор сервисов для использования функциональности существующих карточек (каждый сервис также доступен через
ObjectContext
)
BaseCardControl
и Конструктора разметок, требует изменения:[ComVisible(true)]
[Guid("E41A2D89-300A-4649-AAA7-39634E72FD91")]
[ClassInterface(ClassInterfaceType.None)]
[Customizable(true)] (1)
[CardFrameWindowType(typeof(CardFrameForm))]
public partial class SampleCardClass : DocsVision.BackOffice.WinForms.BaseCardControl
{
public SampleCardClass() (2)
{
if (IsInDesignMode())
{
InitializeComponent();
}
}
protected override void OnCardInitialized(EventArgs e) (3)
{
base.OnCardInitialized(e);
InitializeComponent();
}
}
1 | Разрешает настраивать карточку, в т.ч. в "Конструкторе разметок". |
2 | Для отображения элементов управления, определённых в коде, в Конструкторе разметок, необходимо изменить конструктор класса. |
3 | Для работы с разметками карточки, инициализация должна быть осуществлена не в конструкторе, а в методе OnCardInitialized . |
[ComVisible(true)]
[Guid("E41A2D89-300A-4649-AAA7-39634E72FD91")]
[ClassInterface(ClassInterfaceType.None)]
[CardFrameWindowType(typeof(CardFrameForm))]
public partial class SampleCardClass : DocsVision.BackOffice.WinForms.BaseCardControl
{
protected override void OnCardInitialized(EventArgs e)
{
base.OnCardInitialized(e);
InitializeComponent();
}
}