1

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

((TransactionSearchRow)row).basic.postingPeriod?[0].searchValue.name

注意:我以postingPeriod 为例,但还有许多其他记录返回“RecordRef”类型的“searchValue”,它们具有相同的问题。

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

在此处输入图像描述

所以我再次想知道,如何访问我可以从 SuiteTalk("searchValue.name") 的 NetSuite 界面看到的文本值?缺少 NetSuite 文档,显然在这种情况下它属于“句点”类型,但是如何枚举呢?或者在这种情况下,也许有一种不同的方式来检索价值?

我一直在环顾四周,但没有太多关于此的文章。我认为这篇文章中提到了这个问题。除此之外,我真的找不到任何东西。我已经检查了 API 文档,herehere,它没有多大帮助,我想知道是否有某种我没有看到的关于该主题的内部文档,但从我读过的内容来看,真的不多.

4

1 回答 1

2

通过尝试 SuiteTalk 中的所有 get 和 search 方法,我找到了答案,告诉我找到了一个能够返回正确类型结果的方法:

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();

此方法在此处列出,但并未真正提供足够的详细信息。另外,我不确定为什么:

Period(Column) = a.basic.postingPeriod(Property) = RecordType.accountingPeriod(Property) = AccountingPeriod(Type)

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

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

于 2016-11-10T19:58:22.240 回答