我正在尝试获取一个应用程序,我正在努力显示给定客户记录的所有相关用户注释(因为它显示在Netsuite中的UI客户记录页面上) .
为此,我设置了一个Netsuite RESTlet,以便在给定Customer内部标识的情况下返回相关Note记录的内部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);
}
该脚本按预期工作,但问题是此搜索仅返回Notes,其中 author
字段(用户内部标识)与执行搜索的用户的内部标识匹配 . 含义 - 您只能搜索您作为作者的Notes .
我被告知这是Netsuite的一个“功能”,因为一些不可思议的安全原因 .
我需要能够获得所有相关Note ID的列表,而不仅仅是那些发出请求的用户是作者的列表 .
有关解决方法的任何想法,以获取所有相关的Notes?构建搜索的另一种方式是什么?某种秘密方式来定义自己的自定义搜索联接?
我甚至找不到关于这种行为的文档(阻止来自非作者的注释搜索) . 也许有人知道如何在管理级别覆盖它?
我还没准备好承认这是不可能的 .
注意:User Note是与Customer记录关联的Note类型记录,而不是Customer记录中的字段,因此我无法直接从Customer访问它 . 注释或用户注释也没有搜索过滤器或搜索连接 .
2 回答
使用RESTlet除非使用管理员/完全访问等角色的凭证/令牌调用RESTlet,否则无法获取其他用户的注释 . RESTlet始终在当前用户的上下文中运行 .
这样做的另一种选择,如果你真的必须实现这一点,那么:
1)在客户上创建用户事件脚本,该脚本创建模拟系统注释功能的自定义记录 .
2)确保RESTlet用户角色对自定义记录具有完全级别的访问权限,并使客户成为自定义记录的父级 .
3)在RESTlet中返回自定义记录 .
基本上,RESTLETS始终以调用它们的用户身份运行 . 如果您可以使用Suitelet,则可以将其设置为以管理员身份运行,并且可以返回您可以搜索的任何Notes .
你真的需要Restlet吗?即您是从外部应用程序调用此函数,还是在尝试在NS GUI中添加功能?如果是后者,那么您可以轻松使用Suitelet .