Как вы выполняете поиск с помощью TransactionSearch?

#c# #netsuite

#c# #netsuite

Вопрос:

Как вы находите платеж поставщика (транзакцию) с внутренним идентификатором платежа поставщика? Мне трудно понять, как работает поиск транзакций.

Ниже приведен мой код: он возвращает успех, но результата нет

 using (var serviceClient = new ServiceClient(token))
        {
            var tranSearch = new TransactionSearchAdvanced();

            var recordRefs = new List<RecordRef>();
            recordRefs.Add(new RecordRef()
            {
                internalId = @"723212",
                type = RecordType.vendorPayment,
                typeSpecified = true
            });

            var types = new List<string>();
            types.Add(@"_vendorPayment");
            tranSearch.criteria = new TransactionSearch()
            {
                basic = new TransactionSearchBasic()
                {
                    internalId = new SearchMultiSelectField()
                    {
                        @operator = SearchMultiSelectFieldOperator.anyOf,
                        operatorSpecified = true,
                        searchValue = recordRefs.ToArray()
                    },
                    type = new SearchEnumMultiSelectField()
                    {
                        @operator = SearchEnumMultiSelectFieldOperator.anyOf,
                        operatorSpecified = true,
                        searchValue = types.ToArray()
                    }                        
                }                    

            };                

            var result = serviceClient.search(tranSearch);



        }
  

Результат поиска возвращает успех, однако в списке записей нет записи или поиска в searchrowlist.

Ответ №1:

Подумайте о TransactionSearchAdvanced() сохраненном поиске в пользовательском интерфейсе. Вам нужно указать критерии для использования и столбцы, которые вы хотите вернуть. Перед запуском поиска добавьте следующий код, чтобы указать возвращаемые столбцы. Вероятно, вы захотите добавить критерии и для основной true строки, или вы получите один результат на строку транзакции, а не один результат на транзакцию.

 tranSearch.columns = new TransactionSearchRow()
{
    basic = new TransactionSearchRowBasic()
    {
        tranId = new[] {new SearchColumnStringField()}
    }
};

var result = ns.search(tranSearch);

if (result.status.isSuccess)
{
    foreach (var rowList in result.searchRowList)
    {
        if (rowList is TransactionSearchRow row)
        {
            var tranId = row.basic.tranId[0].searchValue;
            var total = row.basic.total[0].searchValue;
            Console.WriteLine($"{tranId} - {total}");
        }
    }
}
  

Самый простой метод: поскольку у вас есть внутренний идентификатор, вы можете использовать TransactionSearchBasic() для получения всей записи следующим образом:

 var search = new TransactionSearchBasic()
{
    type = new SearchEnumMultiSelectField()
    {
        @operator = SearchEnumMultiSelectFieldOperator.anyOf,
        searchValue = new[] { "_vendorPayment" },
        operatorSpecified = true,
    },
    internalId = new SearchMultiSelectField()
    {
        @operator = SearchMultiSelectFieldOperator.anyOf,
        searchValue = new[] { new RecordRef { internalId = "723212" } },
        operatorSpecified = true
    }
};

var results = ns.search(search);

foreach (var result in results.recordList)
{
    if (result is VendorPayment vendorPayment)
    {
        Console.WriteLine(vendorPayment.tranId);
    }
}
  

Комментарии:

1. Спасибо за вашу помощь, но я все еще получаю 0 записей. Есть ли какое-то разрешение, которое вам нужно установить? Я использую аутентификацию токена.

2. Для меня это не похоже на разрешения. Если бы у вас не было разрешений на запись vendorPayment, вы бы получили сообщение что-то вроде «Ваша роль не дает вам разрешений на просмотр этой страницы». Если вы не получаете результатов, возможно ли, что у вас неверный внутренний идентификатор? Если я введу неверный внутренний идентификатор, поиск будет успешным, но строки не будут возвращены.

3. app/accounting/transactions/vendpymt.nl?id=723212amp;откуда=. Не является ли внутренний идентификатор 723212 для этого платежа поставщика? У меня включается внутренний идентификатор, поэтому, когда я перехожу к оплате счета. рядом с записью оплаты счета есть список внутренних идентификаторов. я также использую идентификатор из URL. если я не ошибаюсь, но разве оплата счета не является оплатой поставщику?

4. ДА. Это внутренний идентификатор.

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