Выполнить фильтрацию расширенного объекта с помощью SAP Cloud SDK
Так что это может быть легко, но я почему-то не могу обернуть голову вокруг этого. Я пытаюсь найти делового партнера по его адресу электронной почты, используя SAP Cloud SDK.
Это то, что я до сих пор:
final List<BusinessPartner> businessPartners = new DefaultBusinessPartnerService()
.getAllBusinessPartner()
.select(BusinessPartner.BUSINESS_PARTNER,
BusinessPartner.TO_BUSINESS_PARTNER_ADDRESS
.select(BusinessPartnerAddress.TO_EMAIL_ADDRESS
.select(AddressEmailAddress.SEARCH_EMAIL_ADDRESS)))
.filter(AddressEmailAddress.SEARCH_EMAIL_ADDRESS.eq(email)) //something like this?
.top(10)
.execute();
Теперь, как я могу выполнить операцию фильтра для расширенного объекта AddressEmailAddress
? Тот, который я придумал, явно нет. У меня проблемы с переходом к расширенному объекту с использованием свободного API.
Есть идеи?
1 ответ
Так как мое предложение сработало для вас. Позвольте мне перефразировать комментарий как ответ.
К сожалению, невозможно выполнить фильтрацию по расширенным объектам для конечных точек службы SAP OData V2. Резервной стратегией будет прямой запрос "отфильтрованного" элемента в коллекции сущностей (лист) и выполнение дополнительных запросов OData для перехода к исходной сущности (корню).
В вашем случае я бы порекомендовал запросить непосредственно AddressEmailAddress
, чтобы разрешить BusinessPartnerAddress с помощью AddressId. Следующий шаг - решить BusinessPartner
по полю businessPartner, например
public List<BusinessPartner> getBusinessPartnersByEmail(
@Nonnull BusinessPartnerService service,
@Nonnull String email
)
throws ODataException
{
List<AddressEmailAddress> emailAddresses = service
.getAllAddressEmailAddress()
.filter(AddressEmailAddress.SEARCH_EMAIL_ADDRESS.eq(email))
.execute();
List<BusinessPartnerAddress> addresses = new LinkedList<>();
for( AddressEmailAddress emailAddress : emailAddresses ) {
addresses.addAll(
service
.getAllBusinessPartnerAddress()
.filter(BusinessPartnerAddress.ADDRESS_ID.eq(emailAddress.getAddressID()))
.execute());
}
List<BusinessPartner> businessPartners = new LinkedList<>();
for( BusinessPartnerAddress address : addresses ) {
businessPartners.add(service.getBusinessPartnerByKey(address.getBusinessPartner()).execute());
}
return businessPartners;
}