2016-11-09 49 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(類型)

我想一個有種必須猜測每種類型的對應關係。對於一段時間來說,這不是太糟糕,但對於其他一些可能會有點混淆。

我希望這能幫助別人,對我而言,這是一個艱難的過程。如果其他人有任何其他解決方案,我仍然樂於接受建議。我仍然不確定這是否是最有效的數據檢索方法。

相關問題