изменение поля
обработчик события
Скрипты
Разработка

Изменения значение поля в обработчике изменения

Здравствуйте!
Помогите, пожалуйста, решить проблему.

Пытаюсь сделать так: при изменении ответственного задачи, проверяется, не в отпуске ли новоустановленный ответственный, и если он в отпуске - вместо него подставляется заместитель.

Как пытаюсь реализовать: в обработчике dlDataOnDatasetDataChange(DataField) на изменение поля OwnerID

В итоге не работает.

...
switch (DataFieldName){
                case ('OwnerID'):
                        var TaskDataset = dlData.Dataset;
                        var OwnerID     = dlData.Dataset.Values('OwnerID');
                        var NewOwner = getAssistanteIfExist(OwnerID);
                        dlData.Dataset('OwnerID') = NewOwnerID; // не присваивает!!!
                        //edtOwner.DataField.Value = NewOwnerID; // так тоже не присваивает
                        //DataField.Value = OwnerID; // и так не присваивает
                        break;
...

NewOwnerID получаю правильный.
При дебаге показывает, что оно, вроде бы, присваивается, но при этом в лукапконтроле не отображается.

Подскажите, где копать ошибку.

Нравится

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

Ошибка вызвана тем, что заполняя значение поля "Ответственный" ('OwnerID') в блоке case ('OwnerID') Вы вызываете зацикливание.
Попробуйте модифицировать Ваш код подобным образом:
[javascript]
case ('OwnerID'):
if (TaskEdit.EditOwner != true) {
var OwnerID = dlData.Dataset.Values('OwnerID');
var NewOwnerID = getAssistanteIfExist(OwnerID);
if (!IsEmptyValue(NewOwnerID)){
TaskEdit.EditOwner = true;
edtOwner.DataField.Value = NewOwnerID;
return;
}
}
TaskEdit.EditOwner = false;
break;
[/javascript]

[javascript]
switch (DataFieldName){
case ('OwnerID'):
var OwnerID = dlData.Dataset('OwnerID');
var NewOwner = getAssistanteIfExist(OwnerID);
if (!IsEmptyValue(NewOwnerID)){
dlData.Dataset.DisableEvents();
dlData.Dataset('OwnerID') = NewOwnerID;
dlData.Dataset.EnableEvents();
}
break;
[/javascript]

или так:)

"Бондарь Наталия" написал:Ошибка вызвана тем, что заполняя значение поля "Ответственный" ('OwnerID') в блоке case ('OwnerID') Вы вызываете зацикливание.

Увы, ваши варианты не очень подходят, поскольку надо проверить, не находится ли новоявленный заместитель сам в отпуске.
Немного исправил, зацикливание не при чём. При таком коде зацикливания не происходит, но значение не сохраняется.

[javascript]
...
switch (DataFieldName){
case ('OwnerID'):
var TaskDataset = dlData.Dataset;
var OwnerID = dlData.Dataset.Values('OwnerID');
if(IsNotActive(OwnerID))
{
var NewOwner = getAssistanteIfExist(OwnerID);
dlData.Dataset('OwnerID') = NewOwnerID; // не присваивает!!!
}
break;
...
[/javascript]

"netlander" написал:NewOwnerID получаю правильный.
При дебаге показывает, что оно, вроде бы, присваивается, но при этом в лукапконтроле не отображается.

Если NewOwnerID получаете правильно и его значение присваивается полю 'OwnerID', но не отображается, следовательно значение поля перезаписывается в каком-то другом месте/событии.
Попробуйте пройтись отладчиком и отловить в какой момент перезаписывается значение поля 'OwnerID'.

Новое значение просто не записывается.
Попробуйте вот такой код:

скрипт scr_TaskEdit
[javascript]
...
switch (DataFieldName){
case ('OwnerID'):
dlData.Dataset.DisableEvents();
dlData.Dataset('OwnerID') = ;
dlData.Dataset.EnableEvents();
break;
}
...
[/javascript]
Значение тупо не меняется.
Хххеееелп.

Может вам подойдет вариант замены ответственного не в момент его простановки, а в момент перед сохранением записи на событие OnBeforePost?

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