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

Я хочу изменить значение по умолчанию аттрибута IsReadOnly для окна выборки.
Я так понимаю это должно быть доступно в обработчике события OnPrepareSelectWindow LookupDataField, однако не смог разобраться как. все, что смог найти - это указать SelectWindowUSI и настроить LoockupDataset для окна выбора.

Нравится

1 комментарий

Денис, этот атрибут задаётся в свойствах или датасета, или окна. Вот как он проверяется в скрипте scr_SelectData:
[javascript]
var IsReadOnlyFromDataset =
GetAttribute(SelectData.Dataset, IsReadOnlyAttrName);
var IsReadOnlyFromWindow = GetAttribute(Window, IsReadOnlyAttrName);
SelectData.IsReadOnly = IsReadOnlyFromDataset || IsReadOnlyFromWindow;
[/javascript]
А так он задаётся в обработчике OnPrepareSelectWindow в wnd_CampaignEditScript:
[javascript]
function edtOwnerOnPrepareSelectWindow(LookupDataControl) {
PrepareLookupDataControl(LookupDataControl, dlData.Dataset);
}
[/javascript]
Эта функция в scr_WindowUtils:
[javascript]
function PrepareLookupDataControl(LookupDataControl, Dataset) {
var DataFieldName = LookupDataControl.DataFieldName;
var DataField = Dataset.DataFields.ItemsByName(DataFieldName);
var LookupDataset = DataField.LookupDataset;
SetAttribute(LookupDataset, 'IsReadOnly', true);
}
[/javascript]

Показать все комментарии
OnPrepareSelectWindow
Скрипты
Разработка

Поставил на LookupControl - поле справочника для фильтрации, событие OnPrepareSelectWindow, где при условии if ((edtDepart.Value==undefined)||(edtDepart.Value=="")) { окно справочника фильртации должно вылетать предупреждение и при этом окно для фильтрации не должно открыться, что прописать чтоб окно не открылось, подскажите?

function edtOwnerOnPrepareSelectWindow(LookupControl, SelectWindow) {
var LookupDataset = LookupControl.LookupDatasetLink.Dataset;
if ((edtDepart.Value==undefined)||(edtDepart.Value=="")) {
ShowWarningDialog ("Поле 'Точка продаж' не может быть пустым")
.........//?
}else{
var ChannelIDsArray = edtDepart.Value.split(',');
var DepartmentIDsArray = edtDepart.Value.split(",");
ApplyDatasetIncludeFilter(LookupDataset, 'ContactOwnerDepartmentID',
DepartmentIDsArray, true);
}

Нравится

1 комментарий

Алексей, с окном сделать ничего не получится, так как его открытие происходит средствами ядра.

Возможно, Вам подойдёт следующее решение: во время обработки события OnPrepare Вашего окна редактирования проверять значение поля edtDepart. Если оно не заполнено, сделать поле edtOwner нередактируемым (edtOwner.IsEnabled = false). Подобную проверку делать и при изменении значения в поле edtDepart во время обработки события dlDataOnDatasetDataChange:

[javascript]
function dlDataOnDatasetDataChange(DataField) {
var FieldName = DataField.Name;
...
if (FieldName = 'DepartID') {
edtOwner.IsEnabled = !IsEmptyValue(edtDepart.Value);
}
...
}
[/javascript]

После этого в обработчике события OnPrepareSelectWindow контрола edtOwner достаточно будет оставить часть, которая в блоке else:

[javascript]
function edtOwnerOnPrepareSelectWindow(LookupControl, SelectWindow) {
var LookupDataset = LookupControl.LookupDatasetLink.Dataset;
var ChannelIDsArray = edtDepart.Value.split(',');
var DepartmentIDsArray = edtDepart.Value.split(",");
ApplyDatasetIncludeFilter(LookupDataset, 'ContactOwnerDepartmentID',
DepartmentIDsArray, true);
}
[/javascript]

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