2016-11-08 3 views
0

ich eine kleine Anwendung, die iteriert über die Ergebnisse einer „Saved Search“ die Werte aus mehreren benutzerdefinierten Spalten Abrufen (vereinfachtes Beispiel):NetSuite SuiteTalk - abrufen Wert Zeichenfolge Von „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 
} 

Für die meisten zurückgegebene Spaltentypen Ich bekomme einen Wert, der mit dem Typ konsistent ist (bool/date/etc ...), aber mit dem "SearchColumnSelectCustomField" bekomme ich keinen Wert in dem zurückgegebenen "searchValue.name", es ist immer Null, aber der " searchValue.internalID "Spalte ist immer ausgefüllt. Aus irgendeinem Grund erhält es die Auswahl, aber nicht den Wert aus dieser Auswahl.

Wie greife ich auf den Textwert, den ich von der NetSuite-Schnittstelle von SuiteTalk sehen („searchValue.name“)? Muss ich eine andere Abfrage ausführen, um alle Wertschlüsselpaare abzurufen, die mit dieser internen ID verknüpft sind? Für jedes benutzerdefinierte Feld? Und wenn ja, was ist der Zweck des Namensfeldes überhaupt?

Ich habe versucht, die Suche um für diese, aber es ist nicht wirklich zuzuteilen Dokumentation zu diesem Thema (oder auf SuiteTalk im Allgemeinen), in anderen Sprachen (PHP/Java) Menschen „getSelectValue“ erwähnen (here und kurz here), Könnte ich dies in C# versuchen, aber ich bin mir nicht sicher, ob diese gelten oder wenn das für benutzerdefinierte Wertauswahlen getan werden kann. Dann gibt es einige Hinweise für die Werte vor der Suche zu bestimmen, this wie viel des Guten mir scheint, ist es schwer, wirklich? Ich habe Dutzende CustomFields, auf die ich in meiner endgültigen Anwendung zugreifen möchte. Scheint, wie sollte es einen einfacheren Weg geben ...

Antwort

1

Soweit ich weiß, nur die Web-Service-Antwort den internalId und TypeId für eine SearchColumnSelectCustomField enthalten wird. Um den Namen zu erhalten, müssen Sie zuerst NetSuite abfragen, um alle benutzerdefinierten Listen und ihre Werte zu finden.

Sie können dies eine CustomListSearch mit tun und die bodyFieldsOnly Sucheinstellungen auf false gesetzt. Übergeben Sie keine Kriterien an CustomListSearch und Sie werden jede benutzerdefinierte Liste und ihre Werte zurückgegeben. Speichern Sie die Ergebnisse einfach im Speicher und referenzieren Sie sie, wenn Sie die Spaltenwerte aus Ihrer gespeicherten Suche lesen.

+0

Das alles funktioniert gut, der als „SearchColumnSelectCustomField“, aber was Standardfelder zurückgegeben (SearchColumnSelectField) wie "postingperiod" und "createdBy" (Transaktion). Dasselbe Problem tritt auch bei diesen Feldern auf, würden diese nicht eine separate Suche erfordern? Was wäre die Art der Suche, die alle Werte für diese Arten von Feldern abrufen würde, oder ist das überhaupt möglich? –

+0

Ich glaube tatsächlich, die Folge auf Frage seine eigene Frage zu sein verdient, also habe ich es geschrieben [hier] (http://stackoverflow.com/questions/40517053/netsuite-suitetalk-retrieve-value-string-from-searchcolumnselectfield). –

2

ich die Antwort versucht, veröffentlicht von @ Adud123 und es funktioniert super, ist hier, was der Code wie folgt aussieht:

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() 
} 
Verwandte Themen