关于sap:SAP-Commerce-Cloud-Backoffice-CMS-里的内容一览

Websiteid 为 electronics-spa, site 属性: base store iddefault catalog 调配的 theme 和 channel:B2C or B2B这个 content catalog 和结尾的 default catalog ID 都不一样: site 的初始页面是 Homepage: url pattern: site map configuration: Metadata:CMSSite 能够在 Hybris Administration console 里应用 flexible search 查看这条记录: select * from { CMSSite } where pk = '8796093252648'Page页面类型: Catalog pagecategory pagecontent pageproduct page一共四种。 应用 flexible search 查问: select * from { CMSPageType } where p_extensionname = 'cms2'后果: ...

August 16, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-如何根据-page-layout-获得对应支持的-slots

在 SAP Spartacus PageLayout Component 的实现里,每一个 layoutName 对应都有一个 cxOutlet 可供扩大: 第 13 行的 ngFor 指令,将该实现类的 slots$ 开展,为每一个 slot 搁置对应的 CMS Component. slots$ 是一个数组,通过 pageLayoutService.getSlots 办法获取。 本文介绍这个 getSlots 办法的执行明细。 switchMap 这个 rxjs 操作符,暗示了其传入的箭头函数,是一个 cancellable 的耗时操作。 在这个闭包内执行: combineLatest:只有 this.page$ 和 this.breakpointService.breakpoint$ 有一个被订阅,就会触发 map 操作: 反对的所有 slots 和 slots 外面容许的 Components 列表: breakpoint:xl 读取 slot 配置: 所有 template 配置都在 tis.config.layoutSlots 里了: 拿到了 header 的配置: 最终后果: 更多Jerry的原创文章,尽在:"汪子熙":

August 16, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-里的-icon-设计

同 SAP Fiori 一样,SAP Spartacus 里也有大量的自定义 icon 设计,比方下图的 iconTypes.RESET: 须要调用 iconLoader 获取 RESET icon 对应的 HTML 源代码: 动态创建新的 link 标签,并加载对应的 css: css 地址:https://use.fontawesome.com/r... SAP Spartacus 所有反对的 icon 类型和提供这些 icon 形态的 css 文件 url,来自这个配置文件:projects\storefrontlib\src\cms-components\misc\icon\fontawesome-icon.config.ts 更多Jerry的原创文章,尽在:"汪子熙":

August 16, 2021 · 1 min · jiezi

关于sap:关于-SAP-Spartacus-默认-layoutConfig-的一些测试

以 Spartacus-b2c-configuration.module.ts 文件为例: 这些默认的配置文件,都是从另一个库,即 @Spartacus/Storefront 里导入的,后者的入口是 public_api 文件: 在这个文件里加上一行打印语句,能够看到所有默认的配置: 这些默认配置硬编码在 layout-config.ts 内: 如果正文掉一部分: 成果如下:Header 区域整个没了。 再把 footer 区域也正文掉: 当初 header 和 footer 都没了: 更多Jerry的原创文章,尽在:"汪子熙":

August 16, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-因为-refresh-token-刷新令牌过期后显示用户重新登录页面的逻辑

在 auth.interceptor.ts 里判断,token 是否过期: isExpiredToken: 通过服务器端返回的谬误类型判断。 如果的确过期了,首先调用 handleExpiredToken, 返回的 Observable 对象,应用该 token,从新发送之前因为 token 过期而生效的申请:createNewRequestWithNewToken: stream 是一个 BehaviorSubject: this.oAuthLibWrapperService.refreshToken, 这个办法刷新的是 Access Token. 如果失败,阐明 refresh Token 也过期了,此时先调用第 135 行的代码,handleExpiredRefreshToken,先解决 refresh token 的过期问题。 refresh access token: 须要传旧的 refresh token,然而 response 里也返回了新的 refresh token. Spartacus 显示 "Your session has expired. Please login again." 的逻辑: 如果 refresh token 也过期了,只能从新登录了。 this.authService.coreLogout, 首先登出,而后 this.routingService.go({ cxRoute: 'login'}); ...

August 16, 2021 · 1 min · jiezi

关于sap:关于-SAP-产品-UI-的搜索引擎优化-SEO-Search-Engine-Optimization

这是 Jerry 2021 年的第 52 篇文章,也是汪子熙公众号总共第 329 篇原创文章。 本文的主题也源自 Jerry 团队最近解决的一个客户 incident, 并且与 Jerry 之前的文章 SAP UI渲染模式:客户端渲染 VS 服务器端渲染 介绍的内容密切相关。 让咱们简略回顾一下前文介绍的客户端渲染(Client Side Render,简称 CSR)和服务器端渲染(Server Side Render,简称 SSR)的区别。 客户端渲染如下图所示,用户通过浏览器向网站发送申请,服务器或者 CDN 为用户提供动态 HTML、CSS 和 JavaScript 文件。浏览器下载 HTML 和 JavaScript 文件,并执行 JavaScript(通常是 Angular,React,Vue,SAP UI5 等前端框架的库文件),实现页面渲染。绝大多数状况下,浏览器会通过 AJAX 向后盾服务器发出请求以获取动静内容。从服务器端失去 API 响应后,在客户端浏览器中解析响应内容,以出现最终页面。 客户端渲染,因为通过 HTML 页面源代码渲染最终页面,及依据 API 响应动静扭转页面内容的行为,均产生在客户端,因此得名。 采纳 CSR 技术的 SAP 产品 UI,包含所有应用 SAP UI5 框架开发的产品,比方 SAP Cloud for Customer,以及基于 SAP Fiori Elements 的 SAP S/4HANA 页面。 ...

August 7, 2021 · 2 min · jiezi

关于sap:SAP-Commerce-Cloud-UI-的用户会话管理

这是 Jerry 2021 年的第 51 篇文章,也是汪子熙公众号总共第 328 篇原创文章。 如无非凡阐明,本公众号介绍的 SAP Commerce Cloud UI,均指新一代基于 Spartacus 开源我的项目开发的 UI,而非传统的基于 JSP 技术,同 Commerce 平台耦合在一起的 Accelerator UI. 前文 从淘宝首页登录说起 提到过,淘宝网的用户会话治理,通过浏览器的 Cookie 和服务器端的用户会话对象来实现。 而 SAP Commerce Cloud UI,基于 100% API 驱动的无头电商架构,Commerce 后盾将 Commerce 外围业务通过 OCC(Omni Commerce Connect) API 的形式裸露进去。借助这些 API 和开源的 SAP Spartacus 库,客户能够自行开发具备个性化 UX 的电商网站。 对于 SAP Commerce Cloud Headless 架构的更多介绍,请参考我之前的文章:Jerry在2020 SAP寰球技术大会的分享:SAP Spartacus技术介绍的文字版。 SAP Commerce Cloud 有个名为 Oauth2 的 extension,基于 OAuth 2.0 协定实现了用户认证和令牌颁发/性能,反对 OAuth 2.0 协定定义的包含 Resource Owner Password Flow 在内的全副四种认证流。 ...

August 7, 2021 · 2 min · jiezi

关于sap:基于-SAP-Spartacus-的-SAP-电商云-SEO-搜索引擎优化的一个例子

这是一个客户采取 SAP Spartacus 施行的 Storefront - 电商店铺,曾经上线了: https://lego.yellowblocks.me/... 该网站开启了 SSR 即服务器端渲染模式,便于网站的内容被网络爬虫索引: 该页面源代码内的 title 标签内蕴含的内容,会呈现在搜索引擎后果列表的网站题目区域内: description meta 标签内蕴含的内容,会呈现在搜索引擎后果列表的网站形容区域内: 下图则是 Google 针对关键字 LEGO Dubai Abu 返回的搜寻后果: 更多Jerry的原创文章,尽在:"汪子熙":

August 7, 2021 · 1 min · jiezi

关于sap:关于-SAP-ABAP-gateway-OData-的一个诡异问题及解决办法

