通过启用@ odata.draft.enabled的CAP服务在Fiori Elements中进行预览

2020-08-15 07:24发布

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

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


你好!

在尝试在启用了CRUD操作的CAP服务之上构建列表报告前端时,我遇到了问题。 我假设@ odata.draft.enabled为CRUD启用了实体,所以我的服务就是这样(我能弄清楚的最简单的服务):

schema.cds:

命名空间p4;
 实体Ent1 {
  密钥ID:整数;
  说明:String(100);
 } 

cat-service.cds:

使用'../db/schema'中的{p4作为我的};
 @path:'/catalog'
 服务CatalogService {
 @ odata.draft.enabled
  实体Ent1作为my.Ent1上的投影;
 } 

当我在本地运行它并启动" Fiori中的预览"时,我具有所有CRUD按钮。 我可以更新和删除条目。 但是当我尝试创建一个条目时,会发生以下情况:



这是"标题"部分中的数据:

请求网址:
 http://localhost:4004/catalog/$ batch
 推荐人政策:
 降级时无推荐人
 请求标头接受:
 多份/混合
 接受编码:
 gzip,放气,br
 接受语言:
 苯丙氨酸
 连接:
 活着
 内容长度:
 330
 内容类型:
 多份/混合 boundary = batch_id-1594208238132-51
 主办:
 本地主机:4004
 MIME版本:
 1.0
 OData-MaxVersion:
 4.0
 OData版本:
 4.0
 起源:
 http://本地主机:4004
 推荐人:
 http://localhost:4004/$ fiori-preview/?service = CatalogService&entity = Ent1
 秒提取目标:
 空的
 安全提取模式:
 科尔斯
 安全提取站点:
 同源
 用户代理:
 Mozilla/5.0(Windows NT 6.3; Win64; x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/83.0.4103.116 Safari/537.36
 X-CSRF令牌:
 空值
 X-Requested-With:
 XMLHttpRequest
 请求有效负载--batch_id-1594208238132-51
 内容类型:应用程序/http
 内容传输编码:binaryPOST Ent1 HTTP/1.1
 接受:application/json; odata.metadata = minimal; IEEE754Compatible = true
 接受语言:pt-BR
 X-CSRF令牌:
 内容类型:应用程序/json;字符集= UTF-8; IEEE754Compatible = true

 {}
 --batch_id-1594208238132-51-

这个$ batch请求对我来说有点令人困惑,但是列表报告似乎发送了大括号内没有任何数据的POST,而这被CAP服务拒绝了。 在我看来,这很奇怪。 在控制台上,我们得到了:

 POST/catalog/$ batch
 > NEW Ent1空
 [2020-07-08T11:37:18.170Z | 错误|  1788582]:无法将未定义或null转换为对象
 [2020-07-08T11:37:18.170Z | 错误|  1788582]:错误堆栈跟踪:TypeError:无法将未定义或null转换为对象
 在removeDraftUUID(C:\ Dev \ Estudo \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ utils \ draftUtils.js:224:5)在C:\ Dev \ Estudo  \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ handlers \ onCreateDraft.js:96:14
 [内部错误] TypeError:无法将未定义或null转换为对象
     在removeDraftUUID(C:\ Dev \ Estudo \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ utils \ draftUtils.js:224:5)
     在C:\ Dev \ Estudo \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ handlers \ onCreateDraft.js:96:14
 请报告此错误。

我也曾尝试将(类似的服务,真正的)服务部署到CF,并使用Fiori-Tools在V2上运行一个"真正的"应用程序(server.js方法),但是对于这一点,我却有所不同 同一点出现错误:

 502错误的网关:注册的端点无法处理该请求。

我发现在这种情况下失败的请求是这样的:

 ###
 POST http://localhost:8080/v2/adm/Ingredientes
 内容类型:application/json
 {" __metadata":{" type":" AdmService.Ingredientes"}} 

,响应如下:

  HTTP/1.1 502错误的网关
 x-powered by:快递
 内容类型:文本/纯文本; 字符集= utf-8
 x-cf-routererror:endpoint_failure
 x-content-type-options:nosniff
 日期:2020年7月8日,星期三,格林尼治标准时间
 内容长度:67
 连接:关闭
 严格运输安全性:max-age = 31536000;  includeSubDomains; 预紧
 有所不同:接受编码

 502错误的网关:注册的端点无法处理该请求。
 
 

这与其他问题有点类似:

/img/questions/13063525/how-to-handle-crud-operation-in-fiori-elements-cap.html?childToView=13064451#answer-13064451

但是,在我的情况下,我没有收到SAML2消息,并且manifest.json(由fiori工具生成)中没有SAML2参数。

我还尝试使用WebIDE向导生成列表报告。 这个生成了SAML2参数,但是我删除了它,结果是相同的。

好吧,我在这里已经写了很多东西……概括地说,我要做的就是在一个简单的CAP服务上建立一个功能列表报告CRUD。 我正在尝试使用具有@ odata.draft.enabled的批注,但没有成功,无论是本地预览(odata v4)还是云上的应用程序(odata v2)。 如果有人可以向我说明一下,我将非常感谢您!

谢谢! 埃里克

(200.1 kB)

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

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


你好!

在尝试在启用了CRUD操作的CAP服务之上构建列表报告前端时,我遇到了问题。 我假设@ odata.draft.enabled为CRUD启用了实体,所以我的服务就是这样(我能弄清楚的最简单的服务):

schema.cds:

命名空间p4;
 实体Ent1 {
  密钥ID:整数;
  说明:String(100);
 } 

cat-service.cds:

使用'../db/schema'中的{p4作为我的};
 @path:'/catalog'
 服务CatalogService {
 @ odata.draft.enabled
  实体Ent1作为my.Ent1上的投影;
 } 

当我在本地运行它并启动" Fiori中的预览"时,我具有所有CRUD按钮。 我可以更新和删除条目。 但是当我尝试创建一个条目时,会发生以下情况:



这是"标题"部分中的数据:

请求网址:
 http://localhost:4004/catalog/$ batch
 推荐人政策:
 降级时无推荐人
 请求标头接受:
 多份/混合
 接受编码:
 gzip,放气,br
 接受语言:
 苯丙氨酸
 连接:
 活着
 内容长度:
 330
 内容类型:
 多份/混合 boundary = batch_id-1594208238132-51
 主办:
 本地主机:4004
 MIME版本:
 1.0
 OData-MaxVersion:
 4.0
 OData版本:
 4.0
 起源:
 http://本地主机:4004
 推荐人:
 http://localhost:4004/$ fiori-preview/?service = CatalogService&entity = Ent1
 秒提取目标:
 空的
 安全提取模式:
 科尔斯
 安全提取站点:
 同源
 用户代理:
 Mozilla/5.0(Windows NT 6.3; Win64; x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/83.0.4103.116 Safari/537.36
 X-CSRF令牌:
 空值
 X-Requested-With:
 XMLHttpRequest
 请求有效负载--batch_id-1594208238132-51
 内容类型:应用程序/http
 内容传输编码:binaryPOST Ent1 HTTP/1.1
 接受:application/json; odata.metadata = minimal; IEEE754Compatible = true
 接受语言:pt-BR
 X-CSRF令牌:
 内容类型:应用程序/json;字符集= UTF-8; IEEE754Compatible = true

 {}
 --batch_id-1594208238132-51-

这个$ batch请求对我来说有点令人困惑,但是列表报告似乎发送了大括号内没有任何数据的POST,而这被CAP服务拒绝了。 在我看来,这很奇怪。 在控制台上,我们得到了:

 POST/catalog/$ batch
 > NEW Ent1空
 [2020-07-08T11:37:18.170Z | 错误|  1788582]:无法将未定义或null转换为对象
 [2020-07-08T11:37:18.170Z | 错误|  1788582]:错误堆栈跟踪:TypeError:无法将未定义或null转换为对象
 在removeDraftUUID(C:\ Dev \ Estudo \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ utils \ draftUtils.js:224:5)在C:\ Dev \ Estudo  \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ handlers \ onCreateDraft.js:96:14
 [内部错误] TypeError:无法将未定义或null转换为对象
     在removeDraftUUID(C:\ Dev \ Estudo \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ utils \ draftUtils.js:224:5)
     在C:\ Dev \ Estudo \ Cds \ ws1 \ p4 \ node_modules \ @sap \ cds-runtime \ lib \ cds-services \ services \ handlers \ onCreateDraft.js:96:14
 请报告此错误。

我也曾尝试将(类似的服务,真正的)服务部署到CF,并使用Fiori-Tools在V2上运行一个"真正的"应用程序(server.js方法),但是对于这一点,我却有所不同 同一点出现错误:

 502错误的网关:注册的端点无法处理该请求。

我发现在这种情况下失败的请求是这样的:

 ###
 POST http://localhost:8080/v2/adm/Ingredientes
 内容类型:application/json
 {" __metadata":{" type":" AdmService.Ingredientes"}} 

,响应如下:

  HTTP/1.1 502错误的网关
 x-powered by:快递
 内容类型:文本/纯文本; 字符集= utf-8
 x-cf-routererror:endpoint_failure
 x-content-type-options:nosniff
 日期:2020年7月8日,星期三,格林尼治标准时间
 内容长度:67
 连接:关闭
 严格运输安全性:max-age = 31536000;  includeSubDomains; 预紧
 有所不同:接受编码

 502错误的网关:注册的端点无法处理该请求。
 
 

这与其他问题有点类似:

/img/questions/13063525/how-to-handle-crud-operation-in-fiori-elements-cap.html?childToView=13064451#answer-13064451

但是,在我的情况下,我没有收到SAML2消息,并且manifest.json(由fiori工具生成)中没有SAML2参数。

我还尝试使用WebIDE向导生成列表报告。 这个生成了SAML2参数,但是我删除了它,结果是相同的。

好吧,我在这里已经写了很多东西……概括地说,我要做的就是在一个简单的CAP服务上建立一个功能列表报告CRUD。 我正在尝试使用具有@ odata.draft.enabled的批注,但没有成功,无论是本地预览(odata v4)还是云上的应用程序(odata v2)。 如果有人可以向我说明一下,我将非常感谢您!

谢谢! 埃里克

(200.1 kB)
付费偷看设置
发送
3条回答
蓋茨
1楼 · 2020-08-15 07:44.采纳回答

我遇到了同样的问题,但是您可以通过更改键ID来实现:UUID; 那么您就可以创建操作了。

zhangjiyang1323
2楼-- · 2020-08-15 07:37

感谢详细的报告。 我现在不确定这是客户端Fiori问题还是服务器中的问题。 但是,我确实知道Fiori预览使用的是较旧的SAP UI5版本(1.73.1),这可能会出现问题。 在CAP July版本中,它将再次使用最新版本。 同时,您可以尝试通过自己的html启动UI(请参见样本)来检查最新的UI5是否表现更好。

落灬小鱼
3楼-- · 2020-08-15 07:44

感谢Christian的回复! 这里还不算幸运。 我通过Fiori-Tools生成了自己的前端,它的后端拒绝了它的创建(空POST)请求,响应为" 502错误的网关:注册的端点无法处理该请求"。 我还尝试使自己的index.html像在您给我的示例中一样,但是从磁贴启动应用程序时却遇到了不同的错误。 也许情况与我根据样本制作的设置不太吻合。 但是让我们暂时搁置这一点,然后等待新版本发布。 再次感谢。 一般来说,我在使用CAP时会很开心。非常感谢! 你让我开心!

一周热门 更多>