关于sap:SAP-Spartacus-SplitViewComponent-Migration-的一个具体例子

参考 Pull Request:https://github.com/SAP/sparta... 首先在 docs/migration/3.0_md 里增加文字描述: projects/schematics/src/migrations/3_0/constructor-deprecations/constructor-deprecations.ts在 CONSTRUCTOR_DEPRECATION_DATA 数组里,增加一个新元素。该元素来源于:./data/split-view.component.migration 留神命名标准:split-view.component.migration, 以 migration.ts 结尾。 projects/schematics/src/migrations/3_0/constructor-deprecations/data/split-view.component.migration.ts申明废除的参数以及新引入的参数: 留神,属性值都不能间接用字符串常量,后者必须在 projects/schematics/src/shared/constants.ts 里定义: 更多Jerry的原创文章,尽在:"汪子熙":

May 9, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-B2B-页面-Popover-Component-的条件显示逻辑

如下图所示,这个 B2B 页面 的 Popover Component: 触发其的按钮位于 cx-org-card 内: 而上面这个 assigned users 明细页面,为什么就没有显示 Popover Component 的(i) 按钮了呢? 究其原因,selector cx-org-card 对应 CardComponent,在其模板实现里,有一个标记位,管制是否显示 Popover Component:showHint 整个按钮,被 *ngIf Directive 管制。 budget 明细页面没有 (i) icon,因为生产 card Component 时,没有显式传入 showHint = true: 再比拟 unit detail Component,显式传入的 showHint = true: 更多Jerry的原创文章,尽在:"汪子熙":

May 9, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-升级时关于-schematics-的更新

When upgrading Spartacus to a new major version (for example, from 3.x to 4.0), the Spartacus migration mechanism automatically implements fixes for code that is modified or removed in the new version.当降级 Spartacus 到新的 major 版本时,Spartacus migration mechaniusm 主动调整在新版本里被批改或者被删除的代码。 When you are working on a feature or a bug, or making any other change to the Spartacus source code, you need to update the schematics as part of the Definition Of Done..Migration MechanismAfter upgrading to a new major version, the migration mechanism should be updated at the very beginning of the new development cycle.在降级到新的 major 版本后,migration mechanism 应在新的开发流程初始阶段,尽快被更新。 ...

May 9, 2021 · 3 min · jiezi

关于sap:SAP-Spartacus-B2B-页面-Disable-按钮的显示原理

SAP Spartacus B2B 页面 disable 按钮如下图所示。 这个高亮的 disable 按钮,和右边相邻的 Edit 按钮,实现位于不同的 Component. disable 按钮有独自的实现 Component:toggle-status.component.ts, selector: cx-org-toggle-status 在 B2B Launchpad 6 个 tile 里都生产了该 Component,以 unit 页面为例,生产代码如下: <cx-org-toggle-status actions key="uid" i18nRoot="orgUnit" ></cx-org-toggle-status> 其中 18 行的 key,19 行的 i18nRoot, 都是为了给该 Component 的 @input 属性传递输出值: 而 17 行的属性 actions,咱们试着把这个值改一改,看会产生什么: 不出所料,Disable 按钮从工具栏里隐没了: 依据关键字 select="[actions]" 搜寻,能发现 card.component.html 模板实现里,通过 ng-content 实现了动静内容注入,注入条件是那些蕴含了 actions 属性的标签。 所以,蕴含了 Disable 按钮的 Component,其属性值必须是 actions,只有这样,能力被动静注入到 card.component.html 的 header 区域去。 ...

May 9, 2021 · 1 min · jiezi

关于sap:通过-Feature-Level-动态控制-SAP-Spartacus-的页面显示

ng-container 标签只在 design time 可见,运行时会齐全从渲染出的 HTML 源代码里被移除。通过 ng-container 加上 SAP Spartacus 自定义实现的 cxFeatureLevel Directive, 能够实现依据配置的 Feature level,动态控制某个页面片段是否显示的成果。 如下图所示,红色高亮区域内的 HTML 页面布局,仅当 SAP Spartacus 配置的 feature Level >= 3.2 才可能在 UI 上显示进去。 这个动态显示 UI 的逻辑实现在 cxFeatureLevel Directive 里。 该 Directive 实现里,应用 @Input set 定义了一个 input,当消费者应用 Directive,传入了一个 feature level 后,触发该 cxFeatureLevel 办法,调用构造函数里注入的 viewContainer 提供的 createEmbeddedView 办法,动态创建视图。待创立的视图元数据存储在另一个注入参数 tenplateRef 里。 this.config 来自 SAP Spartacus 我的项目里存储的配置信息。 embeddedTView 和 embeddedLView 都是 Angular 框架依据注入 Directive 构造函数的待渲染视图的元数据创立的,作为输出参数调用 renderView 进行页面渲染: ...

May 9, 2021 · 1 min · jiezi

关于sap:SAP-Commerce-Cloud-Build-Manifest-Components

官网帮忙文档:https://help.sap.com/viewer/1... The components of the build manifest enable you to configure a number of build attributes by modifying various extensions, properties, aspects, and tests.build manifest 组件容许咱们通过批改各种 extensions,properties,aspects,来定义一系列 build 属性。 定义利用版本The application version defines the exact version of the SAP Commerce Cloud artifact to download. It is recommended to use the latest version of the application, but if necessary, you can define a patch version. The application version is a mandatory component of the manifest.此处指定主动下载 SAP Commerce Cloud 的版本号: ...

May 9, 2021 · 6 min · jiezi

关于sap:深入掌握-SAP-Fiori-Elements-工作原理的前提条件理解-Smart-Field

这是 Jerry 2021 年的第 33 篇文章,也是汪子熙公众号总共第 309 篇原创文章。 SAP 前端开发者现在应用的 SAP Fiori Elements,在 2016 年时被称为 Smart Template,其在 SAP 官网的定义是: Smart Template 是一套框架,针对最罕用的利用模式,依据元数据注解,加上预约义的模板,在运行时可能动静生成 SAP UI 页面。 原文:Smart templates provide a framework for generating UIs at runtime based on metadata annotations and predefined templates for the most used application patterns. SAP 官网链接如下: https://experience.sap.com/fi... SAP Fiori Elements 的外围就是其基于的元数据注解,以及依据这些元数据,在运行时 "智能地" 生成 UI 的能力。因为这种运行时动静生成 UI 的行为产生在幕后,对利用开发人员来说齐全是一个黑盒子。不少开发人员感觉 SAP Fiori Elements 的工作原理很神秘,即便想钻研其源代码,也不晓得该如何动手。 到 2021 年 5 月为止,SAP Fiori Elements 反对 5 种类型的预约义模板: ...

May 3, 2021 · 2 min · jiezi

关于sap:对-SAP-UI5-一无所知的新手从哪些材料开始学习比较好

这是 Jerry 2021 年的第 32 篇文章,也是汪子熙公众号总共第 308 篇原创文章。 我常常收到不少敌人这样的问题:如果对 SAP UI5 无所不知的老手,想学习 SAP UI5,从哪些资料开始学习比拟好?有没有一些举荐的书? 我本人 2014 年底,出于工作须要学习 SAP UI5 时,把 SAP UI5 官网上提供的一套 Walkthrough (这个词的中文翻译应该是教程,辅导,攻略) 认真做了一遍,其中的代码一个字符一个字符照着敲了一遍,很快就能够上手工作了。起初有新共事入职到咱们团队时,我也举荐这套教程让新共事们学习。 这是 SAP 官网例子程序的网址,蕴含了大量 SAP UI5 例子程序可供下载: 滑动屏幕到下方,就能看到 Walkthrough 这套教程了。 该教程蕴含 38 个步骤,涵盖了 SAP UI5 开发和单元测试的方方面面,依照教程最终能做出一个 SAP UI5 利用。 每个步骤均是在前一步骤的根底上,增加新的个性,实现一个新指标。既有文字描述,也有较之前一步骤,须要新开发的代码块, 这些代码块通过黄色高亮显示如下图所示: 如果急不可待想查看,依据这 38 个步骤做完之后的 SAP UI5 长什么样,能够从官网间接下载最终的实现版: Jerry 的技术交换群里,有敌人提了一个问题:从 SAP 官网下载的这些 SAP UI5 示例工程文件,如何在本地 IDE 比方 Visual Studio Code 里启动? ...

May 3, 2021 · 2 min · jiezi

关于sap:一个-SAP-开发工程师十余年的技术写作之路回顾

这是 Jerry 2021 年的第 31 篇文章,也是汪子熙公众号总共第 307 篇原创文章。 本文目录汪子熙公众号的格调定位为什么我会开始在微信公众号上书写技术文章我的写作素材从哪里来保持了长达十余年的技术写作,我最大的三个播种Jerry 从 2018 年正式开始在微信公众号平台写作,至今曾经整整三年半了。到 2021 年 4 月 30 日为止,总共输入了 306 篇原创文章,取得了 10000 个粉丝。 尽管我深知,这一万个粉丝敌人,在整个数以亿计的微信用户群里,只是极其小众的一个群体,不过我开启公众号技术文章写作的初衷,绝非是“在 XXX 时间段内,粉丝数达到 XXX 个”。因而,对于公众号的粉丝数,以及每篇文章的浏览量,点赞个数,我也采取很佛系的态度去看待,所有顺其自然。 当今这个自媒体时代,每天都有新的微信公众号涌现。然而可能被大家记住,常常放弃关注和浏览的,只有一小部分。这一小部分公众号无疑都有各自显明的特色。 申请这个公众号之初,我就对其有着清晰的定位,并且保持到了当初,那就是:谨严,业余。 为了做到谨严,这 306 篇原创文章,篇篇书写的过程我都是惜墨如金,在公布之前本人也会反复读几遍,确认思路是否清晰,行文逻辑有无问题,文章里形容的 SAP 知识点,力争做到 100% 正确。除此之外,我也会查看语句是否通顺,是否存在错别字。 为了做到内容的业余,我有三不写。 和 SAP 不相干的技术不写。本人了解得似是而非,不够深刻的 SAP 技术不写。鸡汤文不写。因为继续发表技术文章,我也被邀请退出了一些微信公号主群。意识了一些同仁,他/她们会推敲和剖析比拟受欢迎的的文章类型,写作形式和题目命名形式等特色,而后模拟进行创作,也能取得不错的吸粉成果。然而采取这种形式打造出的文章,曾经和我对本公众号的定位产生了较大的偏差,因而我没有抉择去模拟,今后还是会判若两人保持本人的写作格调。 简直每天都有人在公众号后盾分割我,询问我是否有趣味进行商务单干,即在这个公众号上发一些课程的推广文章。然而我感觉这些课程(比方人工智能学习课程)的受众,和本公众号的粉丝相差很大,因而也没有承受此类单干的申请。 为什么我会开始在微信公众号上书写技术文章这要从我 2009 年还在做 SAP Business ByDesign 规范开发说起。过后我负责这个产品的 Form 和 Field Extensibility 话题,从 2007 入职开始 曾经做了两年多了,也习惯把本人对二者的一些了解和技术剖析,写到公司内网 wiki 上。另外我平时喜爱用 ABAP 写一些小工具,能让本人平时工作中少做些体力活。比方手动在 SAP GUI 里点击实现一个流程,须要十几步的操作,然而写一个 ABAP 报表,而后 F8 执行,一步即可实现。我把这些小工具的名称,所在零碎和应用办法也写到了公司内网 wiki 上。保持一段时间后,我会不断收到一些其余共事的邮件,有的是感激我写的 wiki 帮忙他/她们廓清了工作中的一些疑难,同时就 wiki 内容提出了新的征询;有的则是感觉我写的小工具很实用,然而和他/她们的应用场景还有差距,询问我能不能再加强一下给他/她们团队应用。 ...

May 3, 2021 · 2 min · jiezi

关于sap:关于问题-SAP-ABAP-ME2O-事物码如何是否可以打印发货单如何自己找到答案

我的技术交换群里有人问了这个问题:各位大佬,ME2O如何(是否能够)打印发货单? 其实这个问题齐全能够通过本人 Google 来找到答案。 第一步:在 Google 里输出 ME2O: 因为 Google 的 AJAX 个性,不须要敲回车,后果列表就显示进去了。抉择和发货单相干的第三条:me2o create delivery: 后果就进去了。剩下的就是逐条浏览,学习即可。 没其余的意思哈,有时候 google 搜寻后果也须要认真甄别,但品质比 百度搜寻后果要高一些。 更多Jerry的原创文章,尽在:"汪子熙":

May 3, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-Popover-Directive-构造函数的用途分析

该构造函数位于文件 popover.directive.ts 里: 第 11 行 cxPopOver Directive 施加到 button 元素上之后,运行时,cxPopOver Directive 的构造函数触发。其参数,既有利用程序定义的类型,比方 PositioningService, 也有框架应用的类型,比方 ElementRef,ViewContainerRef 等等。 element: 该 Directive 绑定的页面元素,在这个例子里是 button. viewContainer: 类型为 ViewContainerRef. 三个全是公有属性。 咱们注入这个实例的惟一目标,就是调用其 createComponent 办法。 const containerFactory = this.componentFactoryResolver.resolveComponentFactory( PopoverComponent ); this.popoverContainer = this.viewContainer.createComponent( containerFactory );createComponent 办法须要输出参数为 containerFactory,后者通过另一个注入参数实例 componentFactoryResolver 提供。componentFactoryResolver 能够了解成制作工厂的工厂函数:须要的输出参数是待生产 Component 的定义,在这个例子里为 PopoverComponent: 而 createComponent 返回的数据,类型为 ComponentRef, 蕴含了 PopoverComponent 的实例。 renderer: Renderer2引入该属性,是为了调用其 appendChild 办法,把创立好的 PopoverComponent 实例,增加到 DOM 树中去。 ...

May 3, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-B2B-列表页面的-i-icon-popover-Component-的声明位置

SAP Spartacus B2B 页面的列表页面,一共有 6 个相似 SAP Fiori Language 里的 tile(磁贴): 点击去之后,能看到列表页面有一个绿色 icon 图标,点击之后,弹出一个 Popover Component: 第一个疑难就是:咱们须要在 6 个 不同的 tile 对应的列表页面里,反复定义 6 次 这个 Popover Component 么? 答案是否定的。咱们并没有在 Spartacus 规范代码里,发现相似 User List Component,这提醒咱们,无论 User List,还是 Org List,很可能是重用某一个 Spartacus 共享控件,只是在运行时,动静注入了一些 tile specific 个性。 咱们这个猜测,从运行时渲染出的 HTML 代码里失去了印证:User List 的页面,应用的 Component selector 为 cx-org-list, class 为 orgUser: 而 Org Unit List,应用的同样是 cx-org-list,区别是 class 为 orgUnit: selector cx-org-list 对应的 Angular Component 的 template 实现为:list.component.html: ...

May 3, 2021 · 1 min · jiezi

关于sap:SAP-3D-visual-enterprise-viewer-90-的下载方式

登录 SAP support portal:https://support.sap.com/ 依据关键字 SAP 3D Visual Enterprise Viewer 9.0 搜寻到对应页面: https://support.sap.com/en/pr... 点击 View Additional Product Content in the Launchpad: 进入这个页面: https://launchpad.support.sap... 点击 download: Installations and Upgrades: 单击下图超链接,即可开始下载: 更多Jerry的原创文章,尽在:"汪子熙":

May 3, 2021 · 1 min · jiezi

关于sap:在-SAP-Gateway-Demo-System-ES5-申请用户遇到问题该怎么处理

有敌人试图应用上面的链接,申请 SAP ES5 即 SAP Gateway Demo 服务器的用户时,遇到一些问题。 点击注册链接之后,间接跳转到上图的登录页面了: https://register.sapdevcenter... 这是因为尚未满足在 ES5 注册帐号的前置条件: In order to sign up for an account on the Gateway Demo System, you must have an account on sap.com. To register for an account on sap.com, navigate to https://www.sap.com, and then click on the person icon in the upper left hand corner of the web page. Once your account is set up, you can continue to register.须要首先在 SAP 官网即 https://www.sap.com 注册一个帐号。 ...

May 3, 2021 · 1 min · jiezi

关于sap:深入学习SAP-UI5框架代码系列之八谈谈-SAP-UI5-的视图控件-ID以及其和-Angular-视图的异同