问题You can see that the old version of cache re-appears in the table in gateway system. Our SEGW project name: CRM_OPPORTUNITY.Gateway system: GM6/001Backend system: AG3/001 I am doing some new enhancement on CL_CRM_OPPORTUNITY_MPC_EXT~ DEFINE to add some new nodes. ( The enhancement is done by directly changing the source code of ABAP class CL_CRM_OPPORTUNITY_MPC_EXT without any re-activation in SEGW. P.S: As an experienced developer, I felt really shameful to tell my Product owner something like “I don’t know why this issue occurs, and I guess it is not caused by our enhancement”. I am eager to know the root cause of this issue. I did made some pre-analysis and the entry point for cache table filling is done via method /IWFND/CL_MED_MDL_PROVIDER~ GET_META_MODEL, so I would like to know what types of operations and which user has triggered the method call. I am evening considering to ask our IT colleagues to switch on the table log on this cache table so that at least I would know the SAP name of the user who has filled this old version cache. ...

August 7, 2021 · 4 min · jiezi

关于sap:SAP-Spartacus-用户请求中的-current-id-是从哪里来的

从 SAP Spartacus 胜利登录之后,能在 Local Storage 里察看到 userId 为 current: 这个 current id 从哪里来的呢?在 Spartacus 利用初始化的时候,从浏览器的 local storage 里取的。参考下图 syncWithStorage 办法: 取到之后,设置到内存中:this.userIdService.setUserID: 手动革除浏览器 Local Storage 之后,F5 刷新页面: 此时 userId 被从新设置成 anonymous: anomymous 在 Spartacus 的设置里是一个常量:OCC_USER_ID_ANONYMOUS: 点了 sign in 之后: 应用用户输出的用户名,明码,以及 Spartacus 利用的 client_id 和 client_secret, 去换取 Access Token: 换取 token 的 url 为: https://20.83.184.244:9002/au... 换取 token 之后,以后用户名被硬编码成 current,即常量 OCC_USER_ID_CURRENT: 更多Jerry的原创文章,尽在:"汪子熙":

August 7, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-会使用-Session-timeout-吗

问题:Where to configure session timeout in Spartacus 答案我假如您应用 Hybris OAuth 服务器的默认身份验证流程(明码流程)。 在这种状况下,会话长度是通过后盾的 OAuth 客户端设置来管制的。 然而,要晓得会话何时到期,您能够查看令牌无效负载 (AuthStorageService.getToken)。属性之一是到期工夫,可用于理解会话何时理论完结。 Marcin is correct. Spartacus is 100% API driven, interacting with Commerce backend by sending request to configured endpoints. These endpoints require an access token to be sent with the request, and this access token needs to be retrieved by following the Client Credentials Flow that is defined by the OAuth specification. As long as you log in successfully, you can find access token issued by Commerce backend in Chrome dev tools, application tab -> Local storage as highlighted below: ...

August 7, 2021 · 1 min · jiezi

关于sap:如何使用代码的方式删除-SAP-CRM-订单-Text-数据

如果call CRM_ORDER_MAINTAIN的时候传一个change mode = U – update,然而text content = ‘’进去能不能胜利执行? 目前webclient ui上text area清空后传的是 change mode 的值为 D。 测试: 删除之前有两个text entry,而后我点上面Header text的edit icon进去: 把上面文本全副清空, 点back button: 此时传到CRM_ORDER_MAINTAIN里的mode是D-delete: 执行后UI上看不到Header text了: 用ST05也能看到delete的operation: 后果是,如果我用CRM_ORDER_MAINTAIN update text,mode设成B ( update ), 然而传入的to be updated的text ( 放在LINES )里的内容是initial的: line 41检测到这种状况,会将text api外部的一个标示change mode的字段”function”设置成delete, 最终导致 DELETE_TEXT的调用。 也就是说咱们想传一个空的string到CRM_ORDER_MAINTAIN,让这个空的string overwrite之前曾经存在的text instance的这种想法当初看来走不通。 总结如果是log type的text,每次call CRM_ORDER_MAINTAIN时总是creation mode如果是edit type的text, 用户输出了一个非空的text:(1)先读取对于UI传入的text object, 是否存在对应的text instance: 对于edit type的text而言, text guid,text object name ( 如上图0004 ) , text language这三者惟一确定一个text instance。Text guid自身并不能确定一个edit text instance,因为所有edit text instance的text guid都等于其属于的opportunity guid。 ...

July 29, 2021 · 1 min · jiezi

关于sap:SAP-Commerce-Cloud-OAuth-实现介绍

Oauth2 oauth2 core extension 曾经取代了 webservicescommons/oauthauthorizationserver 扩大。 它将 HTTP 端点公开为 Authorization 服务器。 它没有引入任何新的重要性能。 To enable the authorization server, add the oauth2 extension entry into the localextensions.xml file: <extension name="oauth2" />反对的配置: oauth2.refreshTokenValiditySeconds:Refresh token time-to-live,默认30天oauth2.accessTokenValiditySeconds: Access token time-to-live,默认12小时Authorization ServerThe authorization server exposes two endpoints: /oauth/authorize/oauth/token在 Chrome 开发者工具 local storage 里把 auth token 删除之后,轻易在 UI 上再操作一下,会从新触发 token 申请:https://20.51.210.49:9002/aut... 下图是新的 token 申请的 form data 字段,输出字段: 下图是服务器返回的新的 Access Token 和 Refresh token: OAuth2 里的几个角色资源所有者:能够授予对受爱护资源的拜访权限的实体。 当资源所有者是集体时,则称为:最终用户。资源服务器:托管受爱护资源的服务器,可能应用拜访令牌承受和响应受爱护资源申请。客户端:代表资源所有者并经其受权收回受爱护资源申请的应用程序。术语客户端并不意味着任何特定的实现特色(例如,应用程序是否在服务器、桌面或任何其余特定设施上运行)。受权服务器:服务器在胜利验证资源所有者并取得受权后向客户端颁发拜访令牌。受权服务器在 Oauth2 中定义,示例资源服务器在 ycommercewebservices Extension 和 ywebservices Extension 中配置。OAuth 2.0 带有四个流程。 SAP Commerce 反对所有这些: ...

July 27, 2021 · 1 min · jiezi

关于sap:SAP-BTP-Launchpad-Service-打不开应用的权限问题

我在 SAP BTP Cockpit 的 Launchpad Service 里,点击 Go To Application: 遇到谬误音讯:Sorry, we couldn't find the site. Please contact your site Administrator for assistance. 解决办法:Security - Trust Configuration, 点击 Default identity provider: show assignment: 给以后登录用户调配 Launchpad_admin 和 Launchpad_external_user 这两个角色,谬误隐没: 更多Jerry的原创文章,尽在:"汪子熙":

July 27, 2021 · 1 min · jiezi

关于sap:使用-SAP-Business-Application-Studio-开发-Vue-应用

这是 Jerry 2021 年的第 49 篇文章,也是汪子熙公众号总共第 326 篇原创文章。 Jerry 2020年已经在 SAP 寰球技术大会上,给大家分享过,SAP Commerce Cloud 新一代基于 SAP Spartacus 我的项目的 Storefront.这个开源我的项目应用到的前端框架是 Angular. 更多详情,请参考 Jerry 的文章:Jerry在2020 SAP寰球技术大会的分享:SAP Spartacus技术介绍的文字版。 其实 SAP Spartacus 在问世之初,设计愿景之一,就是让其具备独立于任何前端框架,即所谓 Framework Agnostic 的个性。 最近咱们组内的共事,也聊到了另一款开源的电商 Storefront 开发框架,算是 SAP Spartacus 的竞争对手吧,叫做 Vue Storefront: https://github.com/vuestorefront Vue Storefront 的例子表明,时至今日,前端开发生态圈,始终是 React,Angular 和 Vue,三国争霸,三足鼎立的场面。 回到本文的主题,Jerry 之前的文章提到,同之前 SAP 云平台 Neo 环境上传统的 Full Stack WebIDE 相比,SAP Business Application Studio 是 SAP Business Technology Platform 上的云利用开发工具,在开发全栈利用时,反对的前端技术并不局限于 SAP UI5 ,而是包含 Vue.js, React 在内的泛滥 HTML5 前端开发技术。 ...

July 27, 2021 · 2 min · jiezi

关于sap:SAP-Commerce-Cloud-Storefront-框架选型Accelerator-还是-Spartacus

Choosing Which Storefront to Use for Your SAP Commerce Cloud Solution 有许多应用 SAP Commerce Cloud 创立店面的选项,决定采纳哪些选项仿佛令人生畏。 在本文中,咱们将介绍可用选项,提供无关如何抉择最佳选项的倡议,以及如何为 SAP Commerce 配置企业对消费者 (B2C)/企业对企业 (B2B) 店面和 Web service 云解决方案。 Accelerators自 SAP Commerce 4.4 版以来,加速器始终以一种或另一种模式存在,旨在作为店面的起始模板。 以后的 B2C 响应式店面加速器是在 5.4 版中引入的,并通过后续版本进行了额定的改良,包含增加了 B2B 插件以增加 B2B 性能。 这些模板提供了带有时尚、电子和电动工具示例的预构建示例店面,为作为 SAP Commerce Cloud 一部分的个性和性能提供了一个终点。 而后能够依据须要定制它们以满足您的要求。 Industry Accelerators还有其余特定于行业的加速器,例如游览、电信和媒体、金融服务和公民参加加速器,它们具备独自的开发周期,但仍依赖于特定版本的 SAP Commerce。 如果您应用的是 SAP Commerce Cloud,则须要确保已查阅兼容性矩阵以确保它受到反对。 Spartacus JS StorefrontSpartacus JavaScript Storefront 是 SAP 旗下的一个开源我的项目,于 2019 年 5 月公布。 作为客户端店面,Spartacus 是将店面与 SAP Commerce 外围解耦的要害局部。 这容许 SAP Commerce 平台的开发与店面离开运行,从而实现更简略的降级。 ...

July 27, 2021 · 1 min · jiezi

关于sap:什么是软件开发中的-green-field-和-brown-field-模式-绿地开发和棕地开发

明天我在浏览一篇文章时,看到了一个词汇:greenfield approach,这个词汇和 migration 绝对应。 这是两种不同的软件开发模式。 随着软件成为最快、最具生机的行业之一,它要求开发人员应用适当的软件开发工具和办法来开发满足古代企业一直增长的需要的产品。绿地和棕地软件开发是开发尖端软件的两种办法。 What is Greenfield Software Development?绿地软件开发是指为全新环境开发零碎,须要从头开始开发——没有遗留代码。这是一种在您从新开始并且没有限度或依赖关系时应用的办法。 现在,纯绿地我的项目十分常见,您常常最终会交互或更新一些现有代码或启用集成。 Greenfield 软件开发的一些示例包含:从头开始构建网站或应用程序、建设新的数据中心,甚至施行新的规定引擎。 绿地软件开发的劣势提供从头开始施行最先进技术解决方案的机会为软件开发提供一个全新的平台无需在现有零碎或基础设施的限度下工作与现有软件、先入为主的概念或现有业务流程没有任何依赖性或分割绿地软件开发的毛病没有明确的方向,危险水平绝对较高因为须要定义新零碎的所有方面,因而可能十分耗时有这么多可能的开发选项,可能没有分明地理解要采取的办法在适合的工夫范畴内让每个人都参加做出要害决策可能很艰难What is Brownfield Software Development?Brownfield 软件开发是指在现有或遗留软件系统存在的状况下开发和部署新的软件系统。 棕地开发通常产生在您想要开发或改良现有应用程序时,并迫使您应用以前创立的代码。 因而,任何新的软件架构都必须思考并与现有零碎共存——以加强现有的性能或能力。 Brownfield 软件开发的示例包含:向现有企业零碎增加新模块、将新性能集成到晚期开发的软件中或降级代码以加强应用程序的性能。 Brownfield 软件开发的劣势提供一个从预约方向开始的中央提供对现有技术解决方案进行改良的机会反对应用定义的业务流程和技术解决方案容许重用现有代码以增加新性能Brownfield 软件开发的毛病须要对须要在其上构建新零碎的现有零碎、服务和数据有透彻的理解可能须要从新设计现有简单环境的很大一部分,以便它们对新的业务需要具备操作意义须要具体精确地理解现有业务和IT的约束条件,这样新我的项目才不会失败解决遗留代码不仅会减慢开发过程,还会减少整体开发成本Comparison Overview of Greenfield and Brownfield Software Development 哪个更适宜您:绿地或棕地软件开发?软件是每个产品或服务的外围。因而,抉择正确的开发方法对于软件的胜利至关重要。因为绿地软件开发具备更高的危险,因而麻利实际通常被认为是最好的办法;通过小迭代开发软件并将其交到客户手中以取得疾速反馈,它们有助于无效解决危险。 另一方面,Brownfield 我的项目通常建设在更稳固的基础架构上,并具备已确认的业务流程;因而,他们不太可能面临危险。然而,开发工作的很大一部分用于了解和整合现有的业务环境,而不是交付价值。对于棕地开发,确保胜利的最佳办法是应用迭代办法来改良现有的逻辑和物理架构并减速开发、进步产品质量并最大限度地缩小缺点。 只管没有一种办法比另一种办法更好,但取决于您是想从头开发新产品还是改良现有产品的性能,您须要抉择正确的办法以获得最佳后果。 更多Jerry的原创文章,尽在:"汪子熙":

July 27, 2021 · 1 min · jiezi

关于sap:SAP-S4HANA-一条代码线许多种选择

本文英文版的作者为 Bernd Leukert,SAP SE 产品与翻新执行委员会成员(Member of the Executive Board, SAP SE Products & Innovation) 原文:One Code Line, Many Options 越来越多的数据、简单但不灵便的业务流程、具备多个软件平台和解决方案的异构 IT 环境——这些挑战对于当今的许多公司来说可能并不生疏。 随着企业寻求在竞争中放弃当先、疏导和更好地利用技术并推动翻新,数字化转型曾经提上了企业的日程。 钻研发现,云计算是数字颠覆的一种推动因素。 事实上,云计算是升高 IT 老本、放慢价值实现工夫和进步灵活性的一个很有前途的抉择。 因而,随着公司致力于寻找升高 ERP 零碎后期老本、缩短部署工夫以及轻松扩大和缩减零碎规模的办法,基于云的企业资源布局 (ERP) 呼声越来越高,越来越受青眼,也就难能可贵了。 满足以上条件的 云 ERP 软件,使得企业更容易对其进行定制,以满足其业务个性化需要。 From Prediction to Action with SAP S/4HANA Cloud 1705SAP S/4HANA Cloud 的最新更新反对公司做到这一点。 SAP S/4HANA Cloud 是咱们的智能 ERP 软件即服务解决方案,具备上下文剖析、数字助理性能、机器学习和屡获殊荣的 SAP Fiori 用户体验。 我在之前的博客中曾经概述了 SAP S/4HANA 的泛滥劣势,随着 1705 版本的公布,咱们正在为解决方案的外围增加更多智能。 最值得注意的是,1705 具备 SAP CoPilot 的全面可用性,这是一种应用直观、高度智能且具备上下文的数字助理。 基于业务背景的理解,它会依据您的角色、背景和以后业务情况,在您须要时提供相干见解并举荐操作。 它简化了工作并促成了团队单干,从而为更多合作奠定了根底,使员工可能更快、更胜利、更智能地工作。 ...

July 27, 2021 · 1 min · jiezi

关于sap:SAP-CRM-organization-Model组织架构模型自动决定的逻辑分析

看一下规范的OPPT是如何determine organization的: 查看Transaction Type OPPT的配置,找到Organization Data Profile:SPRO->CRM->Transactions->Basic Settings->Define Transaction Types 发现配的profile为000000000005,双击进入,找到对应的profile: 能够看到对应的Organizational Model Determin. Rule为10000144, 而Responsibilities Determin. Rule没有配。参考CR100上的解释: Organizational Model Rule是须要依据search的后果来确定Organizational Unit. Responsibilities Rule是间接指定对应的Organizational Unit. 查看Determination Rule:SPRO->CRM->Master Data->Organizational Management->Organizational Data Determination->Maintain Determination Rules 找到对应的10000144的rule: 能够看到对应的determination用的FM是CRM_ORGMAN_ORGOBJECTS_FIND_4 点击Container tab能够看到rule 10000144配置的parameter: 阐明在执行FM CRM_ORGMAN_ORGOBJECTS_FIND_4须要的两个参数为BP Number和Transaction Type: SPRO文档外面有对规范的determination function的解释: 前两个是针对Sales Transaction的,后两个是Service Transaction,依据解释FM CRM_ORGMAN_ORGOBJECTS_FIND_4是依据BP的Sales Area来查找对应的Organizational Unit。 进入CRM_ORGMAN_ORGOBJECTS_FIND_4的代码:从Container外面拿到BP Number, 在依据BP Number拿到对应的GUID: 依据BP GUID获取对应的Sales Area: 从CRMM_BUT_LNK0011表外面拿BP Number对应的Sales Area ...

July 22, 2021 · 1 min · jiezi

关于sap:SAP-S4HANA-OData-Mock-Service-介绍

官网 OData Mock Service此存储库还蕴含一个简略的基于 Node.js 的服务器,它代表分支模仿服务器中的 OData 模仿服务器。 该服务器能够在不拜访 SAP S/4HANA 零碎的状况下测试 SAP S/4HANA Cloud SDK 的 SAP S/4HANA 集成性能。 该服务器托管一个 OData v2 模仿服务,该服务在肯定水平上模拟 SAP S/4HANA Cloud 的业务合作伙伴 API。 如果没有可用的 SAP S/4HANA 零碎,模仿服务器可用作 SAP S/4HANA Cloud SDK 的简略测试和试验的替代品。 它专门针对本书中的示例量身定制。 此页面解释了如何运行模仿服务器以及如何将其集成到示例应用程序的测试中。 留神:服务器没有任何安全措施。 运行服务器的危险由您本人承当,并且仅用于试验。 不要应用服务器来存储任何集体数据 - 只应用虚伪数据。 How to run the server克隆此存储库后,请查看分支模仿服务器。 或者,下载此存档并将其解压缩到您的本地计算机。 以下所有步骤都应在您检出或提取模仿服务器代码的文件夹中进行。 在启动模仿服务器之前,您须要手动将业务搭档 OData 服务的元数据 EDMX 文档放入文件夹 business-partner 并筹备文档: 转到 SAP API 业务核心中业务合作伙伴 API 的形容。单击登录并应用您的凭据登录(您可能须要当时注册)。单击详细信息选项卡,而后单击下载标准并抉择 EDMX。将下载的名为 API_BUSINESS_PARTNER.edmx 的文件存储在模仿服务器文件夹的子文件夹 business-partner 中。在文本编辑器中关上文件 API_BUSINESS_PARTNER.edmx 并找到蕴含 EntityType Name="A_BusinessPartnerType" 的行。 在此 EntityType 中,在蕴含 \</Key> 的行之后增加以下两行:<Property Name="YY1_AddrLastCheckedOn_bus" Type="Edm.DateTime" Precision="0" sap:display-format="Date" sap:label="Addresses Last Checked On"/><Property Name="YY1_AddrLastCheckedBy_bus" Type="Edm.String" MaxLength="50" sap:label="Addresses Last Checked By"/>筹备好模仿服务器后,您能够在本地计算机(http://localhost:3000)或 SAP Cloud Platform, Cloud Foundry 上运行模仿服务器,如以下两局部中的任一个所述。 ...

July 20, 2021 · 1 min · jiezi

关于sap:SAP-S4HANA-Cloud-SDK-入门介绍

这是 Jerry 2021 年的第 48 篇文章,也是汪子熙公众号总共第 325 篇原创文章。 Jerry 之前的文章 SAP Fiori 利用索引大全 已经介绍过一个网站,可能失去 SAP 所有 Fiori 利用列表。 到2021年7月18日为止,SAP 总共公布了 13268 个 Fiori 利用: 其中属于 SAP S/4HANA 且 UI 基于 Fiori Elements 开发的 Fiori 利用数字为:878. 这 878 个 Fiori 利用,Jerry 之前的很多文章都已经提到过,其架构为前台界面采纳 Fiori Elements 提供的 List Report, Object Type 等模板,后盾由 OData 服务提供业务数据。 SAP Fiori Elements 公开课第一单元的视频 SAP S/4HANA 规范的 OData 服务,在 SAP API Business Hub 上可能查问和浏览其明细。 这些 OData 服务,除了用于 SAP S/4HANA 规范 Fiori 利用外,也能够被 SAP Partners 在第三方利用中调用,不便地同 SAP S/4HANA 集成。例如,Partners 能够用本人相熟的编程语言进行二次开发,而后将利用部署到 SAP BTP 上,即所谓的 Side-by-Side 扩大形式。 ...

July 20, 2021 · 2 min · jiezi

关于sap:SAP-Cloud-SDK-for-JavaScript-的搭建和使用方法介绍

官网链接 要创立已蕴含应用 SAP Cloud SDK for JavaScript 所需的所有文件和配置的应用程序,您能够应用 SDK 的命令行界面 (CLI)。 要获取 CLI,请运行以下命令: npm install -g @sap-cloud-sdk/cli 这将在你的机器上全局装置 CLI,容许你在任何中央应用它。 当初你能够通过运行 CLI 的 init 命令来创立一个新我的项目: sap-cloud-sdk init my-sdk-project装置结束: 生成的我的项目里,package.json 定义的依赖如下: 运行命令,启动初始化好的我的项目,能看到利用胜利启动的音讯: npm run start:dev 官网 Set up the API Server有多种设置 API Server 的办法,您能够设置本人的 Mock Server,也能够应用 Sandbox API。 为了调用 OData 服务,须要有一个要调用的服务。您能够依照此处的阐明设置模仿业务合作伙伴和自定义服务的本地模仿服务器。这个模仿服务器并不反对理论 OData 服务的所有性能,但在本地试用它就足够了。 一旦它启动并运行,您应该会在 http://localhost:3000/ 看到服务列表。 或者,也能够应用 SAP API Business Hub 的沙箱测试许多 API。要应用沙箱,您须要一个 API 密钥。转到 https://api.sap.com 并单击右上角的“登录”。如果您没有帐户,则须要先注册。登录后,点击右上角的“hi”,而后在刚刚关上的下拉菜单中点击“首选项”。在首选项页面上,单击显示 API 密钥。 Add a custom route最后,该应用程序仅蕴含 index 和 hello-world 路由。 咱们将为业务合作伙伴增加另一条路线,其中将列出所有可用的业务合作伙伴。 ...

July 20, 2021 · 2 min · jiezi

关于sap:SAP-Cloud-SDK-for-JavaScript-概述

原文链接 TypeScript 和 JavaScript 开发人员,这是为您筹备的:SAP Cloud SDK (fka SAP S/4HANA Cloud SDK) 当初可用于 JavaScript。 明天,咱们很骄傲地公布了实用于 JavaScript 的 SAP Cloud SDK 1.0.0 版。 这是继去年 10 月开始的测试版之后,第一个通用的、高效的 JavaScript 库版本。 与实用于 Java 的 SDK 相似,实用于 JavaScript 的 SAP Cloud SDK 使在 SAP Cloud Platform 上将 SAP S/4HANA 的扩大开发为应用程序变得轻松愉快。 实用于 JavaScript 的 SAP Cloud SDK 可帮忙您将 SAP S/4HANA 集成到应用 TypeScript 或 JavaScript 编写并在 Node.js 中运行的云原生应用程序中。 您能够在本地执行这些应用程序,也能够将它们部署到 SAP Cloud Platform、Cloud Foundry。 Easy access to SAP S/4HANA Cloud APIs拜访 SAP S/4HANA Cloud 能够像上面一样简略——没有样板、低级代码,只有业务逻辑: ...

July 20, 2021 · 2 min · jiezi

关于sap:如何在-SAP-BTP-ABAP-编程环境里直接调用-ABAP-OnPremises-系统的-RFC-函数

首先登录 ABAP On-Premises 零碎,运行事物码:aco_proxy,为 RFC 函数 RFC_SYSTEM_INFO 和 RFC_READ_TABLE, 生成代理类元数据,格局为 xml. 将 xml 文件另存到本地。 应用 ABAP Development Tool 登录 SAP BTP ABAP 运行环境,新建一个 Service Consumption Model,类型抉择 RFC: 生成一个 Proxy Class,咱们稍后会在 ABAP 代码里,通过这个 Proxy Class 来调用 On-Premises 零碎上的 RFC 函数。将前一步骤在 On-Premises 零碎里生成的 metadata.xml, 导入到 Proxy 类生成向导里。 激活这个 Service Consumption Model,在主动生成的代理类里,咱们能找到 ABAP 代码模板,这个代码模板,能够间接拷贝到咱们的 ABAP 代码里,稍作批改,就能调用 ABAP On-Premises 零碎的 RFC 函数了。 新建一个 ABAP 类,将上图代理类里的代码拷贝到这个 ABAP 类的 Main 办法里: ...

July 20, 2021 · 2 min · jiezi

关于sap:SAP-Fiori-SSL-和-SAML-20-配置文档

July 20, 2021 · 0 min · jiezi

关于sap:如何为部署到-SAP-BTP-平台上的-Nodejs-应用提供Authorization-和-Trust-管理-权限管控

官网链接 本教程的指标是通过身份验证和受权来爱护和部署产品列表应用程序,因而只有具备正确受权的用户能力取得身份验证应用程序中的产品。没有必要受权的用户能够登录应用程序,但看不到产品。 本教程的根底是一个 Node.js 应用程序,它应用 express 框架和 SAPUI5 来显示产品列表(参见屏幕截图)。 XSUAA and the Application Router为了爱护此产品列表应用程序,应用了两个组件。 一种称为 XSUAA 服务,另一种称为利用路由器。 应用程序路由器与 XSUAA 服务联合应用来验证用户并将用户路由到受爱护的应用程序。 XSUAA 表演 OAuth 受权服务的角色,而应用程序路由器表演 OAuth 客户端的角色。 此外,利用路由器充当利用的地方入口点。 为了避免在未经身份验证的状况下间接调用您的应用程序,有必要向您的应用程序增加一些代码。 在咱们的示例中,您应用 Node.js 护照身份验证中间件并应用 XSUAA JWT 策略对其进行配置。 此代码可避免在没有无效 JWT 的状况下间接调用产品列表应用程序。 checkReadScope 函数确保只有具备正确权限的用户能力查看产品。 If you want to use SAP modules locally, you need to add the npm configuration: npm config set @sap:registry https://npm.sap.com approuter 将使您可能创立到您的应用程序的平安路由。 在 manifest.yaml 中,您必须为利用程序定义主机名并增加目的地。 清单文件用于将 XSUAA 服务实例绑定到您的应用程序。 ...

July 17, 2021 · 2 min · jiezi

关于sap:如何在-SAP-BTP-平台-ABAP-编程环境里消费基于-SOAP-的-Web-Service

这是 Jerry 2021 年的第 47 篇文章,也是汪子熙公众号总共第 324 篇原创文章。 Jerry 2014 年时,已经在 SAP 社区上写过一篇英文博客,介绍了如何在 ABAP On-Premises 零碎里,创立和生产 Web Service: Step by step to create, consume and trace web service in ABAP system 这篇文章的中文版,请移步这个链接: 最具体的 SAP ABAP Web Service 创立和生产步骤解说 到了 SAP BTP 上的 ABAP 编程环境里,咱们依然能够沿用 On-Premises 零碎里的 Destination 概念,在云上的 ABAP 代码里,生产第三方的服务。区别在于 On-Premises 零碎里的 Destination 通过事物码 SM59 创立,而云上的 ABAP,则在 SAP BTP 控制台里创立 Destination 实例。具体步骤请参考 Jerry 之前的文章:SAP云平台上的ABAP编程环境里如何生产第三方服务。 本文介绍如何在 SAP BTP 平台 ABAP 编程环境里生产基于 SOAP 的 Web Service. 如果浏览过 Jerry 后面提到的两篇文章,了解本文的内容不过是几分钟的事件。 ...

July 17, 2021 · 2 min · jiezi

关于sap:SAP-BTP-平台-CloudFoundry-环境入门级别的介绍

原文链接 让咱们首先解释 Cloud Foundry 的名称。 它是什么? Cloud Foundry(或 CF)是 Cloud Foundry 基金会(之前是 Linux 基金会)的标准和软件工具集。 它是齐全开源的,任何公司或组织都能够应用这些工具或创立遵循 CF 标准的零碎。 SAP 通过为其创立专用环境作为简略易用的平台即服务 (PaaS),在 SAP BTP 上施行了 Cloud Foundry。 Cloud Foundry 为开发人员和组织带来了显着的益处: 语言无关 - 抉择任何语言运行时,并依据须要增加新语言管理员拆散——管理员和开发人员能够并行工作规范命令行界面 - 所有 CF 提供程序都应用雷同的 CLI,而不仅仅是 SAP开源 - 许多公司的奉献,更新和新性能更快咱们将在上面的局部中探讨其中的许多新性能。 Cloud Foundry - Plaform as a Service PaaS 从图中能够看出,传统的开发须要整个零碎。 硬件、操作系统、应用服务器和软件都由组织治理和保护。 这称为“外部部署”。 传统的云开发将硬件和基础设施移出组织。 然而,开发人员和管理员依然必须保护从操作系统 (OS) 开始的所有内容。 平台即服务 PaaS 将运行时(应用程序服务器、数据库和其余根本应用程序)的管制从组织转移回云。 Fixing a PaaS problem - buildpacks and services然而,PaaS 零碎存在一个问题。 将运行时层移至云端意味着组织失去了对运行时层的管制。 如果组织想要进行更改,则须要与云提供商单干。 Cloud Foundry 通过向云提供商和组织提供运行时管制来解决这个问题。 ...

July 17, 2021 · 1 min · jiezi

关于sap:OpenSAP-Fiori-Elements-公开课第四单元视频的中文字幕

视频链接 该视频字幕由 Jerry 人工翻译。 欢送大家回来,本课程是第一周第四单元,Fiori Elements 开发环境的搭建。 在本课程中,咱们将应用 SAP Business Technology Platform,简称 BTP. 起因是绝大多数 SAP Fiori Elements 应用的 OData 服务,都是基于 ABAP 技术栈。 咱们应用SAP BTP,因为其上的 ABAP 环境非常容易应用。 并且,这样咱们总是能拜访到 ABAP 平台的最新版本,从而可能应用 ABAP 最新的性能和改良。 一个很酷的新个性就是 Restful ABAP Programming Model 简称 RAP,之前第二单元的课程曾经介绍过了。 应用 RAP 能够非常容易地创立 OData V2 和 V4. 如果零碎的 ABAP 版本比拟低,那么仍可应用 ABAP Programming Model for Fiori, 后者依然提供了基于 CDS view 创立 OData 服务的性能。 如果您依然在应用 740 及以下的版本,依然能够应用 SEGW 来手动开发 OData 服务,只是开发量要更大些。 ...

July 17, 2021 · 2 min · jiezi

关于sap:Subject-在-SAP-Spartacus-Popover-Component-中的应用

Subject 是 Rxjs 里的一个工具对象。 Subject 是一种非凡类型的 Observable,它容许将值多播到许多观察者。 Subject 就像 EventEmitters。 每个 Subject 都是 Observable 和 Observer。 您能够订阅一个主题,您能够调用 next 提要值以及谬误和实现。 这个属性定义在 Popover Component 上: 其赋值操作产生在 Popover Directive 的代码里: 当 Popover Component 的 Close 按钮被鼠标或者键盘触发时,触发注册好的 close 事件处理函数: 在 close 事件处理函数里,通过 Subject 向其监听者播送 CLOSE_BUTTON_CLICK 或者 CLOSE_BUTTON_KEYDOWN 事件。 在 Popover Directive 里定义了所有可能触发 Popover Component 关掉的事件,如上图所示。 Popover Directive 是这些事件的监听者。 这里有两个问题: handlePopverEvents 什么时候被谁调用?为什么是 Directive 的 close 函数负责敞开 Popover Component?对于第一个问题,这里能看出端倪了:Popover Directive 的 eventSubject 负责监听事件,而后这个 eventSubject 实例赋给 Component 实例,后者负责发送事件: ...

July 17, 2021 · 1 min · jiezi

关于sap:如何基于-SAP-CDS-view-生成-object-page

通过之前的文章如何在 SAP BTP 上通过 CDS view 疾速创立 Fiori Elements 利用,咱们曾经创立了一个 CDS view,并基于该 CDS view,创立了一个 Fiori Elements 利用: 如上图所示,咱们冀望,点击上图的“>”符号时,能跳转到该行我的项目对应的 object page 页面去。本文介绍实现办法。 这个 CDS view 次要的 annotation,都以通过 metadata extraction 的办法,抽取到了名为 Z_TRAVEL_METADATA_JERRY 的metadata Extension 中去。具体方法参考我的文章如何在 SAP BTP 上通过 CDS view 疾速创立 Fiori Elements 利用 在这个 extension 的头部,增加如下注解,申明一个 UI Object page: 而后给两个字段 TravelID 和 AgencyID,别离加上 identification 的注解,这表明咱们冀望把这两个字段,配置在 Object Page 上: 这个 metadata extension 残缺的源代码: @Metadata.layer: #CORE@UI: { headerInfo: { typeName: 'Travel', typeNamePlural: 'Travels', title: { type: #STANDARD, label: 'Travel', value: 'TravelID' } }}annotate view Z_C_TRAVEL_DATA_JERRY with{ @UI.facet: [ { id: 'Travel', purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, label: 'Travel', position: 10 } ] @UI : { lineItem : [{position: 10, importance: #HIGH}], selectionField: [{position: 10 }], identification:[ { position: 10, label: 'Travel' } ] } TravelID; @UI : { lineItem : [{position: 15, importance: #HIGH}], selectionField: [{position: 20 }], identification: [ { position: 20 } ] } @Consumption.valueHelpDefinition: [{ entity: {name: '/DMO/I_Agency', element: 'AgencyID'} }] AgencyID; @UI : { lineItem : [{position: 60, importance: #HIGH}] } Memo;}最初从 Fiori Elements list report 表格控件点击“>” 之后达到的 Object Page 页面: ...

July 11, 2021 · 1 min · jiezi

关于sap:如何使用-SAP-CDS-view-中的-currency-conversion-功能

例如,我开发了一个 CDS view,并主动生成了一个 Fiori Elements 利用,外面显示的金额单位是欧元: 我冀望利用 CDS view 的货币转换性能,currency conversion,将这些金额的单位转换成美元。 能够应用这个文档里提到的转换函数。 应用如下高亮代码: @AbapCatalog.sqlViewName: 'ZCTRAVELJERRY'@AbapCatalog.compiler.compareFilter: true@AbapCatalog.preserveKey: true@AccessControl.authorizationCheck: #CHECK@EndUserText.label: 'Consumption view from /DMO/I_TRAVEL_U'@Metadata.allowExtensions: true@Search.searchable: truedefine view Z_C_TRAVEL_DATA_JERRY as select from /DMO/I_Travel_U association [1..1] to /DMO/I_Agency as _Agency on $projection.AgencyID = _Agency.AgencyIDassociation [1..1] to /DMO/I_Customer as _Customer on $projection.CustomerID = _Customer.CustomerID{ key TravelID, @ObjectModel.text.association: '_Agency' AgencyID, CustomerID, concat_with_space(_Customer.Title, _Customer.LastName, 1) as Addressee, BeginDate, EndDate, BookingFee, TotalPrice, CurrencyCode, currency_conversion( amount => TotalPrice, source_currency => CurrencyCode, round => 'X', target_currency => cast('USD' as abap.cuky( 5 )), exchange_rate_date => cast('20200429' as abap.dats), error_handling => 'SET_TO_NULL' ) as PriceInUSD, @Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.90 Memo, Status, LastChangedAt, /* Associations */ _Agency, _Booking, _Currency, _Customer}最初的成果: ...

July 11, 2021 · 1 min · jiezi

关于sap:一步步学习-SAP-CDS-view-Text-Association-在-SAP-Fiori-Elements-中的应用

在前一篇文章如何给 SAP Fiori Elements 利用的字段增加 value help,咱们曾经通过注解的形式,给 Fiori Elements 利用的 selection field,加上了 value help 性能。 本文通过应用文本关联(Text Association),将 Agency Name 增加到 ID,咱们将使代理字段更具可读性。 CDS association 只是 join 的标准,始终在语法中的雷同地位。 关联的次要长处是重用:一旦指定了一次关联,就能够不便地将多个关联串连到一个门路中。 来进行理论的操作。 增加下图第9行和第13行 text association 相干的代码: @AbapCatalog.sqlViewName: 'ZCTRAVELJERRY'@AbapCatalog.compiler.compareFilter: true@AbapCatalog.preserveKey: true@AccessControl.authorizationCheck: #CHECK@EndUserText.label: 'Consumption view from /DMO/I_TRAVEL_U'@Metadata.allowExtensions: true@Search.searchable: truedefine view Z_C_TRAVEL_DATA_JERRY as select from /DMO/I_Travel_U association [1..1] to /DMO/I_Agency as _Agency on $projection.AgencyID = _Agency.AgencyID{ key TravelID, @ObjectModel.text.association: '_Agency' AgencyID, CustomerID, BeginDate, EndDate, BookingFee, TotalPrice, CurrencyCode, @Search.defaultSearchElement: true @Search.fuzzinessThreshold: 0.90 Memo, Status, LastChangedAt, /* Associations */ _Agency, _Booking, _Currency, _Customer}增加 text association 之前的 Fiori Elements 利用,Agency ID 和 Agency Name 是分成两列独自显示的: ...

July 11, 2021 · 1 min · jiezi

关于sap:如何给-SAP-Fiori-Elements-应用的字段添加-value-help

在 Jerry 的前一篇文章 如何在 SAP BTP 上通过 CDS view 疾速创立 Fiori Elements 利用里,咱们曾经依据 CDS view 创立了一个 Fiori Elements 利用: 本文咱们给 Agency ID 这个 selection field,增加 value help. 当初 Agency ID selection ID,点了 F4 之后,value help 无奈工作: 给 AgencyID 字段增加如下高亮注解: @Metadata.layer: #COREannotate view Z_C_TRAVEL_DATA_JERRY with{ @UI : { lineItem : [{position: 10, importance: #HIGH}], selectionField: [{position: 10 }] } TravelID; @UI : { lineItem : [{position: 15, importance: #HIGH}], selectionField: [{position: 20 }] } @Consumption.valueHelpDefinition: [{ entity: {name: '/DMO/I_Agency', element: 'AgencyID'} }] AgencyID; @UI : { lineItem : [{position: 60, importance: #HIGH}] } Memo;}同时,在 Service Definition 里将 value help 应用到的 /DMO/I_Agency 也裸露进去: ...

July 11, 2021 · 1 min · jiezi

关于sap:SAP-ABAP-Development-Tool-提高开发效率的十个小技巧

这是 Jerry 2021 年的第 46 篇文章,也是汪子熙公众号总共第 323 篇原创文章。 Jerry 曾经有很长一阵子没有关上工作电脑上的 SAP ABAP Development Tool 了。在用 Visual Studio Code 进行 Angular 开发马上快满一年的工夫点上,为了做到喜新不厌旧,本文把 SAP ABAP Development Tool 一些进步工作效率的应用小技巧列举进去。欢送大家在留言区补充。 对于 Jerry 之前分享过的 SAP ABAP Development Tool 应用技巧,请查阅这些文章: ABAP Development Tool 代码模板和其余一些实用技巧汇总给你的ABAP对象打上标签(Tag)ABAP开发环境终于反对以驼峰命名法主动格式化ABAP变量名了SAP官网公布的ABAP编程标准ABAP开发环境语法高亮的那些事儿不喜爱SAP GUI?那试试用Eclipse进行ABAP开发吧1. 疾速关上 ABAP Development Tool 任意设置假如我想关上 ABAP Development Tool 和色彩 (color) 相干的设置,然而我记不住具体的设置门路了,没有关系,应用快捷键 Ctrl + 3: 在输入框内输出 color,而后就能看到所有和 color 相干的设置。 抉择本人想设置的条目,单击,即可迅速进入设置页面: 2. CDS view 数据的本地保留CDS view 数据预览之后,能够通过 Add filter 左边这个小图标,以不同的格局另存到本地以便进一步剖析。 ...

July 11, 2021 · 2 min · jiezi

关于sap:如何在-SAP-BTP-上通过-CDS-view-快速创建-Fiori-Elements-应用

本文基于 SAP Business Technology Platform 的 ABAP 编程环境进行的开发。 应用 ABAP Development Tool 登录 SAP BTP ABAP 编程环境,新建一个 package,命名为 Z_JERRY_CDS. 右键选中该 package,创立一个新的 Consumption view. 该视图是一个生产视图,它基于业务对象 (BO) 视图 /DMO/I_TRAVEL_U,提供了独立于消费层的给定数据模型。 它蕴含在其上运行的应用程序所需的所有外围信息。 生产视图是定义在 BO 视图之上的 CDS 视图,用于: 公开适宜给定生产用例的字段应用正文(例如用于 UI、搜寻和 OData)用元数据丰盛数据模型。这个生产视图创立好之后,源代码如下: 应用 ABAP Development Tool Content Assistant 快捷键,能够迅速将规范视图 /DMO/I_Ttravel_U 的所有字段,通过菜单 Insert all elements(template),带入到以后的生产视图里: 抉择 Open with Data Preview,即可查看该生产视图的数据: 数据显示如下: 下一步,将 CDS 视图公开为业务服务。 这将容许咱们在 Fiori Elements 预览中预览 ABAP Development Tool 里所作的更改。 ...

July 10, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-的延迟加载-Lazy-load-设计原理

官网链接 提早加载,也称为代码拆分,可让您将 JavaScript 代码分成多个块。 后果是当用户拜访第一页时,您不用加载残缺应用程序的所有 JavaScript。 相同,只加载给定页面所需的块。 在导航到其余页面时,会在须要时加载其余块。 这种办法能够显着改善“交互工夫”,尤其是在低端挪动设施拜访简单 Web 应用程序的状况下。 Spartacus Approach to Lazy Loading代码拆分是一种必须在应用程序构建时实现的技术。 Angular 提供的代码拆分通常是基于路由的,这意味着着陆页有一个块,产品页面有另一个块,依此类推。 因为 Spartacus 次要是 CMS 驱动的,因而无奈在构建时决定每个路由的理论应用逻辑。业务用户最终将通过引入或删除组件来扭转页面构造。 这就是为什么须要另一种提早加载办法的起因,Spartacus 通过以下形式提供: CMS 组件的提早加载CMS 驱动的功能模块提早加载 - CMS-driven lazy loading of feature modulesDefining Dynamic Imports Only in the Main Application动静导入是一种用于促成提早加载并容许代码拆分的技术,只能在主应用程序 - main application 中应用。 无奈在预构建库中定义动静导入。 这是一个可怜的限度,导致必须由客户增加一些利用程序代码。 只管自定义代码的数量被限度在最低限度,但咱们将在将来版本的 schematics library 中增加一项性能,以主动增加提早加载模块。 Avoiding Static Imports for Lazy-Loaded Code为了使代码拆分成为可能,您的动态 JavaScript 代码(主利用程序包)不应该对您想要提早加载的代码进行任何动态导入。 如果你真的这么做了,构建器会留神到代码曾经蕴含在内,因而不会为其生成独自的块。 这在从库中导入符号的状况下尤其重要。 在撰写本文时(Angular 9 和 Angular 10),将动态导入与动静导入混合用于雷同的库入口点,即便对于不同的符号,也会毁坏该库入口点的提早加载和 tree shaking. 如果您要这样做,它将在构建中动态地蕴含整个入口点。 因而,强烈建议您为必须动态加载的代码创立特定的入口点,并为能够提早加载的代码创立独自的入口点。 ...

July 10, 2021 · 2 min · jiezi

关于sap:SAP-Spartacus-默认路由配置的工作原理

这个默认配置文件的名称:default-routing-config.ts 查看哪些地方生产了 defaultRoutingConfig: provudeDefaultConfig 是一个 helper 函数: 这个 RoutingModule.forRoot 办法又会在什么时候被调用呢? 在这两处:base-storefront.module.ts 和 storefront-foundation.module.ts: 留神 forRoot 办法返回参数的类型:ModuleWithProviders: 因为 import 这些 module 的生产 module,imports 区域的类型就是 any[] | Type<any> | ModuleWithProviders<{}>)[] 对于 ValueProvider 各参数的阐明: provide:注入令牌。通常是 Type 或 InjectionToken 的实例,但也能够是 any 实例。multi:如果为 true,则注入器返回实例数组。这对于容许多个提供者分布在多个文件中以向公共令牌提供配置信息很有用。一个例子: const locale = new InjectionToken<string[]>('locale');const injector = Injector.create({ providers: [ {provide: locale, multi: true, useValue: 'en'}, {provide: locale, multi: true, useValue: 'sk'}, ]});const locales: string[] = injector.get(locale);expect(locales).toEqual(['en', 'sk']);ModuleWithProviders:对 NgModule 及其相干 providers 的包装。 ...

July 10, 2021 · 1 min · jiezi

关于sap:如何构建和部署-SAP-Commerce-Cloud-项目

原文链接 SAP Commerce Cloud 提供了许多自助服务性能来配置、构建和部署商务解决方案。 当您第一次开始应用时,仿佛须要理解很多。在本文中,咱们将带您逐渐理解如何应用自助服务性能来配置您的应用程序,而后是如何构建和 部署到您的开发环境。 依照本文中的步骤操作后,您应该能够轻松增加任何其余自定义并将它们部署到您抉择的环境中。 在浏览本文之前,咱们建议您浏览咱们对于 SAP Commerce Cloud 入门的文章,其中涵盖了咱们将在本文中提及的一些概念/术语。 您可能还心愿查看产品文档的初始设置和店面验证局部,本文将对此进行扩大。 Initial Access to SAP Cloud Portal在思考构建和部署我的项目之前,您应该先花点工夫相熟一下 Cloud Portal,它是用于治理 SAP Commerce Cloud 解决方案的自助服务工具。 要拜访 Cloud Portal,您须要领有 SAP 用户 ID(S 用户)并且已被具备客户系统管理员角色的人员授予拜访权限。 如果您不确定您的超级管理员是谁,您能够导航到 https://launchpad.support.sap...,抉择“重要联系人”,而后寻找具备“超级管理员”身份的人 “ 角色。 而后他们能够授予您拜访权限。 假如您是超级管理员或有人授予您角色,您能够拜访 https://portal.commerce.ondem...。 如果您的明码有问题,请参阅产品文档中的此页面。 确保您还应用受反对的浏览器。 登录后,您应该确保配置了一些环境。 您能够通过单击云门户左上角的“环境”按钮来执行此操作。 您应该至多有 1 个开发、1 个阶段和 1 个生产环境(如果您须要更多环境,能够购买)。 如果您没有看到任何已配置的环境,则须要找到您的超级管理员能力应用 SAP Customer Experience Cockpit 中的自助服务环境配置。 Connect an Empty Git Repository下一步是连贯您将用于保护将在 SAP Commerce Cloud 上构建和部署的代码的空 Git 存储库。 SAP Commerce Cloud 的每个订阅都可能连贯到一个基于 Git 的存储库。 git 存储库须要位于公共可拜访的服务器上(不在公司环境中的防火墙前面)。 能够通过 SSH 和 HTTPS 办法进行拜访。 ...

July 10, 2021 · 2 min · jiezi

关于sap:SAP-Commerce-Cloud-项目-Spartacus-入门

原文地址 What is Spartacus?Spartacus 是一个收费的开源 JavaScript Web 应用程序,它于 2019 年 5 月公布了 1.0 版本,并且每隔几周就会持续公布新的更新。它容许您为 SAP Commerce Cloud 疾速创立本人的基于 JavaScript 的品牌店面。 Spartacus 是应用 Angular 编写的,并作为一组库公布。应用 JavaScript 的举荐办法是构建您本人的 JavaScript Web 应用程序并导入 Spartacus 库。无需批改,店面即可开箱即用,但 Spartacus 的设计可降级、可定制和可扩大,以满足您的所有品牌和性能要求。 Spartacus 是应用 SAP Commerce Cloud 保护可定制店面的战略性办法。它取代了在 SAP Commerce v4.4 中首次引入的加速器模板,以提供现成的入门施行。只管 Accelerator 模板容许合作伙伴通过更改示例店面疾速开发全渠道体验,但模板不易降级,它们基于 JSP,并且店面与 SAP Commerce 外围平台严密耦合。 Spartacus Architecture只管 Spartacus 与 SAP Commerce Cloud 拆散,但它仅实用于 SAP Commerce Cloud 平台。 Spartacus 依附 SAP Commerce Cloud API 和 CMS 内容来运行。它是 100% API 驱动的,旨在以无头形式运行。您能够自在扩大 Spartacus 附带的库以蕴含您本人的自定义。您的 Spartacus 施行也能够通过 SAP 扩大套件进行扩大。因为 Spartacus 与 SAP Commerce Cloud 平台拆散,因而您能够抉择将前端和后端开发离开,甚至可能具备独自的部署/公布周期。您的 Spartacus 店面也能够独立于 SAP Commerce Cloud 平台进行扩大。您可能须要调整版本的惟一工夫是在 SAP Commerce Cloud 中可供 Spartacus 应用的 API 的状况下。例如,Spartacus 2.0 版本有一些性能只能通过利用 SAP Commerce core 2005 中公布的 API 来激活。 ...

July 10, 2021 · 2 min · jiezi

关于sap:SAP-Spartacus-的-CSS-架构

在 Angular 中,组件的 CSS 款式被封装进了本人的视图中,而不会影响到应用程序的其它局部。 通过在组件的元数据上设置视图封装模式,你能够别离管制每个组件的封装模式。 可选的封装模式一共有如下几种: ShadowDom 模式:应用浏览器原生的 Shadow DOM 实现,能够参阅 MDN 上的 Shadow DOM 文档来为组件的宿主元素附加一个 Shadow DOM。组件的视图被附加到这个 Shadow DOM 中,组件的款式也被蕴含在这个 Shadow DOM 中。 记忆形式:不进不出,没有款式能进来,组件款式出不去。) Emulated 模式(默认值)通过预处理(并改名)CSS 代码来模仿 Shadow DOM 的行为,以达到把 CSS 款式局限在组件视图中的目标。只进不出,全局款式能进来,组件款式出不去。 你能够应用同样的形式来操作 Shadow DOM,就和操作惯例 DOM 一样——例如增加子节点、设置属性,以及为节点增加本人的款式(例如通过 element.style 属性),或者为整个 Shadow DOM 增加款式(例如在 style 元素内增加款式)。不同的是,Shadow DOM 外部的元素始终不会影响到它内部的元素(除了 :focus-within),这为封装提供了便当: 留神,不论从哪个方面来看,Shadow DOM 都不是一个新事物——在过来的很长一段时间里,浏览器用它来封装一些元素的内部结构。以一个有着默认播放管制按钮的 <video> 元素为例。你所能看到的只是一个 <video> 标签,实际上,在它的 Shadow DOM 中,蕴含来一系列的按钮和其余控制器。Shadow DOM 规范容许你为你本人的元素(custom element)保护一组 Shadow DOM。 那么,SAP Spartacus 应用了本文目前为止提到的这些 Shadow DOM 机制了吗? ...

