스크립트 블록
HTML Mode는 reusable survey logic을 위한 restricted helper script를 지원합니다. Script helper는 한 번 safe helper surface로 평가된 뒤 if, <condition>, <run-code>, <validation>, Template Expression에서 사용할 수 있습니다.
Helper 선언
<script name="LogicHelpers">
function isTarget(age, gender) {
return age.value >= 18 && gender.o1;
}
registerSurveyHelper("segmentLabel", function(segment) {
return String(segment || "direct").trim().toUpperCase();
});
</script>
<question type="single" name="FOLLOWUP" if="isTarget(AGE, GENDER)">
<description>{{ segmentLabel($params.source) }} segment follow-up</description>
<option value="1">Continue</option>
</question>
Safe top-level function declaration과 registerSurveyHelper(name, function (...) { ... })를 모두 지원합니다.
Helper input
Question object 또는 primitive value를 명시적으로 전달합니다.
<question type="single" name="Q1">
<run-code>
if (segmentLabel($params.source) === "PARTNER" && $curr.o1) {
setAnswer("PARTNER_SEGMENT", 1);
}
</run-code>
<option value="1">Partner path</option>
</question>
Helper는 전달된 값을 읽을 수 있지만 answer를 직접 mutate하면 안 됩니다. Mutation은 <run-code>에서 setAnswer, clearAnswer, question-object mutation method로 처리합니다.
Runtime namespace와 helper input
Script helper를 호출하는 DSL context는 Runtime & Logic 문서의 safe runtime helper와 함께 동작하며, 해당 값을 helper 인자로 전달할 수 있습니다.
Luxon.DateTime,Luxon.Duration,Luxon.Interval- consuming runtime context가 제공하는
$now - Survey Link/runtime params가 제공하는
$params - question-local consuming context에서만
$curr - redirect route
ifevaluation에서만$status
Helper body 자체는 $params, $curr, $status를 직접 참조하기보다 함수 인자로 받은 값을 읽어야 합니다. 예: segmentLabel($params.source), isTarget($curr, $now.year)처럼 runtime 값을 명시적으로 전달합니다.
안전 규칙
- Save-time validation은 persistence 전에 JavaScript-bearing DSL을 검사합니다.
- 위험한 browser, server, network, storage, dynamic evaluation, timer, prototype escape surface는 차단됩니다.
- Local function, loop, object literal, array,
try또는catch는 safe runtime policy 안에 머무르면 허용됩니다. - Helper code는 pure하고 deterministic하게 유지합니다. Boolean, string, number, 작은 object를 반환하는 방식을 권장합니다.
$curr,$now,$params,$status,Luxon,Math, question name 같은 reserved runtime name과 충돌하는 global name을 만들지 않습니다.
Run generate parity
Run generate는 Survey Link simulation과 같은 helper context를 사용합니다. Helper가 auto-punching 또는 branch logic을 제어한다면 각 branch를 실행하는 scenario override를 만들고 generated response/export data를 검증하세요.