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

如何在SuiteScript自定义搜索返回的数组中替换指定值?

在SuiteScript中处理搜索结果数组:当lastinv为空时替换对应值为0

需求说明

需要实现:当字段lastinv(代码中对应变量a)为空时,将search.create返回的结果数组中,对应位置的custrecord_ew_meterreading_value字段值替换为0。

现有代码问题分析

你当前的代码分为两部分:

  1. 当a(lastinv)为空时执行搜索并将结果存入ar_reading,但未在这一步处理值的替换
  2. 后续循环构建ar_mtrdata时尝试判断替换,但存在两个潜在问题:
    • 空值判断冗余,可简化
    • 未明确firstReading与ar_reading的关联逻辑,可能导致索引不匹配

修正后的实现方案

方案1:在搜索结果获取时直接处理替换

在each回调中直接处理值的替换,将处理后的结果存入数组:

// a 即为 lastinv
if (!a) { // 统一判断空值:覆盖null、空字符串、undefined
  todate = format.format({
    value: todate,
    type: format.Type.DATE
  });

  // 创建带特定过滤器的自定义记录搜索
  var reading = search.create({
    type: 'customrecord_ew_meterreading_form',
    columns: ['name', 'id', 'custrecord_ew_mr_metername', 'custrecordmeternumber', 'custrecord_ew_mr_site', 'custrecord1', 'custrecord_ew_meterreading_value'],
    filters: [{
      name: 'custrecord_ew_mr_site',
      operator: search.Operator.IS,
      values: site
    }, {
      name: 'custrecord1',
      operator: search.Operator.ON,
      values: todate
    }]
  });
  
  // 获取结果时直接替换目标字段值
  reading.run().each(function(result) {
    // 封装处理后的结果对象,保留原方法的同时替换指定字段
    var processedResult = {
      getValue: function(fieldId) {
        if (fieldId === 'custrecord_ew_meterreading_value') {
          return 0;
        }
        return result.getValue(fieldId);
      },
      getText: function(fieldId) {
        return result.getText(fieldId);
      }
    };
    ar_reading.push(processedResult);
    return true;
  });
  
  return ar_reading;
}

方案2:在构建ar_mtrdata时正确处理替换

确保firstReading是之前获取的搜索结果数组,优化空值判断并正确赋值:

// 假设firstReading为之前返回的ar_reading数组
for (var k = 0; k < firstReading.length; k++) {
  ar_mtrdata[k] = [];
  var l_meternumber = firstReading[k].getValue('custrecordmeternumber');
  var mtrdtls = getMeterDetails(l_meternumber);
  ar_mtrdata[k][0] = mtrdtls.getValue('itemid'); // 电表编号
  
  // 统一空值判断,同时处理目标字段本身为空的情况
  if (!lastinv) {
    ar_mtrdata[k][2] = 0;
  } else {
    var readingValue = firstReading[k].getValue('custrecord_ew_meterreading_value');
    ar_mtrdata[k][2] = readingValue || 0; // 字段为空时也默认设为0
  }

  /* 其他业务逻辑... */
}

关键注意点

  • 用!lastinv可以统一覆盖null、undefined、空字符串三种空值场景,简化判断逻辑
  • 若不需要保留原搜索结果对象的方法,方案1也可以直接提取字段值存入数组,减少封装成本
  • 方案2中对custrecord_ew_meterreading_value添加|| 0处理,可避免字段本身为空导致的异常

内容的提问来源于stack exchange,提问作者Anthony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:57:18