Как синхронизировать два объекта планирования со значением - PullRequest
0 голосов
/ 03 апреля 2012

Я хочу синхронизировать значения планирования между двумя объектами планирования.В этом случае я хочу сделать два SubjecTeacherPeriod выбора периодов, которые «совпадают» друг с другом, даже если их возможные диапазоны значений не пересекаются.

STP s1: period-N/A periodList->[1,2,3,4,5,6]
STP s2: period-N/A periodList->[106,107,108,109,110,111]
SyncConstraint(leftSTP = s1,rightSTP = s2)
<A rule for SyncConstraint that checks if s1.period and s2.period are compatible>

Например, Period s 1 и 106 совместимы, так как они оба «первые часы понедельника».Аналогично для 2 и 107.

я установил уровень сложности объекта планирования, который присваивает s2 сразу после s1 (я видел журнал).Но им присваиваются значения, которые не совместимы.И система никогда не восстанавливается после такой ошибки в конце действия решателя.

Как я могу заставить их синхронизироваться?


Где я упомянул «совместимые» и «совпадают»,Я имею в виду Period s, у которых два поля (день недели и порядок дня) равны.Каждый класс (и каждый SubjectTeacherPeriod, чьи возможные периоды в этом классе) имеют отдельные Period с.

1 Ответ

0 голосов
/ 03 апреля 2012

В классе Period создайте метод получения getPeriodType() (который возвращает, например, «первые часы в понедельник»), а затем добавьте правило оценки следующим образом:

when
    MyEntity($leftType: period.periodType, $leftId : id, ...)
    MyEntity(period.periodType != $leftType, id < $leftId, ...)

Или, если Period может иметь несколько типов, не создавайте этот получатель, а создайте класс отношений PeriodToPeriodTypeLink:

when
    MyEntity($leftP : period, $leftId : id, ...)
    MyEntity($rightP : period, id != $leftId, ...)
    PeriodToPeriodTypeLink(period == $leftP, $t : type)
    not PeriodToPeriodTypeLink(period == $rightP, type == $t)
...