HPDFXFAExecuteJavaScriptEvent
유닛: HPDFXFAEventScript
선언
function HPDFXFAExecuteJavaScriptEvent(const Script: AnsiString;
const Bindings: TXFAEventBindings; SelfIndex: Integer;
const Options: TXFAFormScriptOptions; out Actions: TXFAEventActions;
out Operations: Integer; out Diagnostic: string;
Session: TXFAJavaScriptSession= nil;
HostTransaction: TXFAHostTransaction= nil;
LocaleProvider: TXFALocaleDataProvider= nil;
HostModel: PXFAHostModelState= nil): Boolean;
동작
라이브 가상 form DOM에 대해 이벤트를 실행하고 호출자 문서를 바꾸지 않으면서 검증된 변경 레코드를 반환합니다
Bindings가 호스트 컨텍스트를 공급하고 SelfIndex가 this를 고릅니다. Options.EnableJavaScript는 True여야 합니다
Script와 raw 바인딩 텍스트는 UTF-8 바이트이며, 운영체제 ANSI 코드 페이지로 해석하는 대신 JavaScript 소스와 따옴표 컨텍스트를 명시적으로 디코딩합니다. 그리스 문자 literal, 보충 스칼라, Unicode 줄바꿈 문자는 정확한 값을 유지합니다
함께 제공되는 유한한 QuickJS 엔진 또는 Options.JavaScriptEvaluator를 사용하며, 스크립트, 컨텍스트, 메모리, 스택, 인터럽트, 시간, 연산, 출력 예산이 적용됩니다
엔진 실행과 출력 검증이 모두 성공해야만 True를 반환합니다. 실패한 실행은 Actions를 비우고 Diagnostic을 보고합니다
TXFAWidgetRuntime은 자체 스냅샷 트랜잭션 안에서 액션을 검증하고 리플레이합니다. 직접 호출자는 동등한 트랜잭션 처리를 갖춰야 합니다
네이티브 엔진은 재사용 가능한 이벤트 지원 코드를 세션 엔진당 한 번 컴파일하고, 호출마다 현재 바인딩 벡터, 이벤트 본문, 한도, 기록된 호스트·로캘·계산·XML 응답을 공급합니다. 별개 세션과 반복 스크립트 객체는 독립 상태를 유지합니다
지원 초기화, 이벤트 실행, 일시 중단 재시도, 롤백 재구성은 원래 경과 시간 데드라인을 공유합니다. 사용자 정의 JavaScriptEvaluator 콜백은 완전한 독립 래퍼를 받습니다
호출 사이에 스크립트 객체와 렉시컬 상태를 유지하려면 소유한 TXFAJavaScriptSession을 넘기세요. nil 세션은 그 호출을 위한 고립된 엔진을 만듭니다
명시적인 애플리케이션 효과를 위해서는 소유한 TXFAHostTransaction을 넘기세요. 일시 중단 재시도는 세션 체크포인트를 복원하고 기록된 응답을 소비하므로 완료된 요청을 다시 호출하지 않습니다
하위 수준 호출자는 문서 결과로 호스트 트랜잭션을 마무리해야 합니다. 호스트 효과에는 함께 제공되는 엔진이 필요하고 JavaScriptEvaluator는 쓸 수 없습니다
LocaleProvider는 읽기 전용 로캘 메타데이터를 공급합니다. nil이면 Windows 로캘 데이터를 쓰고, TXFAWidgetRuntime은 시스템 폴백이 붙은 현재 문서 localeSet을 공급합니다
가장 가까운 비어 있지 않은 Locale 바인딩이 주변 로캘을 공급합니다. 상속된 로캘이 비어 있으면 현재 사용자 로캘을 고릅니다
계산된 로캘 이름은 네이티브 실행을 일시 중단하고 세션 체크포인트를 복원한 뒤 기록된 메타데이터로 재시도합니다. 커밋된 리플레이는 그 메타데이터를 소비하므로 프로바이더를 다시 호출하지 않습니다
호출 하나는 이름 있는 로캘 요청 64회, 식별자당 UTF-16 코드 유닛 256개, 로캘 메타데이터 2 MiB까지 허용하며 경과 스크립트 데드라인을 공유합니다. 사용자 정의 JavaScriptEvaluator 콜백은 네이티브 조회를 요청하지 않고 공급된 로캘 데이터를 소비해야 합니다
HostModel은 애플리케이션 메타데이터, 페이지, 플래그, 제목, 포커스의 읽기 전용 스냅샷을 공급합니다. nil이면 TXFAHostModelState.Default를 쓰고, 반환된 host/focus/reset 액션은 호출자가 네이티브 트랜잭션으로 적용해야 합니다
동적 FormCalc Eval은 네이티브 컴파일을 위해 일시 중단했다가 같은 데드라인 안에서 기록된 컴파일 응답으로 재시도합니다. 사용자 정의 JavaScriptEvaluator 콜백은 이 요청을 처리할 수 없습니다
포인터는 동기적으로 읽기만 하고 보관하거나 쓰지 않습니다. TXFAWidgetRuntime은 현재 상태를 넘기고 문서 스냅샷 트랜잭션 안에서 변경을 적용합니다
실행 중인 바인딩의 EventActivity가 xfa.event.name을 공급하고, 하위 수준 폴백으로 event를 씁니다
라이브 SOM 해석은 바인딩 계층과 현재 occurrence 순서를 쓰고, 클래스·자손 셀렉터와 후보 predicate를 지원하며, 인덱스가 생략되면 추론된 occurrence나 기본 occurrence 하나를 고릅니다
Data DOM 바인딩은 datasets 트리를 만들고 DataIdentity로 폼 값을 연결하며, 데이터 쓰기와 유지되는 네이티브 데이터 핸들을 지원합니다. 직접 호출자는 두 도메인과 가상 식별자 액션을 트랜잭션으로 적용해야 합니다
Property DOM 바인딩은 선언된 프로퍼티 자식과 Attributes/DefaultAttributes를 노출합니다. 직접 호출자는 프로퍼티 raw 값 액션과 속성 액션을 일치하는 네이티브 폼 occurrence에 적용합니다
이름 붙은 field 별칭은 바깥 이벤트 scope에서 보입니다. 이벤트 본문 안의 로컬 const, let, class, function, var 선언은 평범한 JavaScript 렉시컬 규칙을 따릅니다
이벤트 본문은 맨 앞의 use strict 지시문과 폼 노드 this 컨텍스트, 명시적 반환 값을 유지합니다. 렉시컬 또는 strict 모드 실패는 같은 네이티브 트랜잭션을 거부합니다
섀도잉과 지속 동작은 JavaScript 이벤트 scope를 참고하세요