Mapeamento de dados estruturados com funções de nó aprimoradas

Já mencionámos anteriormente o suporte para funções de nó, que simplifica a associação de dados estruturados, eliminando a necessidade de copiar e colar uma função várias vezes numa associação. A repetição desnecessária da mesma função dificulta a compreensão e a revisão do esquema de associação de dados, tornando-o mais confuso.

O MapForce também inclui filtros adicionais que permitem definir funções para os nós. Estes parâmetros permitem aos desenvolvedores aplicar funções e valores padrão a nós específicos, com base em critérios definidos por eles. Por exemplo, é possível aplicar uma função a um nó com base em metadados do nó, como o nome do nó, o comprimento do nó, a precisão do tipo de dados do nó, anotações personalizadas do nó, e muito mais.

Vamos analisar um esquema com funcionalidades de nó aprimoradas.

A mapeamento de dados apresentado abaixo é um exemplo da função do nó PriceCalculation.mfd, instalado com o MapForc. Este exemplo calcula o preço final de venda de uma lista de artigos, com base no seu custo original e um fator de margem. Os dados de origem são um ficheiro de texto no formato CSV e o resultado é um ficheiro XML.

Nesta configuração, uma função de nó é definida e aplicada ao elemento "Artigos" no ficheiro de saída, bem como aos seus elementos filhos. Clicar duas vezes no ícone da função, em negrito, localizado à esquerda do elemento "Artigos", abre a definição da função de nó.

O menu suspenso "Aplicar a" no canto superior esquerdo indica que a função se destina a ser aplicada a todos os elementos filhos de "Article". A secção de descrição da função informa que esta função utiliza o elemento de metadados do nó "node_fractionDigits" como parâmetro para a função de arredondamento. Se "node_fractionDigits" não estiver definido para nenhum elemento filho, o valor zero será utilizado em substituição.

Podemos aprofundar a análise da função do nó clicando no botão "Editar", que aparece no centro superior da imagem acima. Isso abre a função numa janela de mapeamento de dados separada, numa visualização semelhante a uma função definida pelo utilizador:

O elemento de mapeamento "node_fractionDigits", localizado no canto inferior esquerdo, fornece um valor de entrada para a função, com base na estrutura dos dados de destino. Vamos analisar um pouco mais os metadados do nó para localizar o elemento "node_fractionDigits".

Definição de metadados do nó

Os metadados disponíveis para qualquer ficheiro de dados estruturados provêm da própria definição da estrutura de dados. No nosso exemplo, o componente de destino da mapeamento é um documento XML. Portanto, os metadados disponíveis para qualquer nó são definidos no esquema XML.

A imagem abaixo mostra o esquema XML de Cálculo de Preço na visualização gráfica do XMLSpy:

O elemento XML "SalePrice" destacado no diagrama é definido como uma instância do tipo "Amount", que, por sua vez, é um número decimal com um máximo de 2 dígitos fracionários, como se pode ver na janela "Facets" no canto inferior direito. Portanto, o metadado "node_fractionDigits" para o nó "SalePrice" é 2.

Os parâmetros da função de nó disponíveis para qualquer ficheiro de dados estruturados dependerão sempre do tipo de dados – XML, base de dados relacional, PDF, ficheiro CSV, etc. – e do nível de detalhe incluído na definição do esquema.

Mapeamento de dados estruturados com parâmetros de funções de nós

Ao criar uma nova função de nó, inicialmente será apresentada uma "valor bruto" e um "valor de resultado" que não estão relacionados. Clique no botão azul "Adicionar detalhes do nó" para inserir um parâmetro da função do nó. Isso abrirá a janela "Detalhes do nó", onde poderá selecionar um parâmetro do nó:

Note que existe uma opção para os casos em que um determinado nó não suporta o tipo de metadado selecionado. No mapeamento do cálculo de preços, este comportamento é tratado diretamente na definição da função do nó. A função do nó é aplicada apenas a tipos de dados numéricos, e para qualquer nó em que o parâmetro "fractionDigits" não esteja especificado, a função "substitute-missing" fornece o valor zero em vez.

Observar a execução da função do nó

Podemos definir um ponto de interrupção a partir do menu de contexto que aparece ao clicar com o botão direito em qualquer nó do componente de saída, e utilizar o depurador MapForce integrado para observar a execução da função.

Na visualização parcial abaixo, o ponto de interrupção foi definido na variável "SalePrice". Executámos o mapeamento a partir do menu de depuração e a execução foi interrompida no ponto de interrupção, com os valores intermédios adicionados à janela de mapeamento principal.

Podemos verificar que o último valor de "SalePrice" calculado pelo mapeamento foi 49,183323875. A função do nó arredondou o valor final para 49,18.

A execução real da função do nó não é exibida nos resultados de depuração na janela principal de mapeamento, mas clicar na janela de mensagens abre a função do nó, mostrando todos os valores intermédios:

Os exemplos instalados com o MapForce incluem várias outras mapeamentos de dados de funções de nós. O sistema de ajuda integrado do MapForce inclui até mesmo um tutorial passo a passo para criar um mapeamento de função de nó do zero.

Pode até mesmo modificar o exemplo de mapeamento descrito aqui para verificar por si mesmo como a saída se altera. Por exemplo, pode editar o esquema XML para permitir três dígitos fracionários, ou alterar o mapeamento para permitir que a função do nó seja executada no nó Numérico, que é o primeiro filho de "Article", e analisar o novo resultado.

Para ver as funções de nós em funcionamento, consulte este vídeo de demonstração do MapForce.