自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9298)
  • 资源 (5)
  • 论坛 (6)
  • 收藏
  • 关注

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

转眼间,又到了2020年末写年度总结的时候了。我一直觉得,对于像Jerry这样,年复一年整天两点一线,除了编程还是编程的程序员来说,年度总结可以增加一些生活的仪式感。本文是我开通公众号之后的第四个年终总结,前三年的年度总结如下:Jerry的2017, 编程与游泳一个SAP开发人员的2018年终总结一个SAP开发人员的2019年终总结2020年,对于很多人来说都是刻骨铭心的一年,对于我来说更不例外。回顾自己前三十多年,从上学到高考,读研究生,再到求职,娶妻生子,我的生活一直都一帆风顺

2020-12-30 19:45:23 405 9

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

青春少年是样样红可是太匆匆流金岁月人去楼空人生渺渺在其中荣华富贵呀飞呀飞世上的人呀追呀追荣华富贵呀飞呀飞何时放下歇一歇能不能愿昼吉祥夜吉祥愿用家财万贯买个太阳不下山小的时候,听过黄安这首《样样红》,觉得是首口水歌曲。如今Jerry也到了上有老,下有小的年纪,即将年满四十,觉得歌词每一行都是金句,耐人寻味。我们每一位油腻的SAP中年从业者都曾经青春年少过,谁的青春岁月,没有意气...

2020-09-05 17:50:16 1627

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

我是SAP成都研究院的Jerry Wang,我喂自己袋盐。时间过得真快,2017年发生的事情还历历在目,一转眼,2018年又马上要结束了。Jerry惊恐地发现,随着年龄的增长,时光流逝的速度仿佛有加快的趋势。因此,年终的记录显得更为重要。把自己一年做的无论工作还是生活上的事情梳理一遍,若干年后来回味,一定非常有意思。2017年,Jerry的工作和生活,可以用这两个关键字概括:编程和游泳**...

2018-12-31 10:30:13 3613 2

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

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

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

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

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

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

原创 SAP Spartacus RouteReducer

RouteReducer是一个状态机,实现体位于router.reducer.ts文件内的reducer函数内。这个状态机的输入参数是当前路由状态state,类型为RouterState,以及当前传入ngrx store的action,而输出,是根据这两个输入参数,而推导出的新状态RouterState.例如,当输入的action类型为fromNgrxRouter.ROUTER_NAVIGATION时,输出的下一状态,即action的payload结构里包含的routerState字段。而如果输入a

2021-03-02 15:46:03 2

原创 SAP Spartacus State

定义位置:core/src/routing/store/routing-state.ts:这里使用了一个常量,强行定义了State字段的名称为router:如此一来,下列赋值语句:let a: State = { [ROUTING_FEATURE]: '' }; a[ROUTING_FEATURE] = 'Jerry'; let b: State = {}; b[ROUTING_FEATURE] = '1';第140行的语句会引起编译错误:

2021-03-02 15:10:26 2

原创 SAP Spartacus 数据类型定义汇总

RouterState

2021-03-02 14:27:03 4

原创 SAP Spartacus RouterState

定义文件的位置:src/routing/store/routing-state.ts是一个interface:扩展自fromNgrxRouter.而fromNgrxRouter:import * as fromNgrxRouter from '@ngrx/router-store';这个文件是自动生成的:而RouterState在NgrxRouter的state基础上,增添了一个新字段nextState:运行时数据:由此可见,虽然RouterState不包含navigationI

2021-03-02 14:26:12 2

原创 关于SAP Spartacus Routing 页面上下文切换机制的实现

changeNextPageContext(pageContext: PageContext) { this.store.dispatch(new RoutingActions.ChangeNextPageContext(pageContext)); }从实现代码能看出,SAP Spartacus所有routing页面的Page Context,即id和type字段的组合,都维护在ngrx store内。Page context插入,通过store的dispatch方法来完成。所以这..

2021-03-02 13:33:17 3

原创 关于SAP Spartacus的Action - LoadCmsPageData

[Cms] Load Page Datapage.action.ts里:export const LOAD_CMS_PAGE_DATA = '[Cms] Load Page Data';所有加载CmsPage的action,都是LoadCmsPageData的实例。每个实例包含一个readonly的字符串硬编码,作为该action的类型标识,以及来自结构PageContext的两个字段,type和id:StateUtils.EntityLoadAction的类型:包含type和meta字段。

