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 могут возникать проблемы при отображении “старых” данных.