Я пытаюсь создать формат управления потенциальными клиентами, используя Google Sheets & Apps Script.
Сценарий apps проверяет, изменилось ли значение в столбце M листа Propsect или Заинтересованный и в зависимости от значения, перемещая строку в соответствующий лист ( заинтересованный , отложен , потерян или забронирован )
Электронная таблица предоставлена моей команде, которая будет вносить изменения, а также редактировать сразу нескольких пользователей.
Теперь проблема в том, что, как только сработают два onEdit
, и если для обоих требуется перемещение строк, первый экземпляр работает правильно, а второй удаляет неправильную строку.
Например: в листе Проспект , строки 2 и 3 имеют статус, измененный на Lost
& Postponed
одновременно. Теперь Lost
запускается должным образом, однако экземпляр Postponed
удаляет 4-ю строку (теперь 3-ю строку, так как строка 2 была удалена ранее).
Я попытался добавить lockservice
в код, чтобы работал только один экземпляр, но это, похоже, не решает проблему, поскольку объект события все еще рассматривает необновленный номер строки.
Даже попытался добавить flush()
в начале и конце кода, но тоже не сработало.
Вы можете получить доступ к электронной таблице здесь .
Мой код выглядит следующим образом:
function Master(e) {
var lock = LockService.getScriptLock();
var SS = e.source;
var Sheet = e.source.getActiveSheet();
var Range = e.range;
if(Sheet.getName() == "Prospect" && Range.getColumn() == "13" || Sheet.getName() == "Interested" && Range.getColumn() == "13"){
moveRows(SS,Sheet,Range);
}
lock.releaseLock();
}
function moveRows(SS,Sheet,Range) {
var val1 = Sheet.getRange(Range.getRow(),1,1,10).getDisplayValues();
val1 = String(val1).split(",");
var tar_sheet = SpreadsheetApp.getActive().getSheetByName(Range.getValue());
var row = tar_sheet.getRange(tar_sheet.getLastRow()+1,1,1,val1.length).setValues([val1]);
Sheet.deleteRow(Range.getRow());
}
}
Можно ли запустить вторую onEdit
только после завершения первого? Я думаю, если это могло случиться, проблема была бы решена?
Надеюсь, мне удалось правильно передать мой вопрос.