Gestão de conteúdo e o mecanismo Apache Jelly
Apache Jelly é um mecanismo de script e processamento baseado em Java e XML para transformar XML em código executável.
O mecanismo Apache Jelly se assemelha a XML e deve ser confortável para desenvolvedores familiarizados com JavaScript, XML, XHTML ou HTML. Em ServiceNow Instância, o mecanismo 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, um <BR />ou um <IMG src="cms.png" />.
- Marcadores Jelly
- Extensões para a sintaxe Jelly
- Tipos de escape Jelly
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 script 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 ServiceNow plataforma criada e está usando para fins de plataforma.
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 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, ele 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>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 a tag 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ócio 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 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 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 se for omitido, o script será quebrado porque jvar_groups só seria capaz de conter itens como números 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>enquanto loop. É um loop while normal e pode iterar por meio de um objeto GlideRecord. Observe também que você gera um valor com HTML:jvar_groups.getValue('name') . Aqui estão os elementos importantes:- Os suportes exteriores,
.especifique a saída da variável e a fase em que a variável é gerada:.primeira fase,[]segunda fase. - 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.
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>