明天是 2021 年 4 月 27 日,周二,SAP 寰球心理健康日。SAP 寰球的员工,明天放假一天。 这不,早在上周五,我所在的 SAP Spartacus 开发团队的开发经理,就贴心地在 Slack 上揭示所有组员,记得享受 "SAP Global Mental Health Day". 对于 SAP 寰球心理健康日的更多介绍,请参阅 SAP中国研究院官网公众号这篇文章:SAP 寰球心理健康日 | 为员工提供精力充电的机会! 作为一个程序员,在明天这一额定的假期里,做点什么好呢?我正好趁此机会,持续书写以前尚未实现的一个 深刻学习 SAP UI5 框架代码的系列文章。 本系列之前的文章(0) SAP UI5利用开发人员理解UI5框架代码的意义 (1) SAP UI5 module懒加载机制 (2) SAP UI5 控件渲染机制 (3) HTML原生事件 VS SAP UI5 Semantic事件 (4) SAP UI5控件元数据的元数据实现 (5) SAP UI5控件的实例数据批改和读取逻辑 (6) SAP UI5控件数据绑定的实现原理 (7) SAP UI5控件数据绑定的三种模式:One Way, Two Way和OneTime实现原理比拟 本文持续填坑。 在文章 一个用于SAP UI5学习的脚手架利用,没有任何后盾API的依赖 介绍的 SAP UI5 脚手架里,创立一个 SAP UI5 Button 控件: ...

May 3, 2021 · 2 min · jiezi

关于sap:使用-yo-命令行向导给-SAP-UI5-应用添加一个新的视图

在 应用 yo 创立好的 SAP UI5 我的项目里,应用命令行: yo easy-ui5 project newview: 输出新的视图名称为 Products,创立新的控制器,以及在 manifest.json 里定义新的 route: manifest.json routing 区域里三个节点削减了新属性: target 区域削减了新的 id 和 name 同名的Products 视图,实现类型为 XML: 把 pattern 里字符串内容去掉,变成"": webapp/view/Mainview.view.xml 是整个利用的外层容器。将 app 标签页里的内容全副删除: 创立进去的 Products 页面的内容为: <mvc:View controllerName="tutorial.products.controller.Products" displayBlock="true" xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc"> <Page id="Products" title="Available Products"> <content> <List items="{/Products}"> <StandardListItem type="Active" title="{ProductName}" /> </List> </content> </Page></mvc:View>应用 aggregation bindings,定义了一个 list. 应用命令行 yo easy-ui5 project newmodel 创立一个新模型: 所有到 data source 的数据申请,都会被发送到这个 url:<webapp URL>/V2/Northwind/Northwind.svc/. ...

May 3, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-Elements-应用的-manifestjson-文件运行时如何被解析的

在 HTML 页面里,有一个 script 标签,locate-reuse-libs.js, 这个 JavaScript 文件触发 manifest.json 的加载与解析: 在加载的 manifest.json 里,咱们能看到 title 对应的place holder 为 i18n.properties 里的 appTitle. 此处, 函数 fnReplace18nText, 将 Resource Bundle 即 i18n.properties 里的 appTitle 的值提取进去: 读取 i18n_en.properties 的 HTTP 申请,Response Headers 的 Content-Type 为 application/octet-stream: 和 GM4 的相比,少了一个 charset=UTF-8: Fiori Elements 规范 template HTTP response 的 content-type 字段: 这里的 text/plain; charset=ISO-8859-1: 更多Jerry的原创文章,尽在:"汪子熙":

May 3, 2021 · 1 min · jiezi

关于sap:SAP-UI5-标准应用的多语言支持-SAP-UI5-运行时语言判定机制

SAP UI5 对多语言的反对个性如下: The language codes according to the de facto standard BCP-47, which are used by most browsers for language identification. As of JDK 1.7 they are also supported by the Java locale class.目前大多数浏览器都反对了事实上的规范,BCP-47 里定义的 language code,用来做语言辨认。例子:de, en-US, zh-Hans-CN The Java Locale syntax that combines a lower case ISO 639 alpha-2 or alpha-3 language code with an ISO 3166 alpha-2 country code. Both codes are combined with an underscore. An arbitrary sequence of variant identifiers (also separated by underscores) can be appended as a third component.另一办法,Java Locale 语法,应用 underscore,即下划线,来连贯 ISO 639 alpha-2 (或者alpha-3)以及 ISO 3166 alpha-2 (或者alpha-3), 前者指代 language code,后者指代 country code. 同时,这两局部之后,能够再通过下划线,连贯额定的 variant identifier. ...

April 28, 2021 · 2 min · jiezi

关于sap:SAP-Fiori-Elements-应用里的-Title-显示的内容是从哪里来的

仅从动态代码剖析来看,title 数据源有两处: flpSandbox.html 里的 title 标签 manifest.json 文件里 sap.app 字段下的 title 字段。下图这个语法并不是 Angular 里数据绑定的 interpolation,而是援用了 i18n.properties 文件里的同名属性。 i18n.properties 文件里的 appTitle place holder(占位符): 运行时发现,应用程序 bootstrap 时,首先显示 html 里保护的值: 最终被 i18n.properties 里的 appTitle 的值所取代。 在函数 fnSetTitleForComponent 里,给 Component 设置 title 属性: 从上面这个函数,能看出 title 属性来自 manifest.json 文件: function getAppTitle(){ return oNavigationControllerProxy.oAppComponent.getManifestEntry("sap.app").title; } 更多Jerry的原创文章,尽在:"汪子熙":

April 28, 2021 · 1 min · jiezi

关于sap:本地开发好的-SAP-Fiori-Elements-应用如何部署到-ABAP-服务器上

这是 Jerry 2021 年的第 29 篇文章,也是汪子熙公众号总共第 300 篇原创文章。 之前 Jerry 的两篇文章,别离介绍了如何在本地应用 Visual Studio Code 创立一个 SAP Fiori Elements 利用,以及应用 Fiori Elements Controller Extension 理念,对该 Fiori Elements 利用进行二次开发的具体步骤。 在没有任何前端开发教训的根底上, 创立第一个 SAP Fiori Elements 利用答网友发问:应用 SAP Fiori Tools 创立的 Fiori Elements 利用,如何进行二次开发?本地开发实现之后,新的问题牵强附会就来了:如何将该本地利用,部署到近程的 ABAP 服务器上? 如果是在以前的 SAP Cloud Platform (当初改名叫 SAP Business Technology Platform) Neo 环境提供的 Full Stack WebIDE 里开发 SAP Fiori Elements 利用,那么间接应用 SAP WebIDE 里的右键菜单,抉择 "Deploy to SAPUI5 ABAP Repository" 即可实现部署。 ...

April 28, 2021 · 2 min · jiezi

关于abap:如何安装最新版本的-SAP-ABAP-Development-Tool-ADT-2021年度更新

下载链接:https://tools.hana.ondemand.c... 首先装置 Eclipse IDE for Java Developers 找到适宜本人操作系统的 Eclipse 安装包: 装置之后,关上Eclipse: Install -> New Softwares, 输出 url:https://tools.hana.ondemand.c... 全副装置: 装置结束之后,新建一个 ABAP Project,本地 SAP GUI 里增加的零碎,会主动带进去: 当初即可用 ABAP Development Tool 登录 ABAP 零碎了。 更多Jerry的原创文章,尽在:"汪子熙":

April 21, 2021 · 1 min · jiezi

关于abap:ABAP-R3-时代著名的-SFLIGHT-航班模型测试数据到了S4HANA时代的进化版

在 SAP R3 或者 SAP ECC 时代工作过的 SAP ABAP 开发参谋们,在 ABAP 学习阶段,肯定都应用过驰名的 SFLIGHT 航班模型。 SAPBC_DATAMODEL 开发包下,蕴含了 SFLIGHT, SPFLI 等一系列 ABAP 数据库表,能帮忙大家学习 ABAP 这门编程语言。 到了 SAP S/4HANA 时代,CDS view 是 ABAP 里举荐的建模形式。天然的,SFLIGHT 这个经典的航班模型,也有了对应的 CDS view 的进化版。 在 SAP 帮忙文档 Downloading the ABAP Flight Reference Scenario 里介绍了该进化版: 这些寄存了 Demo 数据的数据库表和 CDS view,命名空间为 /DMO, 散布在下列 ABAP 开发包里: /DMO/FLIGHT_READONLY/DMO/FLIGHT_UNMANAGED/DMO/FLIGHT_MANAGED/DMO/FLIGHT_DRAFT/DMO/FLIGHT_LEGACY

April 21, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-Elements-List-Report-里的表格类型tableType是如何决定出来的

从 SAP Fiori Elements 实现源代码中的 SmartTable.xml 能看出,ListReport 类型的 SAP Fiori Elements 利用,其表格类型蕴含 4 种: AnalyticalTableTreeTableGridTableResponsiveTable 这些表格类型,运行时是如何计算出来的? 在 preparationHelper.js 的 getNormalizedTableSettings 里能找到答案。 默认的 table 设置的字段 tableType, 如果 gridTable 或者 treeTable 不为空,则表格类型为对应的 GridTable 或者 TreeTable. 依据 entity type 的字符串名称,拿到对应的 entity type json 对象: HeaderInfo:表头信息 默认抉择类型是:SingleSelectLeft 此处可见,如果 OData entity type 的 sap:semantics 值为 aggregate,则 table 类型为 AnalyticalTable, 否则为 ResponsiveTable. 更多Jerry的原创文章,尽在:"汪子熙":

April 21, 2021 · 1 min · jiezi

关于sap:使用-XSLT-给-SAP-PI-增加-CDATA

来自我的 SAP 技术交换群,感激薛老板提供的代码: 代码: <xsl:template match="teaserText_fr"> <xsl:copy> <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> <xsl:copy-of select="*"/> <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text> </xsl:copy></xsl:template>更多Jerry的原创文章,尽在:"汪子熙":

April 21, 2021 · 1 min · jiezi

关于odoo:什么是-SAP-vocabularybased-annotations

咱们在 SAP Fiori Elements 利用的本地注解里,能看到大量如下以 Common 和 UI 为前缀的注解属性: 这些 Common,UI,理论是命名空间(namespace), 定义在本地注解文件(文件夹localService上面) 的结尾局部: <?xml version="1.0" encoding="utf-8"?><edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx"> <edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_COMMON',Version='0001',SAP__Origin='LOCAL')/$value"> <edmx:Include Namespace="com.sap.vocabularies.Common.v1" Alias="Common"/> </edmx:Reference> <edmx:Reference Uri="../../catalogservice;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_UI',Version='0001',SAP__Origin='LOCAL')/$value"> <edmx:Include Namespace="com.sap.vocabularies.UI.v1" Alias="UI"/> </edmx:Reference>com.sap.vocabularies.Common.v1: Common terms for all SAP vocabularieshttps://sap.github.io/odata-v... com.sap.vocabularies.UI.v1:Terms for presenting data in user interfaceshttps://sap.github.io/odata-v... SAP 为 Fiori Elements 定义的所有 OData vocabulary 注解,都能在这个链接里找到: https://sap.github.io/odata-v... vocabulary-based annotations 有两种类型: In-place: 是 OData 服务元数据的一部分。Ex-place: 在 metadata document 之外,由一个注解提供类Annotation Provider Class,简称 APC 额定提供。APC 同 OData 服务的绑定关系,通过事物码 /IWBEP/REG_VOCAN 保护。These annotations are available using a query to the SAP Gateway catalog service, /sap/opu/odata/IWFND/CATALOGSERVICE;v=2/. Entity Set: ‚Annotations‘.例如下图所示: ...

April 18, 2021 · 1 min · jiezi

关于sap:SAP-Fiori-应用里图标Icon的渲染原理和使用技巧

这是 Jerry 2021 年的第 27 篇文章,也是汪子熙公众号总共第 298 篇原创文章。 近日,一位 SAP 合作伙伴的开发人员,向我征询一个对于 SAP Fiori 利用里图标的应用问题。 这位开发人员在 SAP 某规范 Fiori 利用里,发现了一个图标(例如下图红色高亮区域所示的图标), 心愿在本人开发的 Fiori 利用里也应用这个图标,然而不晓得其对应的 sap-icon:// 属性值。 开发人员心愿找到一种繁难的方法,可能依据 SAP Fiori 利用页面上渲染进去的图标,反查出其对应的 sap-icon:// 值。 在 SAP UI5 图标控件 (Icon) 里, 给其 src 属性绑定上对应的 sap-icon:// 值,就能在渲染出的 SAP Fiori 页面上,看到对应的图案了。 比方 sap-icon://syringe 对应下图这个注射器图标。至于运行时,Icon 控件 src 属性值对应的图案是如何被渲染进去的,该技术细节由 SAP UI5 框架去实现,个别的 SAP UI5 利用开发人员无需理解。 本文介绍四种通过 SAP Fiori 页面渲染出的图标,反查出其 sap-icon:// 值的办法。 办法1:在 SAP Icon Explorer 中手动查找SAP 公布了六百多种规范的图标,能间接在 Fiori 利用中应用。这些图标可能在一个称为 SAP Icon Explorer 的网页中对立浏览。 ...

April 18, 2021 · 2 min · jiezi

关于abap:SAP-ABAP-Platform-1909最新版的-docker-镜像

SAP ABAP Platform, 开发者版本,最新的 1909 Docker 镜像,感兴趣的敌人能够在本人机器上装置试试。装置步骤: https://hub.docker.com/_/sap-... 该镜像蕴含的内容见下图,能应用所有ABAP最新个性和编程范式,比方Restful ABAP Programming: 只是本地 Docker环境 运行 ABAP 对配置要求比拟高,如果机器配置不够,能够用 SAP BTP 上收费的 ABAP 环境。百度搜寻我的这篇文章:ABAP开发者上云的时候到了 - 当初大家能够收费应用SAP云平台ABAP环境的试用版了 更多Jerry的原创文章,尽在:"汪子熙":

April 17, 2021 · 1 min · jiezi

关于Cypress:Cypress-的学习笔记

https://docs.cypress.io/guide... describe('Post Resource', () => { it('Creating a New Post', () => { cy.visit('/posts/new') // 1. cy.get('input.post-title') // 2. .type('My First Post') // 3. cy.get('input.post-body') // 4. .type('Hello, world!') // 5. cy.contains('Submit') // 6. .click() // 7. cy.url() // 8. .should('include', '/posts/my-first-post') cy.get('h1') // 9. .should('contain', 'My First Post') })})上述 cypress 代码,很像自然语言。 cypress 的 语法,cy.get('.my-selector'),很像jQuery: cy.get('.my-selector') 事实上,cypress 自身就 bundle 了 jQuery: 反对相似 jQuery 的链式调用: cy.get('#main-content').find('.article').children('img[src^="/static"]').first()只是有一点须要特地留神: ct.get 并不会像 jQuery 那样,采纳同步的形式返回待读取的元素。Cypress 的元素拜访,采取异步形式实现。 ...

April 17, 2021 · 8 min · jiezi

关于sap:SAP-Spartacus-里-对-isPlatformBrowser-API-的使用

