MasterEditorLinkedLinkedLookup
, расположенных в AGE, а не непосредственно на форме редактирования!На формах редактирования необходимо использовать логику Связывание AjaxAutocomplete и AjaxLookup.
Постановка задачи
Есть диаграмма классов:
Необходимо при добавлении СтрокиПланаПогашения
дать возможность
- либо выбрать
БанковскуюКарту
из списка, - либо вбить
НомерКарты
вручную, и- при совпадении с существующим номером проставить ссылку на
БанковскуюКарту
автоматически, - а при несовпадении просто сохранить введенную пользователем информацию в поле
НомерКарты
.
- при совпадении с существующим номером проставить ссылку на
Подключение и настройка
Алгоритм подключения и настройки LinkedLookup
:
- Настроить представление детейла.
- Добавить настройку в WebControlProvider.
- Добавить настройку в WebBinder.
- Настроить LookUp при помощи
LookUpSettings
Настройка представления детейла
В E-представлении детейла необходимо добавить все необходимые поля (обязательно добавить БанковскуюКарту
, БанковскаяКарта.Номер
и НомерКарты
), но при этом снять видимость с собственного поля, в котором будет храниться информация (в нашем случае это НомерКарты
). Это делается в Flexberry Desinger при помощи формы редактирования представлений.
Настройка WebControlProvider
В WebControlProvider необходимо добавить информацию о том, что для редактирования ссылки СтрокаПланаПогашения
- БанковскаяКарта
должен использоваться контрол MasterEditorLinkedAjaxLookUp
. Делается это в файле ~xml/WebControlProvider.xml
следующим образом:
<customproperty class="СтрокаПланаПогашения" property="Карта">
<control typename="System.Web.UI.WebControls.Label, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" property="Text" codefile="" />
<editcontrol typename="ICSSoft.STORMNET.Web.AjaxControls.MasterEditorLinkedAjaxLookUp" codefile="" />
</customproperty>
<customproperty class="СтрокаПланаПогашения" property="НомерКарты">
<control typename="System.Web.UI.WebControls.Label, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" property="Text" codefile="" />
<editcontrol typename="ICSSoft.STORMNET.Web.AjaxControls.MasterEditorLinkedAjaxLookUp" codefile="" />
</customproperty>
Настройка биндинга
Для того, чтобы контрол корректно работал для него нужно настроить нестандартный биндинг (при помощи WebBinder).
Для этого необходимо:
- в папке
~/XML/Bindings/
создать XML-файл с названием, совпадающим с названием формы редактирования, на которой будет располагаться детейл (то есть на форме редактирования агрегатора). В примере называтьсяKreditE.xml
. - В созданный xml-файл необходимо добавить нестандартный биндинг, который будет сообщать системе, что один web-контрол должен редактировать сразу два свойства. В примере это будет выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<root partial="true">
<detail name="СтрокаПланаПогашения">
<property name="Карта">
<control id="ctrlКарта" prop="SelectedMasterPK">
</control>
</property>
<property name="НомерКарты">
<control id="ctrlКарта" prop="Text">
</control>
</property>
</detail>
</root>
Очень важно следить за правильностью составления этого биндинга:
- Указать, что биндинг составной: добавить блок
partial="true"
в тэгroot
. - Указать имя детейла, для которого составляется этот биндинг (в примере
СтрокаПланаПогашения
). - Указать наименования двух свойств, которые должны редактироваться (в примере
Карта
иНомерКарты
). - Указать ID контрола. Так как контрол находится в AjaxGroupEdit’e, то в явном виде его наименования на странице найти невозможно. Имя формируется как
ctrl
+ имя ссылки на мастера (в нашем случаеctrl
+Карта
), обязательно следить за регистром,ctrlКарта
это не то же самое, чтоctrlкарта
! - Наименование редактируемых свойств (
SelectedMasterPK
иText
всегда остаются неизменными, но важно понимать, чтоText
относится к свойству детейла, аSelectedMasterPK
к мастеру детейла.
Настройка лукапа
Чтобы при вводе текста система подсказывала пользователю существующие варианты, необходимо настроить лукап, указав ему LookUpSetting
:
protected override void Preload()
{
ctrlСтрокаПланаПогашения.AddLookUpSettings(
Information.ExtractPropertyPath<СтрокаПланаПогашения>(x => x.Карта), new LookUpSetting
{
LookUpBtnVisible = true,
LookUpClearBtnVisible = true,
Autocomplete = true,
IsSubstring = true
});
}
KreditE
.Возможные проблемы
Если в базе уже есть данные, то при подключении MasterEditorLinkedAjaxLookUp
могут возникать проблемы при отображении “старых” данных.