как найти сбойные правила в json-rules-engine

#javascript #node.js #drools #rule-engine #json-rules-engine

#javascript #node.js #пускает слюни #rule-engine #json-rules-engine

Вопрос:

Я новичок в движке правил и пытаюсь создать движок правил на javascript.

У меня есть следующее правило и я передаю один параметр в качестве неправильного ввода, как определить, какой аргумент (факт) не соответствует.

Событие выдает сообщение без сбойных правил, интересно, как получить сбойные параметры.

Пожалуйста, дайте мне знать, что делать в этой ситуации.

npm json-rules-engine

Правила:

 engine.addRule({
    conditions: {
        any: [{
            all: [{
                fact: 'gameDuration',
                operator: 'equal',
                value: 40
            }, {
                fact: 'personalFoulCount',
                operator: 'greaterThanInclusive',
                value: 5
            }]
        }, {
            all: [{
                fact: 'gameDuration',
                operator: 'equal',
                value: 48
            }, {
                fact: 'personalFoulCount',
                operator: 'greaterThanInclusive',
                value: 6
            }]
        }]
    },
    event: { // define the event to fire when the conditions evaluate truthy
        type: 'fouledOut',
        params: {
            message: 'Player has fouled out!'
        }
    }
})


**input:**

`let facts = {
    personalFoulCount: 6,
    gameDuration: 102
}`

**output:**

Player has fouled out!

**expected output:**

Player has fouled out due to a mismatch in gameDuration

  

Ответ №1:

Недавно я использовал этот модуль npm: json-rules-engine 
попал в ту же ситуацию и нашел решение

это может быть точным решением или нет, но служит цели

Решение: определите несколько объектов правил и передайте в движок и получите сбойные правила.

Подробные сведения:
1. Из приведенного выше примера, в условиях.в любом массиве есть 2 объекта
2. создайте 2 объекта правил с именем правила, как показано ниже 
 const createRule = (условия, имя правила) => ({ 
условия, 
 событие: {тип: имя правила}, 
 });
3. создайте объект движка, передав массив правил 
 постоянный движок = новый движок (список правил);
4. как только факты в движке противоречат правилам, сбойные правила могут быть выведены следующим образом: 
 то есть engine.run(факты).then(результаты => {
 // результаты.события будут проходить по правилам
 // чтобы получить сбойные правила: ведите список имен правил и фильтруйте переданные правила 
 });

Ответ №2:

Мы можем использовать on метод для получения failure/success события правила. Приведенный ниже пример возвращает количество успешных и неудачных правил.

 let facts = [{
        personalFoulCount: 6,
        gameDuration: 102
    },
    {
        personalFoulCount: 6,
        gameDuration: 40
    }]

engine.addRule({
    conditions: {
            all: [{
            fact: 'gameDuration',
            operator: 'equal',
            value: 40
        }]
    },
    event: { type: 'procedure_result'}
})

let result = {success_count : 0 , failed_count : 0}

engine.on('success', () => result.success_count  )
    .on('failure', () => result.failed_count  )

const getResults = function(){
    return new Promise((resolve, reject) => {
        facts.forEach(fact => {
            return engine.run(fact)
            .then(() => resolve())
        })
    })
}

getResults().then(() => console.log(result));
  

Вывод: { success_count: 1, failed_count: 1 }