List index out of bounds

В карточку звонка добавил два LookupDataControl. В зависимости от того, какое значение выбрано в LookupDataControl1, значения в LookupDataControl2 меняются. Фильтрацию делал в с помощью:

function edtTypeOnPrepareSelectWindow(LookupDataControl, SelectWindow) {

var TypeID = dlData.Dataset('TypeID');
var LookupDataset = edtResult.DataField.LookupDataset;
ApplyDatasetFilter(LookupDataset, 'CallTypeID', TypeID,
!IsEmptyGUID(TypeID));
}

а обновлял с помощью:

function dlDataOnDatasetDataChange(DataField) {

edtResult.UnprepareDropDownList();
edtPrichina.UnprepareDropDownList();
}

Но при выборе значений LookupDataControl2 вылетает ошибка List index out of bounds (разные числа)

В чем может быть проблема? Заранее спасибо.

Нравится

8 комментариев

Здравствуйте!

Уточните, пожалуйста, продукт и его версию.

Забыл сразу написать. XRM 3.3.2.

А если фильтр убрать, выбирает нормально?
Дело именно в наложенном фильтре, или в Unprepare?

Фильтр работает нормально. Без Unprepare работает тоже нормально. Может ли это быть от частого запуска "edtResult.UnprepareDropDownList()"? Просто когда убрал строки edtResult.UnprepareDropDownList() из функции dlDataOnDatasetDataChange, отрабатывает без ошибок.

Может, дело в том, что у Вас dlDataOnDatasetDataChange(DataField) срабатывает при изменении любого поля, а не только поля «Тип», по которому фильтруется? А если добавить дополнительную проверку и делить Unprepare только когда действительно нужно?

Да, срабатывает не только когда фильтрую по данному полю. А как можно отловить изменение именно этого поля? Добавил в функцию function edtTypeOnEnter(Control) стало отрабатывать нормально, без ошибок, но хотелось бы узнать, как можно отловить изменение именно в dlDataOnDatasetDataChange(DataField)?

У Вас в функцию dlDataOnDatasetDataChange передаётся параметр DataField. Это и есть то поле, что поменялось. Смотрите у него значение Name.

function dlDataOnDatasetDataChange(DataField) {
	var DataFieldName = DataField.Name;
	switch (DataFieldName){
		case ('TypeID'):
			edtResult.UnprepareDropDownList();
			break;
 
	}	
}

Спасибо. Вы очень помогли, Александр.

Показать все комментарии