Google appscript onEdit trigger中禁用jdbc、email等服务的解决方法
google办公套件的强大之处就在于我们可以利用google自己的app script来给我们的表格、文档、表单增强功能,比如表格更新时发送邮件提醒、表格数据与我们自己的数据库同步等等,app script本身是基于java的,同时揉入了一些JavaScript的语法,编写起来也是很方便的。
今天在实现一个当编辑了spreadsheet之后,自动将更新后的单元格数据同步到远程的一张mysql表时 出现了问题。很简单的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | function onEdit(e){ var range = e.range; var rowNum = range.getRow(); var colNum = range.getColumn(); var id = range.offset(0,0-colNum+1).getValue(); .... if(id){ Logger.log("will do update:%s",id); }else{ Logger.log("will do insert"); } } } function getConnection(){ return Jdbc.getConnection(dbUrl, user, userPwd); } function updateOne(newRecord, id){ var conn = getConnection(); try{ var stmt = conn.prepareStatement("replace into samplestockupdated values (?,?,?,?)"); stmt.setInt(1,id); stmt.setString(2,newRecord['Description']); stmt.setInt(3,newRecord['StockHolding']); stmt.setInt(4,newRecord['ItemValue']); stmt.executeUpdate(); }catch(e){ Logger.log(e); }finally{ closeConnection(conn); } } |
但是调试的时候 stackdriver错误报告提示 “您没有调用 getConnection 的权限”
查看了google的文档才发现 原来onEdit函数属于simple trigger, 在修改单元格的时候会自动调用,simple trigger中不能使用jdbc 还有其他的一些较为高级的api
解决的方法其实很简单 只需要把onEdit改成另外一个函数名 比如我改成了onEditTrigger 然后手动添加一个高级触发器就可以了 如下图