---
sourceDocument: Interface do usuário da Now Platform Yokohama
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/pt-BR/yokohama/platform-user-interface

 Release :

    - yokohama

ft:locale :

    - pt-BR

ft:publication_title :

    - Interface do usuário da Now Platform Yokohama

ft:clusterId :

    - platux

bundleId :

    - platux

workflow :

    - Platform


---

# E o mecanismo do Apache Jelly

# E o mecanismo do Apache Jelly {#ariaid-title1}

* Versão de lançamento: Yokohama
* 
* Atualizado 30 de jan. de 2025
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 4 min. de leitura

O Apache Jelly é um mecanismo de processamento e script baseado em Java e XML para transformar XML em código executável.
O mecanismo do Apache Jelly se assemelha a XML e deve ser confortável para desenvolvedores familiarizados com JavaScript, XML, XHTML ou HTML. Em ServiceNow, o mecanismo do Apache Jelly renderiza itens como formulários, listas e páginas de IU. O código do Apache Jelly é renderizado bem em um bloco de conteúdo dinâmico, mas pode ter problemas quando usado em blocos estáticos. Você pode usar marcadores, chamadas e declarações Jelly, mas o HTML atua como o XHTML.  

    <?xml version= "1.0" encoding= "utf-8" ?>
    <j:jelly trim = "false" xmlns:j = "jelly:core" xmlns:g = "glide" xmlns:j2 = "null" xmlns:g2 = "null" >
     
    	<j:if test = "${current_page.getName()=='Solutions'}" >
    	<h1 class = "page_name" > <b> <a href = "solutions.do?" title="${gs.getMessage('Solutions')}" >${gs.getMessage('Solutions')}</a> </b> </h1>
    	<p class = "page_description" >
    	 	    ${current_page.getDescription()}
    	</p> <br />
    	</j:if>
    	<j:if test = "${current_page.getName()=='IT 3.0'}" >
    	   <h1 class = "page_name" > <b> <a href = "solutions.do?" title="${gs.getMessage('Solutions')}" >${gs.getMessage('Solutions')}</a> </b> | ${current_page.getName()}</h1>
    	   <p class = "page_description" >
    	 	    ${current_page.getDescription()}
    		</p> <br />
    		</j:if>
    		</j:jelly>

Certifique-se de que todos os marcadores estejam encerrados. Se o marcador não for um marcador de fechamento natural, coloque uma barra antes do colchete final. Por exemplo, A. `<BR />`ou um `<IMG src="cms.png" />`.  
Se você não estiver familiarizado com scripts do Jelly, revise estes tópicos:

