SuiteScript:如何删除 nlapiSearchRecord 的结果?

SuiteScript: How do you delete the result of nlapiSearchRecord?

我只想删除满足特定条件的销售订单的履行请求。

这是我试过的。我知道我做错了,但我还没有找到很多关于如何实际使用搜索结果的例子。任何帮助将不胜感激。

var frId = nlapiSearchRecord('fulfillmentrequest', null, [
        new nlobjSearchFilter('createdfrom', null, 'is', nlapiGetRecordId()),
        new nlobjSearchFilter('mainline', null, 'is', 'T')
], id);

nlapiDeleteRecord('fulfillmentrequest', frId);

这就是我的目标,不幸的是它实际上并没有起作用,我相信我将不得不切换到一个预定的事件,因为显然在脚本运行之前状态不会更新到 "Closed"即使在提交功能之后。

function frDelete() {
    if (nlapiGetFieldValue('Status') == "Closed"){
        var results = nlapiSearchRecord('fulfillmentrequest', null, [
                new nlobjSearchFilter('createdfrom', null, 'is', nlapiGetRecordId()),
                new nlobjSearchFilter('mainline', null, 'is', 'T'),
                new nlobjSearchFilter('status', null, 'noneof', 'FftReq:F')
        ]);

        nlapiDeleteRecord('fulfillmentrequest', results[0].getId());
        nlapiDeleteRecord('fulfillmentrequest', results[1].getId());
        nlapiDeleteRecord('fulfillmentrequest', results[2].getId());
        nlapiDeleteRecord('fulfillmentrequest', results[3].getId());
        nlapiDeleteRecord('fulfillmentrequest', results[4].getId());
        nlapiDeleteRecord('fulfillmentrequest', results[5].getId());
        nlapiDeleteRecord('fulfillmentrequest', results[6].getId());
    }
}

nlapiSearchRecord returns nlobjSearchResult 个对象的数组,而 nlapiDeleteRecord 需要 id 参数的整数。

您可以通过以下方式从搜索结果中检索 ID:

var searchResults = nlapiSearchRecord(....);

if(searchResults.length) {
  var frId = searchResults[0].getId();
  nlapiDeleteRecord('fulfillmentrequest', frId);
} else {
  // handle no results..
}

nlapiSearchRecord 将 return 对象。 nlapiDeleteRecord 需要记录的类型和内部 ID 作为参数。

var sFilters = [];
sFilters.push(new nlobjSearchFilter('isinactive', null, 'is', 'F')); // you can add more filters.
var sColumns = [];
sColumns.push(new nlobjSearchColumn('id')); // you can add more columns.
var sResults = nlapiSearchRecord('fulfillmentrequest', null, sFilters, sColumns);

var recordId;
if (sResults.length) {
    for (i = 0; i < sResults.length; i++) {
        recordId = sResults[i].getId();
        nlapiDeleteRecord('fulfillmentrequest', recordId);
    }
} 

希望这会有所帮助。

这是我的最终解决方案。这是一个预定的 suitescript,它将删除所有 NewIn Progress 的 Fulfillment Requests 如果创建它们的销售订单是 已关闭待结算已结算已取消。 None 这些状态可以有剩余的行要完成,所以这对我来说很有意义。如果没有我在这里得到的帮助,我不可能做到这一点。

function frDelete() {
var results = nlapiSearchRecord('fulfillmentrequest', null, [
                new nlobjSearchFilter('mainline', null, 'is', 'T'),
                new nlobjSearchFilter('status', null, 'anyof', 'FftReq:A','FftReq:B'),
                new nlobjSearchFilter('status', 'createdfrom', 'anyof', 'SalesOrd:H','SalesOrd:C','SalesOrd:G','SalesOrd:F')
                ]);
var recordId;
if (results.length) {
    for (i = 0; i < results.length; i++) {
        recordId = results[i].getId();
        nlapiDeleteRecord('fulfillmentrequest', recordId);
    }
}}