Resumo
Diferentes Estratégias para Diferentes Ambientes
- As seguintes ações compartilham a mesma estratégia na manipulação de repetição: Mapear
a partir da Origem, Criar Novo Submapa, Chamar Submapa, Chamar Rotina ESQL.
- A ação Acumular manipula repetições de sua própria maneira.
- A ação Digitar Expressão é independente de capacidade de repetição.
Manipular Repetição para o Mapeamento Um para Um nas Ações Mapear
a partir da Origem, Criar Novo Submapa, Chamar Submapa, Chamar Rotina ESQL
- Ao determinar a repetição, um elemento (ou atributo), juntamente com um
ou mais elementos xsd sequence/choice/all/group que o contêm (ou um contêiner
sequence/choice/all/group), formam um nível.
- A criação de um mapeamento consiste em um processo de três etapas: expandir, configurar a expressão MapFrom e incluir ForEach/If/Condition. O que se segue é o algoritmo detalhado para a
última etapa: inserir ForEach e outros.
- Iniciando a partir da origem e do destino do mapeamento selecionado, avance de dentro para
fora, corresponda um nível de origem de repetição com um nível de destino de repetição.
- Para cada nível de repetição correspondido na origem e no destino:
- Se esse nível de destino não tiver nenhum elemento de repetição sequence/choice/all/group,
crie um ForEachStatement que contenha o nível de estrutura de destino.
- A expressão do ForEach é a referência mapeável para o nível
de origem de repetição.
- Se esse nível de destino estiver contido em um sequence/choice/all/group de repetição,
crie um ForEachStatement que contenha todas as estruturas no sequence/choice/all/group.
- A expressão do ForEach é a referência mapeável para o nível
de origem de repetição.
- Se já houver um ForEach com uma expressão esperada contendo os
membros sequence/choice/all/group esperados, não crie um outro.
- Se já houver um ForEach com uma expressão diferente, mas contiver
os membros sequence/choice/all/group esperados, crie o ForEach requerido
como um filho do ForEach existente. O ForEach interno contém um bloco If-Condition
que possui todo o conteúdo do elemento sequence/choice/all/group.
- A expressão para a Condition acima é que a ocorrência da expressão
no ForEach externo iguale à ocorrência da expressão no
ForEach interno.
- Ignore níveis não correspondidos de repetição no destino.
- Para cada nível não correspondido de repetição na origem:
- Crie um ForEachStatement que contenha um IfStatement, que contenha
um ConditionStatement, que contenha o nível de estrutura de destino.
- A expressão do ForEach é a referência mapeável para o nível
de origem de repetição.
- Se já houver um ForEach para o nível de origem de repetição, não
crie um outro.
- A expressão para a Condition é occurrence(this_level_of_repeating_source)=1.
- Se já houver uma Condition para a primeira ocorrência do nível de origem
de repetição, não crie uma outra Condition.
- Se já houver um Qualify mas nenhuma condição esperada, crie uma outra
Condition no Qualify.
- Instruções de destino do banco de dados relacional devem ser colocadas nos elementos ForEach.
- Quando uma origem única envolve os níveis de repetição aninhados, o ForEach para
é aninhado para cada nível.
- O conjunto de resultados de seleção de origem do banco de dados relacional é conceitualmente uma repetição.
Entretanto, um mapeamento de uma origem do banco de dados pode requerer a expansão
do escopo da instrução select. Para simplificar as coisas, a ferramenta não insere
nenhum ForEach como resultado do mapeamento da origem do banco de dados.
- Ao inserir um SelectStatement no modelo de instrução, as ferramentas
de mapeamento sempre criam um Select contendo um ForEach para efetuar
loop através do conjunto de resultados.
Manipular Repetição para Mapeamento de Um para Muitos na Ação Mapear a partir da Origem
- Utilize a estratégia de um para um diversas vezes, uma para cada destino.
- Não tente nenhuma otimização entre os diversos mapeamentos.
Manipular Repetição para o Mapeamento Muitos para Um nas Ações Mapear
a partir da Origem, Criar Novo Submapa, Chamar Submapa, Chamar Rotina ESQL
- Aplique a estratégia de um para um entre a origem e o destino individuais.
- Para cada nível de repetição de origem, aninhe os elementos ForEach chamados
de cada origem. Qualifique por instância para que os elementos ForEach aninhados
apenas coletem instância no mesmo índice.