SuiteScript TypeError:无法从未定义读取属性“firstname”
2022-08-16
790
我遇到了一个对我来说毫无意义的问题。我创建了一个自定义搜索,并使用该搜索的结果将 SelectOptions 添加到我添加的选择字段中。
但是,当我尝试简单地访问嵌套对象中的值时,我收到错误消息:TypeError:无法从未定义中读取属性“firstname”。
代码如下:
var sfPlayersSearch = search
.create({
id: 'customsearch_pm_sf_players_search',
title: 'SF Players Search',
type: search.Type.EMPLOYEE,
columns: [
'entityid',
'firstname',
'lastname',
'custentity_pm_ws_sf_player',
],
filters: ['custentity_pm_ws_sf_player', 'is', 'true'],
})
.run()
.getRange(0, 100);
log.debug({ title: 'SF Players', details: sfPlayersSearch });
var player1ProxyField = form.addField({
id: 'custpage_pm_ws_sf_player_1_proxy',
label: 'Player 1 Proxy',
type: ui.FieldType.SELECT,
});
var player2ProxyField = form.addField({
id: 'custpage_pm_ws_sf_player_2_proxy',
label: 'Player 2 Proxy',
type: ui.FieldType.SELECT,
});
for (var i = 0; i < sfPlayersSearch.length; i++) {
log.debug({title: 'Result', details: sfPlayersSearch[i].values.firstname});
player1ProxyField.addSelectOption({ value: sfPlayersSearch[i], text: sfPlayersSearch[i].id });
}
JSON 对象:
[
[
{
"recordType": "employee",
"id": "8",
"values": {
"entityid": "Artur X",
"firstname": "Artur",
"lastname": "X",
"custentity_pm_ws_sf_player": true
}
},
{
"recordType": "employee",
"id": "50",
"values": {
"entityid": "Darryl X",
"firstname": "Darryl",
"lastname": "X",
"custentity_pm_ws_sf_player": true
}
},
{
"recordType": "employee",
"id": "1983",
"values": {
"entityid": "Douglas X",
"firstname": "Douglas",
"lastname": "X",
"custentity_pm_ws_sf_player": true
}
},
{
"recordType": "employee",
"id": "86477",
"values": {
"entityid": "Paul X",
"firstname": "Paul",
"lastname": "X",
"custentity_pm_ws_sf_player": true
}
}
]
]
非常感谢您的帮助。我尝试过执行 .values || {}.firstname,这没有返回任何错误,但也没有结果。
2个回答
Search.run().getRange()
返回
Result
对象数组。这些是您在
for
块中迭代的内容。
Result
对象不包含
values
,而是包含用于访问每个结果的值 (
getValue()
) 和文本 (
getText()
) 的方法。
将
log.debug({title: 'Result', details: sfPlayersSearch[i].values.firstname});.
更改为
log.debug({title: 'Result', details: sfPlayersSearch[i].getValue('firstname')});
Krypton
2022-08-16
虽然 @krypton 的答案对于您正在做的事情是正确的,但您可能会发现使用 Netsuite 的 JSONified 版本的搜索对象(如您在日志中看到的内容)很有用。
如果您将其编写为库文件,您可能希望在 Map/Reduce 中工作,则可以规范化搜索结果,如
.getRange(0, 100)
.map(function(sr){
return JSON.parse(JSON.stringify(sr));
});
现在您的原始
values.firstname
代码就可以工作了。
有趣的事实。如果您使用的是 SS 2.1,则可以使用
let
'、
const
和箭头函数:
const players = search.create()...
.getRange(0, 100)
.map(sr=>(JSON.parse(JSON.stringify(sr)));
bknights
2022-08-16