在drools 5.4中进行用户确认

在drools 5.4中进行用户确认,drools,Drools,我有一个要求 如果某些验证失败,我必须询问用户是否继续 如果用户说yes,我必须将数据保存在DB中,并且 如果用户说no,则数据将不会保存在数据库中 验证在validate.drl中执行 执行这些验证后,我必须询问用户是否希望继续。工艺流程如下: Start->input.drl->validate.drl->takeUserConfirmation.drl->persistData.drl 在上面的流程中,我必须在takeUserConfirmation.drl中添加一些逻辑,以便用户确认

我有一个要求

  • 如果某些验证失败,我必须询问用户是否继续
  • 如果用户说yes,我必须
    将数据保存在DB
    中,并且
  • 如果用户说no,则
    数据将不会保存在数据库中
    
  • 验证在validate.drl中执行
  • 执行这些验证后,我必须询问用户是否希望继续。工艺流程如下:

    Start->input.drl->validate.drl->takeUserConfirmation.drl->persistData.drl

在上面的流程中,我必须在
takeUserConfirmation.drl
中添加一些逻辑,以便用户确认是否要继续。根据给出的答案,我将限制
persistData.drl
中的规则。
因此,它将仅在用户确认持久性时执行。我怎样才能做到这一点?人工任务,即工作项处理程序是否对这种情况有用?如何暂停drools流
,接受用户确认并再次启动相同的流?

问题是为什么要在drools中执行所有操作。规则文件似乎不是用户交互的正确位置。我更愿意回到应用程序代码中,返回验证失败的对象集合(您可以标记它们),然后如果确认它们,则为它们执行presistData.drl

因此,在最终版本中,您将有两个单独的流:

  • 输入->验证->持久化(您可以在已验证的对象上设置附加标志,该标志将在持久化中选中)
  • 确认后再次执行persist
我还想知道input.drl的用途是什么


这应该是评论而不是帖子,但我不需要50个代表。

Input.drl需要初始化一些事实,如插入所需的服务类以调用persist方法等。此外,我不能像您建议的那样将流程分为两部分,因为这是我的应用程序的常见流程。因此,如果validate.drl中的任何验证失败,takeUserConfirmation.drl将有一些逻辑询问用户是否要继续,在用户确认后,流程将再次恢复。我最初的想法是将一些对象放入Drools全局,并执行其阻塞方法返回确认结果。我从未使用过工作项处理程序,但在您的情况下,它们似乎是非常好的选择(当然,如果您可以稍微修改一下流的话)。在这两种情况下,主要的问题似乎是调用GUI操作,但实际上有多难,主要取决于您使用的技术。