NetSuite SuiteTalk - 从 "SearchColumnSelectCustomField" 检索值字符串

NetSuite SuiteTalk - Retrieve Value String From "SearchColumnSelectCustomField"

我有一个小型应用程序,它迭代 "Saved Search" 从多个自定义列中检索值的结果(简化示例):

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" 我在返回的 [=24= 中没有得到任何值],它始终为空,但 "searchValue.internalID" 列始终被填充。所以出于某种原因,它获得了选择但没有从该选择中返回值。

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

我试过四处搜索这个,但并没有真正分配关于这个主题的文档(或者一般的 SuiteTalk),用其他语言(PHP/Java)人们提到 "getSelectValue"( here, and briefly here),我可以在 C# 中尝试这个,但我不确定这些是否适用,或者是否可以为自定义值选择完成。 然后有一些用于在搜索之前确定值的参考,this 对我来说似乎有点过分,真的有那么难吗?我有几十个 CustomFields 我想在我的最终应用程序中访问。似乎应该有更简单的方法...

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

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

我尝试了@Adud123 发布的答案,效果很好,代码如下所示:

public Dictionary<string, Dictionary<long, string>> 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()
}