Изменения VdmComplex Не работают с ПАТЧЕМ

#sap-cloud-sdk

Вопрос:

Используя SAP B1 .edmx с 3.39.0 и пытаясь обновить DeliveryNotes с помощью нового DocumentPackages . Однако список DocumentPackage того, что в конечном итоге передается при выполнении операции обновления, пуст.

Код:

 var packagesUpdateDocument = new Document();

packagesUpdateDocument.setDocEntry(1);

var documentPackages = new ArrayList<DocumentPackage>();
var documentPackage = new DocumentPackage();

documentPackage.setNumber(10);

documentPackages.add(documentPackage);

packagesUpdateDocument.setDocumentPackages(documentPackages);


var updateDeliveryPackagesRequest = service.withServicePath("etc")
                    .updateDeliveryNotes(packagesUpdateDocument);

var updateDeliveryPackagesResponse = updateDeliveryPackagesRequest.tryExecute(serviceLayerDestination);
 

Просматривая журналы уровня обслуживания, я вижу, что это запрос, который в конечном итоге был отправлен клиентом:

 PATCH /b1s/v2/DeliveryNotes(1)

{"DocEntry":1,"DocumentPackages":[{}],"@odata.type":"SAPB1.Document"}
 

Насколько я понимаю, запросы на исправление автоматически игнорируют все, что сгенерированный клиент сочтет «неизменным».

Печать измененных полей:

 System.out.println(packagesUpdateDocument.getChangedFields());
 

Доходность:

 {
  DocEntry=175017, 
  DocumentPackages=
    [DocumentPackage
      ( 
        super=VdmObject(customFields={}, 
        changedOriginalFields={}), 
        odataType=SAPB1.DocumentPackage, 
        number=10, 
      )
    ]
  .....
}
 

Я полагаю, что Пакет не записывает поля, которые изменились. Хотя я не уверен.

Есть ли какой-то шаг, который я пропускаю, или это пробел в функциях?

Ответ №1:

Начиная с SAP Cloud SDK 3.42.0, мы поддерживаем обновление сложных свойств с помощью готовых исправлений. Более подробную информацию смотрите в примечаниях к выпуску.

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

1. @Коннер, Теперь эта функция доступна

2. Идеально! Я довольно внимательно слежу за выпуском SDK, поэтому начал использовать его в пятницу. Спасибо за помощь!

Ответ №2:

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

Пока это не будет поддерживаться, обновление с PUT помощью .replacingEntity() опции вместо этого должно работать.

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

1. К сожалению, операция PUT не полностью выполнима в этом сценарии, так как документ содержит сотни полей, которые не могут быть обновлены, что приводит к ошибкам при отправке запроса PUT.

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

3. Да, это было бы моим следующим предложением. Я обновлю здесь, как только SDK будет поддерживать его изначально.