Como utilizar scripts para eliminações em cascata em tabelas que têm uma relação principal/detalhado no InfoPath

Traduções de Artigos Traduções de Artigos
Artigo: 892952 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

INTRODUÇÃO

Este artigo descreve como utilizar scripts para eliminações em cascata em tabelas que têm uma relação principal/detalhado no Microsoft Office InfoPath. Pode utilizar este código para eliminar itens de detalhe que estão ligados a um item principal utilizando um campo de chave quando eliminar o item principal.

Mais Informação

A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador. Para criar tabelas com uma relação principal/detalhado onde itens de detalhe relacionados são eliminados quando o item principal é eliminado, siga estes passos:
  1. Inicie o InfoPath e, em seguida, abra um novo formulário em branco. Para o fazer, siga estes passos:

    para o InfoPath 2007
    1. No painel esquerdo da caixa de diálogo Preencher um formulário , clique em estrutura de um modelo de formulário .
    2. Na estrutura uma janela modelo de formulário, clique em branco e, em seguida, clique em OK .
    para o InfoPath 2003
    1. No painel da esquerda da caixa de diálogo Preencher um formulário , clique em Estruturar um formulário .
    2. No painel direito, clique em Novo formulário em branco .
  2. Inserir duas tabelas de repetição. Para o fazer, siga estes passos:

    para o InfoPath 2007
    1. No menu Inserir , clique em Tabela de repetição .
    2. Definir o número de colunas para 2 e, em seguida, clique em OK .
    3. Repita o passo um e passo b para inserir outra tabela de repetição.
    para o InfoPath 2003
    1. No menu Inserir , faça clique sobre Mais controlos .
    2. Em Inserir controlos no painel de tarefas controlos , clique em Tabela de repetição .
    3. Definir o número de colunas para 2 e, em seguida, clique em OK .
    4. Repita o passo b e passo c para inserir outra tabela de repetição.
  3. Criar duas tabelas de repetição mais e, em seguida, ligue as duas tabelas novas aos mesmos dados como os primeiro duas tabelas de repetição. Para o fazer, siga estes passos:
    1. No menu Ver , clique em Origem de dados .
    2. No painel de tarefas Origem de dados , expanda grupo1 .
    3. Clique com o botão direito do rato grupo2 e, em seguida, clique em Tabela de repetição .
    4. No painel de tarefas Origem de dados , expanda Grupo3 .
    5. Clique com o botão direito do rato Grupo4 e, em seguida, clique em Tabela de repetição .
  4. Crie uma relação principal/detalhado entre as duas tabelas que criou no passo 3. Para o fazer, siga estes passos:
    1. Clique com o botão direito do rato da primeira tabela e, em seguida, clique em Propriedades da tabela de repetição .

      Nota Esta tabela é a terceira tabela da parte superior do formulário.
    2. Na caixa de diálogo Propriedades da tabela de repetição , clique no separador Mestre/detalhe .
    3. Em definições de principal/detalhado , clique em Definir como mestre .
    4. Na caixa ID principal , escreva Master1 e, em seguida, clique em OK .
    5. Clique com o botão direito do rato na tabela seguinte e, em seguida, clique em Propriedades da tabela de repetição .

      Nota Esta tabela é a tabela quarta parte superior do formulário.
    6. Na caixa de diálogo Propriedades da tabela de repetição , clique no separador Mestre/detalhe .
    7. Em definições de principal/detalhado , clique em Definir como detalhado .
    8. Na caixa ligar ao ID principal , seleccione Master1 .
    9. Em ligação principal e detalhado , clique em por campo chave .
    10. Clique no ícone Seleccionar XPath para a direita da caixa campo chave (principal) e, em seguida, clique em campo1 .
    11. Clique no ícone Seleccionar XPath à direita da caixa de campo chave (detalhado) , clique em campo3 e, em seguida, clique em OK .
  5. Inserir código forçar eliminações em cascata no evento OnAfterChange para o campo chave na tabela de detalhes. Para o fazer, siga estes passos:

    para o InfoPath 2007
    1. No painel de tarefas Origem de dados , clique com o botão direito do rato campo1 em grupo2 , clique em programação e clique Em depois de evento de alteração .
    2. Adicione o seguinte código à janela de edição de script.

      Nota Substitua os marcadores de posição campo e os marcadores de posição grupo pelos nomes dos grupos e os campos que pretende utilizar.
      function msoxd_my_field1::OnAfterChange(eventObj)
      {
       // Write code here to restore the global state.
       
       if (eventObj.IsUndoRedo)
       {
        // An undo operation or a redo operation has occurred, and the DOM is read-only.
        return;
       }
       
       //Delete corresponding details if a delete operation has occurred on source group2.
       if(eventObj.Operation == "Delete" && eventObj.Source.nodeName == "my:group2")
       {
        //Block the view update feature to improve performance.
        thisXDocument.View.DisableAutoUpdate();
        
        //Obtain the  value of the keyfield of that row that you want to delete (set as field1 in Designer).
        var nodeKeyFieldMaster = eventObj.Source.selectSingleNode("my:field1");
                
        //Set the selection on all nodes in Detail.
        var nodesDetail = XDocument.DOM.selectNodes("/my:myFields/my:group3/my:group4");
       
        //View each row in Detail, and then delete the row if the key field in the detail matches the key field in the master.
        for (i=0; i< nodesDetail.length; i++)
        {
         //Obtain the row.
         var row = nodesDetail.item(i);
         
         //Obtain the  value of the keyfield for the current row  (set as field3 in Designer).
         var nodeKeyFieldDetail = row.selectSingleNode("my:field3");
       
         //Delete the row if the keyfield in the detail matches the keyfield of the deleted row in the master.
         if(nodeKeyFieldDetail.text == nodeKeyFieldMaster.text)
         {
          row.parentNode.removeChild(row); 
         }
      
        //Re-enable the view update.
        thisXDocument.View.EnableAutoUpdate();
      
        }
       } 
      }
      
    3. No menu ficheiro , clique em Guardar .
    4. No menu ficheiro , clique em Sair .
    para o InfoPath 2003
    1. No painel de tarefas Origem de dados , clique com o botão direito do rato campo1 em grupo2 e, em seguida, clique em Propriedades .
    2. Na caixa de diálogo Propriedades de grupo ou campo , clique no separador validação e processadores de eventos .
    3. Na lista eventos , clique em OnAfterChange e, em seguida, clique em Editar .
    4. Adicione o seguinte código à janela de edição de script.

      Nota Substitua os marcadores de posição campo e os marcadores de posição grupo pelos nomes dos grupos e os campos que pretende utilizar.
      function msoxd_my_field1::OnAfterChange(eventObj)
      {
       // Write code here to restore the global state.
       
       if (eventObj.IsUndoRedo)
       {
        // An undo operation or a redo operation has occurred, and the DOM is read-only.
        return;
       }
       
       //Delete corresponding details if a delete operation has occurred on source group2.
       if(eventObj.Operation == "Delete" && eventObj.Source.nodeName == "my:group2")
       {
        //Block the view update feature to improve performance.
        thisXDocument.View.DisableAutoUpdate();
        
        //Obtain the  value of the keyfield of that row that you want to delete (set as field1 in Designer).
        var nodeKeyFieldMaster = eventObj.Source.selectSingleNode("my:field1");
                
        //Set the selection on all nodes in Detail.
        var nodesDetail = XDocument.DOM.selectNodes("/my:myFields/my:group3/my:group4");
       
        //View each row in Detail, and then delete the row if the key field in the detail matches the key field in the master.
        for (i=0; i< nodesDetail.length; i++)
        {
         //Obtain the row.
         var row = nodesDetail.item(i);
         
         //Obtain the  value of the keyfield for the current row  (set as field3 in Designer).
         var nodeKeyFieldDetail = row.selectSingleNode("my:field3");
       
         //Delete the row if the keyfield in the detail matches the keyfield of the deleted row in the master.
         if(nodeKeyFieldDetail.text == nodeKeyFieldMaster.text)
         {
          row.parentNode.removeChild(row); 
         }
      
        //Re-enable the view update.
        thisXDocument.View.EnableAutoUpdate();
      
        }
       } 
      }
      
    5. No menu ficheiro , clique em Sair para fechar a janela de edição.
    6. Clique em OK para fechar a caixa de diálogo Propriedades de grupo ou campo .

