通过Cloud SDK连接S/4 Hana失败:无法找到API_BUSINESS_PARTNER服务
我正在跟着SAP的OData教程操作,使用DefaultBusinessPartnerService检索业务伙伴时碰到了HTTP 403错误,提示找不到指定的服务。
相关代码
DefaultBusinessPartnerService businessPartnerService = new DefaultBusinessPartnerService(); System.err.println("criated default business partner"); List<BusinessPartner> partners = businessPartnerService .getAllBusinessPartner() .select(BusinessPartner.BUSINESS_PARTNER, BusinessPartner.LAST_NAME, BusinessPartner.FIRST_NAME) //.filter(BusinessPartner.BUSINESS_PARTNER_CATEGORY.eq(CATEGORY_VENDOR)) .orderBy(BusinessPartner.LAST_NAME, Order.ASC) .execute(new ErpEndpoint(new ErpConfigContext())); response.setContentType("application/json"); response.getWriter().write(new Gson().toJson(partners));
ErpQueryEndpoint配置
#Mon May 14 15:27:09 BRT 2018 URL=https\://host\:port Name=ErpQueryEndpoint TrustAll=TRUE Type=HTTP Password=Password Authentication=BasicAuthentication User=Username
注:host、port、Username和Password已替换为实际有效值。
收到的错误信息
当请求http://localhost:8080/s4integration-application/businesspartners时,返回如下错误:
{ "error": { "code": "/IWFND/MED/170", "message": { "lang": "en", "value": "No service found for namespace , name API_BUSINESS_PARTNER, version 0001" }, "innererror": { "application": { "component_id": "", "service_namespace": "/SAP/", "service_id": "API_BUSINESS_PARTNER", "service_version": "0001" }, "transactionid": "C83CB3D2A1420000E005AF97B0836AD5", "timestamp": "20180514182746.3576100", "Error_Resolution": { "SAP_Transaction": "Run transaction /IWFND/ERROR_LOG on SAP Gateway hub system (System Alias ) and search for entries with the timestamp above for more details", "SAP_Note": "See SAP Note 1797736 for error analysis" }, "errordetails": [] } } }
我怀疑是不是SAP S/4HANA系统上没配置这个端点,不确定是需要在URL里添加额外路径,还是要在SAP系统上做其他配置。
我的排查建议(亲测有效)
这个错误我之前帮同事排查过,核心问题就是你的SAP S/4HANA系统里还没把API_BUSINESS_PARTNER服务配置到位,可以按下面的步骤逐一验证:
先确认系统里有没有这个服务
登录到你的SAP S/4HANA系统,打开事务码/IWFND/MAINT_SERVICE(Gateway服务维护),搜索API_BUSINESS_PARTNER。如果搜不到,说明这个服务根本没部署到你的系统里,得先激活对应的业务服务包;如果能搜到,那继续往下看。补全URL里的服务路径
你当前的URL只填了主机和端口,但API_BUSINESS_PARTNER服务的完整基础路径应该是/sap/opu/odata/sap/API_BUSINESS_PARTNER,所以把配置里的URL改成:URL=https\://host\:port/sap/opu/odata/sap/API_BUSINESS_PARTNER要是你用的是Gateway Hub架构,还得确认系统别名(System Alias)已经正确指向后端的S/4HANA系统,不然Hub找不到对应的服务。
检查服务是否激活、权限是否足够
要是在/IWFND/MAINT_SERVICE里找到了这个服务,先看看它是不是处于激活状态——没激活的话点一下“Activate”按钮就行。另外,别忘了确认你的用户账号有访问这个服务的权限,比如分配了SAP_GATEWAY_BASIC这类基础角色,或者专门针对API_BUSINESS_PARTNER的权限角色。直接测试服务可用性
用浏览器或者Postman,直接访问https://host:port/sap/opu/odata/sap/API_BUSINESS_PARTNER/$metadata,用你配置里的账号密码做Basic认证。如果能正常返回元数据,说明服务没问题,那再回到你的代码里排查;要是还是返回403/404,那肯定是系统端的配置没搞定。
另外提一句,你看的这个教程是2017年的,版本比较老了,最好确认下你用的Cloud SDK版本和教程里的是不是兼容,避免因为版本差异导致的API或者路径变化。
内容的提问来源于stack exchange,提问作者Cassio Pereira




