我有记录类型“XYZ”,其具有名为“奖励区域”的字段,其类型列表/记录。 “奖励区域”是自定义列表类型,是一个下拉控件。
使用Suitetalk如何从该下拉列表中检索这些值?
谢谢
答案 0 :(得分:0)
我觉得this之类的东西应该有效。它将用于将internalId的结果转换为实际文本类型,您可能能够以另一种方式利用它。也许你可以用这样的东西(C#)创建一个查找列表:
public Dictionary<string, Dictionary<long, string>> getCustomFieldLists()
{
return
nsService.search(new CustomListSearch())
.recordList.Select(a => (CustomList) a)
.ToDictionary(a => a.name,
a => a.customValueList.customValue
.ToDictionary(b => b.valueId, c => c.value));
}
var valueLookup = getCustomFieldLists()["award area"];
答案 1 :(得分:0)
这是我为自己做的事情,因为NetSuite不仅为我们提供了一种方便的方式来访问这些内容,这让我很恼火。我希望以下数据可供参考:
我希望/需要访问所有这些内容,并且我希望能够仅通过提供Custom List的内部ID和Custom List Item的内部ID来获取Custom List Item的名称Value。因此,在我自己的集成客户端中,类似于David Rogers的回答,但没有花哨的Linq,我发现最好的解决方案是Dictionary >>。
这样,对于外部词典,我可以将关键字设置为“定制列表”的内部ID,对于内部词典,我可以将关键字设置为“定制列表项目”本身的内部ID。然后,我将获得“免费”自定义列表的名称作为元组的开始部分,并获得“免费”的实际名称值作为内部字典的值。
下面是我生成该对象的方法代码:
/// <summary>
/// Gets the collection of all custom lists, and places it in the public CustomListEntries object
/// </summary>
/// <returns></returns>
private Dictionary<string, Tuple<string, Dictionary<long, string>>> GetCustomLists()
{
Dictionary<string, Tuple<string, Dictionary<long, string>>> customListEntries = new Dictionary<string, Tuple<string, Dictionary<long, string>>>();
SearchPreferences sp = SuiteTalkService.searchPreferences; //Store search preferences to reset back later, just need body fields this one time
SuiteTalkService.searchPreferences = new SearchPreferences() { bodyFieldsOnly = false };
SearchResult sr = SuiteTalkService.search(new CustomListSearch());
SuiteTalkService.searchPreferences = sp; //Restore search preferences
foreach (CustomList cl in sr.recordList)
{
Dictionary<long, string> customListItems = new Dictionary<long, string>();
if (cl.customValueList == null) continue;
foreach (CustomListCustomValue clcv in cl.customValueList.customValue)
{
customListItems.Add(clcv.valueId, clcv.value);
}
customListEntries.Add(cl.internalId, new Tuple<string, Dictionary<long, string>>(cl.name, customListItems));
}
return customListEntries;
}
然后,在我的Integration类的构造函数中,我可以将对象设置为返回结果:
public Dictionary<string, Tuple<string, Dictionary<long, string>>> CustomListEntries = GetCustomLists();
最后,每当我需要访问这些值时,由于我将所有这些设置都提前了,所以我可以执行以下操作:
dr[Class] = SuiteTalkIntegrator.CustomListEntries[lorr.typeId].Item2[long.Parse(lorr.internalId)];
在上面的这种情况下,我的“ lorr”对象是一个ListOrRecordRef对象,该对象是我从SavedSearch的搜索结果中从SearchColumnSelectCustomField.searchValue获得的。我不知道这对其他找到此代码的人是否有用,但是由于我对找到此问题的简单答案感到沮丧,所以我想与所有人共享我的解决方案。
坦率地说,我最沮丧的是,此功能并没有立即提供给我们,但我注意到NetSuite在SuiteTalk API中做出了很多错误的设计选择,例如不进行自定义记录字段的“ RecordField”类,而不是将其记录字段放在RecordField的IEnumerable下,这样程序员就可以以通用方式遍历记录中的所有值,而不必显式命名它们并重新构造相同的代码逻辑。一遍又一遍...呃...