Как отправить значения атрибутов с множественным выбором в Acumatica

#c# #soap #acumatica

Вопрос:

Я не могу найти пример этого здесь или в образце кода Acumatica. Отправка значений одного атрибута работает нормально, но я не могу найти способ отправки значений нескольких атрибутов. Они возвращаются в виде списка, разделенного запятыми, в строковом значении, но отправка их таким образом не работает. Кроме того, отправка их в виде нескольких экземпляров отдельных значений не работает.

Вот что я попробовал. (В реальном коде я также отправляю некоторые другие отдельные атрибуты в списке, но они отлично работают.)

 // this results in nothing being set for the attribute
string interestedIn = "Brochure, Contact, Collecting small stones";
List<Acumatica.AttributeDetail> attributes = new List<Acumatica.AttributeDetail>();
attributes.Add(
    new Acumatica.AttributeDetail {
        Attribute = new Acumatica.StringValue { Value = "Interested in" },
        Value = new Acumatica.StringValue { Value = interestIn }
    }
);
custAdd.Attributes = attributes.ToArray();
 
 // this results in the last item in the list being set for the attribute
string interestedIn = "Brochure, Contact, Collecting small stones";
List<Acumatica.AttributeDetail> attributes = new List<Acumatica.AttributeDetail>();
string[] interests = Convert.ToString(interestedIn).Split(',');
foreach (string interest in interests) {
    attributes.Add(
        new Acumatica.AttributeDetail {
            Attribute = new Acumatica.StringValue { Value = "Interested in" },
            Value = new Acumatica.StringValue { Value = interest.Trim() }
        }
    );
};
custAdd.Attributes = attributes.ToArray();
 

Ответ №1:

Из первоисточника

 MappedCustomer obj = bucket.Customer;
Core.API.Customer impl = obj.Local;
impl.Attributes = impl.Attributes ?? new List<AttributeValue>();
AttributeValue attribute = new AttributeValue();
attribute.AttributeID = new StringValue() { Value = attributeID };
attribute.ValueDescription = new StringValue() { Value = attributeValue?.ToString() };
impl.Attributes.Add(attribute);
 

Здесь есть некоторые тонкие различия. Кроме того, мне интересно, если бы .Необходимо вызвать функцию toArray ().

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

1. Это API REST? Я забыл упомянуть, что в этом проекте используется API SOAP, хотя я не забыл пометить вопрос таким образом. Вызов toArray() был необходим, потому что клиент SOAP. Элемент атрибутов представляет собой массив объектов AttributeDetail.

2. Это из исходного кода ERP. Я упоминаю о вызове toArray, потому что вы пытаетесь добавить элемент полезной нагрузки с большим количеством запятых. Вы должны быть в состоянии просто добавить список без этого вызова.

3. Я не вызываю toArray() для списка, разделенного запятыми. Это на другом уровне. В списке атрибутов есть и другие элементы (не показаны выше). Я должен позвонить toArray(), потому что Клиент. Атрибуты-это массив атрибутивных данных. Мне нужно добавить атрибут в этот массив, который сам по себе имеет несколько значений. Я думаю, что Acumatica называет эти атрибуты множественного выбора. При получении значения одного из этих атрибутов оно возвращается в виде строки, разделенной запятыми, но отправка его таким образом, чтобы попытаться обновить его, не работает; в результате для атрибута вообще не задается значение.