동적 FormCalc Eval
Eval(source)은 동적으로 공급된 계산을 네이티브 FormCalc 컴파일러로 컴파일하고, EnableJavaScript가 켜져 있으면 일반 이벤트 호스트로 실행합니다
소스에는 표현식, 조건문, 루프, 변수 선언, 로컬 함수 선언, 필드 변경이 들어갈 수 있습니다. 마지막 표현식이 결과이고 빌트인 이름은 대소문자를 구분하지 않습니다
var source = "target + other"
target = Eval(source)
target = Eval("var n=2 for i=1 upto 4 do n=n*i endfor n")
스코프와 객체
Ref와 참조 할당은 평가된 계산 안에서 쓸 수 있고, 호출 이벤트와 같은 명시적 핸들·일반 값 복사 규칙을 따릅니다
평가된 각 계산은 자신의 변수와 함수를 갖습니다. 호출한 계산이 선언한 변수나 함수는 읽을 수 없습니다
현재 필드, 상대 폼 객체, $form, $host, $event는 계속 쓸 수 있습니다. Eval(null)은 null을 반환하고 다른 scalar 인수는 소스 텍스트가 됩니다
SOM 술어 안에서는 후보가 현재 필드나 서브폼 컨텍스트를 공급하고, 중첩 Eval은 그 컨텍스트를 상속합니다
예를 들어 var secret=9 Eval("secret+1")은 secret이라는 폼 객체가 없으면 실패하지만, Eval("var secret=2 secret+1")은 3을 반환합니다
트랜잭션과 리플레이
소스를 처음 쓰면 실행이 잠시 중단되어 네이티브 컴파일러가 JavaScript를 만듭니다. 호스트는 이벤트 전 스크립트 상태를 복원하고, 컴파일된 응답을 공급하고, 계산을 다시 시도합니다
기록된 전송·로캘 응답은 재시도 중에 소비되므로, 중첩 컴파일이 외부 전송 콜백을 반복하지 않습니다
마지막 성공 평가만 스크립트 저널에 들어갑니다. 문법 오류, 런타임 오류, 예산 실패는 런타임 트랜잭션으로 필드 값, 인스턴스 상태, 스크립트 상태를 복원합니다
Eval은 실제 calculated 필드와 validation 스크립트 안에서도 동작합니다. SaveToBytes는 커밋된 문서 값을 보존합니다
예산
이벤트 하나는 서로 다른 동적 소스 최대 64개, 중첩 Eval 호출 여덟 개, 동적 소스+컴파일 응답 바이트 합산 2 MiB를 허용합니다. 이 경계는 구성된 스크립트 입력, 연산, 메모리, 스택, 저널, 경과 시간 한도와 함께 적용됩니다
구성한 스택·경과 시간 한도는 전용 중첩·요청 경계보다 먼저 실패할 수 있습니다. 컴파일 재시도는 이벤트 기한을 공유합니다
커스텀 JavaScript 평가기는 네이티브 동적 컴파일 요청을 처리할 수 없습니다. 함께 제공되는 QuickJS 실행 경로를 쓰세요
관련 API
HPDFXFACompileFormCalcEvent, HPDFXFAExecuteJavaScriptEvent, FormCalc 함수, 대화형 XFA 런타임