当前位置: 首页 > 知识库问答 >
问题:

jbpm进程不使用ruleFlowGroup触发流口水规则

潘嘉佑
2023-03-14

我无法从jbpm业务规则任务中触发规则。似乎找不到进程规则文件。试着解释一下。

进程Test.java简单的设置Message和启动进程:

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import com.sample.DroolsTest.Message;

/**
 * This is a sample file to launch a process.
 */
public class ProcessTest {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-process");

            // go !
            Message message = new Message();
            message.setMessage("Hello Giorgio");
            message.setStatus(Message.HELLO);
            kSession.insert(message);

            // start a new process instance
            kSession.startProcess("com.sample.bpmn.hello");
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

}

然后,我运行并正确触发脚本任务(“Hello world”),但在RuleGroup1中找不到规则。drl:

//created on: 21-gen-2019
package com.sample

//list any import classes here.
import com.sample.DroolsTest.Message;


//declare any global variables here


rule "First Giorgio rule"
    ruleflow-group "Group1"

    when
        m : Message( status == Message.HELLO, myMessage : message )
    then
        System.out.println( "rule0 Group1" );

end

rule "Your First Rule"
    ruleflow-group "Group1"
    when
        //conditions
    then
        System.out.println( "rule1 Group1" );

end

rule "Your Second Rule"
    ruleflow-group "Group1"
    //include attributes such as "salience" here...
    when
        //conditions
    then
        System.out.println( "rule2 Group1" );

end

跟踪项目文件夹:

谢谢你的帮助。

共有2个答案

苏运良
2023-03-14

我决定添加一个会话。fireAllRules()并将流程和规则文件存储在同一个包中。

>

  • 修改kmodule.xml以添加ktext名称"进程规则":

    <?xml version="1.0" encoding="UTF-8"?>
    <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
        <kbase name="rules" packages="rules">
            <ksession name="ksession-rules"/>
        </kbase>
        <kbase name="dtables" packages="dtables">
            <ksession name="ksession-dtables"/>
        </kbase>
        <kbase name="process" packages="process">
            <ksession name="ksession-process"/>
        </kbase>
        <kbase name="processrules" packages="processrules">
            <ksession name="ksession-processrules"/>
        </kbase>
    </kmodule>
    

  • 唐阳飙
    2023-03-14

    确保规则文件和流程文件位于同一文件夹中。最重要的是,确保规则文件中声明的包与包含它的目录名以及kmodule中的包声明一致。xml。如果它们不同步,您最终将无法取消规则。检查此示例项目。在jBPM中使用Drools规则

     类似资料:
    • 我刚开始流口水,遇到了一个问题。 我简化了规则以显示问题: 基本上,我想计算特定路段上发生的事件(路段是道路的一部分)。当同一链接上发生3个事件时,我希望触发规则。 上面的规则几乎起作用了,但是当它发射时,它发射了3次,每个事件发射一次。我只希望它发射一次。 我错过了什么? 非常感谢。

    • 我不太会流口水和咕噜。 我有一个关于规则流的基本问题。 我在guvnor插件上使用引导编辑器创建了3条规则。现在我想根据第一条规则的结果调用第二条或第三条规则。 e、 g.如果患者年龄小于18岁,则进行第二条规则的小检查,否则请调用第三条规则由高级医生进行检查。 那么,这可以通过使用规则流来实现吗?如果是,如何?是否有任何示例链接和文档来演示它?非常感谢您的帮助。 谢啦

    • 我有一个drl文件,它在两个规则流组中包含规则:“第一个规则流组”和“第二个规则流组”。这些组的激活取决于“规则A”和“规则B”。是否有任何方法可以停用规则B,以便在规则A条件匹配时触发,从而仅将焦点设置为“第一个规则流组”?

    • 我的要求是,触发第二条规则,然后停止进程而不触发第三条规则

    • 我正在进行drools fusion 6.2决赛,希望在流模式下发生新事件时触发规则。但规则本身并没有遭到抨击。 我的规则文件内容如下: 代码如下: 故意调用规则时会触发规则,但如果流中出现新事件,则无法触发规则。

    • 我有flink stream,我在某个时间窗口上计算一些事情,比如说30秒。 这里发生的事情是,它给我的结果,我以前的窗口聚合以及。 假设前30秒我得到结果10。 接下来的三十秒我想要新的结果,而不是我得到最后一个窗口的结果新的等等。 因此,我的问题是如何为每个窗口获得新的结果。