Javascript 在Google Forms中为审批工作流创建脚本

Javascript 在Google Forms中为审批工作流创建脚本,javascript,google-apps-script,google-sheets,form-submit,Javascript,Google Apps Script,Google Sheets,Form Submit,我正试图通过谷歌表单为请假时间开发一个审批工作流。一个附加组件可以解决这个问题,但我的公司对此很奇怪,所以我试图生成一个脚本来执行这个功能。我的doGet函数有太多的错误,我正要放弃 我试着用谷歌搜索每个错误,看看如何修复它。我试着看看是否有人已经编写了脚本,但没有成功。我想要的是该人在表单之外提交他们的请求。向主管发送一封电子邮件,其中包含批准/拒绝请求的链接,然后将电子邮件发送回原始请求者,并附上红外光谱结果 我忘了添加。这是我插入到google表单的google工作表中的脚本,它附在goo

我正试图通过谷歌表单为请假时间开发一个审批工作流。一个附加组件可以解决这个问题,但我的公司对此很奇怪,所以我试图生成一个脚本来执行这个功能。我的doGet函数有太多的错误,我正要放弃

我试着用谷歌搜索每个错误,看看如何修复它。我试着看看是否有人已经编写了脚本,但没有成功。我想要的是该人在表单之外提交他们的请求。向主管发送一封电子邮件,其中包含批准/拒绝请求的链接,然后将电子邮件发送回原始请求者,并附上红外光谱结果

我忘了添加。这是我插入到google表单的google工作表中的脚本,它附在google表单上,而不是表单本身。我似乎一直收到的错误是“TypeError:无法从undefined读取属性“approval”

