在ILOG / ODM中使用Arraylist循环遍历一组记录

时间:2014-12-10 16:47:18

标签: rule-engine ilog ibm-odm

我需要遍历一组记录并将每个记录中的开始日期与当前日期进行比较,并在规则的Action部分中输出消息。我试图找出我是否可以在ILOG / ODM规则XOM中使用arraylist并在规则中使用它来遍历记录集。 能否请您建议实施此要求的最佳方式。

2 个答案:

答案 0 :(得分:1)

是的,您可以在规则XOM中使用arraylist,并在规则中迭代它。让我们假设您的规则项目将您的XOM类的实例作为输入参数,并使用语言化测试'。你会有类似下面的东西。

XOM:

import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class Test
{
    private List<Record> recordList;

    public Test()
    {
    }

    public void setRecordList(List<Record> recordList)
    {
        this.recordList = recordList;
    }

    public List<Record> getRecordList()
    {
        return recordList;
    }

    public static int compareWithCurrentDate( Date date)
    {
        Calendar cal = Calendar.getInstance();
        cal.setTime( date);
        return cal.compareTo( Calendar.getInstance());
    }
}


import java.util.Date;

public class Record
{
    private Date startDate;

    public Record()
    {
    }

    public void setStartDate(Date startDate)
    {
        this.startDate = startDate;
    }

    public Date getStartDate()
    {
        return startDate;
    }
}

BOM表面化:

# Record
Record#concept.label = record
Record.startDate#phrase.action = set the start date of {this} to {start date}
Record.startDate#phrase.navigation = {start date} of {this}

# Test
Test#concept.label = test
Test.compareWithCurrentDate(java.util.Date)#phrase.navigation = compare {0} with current date
Test.recordList#phrase.action = set the record list of {this} to {record list}
Test.recordList#phrase.navigation = {record list} of {this}

规则:

definitions 
    set 'current record' to a record in the record lists of test ; 
if
    compare the start date of 'current record' with current date is not 0 
then
    print "" ;

答案 1 :(得分:0)

您可以按照on&#34;上的ODM博客中的说明,迭代输入参数&#34;主题。

可以在这里找到:

Iterating over Input Parameters

基本上,您将使用ArrayList的虚方法来检索特定循环索引处的条目。虚方法会在返回之前强制转换该条目,但是从那里开始,您应该可以对该对象执行任何规则。

请注意,不能将ArrayList用作Dynamic XOM的输入参数,但可以使用Arrays作为Java XOM的输入参数。