NetSuite SuiteScript 2.0 如何在N/search create API中指定字段、子列表字段或子记录字段
NetSuite SuiteScript 2.0 How to specify field, sublist field or subrecord field in N/search create API
我在采购订单记录上有一个按钮,用于对当前记录执行保存的搜索查询,然后使用 http 模块通过 POST 将该数据发送到 url。 url 然后发送回发回的数据作为成功确认的一部分。保存搜索的想法是创建一个 javascript 对象,其中包含我想要从采购订单中获取的所有数据(主记录和带有子记录的项目子列表),然后使用 JSON.stringify
创建一个 JSON http POST 的负载。我无法使用 currentRecord
执行此操作,因为如果您检查它,它只包含内部 ID。这也可以防止我不得不花很多时间编写大量代码来从 currentRecord
.
手动构建 JSON 字符串
不幸的是,我不太明白如何在动态创建的已保存搜索中指定列名。有时在我看来列名是来自 NetSuite 记录浏览器的列名,有时如果我使用来自 NetSuite 记录浏览器的列名(例如 currencysymbol
),脚本会给出错误(未找到列)。
我也不确定如何指定出现在子列表或子列表中的子记录中的列。我尝试使用 item.itemtype
但这给了我一个未找到列的错误。只是 item
成功完成,但我不确定这是否真的成功,因为在 JSON.stringify
之后很难解码返回的结果(它添加了很多反斜杠)。使用 console.log
(出于某种原因,我使用 NetSuite log.audit
没有得到任何结果)也非常困难,尽管它看起来像是返回一个包含 5 行的数组。所以使用 item
可能会成功。我说是因为我有 3 个项目行,它返回 5 个数组行。
所以基本上我想知道在哪里可以找到要在 NetSuite 中用于保存搜索的列的名称;以及如何在保存的搜索中指定子列表列名称和子列表子记录列名称。
/**
* @NApiVersion 2.0
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/ui/dialog', 'N/currentRecord', 'N/record', 'N/url', 'N/http', 'N/search'], function (dialog, rec, record, url, http, s) {
function pageInit(context) {
// All client scripts need at least one dummy function.
} // pageInit
function onButtonClick() {
var currentRecord = rec.get();
// Create a saved search dynamically.
var rs = s.create({
type: s.Type.PURCHASE_ORDER,
filters: [
["mainline", s.Operator.IS, "F"], "and",
["internalid", s.Operator.IS, currentRecord.id]
],
columns: [
"internalid",
"currency",
{
name: "item",
sort: s.Sort.ASC // DESC
}
]
});
var myPostDataObj = rs.run().getRange(0, 1000);
console.log(myPostDataObj);
var headers = {
'Content-Type': 'application/json; charset=utf-8',
};
http.post.promise({
url: 'http://httpbin.org:80/post',
body: JSON.stringify(myPostDataObj),
headers: headers
})
.then(function(response){
console.log('SUCCESS: ' + JSON.stringify(response));
})
.catch(function onRejected(reason) {
console.log('ERROR: ' + JSON.stringify(reason));
})
}
return {
pageInit: pageInit,
onButtonClick: onButtonClick
};
}); // Define
我建议您获得两个 Chrome 扩展;
- NetSuite Field Explorer。此扩展程序将向您显示 NetSuite 记录中所有字段的 ID(和值)。
- NetSuite Search Export。此扩展程序将 convert/export 将搜索保存到 SuiteScript。
对于您正在做的事情,我会在 UI 中创建您保存的搜索,然后使用保存的搜索导出扩展将其导出,将其粘贴到您的代码中(其中 s.create
是),然后从那里开始工作。
第一个扩展很适合获取子列表字段 ID。在记录浏览器中保存查找。
我在采购订单记录上有一个按钮,用于对当前记录执行保存的搜索查询,然后使用 http 模块通过 POST 将该数据发送到 url。 url 然后发送回发回的数据作为成功确认的一部分。保存搜索的想法是创建一个 javascript 对象,其中包含我想要从采购订单中获取的所有数据(主记录和带有子记录的项目子列表),然后使用 JSON.stringify
创建一个 JSON http POST 的负载。我无法使用 currentRecord
执行此操作,因为如果您检查它,它只包含内部 ID。这也可以防止我不得不花很多时间编写大量代码来从 currentRecord
.
不幸的是,我不太明白如何在动态创建的已保存搜索中指定列名。有时在我看来列名是来自 NetSuite 记录浏览器的列名,有时如果我使用来自 NetSuite 记录浏览器的列名(例如 currencysymbol
),脚本会给出错误(未找到列)。
我也不确定如何指定出现在子列表或子列表中的子记录中的列。我尝试使用 item.itemtype
但这给了我一个未找到列的错误。只是 item
成功完成,但我不确定这是否真的成功,因为在 JSON.stringify
之后很难解码返回的结果(它添加了很多反斜杠)。使用 console.log
(出于某种原因,我使用 NetSuite log.audit
没有得到任何结果)也非常困难,尽管它看起来像是返回一个包含 5 行的数组。所以使用 item
可能会成功。我说是因为我有 3 个项目行,它返回 5 个数组行。
所以基本上我想知道在哪里可以找到要在 NetSuite 中用于保存搜索的列的名称;以及如何在保存的搜索中指定子列表列名称和子列表子记录列名称。
/**
* @NApiVersion 2.0
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/ui/dialog', 'N/currentRecord', 'N/record', 'N/url', 'N/http', 'N/search'], function (dialog, rec, record, url, http, s) {
function pageInit(context) {
// All client scripts need at least one dummy function.
} // pageInit
function onButtonClick() {
var currentRecord = rec.get();
// Create a saved search dynamically.
var rs = s.create({
type: s.Type.PURCHASE_ORDER,
filters: [
["mainline", s.Operator.IS, "F"], "and",
["internalid", s.Operator.IS, currentRecord.id]
],
columns: [
"internalid",
"currency",
{
name: "item",
sort: s.Sort.ASC // DESC
}
]
});
var myPostDataObj = rs.run().getRange(0, 1000);
console.log(myPostDataObj);
var headers = {
'Content-Type': 'application/json; charset=utf-8',
};
http.post.promise({
url: 'http://httpbin.org:80/post',
body: JSON.stringify(myPostDataObj),
headers: headers
})
.then(function(response){
console.log('SUCCESS: ' + JSON.stringify(response));
})
.catch(function onRejected(reason) {
console.log('ERROR: ' + JSON.stringify(reason));
})
}
return {
pageInit: pageInit,
onButtonClick: onButtonClick
};
}); // Define
我建议您获得两个 Chrome 扩展;
- NetSuite Field Explorer。此扩展程序将向您显示 NetSuite 记录中所有字段的 ID(和值)。
- NetSuite Search Export。此扩展程序将 convert/export 将搜索保存到 SuiteScript。
对于您正在做的事情,我会在 UI 中创建您保存的搜索,然后使用保存的搜索导出扩展将其导出,将其粘贴到您的代码中(其中 s.create
是),然后从那里开始工作。
第一个扩展很适合获取子列表字段 ID。在记录浏览器中保存查找。