Технические вопросы
Разработка

Получение значения дополнительного поля из Lookup Dataset

Добрый день.
Подскажите пзл.

Есть справочник "Семейное положение", добавил в него поле NeedFamilyInfo (BOOL). В справочнике все работает - и в Террасофте, и в БД.

Необходимо при смене в Контактах поля Семейное Положение анализировать значение поля NeedFamilyInfo.

Делаю так в методе dlDataOnDatasetDataChange Контактов:

if (Name == "MaritalStatusID"){
if (Value != null)
{
debugger;
var DS = edtMaritalStatus.DataField.LookupDataset;
EnableDatasetFilters(DS, false);
ApplyDatasetIDFilter(DS, Value, true);
if (DS.State == dstInactive)
DS.Open();
else
RefreshDataset(DS);

dlData.Dataset.DataFields.ItemsByName("FamilyMemberCount").IsRequired = DS.ValAsBool("NeedFamilyInfo");
}}
но всегда DS.Values("NeedFamilyInfo") = null

Пробовал и с использованием функции GetFieldValueFromDisabledField - все равно null.

Подскажите плз, где может быть ошибка?

Нравится

3 комментария

Добавлю:

Смотрел профайлером - всегда из справочника идет запрос только двух полей - ID и Name. Как заставить оптимизатор выбрать допольнительно другие поля?

Еще добавлю вопрос:
Что означает свойство IsLookupDataset?

Здравствуйте!
1. В скрипте scr_Util. Вам необходимо использовать ф-цию GetFieldValueFromLookupDataset. Но в GetDatasetFieldValueFromDatasetByFilter необходимо сделать доработку:
[javascript]
...
ApplyDatasetFilter(Dataset, FilterFieldName, FilterFieldValue, true);
var DataField = Dataset.DataFields.ItemsByName(ResultFieldName);
var Column = GetGeneralColumnByDataField(DataField);
if ((Assigned(Column)) && (!Column.IsEnabled)) {
Column.IsEnabled = true;
}
Dataset.Open();
...
[/javascript]
2. IsLookupDataset - см. http://terrasoft.com.ua/sdk/IDBDataset__IsLookupDataset@%5Bout,_retval%…

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