单函数能否用两个事件参数?及Salesforce字段取值问题求助
问题解答与代码修正
1. 单个函数能否接收两个事件参数?
- 如果是通过Google表格触发事件(如下拉框
onChange)调用函数:不行。Google Apps Script的触发事件仅会传递一个包含触发详情的事件对象e,无法直接传入两个独立的e1、e2参数。你需要从事件对象中提取下拉框选中值,或提前将两个值存入表格单元格,再在函数内读取。 - 如果是手动在脚本编辑器调用函数:可以直接传入两个参数,例如
getAllFieldValue("Account", "Name")。
2. 动态字段取值问题
JavaScript中,.运算符访问对象属性时,属性名是固定字符串;若属性名存储在变量(如e2)中,必须使用方括号语法object[variable]访问。你的代码里fieldValues[i].e2会尝试读取名为"e2"的属性,而非e2变量存储的字段名(如"Name"),因此无法取到目标值。
修正后的完整代码
function getAllFieldValue(e1, e2) { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 补充协议头,否则UrlFetchApp会请求失败 var url = 'https://test123.my.salesforce.com/services/data/v44.0/queryAll?q=SELECT Field FROM Object'; var updatedUrl = url.replace('Object', e1).replace('Field', e2); var response = UrlFetchApp.fetch(updatedUrl, getUrlFetchOptions()); var json = response.getContentText(); var data = JSON.parse(json); var fieldValues = data.records; for(var i = 0; i < fieldValues.length; i++){ // 用方括号语法访问动态字段 var fieldValue = fieldValues[i][e2]; ss.getRange(i+1, 1).setValue(fieldValue); } } // 假设你已实现该授权配置函数 function getUrlFetchOptions() { return { headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' // 补充其他必要请求头 }, muteHttpExceptions: true }; }
下拉框触发的适配示例
若要通过表格下拉框自动触发,需修改函数读取单元格值,示例如下:
function onDropdownChange(e) { // 假设对象名存在A1单元格,字段名存在A2单元格 var sheet = e.source.getActiveSheet(); var targetObject = sheet.getRange("A1").getValue(); var targetField = sheet.getRange("A2").getValue(); getAllFieldValue(targetObject, targetField); }
给A1/A2单元格设置下拉列表数据验证后,绑定onDropdownChange为onChange触发器即可自动执行。
内容的提问来源于stack exchange,提问作者whytili
相关产品推荐
相关产品推荐

