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()
}
我有一个小型应用程序,它迭代 "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()
}