You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单函数能否用两个事件参数?及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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:45:41