2012-08-04 5 views
1

Between 술어를 사용하여 현재 날짜 시간을 날짜 시간 범위와 비교하려고합니다.BizTalk 비즈니스 규칙 엔진 날짜 범위 내에서 DateTimeNow를 비교합니까?

mscorlib 어셈블리를 참조하고 DateTime 클래스 내의 get_Now() 클래스를 사용하여 DateTimeNow를 가져옵니다. 이 현재 datetime을 범위와 비교하는 데 문제가 있습니다.

내 조건이 같다 :

  • DateTimeNow는 내 지역에서 DateTimeNow 7시 0분 0초

  • 7시 0분 0초 2012-08-03 사이 2012-08-04해야 이 순간에 2012-08-03 16:33:20이되어야합니다. 내가 지정한 범위 사이 여야합니다. 그러나 그것은 작동하지 않는 것 같습니다. 을 2012-08-03 16:33:20으로 바꾸면 작동합니다.

DateTimeNow이 작동하지 않는 것 같습니다. 누구든지 어떤 생각을 가지고 있습니까?

답변

2

나는 BusinessRules 3.0 \ StaticSupport (DWORD) \, 값 1

줄 \ 마이크로 소프트 \ 컴퓨터 레지스트리

HKEY_LOCAL_MACHINE \ 소프트웨어를 수정 Get_Date() .NET mscorlib에 어셈블리 기능을, 당신이 사용하는 것으로

세부 사항에 :

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

내가 아니다 이것이 프로덕션 서버에 어떻게 영향을 미치는지, 프로덕션 서버 환경이 여러 노드로 클러스터되지 않은 경우 서버를 재부팅 할 수있는 중단이 발생합니다.

0

사실을 엔진에서 논리적으로 모델링하는 방법과 .NET 코드에서 개체를 모델링하는 방법 사이에는 임피던스 불일치가 있습니다.이 중 하나의 영향은 정적 메서드를 호출하는 문제입니다. Xiao Han이 설명한 것처럼 StaticSupport 플래그를 설정하면 엔진은 정적 메서드를 내장 함수 또는 술어처럼 취급하여 동작을 변경합니다. 그러나 기본적으로 엔진은 정적 메서드를 사실의 동작으로 처리합니다. 물리적으로 사실은 엔진의 작업 메모리에있는 객체이며, 각 메소드는 메소드가 사용되기 전에 엔진에 선언되어야합니다. 따라서 DateTime에서 정적 Now 속성 getter를 호출하려면 먼저 엔진에 DateTime 개체를 어설 션해야합니다. 물론 DateTime은 값 유형 (구조)이지만 규칙 세트를 실행할 때 하나의 사실을 Object 또는 사실 집합으로 Object 배열로 선언하기 때문에 문제가되지 않습니다. .NET은 자동으로이 방식으로 전달 된 DateTime (내부적으로 객체로 랩핑 함)을 자동으로 상자에 넣습니다.

정적 메서드 (또는이 경우에는 속성 메서드, 실제로는 메서드 인)를 호출하기 위해 엔진에 개체를 지정해야한다는 사실이 미친 듯이 보입니다. 그 대상. 엔진이 기본적으로 정적 메소드를 내장 함수로 처리하도록 빌드 된 경우라면 더 좋을 것입니다. 그러나 그것은 사실이 아닙니다. 또한 Microsoft가 StaticSupport 플래그를 개별 규칙 세트 또는 개별 규칙 수준으로 구현 한 경우 훨씬 더 효과적이었을 것입니다. 이 방법으로 레지스트리 (컴퓨터 수준)에서 구현하거나 .config 파일 (응용 프로그램 수준, 사용)에서 구성하는 것은 실제 문제를 일으킬 수 있습니다. 이는 규칙 집합의 반대 값을 사용하도록 작성된 규칙 집합을 손상시킬 수 있기 때문입니다. 깃발.

정적 지원도 '2'로 설정할 수 있다는 점을 명심해야합니다. 이 경우 매개 변수없이 정적 메서드를 호출하거나 상수 값으로 만 호출하고 조건의 조건 자나 다른 함수의 인수로 호출하는 경우 엔진은 정적 멤버를 한 번만 캐시하고 결과를 캐시합니다.