Angular Ngrx Store Effect 和 Action 的交互流程
我们可以使用 Meta Reducer 即高阶 Reducer 的概念。 下面是一个典型的例子:Logger Meta Reducer. 该高阶 Reducer 在真实的归约器执行之前添加一些日志消息: export function logger(reducer: ActionReducer<AppState>): ActionReducer<AppState&
Angular Ngrx Store 工具库里 Action 定义指南
Store 文件夹数据结构的一个典型例子: 当您第一次使用 ngrx/store 模块时,必须决定运行应用程序所需的操作。 首先分析从服务器端加载 Heroes 数据的过程并决定应该进行哪些 Action 建模。 从服务器端加载所有英雄数据,因此需要一个加载英雄的动作。一个 Effect 启动并从服务器端检索英雄数据。 Effect 还需要通知 Store 我们已经成功地检索到了 He
关于缺少编程基础的朋友想转行 ABAP 开发岗提出的一些咨询问题和解答
最近接到一位朋友的咨询,关于非编程专业背景想转行 ABAP 开发岗的可行性和具体的努力方向,我觉得问题有一定的代表性,因为以前也接收到类似的咨询。所以单独写一篇短文分享。本文仅代表作者个人观点,和 SAP 官方无关。 1. ABAP 开发岗的职业发展大致是什么样的?是不是真的“越老越吃香”?目前的市场需求如何?我们以本地部署(On-Premises)的基于 ABAP 的 SAP 产品为例,比
一个前端开发工程师的天猫精灵评测报告
虽然从普通用户眼中,使用语音向天猫精灵发起指令,然后收到后者的语音回复,这个流程似乎很简单,但背后实际上有着人工智能中 ASR(语音识别)、NLP(自然语言处理)、TTS(语音合成)等自然语言处理技术的参与和整合。 我们先来看一个典型的用户通过语音同天猫精灵交互的流程图。 用户用语音唤醒天猫精灵,后者接收到用户语音,上传到智能应用平台。 平台使用 ASR(音频转文字)和 NLP(自然语言
用 React 结合 SAP UI5 Web Components 来开发 SAP Fiori 应用
在 Fiori Fundamentals 和 SAP UI5 Web Component 诞生之前,SAP UI5 是开发SAP Fiori应用唯一可供选择的前端框架。 很显然SAP对前端领域蓬勃发展的Vue,Angular,React这三驾马车并未熟视无睹,这才有了Fiori Fundamentals和SAP UI5 Web Component的问世。 什么是 Web Component
在 SAP 云平台上部署和运行 Docker 应用
容器技术,Docker,虚拟化,这些名词诞生尽管有很长一段时间了,但是在云原生开发领域仍旧热度不减。甚至连SAP赖以成名的 ABAP Netweaver,如今也踏上了容器化的上云探索之路,比如下面这张来自SAP社区的一篇博客: 对于 SAP 生态圈的客户来说,常见的需求之一,就是能够将使用一个或多个支持服务(数据库/消息传递等)的任何现有业务应用程序迁移到云。 实现此目的的一种方法是在虚拟机
SAP 电商云 Spartacus UI 客户系统的跨域请求
CORS(跨域资源共享)是一个系统,由传输 HTTP 标头组成,用于确定浏览器是否阻止前端 JavaScript 代码访问跨域请求的响应。 同源安全策略禁止跨域访问资源。 但是 CORS 使 Web 服务器能够表示他们希望选择允许跨域访问其资源。 Access-Control-Allow-Methods指定在访问资源以响应预检请求时允许的一种或多种方法。上面的例子为 POST. Ac
一个15年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害
在笔者之前的文章里,曾经提到了 SAP社区上这样一篇博客:Proof of Concept: Deploying ABAP in Kubernetes 里面介绍了SAP Linux实验室的工程师们将ABAP应用服务器各组件进行容器化并部署到Kubernetes上的尝试。 本文简单回顾ABAP Netweaver应用服务器的主要组件。虽然即使不了解这些知识,也不影响ABAP开发人员完成日
Chrome 开发者工具 network 显示 Provisional headers are shown 的几种原因
HTTP 标头是显示在超文本传输协议 (HTTP) 的消息标头的请求和响应消息中的名称或值对。 请求标头包含有关要获取的资源或请求资源的客户端的更多信息。 响应标头包含有关响应的附加信息,例如其位置或提供它的服务器。 这些标头通常对最终用户不可见,仅由服务器和客户端应用程序处理或记录。 有时标头会显示警告消息 Provisional headers are shown, 这可能是由于请求未
一个40岁老程序员的2022年中总结 - 四十不惑,不忘初心
标题:一个40岁老程序员的2022年中总结:不忘初心,四十不惑 2022年对我来说是里程碑的一年,因为就在今年五月,我正式年满四十岁,成为了一名在某些贩卖焦虑的 IT 自媒体人口中的面临 “年龄危机” 的老程序员。 一转眼,2022 年又快过去一半了。借着参加掘金社区2022年中总结征文大赛的机会,我把自己这过去的半年经历,简单做一个复盘。 我上半年的日常工作和技术写作生活我于 2007 年
一个 Angular 程序员两年多的远程办公经验分享
笔者从 2020 年疫情爆发之前,一直从事后端开发工作。2020 年因为工作原因,加入了 SAP 一个代号为 Spartacus 的开源项目的开发团队。这个项目是一个基于 Angular 的电商 Storefront 框架,其代码贡献者来自全世界各个地区。 实际上,这个项目的开发工作由六个敏捷开发团队组成,笔者是唯一一位来自 APJ 即亚太地区的开发人员。从此,我开启了为期两年多,一直持续到现在
SAP 电商云 Spartacus UI Store 相关的设计明细
Storestate.ts定义了和 Site Context 业务相关的 State 数据模型。 定义数据模型的套路是: export const SITE_CONTEXT_FEATURE = 'siteContext'; export interface StateWithSiteContext { [SITE_CONTEXT_FEATURE]: SiteCont
SAP 电商云 Spartacus UI SiteContextUrlParams 的实现明细介绍
您可以使用 CMS(后端)中的 pageLabel 配置内容页面的 URL。 这些页面标签无法本地化。 您可以为 Spartacus 中的非内容页面配置 URL。 这些主要与产品和类别页面有关。 您可以将属性(例如产品名称)配置为 URL 的一部分。 例如,产品页面的默认配置是 storefront.com/product/1234,但您可以配置 URL 以包含产品相关数据,例如产品或类别标题。
从编译后的代码,分析 Angular @Injectable 的工作原理
在开始本文的讨论之前,让我们先做一道多选题: 下面对于 @Injectable 的描述,哪些是正确的? A @Injectable 装饰器应该添加到每个服务中。B @Injectable 装饰器应该添加到任何使用依赖注入 (DI) 的服务中。C 如果您不使用“providedIn”选项,则不需要添加 @Injectable 装饰器。D @Injectable 装饰器与“providedIn”选
Angular 依赖注入机制实现原理的深入介绍
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { Routes, RouterModule } from '@angular/router'; import { HttpMod
SAP 实施项目中涉及到编程方式操作 Excel 的几种场景介绍
本文分享笔者在从事 SAP 项目开发工作中,涉及到的通过编程方式操作 Excel 的业务场景,希望起到抛砖引玉的作用。 使用 Excel 导入数据到 SAP Cloud for Customer 系统假设要上传Account的数据到系统:点download metadata: 自动download一个zip下来: 在folder Templates里维护要上传的Account dat
如何使用 SAP Intelligent Robotic Process Automation 自动操作 Excel
机器人流程自动化 (Robotic Process Automation,简称 RPA) 是一种允许用户将企业重复的、基于规则的业务流程进行自动化的解决方案。 与需要将流程步骤硬编码到系统中的传统自动化解决方案不同,RPA 利用了当今机器学习和人工智能的最新成果,通过观察真实用户完成流程的方式,来了解如何执行任务的自动化。 要想了解 RPA 解决方案的工作原理,可以把它想象成录制一个宏。一旦录
在 NgModule 里通过依赖注入的方式注册服务实例
下面是在 NgModule 中注册一个 service 的典型例子。 import { NgModule } from '@angular/core'; import { AuthService } from './auth.service'; @NgModule({ providers: [AuthService], }) class Ex
关于 Angular 注解 @Injectable() 使用的一些误区
一个常见的误解是,@Injectable() 是我们计划在应用程序中注入组件/服务的任何类的必需装饰器。 这种说法并不完全正确。 当使用 Angular 装饰器时,被装饰的类以 Angular 可以读取的格式存储关于自身的元数据——这包括关于它需要获取和注入哪些依赖项的元数据。 如果一个类上没有使用 Angular 装饰器,那么 Angular 就无法读取它需要的依赖项。 这就是我们需要使用@
Angular @Inject 注解的实际应用例子和工作原理浅析
看一个实际的例子: import { Component, Inject } from '@angular/core'; import { Http } from '@angular/http'; @Component({ selector: 'example-component', template: '<div