如何使用Suitescript 2.0获取Netsuite中已删除记录的id?

问题描述 投票:0回答:2

我可以使用下面的脚本从 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?

netsuite suitescript2.0 restlet-2.0
2个回答
1
投票

截至 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 消息。


0
投票

套件答案 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 的具体设置。

© www.soinside.com 2019 - 2024. All rights reserved.