CAP扩展方案-如何询问过滤器?

2020-08-15 20:21发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我们刚刚启动了一个项目,使用CA...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们刚刚启动了一个项目,使用CAP Java为SuccessFactors构建新的扩展。 我们需要做的第一件事之一就是为持久保存在SF中而不是HANA中的实体(就像它们中的大多数一样)处理读取场景。 我需要确定传入了哪些过滤器,然后使用它们从SF构建一个类似的查询(使用SAP Cloud SDK)。

我不敢相信这有多难! 我(Java开发人员)同事的方法是(使用Spring Boot API)获取整个请求url,然后以这种方式确定过滤器。 我认为"必须有更好的方法,因为这应该是CAP的核心重点"。

经过反复试验,我设法产生了这种基本方法(参见下文),这使我可以继续进行自己的开发。 这是一项正在进行的工作(顺便说一句,我不是Java专家),需要进行增强以处理诸如OR条件和诸如NE或LT之类的谓词。

有人有更好的方法吗? 我并不是真的要整理这段代码(例如,使用groupBy方法)。 相反,我的意思是还有其他可用的CAP Java API吗?

我的另一个问题是," 扩展方案的文档在哪里?"。 我看过了

几乎所有这些内容都与未开发的CAP方案有关,例如著名的书店示例。 在我们扩展后端系统(例如S/4(尤其是S/4 Cloud))的情况下,没有任何事情 或SuccessFactors。 许多示例都显示了诸如创建订单时如何更新书籍存货之类的事情,但与扩展方案并不相关。 我们需要的第一件事是如何

询问由UI传递给CAP的读取请求。 对于我在代码中使用的SAP类和接口,没有任何文档。 许多类甚至都没有公共的JavaDoc! 我确实找到了一个有关扩展的教程,但这是针对node.js CAP的。

Iwona Hahn 您能帮我找到一些有关扩展方案的文档吗?

公共静态Map  mapFilterFieldsFromSimpleCqnSelect(CqnSelect cqn){
         Map  filtersMap = new HashMap ();

         如果(cqn.where()。isPresent()){
             CqnPredicate pred = cqn.where()。get();
             Stream 令牌;
            
            //建立属性名称清单
             令牌= pred.tokens();
             List 属性= tokens.filter(令牌-> ElementRefImpl的令牌实例)
                                             .map(ElementRefImpl.class :: cast)
                                             .map((ref)-> ref.displayName())
                                             .collect(Collectors.toList());
    
            //建立栏位值清单
             令牌= pred.tokens();
             List 值= tokens.filter(令牌-> CqnStrLiteral的令牌实例)
                                         .map(CqnStrLiteral.class :: cast)
                                         .map((lit)-> lit.value())
                                         .collect(Collectors.toList());
    
            //组合成地图
             for(int i = 0; i             
3条回答
粗暴的香蕉
2020-08-15 21:15

为远程服务创建CAP代理时,我的期望是,如果我不想添加任何其他限制:

 readEntitySet(CdsReadEventContext context){
return remoteService.readEntitySet(context);
}

在大多数情况下,CAP中间件必须限制用户可以通过某些属性读取的内容。 让我们以最简单的示例用户名为例:

 readEntitySet(CdsReadEventContext context){
where = context.getCqn()。where();
where.addAnd(" username =" + context。 getUser());
context.setCqn()。setWhere(where);
remoteService.readEntitySet(context);
}

将CAP指向< a hraf=" https://people.sap.com/marcbecker">马克·贝克尔,马蒂亚斯·舒尔

一周热门 更多>