July 10, 2021 · 2 min · jiezi

关于sap:如何用-SAP-BTP-平台上的图形建模器创建一个-OData-服务

官网链接 挪动后端工具是一组工具,使开发人员可能对 OData 服务建模并生成 Java EE Web 应用程序以实现 OData 服务,以及在事后存在的数据库模式中主动创立必要的数据库表。 在本教程中,您将应用 SAP Business Application Studio 中的 MBT 图形建模器重建 SAP Gateway Demo 零碎 (ES5) 上公开可用的 GWSAMPLE_BASIC OData 服务的一小部分。 因而,在进一步的教程中,您能够在其上扩大、连贯和构建应用程序。 关上 SAP Business Technology Platform 上的 Business Application Studio,新建一个文件夹: 命令栏里抉择 MBT:New OData CSDL document(metadata) 主动生成一个 metadata.csdl.xml 文件。创立一个新的 Complex types: 依据理论业务须要,创立 Entity type,比方 SalesOrder 和 BusinessPartner: 依据理论须要,在图形建模器里,给 entity type 创立 property: 创立一个从 BusinessPartner 到 SalesOrder 的 Navigation Property,上图 Collection 前的 checkbox 记得勾上: ...

July 5, 2021 · 1 min · jiezi

关于sap:如何在-SAP-BTP-平台上启用-HANA-Cloud-服务

