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

如何将loanApplication对象从规则返回到bpm流程?

隆康平
2023-03-14

我正在使用drools(kie-wb web接口),我有一个bpm流程,它接受一个loanApplication,并返回带有更新数据的loanApplication(这是目标)。但当我试着这么做的时候,我得到了回报。

"Unable to create response: [LoanApplicationReviewer.LoanApplicationReview:21 - Age Knockout:1] -- [LoanApplicationReviewer.LoanApplicationReview:21 - Age Knockout:1] -- null"
public class LoanApplication implements java.io.Serializable {

    static final long serialVersionUID = 1L;

    private java.lang.Integer id;
    private java.lang.Integer age;
    private boolean accepted = true;
    private java.util.List<java.lang.String> knockoutReasons = new java.util.ArrayList<java.lang.String>();


    public LoanApplication() {
    }

    public java.lang.Integer getId() {
        return this.id;
    }

    public void setId(java.lang.Integer id) {
        this.id = id;
    }

    public java.lang.Integer getAge() {
        return this.age;
    }

    public void setAge(java.lang.Integer age) {
        this.age = age;
    }

    public boolean isAccepted() {
        return this.accepted;
    }

    public void setAccepted(boolean accepted) {
        this.accepted = accepted;
    }

    public java.util.List<java.lang.String> getKnockoutReasons() {
        return this.knockoutReasons;
    }

    public void setKnockoutReasons(
            java.util.List<java.lang.String> knockoutReasons) {
        this.knockoutReasons = knockoutReasons;
    }

    public void addKnockoutReason(String knockoutReason) {
        if (this.knockoutReasons == null) {
            this.knockoutReasons = new java.util.ArrayList<java.lang.String>();
        }
        this.knockoutReasons.add(knockoutReason);
    }



    public String toString() {
        return "loanApplicationResponse::[accepted=" + this.accepted 
        + ",knockoutReasons="
        + this.knockoutReasons.toString() + "]";
    }

    public LoanApplication(java.lang.Integer id, java.lang.Integer age,
                           boolean accepted, java.util.List 
                           knockoutReasons) {
        this.id = id;
        this.age = age;
        this.accepted = accepted;
        this.knockoutReasons = knockoutReasons;
    }
}
package com.xyz.loanapplicationreviewer;

import com.xyz.loanapplicationreviewer.LoanApplication;
import org.kie.api.runtime.process.WorkflowProcessInstance;

rule 'age less than 30 do not accept'
ruleflow-group 'ageKnockoutGroup'
  dialect "mvel"
  when
    $process : WorkflowProcessInstance();
    $loanApp : LoanApplication() from (LoanApplication)$process.getVariable("loanApplication");
    eval ($loanApp.getAge() < 30);
  then
    $loanApp.setAccepted(false);
    $loanApp.addKnockoutReason("age under 30");
    ((WorkflowProcessInstance)kcontext.getKnowledgeRuntime().getProcessInstance($process.getId())).setVariable("loanApplication", $loanApp);
    System.out.println("Age less than 30 knockout");
end

我在business rule步骤中添加了一个条目脚本来填充流程实例,如下所示:

kcontext.getKnowledgeRuntime().insert(kcontext.getProcessInstance()); 

我还填写了我期望的数据分配。它似乎获得了数据,因为当我创建一个新实例并从表单运行它时,它拥有数据并执行规则,仅从使用swagger的rest接口中,我就得到了上面的错误。

共有1个答案

高泳
2023-03-14

在看了很多很多之后;

我似乎不得不稍微修改我的请求,以变成:

{
  "loanApplication" : {
    "com.xyz.abc.LoanApplication" : {
      "id" : 1,
      "age": 1,
      "accepted" : true
    }
  }
}

此外,我不得不将规则改为:

rule 'age less than 30 do not accept'
  ruleflow-group 'ageKnockoutGroup'
  dialect "mvel"
  when
    loanApplication : LoanApplication(age < 30);
    //process : WorkflowProcessInstance();
    //loanApp : LoanApplication() from (LoanApplication)process.getVariable("loanApplication");
    //eval (loanApp.getAge() < 30);
  then
    loanApplication.setAccepted(false);
    loanApplication.addKnockoutReason("age under 30");
    System.out.println("in then less than 30 with loanApp:" + loanApplication.toString());
    String knockoutReasonFact = "age under 30";
    boolean acceptedFact = false;
    insert(knockoutReasonFact);
    insert(acceptedFact);
    update(loanApplication);
end

使用所有相同的endpoint,我最终得到了我所期望的响应。我最终跟踪了business central是如何调用Drools/jBPM流程的,并对其进行了镜像

 类似资料:
  • 问题内容: 我正在尝试从call()返回2D数组,但遇到了一些问题。到目前为止,我的代码是: 这段代码会编译,这不会返回我的数组。我确定我可能使用了错误的语法,但是找不到任何好的示例。 编辑:改变了一点 问题答案: 添加到Joseph Ottinger的答案中,要传递要在Callable的call()方法中使用的值,可以使用闭包:

  • 问题内容: 如何从Java Servlet返回JSON对象。 以前,当使用servlet执行AJAX时,我返回了一个字符串。是否有需要使用的JSON对象类型,或者你只是返回了一个看起来像JSON对象的String,例如 问题答案: 我完全按照你的建议去做(返回a )。 不过,你可能会考虑将MIME类型设置为指示你正在返回JSON(根据其他stackoverflow文章,其为“ applicatio

  • 我有这样的代码: 有什么想法吗?

  • 问题内容: 我想从Java方法返回两个对象,并且想知道这样做的好方法是什么? 我能想到的可能的方法是:回报HashMap(因为这两个对象是相关的),或者返回的对象。 更准确地说,我要返回的两个对象是(a)对象和(b)相同名称的逗号分隔。 我想从一个方法返回这两个对象,因为我不想遍历对象列表以获得逗号分隔的名称(我可以在此方法的同一循环中执行此操作)。 不知何故,返回a 看起来不是很优雅的方式。 问

  • 我有以下练习: 编写一个名为createListOfObjects的函数,该函数接受 包含名字和姓氏以及返回值的字符串数组 一个对象数组,每个对象都具有属性 和以及名字和姓氏值 对应值* var namesList=['Cameron Betts','Shana Lopez','Angela li']* createListOfObjects(名称列表) = 到目前为止,我的解决方案是: 但它返回

  • 我是口水新手,我成功地创建了一个使用创建的规则的工作应用程序。我有一个简单的类,其中包含两个变量和。 我的规则实施为 如果用户为类型或语言插入一些奇怪的值,我有一个返回错误的特定规则。但最重要的是,我想知道是否可以返回插入规则中的所有可能变量的列表:例如和。