0

我已经在 netsuite 中创建了一个保存的交易搜索,并且使用 suitescript 2.0 我在我的应用程序中显示了保存的搜索数据。在应用程序中,用户可以在任何字段上应用过滤器(请参阅随附的屏幕截图)。例如,用户选择“2011 年 8 月”作为过帐期间,则应仅加载 2011 年 8 月的交易。如果我创建一个内部 ID 为“2011 年 8 月”的过滤器,这可以正常工作,但在 UI 上我没有内部 ID。

示例代码:

/*
 here is my required module
*/

function getTransactionData(datain)
{
  try
  {

       var objSearch = search.load
                    ({
                        id: datain.savedsearchid
                    });
          /***** Work *****/
          objSearch.filters.push(search.createFilter({ name: "postingperiod",  operator: "ANYOF", values: "1" })); //here 1 is internalid of periodname "Aug 2011"

          /***** Not Work (SSS_INVALID_SRCH_FILTER_JOIN) *****/
          //objSearch.filters.push(search.createFilter({ name: "postingperiod", join: "accountingperiod",  operator: "ANYOF", values: "Aug 2011" }));

           objSearch.run();
  }
  catch(ex)
  {
      log.error("getTransactionData",  ex);
      throw ex;
  }
}

我尝试加入但看到来自 Netsuite 的“SSS_INVALID_SRCH_FILTER_JOIN”错误。

任何人都可以帮助我解决这个问题。

提前致谢

4

2 回答 2

2

我将您的代码编辑为更简化的代码以便更好地理解。如果您了解它的工作原理,您可以编辑/自定义您想要的方式。

我假设有可用于“postingperiod”的加入“accountingperiod”选项,这在您在netsuite中创建的已保存搜索中非常有效,而无需使用suitescript。

/*
 here is my required module
*/

function getTransactionData(datain) {
    try {

        var objSearch = search.load({
            id: datain.savedsearchid
        });
        var defaultFilters = objSearch.filters;
        var customFilters = [];

        //Adding filter
        customFilters = ['postingperiod', 'ANYOF', '1'];
        defaultFilters.push(customFilters);
        customFilters = undefined;
        customFilters = [];



        //Adding filter
        /*
        customFilters = ['postingperiod.accountingperiod', 'ANYOF', 'Aug 2011'];
        defaultFilters.push(customFilters);
        */

        objSearch.filters = defaultFilters;

        var objSearch_run = objSearch.run().getRange({
            start: 0,
            end: 10
        });

    } catch (ex) {
        log.error("getTransactionData", ex);
        throw ex;
    }
}

如果您想知道过滤器是如何存储在您在 netsuite 中创建的已保存搜索中的,您可以使用脚本调试器。以下代码是suitescript 1.0

//Load Saved Search
get();

function get() {
    var search = nlapiLoadSearch('transaction', ' ENTER SAVED SEARCH ID HERE ');
    log.debug('search',search);
    var searchFilters = search.getFilterExpression();
    log.debug('searchFilters',searchFilters);

    return search;
}
于 2017-12-13T07:56:59.357 回答
0

我假设您的应用程序是 Suitelet?如果是这样,您需要选择记录的字段类型。所以可能是“发布期”。这将在下拉列表中显示您的经期。

当用户选择它时,让客户端脚本自动刷新数据并加载您保存的搜索。

或者,您可以加载所有数据并进行过滤客户端 DOM 过滤。确实需要有关您的“应用程序”的更多信息。

于 2017-12-11T02:23:06.970 回答