SAP Cloud SDK for Javascript:过滤扩展实体

SAP Cloud SDK for Javascript: Filter on Expanded Entities

我知道我正在重新打开一个旧的 (),但那是不久前的事了,它引用了 API 的 Java 版本,用于消耗 S/4 HANA 服务。

我正在针对 SuccessFactors OData API 测试 Java 脚本版本的 API,它确实能够对扩展实体执行过滤器,如下所示:

<API_HOST>/odata/v2/PerPerson?$filter=personalInfoNav/firstName eq 'MARCO'&$expand=personalInfoNav&$select=personalInfoNav/firstName, personalInfoNav/lastName&$top=20

翻译成 SDK,将是 (TypeScript):

const personList: Array<PerPerson> = 
    await PerPerson.requestBuilder().getAll().top(20)
        .select(
            PerPerson.DATE_OF_BIRTH,
            PerPerson.PERSONAL_INFO_NAV.select(
                PerPersonal.PERSON_ID_EXTERNAL,
                PerPersonal.FIRST_NAME,
                PerPersonal.LAST_NAME,
                PerPersonal.GENDER
            )
        ).filter(PerPersonal.FIRST_NAME.equals('MARCO'))
         .execute({ destinationName: this.configService.get<string>('ACTIVE_DESTINATION') });

但是由于过滤器函数的类型不兼容,此代码无法编译,这里需要 "PerPerson" 类型而不是 "PerPersonal"。 我找不到任何相关信息。

考虑到普通的 OData 查询工作得很好,有人能够做到这一点吗?

更新:

我最初不明白 Successfactors 在协议之上提供了这个功能。我可以想到两种可能的解决方法:

  1. 使用new Filter,例如:
PerPerson.requestBuilder().getAll().top(20)
  .select(
   ...
  ).filter(
    new Filter('personalInfoNav/firstName', 'eq', 'MARCO')
  )
...
  1. 如果这不起作用,您可以在请求生成器上调用 build 而不是 execute,这会为您提供 ODataRequest 对象,您可以从中获取 URL,然后您必须手动操作。然后您应该能够使用 executeHttpRequest 函数针对目的地执行此自定义请求对象。

让我知道其中一项是否适合您!


原回答:

仅当两个实体之间的关系为 1:1 时,才可以对 OData v2 上的扩展实体进行过滤。如果代码如下所示:

PerPerson.requestBuilder().getAll().top(20)
  .select(
    PerPerson.DATE_OF_BIRTH,
    PerPerson.PERSONAL_INFO_NAV.select(
      PerPersonal.PERSON_ID_EXTERNAL,
      PerPersonal.FIRST_NAME,
      PerPersonal.LAST_NAME,
      PerPersonal.GENDER
    )
  ).filter(
    PerPerson.PERSONAL_INFO_NAV.filter(
      PerPersonal.FIRST_NAME.equals('MARCO')
  ))
...

但是,如果关系是 1:n,则无法进行过滤。

希望对您有所帮助!