按客户 ID 搜索 Netsuite Note 记录的解决方法

Workaround to search Netsuite Note record by Customer id

我正在尝试让我正在开发的应用程序显示给定客户记录的所有相关用户注释(因为它出现在 Netsuite 中的 UI 客户记录页面上)。

为此,我设置了一个 Netsuite RESTlet return 给定客户内部 ID 的相关注释记录的内部 ID 列表。

我在 RESTlet 脚本中设置了一个简单的搜索:

function get_notes(params) {
  log("GET params", JSON.stringify(params));

  var filters = [
    new nlobjSearchFilter('internalid', 'customer', 'is', params.id)
  ];

  var columns = [
    new nlobjSearchColumn('internalid'),
    new nlobjSearchColumn('note'),
  ];

  var search = nlapiCreateSearch('note', filters, columns);
  var notes = search.runSearch().getResults(0, 3);
  return notes;
}

function log(msg, details) {
  nlapiLogExecution('DEBUG', msg, details);
}

脚本按预期工作,但问题是此搜索仅 returns author 字段(用户内部 ID)与用户内部 ID 匹配的注释执行搜索。意思是 - 您只能搜索您作为作者的笔记。

出于某些深不可测的安全原因,我被告知这是 'feature' Netsuite。

我需要能够获得所有相关注释 ID 的列表,而不仅仅是发出请求的用户是作者的那些。

关于获得所有相关注释的解决方法的任何想法?另一种构建搜索的方式?某种秘密方式来定义您自己的自定义搜索连接?

我什至找不到关于此行为的文档(阻止非作者的注释搜索)。也许有人知道如何在管理员级别覆盖它?

我还没准备好承认这是不可能的。

注意:用户注释是与客户记录关联的注释类型记录,而不是客户记录上的字段,因此我无法直接从客户访问它。也没有注释或用户注释的搜索过滤器或搜索加入。

基本上 RESTLETS 总是 运行 作为调用它们的用户。 如果您可以为此使用 Suitelet,您可以将其设置为 运行 作为管理员,并且可以 return 任何您可以搜索的笔记。

您真的需要 Restlet 吗?即你是从外部应用程序调用它还是试图在 NS GUI 中添加功能?如果是后者,那么您可以轻松地使用 Suitelet。

使用 RESTlet,您无法获取其他用户的注释,除非您使用 credentials/tokens 角色(如 Administrator/Full Access)调用 RESTlet。 RESTlets 始终在当前用户的上下文中运行。

一个替代方法,如果你真的想通过任何方式做到这一点:

1) 在 customer 上创建一个用户事件脚本,该脚本创建一个模拟系统注释功能的自定义记录。

2) 确保 RESTlet 用户角色对自定义记录具有完整级别的访问权限,并使客户成为自定义记录的父级。

3) 在您的 RESTlet 中 return 自定义记录。