* [Marcadores Jelly](https://www.servicenow.com/docs/access?context=r_JellyTags&version=yokohama&pubname=yokohama-application-development&ft:locale=en-US)
* [Extensões para a sintaxe do Jelly](https://www.servicenow.com/docs/access?context=c_ExtensionsToJellySyntax&version=yokohama&pubname=yokohama-application-development&ft:locale=en-US)
* [Tipos de escape Jelly](https://www.servicenow.com/docs/access?context=r_JellyEscapingTypes&version=yokohama&pubname=yokohama-application-development&ft:locale=en-US)
{#r_ContentManagementAndJelly__ul_glf_q2y_n4}

Inclua o marcador a seguir com todos os scripts do Apache Jelly.  

    <j:jelly trim= "false" xmlns:j= "jelly:core" xmlns:g= "glide" xmlns:j2= "null" xmlns:g2= "null" >

O marcador parece complexo, mas lembre-se das seguintes informações.

* O script do Apache Jelly usa vários namespaces.
* Há dois tipos de prefixos nos marcadores: j e g. O prefixo j é usado para marcadores que são parte nativa do Apache Jelly. O prefixo g é usado para marcadores que são ServiceNowplataforma criada e está usando para fins de plataforma.
{#r_ContentManagementAndJelly__ul_pwp_hsv_c5}

Os prefixos j2 e g2 são como j e g, exceto que eles são processados em uma segunda fase. O analisador de script do Apache Jelly é executado por cada marcador j e g, respectivamente. Por exemplo:  

    <j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    	<j:set var="jvar_phase1" value="Hello" />
    	<j2:set var="jvar_phase2" value="World" />
    	${jvar_phase1} $[jvar_phase2]
    </j:jelly>

Na fase 1, o analisador executa todos os marcadores j e g. Em seguida, armazena o resultado em cache. Antes de executar a segunda fase, ele usa os namespaces j e g e move os namespaces para a segunda fase. Algo parecido com o código a seguir.  

    <j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="jelly:core" xmlns:g2="glide">
    	<j2:set var="jvar_phase2" value="World" />
    	Hello $[jvar_phase2]
    </j:jelly>

Para chamadas subsequentes deste script, somente a fase 2 é analisada.  
Nota:  
Se você planeja usar marcadores Jelly de fase 2 (g2 e j2) nas tabelas Tipo de conteúdo \[content_type\] ou Conteúdo dinâmico \[content_block_programatic\], selecione Duas fases no formulário de conteúdo.

Outro exemplo é criar um relatório de todos os incidentes em aberto atribuídos a cada grupo. Para isso, você pode usar um relatório e economizar tempo, mas é um bom exemplo para aprender Jelly. Comece com o marcador Jelly:  

    <j:jelly trim= "false" xmlns:j= "jelly:core" xmlns:g= "glide" xmlns:j2= "null" xmlns:g2= "null" >
    </j:jelly>

Primeiro, você precisa de uma lista de incidentes em aberto. Use um `g2: avaliar `marcador. O marcador Avaliar executa o script. Qualquer coisa dentro do marcador é analisado como uma regra de negócio, portanto, por exemplo, você pode chamar regras de negócios globais, inclusões de script e gliderecord.  

    <j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    	<g:evaluate var="jvar_groups" object="true">
    		var now_GR = new GlideRecord("sys_user_group");
    		gr.orderBy('name');
    		gr.query();
    		gr;
    	</g:evaluate>
    </j:jelly>

Este script está na fase 1 porque mudanças frequentes nos grupos de atribuição de incidentes não são esperadas. Observe também o. `var `atributo no marcador avaliar. Este atributo especifica qual variável é definida a partir deste bloco. No final do script, há um `gr `em uma linha por si só. Essa última linha é o que define a variável.

Você pode omitir o. `jvar_groups `, mas todas as variáveis no marcador Avaliar se tornam variáveis do Apache Jelly. . `verdadeiro `especifica que a variável não é um tipo de dados primitivo. Se `verdadeiro `for omitido, o script será quebrado porque `jvar_groups `seria capaz de conter somente itens como inteiros e cadeias de caracteres.

Após o marcador Avaliar, passe por esses grupos e encontre os incidentes de cada um.  

    <j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    	<g:evaluate var="jvar_groups" object="true">
    		var now_GR = new GlideRecord("sys_user_group");
    		gr.orderBy('name');
    		gr.query();
    		gr;
    	</g:evaluate>
    	<table>
    		<tr>
    			<th>Name</th>
    			<th>Incidents</th>
    		</tr>
    		<j:while test="${jvar_groups.next()}">
    			<tr>
    				<td>${HTML:jvar_groups.getValue('name')}</td>
    				<td></td>
    			</tr>
    		</j:while>
    	</table>
    </j:jelly>

Você pode incluir XML normal no script do Apache Jelly a qualquer momento. Como não há namespace, o script do Apache Jelly não tenta analisar os marcadores XML. Observe o. `j: enquanto `loop. É um loop while normal e pode iterar através de um objeto GlideRecord. Observe também que você gera um valor com `HTML:jvar_groups.getValue('name') `. Estes são os elementos importantes:

* Os suportes externos, `. `, especifique a saída da variável e a fase em que a variável é a saída: `. `significa primeira fase, `Valor[] `segunda fase.
* O HTML antes da expressão serve para escapar da saída. A expressão `Jvar_groups.getValue('name') `Está sendo escapado para HTML. Para outros tipos de escape, há JS (JavaScript), NS (Sem script) e algumas outras opções.
{#r_ContentManagementAndJelly__ul_y5t_thy_n4}

Para selecionar apenas um registro e não iterar por muitos registros, o código se parece com o seguinte exemplo:  

    <j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    	<g:evaluate var="jvar_groups" object="true">
    		var now_GR = new GlideRecord("sys_user_group");
    		gr.orderBy('name');
    		gr.query();
    		gr;
    	</g:evaluate>
    	<j:if test="${jvar_groups.next()}">
    		We found ${HTML:jvar_groups.getValue('name')}
    	</j:if>
    </j:jelly>

* **[Gestão de conteúdo e exemplos de código Jelly](https://servicenow-prod.fluidtopics.net/lDykYovkhMDyVu0Erc3SwQ)**   
  Exemplos de código

**Tarefas relacionadas**   

* [Configure um bloco de conteúdo](https://servicenow-prod.fluidtopics.net/5hC2l5thwoE0xDJTyCYILA "Para configurar um bloco de conteúdo, defina-o no formulário apropriado.")
* [Exibir marcadores de bloco do CMS](https://servicenow-prod.fluidtopics.net/yp4K8kQCmAiQwziNDsWawg "Exibir marcadores de bloco do CMS, que são usados para criação avançada de blocos e flexibilidade do site.")  
**Referência relacionada**   

* [Tipos de blocos de conteúdo](https://servicenow-prod.fluidtopics.net/Mak22cFdmBVwiyFpg5d5yQ "Os blocos de conteúdo, que compõem as páginas de conteúdo, são partes reutilizáveis de conteúdo definidas no sistema.")

