点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我使用的是Hybris 6.0,即使我们没有在B2BCustomer级别定义的权限,该订单也已通过(b2bAccOrderApproval.xml)中定义的批准流程。 在进一步调试中,我看到权限" B2BOrderThresholdPermission"和" B2BOrderThresholdTimespanPermission"在各自的策略类" DefaultB2BOrderThresholdEvaluationStrategy"和" DefaultB2BOrderThresholdTimespanEvaluationStrategy"中默认设置为" OPEN"状态。 我希望在没有为客户定义权限的情况下自动获得订单批准。 Hybris OOTB行为默认使用这些权限是否有原因? 有人可以帮我吗 预先感谢。
关于Karthika
我也将要提出这个问题,所以我将花点时间在这里回答我的解决方案,因为真正的Hybris专家尚未回答该问题的真正解决方法。
我们遇到了完全相同的事情,并得出了相同的结论。 为什么Hybris会这样工作?
在文件b2bapprovalprocess-spring.xml中,您具有defaultB2BPermissionService的定义。 看起来像这样:
这些策略决定订单批准工作流程中的评估,而不是实际的B2BPermissions,我认为这很奇怪,因为它总是使评估对所提供的策略保持静态。 这些是Hybris在简单的工作流程中设置的默认权限,并且它们已经执行的默认实现要求所有批准订单都包含所有这些权限。 我认为这是一个错误,在Hybris解释原因之前,我将尽快解决该问题。
因此,就像您一样进入源代码,并检查DefaultB2BOrderThresholdTimespanEvaluationStrategy及其评估方式。 在评估方法中,我们找到对getTypesToEvaluate的方法调用。 这是做什么的? 好吧,它将获得下订单的当前客户的所有权限,并且在此过程中还将执行getActivePermissions。 因此,它将检查Permission上的布尔值是否处于活动状态。 如果未激活,它将在返回的集合中排除该许可。 我首先想到的很好,然后我可能只是将Permission设置为inactive,而不必为此订单批准订单。 但是那没用。
这是因为在执行此操作后仅几行:
因此,就像您发现它始终将策略的权限设置为OPEN一样,这意味着批准者或管理员必须处理此问题。 如果您没有权限或将其设置为非活动状态,将会发生什么,就是方法getPermissionToEvaluate将返回null。 如果返回null,则Hybris认为这意味着权限评估失败,这就是为什么我们必须指定所有权限并将其激活的原因。 我认为这是一个非常奇怪的决定,使实现非常陈旧和静态。 因此,我只做了很小的改动就制定了自己的策略。 下面是一个示例:
如您所见,我已经进行了更改,因此,如果客户没有策略许可,或者客户处于非活动状态,则如果订单需要批准,则在最终判决中将不考虑策略评估。 我们还更改了我们认为对于NO_LIMIT值有问题的逻辑,我们认为这意味着Permission没有限制,但原始的Hybris逻辑却相反。
对于Hybris为工作流程所做的决策可能会有合理的解释。 我们可能只需要等待才能得到它。
您是否已找到解决方案。我也面临着同样的问题。
关于Karthik,
没有Karthik。 我猜定制是解决这个问题的唯一方法。
致谢,Karthika
感谢Gustaf提供了非常有用的自定义代码。 如果我们需要自定义OTTB行为,那就完美了。
致谢,卡尔蒂卡
一周热门 更多>