源代码:
/** * Returns a fully qualified OCC Url (including baseUrl and baseSite) * @param endpoint Name of the OCC endpoint key config * @param urlParams URL parameters * @param queryParams Query parameters * @param scope */ getUrl( endpoint: string, urlParams?: object, queryParams?: object, scope?: string ): string { endpoint = this.getEndpointForScope(endpoint, scope); if (urlParams) { Object.keys(urlParams).forEach((key) => { urlParams[key] = encodeURIComponent(urlParams[key]); }); endpoint = DynamicTemplate.resolve(endpoint, urlParams); } if (queryParams) { let httpParamsOptions = { encoder: new HttpParamsURIEncoder() }; if (endpoint.includes('?')) { let queryParamsFromEndpoint; [endpoint, queryParamsFromEndpoint] = endpoint.split('?'); httpParamsOptions = { ...httpParamsOptions, ...{ fromString: queryParamsFromEndpoint }, }; } let httpParams = new HttpParams(httpParamsOptions); Object.keys(queryParams).forEach((key) => { const value = queryParams[key]; if (value !== undefined) { if (value === null) { httpParams = httpParams.delete(key); } else { httpParams = httpParams.set(key, value); } } }); const params = httpParams.toString(); if (params.length) { endpoint += '?' + params; } } return this.getEndpoint(endpoint); }入口:
调用OccEndpointsService的getUrl方法,传入的是productCode:
首先读取endpoint:
OccEndpoint的配置:
专门为product list scope设置的url:
products/${productCode}?fields=code,name,summary,price(formattedValue),images(DEFAULT,galleryIndex)"
最后的请求:
一个具体的例子: https://spartacus-dev0.eastus.cloudapp.azure.com:9002/occ/v2/electronics-spa/products/300938?fields=code,name,summary,price(formattedValue),images(DEFAULT,galleryIndex)&lang=en&curr=USD
从浏览器里得到的结果:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
汪子熙 认证博客专家 前端框架 Node.js SAP JerryWang,2007年从电子科技大学计算机专业硕士毕业后加入SAP成都研究院工作至今。Jerry是SAP社区导师,SAP中国技术大使。2020年5月下旬,Jerry做了脑部肿瘤的开颅切除手术,对编程和人生又有了新的感悟。