Pré-visualize formulário para demonstrar como works.To código fazê-lo, siga estes passos:
  1. para o InfoPath 2007

    No menu ficheiro , aponte para pré-visualização e, em seguida, clique em formulários .

    para o InfoPath 2003

    No menu ficheiro , aponte para Pré-visualizar formulário e, em seguida, clique em predefinição
  2. Inserir alguns valores de teste da primeira tabela no formulário. Esta tabela é o mestre de tabela. Para o fazer, siga estes passos:
    1. Na primeira coluna da primeira linha, escreva Teste1 .
    2. Na segunda coluna da primeira linha, escreva Master1 .
    3. Em linha em que acabou de escrever os dados, clique em Inserir item para adicionar uma nova linha da primeira tabela.
    4. Na primeira coluna da segunda linha, escreva Teste2 .
    5. Na segunda coluna da segunda linha, escreva Master2 .
    6. Se pretender adicionar mais linhas, repita os passos 2 c a 2e.
  3. Inserir alguns valores de teste da segunda tabela no formulário. Esta tabela é a tabela Detalhes da. Para o fazer, siga estes passos:
    1. Na primeira coluna da primeira linha, escreva Teste1 .
    2. Na segunda coluna da primeira linha, escreva Detail1 .
    3. Em linha em que acabou de escrever os dados, clique em Inserir item para adicionar uma nova linha para a segunda tabela.
    4. Na primeira coluna da segunda linha, escreva Teste2 .
    5. Na segunda coluna da segunda linha, escreva Detail2 .
    6. Se pretender adicionar mais linhas, repita os passos 2 c a 2e.
  4. Verificar as tabelas principal/detalhado. Seleccione cada linha na terceira tabela, um de cada vez. A quarta tabela mostra apenas as linhas da segunda tabela que têm o mesmo valor na primeira coluna como a linha seleccionada na terceira tabela.
  5. Elimine uma linha a réplica da estrutura global tabela. Para o fazer, siga estes passos:
    1. Na terceira tabela, seleccione a segunda linha em que a primeira coluna contém "Teste2".
    2. Clique na seta junto da linha seleccionada e, em seguida, clique em Remover grupo2 .

      Nota As linhas que têm o mesmo texto na primeira coluna são eliminadas automaticamente da tabela quarta pelo código de exemplo. Por exemplo, "Teste2" é eliminada.

Propriedades

Artigo: 892952 - Última revisão: 30 de janeiro de 2007 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
  • Microsoft Office InfoPath 2007
Palavras-chave: 
kbmt kbxml kbcodesnippet kbcode kbprogramming kbhowto KB892952 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 892952

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com