从 2016_2 版开始,SuiteTalk 不支持该Deleted Record
记录,这意味着您无法运行已保存的搜索并下拉结果。
在与 NetSuite 集成时,这种情况并不少见。:(
在这些情况下,我一直在做的是创建一个 RESTlet(NetSuite 的 RESTful API 框架)SuiteScript,它将运行搜索(或使用 SuiteScript 做任何可能的事情,而使用 SuiteTalk 做不到的事情)并返回结果。
从文档中:
您可以按照 RESTful 原则部署与 NetSuite 数据交互的服务器端脚本。RESTlet 扩展了 SuiteScript API 以允许与 NetSuite 进行自定义集成。使用 RESTlet 的一些好处包括:
通过实现比基于 SOAP 的 Web 服务更轻量级和更灵活的 RESTful 集成,寻找增强可用性和性能的机会。支持客户端和服务器之间的无状态通信。控制客户端和服务器的实现。在 HTTP 标头中使用基于令牌或用户凭据的内置身份验证。在 iPhone 和 Android 等平台上开发移动客户端。集成外部基于 Web 的应用程序,例如 Gmail 或 Google Apps。为基于 Suitelet 的用户界面创建后端。RESTlet 让熟悉 SuiteScript 的开发人员易于采用,并且支持比 NetSuite 基于 SOAP 的 Web 服务更多的行为,后者仅限于定义为 SuiteTalk 操作的那些。RESTlet 也比 Suitelet 更安全,Suitelets 无需登录即可供用户使用。
在您的情况下,这将是一个几乎可以创建的脚本,它将收集结果并返回 JSON 编码(最简单)或您需要的任何格式。
与编写脚本相比,您可能会花费更多时间让基于令牌的身份验证 (TBA) 正常工作。
[更新]添加一些与我在下面的评论中提到的相关的代码示例:
请注意,SuiteTalk 代理对象模型令人沮丧,因为它缺少可以很好利用的继承。因此,您以 SafeTypeCastName() 之类的代码结束。在使用 SuiteTalk 代理时,反射是我工具箱中最好的工具之一。例如,所有 *RecordRef 类型都有共同的字段/道具,因此反射可以节省您在所有地方进行类型检查以使用您怀疑拥有的对象。
public static TType GetProperty<TType>(object record, string propertyID)
{
PropertyInfo pi = record.GetType().GetProperty(propertyID);
return (TType)pi.GetValue(record, null);
}
public static string GetInternalID(Record record)
{
return GetProperty<string>(record, "internalId");
}
public static string GetInternalID(BaseRef recordRef)
{
PropertyInfo pi = recordRef.GetType().GetProperty("internalId");
return (string)pi.GetValue(recordRef, null);
}
public static CustomFieldRef[] GetCustomFieldList(Record record)
{
return GetProperty<CustomFieldRef[]>(record, CustomFieldPropertyName);
}