在 SuiteScript 2.0 中执行求和或分组查询

Performing a Sum or Grouped Query in SuiteScript 2.0

任何人都可以给出一个关于如何执行分组或求和查询的可靠示例,即 suitescript 2.0 中的“Jane Smith 这个月完成了多少销售订单”。 2.0 的 NetSuite 帮助中心示例和文档非常分散和半生不熟。

如有任何帮助,我们将不胜感激。下面是我使用的代码。其中 returns 一个 未知错误 。如果您将 search.Summary.GROUP 和 search.Summary.COUNT 更改为小写(search.Summary.group,等等),那么您会得到一个结果,其中 orderCount 列实际上包含内部 ID , 不是总​​计数

var results = [],
        GROUP = search.Summary.GROUP,
        COUNT = search.Summary.COUNT;

var mySalesOrderSearch = search.create({
    type: 'salesorder',
    columns: [
        "trandate",
        {
            name: 'salesrep',
            summary: GROUP
        }, {
            name: 'internalid',
            summary: COUNT
        }],
    filters: [{
        name: 'mainline',
        operator: 'is',
        values: ['T']
    }, {
        name: "trandate",
        operator: "within",
        values: ["thisyear"]
    }]
});

mySalesOrderSearch.run().each(function (result) {
    var repName = result.getText({
        "name": "salesrep",
        "summary": GROUP
    });

    var orderCount = parseInt(result.getValue({
        "name": "internalid",
        "summary": COUNT
    }), 10);

    var msg = {
        "title": "Order Count by Sales Rep",
        "details": repName + " has sold " + orderCount + " orders."
    };

    results.push(msg);
    log.debug(msg);
});

return results;

这是我将摘要更改为小写后的结果(search.Summary。,等等)

{
    "error": false,
    "msg": "TESTING_POST_METHOD",
    "data": [
        {
            "title": "Order Count by Sales Rep",
            "details": "Victor Beisel has sold 524963 orders."
        }
    ]
}

details key中的524963数字是销售订单的内部id,不是真实的数量。这是使用大写摘要标记(search.Summary.GROUP 等)的结果,如 NetSuite 文档所述

{
    "error": true,
    "msg": {
        "type": "error.SuiteScriptError",
        "name": "UNEXPECTED_ERROR",
        "message": null,
        "stack": [
            "each(N/searchObject)",
            "TESTING_POST_METHOD(/SuiteScripts/XpelAffiliateOrders/XPELSS2_3PO_Index.js:159)",
            "<anonymous>(/SuiteScripts/XpelAffiliateOrders/XPELSS2_3PO_Index.js:40)",
            "post(/SuiteScripts/XpelAffiliateOrders/XPELSS2_3PO_Index.js:117)"
        ],
        "cause": {
            "type": "internal error",
            "code": "UNEXPECTED_ERROR",
            "details": null,
            "userEvent": null,
            "stackTrace": [
                "each(N/searchObject)",
                "TESTING_POST_METHOD(/SuiteScripts/XpelAffiliateOrders/XPELSS2_3PO_Index.js:159)",
                "<anonymous>(/SuiteScripts/XpelAffiliateOrders/XPELSS2_3PO_Index.js:40)",
                "post(/SuiteScripts/XpelAffiliateOrders/XPELSS2_3PO_Index.js:117)"
            ],
            "notifyOff": false
        },
        "id": "",
        "notifyOff": false
    },
    "data": null
}
// Assuming N/search is imported as `s`
var mySalesOrderSearch = s.create({
    type: 'salesorder'
    // Use the summary property of a Column to perform grouping/summarizing
    columns: [{
        name: 'salesrep',
        summary: s.Summary.GROUP
    },{
        name: 'internalid',
        summary: s.Summary.COUNT
    }],
    filters: [{
        name: 'mainline',
        operator: 'is',
        values: ['T']
    }]
});

mySalesOrderSearch.run().each(function (result) {
    var repId = result.getValue({
        "name": "salesrep",
        "summary": s.Summary.GROUP
    });
    var repName = result.getText({
        "name": "salesrep",
        "summary": s.Summary.GROUP
    });
    var orderCount = parseInt(result.getValue({
            "name": "internalid",
            "summary": s.Summary.COUNT
    }), 10);

    log.debug({
        "title": "Order Count by Sales Rep",
        "details": repName + " has sold " + orderCount + " orders."
    });
    return true;
});

具体按月分组有点困难,因为您需要在适当的日期字段上使用带有 TO_CHAR 的公式来获得正确的月份。