Как вы ищите с TransactionSearch? - PullRequest
       13

Как вы ищите с TransactionSearch?

0 голосов
/ 20 апреля 2019

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

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

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);



        }

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

1 Ответ

1 голос
/ 22 апреля 2019

Думайте о TransactionSearchAdvanced() как о сохраненном поиске в пользовательском интерфейсе. Вам необходимо указать критерии для использования И столбцы, которые вы хотите вернуть. Перед запуском поиска добавьте следующий код, чтобы указать возвращаемые столбцы. Возможно, вы также захотите добавить критерий для mainLine, равный 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...