Формы редактирования документов

Если требуемый уровень настройки внешнего вида формы редактирования документов превышает возможности, предлагаемые системой Ultima Businessware® (см. раздел Системные инструменты настройки внешнего вида экранных форм), можно создать свою форму редактирования любого документа.

Для упрощения работы в системе реализована следующая иерархия классов:

DevBookmark_Scripts BaseEditForm

tree DevBookmark_Scripts BaseDocumentEditForm

Для реализации формы редактирования документа необходимо унаследовать ее от формы BaseDocumentEditForm и реализовать интерфейс IRecordEditor<Т>, где Т – тип документа.

Система для редактирования документа будет искать форму, реализующую интерфейс IRecordEditor<T>. Если в системе не окажется ни одной такой формы, откроется базовая форма редактирования документа. Если в системе окажется более одной такой формы, то система выдаст ошибку. Это позволяет избежать неочевидного поведения системы при ошибке настройки системы администратором.

Прикладной разработчик может запросить открытие формы редактирования документа через класс DevBookmark_Scripts DocumentHelper с помощью методов EditDocument<T> и BeginEditDocument<T>, где Т – тип документа, форму редактирования которого требуется открыть. Методы открывают модальную и немодальную формы редактирования соответственно.

Рассмотрим создание формы редактирования документов на примере типа документов Purchase:

Example_CreateDocEdit1

В проекте модуля создаем новый объект Windows Form, наследуем его от класса BaseDocumentEditForm (из пространства имен Ultima.Client.Documents) и реализуем интерфейс IRecordEditor<T>:

public partial class PurchaseEditForm : BaseDocumentEditFormIRecordEditor<PurchaseDocument>

{

 public PurchaseEditForm()

 {

         InitializeComponent();

 }

}

Example_CreateDocEdit2

К созданной форме необходимо подключить источник данных. Для этого добавляем на нее элемент управления bindingSource и подключаем к нему объект метаданных Ultima.Metadata.PurchaseDocument:

Example_CreateDocEdit3

Example_CreateDictList8

Example_CreateDocEdit4

Назначаем в параметрах формы добавленный элемент bindingSource в качестве источника данных DataSourse.

Теперь можно добавлять на форму элементы управления. Чтобы разделить свойства документа и его табличную часть, используем элемент управления SplitContainerControl библиотеки DevExpress. Каждый из элементов управления, предназначенный для отображения свойств документа, через свойство элемента DataBindings -> EditValue подключаем к соответствующим свойствам справочника в bindingSorce:

Example_CreateDocEdit5

Для элементов управления DictionaryLookupEdit, с помощью которых отображаются склад (StoreID) и поставщик (SupplierID), дополнительно выбираем в свойстве DictionaryType тип справочника, записи которого они отображают Ultima.Metadata.Store и Ultima.Metadata.Agent соответственно.

В правой части контейнера SplitContainerControl размещаем элемент управления BaseTablePartGridPanel, предназначенный для отображения и редактирования данных табличной части документа. Задаем для него тип табличной части через параметр TablePartTypePurchaseArticleTablePartRow. Для его таблицы (элемент управления GridControl библиотеки DevExpress) подключаем в качестве источника данных табличную часть, выбирая ее через добавленный ранее bindingSource:

Example_CreateDocEdit6

По завершении компилируем проект, копируем созданные библиотеки в папку модуля в клиентском приложении Client/ClientModules/TradeTestSolution, перезагружаем метаданные и открываем созданную форму редактирования документа:

Example_CreateDocEdit7