Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Javascript NetSuite费用报告数组高效_Javascript_Arrays_Duplicates_Netsuite - Fatal编程技术网

Javascript NetSuite费用报告数组高效

Javascript NetSuite费用报告数组高效,javascript,arrays,duplicates,netsuite,Javascript,Arrays,Duplicates,Netsuite,好的,那么我需要做的是为netsuite创建一个脚本,它循环遍历开支报告中的每个开支,并基于对自定义记录的搜索更新税码。我需要的是效率方面的帮助-通常会多次搜索同一类别的费用,并且由于分配的治理,我希望这样做,因此我将搜索称为最小次数,而不是多次搜索同一类别。以下是我所拥有的: /* * Pseudocode: * search minimum amount of times - do not search same category multiple times * for loop c

好的,那么我需要做的是为netsuite创建一个脚本,它循环遍历开支报告中的每个开支,并基于对自定义记录的搜索更新税码。我需要的是效率方面的帮助-通常会多次搜索同一类别的费用,并且由于分配的治理,我希望这样做,因此我将搜索称为最小次数,而不是多次搜索同一类别。以下是我所拥有的:

/*
 * Pseudocode:
 * search minimum amount of times - do not search same category multiple times
 * for loop cycle through each expense and save category to array
 * if category is first occurrence complete search for tax code
 * else if category is a repeat set tax code based on previous search
 * 
 */



function userEventBeforeSubmit(type){

    /*if(type!='create')
    {
        return;
    }
    */

    //amount of expenses per expense report
    var expenseNum = nlapiGetLineItemCount('expense');
    var intSubsidiary = nlapiGetFieldValue('subsidiary');

    //this for loop is attempting to push the unique categories into an array leaving out duplicates 
    for(var i = 0; i < expenseNum; i++){
        var intCategory = nlapiGetLineItemValue('expense', 'category', i);
        var arr = [];
        //if category not found push into array
        if(arr.indexOf(intCategory) === -1){
            arr.push(intCategory);
        }

        //search expense tax codes record
        var arrSearchFilters = new Array();
        arrSearchFilters[0] = new nlobjSearchFilter('custrecord_cv_expensesubsidiary', null, 'anyof', intSubsidiary);
        arrSearchFilters[1] = new nlobjSearchFilter('custrecord_cv_expensecategory', null, 'anyof', arr[i]);

        //field from expense tax codes record
        var arrSearchColumns = new Array();
        arrSearchColumns[0] = new nlobjSearchColumn('custrecord_cv_taxcode');

        var arrSearchResults = nlapiSearchRecord('customrecord_cv_expensetaxcodes', null, arrSearchFilters, arrSearchColumns);

    }






        //for loop to iterate through expenses in expense report
        for(var i =1; i < expenseNum+1; i++){

            //get value category for each line
            //var intCategory = nlapiGetLineItemValue('expense', 'category', i);
            var taxAmtTemp = nlapiGetLineItemValue('expense', 'taxamount', i);

            var searchResult = arrSearchResults[0];
            //set tax code 
            var taxCode = searchResult.getValue(arrSearchColumns[0]);
            nlapiSetLineItemValue('expense', 'taxcode', i, taxCode);

            //if tax amount changes set back to original amount
            if(taxAmtTemp != nlapiGetLineItemValue('expense', 'taxamount', i)){

                nlapiSetLineItemValue('expense', 'taxamount', i, taxAmtTemp);

            }  


        }




}

创建记录后,用户是否需要根据自定义记录搜索返回值查看正确的税务代码

如果您担心治理问题,可以将其设置为计划脚本—这样分配的脚本使用就足够了


然后,您可以将费用记录的内部id传递给计划脚本,并使其在记录保存后立即执行。因此,用户提交事件将用作触发器,并将记录id作为参数传递,然后执行计划脚本。根据队列的不同,记录应在几分钟内更新。虽然,记录中的更改不会实时发生。

您编写的系统似乎相当合理,但您可以进行一个简单的优化。“anyof”筛选器可以接受值数组。因此,在第一个循环中构建类别数组

var arrExpenseCategory = [];
for(var i = 1; i < expenseNum+1; i++){
    var intCategory = nlapiGetLineItemValue('expense', 'category', i);
    if(arrExpenseCategory.indexOf(intCategory) === -1){
        arrExpenseCategory.push(intCategory);
    }
}
然后将这些记录放入数组中

var arrSearchResults = nlapiSearchRecord('customrecord_cv_expensetaxcodes', null, arrSearchFilters, arrSearchColumns);
arrExpenseCategory = [];
for(var i = 0; i < arrSearchResults.length; i++){
    arrExpenseCategory[arrSearchResults.getValue(arrSearchColumns[1])] = arrSearchResults.getValue(arrSearchColumns[0]);
}
然后使用数组填充字段

for(var i =1; i < expenseNum+1; i++){
    var taxAmtTemp = nlapiGetLineItemValue('expense', 'taxamount', i);
    nlapiSetLineItemValue('expense', 'taxcode', i, arrExpenseCategory[nlapiGetLineItemValue('expense', 'category', i)]);
    //if tax amount changes set back to original amount
    if(taxAmtTemp != nlapiGetLineItemValue('expense', 'taxamount', i)){
        nlapiSetLineItemValue('expense', 'taxamount', i, taxAmtTemp);
        }  
    }
由于原始问题中没有说明,我假设这将在beforeSubmit事件上运行。它在客户端上也可以在保存事件之前正常运行。我唯一需要注意的是,nlapiSearchRecord最多只能返回1000个结果。如果您与该子公司的customrecord\u cv\u expensetaxcodes记录超过1000条,则此脚本将不适用于您。正如eliseobeltran所提到的,您基本上无法在计划脚本中运行它

for(var i =1; i < expenseNum+1; i++){
    var taxAmtTemp = nlapiGetLineItemValue('expense', 'taxamount', i);
    nlapiSetLineItemValue('expense', 'taxcode', i, arrExpenseCategory[nlapiGetLineItemValue('expense', 'category', i)]);
    //if tax amount changes set back to original amount
    if(taxAmtTemp != nlapiGetLineItemValue('expense', 'taxamount', i)){
        nlapiSetLineItemValue('expense', 'taxamount', i, taxAmtTemp);
        }  
    }