功能发送电子邮件(e){
var email=e.values[1];
var supervisoremail=e.values[2];
var BeginDate缺席=e.值[3];
var EndDate缺席=e.values[4];
变量url=
'https://script.google.com/a/mesd.k12.or.us/macros/s/AKfycbwvm63UG8X9Wqdkt7yxUFKhvMXu58yvbeY2udJVJKmheIuagQlB/exec';
var approve=url+'&approve=true'+'&reply='+电子邮件;
var deny=url+'&approval=false'+'&reply='+email;
var html=“”+
“请查看/
”+ BeginDate缺席+”:“+EndDate缺席+”
”+ “
”+ “
”+ "" : MailApp.sendEmail(“lparga@mesd.k12.or.us“,“批准请求”,“什么没有html?”,{htmlBody:html}); } 函数doGet(e){ var answer=(e.parameter.approval='true')?“您的请求已被批准”:“您的请求已被拒绝”; MailApp.sendmail(e.parameter.reply,“您的请假申请”, 你的上司说:“+回答); var app=UiApp.createApplication(); app.add(app.createHTML('一封电子邮件被发送到'+e.parameter.reply+'说:'+answer+''); 返回应用程序; }

当前错误表明my
doGet
函数上的my reply参数未定义。

要通过Google Apps脚本中的GET呈请访问元素,可以使用。这是使用
e.reply
而不是
e.parameter.reply

另一方面,我们需要重写语法以使其运行。您的最终代码应该类似于以下内容:

function doGet(e) {
    var answer = (typeof e.approval == 'true' ? 'Your request has been approved' : "Your request has been denied");
    MailApp.sendEmail(e.reply, "Your leave request", "Your supervisor said: " + answer);
    var app = UiApp.createApplication(); // DEPRECATED
    app.add(app.createHTML('<h2>An email was sent to ' + e.reply + 'saying: ' + answer + '</h2 > '));
}
函数doGet(e){
var answer=(typeof e.approval='true'?'您的请求已被批准':“您的请求已被拒绝”);
MailApp.sendmail(例如回复“你的请假请求”,“你的主管说:”+回答);
var app=UiApp.createApplication();//已弃用
app.add(app.createHTML('向'+e.reply+'发送了一封电子邮件,上面写着:'+answer+'');
}

我希望这对您有用。请随时向我们提供更多信息以获得进一步帮助。

要通过谷歌应用程序脚本中的获取请求访问元素,您可以使用。这是使用
e.reply
而不是
e.parameter.reply

另一方面,我们需要重写语法以使其运行。您的最终代码应该类似于以下内容:

function doGet(e) {
    var answer = (typeof e.approval == 'true' ? 'Your request has been approved' : "Your request has been denied");
    MailApp.sendEmail(e.reply, "Your leave request", "Your supervisor said: " + answer);
    var app = UiApp.createApplication(); // DEPRECATED
    app.add(app.createHTML('<h2>An email was sent to ' + e.reply + 'saying: ' + answer + '</h2 > '));
}
函数doGet(e){
var answer=(typeof e.approval='true'?'您的请求已被批准':“您的请求已被拒绝”);
MailApp.sendmail(例如回复“你的请假请求”,“你的主管说:”+回答);
var app=UiApp.createApplication();//已弃用
app.add(app.createHTML('向'+e.reply+'发送了一封电子邮件,上面写着:'+answer+'');
}
我希望这对你有用。请不要犹豫,提供更多信息,以便进一步帮助我们

我经常遇到的错误是“TypeError:无法从undefined读取属性“approval”

发生此错误是因为代码创建的URL不包含
。此字符是显示URL的查询字符串部分的起始位置所必需的

替换

var approve = url + '&approval=true' + '&reply=' + email;
var deny = url + '&approval=false' + '&reply=' + email;

代码中的另一个问题是UiApp的使用(因为它已被弃用和退役)。相反,您应该使用HTML服务

参考资料

我经常遇到的错误是“TypeError:无法从undefined读取属性“approval”

发生此错误是因为代码创建的URL不包含
。此字符是显示URL的查询字符串部分的起始位置所必需的

替换

var approve = url + '&approval=true' + '&reply=' + email;
var deny = url + '&approval=false' + '&reply=' + email;

代码中的另一个问题是UiApp的使用(因为它已被弃用和退役)。相反,您应该使用HTML服务

参考资料


我设计了一个包含两个不同表单的解决方案,一个包含两个表单的谷歌表单。第一个表单用于信息注册,第二个表单用于审批,也许您可以使用它:

 function sendEmail() {
  Logger.log("[METHOD] sendEmail");


  var values = SpreadsheetApp.getActiveSheet(); // ingresa a la planilla
  var row = values.getLastRow();  
  var fecha = values.getRange(row, 1).getValue();
  var email = values.getRange(row, 2).getValue();
  var div = values.getRange(row, 3).getValue();
  var section = values.getRange(row, 4).getValue();
  var id = values.getRange(row, 5).getValue();
  var nom = values.getRange(row, 6).getValue();
  var tipo = values.getRange(row, 8).getValue(); 
  var val_tipo = values.getRange(row, 9).getValue();
  var origen = values.getRange(row, 10).getValue();
  var riesgo = values.getRange(row, 11).getValue();
  var oport = values.getRange(row, 12).getValue();
  var conform = values.getRange(row, 13).getValue();
  var correo_owner = values.getRange(row, 14).getValue();
  var emailRecipients = correo_owner;
  var urlform = "https://docs.google.com/forms/d/e/(put here de ID's form)/viewform?formkey=unique_number&entry_(put here the  entry number of to prefill form)="+id+"&entry_(put here the  entry number of to prefill form)="+val_tipo+"&entry_(put here the  entry number of to prefill form)="+email;

  var emailSubject = "Ingreso de registro de no conformidad/oportunidad de mejora n° "+id+" por " + email ;

  // Cuerpo del correo
  var emailBody = "<h3>Ingreso de registro reportado por "+nom+":</h3><hr /> \
  <p> \
  <h3 style='line-height:70%'>Ingreso de No conformidad/oportunidad de mejora <br /> 
  \
  <span style='font-size:50%'>("+fecha+")</span></h3> \
  </p><hr /> \ <p> \
  <strong>Tipo de reporte:</strong><br /> \
  "+tipo+" \
  </p>\ <p> \
  <strong>Origen de Hallazgo:</strong><br /> \
  "+origen+" \
   </p> <p> \
   <strong>Descripción de 'No conformidad':</strong><br /> \
   "+conform+" \
   </p> \ <p> \
   <strong>Descripción de Oportunidad de Mejora:</strong><br /> \
   "+oport+" \
   </p>\ <p> \
   <strong>División:</strong><br /> \
   "+div+" \
   </p>\ <p> \
   <strong>Sección:</strong><br /> \
   "+section+" \
   </p>\ <p> \
   <strong>Favor aprobar, rechazar o derivar el requerimiento en el siguiente link: 
   </strong><br />\
   "+urlform+"\
   </p>"   ;

   MailApp.sendEmail({
   to: emailRecipients,
   cc: "mail1"+","+"mail2",// + "mail3",
   subject: emailSubject,
   htmlBody: emailBody
   });
函数sendmail(){ Logger.log(“[方法]发送电子邮件”); var values=SpreadsheetApp.getActiveSheet();//ingresa a la planilla var row=values.getLastRow(); var fecha=values.getRange(第1行).getValue(); var email=values.getRange(第2行).getValue(); var div=values.getRange(第3行).getValue(); var section=values.getRange(第4行).getValue(); var id=values.getRange(第5行).getValue(); var nom=values.getRange(第6行).getValue(); var tipo=values.getRange(第8行).getValue(); var val_tipo=values.getRange(第9行).getValue(); var origen=values.getRange(第10行).getValue(); var riesgo=values.getRange(第11行).getValue(); var oport=values.getRange(第12行).getValue(); var conform=values.getRange(第13行).getValue(); var correo_owner=values.getRange(第14行).getValue(); var emailRecipients=correo_所有者; var urlform=”https://docs.google.com/forms/d/e/(将de ID表格放在这里)/viewform?formkey=唯一的\编号和条目\将to预填充表格的条目编号放在这里)=“+ID+”和条目\将