自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 SAP技术专家Jerry的技术分享微信群 -11月26日更新 - 还剩72个名额

SAP技术专家Jerry的技术分享微信群 2020年10月19日才创建的微信群,里面会不定期分享我的工作感受和对SAP技术发展方向的个人看法,欢迎扫码加入。 加入群后请将自己的昵称改成如下格式: <地区>-<所用的SAP产品,模块或技术>-<昵称>,比如成都-C...

2020-10-19 11:11:27 307 9

原创 一个SAP开发人员的2019年终总结

青春少年是样样红 可是太匆匆 流金岁月人去楼空 人生渺渺在其中 荣华富贵呀飞呀飞 世上的人呀追呀追 荣华富贵呀飞呀飞 何时放下歇一歇 能不能愿昼吉祥夜吉祥 愿用家财万贯 买个太阳不下山 小的时候,听过黄安这首《样样红》,觉得是首口水歌曲。如今Jerry也到了上有老,下有小的年纪,即将年满四十,觉得...

2020-09-05 17:50:16 1360 0

原创 一个SAP开发人员的2018年终总结

我是SAP成都研究院的Jerry Wang,我喂自己袋盐。 时间过得真快,2017年发生的事情还历历在目,一转眼,2018年又马上要结束了。 Jerry惊恐地发现,随着年龄的增长,时光流逝的速度仿佛有加快的趋势。因此,年终的记录显得更为重要。把自己一年做的无论工作还是生活上的事情梳理一遍,若干年...

2018-12-31 10:30:13 3416 1

原创 一个SAP开发人员的2017总结

今年的生活如此丰富多彩,不写一点什么怎么对得起这过去的一年? 就当记流水账,若干年之后回来看一定很有意思。 1月 有幸成为SAP Community上2位来自China的SAP mentor之一: 3月 再次来到客户现场,和他们的架构师讨论二次开发时选用UI5还是用Vue. ...

2018-01-21 14:59:46 7965 2

原创 SAP成都研究院35岁以上的开发人员都去哪儿了?

2006年成立的SAP成都研究院,位于天府软件园B区。如今,因为研究院发展的不断壮大, 已经搬迁到天府软件园E区了,因此,发生在图片building各种充满悲欢离合的故事,已经成为一部分小伙伴脑海中难以磨灭的回忆,永远消逝于历史的长河之中。 我为什么要写这篇文章 SAP成都研究院有很多刚从...

2018-01-13 15:34:19 2931 0

原创 ABAP开发人员未来应该学些什么

2007年1月我大学毕业进入SAP Chengdu从事开发工作,到今天已经整整11年了。 这张图在ABAP开发圈子里曾广为流传: 为了避免这种窘境发生在ABAPer身上,我们应该做点什么呢? 2017年刚开始的时候,我曾经在SAP community写过一篇文章: What should...

2018-01-07 15:44:00 7866 1

原创 Angular 依赖注入机制根据providers定义生成注入实例的框架代码

