【问题标题】:SAP OData Generator generates bad URL for navigated entriesSAP OData 生成器为导航条目生成错误 URL
【发布时间】:2021-03-16 20:49:58
【问题描述】:

使用 SAP V2 代码生成器,我们为成功因素创建了类。

为调用导航实体的请求生成 URL 时,会引发 500 错误。

PerPersonFluentHelper q = service.getAllPerPerson().select(PerPerson.TO_EMAIL_NAV);

生成 $select=emailNav/*&$expand=emailNav

尝试运行结果

message lang="en-US">无法理解带有字符序列的 API 请求:emailNav/* 在字符位置编号:9 个无效字符:*

当/如果我尝试为实体使用 ALL_FIELDS 静态字段时,我会遇到类似的问题。

如果我删除 /* 并将 url 粘贴到浏览器中,它可以正常工作。

我们正在寻找任何解决方案。已经花了几天时间阅读博客和搜索。

是否有关于使用生成的类的高级文档?

提前致谢。

找到了解决方案 -- 通过克隆 FluentHelperBasic 类并执行以下操作找到了解决问题的方法:

for (int i = 0; i < selections.size(); i++) {
        String select = selections.get(i);
        if (select.endsWith("/*")) {
            selections.set(i, select.substring(0,select.length()-2));
        }
    }
fieldNames.addAll(selections);
selections.forEach(delegateSelect);

此代码需要在代码设置委托扩展之后移动。

【问题讨论】:

    标签: sap-cloud-sdk sap-successfactors


    【解决方案1】:

    很遗憾,SFSF 不接受 * 作为所有字段的选择器。您可以通过在 select 子句中声明要扩展的属性的所有字段来解决此问题:

    select(PerPerson.TO_EMAIL_NAV.select(Email.FIELD_1, Email.FIELD_2));
    

    【讨论】:

    • 不幸 - 让您想知道为什么代码生成器会生成一个无法运行的 URL。你会认为它在某个地方有效。
    • 大多数 OData 服务正确解释 *,例如S/4HANA 和 S/4HANA Cloud 上的 OData 服务。 SuccessFactors 是 AFAIK 的例外。
    • 我刚刚注意到,如果我从 URL 中删除 /*,它会返回正确的结果。代码生成器的源代码可用吗?
    • 目前Java SDK不是开源的,所以不可用。但即使/* 是由select 的实现添加的,它也不是来自生成的代码。所以目前没有办法改变这种行为。
    • 请看我编辑过的原帖。我找到了一种克隆 FluentHelperBasic 类并对其进行修改以更正 URl 的方法。它现在适用于我们的目的。
    猜你喜欢
    • 2022-01-15
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2011-06-24
    • 2014-05-09
    相关资源
    最近更新 更多