Comment utiliser script pour les suppressions en cascade dans des tables relation maître/détail sont dans InfoPath

Traductions disponibles Traductions disponibles
Numéro d'article: 892952 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

INTRODUCTION

Cet article explique comment utiliser un script pour les suppressions en cascade dans tables qui ont une relation maître/détail dans Microsoft Office InfoPath. Vous pouvez utiliser ce code pour supprimer des détails des éléments liés à un article principal en utilisant un champ clé lorsque vous supprimez l'élément principal.

Plus d'informations

Microsoft fournit des exemples de programmation pour illustration uniquement, sans garantie explicite ou implicite. Cela inclut, mais n'est pas limité aux garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils qui sont utilisés pour créer et déboguer des procédures. Les techniciens du support technique Microsoft peuvent vous expliquer les fonctionnalités d'une procédure particulière, mais ils ne sont pas modifier les exemples en vue de fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques. Pour créer des tables qui ont une relation maître/détail dans laquelle les éléments de détail associés sont supprimés lorsque l'élément principal est supprimé, procédez comme suit :
  1. Démarrez InfoPath et ouvrez un nouveau formulaire vierge. Pour ce faire, procédez comme suit :

    pour InfoPath 2007
    1. Dans le volet gauche de la boîte de dialogue Remplir un formulaire , cliquez sur Créer un modèle de formulaire .
    2. Dans le champ Créer une fenêtre de modèle de formulaire, cliquez sur vide et puis cliquez sur OK .
    pour InfoPath 2003
    1. Dans le volet gauche de la boîte de dialogue Remplir un formulaire , cliquez sur Créer un formulaire .
    2. Dans le volet droit, cliquez sur Nouveau formulaire vierge .
  2. Insérez deux tableaux extensibles. Pour ce faire, procédez comme suit :

    pour InfoPath 2007
    1. Dans le menu Insertion , cliquez sur tableau extensible .
    2. Définissez le nombre de colonnes à 2 , puis cliquez sur OK .
    3. Répétez étape un et l'étape b pour insérer un autre tableau extensible.
    pour InfoPath 2003
    1. Dans le menu Insertion , cliquez sur Autres contrôles .
    2. Sous Insérer des contrôles dans le volet Office Contrôles , cliquez sur tableau extensible .
    3. Définissez le nombre de colonnes à 2 , puis cliquez sur OK .
    4. Répétez l'étape b et étape c pour insérer un autre tableau extensible.
  3. Créer deux tableaux extensibles plusieurs, puis puis lier les deux nouvelles tables aux mêmes données en tant que les deux premières tables extensibles. Pour ce faire, procédez comme suit :
    1. Dans le menu Affichage , cliquez sur la source de données .
    2. Dans le volet Office de source de données , développez « groupe1 » .
    3. Cliquez avec le bouton droit sur groupe2 en , puis cliquez sur tableau extensible .
    4. Dans le volet Office de source de données , développez groupe3 par .
    5. Cliquez avec le bouton droit sur group4 , puis cliquez sur tableau extensible .
  4. Créer une relation maître/détail entre les deux tables que vous avez créé à l'étape 3. Pour ce faire, procédez comme suit :
    1. Cliquez avec le bouton droit sur la première table, puis cliquez sur Propriétés du tableau extensible .

      note Cette table est la troisième table à partir du haut de l'écran.
    2. Dans la boîte de dialogue Propriétés du tableau extensible , cliquez sur l'onglet maître/détail .
    3. Sous paramètres maître/détail , cliquez sur Définir comme maître .
    4. Dans la zone code principal , tapez Master1 et puis cliquez sur OK .
    5. Cliquez avec le bouton droit sur le tableau suivant, puis cliquez sur Propriétés du tableau extensible .

      note Cette table est la table quatrième à partir du haut de l'écran.
    6. Dans la boîte de dialogue Propriétés du tableau extensible , cliquez sur l'onglet maître/détail .
    7. Sous paramètres maître/détail , cliquez sur Définir comme détail .
    8. Dans la zone Lier à l'ID maître , sélectionnez Master1 .
    9. Sous Lier maître et détail , cliquez sur Par champ clé .
    10. Cliquez sur l'icône de Sélectionner une expression XPath à droite de la zone de champ clé (maître) , puis cliquez sur champ1 .
    11. Cliquez sur l'icône de Sélectionner une expression XPath à droite de la zone de champ clé (détail) , cliquez sur field3 et puis cliquez sur OK .
  5. Insérez le code pour forcer les suppressions en cascade dans l'événement OnAfterChange pour le champ clé dans la table Détails. Pour ce faire, procédez comme suit :

    pour InfoPath 2007
    1. Dans le volet Office source de données , cliquez avec le bouton droit sur champ1 dans groupe2 en , cliquez sur programmation et puis cliquez événement sur après modification .
    2. Ajoutez le code suivant dans la fenêtre Édition de script.

      note Remplacez les les espaces réservés champ et d'espaces réservés de groupe par les noms de groupes et les champs que vous souhaitez utiliser.
      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. Dans le menu Fichier , cliquez sur Enregistrer .
    4. Dans le menu Fichier , cliquez sur Quitter .
    pour InfoPath 2003
    1. Dans le volet Office source de données , cliquez avec le bouton droit sur champ1 dans groupe2 en , puis cliquez sur Propriétés .
    2. Dans la boîte de dialogue Propriétés du champ ou du groupe , cliquez sur l'onglet Validation et les gestionnaires d'événements .
    3. Dans la liste événements , cliquez sur OnAfterChange , puis cliquez sur Modifier .
    4. Ajoutez le code suivant dans la fenêtre Édition de script.

      note Remplacez les les espaces réservés champ et d'espaces réservés de groupe par les noms de groupes et les champs que vous souhaitez utiliser.
      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. Dans le menu Fichier , cliquez sur Quitter pour fermer la fenêtre d'édition.
    6. Cliquez sur OK pour fermer la boîte de dialogue Propriétés du champ ou du groupe .

