재어설션
재주장한다는 것은 엔진의 작업 메모리에 이미 있는 개체에서 Assert 함수를 호출하는 것을 의미합니다. 재어설션 명령은 개체의 제거 명령을 실행한 다음 어설션 명령을 실행하는 것과 같습니다.
먼저 개체가 제거되고 해당 개체(조건부 또는 작업)를 사용하는 규칙에 대한 어젠더의 모든 작업이 제거됩니다. 그런 다음 개체는 작업 중인 메모리로 다시 어설션되고 새로 어설션된 개체로 평가됩니다. 따라서 조건부의 개체를 사용하는 모든 규칙은 다시 평가되고 해당 작업이 어젠더에 적절하게 추가됩니다. 이전에 true 로 평가되고 해당 작업에서 개체만 사용하는 규칙은 해당 작업이 의제에 다시 추가됩니다.
최상위 TXD(TypedXmlDocument)가 다시 어설션되면 최상위 TXD가 처음 어설션될 때 생성된 자식 TXD는 자식 TXD의 상태에 따라 다른 동작을 갖습니다. 새 자식 노드 또는 더티 자식 노드의 경우 규칙 동작을 사용하여 정책에서 해당 필드 중 하나 이상이 변경되었으므로 자식 노드에서 어설션 또는 재주문 작업이 수행됩니다. 변경되지 않은 기존 자식 노드는 작업 중인 메모리에 그대로 남아 있습니다. 다음 예는 부모 노드가 다시 어설션되는 경우의 자식 노드 동작을 설명하는 간단한 시나리오입니다.
현재 작업 메모리에 P, C 1, C2 및 C3의 세 가지 TXD가 있다고 가정합니다. P 는 최상위 TXD, 부모 노드입니다. 각 자식 노드에는 x 필드가 포함됩니다.
P
C1(C1.x = 1)
C2(C2.x = 1)
C3(C3.x = 1)
다음으로 규칙 작업의 결과로 다음 작업이 수행되었다고 가정합니다.
C2의 필드(x) 값이 업데이트됩니다.
C3은 사용자 코드를 사용하여 삭제됩니다.
사용자 코드를 사용하여 추가 자식 노드 D가 P 에 추가됩니다.
참고
노드는 엔진이 인식하지 못하는 작업의 비즈니스 규칙 엔진을 통해서는 변경된 것으로 표시되지 않습니다. 예를 들어 외부 응용 프로그램에서 프로그래밍 방식으로 노드를 추가, 삭제 또는 수정하는 경우가 있습니다.
작업 중인 메모리의 개체는 다음과 같이 새로 표시됩니다.
P
C1(C1.x = 1)
C2(C2.x = 0)
D
이제 P를 재주장 합니다. 다음 점은 자식 노드의 동작을 요약합니다.
노드 C2는 필드가 업데이트된 후 더티 때문에 다시 확인됩니다.
노드 C3이 작업 메모리에서 철회됩니다.
노드 D 는 작업 메모리에 어설션됩니다.
노드 C1은 P 가 재주장되기 전에 업데이트되지 않았기 때문에 작업 메모리에서 변경되지 않은 상태로 유지됩니다.
TypedDataRow에서 Reassert가 실행되면 해당 행이 철회된 다음 작업 메모리로 어설션됩니다. TypedDataTable에서 Reassert가 실행되면 연결된 모든 TypedDataRows가 철회된 다음 어설션됩니다.
DataConnection을 통해 검색된 모든 TypedDataRow가 철회됩니다. 그런 다음 DataConnection 을 사용하는 모든 조건자가 다시 평가되어 DataConnection 이 다시 쿼리되어 관련 TypedDataRows를 만듭니다.