2016-11-09 48 views
0

说你试图访问从SuiteTalk的值返回类型“SearchColumnSelectField”:NetSuite的SuiteTalk - 检索字串值从“SearchColumnSelectField”

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

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

这(“searchValue.name”)将是无效的,类似问题的详细here,但不像CustomFields我没有看到基础上返回的“internalId”检索查找值的任何记录方式“searchValue”(通常填充)。为了进一步复杂化,返回的对象似乎没有指定“typeId”。它看起来是这样的:

enter image description here

所以再次我不知道,我如何访问文本价值,我可以从SuiteTalk(“searchValue.name”)NetSuite的界面看到了什么?缺乏NetSuite文档,在这种情况下显然是type "period",但是人们如何列举?或者在这种情况下,可能有不同的方式去获取价值?

我一直在环顾四周,但没有写很多关于这方面的内容。我认为这个问题在this post中提到。除此之外,我真的找不到任何东西。我已经检查了API文档herehere,这没什么帮助,我想知道是否有某种关于此主题的内部文档,我没有看到,但从我读到的文档中确实有not much

回答

0

我发现这似乎是答案通过尝试所有的获得和SuiteTalk告诉搜索方法,我发现这就是一个能够返回正确的结果类型的:

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

这种方法是listed here,但它并没有提供足够的细节。另外,我不知道为什么:

期(列)= a.basic.postingPeriod(物业)= RecordType.accountingPeriod(物业)= AccountingPeriod(类型)

我想一个有种必须猜测每种类型的对应关系。对于一段时间来说,这不是太糟糕,但对于其他一些可能会有点混淆。

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

相关问题