Deploy SAP HANA Cloud TrialSAP HANA Cloud 是一个残缺的数据库和利用程序开发平台。 它让您能够应用高级数据处理性能(文本、空间、预测等)从所有类型的数据中获取洞察力。 通过将内存存储与列式存储相结合,数据操作的执行速度比具备基于磁盘的存储的传统数据库更快。 SAP HANA 也是可转换的,这意味着开发人员能够从雷同的构造实时执行事务性和剖析性操作,而无需创立额定的数据正本,例如物化视图。 登录 SAP BTP trial 账号,进入 CloudFoundry 的 dev space: 默认状况下,SAP HANA Cloud 菜单项里,Create 按钮是灰色的。 提醒音讯:No entitlements have been added yet. Please go to the "Entitlements" page and assign quota to the subaccount in the SAP HANA Cloud section. For details, see Creating SAP HANA Cloud Instances. 然而我返回 Entitlements 设置界面时,才发现 SAP HANA Cloud 目前只反对 Europe(Frankfurt) 和 US East 这两个 region,而我目前所在的 region 是 Singapore: ...

July 5, 2021 · 1 min · jiezi

关于sap:SAP-BTP-上使用-Mobile-BackEnd-ToolsMBT进行全栈开发的方法概述

Understand Full-Stack Development with Mobile Back-End Tools 从实质上讲,MBT 是一组工具,可让您无需编写一行代码即可生成功能齐全的 OData Web 服务。 这些工具旨在通明地将 OData 模型转换为持久性,并提供通明的 OData 性能,包含开箱即用的增量计算。 除了适度简化之外,MBT 作为 SAP 挪动服务的一项性能,是一组工具,旨在解决挪动应用程序同步离线性能时可能呈现的若干挑战。 因而,它们提供(可选)性能,例如指标集成(作为缓存)、下载跟踪、客户端过滤器和进一步的自定义。 MBT 可作为 Visual Studio Code 的市场扩大或作为 SAP Business Application Studio 的一部分在“SAP 挪动应用程序”的预设中应用。 本教程及其工作将向您介绍挪动后端工具缓存数据库的可能用法。 它旨在通过技术引入技术提供简化计划,同时放弃对试用用户的要求。 您能够在 SAP 业务技术平台 (BTP) 或本地(在 Apache Tomcat、TomEE 或 Eclipse Virgo 上)运行如此生成的 OData 服务。 如果您打算在 SAP BTP 中运行生成的服务: SAP Business Application Studio 将是大多数开发人员的更好抉择,因为它容许您在设计时和运行时利用雷同的环境。CSDL 图形建模器仅在 SAP Business Application Studio 中可用。作为云解决方案的 SAP Business Application Studio 将应用 SAP Mobile Services 的预设开箱即用,并且不须要手动设置开发环境以及与操作系统无关。如果您打算在本地架构中运行生成的服务: ...

July 5, 2021 · 1 min · jiezi

关于sap:如何在-SAP-BTP-上使用-Integration-Suite-消费-S4HANA-Cloud-API

登录 SAP Business Technology Platform Cockpit,进入 integration suite: 再点击 API management 进入 API Portal: 或者间接从收藏夹里关上链接: https://304a49cetrial.integrationsuitetrial-apiportal.cfapps.ap21.hana.ondemand.com/shell/discover 在 discover 菜单里,抉择 S/4HANA Cloud: 点击 artifacts 查看所有可用 API: 找到这个对 sales order 进行增删改查的 OData API: 在 copy 向导里,抉择 sandbox 对应的 url: 抉择 deploy: deployed 之后,看到胜利生成的 proxy: 在 Resources 标签页里咱们就能试着调用这些 API 了: 间接点击 execute 肯定会失败,会遇到谬误音讯: Failed to resolve API Key variable request.header.apikey验证 API 密钥策略容许您在运行时强制验证 API 密钥,只容许具备批准的 API 密钥的应用程序拜访您的 API。 此策略可确保 API 密钥无效、未被撤销并被批准应用与您的 API 产品关联的特定资源。 ...

June 29, 2021 · 1 min · jiezi

关于sap:使用-SAP-Business-Application-Studio-搭建-CAP-Java-开发环境

官网教程 为了确保所有设置正确,本教程还包含如何构建和运行一个简略的 Hello World 应用程序。 SAP Cloud 应用程序编程模型 (CAP) 反对 Java 和 Node.js 开发。 然而对于本教程,咱们应用的是 Java。 CAP Java SDK 可能与 Spring Boot 严密集成,Spring Boot 提供了许多开箱即用的性能。 这意味着,Spring Boot 将成为您的运行时容器。 关上 SAP Business Technology Platform Trial 账号,进入 Business Application Studio: 关上之前创立好的 dev space,如果没有,新创建一个。 类型要抉择成 Full Stack Cloud Application: 进入 space 之后,咱们在浏览器里看到了一个相似 Visual Studio Code 的在线编辑器,关上一个新的命令行窗口: 咱们以后的工作目录为:/home/user/projects: 运行如下命令行: mvn -B archetype:generate -DarchetypeArtifactId=cds-services-archetype -DarchetypeGroupId=com.sap.cds \-DarchetypeVersion=RELEASE \-DgroupId=com.sap.cap -DartifactId=products-service -Dpackage=com.sap.cap.productsservice如果遇到这个谬误:mvn: command not found,阐明之前创立的 space 类型不正确,应该抉择 fullstack Cloud Application: ...

June 29, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-Definition-of-Done

SAP Spartacus Definition of Done) Coding guidelinesSpartacus 团队采纳了以下一组规定来放弃 Spartacus 代码的可读性和可维护性。 作为贡献者,咱们要求您恪守这些规定(即便您发现它们在某处被违反)。 当文件始终不遵循这些规定,并且恪守这些规定会使代码变得更糟时,请遵循本地格调。 TL;DR您能够运行位于我的项目根目录的 build.sh 脚本。 它将运行上面提到的大部分查看或规定,例如 linting 和 prettier 查看、运行单元测试和端到端测试等。 LintingLinting We use TSLint to analyze and improve our typescript code. You can run the following command to lint your code: yarn lintWe also encourage you to use the TSLint plugin in VS Code. Coding Format咱们应用 Prettier 来格式化咱们的代码(并使其更丑陋)。 要查看是否所有文件都通过丑化,请运行以下命令: yarn prettier要格式化和丑化您的代码库,请运行以下命令: yarn prettier:fix咱们还激励应用 Prettier VS Code 插件。 无关更多信息,请参阅 Spartacus 的开发工具。 ...

June 29, 2021 · 2 min · jiezi

关于sap:SAP-Commerce-Cloud-新一代-UI-Spartacus-和-Customer-Data-cloud-的集成

SAP Customer Data Cloud Integration) Spartacus 3.2 版可用。 SAP Customer Data Cloud 容许您启用自定义注册和登录,还能够治理用户配置文件和批准。 须要的系统配置: SAP Commerce Cloud 2011 以及 SAP Commerce Cloud 集成扩大包 2108SAP Commerce Cloud 2005 以及 SAP Commerce Cloud 集成扩大包SAP Commerce Cloud 1905,以及最新版本的 Commerce Cloud 扩大包要在 Spartacus 中启用 SAP Customer Data Cloud Integration,您须要配置 Commerce Cloud 后端和 Spartacus 前端。 在 Commerce Cloud 后盾所需的配置为 B2C 启用 SAP Customer Data Cloud 扩大。构建和更新零碎,以便 SAP Customer Data Cloud 集成扩大提供的新性能可用。此步骤还为 electronics-spaContentCatalog 内容目录创立示例CMS 数据。 ...

June 29, 2021 · 2 min · jiezi

关于sap:关于-SAP-Spartacus-和-SmartEdit-集成的问题

Spartacus 里打不开 smartEdit: We have added context path in manifest.xml for Smartedit, however we cannot open smartedit with any of the url for Spartacus: https://jsapps.xxx-comercial1-d1-public.model-t.cc.commerce.ondemand.com/smartedithttps://smartedit.xxx-comercial1-d1-public.model-t.cc.commerce.ondemand.com/Is there any specific configuration we need to do in CCV2 or elsewhere? I would like to inform that after checking provided manifest file, I can see that you have deployed your Smartedit under accstorefront aspect so Smartedit should be accessed under https://accstorefront.xxx-comercial1-d1-public.model-t.cc.commerce.ondemand.com Regarding putting only Smartedit webapp under backoffice aspect, this is incorrect approach as you should put all Smartedit under aspect to make it work. ...

June 29, 2021 · 4 min · jiezi

关于sap:SAP-Fiori-Elements-公开课第三单元学习笔记-OData-和注解深入讲解

