1

我需要遍历一组记录并将每条记录中的开始日期与当前日期进行比较,并在规则的操作部分输出一条消息。我试图找出是否可以在 ILOG/ODM 规则 XOM 中使用数组列表,并在规则中使用它来循环记录集。您能否建议我实现此要求的最佳方法。

4

2 回答 2

1

是的,您可以在规则 XOM 中使用数组列表,并在规则中对其进行迭代。让我们假设您的规则项目将您的 XOM 类的一个实例作为输入参数,并带有语言化“test”。你会有类似下面的东西。

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 "" ;
于 2015-08-11T09:19:20.350 回答
0

您可以按照 developerWorks 上 ODM 博客中“迭代输入参数”主题下的说明进行操作。

在这里能找到它:

迭代输入参数

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

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

于 2015-04-10T19:50:46.673 回答