2021-03-02 12:07:50 2

原创 SAP Spartacus的版本机制

打开SAP Spartacus项目文件夹下面的package.json:~9.1.12: tilde 表示安装9.1.x的最新版本,不低于9.1.12, 但是不安装9.2.x的版本。即安装时主版本号和次版本号不变,固定为9.1^2.1.0: caret, 安装2.x.x的最新版本,不低于2.1.0, 但是不安装3.x.x的版本。即安装时主版本号不变,固定为2.这些加了next标签的版本,是所谓的pre-release库文件,通常早于新的minor版本发布前几周所发布,目的是为了向社区搜集新feat

2021-03-02 11:37:56 9

原创 从ngrx store里selector出来的Observable,执行subscribe的单步调试

源代码: getNextPageContext(): Observable<PageContext> { const a = this.store.pipe(select(RoutingSelector.getNextPageContext)); console.log('Jerry next page context: ' + a); a.subscribe((b) =>{ console.log(b); }); return a;

2021-03-01 22:54:22 17

原创 SAP Spartacus home page的url的拼装逻辑 - population logic

@NgModule({ providers: [ // b2c provideConfig(layoutConfig), provideConfig(mediaConfig), ...defaultCmsContentProviders, // b2b provideConfig(defaultB2bOccConfig), provideConfig(defaultB2bCheckoutConfig), provideConfig({

2021-03-01 22:33:31 10

原创 SAP Spartacus的home page navigation逻辑

我以开发模式启动SAP Spartacus,浏览器里输入url: localhost:4200, 会自动重定向到如下页面:http://localhost:4201/powertools-spa/en/USD/在router.reducer.ts里打印出action明细:fromNgrxRouter.ROUTER_NAVIGATION发现powertools-spa/en/USD对应的semanticRoute是home, 而context字段指向的PageContext,id为__HOMEPA

2021-03-01 21:10:12 13

原创 SAP Spartacus LayoutConfig的配置为何运行时不生效

看个具体的例子:运行时我期望在header区域能看到7个Logo,然而没能按照我期望的工作。看一个配置能够正常工作的例子:再看不能正常工作的例子:配置信息header前面少了一层层级结构:LayoutSlots:在app.module.ts的配置信息里,重新增添上layoutSlots的层级结构,问题消失:完整的配置代码:ConfigModule.withConfig({ layoutSlots: { header: { lg: {

2021-03-01 14:40:03 15

原创 SAP Spartacus的页面布局配置 - LayoutConfig

The CMS provides the page structure, but it does not provide a clear layout definition. The page structure only provides an ordered list of components per slot, but the slots themselves do not have meta info on how they should be rendered in the layout..

2021-03-01 14:27:49 21

原创 SAP Spartacus 标准类型的字段扩展 - type augmentation

The models that are most frequently customized are currently placed in @spartacus/core.The following is an example of module augmentation onthe ConsentTemplate model:假设我想扩展Spartacus core里的标准interface:ConsentTemplate首先从Spartacus core里导入:import { Acti

2021-03-01 11:52:17 68

原创 SAP Spartacus ConsentTemplate 数据结构的暴露逻辑

我基于SAP Spartacus 2.1创建的sample store,里面导入了ConsentTemplate这个数据结构。import { ActiveCartService, CartAddEntrySuccessEvent, CmsConfig, Config, ConfigModule, ConsentTemplate, EventService } from ‘@spartacus/core’;Visual Studio Code里单击这个数据结构,进入如下文件:node_modules

2021-03-01 11:46:03 65

原创 Angular routerLink指令的href属性生成逻辑

一个例子:运行时,触发change detection,调用refreshView方法:RouterLinkWithHref这个class实现了ngOnChanges hook方法:在updateTargetUrlAndHref方法里,生成href:this.commands就是我们传入到routerLink Directive里的输入:createUrlTree:将JavaScript对象this.urlTree, 序列化成字符串url:更多Jerry的原创文章,尽在:“汪

2021-03-01 11:31:44 64

原创 如何通过ActivationStart监控 Angular的路由激活事件

看个具体的例子:在app.component.ts里注入Router:export class AppComponent { constructor(router:Router){ console.log('Checking router'); router.events.pipe( filter(e => e instanceof ActivationStart) ).subscribe(e =>{ console.log('路由开始

2021-02-28 14:44:45 21

原创 Angular 路由的wild匹配

我如果在Angular Component里输入一个并不存在path配置的url,会遇到如下错误消息:ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: ‘custom/any/2’解决方案:再增添一个Angular wild 路由匹配,路径如下: { path: '**', component: WildComponent }之后就不会有错误消息了:更多J

2021-02-27 22:18:33 22

原创 Angular路由里的resolve接口的使用方法

https://angular.io/api/router/ResolveInterface that classes can implement to be a data provider. A data provider class can be used with the router to resolve data during navigation. The interface defines a resolve() method that is invoked when the naviga

2021-02-27 21:39:08 37

原创 SAP官方帮助网站,help.sap.com 背后那些事儿

这是Jerry 2021年的第 16 篇文章,也是汪子熙公众号总共第 287 篇原创文章。“My momma always said life was like a box o’chocolates. You never know what you gonna get.”“母亲经常说,人生就像一盒巧克力,你永远不知道你会得到什么。”这段话用在程序员的职场生涯上也同样成立。就在2020年8月前,Jerry 在 SAP 成都研究院的开发工作,一直专注在后台开发领域,使用的编程语言和平台是 ABAP,J

2021-02-27 18:46:58 964 6

原创 Angular路由里的canActivate用法

看个具体的例子。const CUSTOM_ROUTES: Routes = [ { path: "custom/:id", component: RouteDemoComponent, data:{ name: 'jerry'}, canActivate: [CanActivateTeam] }];canActivate的类型是数组,而不是单个元素。在app.module.ts的providers里,导入CanActivateTeam:canActivate

2021-02-26 21:42:21 23

原创 TypeScript里的中括号类型定义法

下图定义了一个类型Data,可以包含一个字段,指向任意数据:https://stackoverflow.com/questions/58090665/typescript-what-is-the-type-of-the-object-name-string-string class aa{ constructor(headers?: string | { [name: string]: string | string[]; }){ } }含

2021-02-26 19:50:10 23

原创 TypeScript里的Index signature

参考链接:https://basarat.gitbook.io/typescript/type-system/index-signatures看一个例子:class Foo { constructor(public message: string){}; log(){ console.log(this.message) } } let foo: any = {}; foo['Hello'] = new Foo('World')

2021-02-26 19:36:28 22

原创 如何从Angular的ActivatedRoute数据结构中获得运行时路由信息

看个具体的例子:路由配置信息:const CUSTOM_ROUTES: Routes = [ { path: "custom/:id", component: RouteDemoComponent }];RouteDemoComponent的实现:import { Component, OnInit } from '@angular/core';import { ActivatedRoute } from '@angular/router';import { Observable } f

2021-02-26 17:09:57 21

原创 Angular Route数据结构里常用字段使用方法一览

本文介绍Route interface里常用字段的使用方法。https://angular.io/api/router/Route#descriptionpathCan be a wild card (**) that matches any URL (see Usage Notes below). Default is “/” (the root path).两个星号:代表任意匹配。pathMatchThe path-matching strategy, one of ‘pref

2021-02-26 16:37:56 20

原创 为什么Angular的路由执行离不开router-outlet标签

做一个实验,如果把第53行包含router-outlet的代码注释掉:则在运行时,context.outlet为null:如此一来,没有机会执行第4107行的代码了:context.outlet.activatedWith(future, cmpFactoryResolver);RouterOutlet里包含的有用信息:整个这段代码都是在router-outlet的实现上下文里执行的。更多Jerry的原创文章,尽在:“汪子熙”:...

2021-02-26 13:52:14 29

原创 Angular router-outlet占位符层级结构的子节点,运行时是如何插入的

我有一个简单的Component:@Component({ selector: "app-root", template: ` <a href="/custom2">Click me</a> <div class="container"> <router-outlet></router-outlet> </div> `})export class AppComponent {运行时,router

2021-02-26 11:57:06 22

原创 最简单的Angular Route hello world场景都跑不通的一个原因

我有一个最简单的app Component:@Component({ selector: "app-root", template: ` <div cxFocuses>Painful</div> <a href="/custom2">Click me</a> `})export class AppComponent {}我期望点击了Click Me这个标签之后,能跳转到相对路径/custom2.在app.module.js里

2021-02-26 11:33:12 31

原创 如何使用Chrome command API查找SAP Spartacus的router-outlet

Chrome Command Line API的语法:两个美元符号$$等价于document.querySelectorAll总共两个router-outlet:第一个元素:第二个元素在split view里:更多Jerry的原创文章,尽在:“汪子熙”:

2021-02-26 10:40:30 24

原创 StackBlitz里无法重命名项目的问题

为了找到重命名StackBlitz项目名称失败的问题,我打开了Chrome开发者工具,在network标签页里看到了这样的错误消息:has already been taken这说明,StackBlitz的项目是全局可见的,所以起名angular_route这种名称几乎100%会和StackBlitz上其他已有的项目产生命名冲突,可以在名称上加上自己名称作为前缀,比如jerry_i042416这种,就可以重命名成功了:更多Jerry的原创文章,尽在:“汪子熙”:...

2021-02-25 22:59:52 32

原创 Angular路由错误消息 - router-outlet is not a known element

我在application Component的HTML里定义了一个router-outlet元素:遇到错误消息:router-outlet is not a known element查看其定义,源代码比文档更有说服力:/** * @description * * Acts as a placeholder that Angular dynamically fills based on the current router state. * * Each outlet can have

2021-02-25 22:52:43 22

原创 SAP Spartacus里px,em和rem的应用

pxpx像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。任意浏览器的默认字体高都是16px.emem是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。em的值并不是固定的;em会继承父级元素的字体大小。rem使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。rem可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以

2021-02-25 11:58:10 23

原创 什么是前端开发中的Pseudo elements

Pseudo元素的定义语法:连续出现的两个冒号。很早期的pseudo元素甚至使用了单冒号的定义语法。看一个具体的例子:下图article元素里包含了一个p节点,节点内包含了一段话。现在我想把这个段落的第一行用蓝色高亮:使用pseudo元素的selector可以轻松实现这个需求:article p::first-line{color: blue;}更多Jerry的原创文章,尽在:“汪子熙”:...

2021-02-25 11:43:37 38

原创 Firefox开发者工具里查看HTML元素的Box模型

box模型的组成部分:Content box:通过width和height属性指定大小。padding box:衬垫。包裹content盒模型。border boxmargin box如下图所示:标准的CSS模型里,box的尺寸为content box,padding和border之和:切换成另一种盒模型: alternative model语法:box-sizing: border-box切换成alternative mode之后,height和wid

2021-02-25 11:34:46 26

原创 SAP Spartacus里的bootstrap button usage

package.json里对bootstrap的引用:The .btn classes are designed to be used with the element. However, you can also use these classes on or elements (though some browsers may apply a slightly different rendering).When using button classes on elements that a

2021-02-25 11:24:29 24

原创 一个SCSS里mixin的使用例子

Mixins are the Sass equivalent of macros in other programming languages. If you’ve programmed before you could think of them as functions, procedures, or methods, but they aren’t technically any of these concepts because their function is to generate code.

2021-02-24 19:00:46 24

适合程序员使用的文件搜索工具,支持各种高级搜索条件

程序员

2021-02-20

dgreadiness_v3.6.zip

windows10 1909版本,如果想安装VMWare Workstation player 15.5.5,需要使用该powershell脚本,在Administration模式下,禁掉hyper V

2021-02-17

winzip70 (1).exe

winzip的经典版本,适用于windows 98实体操作系统及虚拟机

2021-02-16

自己用Java编写的有道云笔记图片批量下载工具

使用方式:java -jar tool.jar [0,1,2] 0,1,2分别是有道云笔记的编号。0的guid:c91a710af51c1e1b20f5d1da2140a9e4; 1的guid:4cc557ab9b7cbde0515b49a155c5dce3 2的guid:6eaae532daaa678cc610f2a34cbc9119

2020-11-29

《Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现》文章的源代码

《Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现》文章的源代码下载,解压之后手动复制粘贴到ABAP系统的SE24或者SE80事物码里。

2020-11-24

汪子熙的留言板

发表于 2020-01-02 最后回复 2020-03-20

怎样才是理想的程序员

发表于 2015-06-28 最后回复 2019-07-29

SAP的这三款CRM解决方案,您能区分清楚么

发表于 2018-01-08 最后回复 2018-01-09

脑子快”的程序员更优秀吗

发表于 2015-08-09 最后回复 2015-10-27

一个平庸程序员的自白

发表于 2015-08-22 最后回复 2015-08-22

金庸小说里程序猿的练级心法

发表于 2015-06-28 最后回复 2015-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

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