验证拦截器错误消息未在Backoffice中显示

2020-08-15 00:31发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨,我已经在我的产品上创建了一个...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,我已经在我的产品上创建了一个验证拦截器

公共类MyProductValidatorInterceptor实现ValidateInterceptor
 {
   @Override
   公共无效onValidate(最终对象模型,最终InterceptorContext ctx)抛出InterceptorExceptio
  {
     如果(模型实例为MyProductModel
         &&(ctx.isNew(model)|| ctx.isModified(model,ChemicalProductModel.APPROVALSTATUS)))
     {
        最终的MyProductModel myProductModel =(MyProductModel)模型;
        最终ArticleApprovalStatus批准状态= chemicalProductModel.getApprovalStatus();
        如果(ArticleApprovalStatus.APPROVED == rova​​lStatus)
        {
          抛出新的InterceptorException("
             由于没有必填字段,因此无法将产品保存在批准中");
        }
    }
  }
 }
 

但是后台办公室会显示一般错误消息

我如何显示我的错误消息?

(55.3 kB)
7条回答
独立观察员
2020-08-15 00:53

ModelSavingExceptionTranslationHandler上toString方法的实现,负责解决出现ModelSavingException时在bakoffice中显示的错误消息,在版本1905中已更改。 >

Hybris在内部捕获所有InterceptorExeptions,然后重新抛出ModelSavingException,并以异常为原因。

1905年版本的实现如下:

公共字符串toString(可抛出异常){
     返回this.getLabelByKey(" unexpected.update.error");
 } 

通过此实现,无论原因是什么,错误消息将始终相同。

为了进行比较,6.4中的实现显示了抛出异常的详细消息,如下所示:

公共字符串toString(可抛出异常){
     ModelSavingException modelSavingException =(ModelSavingException)(ModelSavingException的例外实例?exception:exception.getCause());
     字符串messageByCause = this.translateByCause(modelSavingException.getCause());
     字符串消息=(String)StringUtils.defaultIfBlank(messageByCause,modelSavingException.getLocalizedMessage());
     返回StringUtils.capitalize((String)StringUtils.defaultIfBlank(message,"")));
 } 

这应该是一个错误,因为文档 1905年仍然说将显示抛出异常的消息,否则文档不是最新的。

可以通过重写ModelSavingExceptionTranslationHandler来解决此问题,但这会影响Hole平台,我们还不知道为什么首先要更改实现。 因此,更明智的是向SAP支持人员报告此事。

一周热门 更多>