Обработка электронных тегов для odatav2 в SAP Cloud SDK VDM - PullRequest
2 голосов
/ 04 февраля 2020

Использование ПОСЛЕДНЕГО java SAP Cloud Sdk

Мы пытаемся выполнить обновление OutboundDelivery в системе S / 4. Мы используем API_OUTBOUND_DELIVERY_SRV версии 2 для этого. Служба требует, чтобы мы использовали etag, т. Е. Она требует от нас предоставить заголовок - if-match с соответствующим значением etag.

Мы используем VDM для выполнения обновления и используем com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch , Ниже приведен фрагмент кода, использованный для обновления:

...
OutboundDeliveryV2ServiceBatch service = // Instantiate service;

List<OutbDeliverItem> itemsToUpdate = new ArrayList<>();

items.add(OutbDeliveryItem.builder()
            .deliveryDocument("some key")
            .deliveryDocumentItem("some key")
            .build());

// Assume more additions to items
...
...
...

OutboundDeliveryV2ServiceBatchChangeSet changeSet = service.beginChangeSet();

items.forEach(changeSet::updateOutbDeliveryItem);

changeSet.endChangeSet();

BatchResponse response = service.execute(someDestination);
...

Как только выполняется service.execute(someDestination), обновление не выполняется на S / 4, а журналы на S / 4 выдают следующую ошибку:

The Data Service Request is required to be conditional. Try using the "If-Match" header.

Мои вопросы:

  1. Почему VDM / SDK не заботится о внутренней обработке etag? Согласно разделу Optimisti c управления параллелизмом в этом блоге , упоминается, что об этом автоматически заботятся в javascript sdk, но как насчет java sdk?
  2. Можно ли как-то передать этот заголовок, используя VDM? Если да, то как?
  3. Или мы должны разрешить go управления оптимистичным c параллелизмом из нашего сервиса в S / 4?

Обратите внимание, что у нас есть использовать саму пакетную операцию по причинам производительности.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

ETag отсутствуют, потому что обновляемые элементы программно создаются в вашем приложении с использованием шаблона компоновщика. Поэтому при выполнении обновления на них нет ETag, а в SDK нет ни одного доступного для установки заголовка «If-Match» при создании запроса.

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

1 голос
/ 04 февраля 2020

Прежде всего, я не совсем понимаю, какую версию SAP Cloud SDK вы используете. В первом вопросе вы упомянули JavaScript, но com.sap.cloud.sdk.s4hana - это идентификатор пакета Maven, то есть Java. Не могли бы вы уточнить, какую версию вы используете?

Либо, обе версии должны действительно обрабатывать это для вас автоматически. Я предполагаю, что вы пытаетесь выполнить какой-то запрос на запись (UPDATE или DELETE), который выдает сообщение об ошибке, которое вы разместили здесь. Чтобы отправить eTag с таким запросом, конечно, необходимо заранее знать текущий eTag. Получили ли вы последнее состояние объекта перед выполнением запроса на запись?

Наконец, JavaScript SDK позволяет игнорировать идентификаторы версий с помощью метода ignoreVersionIdentifier в соответствующем компоновщике запросов. Вообще это не рекомендуется, конечно! Поэтому убедитесь, что вы понимаете, почему нужен eTag, прежде чем решать, можете ли вы его игнорировать. Наконец, есть также withCustomHeader, где вы можете указать свой собственный заголовок eTag, если по какой-либо причине ни один из вышеперечисленных подходов вам не подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...