C# NetSuite SuiteTalk-从“;SearchColumnSelectField”;

C# NetSuite SuiteTalk-从“;SearchColumnSelectField”;,c#,web-services,soap,netsuite,suitetalk,C#,Web Services,Soap,Netsuite,Suitetalk,假设您正在尝试访问SuiteTalk中返回为“SearchColumnSelectField”类型的值: 注意:我使用postingPeriod作为示例,但是有许多其他返回“RecordRef”类型的“searchValue”的记录也有相同的问题 这个(“searchValue.name”)将为空,与详细的问题类似,但与CustomFields不同,我没有看到任何基于返回的“searchValue”(通常填充)的“internalId”检索查找值的文档化方法。更复杂的是,返回的对象似乎没有指定“

假设您正在尝试访问SuiteTalk中返回为“SearchColumnSelectField”类型的值:

注意:我使用postingPeriod作为示例,但是有许多其他返回“RecordRef”类型的“searchValue”的记录也有相同的问题

这个(“searchValue.name”)将为空,与详细的问题类似,但与CustomFields不同,我没有看到任何基于返回的“searchValue”(通常填充)的“internalId”检索查找值的文档化方法。更复杂的是,返回的对象似乎没有指定“typeId”。它看起来像这样:

因此,我再一次想知道,如何从SuiteTalk(“searchValue.name”)的NetSuite界面访问可以看到的文本值?NetSuite文档是缺乏的,显然在本例中是缺乏的,但是如何列举呢?或者在这种情况下,可能有不同的方法来检索值


我已经到处找过了,但是没有很多关于这方面的文章。我认为这一问题在报告中有所提及。除此之外,我真的什么也找不到。我已经查阅了API文档,没有什么帮助,我想知道是否有一些关于这个主题的内部文档我没有看到,但是从我所读到的内容来看,.

通过尝试SuiteTalk-tell中的所有获取和搜索方法,我找到了一个能够返回正确类型结果的方法:

NetSuiteService nsService = ... //Your NetSuiteService
IEnumerable<TransactionSearchRow> rows = ... //The results of your query

var lookup = nsService.getList(rows.
                Where(a => a.basic.postingPeriod.Any())
                .Select(a =>
                {
                    var value = a.basic.postingPeriod[0].searchValue;
                    value.type = RecordType.accountingPeriod;
                    value.typeSpecified = true;
                    return value;
                })
                .GroupBy(a => a.internalId)
                .Select(a => a.First())
                .ToArray()).readResponse
                .ToDictionary(a => ((AccountingPeriod)a.record).internalId, 
                    a => ((AccountingPeriod)a.record).periodName);

var allPeriods = rows
    .Select(a => a.basic.postingPeriod.Any() ? 
         lookup[a.basic.postingPeriod[0].searchValue.internalId] : "")
    .ToArray();
NetSuite服务nsService=//您的NetSuite服务
IEnumerable行=//查询的结果
var lookup=nsService.getList(行)。
其中(a=>a.basic.postingPeriod.Any())
.选择(a=>
{
var value=a.basic.postingPeriod[0]。searchValue;
value.type=RecordType.accountingPeriod;
value.typeSpecified=true;
返回值;
})
.GroupBy(a=>a.internalId)
.Select(a=>a.First())
.ToArray()).readResponse
.ToDictionary(a=>((会计期间)a.record).internalId,
a=>((会计期间)a.record.periodName);
var allPeriods=行
.Select(a=>a.basic.postingPeriod.Any()?
查找[a.basic.postingPeriod[0]。searchValue.internalId]:“”)
.ToArray();
这种方法是可行的,但它并没有提供足够的细节。另外,我也不知道为什么:

期间(列)=a.basic.postingPeriod(属性)=记录类型。会计期间(属性)= 会计期间(类型)

我猜有一种人也必须猜出每种类型对应的是什么。对于一段时间来说,这并不太糟糕,但对于其他一些人来说,这可能有点令人困惑

我希望这能帮助其他人,对我来说这是一个艰难的过程。如果其他人有任何其他解决方案,我仍然愿意接受建议。我仍然不确定这是最有效的数据检索方法

NetSuiteService nsService = ... //Your NetSuiteService
IEnumerable<TransactionSearchRow> rows = ... //The results of your query

var lookup = nsService.getList(rows.
                Where(a => a.basic.postingPeriod.Any())
                .Select(a =>
                {
                    var value = a.basic.postingPeriod[0].searchValue;
                    value.type = RecordType.accountingPeriod;
                    value.typeSpecified = true;
                    return value;
                })
                .GroupBy(a => a.internalId)
                .Select(a => a.First())
                .ToArray()).readResponse
                .ToDictionary(a => ((AccountingPeriod)a.record).internalId, 
                    a => ((AccountingPeriod)a.record).periodName);

var allPeriods = rows
    .Select(a => a.basic.postingPeriod.Any() ? 
         lookup[a.basic.postingPeriod[0].searchValue.internalId] : "")
    .ToArray();