Экспорт локаций для клиента с помощью Acumatica API

Я пытаюсь использовать API веб-служб Acumatica для экспорта всех местоположений для клиента. Я ожидал, что с помощью экрана «Местоположение» я смогу установить фильтр в поле «Идентификатор клиента», которое, как мне кажется, является LocationSummary.Customer, и это вернет мне все местоположения для этого клиента. Вместо этого я всегда получаю 0 результатов. Код приведен ниже, и я также показал снимок экрана с местоположениями, которые существуют для тестового клиента с идентификатором 012349, и результаты отладчика, показывающие 0 возвращенных записей.

Public Function GetAddressList(ByVal customerID As String) As String()()
    Dim address As CR303010Content = m_context.CR303010GetSchema()
    m_context.CR303010Clear()

    Dim customerFilter As Filter = New Filter()
    customerFilter.Field = address.LocationSummary.Customer
    customerFilter.Condition = FilterCondition.Equals
    customerFilter.Value = customerID

    Dim searchfilters() As Filter = {customerFilter}
    Dim searchCommands() As Command = {address.LocationSummary.Customer, address.LocationSummary.LocationID, address.GeneralInfoLocationAddress.AddressLine1, address.GeneralInfoLocationAddress.City}
    Dim searchResult As String()() = m_context.CR303010Export(searchCommands, searchfilters, 0, False, False)

    Return searchResult
End Function

Адреса, показанные в ERP

Отладчик показывает массив searchResult длиной 0 Местоположения, возвращенные в отладчике


person Eric Barr    schedule 23.03.2015    source источник
comment
Я бы предложил другой подход. Вы можете создать свой собственный общий запрос и собрать все необходимые данные, а затем использовать веб-службы с вашими собственными данными для экспорта / фильтрации экрана.   -  person srodionov    schedule 25.03.2015


Ответы (1)


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

    Dim searchCustomer As New Value() With {.Value = customerID, .LinkedCommand = address.LocationSummary.BusinessAccount}
    Dim searchCommands() As Command = {searchCustomer,
                                       address.LocationSummary.ServiceCommands.EveryLocationID, address.LocationSummary.LocationID, address.GeneralInfoLocationAddress.AddressLine1, address.GeneralInfoLocationAddress.City}
    Dim searchResult As String()() = screen.Export(searchCommands, Nothing, 0, False, False)
person Gabriel    schedule 24.03.2015
comment
Спасибо @Gabriel. Это решило мою проблему, и я пометил ее как ответ. Боюсь, я до сих пор не понимаю решения. Всегда ли верно, что вместо фильтра вы можете добавить значение с помощью .LinkedCommand в качестве первой команды, и это приведет к той же цели? Можно ли это сделать для нескольких полей фильтра? Я тоже не понимаю вторую команду. Почему система НЕ перебирает все локации? Извините, я новичок в Acumatica, и если есть документация, которая объясняет это, мне бы хотелось получить ссылку на нее. Я не видел этого в нашей системе Acumatica. - person Eric Barr; 25.03.2015
comment
@EricBarr, LocationSummary.BusinessAccount - ключевое поле на этой странице. Когда вы вводите что-то в это поле, Acumatica ищет соответствующую запись с этим значением. То же самое происходит, когда вы оцениваете стоимость через веб-службы. Этот экран немного особенный, поскольку в нем есть два ключевых поля (код бизнес-счета + код местоположения). - person Gabriel; 26.03.2015
comment
@EricBarr, если вы не укажете EveryLocationID, вы получите только первый идентификатор местоположения. - person Gabriel; 26.03.2015