课程地址 很多 SAP 从业者反映,open SAP 上的视频,因为网络起因无法访问,所以我会陆续在我的集体微 信 号“汪子熙”下面,把这些视频配上中文字幕并公布进去,敬请关注。 本单元的话题是 SAP OData 和注解的深刻解说。 上面是本单元视频解说的中文字幕,均由 Jerry 人工翻译而成。 ==== 欢送大家来到 Open SAP Fiori Elements 公开课第三单元。本单元介绍 OData 和注解 我是 Stefan Engelhardt, 是 SAP Fiori Elements 的开发架构师 在第二单元,Marcel 曾经简略介绍了 OData. 每个 Fiori Elements 利用都须要一个 OData 服务 Fiori Elements 对 OData 服务的后盾技术栈没有特殊要求,因为 OData 协定自身就是对后盾实现细节的形象 当初咱们将深刻介绍 OData 服务的外围概念。从数据模型的元形容开始 每个 OData 服务都有其数据模型的元形容信息。屏幕左边是一个例子 咱们通常简称为 OData 元数据。在 OData url 前面加上 $metadata 即可查看其元数据 屏幕右边底部的超链接是 该 OData 元数据的残缺 url ...

June 29, 2021 · 2 min · jiezi

关于sap:SAP-Fiori-Elements-公开课第二单元学习笔记Fiori-Elements-架构

课程地址 第二单元内容:解说 Fiori Elements Architecture 应用 SAP Fiori Elements,SAP 负责提供利用 floorplans,而利用开发人员只负责专一于提供 OData 服务以及服务上施加的注解。 SAP Fiori Elements elements floorplans 是基于 XML 的模板,体现了 SAP Fiori 用户交互式体验。Fiori Elements 利用控制器,也由 Fiori Elements 框架提供。 OData 服务将您的 Fiori Elements 利用 UI 同后盾数据源连接起来,OData 服务提供商包含 SAP S/4HANA,SAP Business Warehouse,SAP Business Technology Platform 和其余内部 OData 服务提供商。 OData 注解,决定了您的 Fiori Elements 的外观以及行为。比方管制哪个字段能够点击,哪个字段能够编辑。同时,OData annotation 可能为 OData 元数据提供更多的语义化信息 - semantic information,比方: 哪个字段容许用户惟一标识一个业务实体定义字段 A 是字段 B 的货币单位若干字段应该组合起来,独特显示在一个 form 里 ...

June 29, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-事件服务-Event-Service-使用介绍

官网链接:https://sap.github.io/spartac... The Spartacus event service provides a stream of events that you can consume without a tight integration to specific components or modules. The event system is used in Spartacus to build integrations to third party systems, such as tag managers and web trackers.Spartacus 事件服务提供了一个事件流,您能够应用这些事件流,而无需与特定组件或模块严密集成。 Spartacus 中应用事件零碎来构建与第三方零碎的集成,例如标签管理器和网络跟踪器。 The event service also allows you to decouple certain components. For example, you might have a component that dispatches an event, and another component that reacts to this event, without requiring any hard dependency between the components.事件服务还容许您解耦某些组件。 例如,您可能有一个分派事件的组件和另一个对该事件做出反馈的组件,而无需组件之间的任何硬依赖。 ...

June 22, 2021 · 1 min · jiezi

关于sap:如何在-SAP-BTP-上-手动执行-workflow

官网地址: https://developers.sap.com/tu... 拜访 SAP Business Technology Platform Workflow management Fiori Launchpad 的 Event Acquisition tile: 点击 import 按钮: 下载这个 json 文件到本地: https://github.com/SAP-sample... 将该 json 文件导入到 SAP Business Technology Platform 中: 导入胜利: 点击 Monitor Visibility Scenarios: 因为 SAP Business Technology Platform Workflow engine 对这些事件的解决采取的异步机制,每隔 5 分钟解决一次。所以咱们导入事件后,如果想立刻看到成果,须要点击 Process Data,手动触发事件处理逻辑: 724 个事件全副处理完毕: 点击 process workspace: 能看到这些 event 解决的后果: 点击 Monitor Workflows: ...

June 22, 2021 · 1 min · jiezi

关于sap:SAP-BTP-上-workflow-和-Business-Service-的-project-管理

官网地址:https://developers.sap.com/tu... A project is used to configure and manage the entities of business rules. Entities of business rules include data objects, rules, rule sets, and rule services. You can create projects in the Manage Rule Projects application, which can be accessed from the Workflow Management home screen.咱们通过 project 来配置和治理 business rule 的实体,这些实体包含: 数据对象 data objects规定 rules,规定汇合 rule sets规定服务 rule service 新建一个 project,而后为其调配 Data object,Rule services,Ruleset 和具体的 rules: Data objects are the building blocks of a project. It can hold the input as well as output information of a business rule.数据对象是我的项目的构建组成部分。 它能够保留业务规定的输出和输入信息。 ...

June 22, 2021 · 2 min · jiezi

关于sap:如何将SAP-API-Hub-上提供的工作流导入到-SAP-BTP-上

官网链接:https://developers.sap.com/tu... SAP Workflow service: helps to digitalize workflows and quickly orchestrate tasks that span people, applications, and organizations.SAP 工作流服务能够使企业运行流程实现数字化,让横跨企业组织架构,利用和员工的工作可能协同工作。 通过这些工作(比方审批,订单履行,以及对工夫敏感的合作伙伴合作)的自动化和无缝跟踪与协调,企业生产力得以晋升。 You can enhance productivity by automating and tracking coordinated, account-able tasks – including approvals, order fulfillment, or time-sensitive partner collaboration. The sample business rule used in this scenario is published in API Business Hub. 链接地址:https://api.sap.com/package/E... SAP Business Rules service is part of SAP Workflow Management which enable business users & application developers to automate their decisions and enhance their decision-making experience. It offers simplified Fiori-based rule authoring tool & a central rule repository with various deployment options to different runtimes.SAP Business Rules Service 是 SAP workflow management 的一部分,使业务用户和利用开发人员可能自动化其决策制定,以及加强决策制定的体验。 ...

June 22, 2021 · 3 min · jiezi

关于sap:SAP-UI5-如何通过-manifestjson-文件定义第三方库依赖关系

Jerry 之前的文章 如何在 SAP UI5 利用中集成第三方库 :一个在挪动设施上查看 Web 利用打印调试信息的小技巧 介绍了一种 SAP UI5 定义并应用第三方库的技巧。 之后,我的技术交换群里,SAP 专家郭爷反馈说,还有另一种在 SAP UI5 manifest.json 文件里定义依赖的方法。 本文即介绍第二种方法。在 SAP UI5 工程里,新建一个 lib 文件夹,把第三方库文件放进去,而后在 manifest.json 文件的 sap.ui5 区域里,定义这个第三方库文件的援用。 源代码: "resources":{ "js": [ { "uri": "lib/vconsole-min.js", "name": "vconsole-min.js", "version": "3.7.0" }] }运行时,vConsole 库被胜利加载。 当然,在 SAP UI5 控制器里手动采纳下列语句加载第三方库,也能工作: jQuery.sap.require("SAPUI5ExternalLibs/libs/moment");本文这种形式加载的第三方库,是采取的贪心加载形式,即 SAP UI5 利用初始化的时候,就会加载第三方库。而 Jerry 之前的文章 如何在 SAP UI5 利用中集成第三方库 :一个在挪动设施上查看 Web 利用打印调试信息的小技巧 介绍的加载形式是懒加载形式,即只有真正应用到第三方库性能的控制器和控制器对应的视图被用户应用到时,才真正触发第三方库的加载。 更多Jerry的原创文章,尽在:"汪子熙":

June 22, 2021 · 1 min · jiezi

关于sap:SAP-业务技术平台BTP-Workflow工作流功能介绍

这是 Jerry 2021 年的第 45 篇文章,也是汪子熙公众号总共第 322 篇原创文章。 所谓工作流,是一种用于业务流程自动化的工具,由一系列步骤、工作或事件组成。 作为世界企业治理软件巨头,SAP 天然也有本人的工作流解决方案。历史最悠久最经典的,当然就是 SAP ABAP Workflow. SAP CRM 一个经典的工作流用例,就是客户给某呼叫核心对应的邮箱地址发送一封邮件: 通过 SAP CRM 后盾创立的工作流,该邮件的发送,会触发呼叫核心主动创立一条对应的条目,供座席解决: 以及 SAP Cloud for Customer 里的工作流: 前一篇文章 SAP 业务技术平台(BTP)上的 Business Rules Service 应用介绍,咱们曾经应用了 SAP BTP Cockpit Boosters 中的 Set up account for Workflow Management, 疾速实现了在 SAP Business Technology Platform(下文简称 SAP BTP)上应用 Workflow 性能所需的配置。 该文章还介绍了如何一步步创立 SAP Business Rules 以及如何应用 HTTP POST 的形式,去调用该 Rule Service. ...

June 22, 2021 · 2 min · jiezi

关于sap:如何自动完成登录-SAP-BTP-workflow工作流-管理应用-Launchpad-所需的设置

https://developers.sap.com/tu... You will use the Boosters to automatically set up the workflow, business rules, process visibility and process flexibility capabilities in your account. 应用 SAP BTP 提供的 Boosters,来主动实现账户工作流,业务规定,process visibility 和 process flexibility capabilities 等相干性能的设置。 登录 SAP BTP Cockpit,抉择 Boosters: 搜寻 Workflow 关键字: 点击 Start 超链接: 须要破费 4~5分钟实现 Provisioning: 实现之后,提醒我的 subaccount,曾经能够开始 workflow 相干的开发工作了: 这个 Boosters 主动实现了下列步骤: Add Business Rules, Workflow, Process Visibility and Workflow Management entitlements in your account.给 subaccount 增加了 Business Rule, workflow 等受权。 ...

June 21, 2021 · 1 min · jiezi

关于sap:如何使用-SAP-Kyma-控制台手动发送-SAP-Commerce-Cloud-Mock-应用暴露的事件

网址:https://developers.sap.com/tu... 本地门路:C:\Code\referenceCode\SAP Kyma教程例子\api-mssql-go (1) This tutorial relies on the Commerce mock application to publish events into the Kyma runtime. (2) bind the Commerce mock application to the dev Namespace (3) we will create a service instance of the SAP Commerce Cloud - Events. (4) The service instance will allow for any microservice or lambda function within the dev Namespace to subscribe to these events by defining an event subscription. ...

June 16, 2021 · 2 min · jiezi

关于sap:一步步把-SAP-UI5-应用部署到-SAP-BTP-Kyma-运行环境中去

这是 Jerry 2021 年的第 40 篇文章,也是汪子熙公众号总共第 317 篇原创文章。 Jerry 2018年已经写过两篇文章,介绍了如何在 Kubernetes 这个容器编排平台上运行一个蕴含 SAP UI5 利用的 Docker 镜像。 在 Kubernetes 上运行 SAP UI5 利用(上)在 Kubernetes 上运行 SAP UI5 利用(下)SAP Kyma,是一个由 SAP 推动的开源的企业软件扩大平台,底层基于 Kubernetes,能以Serverless/微服务架构的形式,对 On-premise 和云利用进行扩大。 SAP Business Technology Platform (下文简称 BTP) 于 2020年开始反对 Kyma 运行环境。本文介绍如何把本地开发的 SAP UI5 利用,打包成 Docker 镜像文件,而后部署并运行在 SAP BTP Kyma 运行环境里。 首先咱们在本地开发一个 SAP UI5 利用。这个利用的源代码,大家能够在 Github 下载。 这个 SAP UI5 利用的构建,采取 SAP UI5 Tool 提供的 Command Line Interface,即 @ui5/cli 实现。 ...

June 16, 2021 · 3 min · jiezi

关于sap:如何创建最简单的-SAP-Kyma-Function

登录 SAP Kyma 控制台,创立一个新的 function: 实现形式抉择 nodejs: 主动生成一个同名的 service. 点击 service 面板右下角的 Expose service 按钮,创立一个新的 API rule,将 function 裸露给 internet: 选中 function,点击 expose function,创立 API rules: 保护 api rule 的 name 和 hostname 字段: function 实现体里就一行语句:返回 Hello World 点击 API rule,就能拜访该 function 了: 更多Jerry的原创文章,尽在:"汪子熙":

June 16, 2021 · 1 min · jiezi

关于sap:把-SAP-UI5-应用部署到-SAP-Kyma

链接:https://developers.sap.com/tu... 本地文件:C:\Code\referenceCode\SAP Kyma教程例子\frontend-ui5-mssql dockerfile 的内容: # build environmentFROM node:current-slim as buildWORKDIR /appCOPY package.json ./RUN npm installCOPY . .RUN npm run-script build# production environmentFROM nginx:alpineCOPY --from=build /app/dist /usr/share/nginx/htmlWORKDIR /app The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile. If the WORKDIR doesn’t exist, it will be created even if it’s not used in any subsequent Dockerfile instruction.将接下来的 RUN, CMD, ENTRYPOINT, COPY 和 ADD 指令设置工作目录。 ...

June 16, 2021 · 2 min · jiezi

关于sap:在-SAP-Kyma-上部署一个-Go-MSSQL-API-Endpoint

链接:https://developers.sap.com/tu... 本地文件:C:\Code\referenceCode\SAP Kyma教程例子\api-mssql-go main.gogo 利用的入口: dockerfile 该 dockerfile 定义了两个阶段来结构 docker 镜像文件。 (1)In the first stage, a Go image is used. It copies the related content of the project into the image and builds the application. (2)The built application is then copied into the Docker scratch image and exposed on port 8000. The scratch image is an empty image containing no other tools within it so obtaining a shell/bash session is not possible. ...

June 16, 2021 · 1 min · jiezi

关于sap:关于-SAP-Fiori-Elements-应用标题属性title-的复制逻辑单步调试

为反对国际化(internationalization),title 属性的值没有硬编码,而是保护在 i18n_<language_code>.properties 里: https://ldai7er9.wdf.sap.corp... https://ldcigm4.wdf.sap.corp:...'FA163EE5-6C3A-1ED7-B883-0ED9A99A201F') 想要以中文环境加载 SAP UI5 利用,在 url 前面加上参数即可: sap-ui-language=ZH 保护在 i18n_<language_code>.properties 里的题目内容,为汉字的 unicode: HTML header 对应的设置:meta content="text/html;charset=UTF-8": SAP Fiori Elements 利用 index.html 里 title 属性的值: <title>{{appTitle}}</title> 应用下列这行 JavaScript 代码,能够在 window.document title 属性被批改时,让断点主动触发: Object.defineProperty(window.document, "title", { set: function(){ debugger;}}); 从下图可见,Fiori Elements 利用的 title 属性,其值来自于 oMetadata.title: 再钻研 metadata 是从哪里解析的: AppConfiguration.js: 答案是来自 manifest.json: 更多Jerry的原创文章,尽在:"汪子熙":

June 16, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-checkout-流程使用-url-粘贴直接跳转到-delivery-mode不能打开页面的原因

http://localhost:4200/electronics-spa/en/USD/checkout/delivery-mode 没有任何谬误音讯,白屏: 能看到向 checkoutDeliveryMode step 发动跳转的事件: Delivery Mode 实现的 CMS Component id:CheckoutDeliveryMode CheckoutDeliveryMode 目前只激活了两个 Component guard: https://github.com/SAP/sparta... checkout/payment-details: payment details 实现的 CMS Component ID:CheckoutPaymentDetails CheckoutAuthGuardCartNotEmptyGuard间接拜访 checkout,isStable 返回 false,所以无奈持续上面的操作。 判断 cart 是否 stable: 如果一个 cart 曾经加载结束,且没有其余额定施加在其上的 operation,则咱们说该 cart 曾经 stable 了: 此时 state 里是空的: 这个原理很容易了解,间接在浏览器里粘贴 url,此时取 cart 明细的 API 都还没收回去,所以从 ngrx store 里基本取不到和 cart 相干的信息,所以 isStable 导致返回 false. 第26行代码:如果 predicate 返回 false,那么在第32行的IF 分支查看无奈通过,不会持续接下来的 next 操作: ...

June 16, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-RouterModuleforRoot-called-twice-的错误消息

重现形式: npm install and then yarn dev:ssr谬误音讯: Compiled successfully. Anqular Universal Live Development Server is Listening on http://localhost:4201 ERROR Error: Uncaught (in promise): Error: RouterModule.forRoot() called twice. Lazy Loaded modules should use RouterModule.forChild() instead.Error: RouterModule.forRoot() called twice. Lazy Loaded modules should use RouterModule.forChild() instead at Object.provideForRootGuard [as useFactory] (C:\Code\sony20210526\dist\spartcusstore-server\main. js:115752:15)at Object. factory (C:\Code\sony20210526\dist\spartacusstore-server\main.js:64140:28)at R3Injector.hydrate (C:\Code\sony20210526\dist\spartacusstore-server\main.js:64007:63)at R3Injector.get (C:\Code\sony20210526\dist\spartacusstore-server\main.js:63757:33)at injectInjectorOnly (C:\Code\sony20210526\dist\spartacusstore-server\main.js:49630:33)at Module. Dinject (C:\Code\sony20210526\dist\spartacusstore-server\main.js:49640:57) SAP Spartacus 版本号: 2.1.7 剖析出问题的 homeModule: HomeModule is importing B2cStorefrontModule, which shouldn't be imported twice in any scenario, especially shouldn't be lazy-loaded.B2bStorefrontModule 不应该被加载两次,也不应该以懒加载的形式被加载。 ...

June 5, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-页面的周期性动态刷新功能的实现步骤