/** * Converts a `SingleProvider` into a factory function. * * @param {?} provider provider to convert to factory * @param {?=} ngModuleType * @...

2020-11-27 11:01:24 0

原创 Angular依赖注入useClass的实例创建位置

用@NgModule在providers定义了MyService token用useClass来提供: MyNewService的初始化过程: InjectionToken: this.records: 一个巨大的map,key为injection token, value的数据结构如下图...

2020-11-27 10:56:12 0

原创 关于Angular @Injectable的几种测试情况

我有一个服务类: export class MyNewService { seed: number; text: 'NewService'; constructor(){ this.seed = Number((Math.random() * 100).to...

2020-11-27 10:53:27 0

原创 为什么Spartacus单元测试里对http返回的Observable对象调用subscribe时,会触发依赖注入的框架代码

今天我工作发现,一旦下面单元测试代码第109行,即subscribe方法单步调试进去: 会触发HTTP请求真正的执行,即请求发送给服务器: 试图获取HTTP_INTERCEPTORS这个injection token: 当前以HTTP_INTERCEPTORS为token的records: ...

2020-11-26 19:01:17 5 0

原创 Angular HttpClient.get的实现单步调试

进入get方法: request方法实现的源代码: @Injectable() export class HttpClient { constructor(private handler: HttpHandler) {} /** * Sends an `HTTPRequest`...

2020-11-26 18:44:27 5 0

原创 SAP Spartacus里的HTTPErrorInterceptor的设计原理

HTTPErrorInterceptor有一个protected的成员,handlers,类型为HttpErrorHandler: HttpErrorHandler是一个abstract class: 其子类需要实现handleError这个定义在其上的abstract方法: 父类的resp...

2020-11-26 17:23:48 5 0

原创 SAP Spartacus里的HTTPErrorInterceptor的单元测试设计原理

测试UnKnownErrorHandler是否能正确 处理UnknownError这个状态: 这个handler是import进来的: 调用经过TestBed.inject注入后的http: 执行subscribe: UnknownErrorHandler此时才被惰性加载: 这个fake...

2020-11-26 17:05:15 5 0

原创 Angular如何对包含了HTTP请求的服务类进行单元测试

本文使用到的所有代码在Github这个文件夹下面: https://github.com/wangzixi-diablo/angular-sandbox/blob/master/src/app/ngrxdemo/service/unittest-study 服务类实现: import { Inje...

2020-11-26 15:48:58 9 0

原创 Spartacus里HTTPErrorInterceptor的设计原理

这个Interceptor继承自HttpInterceptor,在intercept方法里,理论上能监控所有的HTTP方法,只是在这个方法的实现体里,手动选择只CatchError: request对象: 现在暂时还不知道这条next interceptor链是怎么build的。 更多Je...

2020-11-26 15:23:21 5 0

原创 Angular应用的router-outlet使用一个例子

项目地址:https://angular-jerry-empty-store.stackblitz.io TopBar Component里,使用Angular routerLink指令设置了一个路由参数/top: 输入完整的url:https://angular-jerry-empty-sto...

2020-11-25 21:59:06 13 0

原创 Angular依赖注入的学习笔记

Angular官方文档 Specifying a provider token If you specify the service class as the provider token, the default behavior is for the injector to instanti...

2020-11-25 19:06:42 8 0

原创 NullInjectorError:No provider for MyNewService

错误消息: ERROR NullInjectorError: R3InjectorError(AppModule)[MyService -> MyNewService -> MyNewService -> MyNewService]: NullInjectorError: No...

2020-11-25 16:44:40 9 0

原创 SAP Spartacus避免不能向下兼容的breaking changes

文档地址 以下这些都是引入了无法向下兼容的breaking changes,需要尽量避免: Changing the selector of a component, directive, or pipe. 更改了Component,directive或者pipe的selector Removi...

2020-11-25 15:55:46 4 0

原创 一个好用的查看Angular应用ngrx状态的Chrome扩展:Redux devTools

Redux DevTools: https://chrome.google.com/webstore/detail/lmhkpmbekcpmknklioeibfkpmmfibljd 安装完毕后,在Chrome开发者工具里会多出一个Redux面板: 以及在Chrome右上角的扩展工具栏里,会点亮...

2020-11-22 21:18:28 22 0

原创 SAP Spartacus的发布方式以及语义化版本管理机制

Spartacus打包之后,以库的方式发布到npmjs.com上。 Spartacus库主要有三个实体组成:core,Storefront和styles. 其中Storefront包含了用户肉眼可见的,组成Storefront外观的UI组件,客户可以重用和增强这些组件。Core则包含了Spart...

2020-11-21 21:51:45 37 0

原创 Spartacus同SAP Commerce Cloud交互的示意图

链接:https://sap.github.io/spartacus-docs/connecting-to-other-systems/ 我们首先看图的最右边。Spartacus同Commerce系统的通信,通过HTTP协议完成。Connector发起HTTP调用,Connector维护了静态的配...

2020-11-21 21:47:02 17 0

原创 SAP Spartacus使用到的技术栈

前面说到,Spartacus是基于现代Web开发技术打造而成的一个Storefront开发框架,因此涉及到的技术栈都是目前前端开发普遍使用的一些比较成熟的技术。 Angular:由Google维护的一款web前端开发框架,采用了大量有十几二十年历史的成熟技术,比如依赖注入、接口、注解等等,同...

2020-11-21 21:45:50 35 0

原创 SAP Commerce Accelerator和SAP Spartacus的技术对比

Accelerator是Spartacus发布之前,SAP Commerce Cloud使用的Storefront实现。Accelerator是一个开箱即用的web实现模板,是Commerce平台的一部分,以源代码的方式交付给客户。客户通过一个叫做module generator的工具,基于Acc...

2020-11-21 21:01:50 36 0

原创 一个问题:CDS view在HANA studio里执行,显示的耗时比在ABAP open SQL里少

Sent: Samstag, 8. Juli 2017 11:03 Subject: RE: have a quick discussion about why the CDS view has a bad performance displayed in ST05 or SAT but the ...

2020-11-21 20:44:58 14 0

原创 在StackBlitz上进行rxjs编程练习

网址:https://stackblitz.com/ 新建一个Angular应用,类型选择RxJS: StackBlitz会自动生成应用模板: 源代码: import { of } from 'rxjs'; import { map } from 'rxjs/o...

2020-11-21 09:47:06 14 0

原创 搬迁声明

我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:JerryWang_SAP,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply

2020-11-19 19:16:26 32 0

原创 SAP 2020全球技术大会(SAP 2020 TechEd)中国区会场现在开始报名啦!

今年由于疫情原因,SAP TechEd 全球技术大会将在线上盛大启幕。中国专场将在12月15日举行。SAP生态圈的业界领袖,行业专家,合作伙伴和研发者们将云集这个盛会,深入探索SAP的技术发展趋势。Jerry也是这次大会的主讲人之一。欢迎大家扫描Jerry的二维码进行报名。 好多session已经...

2020-11-19 10:48:50 41 0

原创 Spartacus image alt属性的绑定实现

今天在程序员微信群里看到一条让所有在成都高新区天府软件园工作的程序员都觉得震惊的新闻。我们在成都天府软件园各大写字楼里工作的程序员,因为工作节奏非常快,中午吃饭一般通过点外卖解决,这样节省时间,中午可以利用午饭时间在座位上小睡一会。最近不是由于疫情原因嘛,送外卖的小哥无法像过去那样直接进入写字楼,...

2020-11-16 20:30:58 4334 13

原创 SAP Spartacus org unit list当前行is-current的判定逻辑

在Spartacus _list.scss里有这样的mixin定义: is-current-active-selection: 定义在organization unit list行项目的a标签的class:is-current上 运行时效果: 换一种颜色: 什么时候给这个tr标签分配的i...

2020-11-15 18:36:15 33 0

原创 SAP Spartacus后台CMS Component和Angular Component的映射关系

a skeleton using CMS Components from backend: ConfigModule.withConfig({ cmsComponents: { SimpleResponsiveBannerComponent: { ...

2020-11-15 12:32:27 30 0

原创 并不是所有SAP产品的UX,都得遵循Fiori UX风格

比如SAP Commerce Cloud Storefront的UX. 一个朋友提问:求教Commerce 大拿:Spartacus 与 Commerce UX Design - Fiori 之间有什么联系吗?比如 Spartacus Storefront UI 也是Follow Fiori 设计...

2020-11-15 12:30:22 57 0

原创 关于SAP Kyma在国内的落地情况

一个朋友问我: 我们现在做commerce扩展用kyma嘛?在国内落地了嘛?研究院有兄弟研究过这个玩意儿嘛?这个东西现在能部署在azure之类上吗? Jerry的回答 我就研究过kyma,产品化就是Extension Factory,已经落地了。中国的客户,理论上只要购买了Azure,就可以一键...

2020-11-15 12:00:06 34 0

原创 Jerry的反省:程序员不要轻易说出“这个功能技术上无法实现“

这是Jerry 2020年的第81篇文章,也是汪子熙公众号总共第263篇原创文章。 Jerry之前的文章从医院到家,再重返SAP成都研究院,Jerry还没死 提到,我手术后重返SAP成都研究院,加入了Global的Spartacus开发团队,开始从事SAP Commerce Cloud新一代Sto...

2020-11-15 11:46:35 49 0

原创 HTML table标签和其子标签如td,td等不同区域focus然后回车的行为差异

第一版table: <html> <body> <table> <thead> <tr> <th> Name </th> <th> Value </th> &...

2020-11-13 13:40:23 52 0

原创 SAP Spartacus org unit table不同区域focus然后回车的行为差异

使用tab键首先把focus设置在table row上,点回车: 此时打开的是url: 如果focus的是button: 回车之后会展开该org unit: 更多Jerry的原创文章,尽在:“汪子熙”:

2020-11-12 21:43:50 30 0

原创 SAP Spartacus org unit table的DOM structure

下图这个table的DOM元素结构:

2020-11-12 21:38:30 31 0

原创 一个能够保护个人收藏夹隐私的Chrome扩展

作为一个程序员,由于工作需要,经常得给其他人共享桌面。 但我不想我分享桌面的时候,别人看到我浏览器的收藏夹,如下: 我当然可以用快捷键Ctrl+Shift+B来隐藏整个收藏夹栏,但如此一来,我自己使用也很不方便了: 后来我找到一个好用的Chrome收藏夹扩展:Neater Bookmarks:...

2020-11-12 21:33:51 82 1

原创 一个好用的Chrome倒数计时器扩展 - Calendar and Countdown

作为程序员,我采用番茄工作法,需要在指定的时间段内完成一些任务,比如30分钟之内,完成单用测试用例的编写,因此我需要一些软件或者Chrome扩展来帮助我完成倒数计时的任务。 我在Chrome webstore上找到了这款扩展:Timer 使用非常方便,指定倒数计时的时长,比如半小时,点击开始按钮...

2020-11-12 16:52:06 71 1

原创 一个好用的时间管理Chrome扩展 - Calendar and Countdown

作为一个程序员,很多时候需要日期倒计时的功能(count down),比如还有多少天release某个产品的某个版本。 为此我找了一个Chrome扩展,名叫Calendar and Countdown: 这个扩展启动之后外观如下: 单击日历上将来的任何一天,可以创建一个日期倒计时的里程碑,取个...

2020-11-12 16:39:51 71 1

提示
确定要删除当前文章?
取消 删除