SAP Spartacus 表单个性化

Posted

技术标签:

【中文标题】SAP Spartacus 表单个性化【英文标题】:SAP Spartacus form personalization 【发布时间】:2021-12-29 03:29:48 【问题描述】:

如果已经有使用给定电子邮件注册的帐户,我需要修改注册表以显示错误消息。 SAP Hybris 后端,Angular 中的 Spartacus 店面。目前,我有一个自定义验证器类,它可以正常工作:

import org.springframework.util.Assert;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
    public class EmailExistingValidator implements Validator 
    /*
    ...
    */
        @Override
        public void validate(Object o, Errors errors) 
            Object fieldValue = errors.getFieldValue(this.fieldPath);
    
            if (fieldValue == null || fieldValue instanceof String &&userIdExists((String) fieldValue)) 
                errors.rejectValue(this.fieldPath, "field.required", new String[]this.fieldPath, "This email is already in use.");
            
        
    

如果是这种情况,店面会显示红色错误消息:“UID 无效”,但我想将其更改为“电子邮件地址无效或已在使用中”。

我该怎么做?

当我调查这个问题时,店面中的这个字符串来自一个名为 validationError.invalid.uid 的常量,它位于一个名为 spartacus-assets.js 的文件中,如下所示:

invalid: 
                card_expirationMonth: 'The credit card expiration date entered is not valid.',
                firstName: 'First Name entered is not valid.',
                lastName: 'Last Name entered is not valid.',
                password: 'Password entered is not valid.',
                uid: 'UID is not valid.',
            ,

据我所知,确认和/或错误消息的填充方式如下(第 6 行):

handleValidationError(_request, response) 
    this.getErrors(response)
        .filter((e) => e.type === 'ValidationError')
        .forEach((error) => 
        this.globalMessageService.add(
            key: `httpHandlers.validationErrors.$error.reason.$error.subject`,
        , GlobalMessageType.MSG_TYPE_ERROR);
    );

这些都是开箱即用的,都位于 node_modules 中,所以我不能在这里重写,因为在 npm install 之后它们都会消失。

可以更改该消息吗?有什么办法可以解决这个问题吗?我错过了什么还是我错了?我欢迎任何 cmets,如您所知,我是 SAP Commerce 的新手。

【问题讨论】:

【参考方案1】:

目前,http 错误处理逻辑集中在 HttpErrorHandlers 类中。

http 验证错误以通用方式处理 - 来自后端的错误类型和消息被转换为前端 translation key,然后转换为当前语言并显示在前端 UI 的全局消息组件中。

如果您想以不同方式处理来自某些特定端点的某些特定错误(例如,显示自定义消息/使用自定义翻译键),您可能需要扩展方法 BadRequestHandler.handleValidationError().handleError()

查看源码:https://github.com/SAP/spartacus/blob/1b22bf5376c1fc5a88877aaaf4682f1838347b90/projects/core/src/global-message/http-interceptors/handlers/bad-request/bad-request.handler.ts#L64-L78

【讨论】:

以上是关于SAP Spartacus 表单个性化的主要内容,如果未能解决你的问题,请参考以下文章

SAPNCo 应用程序中的非个性化 SAP 对话用户

SAP GUI个性化设置

SAP Commerce Cloud Github 项目的个性化配置 customization

SAP Spartacus Reference App Structure

SAP Spartacus 升级时关于 schematics 的更新

如何在 SAP Commerce Cloud Portal 构建和部署 SAP Spartacus Storefront