一个敌人向我征询,对于 SAP Fiori 页面主动刷新的实现办法。 如果是 Jerry 之前视频 一步步创立 SAP Fiori Elements 利用 介绍的 SAP Fiori Elements Overview 利用,要实现页面主动刷新比拟容易,间接在 manifest.json 里应用属性 refreshIntervalInMinutes 定义刷新工夫距离即可。 但这位敌人征询的 SAP Fiori 页面,显然是指采取 SAP UI5 Freestyle 形式开发的页面。所谓 Freestyle 开发方式,是指不借助 SAP Fiori Elements 框架,而是应用 SAP UI5 SDK,由利用开发人员自行编写利用的视图和控制器逻辑。 要实现页面刷新,一种容易想到的思路就是,让 SAP UI5 利用的 Controller 层,周期性地向后盾发动数据申请。一旦最新的数据响应从后盾返回到浏览器,依据 SAP UI5 MVC 设计,模型数据 (Model) 的更新则会导致视图 (View) 的自动更新。 本文采取上述思路实现 SAP Fiori 页面主动刷新性能。当然如果大家有更好的实现形式,欢送留言指教。 本文介绍的例子利用的所有代码,在我的 Github 上可能找到。 将 Jerry 上述代码仓库的利用克隆到本地。该利用里我应用的 OData 服务为驰名的用于教学的 Northwind 服务,其 url 为: ...

June 5, 2021 · 2 min · jiezi

关于sap:如何找出-SAP电商云产品明细页面读取后台数据的代码具体位置

以如下这个产品明细页面为例: http://localhost:4200/electro... 察看浏览器 url 的格局:/product/553637/nv10 在 default-routing-config.ts 里,得悉 product/ 后的 553637 代表 productCode,而 nv10 则是 product name. 因为我应用的是默认的 CSR 即客户端渲染模式,所以首先看到一个只蕴含 loading 的 HTML 页面。 而后看到第一个和该产品信息相干的 HTTP 申请:/occ/v2/electronics-spa/orgProducts/553637?fields=name,categories,purchasable,baseOptions(DEFAULT),baseProduct,variantOptions(DEFAULT),variantType&lang=en&curr=USD 返回的申请响应,从中能够看到,PDP - Product Detail Page 内的很多数据,都不蕴含在这个响应里。 接下来这个申请才是咱们要查找的 PDP 明细数据申请: { "availableForPickup" : true, "averageRating" : 4.541666666666667, "categories" : [ { "code" : "576", "name" : "Digital Compacts", "url" : "/Open-Catalogue/Cameras/Digital-Cameras/Digital-Compacts/c/576" }, { "code" : "brand_26", "name" : "Samsung", "url" : "/Brands/Samsung/c/brand_26" } ], "code" : "553637", "configurable" : false, "description" : "<b>10.1 mega-pixel 1/1.8\"\"CCD high resolution</b><br/>The NV10 comes in an 18.5mm thin black aluminium body with Samsung's unique blue ring on its expendable lens barrel, and a pop-up flash. A 10.1 mega pixels, 1/1.8\"\" CCD, not normally used in slim cameras, is used to give better detail.<br/><br/><b>Smart Touch + Large 2.5\"\" LCD</b><br/>The new Smart Touch user interface makes it possible to quickly navigate and set menu items or view pictures. The unique makeup of the Smart Touch buttons with large 2.5 inch LCD on the back of the camera is expected to be great fun for users, giving them an experience unlike anything they have tried before.<br/><br/><b>The superior Schneider-KREUZNACH lens</b><br/>The superior Schneider-KREUZNACH lens produces crystal clear images. <br/>Bright lens that start at f2.8 delivers even resolution from the centre to the edges. For more natural-looking pictures, each lens surface is multi-coated to minimize the \"\"ghost\"\" or \"\"flare\"\" phenomenon.<br/><br/><b>Pop-Up Flash</b><br/>The most distinctive feature of the new NV Series is the built-in pop-up flash. The use of a pop-up mechanism made the overall design simple yet luxurious, and its location, right above the lens, hugely improved light diffusion angles and transmission rates. The lens location is also ideal for delivering the flashlight as intended, since it prevents accidental blocking of the flash by a hand.<br/><br/><b>Advanced Shake Reduction</b><br/>The ASR technology prevents the degradation of image clarity and colour common to flash photography. With ASR the effects of camera shake are reduced in lower light conditions. You can even take well exposed, sharper pictures in low light without using a flash at all. It guarantees brighter and more natural pictures.<br/><br/><b>ISO1000 Standards in Action</b><br/>NV series has an auto sensitivity feature that automatically adjusts sensitivity according to the ambient exposure conditions up to ISO 1000. The high sensitivity setting of ISO 1000 enables you to take clear indoor pictures in the dark without camera shake and the resulting image blurring.<br/><br/><b>Photo Gallery function</b><br/>This is an upgraded version of the photo album, which used to let you access the Menu only from Play Back. Now, this new UI lets you go directly to the album. Pictures are grouped and stored by date for easier access.<br/><br/><b>Multiple ways to Recharge</b><br/>Recharging can be done using a cradle or a 24 pin USB cable, as well as by using a detachable cable. Connect the camera to a PC using a 24 pin USB cable, use the adaptor cable to plug it into a power supply, or use any other convenient method to recharge your camera. <br/><br/><b>Advanced Movie Function</b><br/>The NV series supports MPEG-4 VGA (640x480, 30fps) and TVD (720x480, 20fps - NV3) size for an enhanced video shooting experience. You can even edit your movies on the camera itself, making these clever models brilliantly portable but powerful movie-makers.<br/><br/><b>Scene Mode</b><br/>11 Scene Modes and Text Recognition capability NV series have various scene modes to obtain the best picture result in a variety of settings.<br/>The scene modes provided are Night Scene, Portrait, Children, Landscape, Text Recognition, Sunset, Dawn, Backlight, Fireworks, Beach and Snow.", "images" : [ { "altText" : "NV10", "format" : "zoom", "imageType" : "PRIMARY", "url" : "/medias/?context=bWFzdGVyfGltYWdlc3wyNjQ0MHxpbWFnZS9qcGVnfGg4OC9oNzQvODc5NzQzMTY5MzM0Mnw2ZTBiODI5M2Q0MmVkNDA3NzU2MGRiMmFkNmVjYzA3ZjQzYmUzYWU4YTM5ZGFlMWU0NTRjYjY0ZTg1OTE5NTBj" }, { "altText" : "NV10", "format" : "product", "imageType" : "PRIMARY", "url" : "/medias/?context=bWFzdGVyfGltYWdlc3wxMjA0MHxpbWFnZS9qcGVnfGg5Yy9oNTMvODc5NzQ1Nzg3NDk3NHxjNTc2ZmRjYzJkODZjNGRmZjM1NTM5Zjc5OGE1NWE2MWYyZThiMjg0NmQ1OGI5ZDg0ZTY0M2YxM2Q5YWYxY2Vh" }, { "altText" : "NV10", "format" : "thumbnail", "imageType" : "PRIMARY", "url" : "/medias/?context=bWFzdGVyfGltYWdlc3wyNjEzfGltYWdlL2pwZWd8aGU3L2hjOS84Nzk3NDg0Mjg1OTgyfDQxODAyMWNjMWYwOGQwYWM2NzU0ZGNjZjkxNDhlNmQ2MTk2NTlmNWU2ZTZlOTcxYTlmZWQ5ODUwZWQ1ZDNkMTU" }, { "altText" : "NV10", "format" : "cartIcon", "imageType" : "PRIMARY", "url" : "/medias/?context=bWFzdGVyfGltYWdlc3wxNjk2fGltYWdlL2pwZWd8aDViL2hhYS84Nzk3NTEwNjY0MjIyfGZiNzIxZDAzMzcwYWE5MzJlYzZhYWMwZGY3NWI0MDFjNzg1YTEyODk1ZmQwZjQ5MGNmNzAyMmMzOTVlNWZhY2M" }, { "altText" : "NV10", "format" : "zoom", "galleryIndex" : 0, "imageType" : "GALLERY", "url" : "/medias/?context=bWFzdGVyfGltYWdlc3wyNjQ0MHxpbWFnZS9qcGVnfGg4OC9oNzQvODc5NzQzMTY5MzM0Mnw2ZTBiODI5M2Q0MmVkNDA3NzU2MGRiMmFkNmVjYzA3ZjQzYmUzYWU4YTM5ZGFlMWU0NTRjYjY0ZTg1OTE5NTBj" }, { "altText" : "NV10", "format" : "product", "galleryIndex" : 0, "imageType" : "GALLERY", "url" : "/medias/?context=bWFzdGVyfGltYWdlc3wxMjA0MHxpbWFnZS9qcGVnfGg5Yy9oNTMvODc5NzQ1Nzg3NDk3NHxjNTc2ZmRjYzJkODZjNGRmZjM1NTM5Zjc5OGE1NWE2MWYyZThiMjg0NmQ1OGI5ZDg0ZTY0M2YxM2Q5YWYxY2Vh" }, { "altText" : "NV10", "format" : "thumbnail", "galleryIndex" : 0, "imageType" : "GALLERY", "url" : "/medias/?context=bWFzdGVyfGltYWdlc3wyNjEzfGltYWdlL2pwZWd8aGU3L2hjOS84Nzk3NDg0Mjg1OTgyfDQxODAyMWNjMWYwOGQwYWM2NzU0ZGNjZjkxNDhlNmQ2MTk2NTlmNWU2ZTZlOTcxYTlmZWQ5ODUwZWQ1ZDNkMTU" } ], "manufacturer" : "Samsung", "name" : "NV10", "numberOfReviews" : 24, "price" : { "currencyIso" : "USD", "formattedValue" : "$264.69", "priceType" : "BUY", "value" : 264.69 }, "priceRange" : { }, "stock" : { "isValueRounded" : false, "stockLevel" : 240, "stockLevelStatus" : "inStock" }, "summary" : "The NV10 comes in an 18.5mm thin black aluminium body with Samsung's unique blue ring on its extendable lens barrel, and a pop-up flash.", "url" : "/electronics-spa/products/553637"}url: /occ/v2/electronics-spa/products/553637?fields=code,configurable,configuratorType,name,summary,price(formattedValue,DEFAULT),images(galleryIndex,FULL),baseProduct,averageRating,stock(DEFAULT),description,availableForPickup,url,numberOfReviews,manufacturer,categories(FULL),priceRange,multidimensional,tags&lang=en&curr=USD ...

June 4, 2021 · 4 min · jiezi

关于sap:手动为-SAP-Spartacus-添加-SSR-即服务器端渲染的步骤

ng add @spartacus/schematics --ssr 在用 SAP Spartacus 开发的 store 里,能看到 devDependencies 里具备 @spartacus/schematics 的依赖: 这是 SAP Spartacus Schematics 的一部分:https://sap.github.io/spartac... Spartacus schematics allow you to install Spartacus libraries in your project.Spartacus Schematics 容许咱们在本人的我的项目里装置 Spartacus 库。SAP Spartacus Schematics 自身的帮忙文档:https://github.com/SAP/sparta... 命令:ng add @spartacus/schematics@latest 反对的一些重要 option: featureLevel sets the application feature level. The default value is the same as the version of the Spartacus packages you are working with. For example, the featureLevel for @spartacus/schematics@3.2.0 is 3.2.featureLevel:设置利用的 feature level,默认值和 Spartacus package level 统一。 ...

June 4, 2021 · 2 min · jiezi

关于sap:在-SAP-BTP-Kyma-Runtime-上使用-Redis-读取和存储数据

https://developers.sap.com/tu... This sample provides a Redis deployment and two serverless functions that interact with it.这个例子提供了一个 Redis 利用部署和两个应用 Redis 的 serverless 函数。 The function cache-order will be set to subscribe to an order.created event provided by the Commerce mock application.Commerce Mock 利用有一个 order.created 事件,cache-order 函数订阅这个事件。 Once triggered, the function will perform an API call to the Commerce mock to obtain additional details regarding the order and then cache the information into Redis.一旦 order.created 事件触发,cache-order 函数响应该事件,调用一个 Commerce Mock API,读取创立订单的更多明细,而后将数据存储到 Redis 里。 ...

June 4, 2021 · 3 min · jiezi

关于sap:如何查看-SAP-Spartacus-PageLayoutComponent-里的-template-的值

SAP Spartacus PageLayoutService.ts 里的 templateName$ get 操作:返回一个 Observable 对象,包裹的类型为 string. pipe 的第一个操作 filter,目标是确保 page 对象的 template 属性肯定存在,防止接下来第二个 map 操作呈现返回被 Observable 包裹的 undefined 值的状况。 而在 PageLayoutComponent 实现里,有一个同名属性。 从 layoutName$ 返回的逻辑看,优先从 section$ 里取数。如果 section$ 里有值,返回 section 的值,否则间接返回 PageLayoutService 的 templateName$. 能够查看到这个 project 的具体实现地位: 从 page 构造里拿到 template 属性:值为 ProductDetailsPageTemplate 具体原理,是从 ngrx central store 里,拿到 product 明细页面相干数据: 拿到 result 后,调用 next,告诉对应的 subscriber: 更多Jerry的原创文章,尽在:"汪子熙":

June 4, 2021 · 1 min · jiezi

关于sap:如何使用-controllerExtensions-给-SAP-Fiori-Elements-表格注册事件响应函数

步骤1:在 manifest.json 的 extends 区域里,注册 controllerExtensions: 源代码: "extends": { "extensions": { "sap.ui.controllerExtensions": { "sap.suite.ui.generic.template.ListReport.view.ListReport": { "controllerName": "com.sap.jerry.jerryfioriapp.ext.controller.ListReportExtension", "sap.ui.generic.app": { "SEPMRA_C_PD_Product": { "EntitySet": "SEPMRA_C_PD_Product", "Actions": { "ActionName1": { "id" : "ActionName1", "text" : "Jerry的按钮", "press" : "onCustomAction1", "global": true } } } } } } } },步骤2: 实现 controller extension: sap.ui.define("com.sap.jerry.jerryfioriapp.ext.controller.ListReportExtension", [], function() { return { onCustomAction1 : function(oEvent) { alert('Hello'); }, onAfterRendering: function (oEvent) { debugger; var oContentTable = this.byId("com.sap.jerry.jerryfioriapp::sap.suite.ui.generic.template.ListReport.view.ListReport::SEPMRA_C_PD_Product--responsiveTable"); oContentTable.attachSelect(this._onSelectChanged); }, _onSelectChanged: function (oEvent) { debugger; } } });步骤3:测试。 ...

May 23, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-Elements-List-Report-列表宽度决定逻辑的单步调试

注:本文须要联合这篇文章 SAP Fiori Elements List Report Smart Table 列我的项目宽度计算的奥秘 来浏览。 执行上下文:SmartTable.prototype._onMetadataInitialised 以后 SmartTable 的所有属性: 总共从 model 里取出了 36 个字段: 其中 lineItem 即列我的项目备选项有 6 个: 反对导出成 excel: 遍历每一个字段: 这三个字段默认 visible: 这个宽度是什么时候计算出来的? 对于 importance 的计算: 宽度的主动计算: return oColumn.setWidth(this._calcColumnWidth(oField) + "rem"); Calculates the column width from the metadata attributes.基于元数据里的属性计算宽度。 The optimal column width is calculated with creating the longest possible sample of the created model type.最优的宽度是基于字段类型最大可能的长度 Afterwards it is formatted to string while taking the constraints and format options into account, and then measured over canvas.计算结束后,被转换成字符串格局 ...

May 23, 2021 · 1 min · jiezi

关于sap:一步步将-SAP-Commerce-Mock-应用部署到-SAP-BTP-Kyma-Runtime

The Kyma mock application contains lightweight substitutes for SAP applications to ease the development and testing of extension and integration scenarios based on Varkes.什么是 Kyma Mock 利用?它们是 SAP 利用轻量级的替代物,为了便于开发和测试基于 Varkes 的扩大和集成场景而生。 Together with SAP BTP, Kyma runtime, it allows for efficient implementation of application extensions without the need to access the real SAP applications during development.应用 Mock 利用,咱们在利用扩大实现时,就无需拜访实在的 SAP 利用了。 Mock 利用的代码仓库地址:https://github.com/SAP-sample... 进入 Kyma 控制台,创立一个新的 namespace,取名 dev: ...

May 23, 2021 · 2 min · jiezi

关于sap:SAP-BTP-Kyma-Runtime-dashboard-打开报缺少缺陷的错误消息该如何解决

登录 SAP BTP 测试帐号,确保 Entitlements->Service Assignments 下有一个 Kyma runtime,类型为 trial environment: 点击 Enable Kyma 按钮: 创立一个 Kyma Environment: 急躁期待环境创立好之后,在 Active 列上面能看到创立好的一个实例。点击 Go to Dashboard: 发现遇到下列的谬误音讯: Not enough permissions You don't have enough permissions to view this content. Contact your administrator to grant you access. 这个谬误的本源是我操作的用户 Jerry,短少关上 dashboard 必须的权限。进入 subaccount 的 security 选项: 依据关键字 Kyma 进行搜寻: 选中角色(Role) KymaRuntimeNamespaceAdmin 进入明细页面。点击 Edit 按钮: 假如我冀望将本人的用户 Jerry Wang 调配给角色 KymaRuntimeNamespaceAdmin,在ID 字段里输出本人的邮箱地址: ...

May 23, 2021 · 1 min · jiezi

关于sap:答网友问如果用-OData-就能直接和-SAP-系统互通BTP-和-CPI-这样的平台意义在哪里呢

