Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netsuite SuiteScript 2.0事务保存搜索筛选器_Netsuite_Suitescript2.0 - Fatal编程技术网

Netsuite SuiteScript 2.0事务保存搜索筛选器

Netsuite SuiteScript 2.0事务保存搜索筛选器,netsuite,suitescript2.0,Netsuite,Suitescript2.0,我已经在netsuite中为事务创建了一个保存的搜索,使用SuiteScript2.0,我将在应用程序中显示保存的搜索数据。在应用程序中,用户可以对任何字段应用筛选器。例如,用户选择“2011年8月”作为过帐期间,只应加载2011年8月的交易记录。如果我创建了一个内部id为“2011年8月”的过滤器,这就可以了,但在UI上我没有内部id 示例代码: /* here is my required module */ function getTransactionData(datain) {

我已经在netsuite中为事务创建了一个保存的搜索,使用SuiteScript2.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;
  }
}
我尝试使用join,但从Netsuite中看到“SSS\u无效\u SRCH\u过滤器\u join”错误

有谁能帮我一下吗


提前谢谢

我想你的申请是Suitelet吧?如果是这样,您需要对记录执行选择字段类型。所以可能是“过账期”。这将在下拉列表中显示您的经期

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


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

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

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


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

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

我假设“postingperiod”有“join”“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;
}

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

我假设“postingperiod”有“join”“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;
}

我的应用程序是.net wpf应用程序,不是suitelet。您是否尝试将筛选器更改为:objSearch.filters.push(search.createFilter({name:“postingperiod”,join:“accountingperiod”,operator:“ANYOF”,value:“1”});这里“1”是periodname“2011年8月”的一个内部ID,我在wpf应用程序中不知道该内部ID,这就是为什么我想基于periodname而不是基于internalid筛选事务。您可能需要进行两次搜索。首先搜索所有过帐期间,并获取内部id和名称。然后对您需要的internalid进行筛选/匹配?似乎您是对的,我必须进行两次搜索我的应用程序是.net wpf应用程序,而不是suitelet。您是否尝试将筛选更改为:objSearch.filters.push(search.createFilter({name:“postingperiod”,join:“accountingperiod”,operator:“ANYOF”,values:“1”});这里“1”是periodname“2011年8月”的一个内部ID,我在wpf应用程序中不知道该内部ID,这就是为什么我想基于periodname而不是基于internalid筛选事务。您可能需要进行两次搜索。首先搜索所有过帐期间,并获取内部id和名称。然后对您需要的internalid进行筛选/匹配?看来您是对的,我必须进行两次搜索Thank@Manu,这里“1”是periodname的internalid“2011年8月”,而我在wpf应用程序中不知道该internalid,这就是为什么我想基于periodname而不是基于InternalidThank@Manu,这里“1”来筛选交易是periodname“2011年8月”的内部ID,我在wpf应用程序中不知道该内部ID,这就是为什么我希望基于periodname而不是基于internalid筛选事务