我可以使用下面的脚本从 Netsuite 获取已删除的记录。 但我无法获取 id。
var customSearch = search.create({
type: "deletedrecord",
columns: ["context", "deletedby", "deleteddate", "externalid", "name"],
filters: [
["recordtype", "is", "customer"]
]
});
var resultSet = customSearch.run().getRange({
start: 0,
end: 5
});
如何使用 Suitescript 2.0 从 Netsuite 获取已删除记录的唯一 ID?
截至 2024.1,您可以通过多种方式获得其中一些,因此更新我 3 年前的答案。
根据@Martha,您现在可以通过 suitescript 获取此信息。记录浏览器中未指定
recordid
和 recordtype
字段,因此可能会中断,但受我的 SuiteQL 示例的启发,以下内容可以在控制台中运行:
require(['N/search'], search => {
var deletedRecords = search.create({
type: "deletedrecord",
filters: [
["deleteddate", "within", "today"]
],
columns: [
'recordid',
'recordtype',
search.createColumn({
name: "externalid"
}),
search.createColumn({
name: "deleteddate"
}),
search.createColumn({
name: "deletedby"
}),
search.createColumn({
name: "context"
}),
search.createColumn({
name: "name"
})
]
});
deletedRecords.run().each(function(result) {
const obj = {
id: result.id
};
result.columns.forEach(c => {
obj[c.name] = result.getValue(c);
});
console.log(JSON.stringify(obj));
return true;
});
})
其他方式:
尽管外部 ID 不可用,但使用 SuiteQL
SELECT
DeletedRecord.isCustomTransaction,
DeletedRecord.context,
DeletedRecord.deletedDate,
to_char(deletedDate, 'dd-mm-yyyy hh24:mi'),
BUILTIN.DF(DeletedRecord.deletedBy),
DeletedRecord.isCustomList,
DeletedRecord.isCustomRecord,
DeletedRecord.name,
DeletedRecord.recordId,
DeletedRecord.recordTypeId,
DeletedRecord.scriptId,
DeletedRecord.type
FROM
DeletedRecord
where deletedDate > '3/13/2024' and recordTypeId in ('journalentry', 'advintercompanyjournalentry')
and BUILTIN.DF(DeletedRecord.deletedBy) not like 'Brett%'
order by BUILTIN.DF(DeletedRecord.deletedBy), name
可在 SuiteTalk 中使用 getDeleted 操作使用
可使用 SuiteConnect(ODBC、JDBC 或 ADO.net)通过外部数据库查询获得
如果您可以从现在开始,一个简单的技巧如下:
创建在创建记录时运行的提交用户事件后脚本。如果记录没有外部 id,则将命名空间的 netsuite 内部 id 推入该字段。我发现在外部 ID 前添加原始系统前缀通常是个好主意。
现在您可以从外部 ID 派生出您的内部 ID。如果您也有实际的外部ID,这没有帮助,但可能适合您的用例。
您还可以相当轻松地自行开发并创建提交后用户事件脚本,该脚本使用已删除记录的类型和内部 ID 填充自定义记录。这通常是我走的路。特别是如果您从删除数据驱动 Netsuite 帐户中的其他 suitescript 或工作流程
最后,虽然我已经很多年没有这样做了,但从 SuiteScript 运行 SuiteTalk 查询是很有可能的。您只需保存凭证(不是明文)并构造适当的 SOAP 消息。
套件答案 ID:69458 建议以下方法可行:
var deletedRecords = search.create({
type: "deletedrecord",
filters:[
["deleteddate","within","today"]
],
columns:[
search.createColumn({name: "externalid"}),
search.createColumn({name: "deleteddate"}),
search.createColumn({name: "deletedby"}),
search.createColumn({name: "context"}),
search.createColumn({name: "name"})
]
});
var searchResultCount = deletedRecords.runPaged().count;
log.debug("deletedRecords result count",searchResultCount);
deletedRecords.run().each(function(result){
// .run().each has a limit of 4,000 results
return true;
});
根据 2020.2 记录浏览器,只有“externalid”可用。有时,我的系统中的外部 ID 和内部 ID 是相同的;不确定您对 NetSuite 的具体设置。