有敌人发问: 内部SaaS利用通过ODATA API拜访SAP标准接口,间接从本方利用发动拜访就能够,无需借助PI或者BTP类的平台吧?既然这样,通过BTP或CPI来构建利用绝对比间接在第三方平台上构建利用的益处是什么呢?是因为这2个平台除了获取数据,有更多对于流程设计和相似扩大插件(不必反复造轮子)的性能,并能够公布到SAP利用市场吗?也就是如果我不须要这些插件辅助,不到利用市场公布,是能够绕过这些平台的。 对于 SAP 和第三方零碎之间的集成,我写过一篇短文:SAP S/4HANA Cloud 系统集成的一些场景介绍 SAP On-Premises 和 SAP Cloud 产品,都能够将其业务,以 OData 服务的形式裸露进去,供第三方系统集成应用。 SAP Cloud 产品,更精确的说,SAP Public Cloud 产品,其 OData 服务能够间接通过公网拜访。实践上,在第三方利用上,间接采纳 Java,C#,nodejs,Python 或者其余编程语言,调用 OData API 即可。在同 SAP Public Cloud 集成的场景下,第三方利用既能够部署在 SAP BTP 上,也能够部署在任何其余服务器上,比方本地服务器,或者腾讯云,阿里云等等。 反观 SAP On-Premises 裸露的 OData API,因为 SAP On-Premises 通常部署在企业内网,因而其 OData API 无奈间接被第三方利用拜访到,须要应用 SAP Cloud Connector,实现内外网穿梭,即下图两头的 Secure Tunnel. 在这种场景里,SAP BTP 是必须的。 SAP BTP 除了联合 SAP Cloud Connector 实现第三方利用拜访企业内网 On-Premises 零碎之外,自身的 Service Market Place 上也提供了很多开箱即用的服务,即包含应用程序层级的 Business Service,也有偏底层基础设施(infrastructure)层面的 Technical Service. 第三方利用部署到 SAP BTP 上之后,能够生产这些服务,防止反复造轮子。 ...

May 23, 2021 · 1 min · jiezi

关于sap:SAP-S4HANA-Cloud-系统集成的一些场景介绍

如下图所示:SAP S/4HANA 集成有下列这些类型: 用户挪动设施同 SAP 云的集成SAP 云零碎之间的集成SAP 云零碎同物联网解决方案的集成SAP On-Premises 解决方案同 SAP 云的集成SAP On-Premises 零碎间的集成SAP On-Premises 零碎同物联网解决方案的集成 SAP 系统集成的技术手段之一:API - Application Programming Interface,典型的类型如下: ODataSOAP - Simple Object Access Protocol,就是咱们罕用的 web serviceBAPI - Business Application Programming Interface,ABAP 特色技术IDoc - ALE interface,广泛应用于 SAP ABAP On-Premises 零碎间的数据交互 SAP S/4HANA 里波及到通信场景的三大模型: Communication User:定义了执行 API 的 technical 用户Communication System:定义了通信的远端零碎明细:Define address of systems to talk toCommunciation Arrangement:定义了零碎间通过具体什么渠道进行通信 - Who talks to whom how SAP S/4HANA Cloud 执行的认证机制Supported Authentication Methods for Communication Scenarios 1711: ...

May 23, 2021 · 2 min · jiezi

关于sap:最详细的-SAP-ABAP-Web-Service-创建和消费步骤讲解

本文原版发表于 SAP 官网社区,过后用的英文版写作,题目为:Step by step to create, consume and trace web service in ABAP systemhttps://blogs.sap.com/2014/05... 总共浏览量超过 18 万。 How to create web service provider in ABAP system如何在 SAP ABAP 零碎创立 web service 提供者本文次要思路就是创立一个 ABAP function module,而后通过事物码 SOAMANAGER 将其封装成 web service. 上面这个函数在 SAP CRM 里创立,逻辑是简略地依据 SAP CRM 产品 ID,从数据库表里读取其形容信息并返回。 FUNCTION ZGET_PROD_DESCRIPTION.*"----------------------------------------------------------------------*"*"Local Interface:*" IMPORTING*" VALUE(IV_PROD_ID) TYPE COMM_PRODUCT-PRODUCT_ID*" EXPORTING*" VALUE(RV_TEXT) TYPE STRING*"----------------------------------------------------------------------SELECT SINGLE A~short_text INTO rv_text FROM COMM_PRSHTEXT AS A INNER JOIN comm_product AS B ON B~product_id = iv_prod_id AND B~product_guid = A~product_guid.ENDFUNCTION.须要用事物码 SOAMANAGER 裸露成 Web Service 的函数,必须标注成 Remote enabled: ...

May 23, 2021 · 2 min · jiezi

关于sap:SAP-Spartacus-如何获得当前渲染页面的-CMS-元数据

PageLayoutService 实现里有一个 cms 依赖:CmsService. 以后页面元数据信息,通过 cms.getCurrentPage 保护。 从 routingService 里拿到以后页面上下文,再从 central 的 ngRx store 里抽取理论数据: routingService.getPageContext 的实现:从 store里读取。 对于 TypeScript 的箭头函数,下列两种写法都正确: 第一种:没有给该函数指定返回类型,TypeScript 编译器主动推导。 let fun5 = (data:number)=> data * data;第二种:残缺写法。第一个箭头前面的 number,表明返回类型为 number. let fun5:(data:number) =>number = (data:number)=> data * data;select 承受一个输出参数:RoutingSelector.getNextPageContext,该参数一看就是一个函数:输出类型为 any,输入类型为 PageContext: getNextPageContext 的类型定义正好和 select 接口里规定的 mapFn 的类型定义完全一致: (state: any) => PageContext select<any, PageContext>(mapFn: (state: any) => PageContext): (source$: Observable<any>) => Observable<PageContext> select 自身的类型定义:返回一个函数,该函数接管的输出参数是类型为 T 的 Observable,输入是类型为 K 的 Observable 对象。 ...

May 23, 2021 · 1 min · jiezi

关于sap:Angular-服务器端渲染的学习笔记二

官网地址:https://angular.io/guide/univ... I have mainly used angular universal for SEO purposes. In that, the server will render enough information on the page so that when Google crawls the page, you can have the server load some asynchronous data (eg. a description of a product from a databse) before serving the page so the crawler sees the information.应用服务器端渲染,能够提前让服务器加载一些异步数据,比方从数据库里读取产品的形容信息,便于爬虫读取。 Asynchronously loaded html via javascript is often missed by crawlers.网络爬虫个别不会通过执行 JavaScript 的形式去异步加载 HTML. ...

May 23, 2021 · 5 min · jiezi

关于sap:Angular-服务器端渲染的学习笔记一

官网链接:https://angular.io/guide/univ... Angular Universal, a technology that renders Angular applications on the server. Angular Universal 是一种将 Angular 利用渲染于服务器平台上的技术。 A normal Angular application executes in the browser, rendering pages in the DOM in response to user actions.一般的 Angular 利用在浏览器里执行,响应用户动作,并以 DOM 的形式渲染页面。 Angular Universal executes on the server, generating static application pages that later get bootstrapped on the client.Angular Universal 执行在服务器端,生成动态的利用页面,该页面随后在客户端进行疏导(bootstrap). This means that the application generally renders more quickly, giving users a chance to view the application layout before it becomes fully interactive.服务器端渲染通常意味着应用程序的渲染速度更加快捷,容许用户在利用可能实现失常互动之前,就有机会一窥利用的布局。 ...

May 23, 2021 · 3 min · jiezi

关于sap:第三方外部-Saas提供商如何跟使用-SAP-系统的客户进行对接接口集成

最近收到一位敌人的征询: 作为第三方内部 Saas提供商,想要跟应用 SAP 零碎的客户进行对接接口集成,须要理解哪些 SAP 的版本?和常见对接技术语言,形式,协定,注意事项? 首先这个问题领域的确比拟大。随着近些年来 SAP 向云端转型,收买了很多公司的云产品,SAP 的产品线不再像本世纪初那样次要由 基于 ABAP 技术栈的产品组成。 咱们能够首先把 SAP 产品按部署形式,分为基于 On-Premises (本地部署) 和基于 Cloud 两种类型。 On-Premises:SAP ERP,SAP Business Suite(比方 SAP CRM),SAP S/4HANA On-Premises 版本,SAP Commerce On-Premises 等等Cloud:SAP Business ByDesign,SAP Cloud for Customer,SAP Field service Management, SAP Commerce Cloud 等等。无论哪种类型,第三方利用同 SAP 集成,归根到底,就是调用 SAP 零碎提供的 API,进行 SAP 数据模型的增删改查,以及在 SAP 零碎上执行一些事务处理。比方调用 SAP 零碎订单创立 API,生成一个新的订单,返回给第三方利用,而后在第三方利用里触发审批工作流的行为,工作流执行于 SAP 后盾,执行后果返回给第三方利用。 如果是第三方利用同基于 ABAP 技术栈的 SAP 产品,比方 SAP ERP,SAP CRM 集成,能够通过生产 SAP 零碎 RFC ( remote function call ) 的形式来实现集成。这种集成形式绝对比拟古老也比拟成熟,间接在百度上依据关键字 “SAP RFC”进行搜寻,就能找到很多技术文章。 ...

May 23, 2021 · 1 min · jiezi

关于sap:如何从-SAP-Spartacus-Product-Detail-页面找到其-Angular-实现-Component-的位置

如图:假如咱们通过下列 url,关上 SAP Spartacus 一个产品的明细页面,咱们想找出是哪个 Angular Component,实现了该明细页面。 http://localhost:4200/electro... 关上 Chrome 开发者工具,查看 Product 明细页面的 HTML 源代码,能找到 cx-page-layout 节点,class 值为 ProductDetailsPageTemplate. 因而,Product 明细页面,不是通过繁多的 Angular Component 实现,而是由若干 Angular Components 独特组合而成,这些 Angular Components,从语义上说,都放在 ProductDetailsPageTemplate 这个模板容器之内。 https://localhost:9002/cmscoc... 关上 SAP Hybris CMS Cockpit: 搜寻: ProductDetailsPageTemplate 的每一个 Content Slot,能够搁置一个或者多个 CMS Component,而每一个 CMS Component,又对应一个 Spartacus Angular Component: Spartacus 利用启动时,关上 Product Detail 页面之后,能察看到这个 HTTP 申请: https://api.cg79x9wuu9-eccomm... 读取的正是 Product detail template 和其蕴含的 Content Slot 信息: ...

May 23, 2021 · 1 min · jiezi

关于sap:具备自动刷新功能的-SAP-ABAP-ALV-报表

该报表次要构造如下,残缺代码见文末。 f_call_rfc_wait: 发动异步调用,期待 1 秒钟,来模仿每隔 1 秒刷新屏幕的成果。 f_display_data: ALV 惯例操作,调用函数 REUSE_ALV_LIST_DISPLAY 显示 ALV 数据。 f_read_data: 调用函数 THUSRINFO,返回的后果作为 ALV 的数据源。该函数返回以后零碎登录的用户名列表: 残缺代码: REPORT ZALV_AUTO_REFRESH.DATA : gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04*---------------------------------------------------------------------*START-OF-SELECTION. PERFORM f_read_data. PERFORM f_display_data.*---------------------------------------------------------------------** Form F_LIRE_DATA*---------------------------------------------------------------------*FORM f_read_data. REFRESH gt_user.* Get User's info CALL FUNCTION 'THUSRINFO' TABLES usr_tabl = gt_user.* Wait in a task PERFORM f_call_rfc_wait.ENDFORM. " F_READ_DATA*---------------------------------------------------------------------** Form F_DISPLAY_DATA*---------------------------------------------------------------------*FORM f_display_data. DEFINE m_sort. add 1 to ls_sort-spos. ls_sort-fieldname = &1. append ls_sort to lt_sort. END-OF-DEFINITION. DEFINE m_event_exit. clear ls_event_exit. ls_event_exit-ucomm = &1. ls_event_exit-after = 'X'. append ls_event_exit to lt_event_exit. END-OF-DEFINITION. DATA : ls_layout TYPE slis_layout_alv, lt_sort TYPE slis_t_sortinfo_alv, ls_sort TYPE slis_sortinfo_alv, lt_event_exit TYPE slis_t_event_exit, ls_event_exit TYPE slis_event_exit.* Build Sort Table m_sort 'ZEIT'.* Build Event Exit Table m_event_exit '&NTE'. " Refresh ls_layout-zebra = 'X'. ls_layout-colwidth_optimize = 'X'. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = sy-cprog i_callback_user_command = 'USER_COMMAND' is_layout = ls_layout i_structure_name = 'UINFO' it_sort = lt_sort it_event_exit = lt_event_exit TABLES t_outtab = gt_user.ENDFORM. " F_DISPLAY_DATA*---------------------------------------------------------------------** FORM USER_COMMAND **---------------------------------------------------------------------*FORM user_command USING i_ucomm TYPE syucomm is_selfield TYPE slis_selfield. "#EC CALLED CASE i_ucomm. WHEN '&NTE'. PERFORM f_read_data. is_selfield-refresh = 'X'. SET USER-COMMAND '&OPT'. " Optimize columns width ENDCASE.ENDFORM. " USER_COMMAND*---------------------------------------------------------------------** Form F_CALL_RFC_WAIT*---------------------------------------------------------------------*FORM f_call_rfc_wait. DATA lv_mssg(80). "#EC NEEDED* Wait in a task CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK '001' PERFORMING f_task_end ON END OF TASK EXPORTING seconds = 1 " Refresh time busy_waiting = space EXCEPTIONS RESOURCE_FAILURE = 1 communication_failure = 2 MESSAGE lv_mssg system_failure = 3 MESSAGE lv_mssg OTHERS = 4.ENDFORM. " F_CALL_RFC_WAIT*---------------------------------------------------------------------** Form F_TASK_END*---------------------------------------------------------------------*FORM f_task_end USING u_taskname. DATA lv_mssg(80). "#EC NEEDED* Receiving task results RECEIVE RESULTS FROM FUNCTION 'RFC_PING_AND_WAIT' EXCEPTIONS RESOURCE_FAILURE = 1 communication_failure = 2 MESSAGE lv_mssg system_failure = 3 MESSAGE lv_mssg OTHERS = 4. CHECK sy-subrc EQ 0. SET USER-COMMAND '&NTE'. " RefreshENDFORM. " F_TASK_END*************** END OF PROGRAM Z_ALV_AUTO_REFRESH *********************更多Jerry的原创文章,尽在:"汪子熙": ...

May 23, 2021 · 2 min · jiezi

关于sap:SAP-Fiori-Elements-List-Report-Smart-Table-列项目宽度计算的奥妙

这是 Jerry 2021 年的第 36 篇文章,也是汪子熙公众号总共第 312 篇原创文章。 Jerry 之前写的 SAP Fiori Elements 系列文章: 在没有任何前端开发教训的根底上, 创立第一个 SAP Fiori Elements 利用答网友发问:应用 SAP Fiori Tools 创立的 Fiori Elements 利用,如何进行二次开发?本地开发好的 SAP Fiori Elements 利用,如何部署到 ABAP 服务器上深刻把握 SAP Fiori Elements 工作原理的前提条件:了解 Smart Field深刻了解 SAP Fiori Elements 工作原理系列之二:如何给 SAP Fiori Elements 利用增加自定义按钮SAP Fiori Elements 框架里 Smart Table 控件的工作原理介绍对于 List Report 模板里 Smart Table 控件里不同列我的项目的宽度问题,也有很多敌人私下里问我: 比方这个问题: “当我生成页面的时候,column 没有用光控件的空间,在传统开发上,咱们能够操控 column 的 width 属性。然而在Fiori Elements 开发中并没有碰到相应的参数。 请问您晓得我能够通过什么参数管制嘛?” ...

May 15, 2021 · 2 min · jiezi

关于sap:SAP-Fiori-Elements-里-Smart-Table-column-的宽度问题

如下图所示,我有一个 SAP Fiori Elements List Report 制作出的利用: 层级构造:thead - tr - th: 宽度: 2rem. em是绝对长度单位。绝对于以后对象内文本的字体尺寸。如以后对行内文本的字体尺寸未被人为设置,则绝对于浏览器的默认字体尺寸。 EM特点em的值并不是固定的;em会继承父级元素的字体大小。留神:任意浏览器的默认字体高都是16px。所有未经调整的浏览器都合乎: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,须要在css中的body选择器中申明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只须要将你的原来的px数值除以10,而后换上em作为单位就行了。 所以咱们在写CSS的时候,须要留神两点: body选择器中申明Font-size=62.5%;将你的原来的px数值除以10,而后换上em作为单位;从新计算那些被放大的字体的em数值。防止字体大小的反复申明。rem是CSS3新增的一个绝对单位(root em,根em),这个单位引起了宽泛关注。这个单位与em有什么区别呢?区别在于应用rem为元素设定字体大小时,依然是绝对大小,但绝对的只是HTML根元素。这个单位堪称集绝对大小和相对大小的长处于一身,通过它既能够做到只批改根元素就成比例地调整所有字体大小,又能够防止字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已反对rem. image 列的 width: 5rem Product 列的宽度: 11rem 152 行 oTable 实例的 getColumns 办法,在 TableRenderer.renderColumns 里被调用: sId: com.sap.jerry.jerryfioriapp::sap.suite.ui.generic.template.ListReport.view.ListReport::SEPMRA_C_PD_Product--responsiveTable 这个数据结构里只有 4 列? ProductForEdit: 11rem 后续会介绍,这些 column 的 width 属性,是在何处依据什么逻辑被计算出来的。 更多Jerry的原创文章,尽在:"汪子熙":

May 15, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-里的-cxOutletRef-指令执行过程分析

