---
sourceDocument: 호주 API 참조
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ko-KR/api-reference

 Release :

    - australia

ft:locale :

    - ko-KR

ft:publication_title :

    - 호주 API 참조

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# 구문 확장

# Jelly 구문에 대한 확장 {#ariaid-title1}

* 릴리스 버전: Australia
* 
* 업데이트 날짜 2026년 03월 12일
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 소요 시간: 15분

Apache의 Jelly 구문은 폼, 목록, UI 페이지 및 ServiceNow.

Jelly를 사용하면 정적 콘텐츠 내에 논리를 포함할 수 있으며 계산된 값을 정적 콘텐츠에 삽입할 수 있습니다.  
중요사항:  
이 기능을 사용하려면 Apache Jelly(XML을 실행 가능한 코드로 변환하기 위한 Java 및 XML 기반 스크립팅 및 처리 엔진)에 대한 지식이 필요합니다.

Apache의 이 페이지에는 표준 Jelly 태그에 대한 요약이 있습니다. <http://commons.apache.org/jelly/tags.html>

## 네임스페이스 {#ariaid-title2}

Jelly는 태그를 호출할 때 종종 여러 네임스페이스를 포함합니다.
"j" 네임스페이스는 표준 Jelly이고 "g" 네임스페이스는 스크립트에 고유합니다.ServiceNow 예를 들어, JavaScript를 사용하여 값을 계산할 수 있도록 \<g:evaluate\> 태그가 제공됩니다 ServiceNow . 표준 Jelly 태그\<j:test\>는 조건을 평가하는 데 사용됩니다.

## 단계 {#ariaid-title3}

일반적으로 네임스페이스\<j\> 대 \<j2\> 및 \<g\> 대 \<g2\>로 표시되는 두 가지 단계가 있습니다.
"2"가 없는 네임스페이스는 처리의 첫 번째 단계에서 발생하며 UI 페이지에서 사용되는 경우를 제외하고는 캐시됩니다. "2"가 있는 항목은 캐시되지 않습니다. 효율성과 올바른 결과를 위해 1단계 또는 2단계를 사용할지 여부를 선택할 때 주의해야 합니다.

네임스페이스 외에도 정적 컨텐츠에 값을 삽입하는 데 사용되는 구문은 값을 제공할 단계에 따라 다릅니다. 값을 중괄호로 둘러싸고 있는 달러는 1단계에 값을 삽입합니다. 예를 들어 `${jvar_ref}` 는 Jelly 프로세스의 1단계에서 `jvar_ref` 값을 삽입합니다. 값을 괄호로 묶은 달러는 2단계에 값을 삽입합니다. 예를 들어, `$[jvar_ref]` 는 2단계에서 `jvar_ref` 값을 삽입합니다. 따옴표로 묶인 값은 문자열로 처리됩니다. 예를 들어, `'[jvar_ref]'` 는 2단계에서 `jvar_ref` 값을 문자열로 삽입합니다.

     <script>
    if (confirm("$[gs.getMessage('home.delete.confirm') ]"))
       ...
    </script>

    <input type="hidden" id="${jvar_name}" name="${jvar_name}" value="${jvar_value}" class="${jvar_class}" />

## 테스트 {#ariaid-title4}

Jelly 스크립트에서 if 문을 사용할 수 있습니다.
어떤 것이 사실인지 아닌지 테스트하는 방법은 다음과 같습니다.

    <j:if test="${jvar_something}">...do something...</j:if>
    <j:if test="${!jvar_something}">...do something...</j:if>

이 진술이 작동하는 이유는 Jelly에서 jvar_something와 같은 용어가 다음과 같은 경우 if 태그에서 "진실"이기 때문입니다.

