如何为impex限制/编写验证代码?

时间:2018-05-25 10:21:47

标签: hybris

我想知道这是否是一种仅针对impex触发我的验证码的方法。我的意思是我的代码应该验证通过Impex创建的新产品(而不是通过后台)。这是我的代码:

@Override
public void onValidate(final Object o, final InterceptorContext ctx) throws InterceptorException

    if (o instanceof ProductModel)
    {
       final ProductModel product = (ProductModel) o;
       if (ctx.isNew(product))
        {
            final String manufacturerName = enumerationService.getEnumerationName(product.getManufacturerName()); // if ManufacturerName is Null  enumerationService throw "Parameter plainEnum must not be null!"
            final String code = product.getCode().toString();
            final String manufacturerProductId = product.getManufacturerProductId();
            final int a = productLookupService.getProduct(code, manufacturerName, manufacturerProductId);
                switch (a)
                {
                    case 1:
                        throw new InterceptorException("Product already in ProductLookup");

                    case 2:
                        throw new InterceptorException(
                                "There are more than one product with the same " + code + " number in ProductLookup !");
                    default:


                }
             }
       }

我的问题是,在BackOffice中,当我创建新产品时,我没有manufacturerName和manufacturerProductId字段。 谢谢!对不起,如果我说错了,我是新手:)

1 个答案:

答案 0 :(得分:1)

您说“在BackOffice中,当我创建新产品时,我没有 manufacturerName manufacturerProductId 字段“。 这也可能是Impex的情况。很可能你正在使用的impex现在指定这两个属性,这就是为什么没有问题。

如果需要,您可以强制执行这两个属性,然后没有人可以创建产品而不指定 manufacturerName产品 manufacturerProductId 。 我还认为backOffice会在创建过程中更新为包含这两个属性,因为它们是必需的。

您可以使用 optional <在 {extensionName} -items.xml (在您的类型定义下)指定属性是必需的/ em> 标志如下:

<attribute qualifier="manufacturerProductId" type="String">
  <persistence type="property"/>
  <modifiers optional="false"/>
</attribute>

如果这两个属性不是强制性的,那么您必须考虑在没有它们的情况下创建产品的情况(就像您当前的backOffice情况)。 但是你的拦截器应该考虑两个情况(当你在创建期间指定了这些属性时当你没有

因此,您可以编辑代码以在使用它们之前验证这两个属性是否为null。您可以在尝试获取manufacturerName之前添加此权限:

 if (product.getManufacturerName() == null || product.getManufacturerProductId() == null) {
    return;
}