先看 cxOutletRef 指令的成果:ng-template 里定义了如下图标 1 区域所示的自定义 UI,通过 cxOutletRef, 将其插入到图标 2 所示的 ProductDetailsPageTemplate里: 源代码: <ng-template cxOutletRef="ProductDetailsPageTemplate" cxOutletPos="before" let-model> <div class="before-pdp"> Campaign UI for Canon </div> <div class="after-pdp"> {{ model.component | async | json }} </div> </ng-template>运行时的成果: 查看源代码,发现该指令的无效实现不多,仅仅调用 OutletService.add 办法: 仔细阅读 add 办法的三个参数: outlet:代表自定义 UI 插入的 UI 地位,通过字符串代表。能够将 template 或者 ComponentFactory 插入该字符串代表的 UI 地位。tpl: 待插入的自定义 UI 所在的页面模板实例。 index.html 页面里只有一个 cx-storefront selector, 对应 StorefrontComponent: Outlet.service.ts 里保护了一个字典构造,key 为 outlet 名称,值为 cxOutletRef 指令所在的 ng-template 实例。 ...

May 15, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-Page-Layout-页面布局设计

Page Structure - 页面构造Pages in CMS are constructed with slots and components. A page contains slots, and slots contain components.CMS 页面由 slots 和 components 组成。 页面蕴含 slots,slots 蕴含 Components. To organize common slots and components, Spartacus supports page templates.为了反对通用 slots 和 Components,Spartacus 反对 page template. A page template contains layout and components that can be used globally, such as header and footer sections.上面这张图展现了 id 为 homepage 的页面,其页面模板为 Landing Page 2 Template. ...

May 15, 2021 · 2 min · jiezi

关于sap:通过实际的例子介绍-SAP-ABAP-里的-Repository-Information-System-的使用技巧

本文通过一些理论的例子,介绍 ABAP Repository Information System 的应用技巧。 顾名思义,ABAP Repository Information System,是一个微小的仓库信息系统,寄存了各种类型的 ABAP 开发对象。 应用事物码 SE80 关上这个仓库信息系统。进入之后,看到的页面如下: 当然,大家 SE80 后看到的页面,不肯定和我完全一致。咱们能够在 SE80 的 Utilities 菜单里,抉择应该显示哪些标签进去: 比方我点击 Select All,把 SE80 反对的所有标签页全副放进去: 最初的界面如下: 本文着重介绍 Repository Information System 的用法。 Development Coordination能够依据各种输出条件查问 ABAP 开发包。能够把 ABAP 开发包了解成一个容器,外面能寄存各种类型的 ABAP 开发对象,好比一个抽屉,外面能装各种杂物一样。任何 ABAP 开发对象,新建之后保留之前,零碎都会弹出提示框,让开发人员抉择,将这个开发对象存储在哪一个 ABAP 开发包里。 搜寻后果: 上图演示了依据 Package 的名称来搜寻的性能,意思是:搜寻零碎所有以 $ZJE 结尾的 ABAP 开发包。ABAP 开发包也能看作是一种狭义上的 ABAP 对象,$ 和 Z 都是 ABAP 对象的命名标准,意思是该对象是本地存储,不能通过传输申请(Transport Request) 导入到其余零碎。传输申请(Transport Request) 是 ABAP 一个特色概念,若干个 ABAP 开发对象能够依附于同一个传输申请,通过该申请,这些 ABAP 开发对象能够导入到其余零碎。能够把传输申请设想成卡车,把调配给传输申请的 ABAP 开发对象,设想成卡车上运输的货物。例如搜寻所有形容字段蕴含了字符串 Product 的传输申请: ...

May 15, 2021 · 1 min · jiezi

关于sap:如何在-SAP-Hybris-WCMS-cockpit-里创建新的-website

首先应用如下 url,登录 SAP Hybris CMS cockpit: https://localhost:9002/cmscoc... 看到零碎已有的 WebSite 列表: 点击 + 按钮,创立一个新的 website: 从新建 site 向导里,抉择一个 site 模板: 保护根本的 site 属性: 给这个 website 调配 base store: 抉择 store 后,该 store 调配的 page template 就列举如下: 抉择某个 template 之后,如果想应用已有的 content catalog,抉择第一项: 抉择 site theme,blue 或者 black: 最初看到 site 创立的总结页面: 点击 done 之后,胜利创立 website: 更多Jerry的原创文章,尽在:"汪子熙":

May 15, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-Elements-框架里-Smart-Table-控件的工作原理介绍

这是 Jerry 2021 年的第 34 篇文章,也是汪子熙公众号总共第 310 篇原创文章。 Jerry 前一篇文章 深刻把握 SAP Fiori Elements 工作原理系列之二:如何给 Fiori Elements 利用增加自定义按钮 介绍了如何给 SAP Fiori Elements 利用的 Smart Table 工具栏里,新增自定义按钮,并实现其点击事件处理函数。 本文 Jerry 持续介绍 SAP Fiori Elements 利用里,Smart Table 控件的渲染原理。依据前一篇文章介绍的常识,SAP Fiori Elements List Report 的模板,蕴含了 SmartTable.fragment.xml 这个页面片段: 而该页面片段的源代码里,应用了 Smart Table 控件: 为了把和 Smart Table 控件不相干的依赖都剥来到,以便于大家把注意力聚焦在 Smart Table 自身上,本文 Jerry 另外开发了一个 SAP UI5 利用,只蕴含一个最简略的 XML 视图,外面应用到了 Smart Table 控件。同时,我开发了一个简略的 Mock 服务器,让该利用在申请 OData 服务元数据时,由 Mock 服务器把本地工程当时筹备好的 metadata.xml 文件的内容,作为元数据响应,间接返回给利用。这样我能够不便地批改本地 metadata.xml 文件,来达到各种测试目标。 ...

May 9, 2021 · 2 min · jiezi

关于sap:SAP-UI-和-Salesforce-UI-开发漫谈

目录 SAP UI SAP GUI + DynproWeb DynproBSP/CRM WebClient UISAP UI5/FioriUI5 in SAP Cloud for CustomerHybris Enterprise Commerce Platform*Salesforce UI ApexLightning ExperienceAura FrameworkLightning Component FrameworkVisualforceSAP GUI + Dynpro 用SAP GUI + Dynpro 开发利用的UI界面好像是石器时代的事件了。据我所知,至多在SAP成都研究院曾经没有团队仍旧应用这种古老的技术来开发UI了。尽管S/4HANA的后盾还有大量事务码可供终端用户应用,然而,借助SAP Internet Transaction Server(ITS),这些基于SAP GUI的事务码能够间接运行在浏览器端,并且具备Fiori利用的外观。 也就是说,如果您的S/4HANA On Premise客户须要一些新的UI, 除了惯例的UI5开发方式之外,从技术上说,您齐全能够依然用SAP GUI开发一个Dynpro Screen, 而后封装成一个事务码,最初把这个事务码调配到S/4HANA Fiori launchpad的某个tile上。具体做法能够参考我的博客:Open your SAP GUI transaction in Fiori launchpad https://blogs.sap.com/2016/12... 用浏览器拜访SAP GUI 事务码SE80的成果如下: 实际上,S/4HANA的很多规范利用也采纳了这种做法。以物料主数据管理利用为例,S/4HANA既存在采纳这种“障眼法”打造而成的伪Fiori利用(下图标注了事务码的3个tile),也存在下文要介绍的根正苗红的原生Fiori利用(下图蓝色tile所示)。 Web Dynpro 从实现语言上分为ABAP Web Dynpro和Java Web Dynpro。据我所知基于ABAP Web Dynpro开发的SAP规范利用比Java Web Dynpro多得多, 比方SAP SRM的规范UI就基于ABAP Web Dynpro。另外有很多属于SAP_BASIS software component的利用或框架,其UI也是应用ABAP Web Dynpro开发的,最驰名的莫过于BRF(Business Rule Framework) 。 ...

May 9, 2021 · 3 min · jiezi

关于sap:一个典型的加了-SAP-注解的-OData-服务明细分析

如下图所示,我有一个 SAP UI5 利用,应用 SAP UI5 SmartTable 控件,生产了一个施加了 sap 命名空间的 OData 服务。对于这个 SAP UI5 利用更多细节,请查看我这篇文章:如何以 mock server 的形式本地启动 SAP UI5 利用,使它不连贯服务器端 OData 服务。 本文详细分析该利用生产的 OData 服务设计。 这个 OData 服务的版本是 2.0,蕴含三个 EntityType 和三个 Annotations: 其中 Product entitytype,key 为属性 ProductId: 命名空间为 com.sap.wt05: 而 Product entityType, 具备 LineItem 注解,注解里定义了四个 DataField,别离是:ProductId, Price,Name 和 Category,这四个属性,就是最初渲染而成的四个表项: 如果我在 metadata.xml 里给属性 productId 增加一个 sap:label 属性: 最初的成果: 这个表格自身也是响应式 (responsive)的,因而其控件大小能够随着屏幕尺寸的变动而变动,达到最佳显示成果: 更多Jerry的原创文章,尽在:"汪子熙": ...

May 9, 2021 · 1 min · jiezi

关于sap:深入掌握-SAP-Fiori-Elements-工作原理系列之二如何给-Fiori-Elements-应用添加自定义按钮

这是 Jerry 2021 年的第 33 篇文章,也是汪子熙公众号总共第 309 篇原创文章。 Jerry 的日常工作内容从 2020 年 8 月转到 Angular 前端开发之后,算是领略到了这个风行前端框架凋敝生态圈的风采:在开发过程中遇到 Angular 技术问题时,很容易在社区里找到大量相干文章。除了每天我都要浏览的 Angular 官网之外,我也常常浏览一些国内外大神写的对于 Angular 源代码剖析的博客。 同 Angular 相比,应用 SAP Fiori Elements 的从业者的相对人数没有 Angular 多,除了 SAP 官网文档之外,介绍 Fiori Elements 源代码实现和工作原理的文章不多,中文资料就更少了。 因而 Jerry 试着用中文写了一些 SAP Fiori Elements 应用和工作原理介绍的文章,心愿对这个开发框架的中文生态圈奉献一点微薄之力: 在没有任何前端开发教训的根底上, 创立第一个 SAP Fiori Elements 利用 答网友发问:应用 SAP Fiori Tools 创立的 Fiori Elements 利用,如何进行二次开发? 本地开发好的 SAP Fiori Elements 利用,如何部署到 ABAP 服务器上 深刻把握 SAP Fiori Elements 工作原理的前提条件:了解 Smart Field ...

May 9, 2021 · 3 min · jiezi

关于sap:如何从-SAP-Fiori-Elements-List-Report-Table-点击事件响应函数里拿到表格某一行的信息

如下图所示,我依照这篇文章 如何在 SAP Fiori Elements List Report 表格工具栏里削减新的自定义按钮 里介绍的形式,在 SAP Fiori Elements List Report 利用的 table 工具栏里,增加了一个自定义按钮: 下一步,我冀望选中某行表项后,点击该按钮,能弹出对应表项的一些数据。 所以问题的焦点,就是如何从按钮的点击处理函数 onCustomAction1 的输出参数 oEvent 里,取得以后表格里被选中的数据。 咱们从 oEvent 变量触发: oEvent.oSource 指向以后触发事件的 UI 控件,即 自定义按钮控件: 按钮的 parent 是 toolbar: Toolbar 的 parent 就是整个响应式 table 了: 调用 getSelectedItem() 拿到以后选中行: 这个 ColumnListItem 蕴含了以后选中行的所有列。 调用其 getCells 办法,失去 8 个 Table Columns 的实例: 从其 sId 大抵能辨识出每个 Column 代表的含意,或者间接依据其 index 也就是索引,也能判断出。比方第一个元素,是 product image column,而第二个元素 vbox,是一个复合控件,Vertical Box. 第三个元素,是一个 Text 控件,Product Category. ...

May 9, 2021 · 1 min · jiezi

关于sap:SAPUI5-List-Report-table-里的普通按钮全局按钮-和-Determining-按钮

我在 manifest.json 的 extends 区域里定义了一个一般的自定义按钮,global 属性为 false: "extends": { "extensions": { "sap.ui.controllerExtensions": { "sap.suite.ui.generic.template.ListReport.view.ListReport": { "controllerName": "com.sap.jerry.jerryfioriapp.ext.controller.ListReportExtension", "sap.ui.generic.app": { "SEPMRA_C_PD_Product": { "EntitySet": "SEPMRA_C_PD_Product", "Actions": { "ActionName1": { "id" : "ActionName1", "text" : "Action Name One", "press" : "onCustomAction1", "requiresSelection": false, "global":false } } } } } } } },外观如下: global 属性改成 true 后: button 的按钮地位产生了扭转,跑到页面右上角了: 从 breakoutActions.fragment.xml 的实现源代码里发现,custom action 还有一个 determining 属性: 设成 true 之后,跑到屏幕下方 footer 区域了。尽管地位产生了变动,不影响点击按钮后的事件响应。 ...

May 9, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-Elements-List-Report-Smart-Table-Toolbar-的-XML-视图实现

http://localhost:8080/resourc... SmartTableToolbar.fragment.xml 里,蕴含了 BreakoutActions.fragment: http://localhost:8080/resourc... 源代码: <core:FragmentDefinition xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1" xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:build="sap.build"> <template:if test="{= ${tmpEntitySet>EntitySet} === ${parameter>/entitySet} }"> <template:repeat list="{tmpEntitySet>Actions}" var="customaction"> <!--all break out actions which are neither determining nor global--> <template:if test="{= !${customaction>determining} &amp;&amp; !${customaction>global}}"> <Button id="{parts: [{path: 'customaction>'}, {path: 'tabItem>'}], formatter: 'sap.suite.ui.generic.template.js.AnnotationHelper.getBreakoutActionButtonId'}" enabled="{parts: [{path: 'customaction>'}, {path: 'tabItem>'}], formatter: 'sap.suite.ui.generic.template.js.AnnotationHelper.getBreakoutActionEnabledKey'}" text="{customaction>text}" press="{customaction>press}" type="Transparent"> <layoutData> <OverflowToolbarLayoutData priority = "{customaction>importance}"/> </layoutData> </Button> </template:if> </template:repeat> </template:if></core:FragmentDefinition>运行时,该 XML 视图源代码被 XMLPreprocessor.js 解析: SmartTableToolbar.fragment.xml 里蕴含了 BreakoutActions.fragment.xml: getBreakoutActionButtonId: ...

May 9, 2021 · 1 min · jiezi

关于sap:如何在-SAP-Fiori-Elements-List-Report-表格工具栏里增添新的自定义按钮

如下图所示,这是 SAP Fiori Elements List Report 一个例子,咱们想在表格工具栏里,新增一个自定义按钮: 实现形式在 SAP Fiori Elements 我的项目工程里,批改 manifest.json,增加如下代码: "extends": { "extensions": { "sap.ui.controllerExtensions": { "sap.suite.ui.generic.template.ListReport.view.ListReport": { "controllerName": "com.sap.jerry.jerryfioriapp.ext.controller.ListReportExtension", "sap.ui.generic.app": { "SEPMRA_C_PD_Product": { "EntitySet": "SEPMRA_C_PD_Product", "Actions": { "ActionName1": { "id" : "ActionName1", "text" : "Action Name One", "press" : "onCustomAction1", "requiresSelection": false } } } } } } } },咱们须要创立一个 sap.ui.controllerExtensions 的具体实现,该扩大的 id 为 com.sap.jerry.jerryfioriapp.ext.controller.ListReportExtension: 这个 controller 里蕴含了自定义的按钮点击处理函数:onCustomAction1. 实现 sap.ui.controllerExtensions. 两处的 controller extension id 要统一。 ...

May 9, 2021 · 1 min · jiezi

关于sap:SAP-UI5-manifestjson-和-i18n-多语言文本的解析逻辑

正则表达式: {{foo}} 在 sap.ui.core.Component.js 里,执行 loadManifests 进行加载: 咱们的 controller extensions 在这里也能看见: 在 Manifest 构造函数里,执行 _processI18n, 解决 i18n 相干逻辑: 胜利加载的文本资源,位于 ResourceBundle 中: 从 Resource Bundle 中,依据 resource key 拿到文本的逻辑,位于办法 getText 里: 更多Jerry的原创文章,尽在:"汪子熙":

May 9, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-Elements-本地项目的-annotationsxml-文件

SAP Fiori Elements 本地我的项目里的 Annotations.xml,能够定义一些本地 annotations,来笼罩掉来自后盾 OData 服务里的注解。 例如:我在 Annotations.xml 里从新定义 List Report 里应该显示的表项: <Annotations Target="SAP.SEPMRA_C_PD_ProductType"> <Annotation Term="UI.LineItem"> <Collection> <Record Type="UI.DataFieldForAction"> <PropertyValue Property="Label" String="点我"/> <PropertyValue Property="Action" String="SEPMRA_PROD_MAN.SEPMRA_PROD_MAN_Entities/SEPMRA_C_PD_ProductCopy"/> <PropertyValue Property="InvocationGrouping" EnumMember="UI.OperationGroupingType/Isolated"/> <Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/> </Record> <Record Type="UI.DataField"> <PropertyValue Property="Value" Path="ProductForEdit"/> <PropertyValue Property="Label" String="12345"/> <Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/> </Record> <Record Type="UI.DataField"> <PropertyValue Property="Value" Path="MainProductCategory"/> <Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/> </Record> </Collection> </Annotation> </Annotations>下面的代码从新定义了 Copy 按钮的标签,同时 List Report 默认只显示两个表项:Product 和 MainProductCategory,同时将 Product 的 Label 更改为 12345,运行时成果: 然而咱们依然能够通过配置的形式,将其余 column 一起显示进去: 如图所示: 更多Jerry的原创文章,尽在:"汪子熙":

May 9, 2021 · 1 min · jiezi