SuiteScript 2.0交易保存搜索过滤器

时间:2017-12-08 07:57:30

标签: netsuite suitescript2.0

我已经在netsuite中创建了一个已保存的事务搜索,并使用suitescript 2.0我在应用程序中显示已保存的搜索数据。在应用程序中,用户可以在任何字段(please see the attached screenshot)上应用过滤器。例如,用户选择“2011年8月”用于过帐期间,仅应加载2011年8月的交易。如果我创建一个内部为“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”错误。

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

提前致谢

2 个答案:

答案 0 :(得分:2)

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

我假设有'accountsperiod'选项可用于'postsperiod',这在您在netsuite中创建的已保存搜索中完美运行,而不使用套接字。

/*
 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;
}

答案 1 :(得分:0)

我认为您的应用程序是Suitelet?如果是这样,您需要选择记录的字段类型。所以可能是'过账期'。这会在下拉列表中显示您的期间。

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

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