window-ref.ts 里的 isBrowser API,封装的是 Angular 规范 API,isPlatformBrowser: 来自 @angular/common: isBrowser(): boolean { // TODO(#11133): Remove condition when platformId will be always provided return this.platformId ? isPlatformBrowser(this.platformId) : typeof window !== 'undefined'; }这是 @angular/common 里规范的 api: https://angular.io/api/common... 而后单击进去之后,看不到具体的实现代码: @publicApi export declare function, 其用法解释: Declare vs. varvar creates a new variable. declare is used to tell TypeScript that the variable has been created elsewhere. If you use declare, nothing is added to the JavaScript that is generated - it is simply a hint to the compiler. ...

April 17, 2021 · 2 min · jiezi

关于sap:在没有任何前端开发经验的基础上-创建第一个-SAP-Fiori-Elements-应用

这是 Jerry 2021 年的第 26 篇文章,也是汪子熙公众号总共第 297 篇原创文章。 本文绝非题目党。 Jerry 前一篇文章 SAP Cloud Application Programming 介绍 - 2021 更新版,介绍了如何应用 SAP Cloud Application Programming,在本地创立一个 OData 服务,并且利用 SAP CAP SDK,在一个主动且长期生成的 Fiori Elements 利用里,生产该 OData 服务,展现其裸露的在线书店的业务数据。这个长期的 Fiori Elements 利用界面如下: 本文 Jerry 持续介绍,如何在没有任何前端开发教训的前提下,利用 SAP 公布的一个规范 OData 服务,通过 SAP Fiori Elements 提供的一系列工具,创立第一个 Fiori Elements 利用,将 SAP 规范 OData 服务裸露的业务数据,显示在 Fiori UI 上。 实现本文例子所需的惟一前提,就是须要在本地装置 nodejs 和 Visual Studio Code 这个代码编辑器。 首先简略介绍 SAP Fiori Elements 的概念。在其问世之前,SAP Fiori 利用的开发只有一种形式,即 SAP UI5 Freestyle 开发方式。 ...

April 11, 2021 · 2 min · jiezi

关于sap:SAP-OData-服务在-gateway-层出错应该如何处理通过一个错误消息来举例说明

在浏览器里拜访如下url遇到谬误:https://jerry.sap.corp:44300/... 如何debug这个谬误,找到哪一行ABAP code抛出的exception?tcode /IWFND/ERROR_LOG, 抉择对应的entry,点Active Source: 在主动navigate到的中央设置断点,刷新UI: 断点触发,察看callstack : line 51的办法,失常状况下返回的参数ls_bep_metadata应该有填充好的metadata: 然而当初遇到了exception: 双击lx_exception,点击这个hyperlink能看到具体是哪一行报的error message: line 39抛的error message: 逻辑就是这个query 2CCSDSLSCONTRIQ不valid。 设置一个watchpoint: 这个FM会基于query生成对应的metadata: 谬误的本源还是在于CDS view 自身的error: 从callstack里能很分明看到: 当更换了另一个CDS view之后,metadata可能胜利取回: 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

April 11, 2021 · 1 min · jiezi

关于sap:可以公开访问的-SAP-gateway-demo-system-ES5002

SAP gateway demo system,给 SAP 开发人员提供了能够 free 应用的 OData 服务,用来学习 SAP Fiori 和 SAP Fiori Elements 相干的开发。 首先在这个链接里注册一个帐号: https://register.sapdevcenter... 之后通过这个链接登陆 ES5/002 零碎: https://sapes5.sapdevcenter.com/ 用来做测试的 OData 服务: https://sapes5.sapdevcenter.c... 更多Jerry的原创文章,尽在:"汪子熙":

April 11, 2021 · 1 min · jiezi

关于cloud:SAP-Cloud-Application-Programming-介绍2021-更新版

这是Jerry 2021年的第 25 篇文章,也是汪子熙公众号总共第 296 篇原创文章。 最近有敌人给我留言,询问对于 SAP Cloud Application Programming(简称CAP) 的相干开发流程。 早在 SAP 2019 TechEd 上,SAP CTO Juergen Mueller 向 SAP 生态圈传递了一条重要信息:身处云时代大环境下的 SAP 从业者,如何抉择最适宜本人的 SAP 开发方式? Juergen Mueller 给出了下图所示的决策树,帮忙大家进行技术选型: 决策树中展现的次要分支解释如下: 如果待实现的需要,可能通过非代码形式来实现,能够尝试工作流(Workflow) 或者低代码解决方案(Low-Code),比方 SAP RAD by Mendix,细节能够参考 Jerry 这篇文章:SAP云平台上的Low Code Development(低代码开发)解决方案。如果只能通过编码实现需求,则能够抉择基于 ABAP 技术栈的 RAP(Restful ABAP Programming) 编程模型,或者非 ABAP 技术栈的 Cloud Application Programming 模型。SAP Cloud Application Programming 模型的精确定义是什么? SAP 官网的定义是:SAP Cloud Application Programming 是一套由开发语言,开发工具和库有机集成的框架,提供了一种高效,快捷,全栈式的企业级服务和利用开发伎俩。CAP 蕴含一套开发最佳实际,让开发者可能专一于利用内具体业务逻辑的开发,而无需分心将精力花在反复的底层基础设施性能的实现下来。 Jerry 在 2019 年 SAP TechEd 完结后,已经写过一篇文章,通过一个在线书店的例子,介绍了 SAP Cloud Application Programming 编程模型的应用形式: ...

April 11, 2021 · 2 min · jiezi

关于cloud:SAP-Cloud-Application-Programming-里的path-注解

题目:SAP Cloud Application Programming 里的@(path:'/browse') service 实现的 .cds 文件源代码: using { sap.capire.bookshop as my } from '../db/schema';service CatalogService @(path:'/browse') { @readonly entity Books as SELECT from my.Books { *, author.name as author } excluding { createdBy, modifiedBy }; @readonly entity ListOfBooks as SELECT from Books excluding { descr };这个@(path:'/browse'),相当于 Spring 里的@Path 注解。 as SELECT from my.Books : 和 SAP ABAP CDS view 语法相似,指定 entity 的主数据源。my 是 别名,残缺的数据库表名为 sap.capire.bookshop,通过 using 关键字,将表名同别名关联起来。 ...

April 11, 2021 · 1 min · jiezi

关于sap:SAP-Spartacus-定义在appmodulets里的providers依赖注入元数据何时得到处理

我基于 SAP Spartacus library创立了一个自定义的Storefront实现。在其app.module.ts里,我采纳自定义的MyCurrentProductService,去替换 SAP Spartacus 规范的CurrentProductService 实现: 通过AppComponent的构造函数引入OccCartAdapter的依赖: 启动利用,在解析并加载AppComponent时,检测到输出参数的CurrentProductService是通过 Angular 依赖注入提供的,因而执行getOrCreateInjectable 办法: 留神这里的token 指向class CurrentProductService: 而 CurrentProductService的实例化,产生在下图的代码地位。 其中1和2两处的token指向不一样: 第二处的token,曾经指向自定义的product service了: OccCartAdapter也能够通过同样的形式注入: 更多Jerry的原创文章,尽在:"汪子熙":

April 11, 2021 · 1 min · jiezi

关于abap:SAP-基于-ABAP-实现的-gateway-框架里为什么默认返回100条数据

Created by Wang, Jerry, last modified on Jan 16, 2015$skip=0&$top=100ODataListBinding.js里,this.loadData的输出参数为100:this.oModel.iSizeLimit 为100:在 sap-ui-core-dbg.js里,同样能看到上面高亮进去的硬编码代码: this.iSizeLimit = 100;

April 11, 2021 · 1 min · jiezi

关于abap:ABAP数据结构激活时的错误关于数据类型QUAN和其reference-field

看看这种谬误音讯的一个例子: combination reference table/field XXX does not exist 引起谬误的字段类型为LOSMENGE,字段名为INSLO: 该字段的根本数据类型(Data Type)为 QUAN,长度为13. 依据ABAP帮忙文档, QUAN类型须要和某种单位字段联合在一起,用于形容理论业务流程中的数量,比方 一本书,一件啤酒,一捆绳子等等。 A quantity field is a component of a structure, database table, or view of type QUAN defined in ABAP Dictionary, used to include a quantity in a specific unit. A quantity field must be associated with a unit key of a structure, database table, or view which determines the unit and the number of fractional digits. A unit key is a component of a structure, database table, or view of type UNIT defined in ABAP Dictionary and can contain a unit ID from the database table T006.依照ABAP帮忙文档里的规定,类型为QUAN的字段,必须设置一个类型为 UNIT 的字段作为单位,二者独特形容“数量”这个概念,短少单位,数量单位的语义就不残缺。 ...

April 6, 2021 · 2 min · jiezi

关于abap:ABAP初学者如何系统地学习ABAP编程

有很多 ABAP 的从业人员,在各种社交媒体平台上,向我询问过这个问题。 先说说我本人的理论状况。我是2007年硕士毕业退出 SAP 成都研究院的,本科和研究生做的我的项目,始终是用 C/C++ 开发。进入 SAP 之后,从事 SAP Business ByDesign 的规范开发,因而须要从零开始学 ABAP. 我是怎么和SAP结缘的 - Jerry的SAP校园招聘之路我过后是依照应用 C/C++ 的教训来学习和使用 ABAP的,后果可想而知,各种不适应,我也已经埋怨过。 可能出乎很多人意外,咱们过后并没有加入过残缺,正规的ABAP外部培训,都是在工作中一点一滴学习的,也就是从批改一个其余共事写好,可能失常运行的程序开始,而后由我在下面增加新性能。比方我须要先把他人写的程序看懂,而后找到大略在什么中央增加代码,最初在该处加个新的 IF 分支,外面写几行业务代码,OK. 这样过了一段时间,我感觉本人尽管能胜任工作,然而对 ABAP 不足系统地理解,很多知识点都把握得四分五裂,基本不成体系。于是我就花业余时间,把 ABAP 规范培训的系列教程,BC400这些,全副自学了一遍,外面的例子,本人在零碎里手动敲了一遍。 次要是看上面这三本书: BC400: ABAP workbench介绍BC401: ABAP 对象BC402: ABAP 进阶 有的敌人始终让我举荐一些 ABAP 的书籍,然而因为我在 ABAP 学习过程中,从没有看过国内出版的 ABAP 书籍,因而没有发言权,感觉不能贸然举荐,免得误导大家。另一方面,我是真的感觉,BC400 ~ BC402 这三本培训教材,是我集体认为最权威,最零碎学习 ABAP 的资料。 有的敌人可能感觉循序渐进学习规范教材,速度太慢,不是一个速成的好方法。我批准这个观点:ABAP 无奈速成。换个角度想,如果一门技能能够速成,那么它的含金量,就要打个问号了。 实际上,我从 2007 年开始接触 ABAP,到了 2014年的时候,我曾经敢给我的领导说,我有信念解决工作中遇到的任何 ABAP 层面的问题,只有给予我足够的工夫。 我在微信平台发表的ABAP合集 除了看 ABAP 培训教材之外,本人多入手,多写代码也十分有必要。 ABAP 零碎自身,蕴含了大量的实例程序,初学者能够从浏览这些实例程序,而后在其根底上对其批改,来查看成果。 用关键字 DEMO 和 BC, 在 SE80 事物码里搜寻 ABAP 开发包,就能找到大量蕴含了示例程序的开发包。 ...

April 6, 2021 · 1 min · jiezi

关于redux:如何在SAP-Spartacus-category-页面里拿到当前的category信息

需要https://stackoverflow.com/que... 实现原理AFAIK, currently we do not have anything similar to CurrentProductService for current category.以后 SAP Spartacus 规范实现里,不足相似 CurrentProductService 对产品明细页面那样的反对。 Looking at the implementation of CurrentProductService you can see that it is using RoutingService and it's getRouterState() method (picture 1).钻研 CurrentProductService 的实现代码,发现其实现原理是,首先利用 RoutingService,从 RouterState 中拿到以后页面的产品code,而后应用另一个API,productService, 来读取产品的明细数据。 You can create something similar for current category, because the router state consists of category informations (as seen below on picture 2).因而咱们能够采取相似的思路,从 category 页面的State里,提取出category明细信息: ...

April 6, 2021 · 1 min · jiezi

关于sap:SAP-Cloud-for-Customer-如何直接消费S4HANA-API

最近有敌人在微信上问我本文题目这个需要,如何在 SAP Cloud for Customer 里实现。正好我在 2018年底加入的 SAP 和沈阳自动化研究所单干设计的一个工业 4.0 示范零碎 POC 中,已经用到了这个技术,本文就来说一说。 对于这个 POC 的详情,在 SAP中国研究院官网公众号这篇文章里有具体叙述: SAP中国研究院&中科院沈阳自动化所重磅公布第三代自适应模块化智能生产解决方案 SAP 中国研究院和中科院沈阳自动化研究所(沈自所)联结打造了一套自适应模块化智能生产解决方案,作为单方单干的第三代工业4.0智能制作解决方案,其生产组织模式采纳世界领先的模块化生产概念,业务流程涵盖从个性化产品销售订单的创立到车间仓储和物料治理和生产执行与交付,在车间里传统的生产线被解耦为模块化生产单元,其机械构造、工业网络、生产工序能够依据产品设计的变动,现场设施状态,自适应实现重构。革新老本大大压缩,调整周期显著缩短。同时,实现了智能仓储零碎、智能生产零碎、智能机器人、智能 AGV 运输车辆等零碎的高度集成和高效运行,这也是 SAP 最新提出的「从设计到运维(D2O,From Design to Operate)」的工业互联网全业务流程中的重要环节。 上面这个 POC 视频,是过后的我的项目兼产品经理,我的研究院共事 Cai Carol 制作的。视频最结尾,展现的是从 SAP Cloud for Customer里创立销售订单。SAP C4C 销售订单创立结束之后,点击订单明细页面的一个按钮,触发 S/4HANA 的交货单(Outbound Delivery)创立,进而触发接下来的制作流程的执行。 其中SAP Cloud for Customer 局部的定制开发是由我实现的,外面就波及到了本文题目形容的场景,即 SAP Cloud for Customer 里间接调用 SAP S/4HANA 的 API. 整个定制开发局部均可在 C4C 的 Cloud Application Studio 里实现,这意味着 Partners 也能够实现相似场景的开发。 https://v.qq.com/x/page/e3236... 上面是具体的实现步骤。 (1) 首先在 S/4HANA 里开发一个 API,逻辑是接管从 SAP Cloud for Customer 传过来的 Sales Order ID,读出其蕴含的行我的项目,而后调用 SAP S/4HANA 的交货单创立函数,为这些行我的项目创立交货单。 ...

March 28, 2021 · 2 min · jiezi

关于sap:SAP-Cloud-for-Customer-CloudC4CApplication-Studio里的代码调试

和其余IDE应用形式一样,首先在须要设置断点的代码行数后面双击,设置断点: 应用菜单Debug->Start Debugging,切换成调试模式: 看到Show output from:Debug里,显示了提示信息: Debugger has been started for user WANGJERRY1: 之后,一旦应用该user在UI上操作,只有该UI操作会触发咱们设置断点的ABAP script 文件的执行,则断点会主动触发: 能够和其余IDE一样,应用Cloud Application Studio提供的调试工具,比方查看变量值,查看callstack,Step Out,Step Over等等。 更多Jerry的原创文章,尽在:"汪子熙":

March 28, 2021 · 1 min · jiezi

关于sap:SAP-C4C-UI-Designer里如何消费Object-Value-SelectorOVS

先看最初实现的成果: 我有一个字段,用户既手动输出Employee ID,也能够点击字段的矩形框,关上Value help: 假如我选中ID为1的Employee,则其first name和last name,会主动填充到UI 对应字段上,即SAP 从业人员常常说的“主动带进去”。 上面是具体的实现步骤。 依照这篇文章SAP Cloud for Customer(C4C)里如何定义跨BO间的association的介绍,定义出ParkingSpace这个子节点和ToEmployee association: 在UI Designer里,将要调配Object Value Selector的UI字段,绑定到BO 子节点ParkSpace的ParkingSpace_AssignedEmployeeID下来。残缺绑定门路如下: ./InputField->http://refsystems.sap.com/YS5... Appearance下的Display Type,保护成Object Value Selector: Value Help指定成:/SAP_BYD_APPLICATION_UI/publicovs/employeeid/EmployeeID.OVS.uicomponent 将主动贷进去的Given Name和Family Name,别离绑定到ToEmployee association上指向Employee节点的GivenName和FamilyName字段上。 残缺的绑定门路别离为: ./GivenName->http://refsystems.sap.com/YS5..../FamilyName->http://refsystems.sap.com/YS5...最初,在子节点ParkingSpace上,创立AfterModify并实现: ABSL实现最外围的逻辑就是,将用户输出的employee ID作为输出参数,调用employee BO提供的QueryByEmployeeAttributes,去Cloud for Customer数据库查问Employee实例数据,并将其Root节点返回给自定义BO的toEmployee association. 以上就是残缺的实现步骤。 更多Jerry的原创文章,尽在:"汪子熙":

March 28, 2021 · 1 min · jiezi

关于sap:SAP成都研究院小伙伴们开发的一个SAP-C4C-POC-通过名片扫描的方式录入联系人数据到系统

该POC实现的性能:通过名片扫描的形式录入联系人数据到零碎,由SAP成都研究院Cloud for Customer开发团队开发。 登录C4C零碎,抉择Card Scan工作核心: 通过C4C规范的attachment控件将须要扫描的名片以图片的格局上传到SAP C4C零碎: 待扫描的图片如下: 名片上传胜利之后,点击Scan Card按钮: 扫描结束后,名片信息主动录入C4C零碎,成为Contacts数据: 更多Jerry的原创文章,尽在:"汪子熙":

March 28, 2021 · 1 min · jiezi

关于sap:SAP-Cloud-for-Customer-标准培训课程

常常有敌人在我的SAP技术交换群或者我的公众号==汪子熙==给我留言,询问一个ABAP开发人员如果想学习SAP Cloud for Customer,应该从哪些方面动手。 这里把SAP官网的和SAP Cloud for Customer相干的培训课程全副列举如下,供大家参考。每门课程波及到的常识,实际上在==https://help.sap.com== 上都可能查看,并且能以PDF的形式下载到本地。 网站:https://training.sap.com/ @TOC C4H440 - SAP Cloud for Customer Administration (Previously known as C4C10)课程内容 Introduction to SAP Cloud for CustomerArticulating the Functional Capabilities of SAP Cloud for CustomerStarting the ProjectPreparing for the Implementation ProjectDescribing Fine TuningDescribing Q-GatesAccount and Contact ManagementUnderstanding the Basic Functions of Account and Contact ManagementProducts and Price ListsUnderstanding Products and Price List Concepts in SAP Sales CloudOrganizational StructureExplaining the Role of an Organizational Structure in the SolutionTerritory ManagementDefining Complex Territory Hierarchy StructuresUser and Role ManagementMaintaining Employees and Explain What a Business User IsData MigrationGuiding Your Customer on Which Data Should Be MigratedIntegrationDescribing Integration Scenarios with CRM and ECCDescribing Integration with FSMDescribing Integration with Microsoft OutlookDescribing the Benefits of Integration with Social MediaNotifications, Workflow, and ApprovalsSetting Up an Approval Process for OpportunitiesPersonalization and ExtensibilityDescribing How to Use Personalization and AdaptationAnalytics FrameworkExploring the Standard Reports and Create or Modify Views for Those ReportsMobileDescribing the Different Mobile Access OptionsSolution WalkthroughPreparing an SAP Cloud for Customer Environment for Solution WalkthroughPreparing for Go-LiveDescribing the Necessary Go-Live Activities课程介绍 ...

March 28, 2021 · 7 min · jiezi

关于sap:SAP-C4C-2102版本如何使用Key-User-Tool创建扩展字段-extension-field

点击Start Adaptation,进入Adaptation模式: 进入order header区域,点击drill down: 点击Add Field: 这里会显示一个表格,列举了零碎以后创立的所有extension field. 点击Create Fields: 保护Business Context,即该扩大字段,会呈现在Sales Order UI的general Information区域。设定Extension field的Label和数据类型Type. Technical Name会依据Label主动决定进去。 创立胜利后: 就呈现在屏幕上了: 最初,退出Adaptation Mode即可: 如图: 更多Jerry的原创文章,尽在:"汪子熙":

March 28, 2021 · 1 min · jiezi

关于sap:一步步使用SAP-C4C-Cloud-Application-Studio创建一个BO和对应的屏幕

关上SAP C4C Cloud Application Studio, 进入Solution Explorer,右键菜单里抉择Add -> New Item: 新建一个Business Object,取名CarPark: 源代码如下: import AP.FO.BusinessPartner.Global;import AP.Common.GDT as apCommonGDT; businessobject CarPark // *Further Development* // declare an error message that is called if the BO fails validation // raises Message_Car_Park_Full { // Root node must not be specified, it is created implicitly // // Add elements here. //// To declare an element as alternative key, use the [AlternativeKey] // annotation.//Please note: // - An alternative key of type UUID exists implicitly for each node, enabling // the node to be used as an association target. // - The QueryByElements query is created automatically for each node. // Code completion is available with CTRL + SPACE. // *Further Development* // define an error message to be displayed if the BO fails validation // message Message_Car_Park_Full text "The car park is full - no spaces available"; // Car Park ID - (the company may have multiple car parks) // - therefore we use this ID to identify the individual car park element CarParkID : ID; // additional information on the car park element CarParkName : LANGUAGEINDEPENDENT_LONG_Text; element CarParkDescription : LANGUAGEINDEPENDENT_LONG_Description; element Number_of_ParkingSpaces : IntegerValue; // *Further Development* // add an element to display how many parking spaces are available // element Number_of_ParkingSpaces_Available : IntegerValue; // declare an action to calculate the available car spaces // action Update_AvailableParkingSpaces; // *Further Development* // add an element to record location information // this field is used with a URL mashup to display the location of the car park // element CarParkLocation : LANGUAGEINDEPENDENT_MEDIUM_Description; // each car park will have multiple parking spaces // we create a node with 0 to n parking spaces node ParkingSpace [0,n] { // each parking space is assigned a unique identifier element ParkingSpaceID : ID; // display the ID of the Employee assigned to the parking space element ParkingSpace_AssignedEmployeeID : ID; // a parking space may be designated as a "Disabled Friendly" parking space element ParkingSpace_Disabled : Indicator; // is there an electric charging station for this parking space ? element ParkingSpace_ElectricChargeStation : Indicator; // display the license plate number of the employee's car element Vehicle_RegistrationNumber : LANGUAGEINDEPENDENT_MEDIUM_Text; // for a multi-level car park, we have the possibility to specify a level number element ParkingSpace_Level : NumberValue; // we need to create an association to the SAP BO "Employee" // this allows us to include elements from the Employee BO in our screens // a parking space may be associated to at most one employee association ToEmployee [0,1] to Employee; }}激活该BO,确保Activation Status为Runtime Objects up to date: ...

March 28, 2021 · 3 min · jiezi

关于cloud:SAP-Cloud-for-Customer里BusinessPartner-Customer和Employee这些BO的区别

Business PartnerDefinitionA person, an organization, or a group of persons or organizations, in which a company has a business interest. Business Context and UseThe Business Partner business object provides business partner master data that is used independently of the application-specific business processes. A business partner can therefore have various functions that do not depend directly on business processes in sales or purchases.The business object predominantly contains general business partner data such as: ...

March 28, 2021 · 6 min · jiezi

关于sap:如何使用SAP-C4C-Repository-Explorer里的BO-test-shell

在SAP研究院做过SAP Business ByDesign和SAP Cloud for Customer后盾开发的小伙伴们,都晓得ABAP 里 BO test shell这个工具。 在C4C Cloud Application Studio里也存在相似工具。 关上repository exploerer: 以CustomerQuote为例,找到要执行的Query节点,右键: 从SAP C4C UI上找一个Sales Order的ID复制下来:9000000490 填到query参数里: 执行的后果: 在执行后果里,也能够顺着Association,拜访该BO实例其余子节点的数据,十分不便: 点击Generate Code按钮,能够看到主动生成的应用Query拜访该BO实例数据的ABSL代码: 更多Jerry的原创文章,尽在:"汪子熙":

March 28, 2021 · 1 min · jiezi

关于abap:使用ABSLABAP-Script-Language完成SAP-C4C-里Customer-Quote以及行项目的增删改查

The user roles are Studio Administrator, Developer, and Business User. PDI_ADMINISTRATION / AdministrationPDI_DEVELOPMENT / Development 对于Sales Order creation来说,Buyer Party以及行我的项目的Product保护是必须的。 通过TypeCode辨别CustomerQuote是Sales Order还是Sales Quote: 应用ABSL创立Sales Order的代码: import ABSL;import AP.CRM.Global;// ABSL example for CustomerQuote// define CustomerQuote root nodevar elCustomerQuote_Root: elementsof CustomerQuote;var instCustomerQuote;// define CustomerQuote item nodevar elCustomerQuote_Item: elementsof CustomerQuote.Item;var instCustomerQuote_Item;// CustomerQuote: maintain Business Object type - optional (default value: 30 = Sales Quote set by system; other values: 2059 = Sales Order)elCustomerQuote_Root.TypeCode = "30";// CustomerQuote: maintain description - optionalelCustomerQuote_Root.Name.content = "PSM CRM ABSL Test - CallCustomerQuoteExample";// CustomerQuote: maintain external reference - optionalelCustomerQuote_Root.BuyerID.content = "PSM CRM ABSL Test - Example_01"; // CustomerQuote: create new instance instCustomerQuote = CustomerQuote.Create(elCustomerQuote_Root); // CustomerQuote: maintain buyer party - mandatory// the instance of node Party is created automatically by the systeminstCustomerQuote.BuyerParty.PartyKey.PartyID.content = "MC9785"; // CustomerQuote: maintain item with product // CustomerQuote: set item ID or any other attribute of the node Item in order// to be able to enter a product later onelCustomerQuote_Item.ID = "10"; // CustomerQuote: create item instanceinstCustomerQuote_Item = instCustomerQuote.Item.Create(elCustomerQuote_Item); // set product identifier - mandatoryinstCustomerQuote_Item.ItemProduct.ProductKey.ProductID.content = "MCF-0001"; // change quantity - optional if ( instCustomerQuote_Item.FirstRequestedItemScheduleLine.IsSet()) { // set product quantity and UOM (will be defaulted by the system if not set) instCustomerQuote_Item.FirstRequestedItemScheduleLine.Quantity.content = 2; instCustomerQuote_Item.FirstRequestedItemScheduleLine.Quantity.unitCode = "EA";}读取CustomerQuote的ABSL代码: ...

March 28, 2021 · 4 min · jiezi

关于sap:SAP-Cloud-for-Customer-Work-Center工作中心的实现源代码

咱们关上一个SAP Cloud for Customer的工作核心时,能够在Chrome开发者工具里看到对应的HTTP申请:C4C UI从C4C后盾读取工作核心的数据: 从申请的HTTP header里能看到工作核心(wocid)和工作核心视图(viewid)在C4C Xrep存储系统里的存储门路: /BYD_COD/SalesOnDemand/SalesOrder/UI/COD_SALESORDER_WCVIEW.WCVIEW.uiwocview/BYD_COD/SalesOnDemand/Opportunity/UI/COD_Sales_WCF.WCF.uiwoc 在UI designer里点击这个按钮能够将UI 工作核心的源代码下载到本地查看: 源代码里蕴含的所有工作核心视图信息: 下拉列表里选中OberonCentreStructure,而后点击ViewSwitches的Collection按钮: Scoping Rule和Scoping Switch: 更多Jerry的原创文章,尽在:"汪子熙":

March 23, 2021 · 1 min · jiezi

关于sap:SAP-Cloud-for-CustomerC4C后台ABAP系统的System-ID和client-ID

之前Jerry已经写过一篇Salesforce平台反对多租户Multi tenant的外围设计思路 SAP的云产品,SAP Cloud for Customer也是反对多租户的,实践上若干个客户可能共享同一台(或者同一组) ABAP应用服务器的若干个不同的ABAP client. 以后C4C客户所属的ABAP 服务器 SID,和client信息,在cookie里能够看到。下图的例子,SID和client ID,别离为LNW,009. SAP support部门的工作人员,拿到这些信息后,能够通过特定的工具登录到ABAP后盾零碎来反对客户。C4C Partners和客户自身,是没有权限登录ABAP后盾的,这也是基于ABAP的SAP Cloud产品和SAP传统On-Premises产品相比,operation层面的差别体现。

March 23, 2021 · 1 min · jiezi

关于sap:SAP-Cloud-for-CustomerC4C前台显示的数据是如何从后台读取的

以SAP Cloud for Customer SalesOrder的搜寻页面为例: 咱们看到的页面里显示的数据,依然是C4C基于的SAP UI5实现里,采纳AJAX调用,从C4C后盾零碎读取回前台的。 将上图高亮json申请保留到本地细细查看: 这个json数据格式的构造反映了SAP C4C什么样的数据模型呢? 答案是SAP C4C UI模型的data model标签页里看到的数据结构: 上图的字段和咱们从Chrome开发者工具里察看到的JSON data model的字段,具备一一对应的关系: 那么咱们在UI上看到的Sales Order 表格里显示的数据,存储在json 模型里什么中央呢? 首先在data model标签页里,得悉UI上的数据显示,来自BO CustomerOrder: 而json数据里的CustomerOrder,分为三局部: FieldCatalogElementsHeader FieldCatalog蕴含了CustomerOrder这个BO每个字段的索引号: 比方索引19代表UUID字段。 Elements局部的构造,蕴含了SAP C4C UI上显示的理论数据。 SAP Cloud for Customer UI上的数据采取分页显示,总共281条sales order,分10页显示,每页显示30条数据: 索引19代表的字段正是UUID,采取索引值的设计,防止了间接应用字段名来形容每条记录的key-value,减小了最初从后盾传递到前台的json数据尺寸: 更多Jerry的原创文章,尽在:"汪子熙":

March 23, 2021 · 1 min · jiezi

关于sap:如何下载SAP-Cloud-for-Customer-UI技术模型的XML源代码到本地

咱们用SAP Cloud for Customer的UI Designer关上某个UI模型之后,点击工具栏上的"Show Component XML"按钮: 就能够把整个UI Component的xml实现源代码全副下载到本地: SAP Cloud for Customer(C4C)搜寻UI的层级构造实现: UXViewViewContainerRegionViewPageContainerAdvancedListPaneUXView: ViewContainerRegion: View: Page Container: AdvancedListPane: 咱们能够在Sales Order 搜寻模型的xml源代码里找到对应的节点和其属性: xml模型源代码里的这些层级后果,也对应在最初渲染出的html源代码里: 同样,SAP C4C UI Designer UI模型面板里看到的这些属性,其实都是UI Designer IDE,依据UI xml源代码绘制而成的。比方名叫Ev_RefreshList的event handler, 在xml源代码里对应的地位: 更多Jerry的原创文章,尽在:"汪子熙":

March 23, 2021 · 1 min · jiezi

关于crm:如何查找SAP-Cloud-for-Customer-UI页面对应的技术模型明细

SAP Cloud for Customer的每个UI模型都会被调配到一个Work Center view(工作核心视图)里,而每个工作核心视图又会被调配到一个工作核心中去(Work Center). 以下图左边绿色区域的Sales Order 搜寻 UI为例,该UI页面位于同名的Sales Orders工作核心视图中。如果查找到这个搜寻UI对应的技术模型名称呢? 浏览器关上Sales Orders工作核心视图之前,先开启Chrome开发者工具,切换到network标签页,而后进入Sales Orders搜寻页面,在network 里察看到HTTP申请,其中蕴含WCVIEW.WCVIEW字符串的就是C4C前台从C4C后盾读取Sales Order 工作核心视图的模型数据申请: 而蕴含OWL字符串的就是Sales Order 搜寻页面的UI模型HTTP申请: https://xxxx.c4c.saphybrisclo... 其中UI模型的门路:/BYD_COD/SalesOnDemand/SalesOrder/UI/COD_SALESORDER_OWL.OWL.uicomponent 沿这个门路在UI Designer里,就能关上Sales Order 搜寻UI的模型。 更多Jerry的原创文章,尽在:"汪子熙":

March 23, 2021 · 1 min · jiezi

关于sap:SAP-Cloud-for-Customer的前世今生

SAP Cloud for Customer(依照性能上分成SAP Sales Cloud和SAP Service Cloud)同 SAP Business By Design有很深的渊源。 2006年时,SAP汇集了寰球研发部门的精英,开始了一款新的面向中小企业的基于云的管理软件,代号为A1S,意即All in one service,这就是起初问世的SAP Business ByDesign. SAP Business ByDesign后盾基于ABAP编程语言,运行于所谓的NGAP平台,即Next Generation Application Platform之上。 SAP Business ByDesign涵盖了中小企业运作的很多端到端流程,比方Finance, HR, OTC, PP, MM等,当然也蕴含局部CRM性能。这些性能的后盾实现,保护在NGAP一个叫做Application Layer的平台层里。 而SAP Cloud for Customer重用或者说借鉴了SAP Business ByDesign的AP Layer的模型,性能上专一于CRM畛域的Sales和Service性能实现。 上面这张图是SAP Cloud for Customer UI Designer Xrepository里的UI模型列表,从中能够看到有不少的模型名称依然带有BYD的前缀。 BYD_COD: COD是Content On Demand的缩写。 更多Jerry的原创文章,尽在:"汪子熙":

March 23, 2021 · 1 min · jiezi

关于sap:SAP-Commerce-Cloud-电商云-UI-的懒加载功能

最近工作中解决了 SAP Commerce Cloud (电商云) UI 的一个懒加载 (Lazy Load) 性能的问题,这里把本人学到的货色做个记录。 UI 懒加载,有时又称惰性加载,提早加载,是和贪心加载 (Eager Load) 截然相同的一种 UI 组件加载策略。 假如一个利用的 UI 由 A,B,C 若干视图组成,采纳贪心加载,则所有视图的实现代码,在 build 阶段会被合并到一个代码块中,在 UI 加载畛域里,这种代码块的术语为 chunk. 在贪心加载模式下,所有视图实现代码合并成的繁多代码块,通常称为 main chunk. 在用户浏览器拜访利用的任何一个视图,比方视图 A 时,蕴含了该利用所有视图实现代码的 main chunk 会被浏览器加载。当利用的规模趋于简单时,采纳贪心加载模式 build 而成的 main chunk 尺寸也随之变大,会影响利用的首屏加载工夫。 假如一个利用的局部视图和首屏加载无关,而是用户关上利用首页后,须要点击某些链接,跳转之后能力关上。为了缩小利用的首屏加载工夫,咱们能够思考将这部分视图采纳懒加载的形式,别离进行 build,从而生成多个 chunk, 并按需被浏览器加载。 上面用 SAP Commerce Cloud (电商云) 为例来具体阐明。 Jerry 之前的文章 从一个理论的例子登程,谈谈 SAP Commerce Cloud (电商云) 的 UI 自定义开发 已经提到了购物车页面的自开发场景。 这个购物车页面,须要用户胜利加载 Commerce Cloud 首页后,点击右上角的购物车图标才可能显示: 然而默认状况下,该购物车的自开发组件,MyCartComponent,还是被默认打包到 main chunk 内。咱们能够用文本编辑器,关上名为 main-es2015.js 的main chunk 查看其内容。 ...

March 20, 2021 · 1 min · jiezi

关于sap:SAP-UI的加载动画效果和幽灵设计Ghost-Design

这是Jerry 2021年的第 14 篇文章,也是汪子熙公众号总共第 285 篇原创文章。 在本篇文章之前,Jerry 印象最深的幽灵,应该要算《星际争霸I》里人族可能隐形的地面单位 Wraith( 幽灵战机 ),以及能施放核弹的 Ghost( 幽灵特工). 上周 Jerry 做 SAP Spartacus 开发时,接触到一个新的和幽灵相干的术语: Skeleton Design(Ghost Design) 读了帮忙文档后,发现该名词对我来说只不过是旧瓶装新酒罢了。 本文目录SAP UI5 Busy Dialog应用代理模式( Proxy Pattern ) 进步 SAP UI5 大尺寸图片的加载体验SAP Spartacus Spinner 控件SAP Spartacus 幽灵设计我对应用软件的 User Experience 即用户体验畛域知之甚少。在 SAP 外部,有专门的用户体验设计师负责这个畛域,因而我也不分明 Skeleton / Ghost Design 精确的中文翻译是啥,权且就直译成“幽灵设计”吧。 在我看来,无论是幽灵设计,还是之前 SAP UI5 提供的页面加载动画成果,都是改善用户应用体验的一种伎俩:提醒用户以后页面正在加载后盾数据,或是执行一些比拟费时的操作。 SAP UI5 Busy DialogJerry 从2014年开始应用 SAP UI5 进行 Fiori 开发,经验了 Fiori 1.0 到 2.0 的版本迭代。还记得解决的第一个 CRM Fiori 利用 My Opportunities 的 bug,症状就是批改了 Opportunity 数据之后,用户能够短时间内疾速点击下图的 Save 按钮,从而产生多个到 CRM 后盾的 OData 保留申请。 ...

February 21, 2021 · 2 min · jiezi

关于sap:SAP-GUI-最新版本770于2021年1月29日发布了

2021年1月29日,SAP GUI 7.70公布。蕴含了新的Fiori 3 Quartz主题,终于和其余风行IDE一样,反对暗黑格调的编程背景了。该版本也第一次同时反对基于微软Edge / IE的HTML Control,改善了多显示器环境里的缩放成果。 下载链接如下. 更多Jerry的原创文章,尽在:"汪子熙":

February 21, 2021 · 1 min · jiezi

关于sap:SAP-S4HANA-的30天免费试用版

登录网站https://www.sap.com, 点击Free Trials: 抉择SAP S/4HANA onPrem Free trials,点击:Try now: 登录用户的邮箱会收到一封邮件,蕴含SAP Cloud Appliance Library 拜访该SAP S/4HANA实例的url: 点击 I Accept 接管用户协定: Cloud Appliance Library新建Solution实例: 留神,客户必须本人提供运行该SAP S/4HANA的Cloud Provider的subscription: 更多细节能够参考我的微信文章: SAP官网到底提供了收费的S4HANA试用版没有?更多Jerry的原创文章,尽在:"汪子熙":

February 21, 2021 · 1 min · jiezi

关于sap:SAP-UI渲染模式客户端渲染-VS-服务器端渲染

往年因为疫情起因,SAP一年一度的DKOM(Developer Kick-Off Meeting)切换成了线上模式,刚刚于昨天圆满闭幕。 工夫过得真快,去年的DKOM好像还历历在目:SAP成都研究院数字翻新空间小伙伴们在2020 SAP上海DKOM. 然而Jerry昨天没有太多工夫去在线观看,只因为...... 咱们团队昨天收到了一个优先级为VERY HIGH的客户incident: 这个incident是客户在应用SAP Spartacus并试图启用其服务器端渲染模式(Server Side Rendering,简称SSR)时,遇到了问题,因而我有机会回顾之前应用过的SAP UI开发技术里,对于客户端渲染(Client Side Rendering,简称CSR)和服务器端渲染的知识点。 回顾目录SAP ABAP Webdynpro - 服务器端渲染SAP BSP / WebClient UI - 服务器端渲染SAP UI5 - 客户端渲染SAP Commerce Cloud Accelerator UI - 服务器端渲染Jerry手头正在解决的incident - SAP * Spartacus Angular UI - 客户端渲染 & 服务器端渲染Jerry 2018年已经写过一篇文章,SAP UI和Salesforce UI开发漫谈 ,对我已经工作过的SAP产品里,所应用过的UI开发技术做了泛泛的介绍。 而本文,则是对这些UI技术采纳的页面渲染形式做一个简略的总结。 客户端渲染 VS 服务器端渲染这组概念的比拟,在网上有泛滥文章介绍。 客户端渲染,即客户端发动HTML网页申请时,服务器不做任何解决,间接返回动态的HTML文件。客户端收到后,执行JavaScript,生成DOM,插入HTML页面,实现最终页面的绘制。 客户端渲染模式里,视图源代码生成,页面路由,以及利用的业务逻辑,全副放在客户端实现和运行执。服务器只负责HTML页面的长久化存储,因而客户端渲染利用又称为胖客户端利用(Rich Client Application). 而服务器端渲染模式里,视图源代码生成,页面路由,以及利用的业务逻辑均在服务器端实现,客户端只负责接管到服务器端渲染好的HTML源代码并解析。 两种渲染形式各有优缺点,及其利用场合。 SAP ABAP Webdynpro - 服务器端渲染利用开发人员以所见即所得的形式开发ABAP Webdynpro的视图,其源代码存储于ABAP零碎的数据库表里。ABAP Webdynpro的视图同用户的交互通过Action和Event实现,交互逻辑由ABAP实现,在ABAP服务器端执行。 ...

January 29, 2021 · 1 min · jiezi

关于sap:历史上的今天编程语言中null引用的十亿美元错误

这是Jerry 2021年的第 10 篇文章,也是汪子熙公众号总共第 281 篇原创文章。 明天是2021年1月17日,星期日,腊月初五。 Jerry之前收到CSDN社区赠送的新年礼物,一本台历:《了不起的程序员》, 其中1月16日,17日两天的篇幅,都在介绍托尼·霍尔(Tony Hoare), 计算机科学家,因程序设计语言定义与设计方面的杰出贡献取得1980年的图灵奖。疾速排序算法的发明者。 如果想查看用ABAP实现的8种排序算法的源代码,能够查看Jerry之前的文章: Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现 本文不会探讨霍尔创造的疾速排序算法,而是介绍另一个来自霍尔,现在依然被程序员在编程语言中宽泛应用的一个设计:null援用。 null援用被霍尔称为"十亿美元谬误",是霍尔1965年设计ALGOL W语言时提出的。 《Java实战》中提到,在Java程序开发中应用null会带来实践和实际操作上的种种问题: 它是谬误之源会使你的代码收缩本身毫无意义毁坏了Java的哲学在Java的类型零碎上开了口子霍尔的名言: 我把它叫做我的“十亿美元谬误”,就是在1965年创造了空援用...... 我无奈抵御放进一个空援用的引诱,仅仅是因为实现起来非常容易。引入了空援用的编程语言,在拜访援用之前,须要显式查看援用是否无效。 Java下图第46行代码定义的print办法,输出参数是一个类型为Integer的援用。在调用援用之前,须要先判断其是否是空援用,否则程序执行时就会呈现运行时异样。 ABAP应用CHECK X IS NOT INITIAL进行进攻,如果X为空援用,则不会执行CHECK语句的下一条语句。 谨严的德国人,在霍尔传授null援用的根底上,又设计出IS BOUND, IS NOT INITIAL和IS ASSIGNED这几种判断逻辑: SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析 JavaScript第10行的print办法外部,用&&操作符的短路逻辑(short-circuit)个性来实现空援用的检测:如果传入的oPrinter是空援用,则不会执行&&前面的print调用。 而TypeScript提供的可选链(Optional Chaining),则能够在语言层面优雅地防止这个问题。 上面的TypeScript代码,应用问号结构了一个可选链。如果a为空,则表达式a?.b间接返回undefined给变量val,而不会试图去执行a.b 上图TypeScript代码,编译之后生成的JavaScript代码如下图所示,咱们能够把TypeScript的可选链看成JavaScript用三元表达式实现的语法糖。 为了加重Java程序员每次应用援用之前,显式进行非空查看的工作量,Java 8引入了一个新的工具类:Optional. Optional仅仅是一个不含任何业务逻辑的包裹类,其value字段指向了真正的业务类。 下图是一个应用Optional工具类的例子,第11行的filter办法,传入的是一个通过Lambda Function实现的过滤条件。这行语句的语义是,对anotherName蕴含的字符串,进行过滤操作,查看another实例的value字段存储的援用,是否满足过滤条件(字符串长度小于6): Optional.filter办法,无论过滤条件是否满足,返回的类型均为Optional,便于链式调用。 我第10行传入Optional对象的字符串,显然长度远远大于6,所以filter办法返回一个新的Optional对象,其value字段为null. 对于filter调用返回的Optional对象,咱们能够持续调用orElse,设置一个默认值。下图第14行用orElse实现的逻辑,语义是:如果shortName包裹的value字段为空,则返回orElse办法传入的默认值。 Java 8的Optional工具类并不像TypeScript的可选链一样,后者是语言层面提供的个性,而Optional仅仅是开发包里的一个工具类。 比方Optional的静态方法of,其实现仅仅是新建一个Optional对象,去包裹传入的value援用: ...

January 29, 2021 · 1 min · jiezi

关于sap:深入学习SAP-UI5框架代码系列之七控件数据绑定的三种模式-One-Way-Two-Way和OneTime实现原理比较

这是Jerry 2021年的第 8 篇文章,也是汪子熙公众号总共第 279 篇原创文章。 系列目录(0) SAP UI5利用开发人员理解UI5框架代码的意义 (1) SAP UI5 module懒加载机制 (2) SAP UI5 控件渲染机制 (3) HTML原生事件 VS SAP UI5 Semantic事件 (4) SAP UI5控件元数据的元数据实现 (5) SAP UI5控件的实例数据批改和读取逻辑 (6) SAP UI5控件数据绑定的实现原理 (7) SAP UI5控件数据绑定的三种模式:One Way, Two Way和OneTime实现原理比拟(本文) (8) SAP UI5控件ID的生成逻辑 (9) SAP UI5控件的多语言(国际化,Internationalization,i18n)反对的实现原理 (10) XML视图里的button控件 (11) button控件和它背地的DOM元素 通过了三个多月不懈的致力,Jerry终于初步把握了应用Angular开发企业级前端利用的技能,也通过浏览Angular源代码的形式,弄清楚了Angular的Property binding,Event binding和Two-way binding的实现原理和区别。 Angular这三种绑定形式的应用语法如下图所示: 但咱们明天的文章不会论述Angular的数据绑定细节,而是持续聚焦在SAP UI5上。 Jerry 前一篇文章 深刻学习SAP UI5框架代码系列之六:SAP UI5控件数据绑定的实现原理,已经展现过这张源代码截图,第83行蕴含了SAP UI5反对的三种数据绑定模式: (1) OneWay:单向绑定(2) TwoWay:双向绑定(3) OneTime:单次绑定 从第69行代码得悉,SAP UI5模型的默认绑定形式为双向绑定TwoWay. ...

January 29, 2021 · 1 min · jiezi

关于sap:深入学习SAP-UI5框架代码系列之六SAP-UI5控件数据绑定的实现原理

这是Jerry 2021年的第 7 篇文章,也是汪子熙公众号总共第 278 篇原创文章。 系列目录 (0) SAP UI5利用开发人员理解UI5框架代码的意义 (1) SAP UI5 module懒加载机制 (2) SAP UI5 控件渲染机制 (3) HTML原生事件 VS SAP UI5 Semantic事件 (4) SAP UI5控件元数据的元数据实现 (5) SAP UI5控件的实例数据批改和读取逻辑 (6) SAP UI5控件数据绑定的实现原理(本文) (7) SAP UI5控件数据绑定的三种模式:One Way,Two Way和OneTime实现原理比拟 (8) SAP UI5控件ID的生成逻辑 (9) SAP UI5控件的多语言(国际化,Internationalization,i18n)反对的实现原理 (10) XML视图里的button控件 (11) button控件和它背地的DOM元素 Jerry应用Angular做开发曾经有几个月了,其间也学习了Angular控件的数据绑定,再回过头来重温SAP UI5控件数据绑定,别有一番滋味。 之前Jerry时不时会在微信上收到一些敌人的征询,诸如:“我的SAP UI5控件做了绑定,从Chrome开发者工具也能看到后盾返回的OData API的确蕴含了数据,然而UI5页面渲染进去之后,为什么控件上没有显示绑定的数据呢?”此类问题。 其实,如果理解一些SAP UI5控件的数据绑定实现细节,此类问题齐全能够通过本人调试的形式去排错。 咱们还是应用之前文章 一个用于SAP UI5学习的脚手架利用,没有任何后盾API的依赖 提到的脚手架利用来学习。 增加下列五行高亮代码: 创立一个新的JSON模型,蕴含一个字段field_for_text, 值为Jerry,再将该模型绑定到button控件,模型字段field_for_text绑定到button的text属性。 这样一来,运行时看到按钮的标签就成了field_for_text的值"Jerry",而不是第18行给text属性赋予的硬编码值"Button": 本文的目标就是,论述分明第一张图高亮的五行代码,背地产生了什么事件。 var oModel = new sap.ui.model.json.JSONModel(); ...

January 29, 2021 · 1 min · jiezi

关于sap:深入学习SAP-UI5框架代码系列之五SAP-UI5控件的实例数据修改和读取逻辑

这是Jerry 2021年的第6篇文章,也是汪子熙公众号总共第277篇原创文章。 系列目录 (0) SAP UI5利用开发人员理解UI5框架代码的意义(1) SAP UI5 module懒加载机制(2) SAP UI5 控件渲染机制(3) HTML原生事件 VS SAP UI5 Semantic事件(4) SAP UI5控件元数据的元数据实现(5) SAP UI5控件的实例数据批改和读取逻辑(本文)(6) SAP UI5控件数据绑定的实现原理(7) SAP UI5控件数据绑定的三种模式:One Way,Two Way和OneTime实现原理比拟(8) SAP UI5控件ID的生成逻辑(9) SAP UI5控件的多语言(国际化,Internationalization,i18n)反对的实现原理(10) XML视图里的button控件(11) button控件和它背地的DOM元素 本文咱们将通过钻研button控件的setText和getText办法实现,来学习SAP UI5控件的实例数据批改和读取逻辑。 下图是一段简略的SAP UI5代码:每点击一次button,就会在press事件的响应函数里,给button的text属性值尾部附上一个字符“1”. 点了三次按钮后,其渲染出的HTML代码如下图所示,button的text属性前面多了三个"1": 单步调试进入setText办法外部,发现该办法最终执行的实现是ManagedObject.setProperty: 咱们能够通过上图左边调用栈里实现,温习本系列之前文章学到的两个知识点: (1) 文章 深刻学习SAP UI5框架代码系列之一:UI5 Module的懒加载机制 里提到的SAP UI5控件的原型继承链: Button->Control->Element->ManagedObject->EventProvider->BaseObject (2) 文章 HTML原生事件 VS SAP UI5 Semantic事件 里提到的从HTML原生的click事件到SAP UI5 press语义事件的映射逻辑。 setProperty的实现逻辑概述正文写得很棒,不过setProperty的代码自身的执行逻辑也很清晰。 第1295行this.mProperties即SAP UI5控件的实例数据存储构造。上图右上角Watch面板里的含意是,以后setProperty办法调用,须要批改text属性,批改成新的值为"Button1". 1295行首先从this.mProperties中取出text属性批改前的值,存储在变量oOldValue里。 ...

January 6, 2021 · 1 min · jiezi

关于sap:深入学习SAP-UI5框架代码系列之四SAP-UI5控件的元数据实现

这是Jerry 2021年的第5篇文章,也是汪子熙公众号总共第276篇原创文章。 系列目录(0) SAP UI5利用开发人员理解UI5框架代码的意义 (1) UI5 module懒加载机制 (2) UI5 控件渲染机制 (3) HTML原生事件 VS SAP UI5 Semantic事件 (4) UI5控件元数据的元数据实现(本文) (5) UI5控件的实例数据实现细节 (6) UI5控件数据绑定的实现原理 (7) UI5控件数据绑定的三种模式:One Way,Two Way和OneTime实现原理比拟 (8) UI5控件ID的生成逻辑 (9) UI5控件的多语言(国际化,Internationalization,i18n)反对的实现原理 (10) XML视图里的button控件 (11) button控件和它背地的DOM元素 在本系列的第二篇文章:深刻学习SAP UI5框架代码系列之二:UI5 控件的渲染器 里,咱们理解了什么是UI5控件的渲染器(Renderer), 以及如何从SAP UI5控件的元数据里,取得其对应渲染器的名称:sap.ui.commons.ButtonRenderer 本文咱们将理解更多对于SAP UI5控件元数据的细节。 注:您会发现本文的SAP UI5框架调试截图,有些是红色背景,有些是深色背景。前者是Jerry 2015年书写本系列英文版时所截的图,后者为2021年Jerry将英文版改写成中文版,并从新公布在微信公众号平台上时截的图。 如何在运行时获取SAP UI5控件的元数据?拿到控件实例后,调用其getMetadata()办法即可。 运行Jerry文章 一个用于SAP UI5学习的脚手架利用,没有任何后盾API的依赖 里提到的SAP UI5脚手架利用,在下图第19行设置断点,拿到button控件实例oButton1, 调用其getMetadata办法,返回值就是button控件的元数据,如下图左边所示。 元数据里字段很多,这里只介绍对SAP UI5利用开发人员来说最重要的一部分字段: _aAllPublicMethods当咱们在Chrome开发者工具的console面板里,输出oButton1之后,紧接着再敲一个"."(英文输出状态下的句号),就能看到该button实例可能调用的一系列私有办法。这些私有办法列表,保护在元数据里的数组_aAllPublicMethods. 这个数组的length为110,这意味着button实例总共能够调用110个私有办法。然而咱们在Button.js里查看button的实现源代码,发现外面可能找到的办法数目远远小于110. 这是因为button控件实例能调用的110个私有办法,很多都来自其原型链继承关系上游的节点里实现的私有办法。 回顾本系列第一篇文章 深刻学习SAP UI5框架代码系列之一:UI5 Module的懒加载机制 提到的SAP UI5控件原型继承链: ...

January 6, 2021 · 1 min · jiezi

关于sap:SAP系统和微信集成的系列教程之九如何将微信用户发送给微信公众号的内容自动转存到SAP-C4C系统

本系列的英文版Jerry写作于2017年,这个教程总共蕴含十篇文章,发表在SAP社区上。 最近有不少敌人在微信上向我征询SAP零碎和微信公众号集成的问题,因而我把过后写的英文版翻译成中文,从新公布在我的公众号上。 须要留神的是,时隔三年,微信公众号的开发流程可能有所变动,请大家自行甄别。和微信公众号集成的零碎,我三年前抉择的是SAP Cloud for Customer. 系列目录 (1) 微信开发环境的搭建 (2) 如何通过微信公众号生产API (3) 微信用户关注公众号之后,主动在SAP C4C零碎创立客户主数据 (4) 如何将SAP C4C主数据变动推送给微信公众号 (5) 如何将SAP UI5利用嵌入到微信公众号菜单中 (6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5利用中 (7) 应用Redis存储微信用户和公众号的对话记录 (8) 100行代码在微信公众号里集成地图搜索性能 (9) 如何将微信用户发送到微信公众号的音讯保留到SAP C4C零碎(本文) (10) 如何在SAP C4C零碎间接回复音讯给微信公众号的订阅者 本文实现的场景是: 微信用户点击“关注”按钮,关注了某微信公众号之后: 在SAP C4C零碎主动生成了下列数据: (1) 一个代表该微信用户的individual customer主数据(2) 一个绑定到customer主数据的C4C Social Media User Profile 这两条数据的ID,会通过微信音讯推送回微信用户的微信app上: 这些胜利创立的C4C数据的ID,在微信音讯服务器,即nodejs利用的管制台上也能察看到: 依据返回给微信用户的客户主数据ID,到C4C零碎找到该主数据,在其Social Profiles面板里,能看到该Social Profile的渠道类型(Channel Type)为自定义的Jerry's Wechat Channel: 一旦微信用户给微信公众号发送文本信息,该文本信息通过微信公众号的音讯服务器作为直达,调用C4C API,在C4C零碎创立一条内容为该文本信息的Social Media Message数据。 下图是一个例子:我发送一条"Hello C4C Agent ......"的文本信息,在SAP C4C零碎创立的Social Media Message ID为59610: ...

January 6, 2021 · 1 min · jiezi

关于sap:漫谈SAP产品里页面上的Checkbox设计与实现系列之一

昨天是2020年的最初一天,我终日的工夫,都在和两位欧洲共事一起解决一个SAP Spartacus UI里的Checkbox bug. 解决完bug之后,很天然地回忆起了这么多年来,我经验过的不同SAP产品里的Checkbox的设计与实现。 文章目录 (1) SAP GUI里的Checkbox(2) SAP CRM里的Checkbox(3) SAP Cloud for Customer里的Checkbox(4) SAP UI5里的Checkbox(5) SAP S/4HANA里的Checkbox(6) SAP Spartacus里的Checkbox 本文介绍前三局部,其中历史最悠久的当然就是SAP GUI里的Checkbox. 值得一提的是,SAP GUI Screen里的控件也反对Keyboard Accessibility,即通过键盘的Tab键,能够逐个导航到屏幕上的每一个控件。 SAP CRM WebClient UI实质上还是ABAP BSP技术,其Checkbox的一个例子,如下图Main Partner列: 一个用户肉眼可见的Checkbox,在SAP CRM零碎里由总共6个HTML标签组合而成。 当Checkbox里的勾选中时,最外层的wrapper div标签的class变为th-sapcb-chkd,chkd是checked的缩写。 内层a标签属性值aria-checked设置为true. div内层一个暗藏的input标签,如下图标号6所示,用于同ABAP后盾进行值传递,其value属性值变为X. 当Checkbox勾选时,上述介绍的最外层wrapper div的class变为th-sapcb-blk, blk意为blank; 内层a标签的aria-checked属性设置为false,hidden input的value属性值置空。 而Checkbox的小勾视觉效果,通过a标签的CSS::before选择器实现。如上图黄色所示。 ::before选择器的用法,通过上面这个简略的例子能够学会——在施加了::before选择器的HTML元素前部,会主动呈现选择器content属性指定的内容。 '\e05d'代表小勾的视觉效果: 咱们试着在Chrome开发者工具里将这个content属性值改一改。'\e05c'代表hint,一个小感叹号: '\e05d'代表group: ::before选择器的width和height属性管制Checkbox矩形框的宽和高: 这一套::before content属性值和对应的icon视觉效果图的映射关系,能够在这个链接里取得: https://sapui5.hana.ondemand.... ...

January 6, 2021 · 1 min · jiezi

关于sap:SAP系统和微信集成的系列教程之七使用Redis存储微信用户和公众号的对话记录

这是Jerry 2020年的第88篇文章,也是汪子熙公众号总共第269篇原创文章。 本系列的英文版Jerry写作于2017年,这个教程总共蕴含十篇文章,发表在SAP社区上。 系列目录(1) 微信开发环境的搭建 (2) 如何通过微信公众号生产API (3) 微信用户关注公众号之后,主动在SAP C4C零碎创立客户主数据 (4) 如何将SAP C4C主数据变动推送给微信公众号 (5) 如何将SAP UI5利用嵌入到微信公众号菜单中 (6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5利用中 (7) 应用Redis存储微信用户和公众号的对话记录(本文) (8) 微信公众号的地图集成 (9) 如何将微信用户发送到微信公众号的音讯保留到SAP C4C零碎 (10) 如何在SAP C4C零碎间接回复音讯给微信公众号的订阅者 最近有不少敌人在微信上向我征询SAP零碎和微信公众号集成的问题,因而我把过后写的英文版翻译成中文,从新公布在我的公众号上。 须要留神的是,时隔三年,微信公众号的开发流程可能有所变动,请大家自行甄别。和微信公众号集成的零碎,我三年前抉择的是SAP Cloud for Customer. 本人经营过公众号的敌人们都晓得,粉丝和公众号的对话音讯,只能放弃5天。因而就萌发了一个需要:将粉丝和公众号的聊天记录长久化,比方保留到某数据库里,过后能够随时读取进去,进行进一步剖析。 本文会介绍,将粉丝和公众号的对话,保留到Redis(一个Key-Value存储系统)的实现步骤。 Redis 是一个高性能的key-value数据库。 redis的呈现,很大水平弥补了memcached这类key/value存储的有余,在局部场合能够对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,应用很不便。 Redis反对主从同步。数据能够从主服务器向任意数量的从服务器上同步,从服务器能够是关联其余从服务器的主服务器。这使得Redis可执行单层树复制。存盘能够有意无意的对数据进行写操作。因为齐全实现了公布/订阅机制,使得从数据库在任何中央同步树时,可订阅一个频道并接管主服务器残缺的音讯公布记录。同步对读取操作的可扩展性和数据冗余很有帮忙。 首先在微信app里同微信公众号对话: 上图展现的微信公众号的智能回复性能,其实现形式,在本系列之前的文章:SAP零碎和微信集成的系列教程之二:如何通过微信公众号生产API 里做过介绍。 依照本系列第五篇文章:如何将SAP UI5利用嵌入到微信公众号菜单中 里介绍的办法,给公众号削减两个新的菜单:Review和Delete. Review菜单负责把Redis里存储的聊天记录读取进去,展现在微信app里;Delete菜单负责清空Redis里的数据。 点击Review菜单之后的成果如下图所示: 四个字段的解释: from:音讯的发送方to: 音讯的接管方question:粉丝向公众号提出的问题answer: 公众号调用图灵API,返回的回答点了Delete菜单之后的成果:聊天记录被清空。 上面是实现步骤。 很多云平台都提供了对Redis的反对,这个系列我抉择的云平台是Heroku. 关上HeroKu的Redis控制台,从利用列表里抉择要启用Redis服务的利用:wechatjerry. Heroku默认的Redis plan:Hobby Dev仅用于开发用处,完全免费。 点击Provision按钮之后,在Heroku利用的控制台里,能看到Redis曾经呈现在利用wechatjerry的Addons列表里。 ...

January 6, 2021 · 1 min · jiezi

关于sap:SAP系统和微信集成的系列教程之五如何将SAP-UI5应用嵌入到微信公众号菜单中

这是Jerry 2020年的第86篇文章,也是汪子熙公众号总共第268篇原创文章。 2020年行将达到序幕了。 Jerry所在团队的产品经理,曾经开始让大家把圣诞节期间的休假状况,保护在公司wiki里,以便安顿假期值班人员: Jerry借这篇文章的机会,提前祝各位粉丝圣诞快乐。 明天抽点工夫,持续填前些日子挖的一个坑。 本系列的英文版Jerry写作于2017年,这个教程总共蕴含十篇文章,发表在SAP社区上。 系列目录(1) 微信开发环境的搭建 (2) 如何通过微信公众号生产API (3) 微信用户关注公众号之后,主动在SAP C4C零碎创立客户主数据 (4) 如何将SAP C4C主数据变动推送给微信公众号 (5) 如何将SAP UI5利用嵌入到微信公众号菜单中(本文) (6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5利用中 (7) 应用Redis存储微信用户和公众号的对话记录 (8) 微信公众号的地图集成 (9) 如何将微信用户发送到微信公众号的音讯保留到SAP C4C零碎 (10) 如何在SAP C4C零碎间接回复音讯给微信公众号的订阅者 最近有不少敌人在微信上向我征询SAP零碎和微信公众号集成的问题,因而我把过后写的英文版翻译成中文,从新公布在我的公众号上。 须要留神的是,时隔三年,微信公众号的开发流程可能有所变动,请大家自行甄别。和微信公众号集成的零碎,我三年前抉择的是SAP Cloud for Customer. 本文的内容很简略,用一句话就能概括:利用微信公众号的菜单项,启动一个SAP UI5利用,并运行在微信的内嵌浏览器里。 如下图“Jerry List”菜单项所示: 咱们提前把SAP UI5利用部署在云平台上,失去该利用的url,而后间接将url绑定到“Jerry List”这个公众号菜单即可。最初,点击公众号菜单后,这个SAP UI5利用在微信浏览器里关上的成果如下: 上面是实现细节。 应用微信开发文档里提到的公众号菜单创立API,创立一个新的名为Jerry List的菜单,url字段指定成部署到云平台上的SAP UI5利用的url: url: https://api.weixin.qq.com/cgi... Access Token应用如下的API调用,通过app id和app secret换取: https://api.weixin.qq.com/cgi...<your app id>&secret=<your secret>. ...

January 6, 2021 · 1 min · jiezi

关于sap:如何在运行时使用SAP-Commerce-Cloud-backoffice直接给类型增添新属性

传统的SAP Commerce Cloud数据类型扩大工具,须要首先编辑items.xml, 削减新属性,而后从新build,破费的工夫较长。而现在在Backoffice运行时能够间接给一个类型削减新属性了,步骤如下: 假如咱们想在CustomerReview这个类型上新增一个名为processed的属性,类型为布尔值: 登录Backoffice: 进入Systems菜单,抉择Types: 找到CustomerReview类型: 点击上图的"Create new Attribute": Qualifier即这个新建属性的名称,取名为processed: 保留,创立结束。 更多Jerry的原创文章,尽在:"汪子熙":

January 6, 2021 · 1 min · jiezi

关于sap:一个SAP成都研究院开发工程师的2020年度总结未知生焉知死

转眼间,又到了2020年末写年度总结的时候了。我始终感觉,对于像Jerry这样,年复一年终日两点一线,除了编程还是编程的程序员来说,年度总结能够减少一些生存的典礼感。 本文是我开明公众号之后的第四个年终总结,前三年的年度总结如下: Jerry的2017, 编程与游泳一个SAP开发人员的2018年终总结一个SAP开发人员的2019年终总结2020年,对于很多人来说都是刻骨铭心的一年,对于我来说更不例外。回顾本人前三十多年,从上学到高考,读研究生,再到求职,娶妻生子,我的生存始终都一帆风顺:硕士毕业后,我顺利退出了本人职业生涯的第一站,SAP成都研究院,没想到一干就是14年;工作后,我完结了三年的恋情短跑,娶了一位漂亮优雅,知书达礼的姑娘为妻。再起初,咱们幸福美满的二人世界里,又多了一个聪慧懂事的儿子。 这三十多年平静的生存,在2020年5月嘎然而止。 每个人究竟都有要来到这世界的一天,无论贫困或者富裕。在2020年5月之前,我还从未真正地将死亡,和本人分割在一起。 2020年6月手术完结,我从头到脚,到处都留下了手术后的痕迹。术后七天,第一次下床扶着墙缓缓行走的一瞬间,我有一种错觉,感觉本人的四肢曾经不再受大脑的管制。 手术后,我失去了嗅觉。从此,我再也闻不到妻子身上淡淡的清香,再也闻不到妻子在厨房繁忙时,飘到客厅来的饭菜香味。直到现在写这篇文章的时候,我还在脑海中致力回顾2020年5月份之前的岁月,回顾那些我还能像一个正常人一样,嗅到生存中那些一般的滋味。比方初夏里楼下小区的栀子花香,酷暑里成都猛追湾游泳池里刺鼻的消毒水滋味,中秋季节淡淡的桂花香味。甚至连某些公共场所的厕所里,传出的刺鼻臭味,对于现在的我来说也是无比留恋而再也感知不到的事物了。 或者再过几年,就连“香”和“臭”这两个汉字的含意,也将缓缓从我的大脑里被忘记。 2020年我经验了太多的第一次。 第一次全身麻醉。 第一次接到医院下达的病危通知书。 第一次正式用Angular进行SAP产品开发。 第一次退出一个除了我之外,其余所有共事都是老外的开发团队。 第一次以线上的形式,负责SAP寰球技术大会的嘉宾。 第一次收到共事用 "I don't care about XXX. The expected behavior is XXX. Make it happen, and show me the PR" 的口气下达的命令。 第一次被邀请负责非SAP社区的技术评委。 第一次进摄影棚。 第一次创立了本人的微信群,并邀请了全世界各地400多位SAP技术爱好者们,在内一起进行SAP技术探讨。 在马上就要完结的2020年里,我有太多的人要感激。 首先当然是感激解救了我生命的华西医疗组。如果没有TA们,依照工夫的推算,当初我的坟前预计曾经长草了。 一个人在身患重病,最软弱的时候,最能感触到家庭成员陪伴在身边的和煦。我可怜患了重病,但我又是侥幸的,因为我生存在一个相亲相爱的大家族里。感激我的妻儿,我的父母和岳母,还有我老家一大帮亲戚们,在我生病住院时的关怀和帮忙。你们是我抉择留在国内工作的最大挂念。 我每天在SAP的工作时长大抵和我与家人相处的时长相当,SAP是另一个让我感觉很和煦的小家庭。感激SAP大中华区和SAP海内的共事们在我生病期间通过微信,Slack和Outlook发给我的关怀和问候。 感激我的后任领导雯总,在我住院期间对我的各种关怀;感激我的现任领导吴院长,安顿我退出SAP Spartacus开发团队,帮我补全了本人技能图谱的又一块拼图。 感激蔺小妹儿在我入院后痊愈期间悉心的领导。 感激我微信上几百位好友和微信公众号上几千位粉丝中那些我叫得出名字和叫不出名字的敌人们。因为集体精力有限,你们的留言有时候我无奈一一回复,请见谅。 往年我的生存,和前三年比起来远远谈不上精彩,但最重要的是,我还活着。兴许领有一个美满家庭的普通人,更难去直面生死,然而往年在鬼门关走了一遭之后,我比以往任何时候,都更能了解到生命的贵重,以及对当初平静生存的珍惜。 2021年,Jerry祝所有关怀我的人和我关怀的人,健健康康,平平安安。 感激大家三年来的陪伴,咱们2021年再见 ! 本文参加了 SegmentFault 思否征文「2020 总结」,欢送正在浏览的你也退出。

January 6, 2021 · 1 min · jiezi

关于sap:SAP系统和微信集成的系列教程之四如何将SAP-C4C主数据变化推送给微信公众号的关注者

这是Jerry 2020年的第85篇文章,也是汪子熙公众号总共第267篇原创文章。 本系列的英文版Jerry写作于2017年,这个教程总共蕴含十篇文章,发表在SAP社区上。 系列目录 (1) 微信开发环境的搭建 (2) 如何通过微信公众号生产API (3) 微信用户关注公众号之后,主动在SAP C4C零碎创立客户主数据 (4) 如何将SAP C4C主数据变动推送给微信公众号(本文) (5) 如何将SAP UI5利用嵌入到微信公众号菜单中 (6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5利用中 (7) 应用Redis存储微信用户和公众号的对话记录 (8) 微信公众号的地图集成 (9) 如何将微信用户发送到微信公众号的音讯保留到SAP C4C零碎 (10) 如何在SAP C4C零碎间接回复音讯给微信公众号的订阅者 最近有不少敌人在微信上向我征询SAP零碎和微信公众号集成的问题,因而我把过后写的英文版翻译成中文,从新公布在我的公众号上。 须要留神的是,时隔三年,微信公众号的开发流程可能有所变动,请大家自行甄别。和微信公众号集成的零碎,我三年前抉择的是SAP Cloud for Customer. 这个系列的前一篇文章,微信用户关注公众号之后,主动在SAP C4C零碎创立客户主数据,咱们曾经实现了这样一个场景:微信用户关注公众号之后,在SAP Cloud for Customer(以下简称C4C)零碎里主动创立一个客户主数据,并把该数据的Last Name字段设置成关注者的Wechat id. 胜利创立的C4C客户主数据的id也会通过微信音讯发送到关注者的微信app上。 在C4C零碎查看通过OData API创立的客户主数据: 这个场景的数据交互流,微信app是音讯的发送方,而SAP C4C零碎是音讯接管方,音讯通信通过nodejs开发的微信音讯服务器实现。 本文咱们实现一个新的场景,当C4C的客户主数据发生变化时,C4C被动告诉微信关注者。在这个场景里,C4C是音讯的发送方,而微信app是音讯的接管方。 具体实现步骤前一篇文章里,我选用C4C Account BO规范的LastName字段来存储微信关注者的Wechat id: 这个客户主数据的明细页面如下: 本文我抉择在Customer BO上创立一个名为WechatID的扩大字段,专门寄存微信关注者的Wechat id. 在C4C零碎中创立一个新的OData服务,选中新建的扩大字段WechatID,将其裸露到OData API中: 将新建的C4C OData服务重命名为zindividualcustomer,在Postman里测试,确保应用OData filter操作符时,可能读取包含这个扩大字段在内的客户主数据的值。 ...

December 5, 2020 · 1 min · jiezi

关于sap:SAP-Fiori-Launchpad-tile里显示的数字的刷新间隔是在服务器端什么地方配置的

Created by Jerry Wang, last modified on Dec 16, 2014原题目:where is count server execution interval configured在Chrome network tab里能察看到周期性的Odata call: 该工夫距离通过line 11480的参数n 传入,单位为秒: 工夫距离来自OData model的service_refresh_interval字段: 和该字段一起保护的还有OData service url: 该配置通过如下的OData 申请从后盾返回: 在前台通过如下配置页面保护OData service的url和执行工夫距离: 简略地测试:将工夫距离从30改为361之后,后盾返回的interval也相应更改成361:

December 5, 2020 · 1 min · jiezi

关于sap:如何将一个已有的BSP应用加到SAP-Fiori-Launchpad里

Created by Jerry Wang, last modified on Oct 15, 2015use tcode LPD_CUST, double click role UICRM001:<img src="https://user-images.githubusercontent.com/5669954/27428852-90f5ba54-5743-11e7-9a46-ce14d97328c7.png">You can refer to existing configuration for My Note configuration:<img src="https://user-images.githubusercontent.com/5669954/27428851-90f59f74-5743-11e7-8793-e35923474a90.png"><img src="https://user-images.githubusercontent.com/5669954/27428848-90f29d42-5743-11e7-9e8a-81c9d2a7d787.png"> Create a new application and specify url as /sap/bc/ui5_ui5/sap/znote_ext application alias: zjerrynote launch Fiori launchpad designer, search catalog SAP_CRM_BC_SALESREP and create a new tile:<img src="https://user-images.githubusercontent.com/5669954/27428853-90f693e8-5743-11e7-8640-6716ff55d0ac.png">specify Semantic object and Action: <img src="https://user-images.githubusercontent.com/5669954/27428850-90f4c982-5743-11e7-9c9c-59439c58fac4.png">and create new target mapping:<img src="https://user-images.githubusercontent.com/5669954/27428855-910be856-5743-11e7-8f39-5bb77c5b93b7.png"> add the new created tile to catalog in the runtime via personalization:<img src="https://user-images.githubusercontent.com/5669954/27428856-910d80e4-5743-11e7-9f41-da06ed3c0098.png">and now you can test it in UI:<img src="https://user-images.githubusercontent.com/5669954/27428849-90f49ce6-5743-11e7-954d-d90f594f4763.png"> ...

December 5, 2020 · 1 min · jiezi

关于sap:SAP-Commerce的路由实现Route-Implementation

登录Hybris前台,在product catalog里抉择Digital camera: 点击某个product进入detail页面: 留神察看PDP(product detail page)这个url: 这个detail page的route和咱们做Fiori时的思路很像: 这个detail url https://localhost:9002/yacceleratorstorefront/electronics/en/Open-Catalogue/Cameras/Digital-Cameras/Digital-Compacts/DSC-H20/p/1978440_blue的响应申请是在这个folder的这个controller上面解决的: web/src/controllers/pages/ProductPageController.java 依据SpringMVC提供的注解@RequestMapping, 在runtime时以后产品的编号会被主动赋值给变量productCode, 而后通过相似CRM WebUI BOL layer->Genil layer->DB layer的形式把对应product的数据取出来,最初填充给model变量。这个model变量最初用于在JSP UI上显示数据。 以这张图为例: 最初变量productCode注入的值是1978440_blue, 对不? 在backoffice的products 下搜寻 “1978440_green”,能够看到搜寻后果中“1978440_green”就是productCode(Article Number) 这个product是个非凡的product,如果搜寻后果中点"1978440",而后跳到“Variants” tab,会看到其余几个色彩的product都是“Product Variants”。这种product叫VariantProduct,它的base product即"1978440"尽管有productcode然而不会呈现在前端,只有它的color variant product能力被展现和购买: 原来Hybris的product也有variant的概念。和CRM和ERP里的Product Model一样: 一个例子就是咖啡机,有不同色彩,商用型,家用型,可抉择带1个附件还是2个。 更多Jerry的原创文章,尽在:"汪子熙":

December 5, 2020 · 1 min · jiezi

关于sap:SAP-Spartacus的发布方式以及语义化版本管理机制

Spartacus打包之后,以库的形式公布到npmjs.com上。 Spartacus库次要有三个实体组成:core,Storefront和styles. 其中Storefront蕴含了用户肉眼可见的,组成Storefront外观的UI组件,客户能够重用和加强这些组件。Core则蕴含了Spartacus的管制逻辑,用户通过Angular依赖注入的机制,能够开发本人的服务类,而后注入到core框架之中。Styles蕴含了Spartacus的界面款式实现,客户能够对这些款式进行定制化,或者用自开发的款式来笼罩规范款式。 以前Accelerator同Storefront的比拟时曾经提到过,客户基于Spartacus库文件进行属于本人的Storefront开发,并不会间接批改Spartacus公布的源代码。客户的二次开发代码,和Spartacus库文件是一种松耦合关系。客户降级Spartacus版本,在绝大多数状况下都不会影响到当初的二次开发代码。那么所说的“绝大多数状况下”,具体是指什么呢?这就要从Spartacus的版本管理机制说起。 同绝大多数风行的框架和库一样,Spartacus的版本治理也采取了所谓语义化版本的机制,版本号由主版本号,次版本号和订正版本号独特组成,两头由小数点分隔开。 主版本号的升高,用于引入无奈向后兼容的变更或颠覆性的更新。无奈向后兼容的变更,是指Spartacus降级之后,之前基于低版本编写的二次开发代码,须要人工调整后能力持续工作。颠覆性的更新,比方Spartacus 3.0,首次反对B2B个性。 次版本的减少:用于引入新性能,并且版本更新之后,已有的二次开发代码不需任何调整依然可能失常工作。源代码重构,性能优化等不属于bug修复的批改,也通过此版本号引入。 订正版本:次要用于公布bug的修复. Spartacus的订正版本公布以周为单位,确保应用过程中发现的bug能尽早失去解决。次版本的升高以月为单位,而主版本的更新,能够参考SAP官网路线图网站上的申明。 更多Jerry的原创文章,尽在:"汪子熙":

December 5, 2020 · 1 min · jiezi

关于sap:SAP-Spartacus简介

终于写到Jerry目前正在做的开发工作了。 2015年的时候,那时Jerry曾经做了一年多的SAP UI5开发,想进一步精进本人的开发技能,就申请了一个位于德国Walldorf总部的UI5 Extensibility开发的Fellowship Program,为期6个月。Jerry发了简历给接管Fellowship的团队老板,很快收到回复,团队老板对我的简历很感兴趣,然而示意这个Program没有Relocation Budget,如果我过来,在Walldorf的住宿得我本人掏钱解决。因为这不是商务出差,因而也不会有专门的共事帮我在当地租房。想到这一系列的麻烦,最初我只能放弃。 没想到五年之后,我再次取得了另一个纯前端的开发机会,SAP Spartacus. 什么是Spartacus?Spartacus是SAP Commerce Cloud的Storefront(电商铺面)利用,基于Angular开发而成。 借助SPA(Single-Page-Application)和PWA(Progressive-Web-Application)个性的反对,Spartacus可能提供近似原生利用的用户体验,同时具备高度的可配置性和可扩展性。 先看看Spartacus长什么样。对于国内习惯了网购的敌人来说,无需任何培训就能毫无艰难地应用Spartacus进行购物下单,这些操作流程咱们曾经相熟得不能再相熟了。 浏览商品,增加到购物车,领取。 可能大家会感觉下面截图的界面比拟奢侈,不够好看?后面曾经提到,Spartacus具备高度的可配置型和可扩展性,SAP客户能够基于Spartacus开发出具备本人举世无双格调的Storefront利用。 一个胜利案例就是,乐高的在线销售Storefront. Spartacus最显著的两个特点: 开源(https://github.com/SAP/sparta...以库文件的模式公布 也就是说,客户只须要新建一个Angular利用,在package.json里增加对SAP Spartacus库文件的依赖,就能够应用上图所示的Spartacus Core和UI Component,开发满足本人理论需要的Storefront了。 下图就是Angular利用中的package.json文件中导入Spartacus的四个依赖库文件的形式: 客户采纳这种形式开发而成的Storefront利用,其自开发代码(下图淡黄色矩形框所示)是降级平安的,即自开发代码不会因为Spartacus库文件的版本升级而被笼罩掉。 Spartacus是一个仍在继续开发的我的项目,目前最新的版本是3.0. 通常状况下,每隔6个月会进行Major版本的更新,比方从2.0到3.0. 每隔6周,会进行Minor版本的更新,比方从2.0到2.1. 对SAP Commerce Cloud有所理解的敌人们都晓得,Hybris以前还有一个基于JSP的Accelerator,也能提供浏览店铺商品,退出购物车,结帐领取的性能,那么为什么SAP依然会启动Spartacus的开发,并在2019年7月正式公布了1.0版本呢? 我的共事张健(Zhang Jonathan)在他的文章 从产品展现页面谈谈Hybris的特有概念和设计构造 里给大家介绍过,Commerce Cloud的前身Hybris是一个monolithic(单体)利用,其中Storefront即Accelerator实现的技术栈是JSP + Java,没有前后端拆散的概念。 Accelerator尽管如张健文章里介绍的那样,具备高度可扩展性,然而也存在一些问题: 因为monolithic(单体)利用的个性,Accelerator自身也是Commerce平台的一部分,通过Java调用经Facade Layer作为入口,生产Service Layer的服务: 如下图高亮代码所示: 因而,Accelerator和Commerce平台无奈别离进行降级。 另外,SAP官网明确指出,因为SAP以源代码的形式公布Accelerator,作为施行的模板,因而一旦客户开始了Storefront的定制化工作,批改了这些模板的源代码后,就无奈再导入针对当前工作版本的Accelerator的bug fix. 这个情理同ABAP Netweaver外面,如果开发人员间接批改了规范代码后,打不了SAP note是一样的。 这也就是SAP官网上称Accelerator为"Extendable but not Upgradable"的起因。 Commerce Accelerator的这些有余,通过2019年诞生的Spartacus Storefront失去了补救: ...

November 24, 2020 · 1 min · jiezi

关于sap:如何使用SAP-UI5-SDK网站查询指定控件的属性如何使用

一个敌人向我发问,SAP UI5 input控件,如何实现inputField内容靠右显示? 其实我也有好几年没做SAP UI5开发了,我也记不住这么多细节,然而相似问题,能够自行查问SAP UI5官网解决。 关上UI5 SDK web site:https://ui5.sap.com/#/api 在Filter栏里输出控件名称,比方Input: 在搜寻后果里点击Properties标签页, Ctrl + F,搜寻关键字Align: 点击setTextAlign这个办法: 从帮忙文档里咱们得悉,能够调用input控件的setTextAlign办法,输出参数类型为sap.ui.core.TextAlign. 这是一个枚举类型,如果想要实现发问中的靠右显示,传入枚举值sap.ui.core.TextAlign.Right即可:

November 23, 2020 · 1 min · jiezi

关于sap:一行代码将SAP-CDS-view数据以ALV的方式输出

因为国情起因,ABAP ALV相干的报表开发在国内泛滥SAP技术交换群里永远都是一个热门话题。 最近Jerry和敌人的技术交换群里,郭爷向大家介绍了ALV Integrated Data Access,可能轻松实现以ALV格局展现CDS view的数据。 感激郭爷的介绍,Jerry因为工作起因不会进行SAP Dynpro的编程,所以也不晓得这个ALV IDA的存在。网上搜了一下,发现早在2018年就有SAP从业者写过介绍它的博客了: 因为应用的确非常简单,Jerry不会反复博客里的内容,对其具体用法感兴趣的敌人,请移步这篇SAP社区博客: SAP List Viewer with integrated Data Access ALV with IDA. 如下图所示,我在SAPGUI里写了一个报表,只用一行语句就能实现一个名叫ZFAT_INTERFACE这个CDS view的ALV展现工作。 cl_salv_gui_table_ida=>create_for_cds_view( iv_cds_view_name = 'ZFAT_INTERFACE' )->fullscreen( )->display( ).这个CDS view显示的数据,是以后ABAP零碎里所有的接口(SE24里查看的interface)和接口上定义的办法个数。 CDS view实现源码如下: 为什么要搞这样一个CDS view进去?Jerry已经给SAP成都研究院的共事们做过一个面向对象程序设计的培训,外面讲到了一个准则:Interface Segregation Principle(接口拆散/隔离准则). 接口隔离准则冀望达到的成果是,客户类不应被强制依赖于那些它们理论并不需要的接口。相同地,一个接口定义的办法数量越多,其实现类越容易受制于该接口。例如,一个客户类A实现了一个接口,该接口蕴含了客户类不须要的办法,但这些办法是其余客户类所须要的,那么当其余客户类因为某种原因须要对接口进行批改时,这个批改也将影响客户类A。通过接口隔离准则,咱们尽可能地防止这种不必要的耦合,比方上图中把蕴含了Print,Staple, Copy和Fax四个办法的胖接口Job,拆分成了四个各自只蕴含一个独立办法的接口。 讲完了接口隔离准则之后,我突然有了一个想法,SAP ABAP零碎里大量的历史遗留代码里,是否存在着定义了大量办法的胖接口呢?于是就开发了上述的CDS view一探到底。 从应用ALV IDA显示CDS view ZFAT_INTERFACE的后果看,办法数量排名第一的胖接口IFUR_NW7__ALL,其上定义了755个办法...... 再回到ALV IDA,它可能显示CDS view数据的原理是什么? 应用Jerry之前文章:SAP谬误音讯调试之七种武器:让所有的谬误音讯都能被定位 里介绍的第五种方法,孔雀翎之SAT,即应用SAT运行之前编写的ALV程序,在SAT跟踪后果里,就能找到cl_salv_gui_table_ida最初是如何从CDS view里取值的: CL_SQL_STATEMENT->EXECUTE_QUERY 在该办法里设置断点, 执行报表,断点会触发两次: 断点第一次触发,执行的SQL表达式: SELECT COUNT( * ) AS "COUNT" FROM "ZFATINF" AS "ZFAT_INTERFACE" WITH PARAMETERS( 'LOCALE' = 'EN' )断点第二次触发,执行的SQL表达式: ...

November 23, 2020 · 1 min · jiezi

关于sap:在SAP-Spartacus产品明细页面用outlet显示自定义数据

首先创立一个新的Angular module和Component: 这个新的module,因为要应用Outlet性能,所以须要从@Spartacus/storefront里导入OutletRefModule,以及导出咱们本人实现的MyOutletsComponent以便让外界生产。 MyOutletsComponent的实现: 在构造函数里注入currentProductService, 调用getProduct办法异步读取以后product属性,存储在属性product$里: 在这个Component的html里,显示product$的值: <ng-template cxOutletRef="ProductDetailsPageTemplate" cxOutletPos="before" let-model> <h1>Jerry</h1> <p>Product: {{ product$ | async | json }}</p></ng-template> 最初别忘了把Component的selector标签加到app Component的html里: 最初的成果: 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

November 23, 2020 · 1 min · jiezi

关于sap:从医院到家再重返SAP成都研究院-Jerry还没死

Jerry的公众号曾经一个多月没有更新了,最近一直有敌人在公众号给我留言,问我复原得如何了。其实这一个多月之所以没更新,是因为我工作很忙,忙着学习新的SAP产品。既然大家这么关怀我,我不好意思持续潜水,明天就用这篇文章给大家打个招呼。 2020年1月底,SAP成都研究院敞开,迎接鼠年春节。 2020年2月初,因为疫情起因,SAP成都研究院持续放弃敞开,凋谢工夫待定。 2020年4月初,随着国内疫情趋于稳定,SAP成都研究院局部凋谢,陆续有开发团队开始返回办公室下班。 2020年5月初,Jerry住院。 2020年5月下旬,Jerry手术。手术当天,华西医院下了病危通知书,我母亲签的字。那张病危通知书签完字就交给医院了,我连长啥样都不晓得。起初网上搜了一下,华西医院的病危通知书长这样: 起初我查看本人的手术记录,我猜想是术中海绵窦静脉大量出血触发医生发送病危通知书这个action. 2020年6月,Jerry入院。 2020年8月,Jerry重返SAP成都研究院开始搬砖。 以前Jerry听过一句话,一个男人成熟的标记,就是他开始学会承受事实。如果依照这个规范,我感觉我曾经真正成熟了。 8月重返SAP成都研究院之后,我和很多半年未见的共事吃过很多顿饭。第一顿午饭是和一位从上海到成都出差的共事兼敌人一起进行的,她问了我一个问题,“这件事产生后,你哭过吗?” 我笑了笑,“没有。如果哭能让我脑子里的肿瘤放大,那我必定嚎啕大哭无数次了。” 很多共事看到我第一句话就是:你瘦了很多。去年冬天我穿羽绒服称重时,体重峰值是165斤,BMI超了不少。过后我就始终感觉纳闷,因为我平时饮食很节制,而且运动量也不小,怎么体型还这么清淡?住院之后才晓得是身材内分泌出了问题,手术后体重减轻了20多斤,我的内分泌主治医生通知我,当初才是我失常的体重。 往年6月份Jerry还在医院病床上时,就晓得了我所在的SAP成都研究院数字翻新空间团队,因为公司组织构造变动的起因,曾经不复存在了。当然这无论在外企还是国内互联网公司,都是一件很平时的事件,毕竟IT业界惟一不变的就是变动自身。团队没有了,Jerry当前做什么?我不晓得。 8月份返工之后,吴院长把我调配到了一个全新的团队:SAP Spartacus开发团队,开发框架是Angular,开发语言TypeScript. 团队共事来自加拿大和德国,以及我这个惟一的中国成都人。对于吴院长给我的这个新的工作安顿,我欣然接受。(对于吴院长和我的故事,请参阅:我与SAP成都研究院吴院长的二三事) 和一个共事吃饭的时候,他不太了解我的抉择,“你大病初愈,为什么不抉择你相熟的ABAP技术栈和稳固的S/4HANA开发团队,这样也能够持续利用你以前去德国总部工作三个月积攒起的人脉?为什么你要放弃以前的所有,抉择退出一个生疏的新团队,所有从头开始学?” 我笑了笑没有答复。其实我心里早就想过了,Jerry自认为本人曾经是一位顶级的ABAP开发人员,无论是国内还是世界范畴内来看。我感觉自己ABAP开发技能树的所有技能简直曾经全副点满了,如果再投入工作工夫去从事ABAP相干的开发,ROI太低太低;另一方面,SAP在云原生开发畛域,我感觉本人还有很多欠缺很多须要学习的货色。打个比方,一个学生要筹备高考,与其在他的强势学科上投入工夫和精力,致力把分数从149晋升到150满分,不如转头把弱势学科从100分进步到135分来得事实些。我违心一直学习新的并且本人感兴趣的货色,这就是我做出抉择的起因。 Spartacus团队的大佬在Slack上发表我退出的音讯后,共事们向我示意了欢送。从此以后,他们就是我在Angular开发畛域学习的楷模了。 这是Jerry所在团队的wiki首页。SAP Spartacus是什么?敬请关注Jerry随后的分享。感激浏览。 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

November 23, 2020 · 1 min · jiezi

关于sap:SAP-Spartacus的page请求

url:https://spartacus-dev0.eastus...:9002/occ/v2/electronics-spa/cms/pages?fields=DEFAULT&pageType=ContentPage&pageLabelOrId=homepage&lang=en&curr=USD申请Commerce Cloud CMS的page元数据,只抓取类型为ContentPage的页面: 响应: 上图的申请,别离对应了最初渲染的原生html页面的各个区域,例如:Section1: Section2A, 2B, 2C, 3, 4,5 返回一个title为Homepage的页面模板: contentSlots有19个元素: 每个contentSlot有一个position,slot又蕴含若干个Component: 比方Section1 slot蕴含了两个Component: 这两个Component都是SimpleResponsiveBannerComponent,一个url为578,一个为585. 578对应下图: 585对应这个区域: 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

November 23, 2020 · 1 min · jiezi

关于sap:使用ABAP操作office-Word文档

There is a useful class CL_DOCX_DOCUMENT provided by SAP which could support read and write access to a word document with file extension “.docx”. This document gives a brief introduction about its usage and could be used as a starting point to build your own application which needs to manipulate word document via ABAP. Office OpenXMLStarting with Microsoft Office2007, when you create a new word document, you will get a file with “.docx” file extension by default which follows the Office openXML format. You can find its detailed definition from wiki. ...

September 9, 2020 · 3 min · jiezi

关于sap:如何创建能够支持Web-Service的Word文档

In these two documents below, I have demonstrated the steps how to create word or PDF document as attachments which could consume web service created via CRM web service tool. (1) Create Webservice enabled Adobe PDF attachment in CRM Application(2) Create Webservice enabled word document in attachment assignment block As we could find in document template creation UI, there is a third option which allows us to assign a WSDL URL of an external web service to a document template. So this document will explain how to create a word template which could consume your own web service, instead of the one created via CRM web service tool. ...

September 9, 2020 · 3 min · jiezi

关于sap:SAP-WebClient-UI-drop-down-list下拉列表的一个故障和解决方法

Issue descriptionToday I received a ticket with priority very high complaining that the drop down list for Business Role in Work center “Sales Operation” is empty: However, Using my user I could indeed see lots of drop down list entries there: Issue analysisI didn’t start debugging immediately but made the following analysis beforehand: (1) I could reproduce this issue in my laptop with my colleagues’ user ...

September 9, 2020 · 4 min · jiezi

关于sap:SAP-Fiori里Contact-Support的按钮渲染逻辑

I was once confused about why I could see “Contact Support” button in error popup window in some system but in some other system it is gone. See the following two groups of screenshot for example: Group one: no “Contact Support” button Group two: “Contact Support” button availableThis blogs contains my debugging detail to figure out what controls the availability of this button. When Fiori launchpad is opened there is one http request below which asks for a series of configuration information from backend. Among them there is Contact Support enablement setting. ...

September 9, 2020 · 2 min · jiezi

关于sap:SAP-Fiori里两种弹出对话框popup-dialog设计

This blogs introduces the tips how to find the location of source code where the popup dialog is raised. There are two kinds of popup dialogs in Fiori ui.Type one: Model Dialog based on IFrameFor example, if I click the glass icon, and then there is one dialog popped up. I need to know which line of code has raised this popup dialog and why. ...

September 9, 2020 · 1 min · jiezi

关于sap:SAP-UI5框架自学教程

As an application developer using SAP UI5, when I deal with some issues reported by end users, it turns out that I cannot find out the root cause without debugging UI5 framework code. Why an UI5 application developer needs to study framework codeNormally an UI5 application consists of various controls provided by UI5 library. If you just want to use a certain control and make it work in your application, it is enough for you to just go through the control API document, play it around in UI5 demokit. But if you meet with issues with the control, or you would like to know how the control is manipulated by UI5 framework to write a more robust and more efficient application, it is then inevitable that you need to dive into the UI5 framework source code. ...

September 9, 2020 · 5 min · jiezi

关于sap:SAP-OData服务性能测量的四种办法

The OData service url being tested is: /sap/opu/odata/sap/CRM_ODATA/TaskCollection?$filter=isMyTask eq true&$expand=DocumentNotes,DocumentNextUserStatuses,DocumentHistories,DocumentApplicationLogs,Attachments Approach1 – gateway clientLog on your gateway ( frontend ) server, use tcode /IWFND/GW_CLIENT, paste the url and execute. Then you will get execution time in unit Millisecond. Approach2 – Chrome development toolOpen Chrome development tool via F12, paste the COMPLETE url with host name and port number and execute. The time will be displayed in column “Time”. ...

September 9, 2020 · 1 min · jiezi

关于sap:使用Fiddle修改在线加载的前端框架js文件用于各种调试目的

Sometimes for trouble shooting or research purpose, you would like to make small changes on framework js file, and test how your application would react to those changes.For example I would like to add a new line for debugging purpose before line 70. It is not possible to make any modifications on the formatted js file done by Chrome “Pretty print” button. We can only change original unformatted file or switch the source code to debugger version and change Text-dbg.js instead. Unfortunately changes done by both approaches could not be persisted. Once we refresh Chrome, they are gone. ...

September 9, 2020 · 2 min · jiezi

关于sap:一个有用的Chrome扩展应用SAP-UI5-Inspector

There is a useful Chrome Extension for UI5 which could be downloaded via url: Once installed, there will be a new tab “UI5” in Chrome development tool. Within this tab, instead of displaying the native HTML dom elements in traditional “Elements” tab, it will display UI5 controls together with their properties. See the navigation back button for example. Compare with the original property display for this navigation button: ...

September 9, 2020 · 1 min · jiezi

关于sap:SAP-UI5和React的页面渲染性能比较

I have been working as a Fiori application developer and nowadays I have read quite a lot of blogs which introduce how to build web application using React. React is an open-source JavaScript library providing a view for data rendered as HTML. You can find more information from Wikipedia and its source code from github. Most of those blogs have mentioned that React has quite good performance but don’t contain detail performance data. Since I have been using SAP UI5 framework in my daily work, I am curious about the performance comparison between SAPUI5 and React regarding the topic of page rendering. ...

September 9, 2020 · 6 min · jiezi

关于sap:SAP-CDS-view自学教程之一如何测试基于SAP-CDS-view自动生成的OData服务

I am a newbie of CDS view related topic and recently I have to learn it. I will write down here not only the knowledge I learned but also the way how I obtain them via self study ( debugging, or other ABAP tool ). Because it would be quite easy for us to just paste the source code of sample CDS view from other guy’s blog and activate it. The CDS view works. But what have you learned from this simple Ctrl+c and Ctrl+v? For me, I always get used to dig a little bit deeper such as “what has happened in the backend after I click the activate button in ABAP development studio? “. ...

September 9, 2020 · 4 min · jiezi

关于sap:SAP-CDS-view自学教程之二当SAP-CDS-view被激活时背后发生了什么

You paste the following source code for a simple CDS view into ABAP development studio and activate it: @AbapCatalog.sqlViewName: 'zjerrySQL0208'@AbapCatalog.compiler.compareFilter: true@AccessControl.authorizationCheck: #CHECK@EndUserText.label: 'test 233'@ObjectModel: { createEnabled, deleteEnabled, updateEnabled}define view Zjerrytest20160208as select from spfli association [0..1] to scarr as _scarron _scarr.carrid = spfli.carrid { key spfli.carrid, key _scarr.carrname, key spfli.connid, spfli.cityfrom, spfli.cityto}And you would like to know what objects are automatically generated during CDS view activation. Automatically generated ABAP objects during CDS view activationYou could query table TADIR with following parameters: ...

September 9, 2020 · 2 min · jiezi

关于sap:SAP-CDS-view自学教程之三ABAP-Development-Tool里的CDS-view源代码如何传递到ABAP后台

Let’s review what we have learned so far. Through SQL trace and debugging, we have learned below: (1) When we click activate button in ABAP development tool ( I call it Eclipse now in this blog ), there are several corresponding ABAP objects generated and table entries inserted. Through debugging we know lots of related logic are implemented in package SDDL. (2) When we test read & search function against the odata service created on top of the CDS view, the operation is delegated to CL_SQL_STATEMENT~EXECUTE_QUERY. ...

September 9, 2020 · 3 min · jiezi

关于sap:SAP-CDS-view自学教程之四SAP-CDS-view注解ODatapublish的奥妙

In part1 of this tutorial, the old way to create OData service on top of CDS view is introduced.In SAP Help Generate Service Artifacts From a CDS View a new annotation is described: @OData.publish: trueJust add this annotation to your CDS view and the odata service is automatically created, no need for you to go to code SEGW any more. Once activated, the odata service with naming convention “<your CDS view name>_CDS” is available for registration in tcode /IWFND/MAINT_SERVICE: ...

September 9, 2020 · 2 min · jiezi

关于sap:SAP-Fiori-Elements原理介绍之类型为Value-Help的Smart-Field工作原理

In previous blog Currency example – how Smart field works, one simple smart field is introduced: In this blog, let’s go further to study how the value help of currency field is implemented by framework: Once we open F4 value help of currency field, we could see a new popup. both the value help on currency field itself and this popup dialog are implemented by UI5 framework, there is no application coding at all. The source code of xml view and controller remain unchanged compared with previous example – but indeed the UI element, the currency field, behaves differently – this is actually the meaning of “smart” – the behavior of UI element depends on the annotation defined in OData model metadata. ...

September 9, 2020 · 3 min · jiezi

关于sap:在SAP-WebClient-UI里使用AJAX进行异步数据读取

For POC purpose I need to implement the AJAX functionality in Webclient UI component.The UI component has only one input field: Once type “a” into the input field, it immediately displays all the records in the database table SCARR whose column carrname contains the character “a” ( without any other operation like manual refresh) change the value in the input field, the page will display the latest matched result automatically: ...

September 9, 2020 · 5 min · jiezi

关于sap:作为一个SAP开发人员需要学习SAP传统技术比如ABAP以外的开源技术吗

I joined SAP China seven years ago after graduation and knew nothing about SAP or ABAP at that time. Now I am working as a development expert in SAP. I just would like to share my personal experience and felling on several technology which are not invented or owned by SAP ( such as Java, C# etc ) and how did those technology influence my career life. ...

September 9, 2020 · 10 min · jiezi

关于sap:一个好用的SAP-ABAP工作进程跟踪工具

As an ABAPer we have SAT, ST05 ( or sometimes ST12 ) for trace in our toolbox, and recently I find this report which could also do the trace job. Although the trace information it generates is quite technical and perhaps more useful for those guys who are interested with the ABAP kernel. How to use this report(1) SE38, execute report RSTRC000, mark the checkbox “Keep Work process”, so that a free work process will be owned exclusively by you unless you release it via this report again. And change the trace Level to 2: Full trace. Select the component which you would like to trace, for example Database. ...

September 9, 2020 · 3 min · jiezi