#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 будет поддерживать его изначально.