Причина проблемы:
Я думаю, что причина вашей проблемы refreshBOM(prod)
из google.script.run.withSuccessHandler(refreshBOM(prod)).updateMaterialQuantity(qty,prod,material)
.
Когда используется google.script.run.withSuccessHandler(refreshBOM(prod)).updateMaterialQuantity(qty,prod,material)
, сначала refreshBOM(prod)
запустить, тогда updateMaterialQuantity(qty,prod,material)
выполняется.Таким образом, значения извлекаются до их обновления.С другой стороны, я думаю, что электронную таблицу можно обновить.
Решение:
Чтобы избежать этой проблемы, измените ее следующим образом.Я думаю, что есть две модели для вашей ситуации.Пожалуйста, выберите один из них.И, пожалуйста, воспринимайте этот ответ как один из нескольких ответов.
Шаблон 1:
В этом шаблоне изменен только Javascript.
От:
google.script.run.withSuccessHandler(refreshBOM(prod)).updateMaterialQuantity(qty,prod,material);
До:
google.script.run.withSuccessHandler(refreshBOM).withUserObject(prod).updateMaterialQuantity(qty,prod,material);
и
С:
function refreshBOM(prodOption){
Кому:
function refreshBOM(temp, prodOption){
Шаблон 2:
В этом шаблоне Javascript и Google Apps Script изменены.
Сторона Javascript
От:
google.script.run.withSuccessHandler(refreshBOM(prod)).updateMaterialQuantity(qty,prod,material);
До:
google.script.run.withSuccessHandler(refreshBOM).updateMaterialQuantity(qty,prod,material);
и
Сторона скрипта Google Apps
От:
if(values[i][1] == mat){
sheet.getRange(i+1,3).setValue(qty);
SpreadsheetApp.flush();
return;
}
До:
if(values[i][1] == mat){
sheet.getRange(i+1,3).setValue(qty);
return prod;
}
- В этом случае, я думаю, что обновленные значения можно будет получить в
getBom()
, даже если flush()
не используется.
Ссылка:
Если я неправильно понял ваш вопрос и это не тот результат, который вам нужен, я приношу свои извинения.