Экспорт атрибутов бизнес-аккаунта с помощью Acumatica API

Наши бизнес-аккаунты в Acumatica имеют 13 настраиваемых атрибутов для нашего основного бизнес-класса. Мне удалось успешно сохранить значения атрибутов на основе примера Acumatica «Добавление записей в бизнес-счета и формы возможностей». Но я не смог понять, как получить значения с помощью экспорта.

Сначала я попытался использовать формат, аналогичный тому, как было указано поле при их сохранении.

 Public Function GetCustomerAttributes(ByVal customerID As String) As String()()
    Dim customer As CR303000Content = m_context.CR303000GetSchema()
    m_context.CR303000Clear()

    Dim idFilter As Filter = New Filter()
    idFilter.Field = customer.AccountSummary.BusinessAccount
    idFilter.Condition = FilterCondition.Equals
    idFilter.Value = customerID

    ' SIMILAR TO EXAMPLE FOR SAVING
    Dim awdField As Field = New Field()
    awdField.ObjectName = customer.Attributes.Attribute.ObjectName
    awdField.FieldName = "AWD Number"

    Dim searchfilters() As Filter = {idFilter}
    Dim searchCommands() As Command = {awdField}
    Dim searchResult As String()() = m_context.CR303000Export(searchCommands, searchfilters, 0, False, False)
    Return searchResult
End Function

Я думал, что это вернет один результат со значением нашего атрибута с именем «AWD Number». Вместо этого он вернул 13 результатов, по одному для каждого атрибута, и значение каждого из них было пустым. Я изменил FieldName на customer.Attributes.Attribute.FieldName, а затем он начал возвращать имя каждого атрибута. Поэтому я подумал, что если я добавлю еще одно поле для значения, тогда я могу получить имя и значение в отдельных результатах, например:

Public Function GetCustomerAttributes(ByVal customerID As String) As String()()
    Dim customer As CR303000Content = m_context.CR303000GetSchema()
    m_context.CR303000Clear()

    Dim idFilter As Filter = New Filter()
    idFilter.Field = customer.AccountSummary.BusinessAccount
    idFilter.Condition = FilterCondition.Equals
    idFilter.Value = customerID

    Dim awdField As Field = New Field()
    awdField.ObjectName = customer.Attributes.Attribute.ObjectName
    awdField.FieldName = customer.Attributes.Attribute.FieldName

    Dim awdValue As Field = New Field()
    awdValue.ObjectName = customer.Attributes.Attribute.ObjectName
    awdValue.FieldName = customer.Attributes.Attribute.Value

    Dim searchfilters() As Filter = {idFilter}
    Dim searchCommands() As Command = {awdField, awdValue}
    Dim searchResult As String()() = m_context.CR303000Export(searchCommands, searchfilters, 0, False, False)
    Return searchResult
End Function

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

Кто-нибудь знает, как я могу получить значения? Меня действительно не волнует, нужно ли мне получать их по одному, но я бы предпочел получить их все сразу с их именами или кодами, чтобы мне не приходилось полагаться на то, что индексы всегда остаются неизменными. Ниже приведены изображения отладчика, работающего на моем втором примере и просматриваемого в Acumatica. Спасибо!

Отладчик для 2-го примера

Атрибуты в Acumatica


person Eric Barr    schedule 11.04.2015    source источник


Ответы (1)


Ваша первая попытка верна, однако вы используете неправильное имя объекта и имя поля. Система будет динамически добавлять поля к основному объекту (представлению) экрана, в данном случае к имени объекта, представленному customer.AccountSummary.BusinessAccount.ObjectName variable (я предлагаю вам также использовать отладчик, чтобы увидеть, чему это значение равно - хорошее упражнение для обучения).

В имени поля атрибута будет использоваться то же соглашение об именах, что и в Как получить поле атрибута в StockItems в Acumatica API?. Соглашение об именах - _Attributes. Идентификатор атрибута не является именем атрибута; Я не вижу вашей конфигурации, но сомневаюсь, что в вашем случае идентификатор атрибута - «AWD Number». Подводя итог, код будет выглядеть так:

Dim awdField As Field = New Field()
awdField.ObjectName = customer.AccountSummary.BusinessAccount.ObjectName
awdField.FieldName = "AWDNumber_Attributes"

В вашем примере, помещая объект Attributes.Attribute.ObjectName, система будет перебирать все значения внутри этой таблицы, а затем возвращать для каждой строки нужные вам поля. Я не совсем уверен, почему в этом случае вы не видите все значения атрибутов, но я думаю, что вам должно понравиться приведенный выше пример.

person Gabriel    schedule 12.04.2015
comment
Спасибо! Я действительно пробовал этот формат для FieldName в моем первом примере, но определенно не пробовал это ObjectName. Я был убежден, что это должны быть ссылки на атрибуты - person Eric Barr; 13.04.2015