【问题标题】:SuiteScript2.0 Getting values from a saved search formula columnSuiteScript2.0 从保存的搜索公式列中获取值
【发布时间】:2019-12-24 06:29:09
【问题描述】:

我正在尝试从保存的搜索中的公式字段中获取值。我得到了所有的结果,然后循环遍历它们。

for(key in itemReplenishResults){
    log.debug("Single Data", JSON.stringify(itemReplenishResults[key]));
    var thisNumber = Number(itemReplenishResults[key].getValue("formulanumeric_1"))
}

如我所料读取的单个数据的日志;

{
    "recordType": "inventoryitem",
    "id": "2131",
    "values": {
        "itemid": "ITEMCODE",
        "displayname": "DISPLAYNAME",
        "salesdescription": "SALESDESCRIPTION",
        "type": [
            {
                "value": "InvtPart",
                "text": "Inventory Item"
            }
        ],
        "location": [],
        "locationquantityonhand": "",
        "locationreorderpoint": "0",
        "locationpreferredstocklevel": "1",
        "formulatext": "Yes",
        "formulanumeric": "1",
        "locationquantityonorder": "",
        "formulanumeric_1": "1",
        "formulatext_1": "Yes"
    }
}

但是 thisNumber 的值返回为 0。我不明白为什么这不起作用?

【问题讨论】:

    标签: netsuite suitescript2.0


    【解决方案1】:

    thisNumber 为 0 的原因是因为 formulanumeric_1 列实际上不存在,所以 Number() 正在将空值转换为 0。

    问题

    公式列在内部全部命名相同,这就是为什么您不能直接单独获取它们的值的原因。例如,如果您的搜索中有两个公式(数字)列,both 内部列名将是“formulanumeric”。因此,使用getValue('formulanumeric')只会得到第一个公式值。

    如您所见,记录 Result 对象将输出不正确的名称。如果您记录Result.columns,您将看到列名实际上是相同的。

    您的选择

    1. 使用索引直接获取列(如果您关心排序)。

      require(['N/search'], function(search) {
        // A saved search containing multiple formula result columns
        var s = search.load(1234);
      
        s.run().each(function(result) {
          log.debug(result.getValue(result.columns[5]));
          log.debug(result.getValue(result.columns[1]));
          log.debug(result.getValue(result.columns[3]));
        });
      });
      
    2. 遍历每一列(如果您不关心排序)。

      require(['N/search'], function(search) {
        // A saved search containing multiple formula result columns
        var s = search.load(1234);
      
        s.run().each(function(result) {
          for (var i = 0; i < result.columns.length; i++) {
            // Log each column's value in order
            log.debug(result.getValue(result.columns[i]));
          }
        });
      });
      
    3. 手动定义列并引用它们(最通用的选项)。列名必须以“formula[type]”开头,并且可以附加任何其他内容。

      require(['N/search'], function(search) {
        var s = search.create({
          type: 'salesorder',
          columns: [{
            name: 'formulanumeric1',
            formula: 'CASE WHEN 100 > 10 THEN 100 END'
          }, {
            name: 'formulanumeric2',
            formula: 'CASE WHEN 30 > 20 THEN 30 END'
          }]      
        });
      
        s.run().each(function(result) {
          log.debug(result.getValue('formulanumeric2')); // 30
          log.debug(result.getValue('formulanumeric1')); // 100
        });
      });
      

    注意:如果您选择第一个选项,则必须小心在初始搜索中重新排序列,因为这会影响结果中的索引。

    【讨论】:

    • 谢谢队友 :) 我最终选择了选项 3
    【解决方案2】:

    在处理公式字段时,我总是使用列索引值。我的一个例子如下。这与我创建的第五列相匹配(当然从 0 开始)。希望对您有所帮助。

    transactionSearch.run().each(function(r){
      var var1=r.getValue(r.columns[5]);
      var var2=r.getValue(r.columns[6]);
      var var3=r.getValue(r.columns[7]);
      var var4=r.getValue(r.columns[8]);
      var var5=r.getValue(r.columns[9]);
      return true;
    });
    

    【讨论】:

      猜你喜欢
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多