有朋友遇到一个在 webide 里部署 SAP UI5 应用到 ABAP Repository 里时出错的问题:
错误消息:
Failed to get transports for the selected package. Request POST /webidedispatcher/destinations/LND500/sap/bc/adt/cts/transportchecks failed: Forbidden
分析思路
部署目标即存储这个 SAP UI5 应用部署到 ABAP 系统上生成的 BSP 应用的开发包名称为 ZFIORI_DEV, 错误消息的字面意思是,无法取得往这个开发包里写入对象进行存储时需要使用的传输请求(transport Request).
如果我们在 WebIDE 里将 SAP UI5 应用部署到 ABAP 系统的 $tmp 包上,不需要传输请求;如果期望部署到 ABAP 系统后,还能将这个应用进一步传输到其他 ABAP 系统,则传输请求是必须的。
遇到这个问题,首先要明确自己的需求,到底是不是期望 SAP UI5 应用部署到 ABAP 系统上后需要继续传输到其他系统。如果是,可以试着创建一个 ABAP 报表,看保存到开发包 ZFIORI_DEV 时,是否会弹出要求指定传输请求的对话框。
如果想找到在哪一行代码抛出的这个错误消息,可以进入事物码 SICF,
按照路径 sap->bc->adt
找到 ICF 节点,双击,
找到这个节点的 handler class CL_ADT_WB_RES_APP
, 然后在其 HANDLE_REQUEST
里设置断点,然后在 webide 里触发部署动作,查看断点是否会触发(可能不会,因为在 WebIDE 里触发部署操作的用户,和在 ABAP 系统里实际执行部署操作的用户,二者可能不是同一个用户)
也可以参考这篇文章,Troubleshooting Deployment to an ABAP System from SAP Web IDE,里面提到了一些 WebIDE 部署到 ABAP 系统时经常遇到的一些典型错误。
另外在 SAP 帮助文档 里,也提到了 Destination 的 WebIDEUsage 这个字段需要维护的正确值的列表和对应含义介绍。
比如本地通过名叫 LND500
的 Destination 进行部署,那么这个 Destination 必须维护 dev_abap
这个值作为 WebIDEUsage
的内容。