Здравствуйте!
Помогите, пожалуйста, решить проблему.
Пытаюсь сделать так: при изменении ответственного задачи, проверяется, не в отпуске ли новоустановленный ответственный, и если он в отпуске - вместо него подставляется заместитель.
Как пытаюсь реализовать: в обработчике 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 получаю правильный.
При дебаге показывает, что оно, вроде бы, присваивается, но при этом в лукапконтроле не отображается.
Подскажите, где копать ошибку.
Нравится
Ошибка вызвана тем, что заполняя значение поля "Ответственный" ('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?