2016-11-08 44 views
0

我有一個小的應用程序,在「保存搜索」結果中檢索從幾個自定義列的值(簡化的例子)迭代:NetSuite的SuiteTalk - 檢索字串值從「SearchColumnSelectCustomField」

var results = searchResults.Select(a => new 
{ 
    X = ((SearchColumnBooleanCustomField)a.basic.customFieldList 
     .First(b => b.scriptId == "custentityX")).searchValue 
    Y = ((SearchColumnDateCustomField)a.basic.customFieldList 
     .First(b => b.scriptId == "custentityY")).searchValue 
    Z = ((SearchColumnSelectCustomField)a.basic.customFieldList 
     .First(b => b.scriptId == "custentityZ")).searchValue.name 
} 

對於大多數返回的列類型我得到一個與類型(bool/date/etc ...)一致的值,但是使用「SearchColumnSelectCustomField」我沒有在返回的「searchValue.name」中得到任何值,但它始終爲空,但是「 searchValue.internalID「列總是被填充。所以出於某種原因,它獲得了選擇,但沒有返回該選擇的值。

如何訪問我可以從SuiteTalk(「searchValue.name」)的NetSuite界面中看到的文本值?我是否必須執行另一個查詢來檢索與該內部ID相關的所有值密鑰對?對於每個自定義字段?如果是這樣,那麼名稱字段的目的是什麼? (其他語言(PHP/Java))中,人們提到「getSelectValue」(here,簡要地說here)並沒有真正的關於這個主題(或一般的SuiteTalk)的文檔分配),我可以在C#中試試這個,但我不確定這些是否適用,或者是否可以對自定義值進行選擇。 然後有一些確定搜索前的值的參考文獻,this似乎對我來說過分誇張,難道這真的很難嗎?我有幾十個我想在我的最終應用中訪問的CustomFields。似乎應該有一個更簡單的方法...

回答

1

據我所知,Web服務響應將只包含一個SearchColumnSelectCustomField的internalId和typeId。爲了獲得名稱,您必須首先查詢NetSuite以查找所有自定義列表及其值。

您可以使用CustomListSearch執行此操作,並將bodyFieldsOnly搜索首選項設置爲false。不傳遞任何條件給CustomListSearch,並且您將返回每個自定義列表及其值。只需將結果存儲在內存中,並在從保存的搜索中讀取列值時參考它。

+0

這對於返回爲一個「SearchColumnSelectCustomField」一切,但對於標準字段的偉大工程( SearchColumnSelectField),比如「postingperiod」和「createdBy」(Transaction)。這些字段也會出現同樣的問題,這不需要單獨查找嗎?什麼樣的搜索類型將檢索這些類型的字段的所有值,或者甚至可能? –

+0

我其實認爲後續問題值得成爲自己的問題,所以我已經發布了它[這裏](http://stackoverflow.com/questions/40517053/netsuite-suitetalk-retrieve-value-string-from-searchcolumnselectfield )。 –

2

我試圖張貼@ Adud123的答案,它的偉大工程,這裏的代碼如下所示:

public Dictionary<string, Dictionary<long, string>> getCustomFieldLists() 
{ 
    return 
     nsService.search(new CustomListSearch()) 
      .recordList.Select(a => (CustomList) a) 
      .ToDictionary(a => a.internalId, 
       a => a.customValueList.customValue 
        .ToDictionary(b => b.valueId, c => c.value)); 
} 

var valueLookup = getCustomFieldLists(); 

var results = searchResults.Select(a => new 
{ 
    Z = (a.basic.customFieldList.Where(b => b.scriptId == "custentityZ") 
     .Select(a => (SearchColumnSelectCustomField)a) 
     .Select(a => valueLookup[a.searchValue.typeId][a.searchValue.internalId]) 
     .First() 
} 
相關問題