1. 부울이고 참입니다.
2. 문자열이고 = "true", "yes", "on" 또는 "1"
{#r_IfTests__ol_ovn_k3g_hr}

다음과 같이 무언가가 존재하는지 테스트할 수 있습니다.

    <j:if test="${empty(jvar_something)}">...do something...</j:if>

이 명령문이 작동하는 이유는 JEXL 빈 함수가 인수가 다음과 같은 경우 true를 반환하기 때문입니다.

1. null
2. 빈 문자열
3. 길이가 0인 컬렉션
4. 키가 없는 맵
5. 빈 배열
{#r_IfTests__ol_o3b_bjg_hr}  
주:  
JEXL 표현식에서 javascript와 jvar 변수를 혼합할 수 없습니다. 그것들은 별도의 표현으로 나누어야 합니다.

## Set_If {#ariaid-title5}

테스트가 참인지 거짓인지에 따라 변수를 두 값 중 하나로 설정합니다.

    <g2:set_if var="jvar_style" test="$[gs.getPreference('table.compact') != 'false']" 
       true="margin-top:0px; margin-bottom:0px;" 
       false="margin-top:2px; margin-bottom:2px;" />

## \<g:삽입\> 대 \<g:inline\> 대 \<g:call\> {#ariaid-title6}

이 페이지에서는 \<g:insert\>, \<g:inline\> 및 \<g:call\>의 세 가지 태그에 대한 비교 설명을 제공합니다.

### \<g:삽입\>

\<g:insert\> 태그는 새 컨텍스트에서 Jelly 파일을 Jelly에 삽입합니다. 즉, 이전에 Jelly에 설정된 변수에 액세스할 수 없습니다.

    <g:insert template="get_target_form_function.xml" />

### \<g:인라인\>

\<g:inline\> 태그는 동일한 컨텍스트에서 Jelly에 Jelly 파일을 삽입합니다. 즉, 삽입된 Jelly는 이전에 설정한 변수에 액세스할 수 있으며 해당 변수의 값을 변경할 수 있습니다.

    <g:inline template="element_default.xml" />

### \<g:call\>

더 나은 캡슐화를 위해 \<g:call\> 태그를 사용할 수 있습니다. 함수는 전달된 값에만 액세스할 수 있습니다. Jelly 컨텍스트는 호출 후와 호출 전과 동일하게 표시됩니다. 즉, 여기서 전역 변수를 설정하고 나중에 읽을 수 없습니다. 이것은 또한 실수로 "jvar_temp"라는 전역 변수를 설정하고 다른 사람이 의존하던 변수를 덮어 쓸 수 없음을 의미합니다.

필요한 경우 매개변수 이름을 \<g:call\> 줄에 포함하고 등호와 따옴표로 묶은 값을 포함시켜 값을 명시적으로 전달합니다.

    <g:call function="collapsing_image.xml" id="${jvar_section_id}" image="$[jvar_cimg]" 
       first_section_id="${jvar_first_section_id}" image_alt="${jvar_cimg_alt}"/>

값이 전달되고 기본값 또는 필수 매개 변수를 갖고자 하는 경우 함수에서 참조되는 Jelly에는 매개 변수가 필수인지 또는 기본값이 있는지 여부를 선언하는 줄이 포함되어야 합니다.

    <g:function id="REQUIRED" image="REQUIRED" image_prefix="" image_alt="REQUIRED"/>

위의 예는 매개변수 중 3개가 필요하고 하나의 매개변수가 기본값이 비어 있는 옵션임을 나타냅니다. 값을 전달하지 않거나 기본 또는 필수 값을 사용하려는 경우 \<g:function\> 줄을 전혀 포함할 필요가 없습니다. 그러나 일반적으로 \<g:function\> 줄을 포함해야 합니다.

그런 다음 매개변수 이름 앞에 "jvar_" 프리픽스를 추가하여 템플릿에서 값을 참조할 수 있습니다.

    <img id="img.${jvar_id}" src="images/${jvar_image}" alt="${jvar_image_alt}"     onclick="toggleSectionDisplay('${jvar_id}', '${jvar_image_prefix}','${jvar_first_section_id}');"/>

\<g:call\>의 경우 매개변수는 "arguments" 매개변수에서 명명된 변수 목록으로 암시적으로 전달될 수도 있습니다.

     <g:call function="item_link_default.xml" arguments="sysparm_view,ref_parent,jvar_target_text"/>

별도의 태그 인수를 통해 변수를 함수에 전달하는 대신 단일 'arguments' 인수로 변수 목록을 전달할 수 있습니다. 매개변수에서 argument 이름(쉼표로 구분)으로 식별된 모든 변수는 정확히 동일한 이름으로 함수 내에 다시 도입됩니다(예: 함수 템플릿 내에서 sysparm_view, ref_parent 및 jvar_target_text 사용할 수 있는 변수가 있음).

함수 템플릿은 `return=` 속성을 사용하여 호출 템플릿에 값을 반환할 수 있습니다. 함수 내에서 `jvar_answer` 변수는 반환 값을 설정합니다.

    <g:call function="item_body_cell_calc_style.xml" arguments="jvar_type" return="jvar_style"/>

## \<g:평가\> {#ariaid-title7}

\<g:evaluate\> 태그는 Rhino JavaScript로 작성된 표현식을 평가하고 때로는 표현식 값으로 변수를 설정하는 데 사용됩니다.
표현식의 마지막 문은 변수에 포함될 값입니다.

    <g2:evaluate var="jvar_page" jelly="true">
         var page = "";
         var pageTitle = "";
         var pageGR = new GlideRecord("cmn_schedule_page");
         pageGR.addQuery("type", jelly.jvar_type");
         pageGR.query();
         if (pageGR.next()) {
            page = pageGR.getValue("sys_id");
            pageTitle = pageGR.getDisplayValue();
         }
         page;
    </g2:evaluate>

    <g2:evaluate var="not_important" expression="sc_req_item.popCurrent()"/>

### 객체="true"

평가가 객체(예: 배열)를 반환하도록 하려면 object="true" 인수를 사용합니다.

    <g2:evaluate object="true" var="jvar_items" expression="SncRelationships.getCMDBViews()" />

### 젤리="참"

평가 내에서 Jelly 변수에 액세스하려면 평가에 jelly="true"를 포함하고 Jelly 변수 이름 앞에 "jelly."를 추가합니다. 예를 들어 GlideJellyContext에 액세스하려면 다음을 수행합니다.

    <g2:evaluate var="jvar_row_no" jelly="true">
       var gf = jelly.context.getGlideForm();
       var row = gf.getRowNumber();
       row;
    </g2:evaluate>

jelly="true" 매개변수를 사용하여 jvar에 액세스하는 또 다른 예입니다. `jvar_h` 값은 이전에 설정되었으며 `평가` 내에서 액세스할 수 있습니다.

    $[NLBR:jvar_h.getHTMLValue('newvalue')]
    <g2:evaluate var="jvar_fix_escaping" jelly="true">
        var auditValue = jelly.jvar_h.getHTMLValue('newvalue');
        gs.log("************ " + auditValue);
    </g2:evaluate>

### copyToPhase2="true"

1단계에서 발생하는 평가 결과를 가져와 2단계로 전파해야 하는 경우 copyToPhase2="true"를 사용합니다. 이 사용에는 탈출에 대한 몇 가지 보호 기능이 있습니다. 예:

    <g:evaluate var="jvar_has_special_inc" copyToPhase2="true">
       var specialInc = gs.tableExists("special_incident");
       specialInc;
    </g:evaluate>
    $[jvar_has_special_inc]

평가할 필요가 없는 경우 더 직접적으로 평가할 수 있습니다. 여기서 이스케이프 문제에 주의하십시오(jvar_rows의 큰따옴표는 예제에서 문제를 일으킬 수 있습니다).

    <j2:set var="jvar_rows" value="${jvar_rows}"/>

## \<g:중단점/\> {#ariaid-title8}

이 태그를 사용하여 현재 Jelly 변수와 해당 값을 로그에 표시할 수 있습니다.
프로덕션으로 이동하기 전에 이 태그를 제거해야 합니다.

## \<g:ui_form/\> {#ariaid-title9}

이 태그는 UI 페이지의 양식을 정의합니다.
예를 들어 양식에 `application_sys_id` 필드가 포함되어 있는 경우 g:ui_form는 처리 스크립트의 이점을 활용할 수 있습니다.

    <g:ui_form>
        <p>Click OK to run the processing script.</p>
        <g:dialog_buttons_ok_cancel ok="return true" />
        <input type="hidden" name="application_sys_id" value="499836460a0a0b1700003e7ad950b5da"/>
     </g:ui_form>

자세한 내용은 [UI 매크로](https://servicenow-prod.fluidtopics.net/~i5pOxozTXC72g_L_SQMxw#c_UIMacros "UI 매크로는 관리자가 사용자 인터페이스에 추가할 수 있는 개별 스크립트 구성요소입니다.") 문서를 참조하십시오.

## \<g:ui_input_field/\> {#ariaid-title10}

이 태그는 사용자가 정보를 입력할 수 있는 페이지에 입력 필드를 생성하는 UI 매크로에 대한 참조를 추가합니다. `ui_input_field`는 레이블, 이름, 값 및 크기를 UI 매크로에 전달합니다.
다음은 UI 페이지의 예입니다.

    <g:ui_input_field label="sys_id" name="sysid" value="9d385017c611228701d22104cc95c371" size="50"/>

자세한 내용은 [UI 매크로](https://servicenow-prod.fluidtopics.net/~i5pOxozTXC72g_L_SQMxw#c_UIMacros "UI 매크로는 관리자가 사용자 인터페이스에 추가할 수 있는 개별 스크립트 구성요소입니다.") 문서를 참조하십시오.

## \<g:ui_checkbox/\> {#ariaid-title11}

이 태그는 페이지에 사용자가 편집할 수 있는 확인 표시를 합니다. 이름과 값이 UI 매크로에 전달됩니다.
다음은 UI 페이지의 테이블에 있는 예입니다.

    <table>
        <tr>
          <td nowrap="true">
              <label>Time Card Active:</label>
          </td>
          <td>
              <g:ui_checkbox name="timecard_active" value="${sysparm_timecard_active}"/>
          </td>
       </tr>
    </table>

자세한 내용은 [UI 매크로](https://servicenow-prod.fluidtopics.net/~i5pOxozTXC72g_L_SQMxw#c_UIMacros "UI 매크로는 관리자가 사용자 인터페이스에 추가할 수 있는 개별 스크립트 구성요소입니다.") 문서를 참조하십시오.

## \<g:dialog_buttons_ok_cancel/\> {#ariaid-title12}

이 태그는 태그가 예을 반환할 경우 지정된 처리 스크립트를 실행하는 버튼을 UI 페이지에 배치합니다.
UI 페이지에 양식(\<g:form\> 태그 사용)이 포함되어 있는 경우 양식을 제출하고 처리 스크립트를 실행할 수 있습니다. 처리 스크립트는 자연스럽게 양식의 필드에 액세스할 수 있습니다. 예를 들어 양식에 application_sys_id 필드가 포함된 경우:

    <g:ui_form>
        <p>Click OK to run the processing script.</p>
        <g:dialog_buttons_ok_cancel ok="return true" />
        <input type="hidden" name="application_sys_id" value="499836460a0a0b1700003e7ad950b5da"/>
     </g:ui_form>

## \<g:ui_reference/\> {#ariaid-title13}

이 태그는 처리 스크립트에서 참조할 수 있는 페이지에 대한 참조를 추가합니다.
다음 예시에서는 태그의 이름, ID 및 테이블 매개변수로 정의된 참조를 만듭니다.

    <g:ui_reference name="QUERY:active=true^roles=itil" id="assigned_to" table="sys_user" />

그런 다음 처리 스크립트에서 다음과 같이 이름 필드를 참조합니다.

    newTask.assigned_to = request.getParameter("QUERY:active=true^roles=itil");

"이름" 속성이 고유할 수 있도록 참조 한정자를 지정할 수 있습니다. 다음 예시에서는 태그의 이름, ID 및 테이블 매개변수로 정의된 참조를 만듭니다.  
주:  
"열" 속성은 자동 완성기에만 적용됩니다.

    <g:ui_reference name="parent_id" id="parent_id" table="pm_project" query="active=true" completer="AJAXTableCompleter" 
    columns="project_manager;short_description"/>

## 앰퍼샌드 {#ariaid-title14}

Jelly의 앰퍼샌드는 Jelly가 XML이기 때문에 슬픔을 유발할 수 있습니다.
<kbd class="ph userinput">${AMP}</kbd>를 사용하여 Jelly에 앰퍼샌드를 삽입합니다. 실제로 브라우저에서 실행될 UI 페이지 또는 UI 매크로의 HTML 부분에 나타나는 JavaScript를 작성하는 경우 이 코드를 "클라이언트 스크립트"필드에 넣는 것이 좋으며 이렇게 하면 문제를 피할 수 있습니다. 그러나 정말로 "HTML" 필드에 넣어야 하는 경우 다음과 같은 작업을 수행해야 합니다.

    ta = ta[1].split('$[AMP]');

## 및 {#ariaid-title15}

<kbd class="ph userinput">${AND}</kbd>를 사용하여 JavaScript를 삽입하고 Jelly에 삽입합니다.
예:

    if (d ${AND} e)
       var color = d.value;

또는 Jelly 테스트에서 <kbd class="ph userinput">&amp; &amp;</kbd>를 사용합니다. 예:

    <j:if test="${jvar_form_name == 'sys_form_template' && !RP.isDialog()}">

## 보다 작음 {#ariaid-title16}

앰퍼샌드와 마찬가지로 보다 작음("\<") 기호도 Jelly가 XML이기 때문에 문제를 일으킬 수 있습니다. 이 문제는 테스트가 필요하지 않도록 되돌리거나 <kbd class="ph userinput">${AMP}lt;</kbd> 보다 작음 기호 대신 사용하여 해결할 수 있습니다.

    <g2:evaluate var="jvar_text">
         var days = "";
         var selectedDays = '$[${ref}]';
         for (var i = 1; i ${AMP}lt;= 7; i++) {
            if (selectedDays.indexOf(i.toString()) >= 0) {
               days += gs.getMessage("dow" + i);
               days += " ";
            }
         }
         days;
     </g2:evaluate>

많은 경우 이스케이프 문제가 없는 "같지 않음"을 사용하여 "보다 작음"연산자를 모두 피할 수 있습니다. 예:

    for (var i=0; i != ta.length; i++) {
    }

## 공백 {#ariaid-title17}

일반적으로 공백은 Jelly에 의해 제거됩니다. 유지하려면 트리밍되지 않도록 지정해야 합니다.
예를 들어, 다음은 콜론 뒤의 공백을 유지합니다.

    <j2:whitespace trim="false">${gs.getMessage('Did you mean')}: </j2:whitespace>

## 공간 {#ariaid-title18}

줄 바꿈 없는 공백( )을 인코딩하려면 다음을 사용할 수 있습니다. <kbd class="ph userinput">$[SP]</kbd>입니다.
예:

    <span id="gsft_domain" style="display: inline">
        ${gs.getMessage('Domain')}:$[SP]
        <span id="domainDD" class="drop_down_element" style="text-decoration: none; color: white">
            ${gs.getMessage("Loading...")}
       </span>
    </span>

## 트레이싱 젤리 {#ariaid-title19}

ServiceNow Jelly의 평가를 추적할 수 있는 기능이 있습니다.
추적이 로그로 전송됩니다. 이것은 많은 로깅을 생성하므로 디버깅 중에만 켜야 합니다. 추적을 켜려면 glide.ui.template.trace 속성을 예로 설정합니다. 예를 들어, 이 작업을 위해 다음 스크립트를 실행할 수 있습니다.

    GlideProperties.set ( 'glide.ui.template.trace' , true ) ;

각 페이지 하단의 웹 브라우저에서 로그 항목을 보려면 시스템 진단디버그 로그.

