BizTalk Business Rule Engine Сравнить DateTimeNow в диапазоне дат?

Я пытаюсь использовать Between Предикат для сравнения текущей даты и времени с диапазоном даты и времени.

Я ссылаюсь mscorlib сборка и использование get_Now() в DateTime класс в сборке, чтобы получить DateTimeNow. У меня есть проблема, чтобы сравнить текущую дату и время с диапазоном.

мое состояние как:

  • DateTimeNow находится между 2012-08-03 07:00:00 и 2012-08-04 07:00:00

  • DateTimeNow в моем регионе должно быть 2012-08-03 16:33:20 на данный момент. Это должно быть между указанным диапазоном. Но, похоже, не работает. Если я заменю DateTimeNow с 2012-08-03 16:33:20, оно работает.

Кажется, почему-то мой DateTimeNow не работает. У кого-нибудь есть идеи?

2 ответа

Я обнаружил использование функции Get_Date() в сборке.net mscorlib, вы должны изменить реестр компьютера

HKEY_LOCAL_MACHINE\ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \Microsoft\BusinessRules\3.0\StaticSupport (DWORD), укажите значение 1

Подробности в:

http://blogs.msdn.com/b/richardbpi/archive/2005/11/14/492489.aspx

http://kinnaribhute.blogspot.co.nz/2008/04/some-interesting-stuff-about-biztalk.html

Я не уверен, как это повлияет на производственный сервер, если среда производственного сервера не кластеризована с несколькими узлами, произойдет сбой при перезагрузке сервера.

Существует несоответствие импеданса между способом логического моделирования фактов в механизме и способом моделирования объектов в коде.NET, и одним из следствий этого является проблема вызова статических методов. Если вы установите флаг StaticSupport, как описано Сяо Ханом, движок изменит свое поведение, рассматривая статические методы так же, как если бы они были встроенными функциями или предикатами. Однако по умолчанию движок рассматривает статические методы как поведение фактов. Физически факт - это объект в рабочей памяти движка, и каждый факт должен быть подтвержден движку, прежде чем его методы можно будет использовать. Таким образом, чтобы вызвать статический метод получения свойства Now для DateTime, сначала необходимо присвоить объект DateTime механизму. Конечно, DateTime - это тип значения (структура), но это нормально, потому что, когда вы выполняете набор правил, вы утверждаете один факт как объект или набор фактов как массив объектов. .NET автоматически помечает DateTime (внутренне обернуть его как объект), переданный таким образом.

Я понимаю, что кажется безумным необходимость утверждать объект в движке для вызова статического метода (или, в данном случае, метода получения свойств, который, конечно, действительно является методом) в отношении типа этого объекта. Вероятно, было бы лучше, если бы механизм был построен для обработки статических методов как встроенных по умолчанию. Однако это было не так. Кроме того, было бы намного лучше, если бы Microsoft внедрила флаг StaticSupport на уровне отдельных наборов правил или даже отдельных правил. Реализация его в реестре (на уровне компьютера) или альтернативная настройка в файле.config (уровень приложения; использование) таким способом может создать реальные проблемы, поскольку может нарушить наборы правил, которые были написаны для использования противоположного значения флаг.

Еще один момент, о котором следует помнить: статическая поддержка также может быть установлена ​​на "2". В этом случае, если вы вызываете статический метод без параметров или если вы вызываете его только с постоянными значениями, и если вы вызываете его как предикат в условии или как аргумент другой функции, то механизм будет оценивать статический член только один раз и кешировать результат.

Другие вопросы по тегам