脚本搜索和循环-如果有多个结果,我如何只显示一个警报



我有一个脚本,它在字段更改时触发搜索。目标是,如果搜索找到一个改变用户的结果,这可能是重复的。我遇到的问题是,如果有一个以上的结果,它将多次显示警报。我怎么能让它只显示一次结果?

/**
*@NApiVersion 2.0
*@NScriptType ClientScript
*/
define(['N/record', 'N/search', 'N/ui/dialog'], function(r, search, u) {
function fieldChanged(context) {
var recCurrent = context.currentRecord;
var show = recCurrent.getValue({
fieldId: 'custrecord_eym_er_show'
});
var client = recCurrent.getValue({
fieldId: 'custrecord_eym_er_customer'
});
if ((context.fieldId == 'custrecord_eym_er_customer')) {
var client = recCurrent.getValue({
fieldId: 'custrecord_eym_er_customer'
});
console.log(client);
var sv = search.create({
type: "customrecord_eym_exhibit_reg",
columns: [
search.createColumn({
name: "internalid",
label: "Internal ID"
})
],
filters: [
["custrecord_eym_er_show", "anyof", show],
"AND",
["custrecord_eym_er_customer", "anyof", client]
]
});
var pagedData = sv.runPaged({
pageSize: 1000
});
// iterate the pages
for (var i = 0; i < pagedData.pageRanges.length; i++) {
// fetch the current page data
var currentPage = pagedData.fetch(i);
// and forEach() thru all results
currentPage.data.forEach(function(result) {
// you have the result row. use it like this....
var duplicate = result.getValue('internalid');
console.log(duplicate);
if (duplicate) {
alert('There is more than 1 entry for this client')
}
});
}
}
}
return {
fieldChanged: fieldChanged
};
});

您可以更改:

var pagedData = sv.runPaged({
pageSize: 1000
});

var pagedData = sv.run().getRanged({
start: 0,
end:1
});

变量pagedData是一个包含结果的数组,如果有许多重复,则只有第一个结果。

还有另一种方法,你可以简单地引入一个变量,像这样打印一次:

var printOnce = 0;
for (var i = 0; i < pagedData.pageRanges.length; i++) {
// fetch the current page data
var currentPage = pagedData.fetch(i);
// and forEach() thru all results
currentPage.data.forEach(function(result) {
// you have the result row. use it like this....
var duplicate = result.getValue('internalid');
console.log(duplicate);
if (duplicate && printOnce==0) {
printOnce++;
alert('There is more than 1 entry for this client')
}
});
}

我认为第一种方法更好,因为您不需要检索所有数据。

尝试对保存的搜索结果使用摘要级别的分组。例如:如果你得到多个内部id,其中0表示没有重复,1+表示重复,请尝试更改

columns: [
search.createColumn({
name: "internalid",
label: "Internal ID"
})
],

columns: [
search.createColumn({
name: "internalid",
label: "Internal ID",
summary: 'GROUP'
})
],

并更改

var duplicate = result.getValue('internalid');

var duplicate = result.getValue(name: 'internalid', summary: 'GROUP');

如果我错误地假设了内部id的使用;客户";或所需的分组值作为列,并在该字段上使用汇总分组。

有一种方法可以获得搜索返回的结果数量,在您的情况下,您似乎只想显示搜索返回的警报至少一个结果,因此,您可以使用以下代码:

/**
*@NApiVersion 2.0
*@NScriptType ClientScript
*/
define(['N/record', 'N/search', 'N/ui/dialog'], function(r, search, u) {
function fieldChanged(context) {
var recCurrent = context.currentRecord;
var show = recCurrent.getValue({
fieldId: 'custrecord_eym_er_show'
});
var client = recCurrent.getValue({
fieldId: 'custrecord_eym_er_customer'
});
if ((context.fieldId == 'custrecord_eym_er_customer')) {
var client = recCurrent.getValue({
fieldId: 'custrecord_eym_er_customer'
});
console.log(client);
var sv = search.create({
type: "customrecord_eym_exhibit_reg",
columns: [
search.createColumn({
name: "internalid",
label: "Internal ID"
})
],
filters: [
["custrecord_eym_er_show", "anyof", show],
"AND",
["custrecord_eym_er_customer", "anyof", client]
]
});
if(sv.runPaged().count >= 1) {
alert('There is more than 1 entry for this client');
}    
}
}
return {
fieldChanged: fieldChanged
};
});

最新更新