Affichez un aperçu le formulaire pour montrer comment la works.To code cela, procédez comme suit :
  1. pour InfoPath 2007

    Dans le menu Fichier , pointez sur Afficher , puis cliquez sur formulaire .

    pour InfoPath 2003

    Dans le menu Fichier , pointez sur Aperçu du formulaire , puis cliquez sur par défaut
  2. Insérer des valeurs de test dans la première table de l'écran. Cette table est le maître table. Pour ce faire, procédez comme suit :
    1. Dans la première colonne de la première ligne, tapez Test1 .
    2. Dans la deuxième colonne de la première ligne, tapez Master1 .
    3. Sous la ligne où vous venez de taper les données, cliquez sur Insérer un élément pour ajouter une nouvelle ligne dans le premier tableau.
    4. Dans la première colonne de la deuxième ligne, tapez Test2 .
    5. Dans la deuxième colonne de la deuxième ligne, tapez Master2 .
    6. Si vous souhaitez ajouter plusieurs lignes, répétez les étapes 2c à 2e.
  3. Insérer des valeurs de test dans la table seconde sur le formulaire. Cette table est la table Détails. Pour ce faire, procédez comme suit :
    1. Dans la première colonne de la première ligne, tapez Test1 .
    2. Dans la deuxième colonne de la première ligne, tapez Detail1 .
    3. Sous la ligne où vous venez de taper les données, cliquez sur Insérer un élément pour ajouter une nouvelle ligne à la seconde table.
    4. Dans la première colonne de la deuxième ligne, tapez Test2 .
    5. Dans la deuxième colonne de la deuxième ligne, tapez Detail2 .
    6. Si vous souhaitez ajouter plusieurs lignes, répétez les étapes 2c à 2e.
  4. Tester les tables maître/détail. Sélectionnez chaque ligne dans la table troisième, à la fois. Le tableau quatrième indique uniquement les lignes de la seconde table qui ont la même valeur dans la première colonne dans la ligne sélectionnée dans la troisième table.
  5. Supprimer une ligne dans le réplica-maître table. Pour ce faire, procédez comme suit :
    1. Dans la troisième table, sélectionnez la deuxième ligne où la première colonne contient « Test2 ».
    2. Cliquez sur la flèche en regard de la ligne sélectionnée, puis cliquez sur Supprimer groupe2 en .

      note Les lignes qui ont le même texte dans la première colonne sont automatiquement supprimées de la table quatrième par le code exemple. Par exemple, « Test2 » est supprimé.

Propriétés

Numéro d'article: 892952 - Dernière mise à jour: mardi 30 janvier 2007 - Version: 2.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
  • Microsoft Office InfoPath 2007
Mots-clés : 
kbmt kbxml kbcodesnippet kbcode kbprogramming kbhowto KB892952 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 892952
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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