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