NetSuite SuiteTalk – 从“SearchColumnSelectCustomField”中检索值字符串

我有一个小应用程序,它迭代“保存的搜索”的结果,从几个自定义列中检索值(简化示例):

var results = searchResults.Select(a => new { X = ((SearchColumnBooleanCustomField)a.basic.customFieldList .First(b => b.scriptId == "custentityX")).searchValue Y = ((SearchColumnDateCustomField)a.basic.customFieldList .First(b => b.scriptId == "custentityY")).searchValue Z = ((SearchColumnSelectCustomField)a.basic.customFieldList .First(b => b.scriptId == "custentityZ")).searchValue.name } 

对于大多数返回的列类型,我得到一个与类型一致的值(bool / date / etc …)但是使用“SearchColumnSelectCustomField”我在返回的“searchValue.name”中没有得到任何值,它总是为null,但是始终填充“searchValue.internalID”列。 因此,出于某种原因,它获得了选择但没有返回该选择的值。

如何从SuiteTalk(“searchValue.name”)访问NetSuite界面中可以看到的文本值? 我是否必须执行另一个查询来检索与该internalID相关的所有值密钥对? 对于每个自定义领域? 如果是这样,那么名称字段的目的首先是什么?

我已经尝试过搜索这个,但是关于这个主题(或者一般来说是SuiteTalk)并没有真正的文档,在其他语言(PHP / Java)中,人们提到“getSelectValue”( 这里 ,简要地说),我可以在C#中尝试这个,但我不确定这些是否适用或者是否可以自定义值选择。 然后有一些参考来确定搜索之前的值, 这对我来说似乎有些过分,难道真的那么难吗? 我想在最终的应用程序中访问几十个CustomField。 似乎应该有一个更简单的方法……

据我所知,Web服务响应只包含SearchColumnSelectCustomField的internalId和typeId。 要获取名称,您必须首先查询NetSuite以查找所有自定义列表及其值。

您可以使用CustomListSearch执行此操作,并将bodyFieldsOnly搜索首选项设置为false。 没有标准传递给CustomListSearch,您将返回每个自定义列表及其值。 只需将结果存储在内存中,并在从已保存的搜索中读取列值时引用它。

我尝试了@ Adud123发布的答案并且效果很好,以下是代码的样子:

 public Dictionary> getCustomFieldLists() { return nsService.search(new CustomListSearch()) .recordList.Select(a => (CustomList) a) .ToDictionary(a => a.internalId, a => a.customValueList.customValue .ToDictionary(b => b.valueId, c => c.value)); } var valueLookup = getCustomFieldLists(); var results = searchResults.Select(a => new { Z = (a.basic.customFieldList.Where(b => b.scriptId == "custentityZ") .Select(a => (SearchColumnSelectCustomField)a) .Select(a => valueLookup[a.searchValue.typeId][a.searchValue.internalId]) .First() }