2016-11-09 3 views
0

Допустим, вы пытаетесь получить доступ значение из SuiteTalk, который возвращается как «SearchColumnSelectField» типа:NetSuite SuiteTalk - Получить строковое значение из «SearchColumnSelectField»

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

Примечание: Я использую postingPeriod в качестве примера, но есть много других записей, которые возвращают «searchValue» типа «RecordRef», которые имеют одинаковую проблему.

Это («searchValue.name») будет нулевым, подобный этому вопросу подробно here, но в отличие от CustomFields я не вижу документированный способ извлечения значений подстановки на основе «internalId» возвращенного «searchValue» (обычно заполняется). Чтобы еще больше усложнить ситуацию, у возвращаемого объекта не указано «типId». Это выглядит примерно так:

enter image description here

Так снова интересно, как я могу получить доступ текстовое значение, которое я могу видеть из интерфейса NetSuite из SuiteTalk («searchValue.name»)? Документация NetSuite отсутствует, очевидно, что в этом случае она равна type "period", но как это можно перечислить? Или в этом случае, возможно, существует другой способ получить значение?

Я оглядывался, но об этом ничего не сказано. Я думаю, что этот вопрос упоминается в this post. Помимо этого я действительно ничего не могу найти. Я уже проверил документацию по API, here и here, это не очень помогает, интересно, есть ли какая-то внутренняя документация по теме, которую я не вижу, но из того, что я прочитал, действительно есть 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, но на самом деле это не дает достаточных подробностей. Кроме того, я не знаю, почему:

Период (Column) = a.basic.postingPeriod (Свойство) = RecordType.accountingPeriod (Свойство) = AccountingPeriod (тип)

Я думаю, один вид должен угадать, что соответствует каждому типу. Для периода это не так уж плохо, но для некоторых других это может быть немного запутанным.

Я надеюсь, что это поможет кому-то другому, для меня это был сложный процесс. Если у кого-то еще есть какие-то другие решения, я по-прежнему открыт для предложений. Я все еще не уверен, что это самый эффективный метод извлечения данных.