Antes de incluir determinados tipos de informações de modelo em um relatório
(arquivo RPTDESIGN), é necessário gravar uma função XPath customizada para extrair as informações dos modelos de destino.
Antes de Iniciar
Pré-requisito: Para concluir esta tarefa, é necessário estar familiarizado com o desenvolvimento de plug-in no Ambiente de Desenvolvimento de Plug-in do Eclipse e com a API de UML2.
Por Que e Quando Desempenhar Esta Tarefa
Para gravar uma função XPath customizada:
- Crie um novo projeto de plug-in:
- Na perspectiva de Desenvolvimento de Plug-in, clique em , expanda Desenvolvimento de Plug-in, selecione Projeto de Plug-in e clique em Avançar.
- Digite um ID de plug-in como com.ibm.field.birt.xpath_extensions e, em seguida, clique em Avançar e Concluir. O plug-in é incluído na visualização Package Explorer, e as informações sobre o plug-in são exibidas na visualização Editor do Manifesto de Plug-in na página Visão Geral.
- Estenda o ponto de extensão org.eclipse.jet.xpathFunctions.
- Na página Visão Geral, clique na guia Extensões, em seguida, clique em Incluir.
- Desmarque a caixa de opção Mostrar somente os pontos de extensão dos plug-ins necessários.
- No campo Filtro do Ponto de Extensão,
digite *.jet e na lista de extensões dê um clique duplo em org.eclipse.jet.xpathFunctions.
- Para confirmar que você deseja incluir o plug-in na lista de dependências de plug-in, clique em Sim.
- Clique na guia MANIFEST.MF e inclua org.eclipse.uml2.uml na lista Require_Bundle para que o plug-in tenha visibilidade para a API de UML. O código para a lista deverá ser semelhante ao seguinte:
Require_Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.uml2.uml,
org.eclipse.jet
- Clique na guia plugin.xml e modifique a definição <function> para definir a função customizada. Por exemplo, se você estiver definindo uma função chamada
SlotValue, que possua dois argumentos,
e seja implementada na classecom.ibm.field.birt.xpath_extensions.SlotValue,
o código deverá ser semelhante a este:
<function
implementation="com.ibm.field.birt.xpath_extensions.SlotValues"
maxArgs="2"
minArgs="2"
name="slotValue">
</function>
- Clique em .
- Crie um shell de código e vincule-o ao plug-in:
- Na visualização Package Explorer, dê um clique com o botão direito do mouse no novo projeto de plug-in; .
- No campo Pacote, especifique o nome do projeto de plug-in.
- No campo Nome, digite um tipo de nome para a
classe. Utilize o mesmo nome que foi atribuído à nova função. Por exemplo,
para a função definida na etapa 2, o nome seria SlotValue.
- Para incluir uma interface, clique em Incluir.
- Na caixa de diálogo Nova Classe Java, no campo Escolher Interfaces, digite XPathFunction; em seguida, na lista de itens correspondentes, selecione XPathFunction - org.eclipse.jet.xpath,
clique em OK e clique em Concluir.
- Inclua o código no arquivo Java para a função XPath a fim de que realize a tarefa desejada e salve o arquivo.
Por exemplo, se você quiser que a função SlotValue itere por meio dos nós que resultam do primeiro argumento (uma expressão XPath) e quando ela localizar uma especificação de instância, para retornar o valor do slot que o argumento slotname especifica ao chamar a função getStringValue, deverá ser gravado o seguinte código:
package com.ibm.field.birt.xpath_extensions;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jet.xpath.NodeSet;
import org.eclipse.jet.xpath.XPathFunction;
import org.eclipse.uml2.uml.InstanceSpecification;
import org.eclipse.uml2.uml.Slot;
import org.eclipse.uml2.uml.ValueSpecification;
public class SlotValue implements XPathFunction {
public String getStringValue(InstanceSpecification ia, String slotname) {
List slots = ia.getSlots();
for (Iterator iterator = slots.iterator(); iterator.hasNext();) {
Slot slot = (Slot) iterator.next();
String definingFeatureName = slot.getDefiningFeature().getName();
if (definingFeatureName.equals(slotname)) {
List values = slot.getValues();
for (Iterator iterator2 = values.iterator(); iterator2
.hasNext();) {
ValueSpecification value = (ValueSpecification) iterator2.next();
return value.stringValue();
}
}
}
return null;
}
public Object evaluate(List args) {
Object obj = args.get(0);
String slotname = (String) args.get(1);
if (obj instanceof NodeSet) {
NodeSet ns = (NodeSet) obj;
for (Iterator iterator = ns.iterator(); iterator.hasNext();) {
Object item = (Object) iterator.next();
if (item instanceof InstanceSpecification){
InstanceSpecification ispec = (InstanceSpecification) item;
if ((slotname != null)&&(slotname.length()>0))
return getStringValue(ispec,slotname);
}
}
}
return null;
}
}
- Crie um novo projeto de plug-in de recurso:
- Clique em , expanda Desenvolvimento de Plug-in,
selecione Projeto de Recurso e clique em Avançar.
- No campo Nome do Projeto, digite um nome de projeto e clique em Avançar. É sempre útil atribuir um novo nome de recurso que seja semelhante ao nome do plug-in; para o plug-in com.ibm.field.birt.xpath_extensions, você pode escolher o com.ibm.field.birt.xpath_extensions.feature.
- Para empacotar o plug-in com o recurso, selecione a caixa de opção para o plug-in que você criou na etapa 1 e clique em Concluir. O recurso é incluído na visualização Package Explorer, e as informações sobre o recurso são exibidas na visualização Editor do Manifesto de Recurso na página Visão Geral.
- Na página Visão Geral, no campo Nome,
digite um nome de recurso como Recurso de Extensões XPath.
- Na página Visão Geral, clique no link para Assistente de Exportação.
- Selecione Arquivo de Arquivamento, especifique um local e um nome para o arquivo, como xpath_extensions.zip e clique em
Concluir.
Nota: É possível utilizar este plug-in de recurso para vários projetos da função XPath customizada.
- Importe o novo plug-in para a instância do Eclipse em que você está criando design de relatórios:
- Extraia o arquivo de arquivamento para um diretório como C:/temp/xpath_extensions.
- No Eclipse, clique em .
- No assistente Instalar/Atualizar, clique em Procurar Novos Recursos para Instalação e clique em Avançar.
- Clique em Novo Site Local, selecione a pasta que contém o recurso e o plug-in, clique em OK e clique em
Concluir.
- Na caixa de diálogo Resultados da Procura, selecione seu recurso e clique em Avançar.
- Se você concordar com os termos do contrato de licença, selecione Eu aceito os termos no contrato de licença, clique em Avançar e clique em
Concluir.
- Ao receber um prompt para reiniciar seu computador, clique em Sim.
Resultados
Agora, é possível utilizar a nova extensão XPath nos designs de relatório.
Nota: Os usuários de designs de relatório também devem importar o novo recurso antes de poderem gerar relatórios a partir de designs de relatório que dependam das funções XPath customizadas. O tópico
"Importando Funções XPath Customizadas" fornece informações gerais, mas talvez você queira fornecer a documentação customizada aos usuários, que acompanha o arquivo RPTDESIGN que explica onde os usuários podem obter o recurso e como podem utilizá-los.