Это отличный вопрос!
Контекст:
Ваши вопросы (измененный порядок):
«Когда и зачем мне переносить место назначения в DefaultHttpDestination?»
DestinationAccessor#getDestination
возвращает шаблон c Destination
. Чтобы убедиться, что мы имеем дело с соединениями HTTP (а не RF C), вам нужно запустить #asHttp
- как вы уже делаете. Получив экземпляр HttpDestination
, вы можете запускать HTTP-запросы, такие как OData и REST . В зависимости от вашего варианта использования дополнительная упаковка не требуется.
Например, если вы собираетесь использовать конечные точки BAPI , вам нужно будет вместо этого запустить #asRfc
. Этот метод проверяет различные свойства destination , чтобы убедиться, что все необходимые значения установлены.
"Когда и почему мне следует переносить место назначения в DefaultErpHttpDestination?"
Рекомендуется заключать адресата в DefaultErpHttpDestination
, только когда вы имеете дело с конечными точками обслуживания S / 4 , и вы полагаетесь на пользовательские значения для sap-client
и sap-locale
. Обтекание может быть выполнено в любое время во время выполнения приложения, если это происходит до метода #execute(HttpDestinationProperties)
.
Если вы не хотите обернуть его во второй раз, вам нужно будет вручную управлять заголовки HTTP-запроса для sap-client
и sap-locale
.
«Зачем мне вообще оборачивать адресат выше двух оболочек?»
Это API контракт. Он гарантирует, что все необходимые свойства destination установлены правильно, прежде чем даже вызвать фактический запрос. Была предоставлена (необязательная) ERP ароматизированная обертка целевого экземпляра, чтобы автоматически учитывались все свойства S / 4 .