У меня есть требование перебрать набор записей и сравнить дату начала в каждой записи с текущей датой и вывести сообщение в части действия правила. Я пытаюсь выяснить, могу ли я использовать arraylist в правиле ILOG/ODM XOM и использовать его в правиле для циклического просмотра набора записей. Не могли бы вы предложить мне лучший способ реализовать это требование.
Использование Arraylist в ILOG/ODM для циклического перебора набора записей
Ответы (2)
Да, вы можете использовать массив в правиле 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;
}
}
Вербализация спецификации:
# 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 "" ;
Вы можете следовать инструкциям в блогах ODM на сайте developerWorks в разделе «Перебор входных параметров».
Он может быть найден здесь:
По сути, вы собираетесь использовать виртуальный метод для вашего ArrayList, чтобы получить запись по определенному индексу цикла. Виртуальный метод преобразует запись перед ее возвратом, но оттуда вы сможете выполнить любое правило для этого объекта.
Обратите внимание, что вы не можете использовать ArrayList в качестве входного параметра для Dynamic XOM, но вы можете использовать Arrays в качестве входного параметра для Java XOM.