Cómo utilizar la secuencia de comandos para eliminaciones en cascada en tablas que tienen una relación principal-detalle en InfoPath

Seleccione idioma Seleccione idioma
Id. de artículo: 892952 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

INTRODUCCIÓN

En este artículo describe cómo utilizar secuencias de comandos de las eliminaciones en cascada en tablas que tienen una relación principal-detalle en Microsoft Office InfoPath. Puede utilizar este código para eliminar elementos de detalle que se han vinculado a un elemento principal mediante un campo de clave cuando se elimina el elemento principal.

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos. Para crear tablas que tienen una relación maestro y detalles que se eliminan elementos detallados relacionados cuando se elimina el elemento principal, siga estos pasos:
  1. Iniciar InfoPath y, a continuación, abrir un formulario nuevo en blanco. Para ello, siga estos pasos:

    para InfoPath 2007
    1. En el panel izquierdo del cuadro de diálogo Rellenar un formulario , haga clic en diseñar una plantilla de formulario .
    2. En el diseño de una ventana de la plantilla de formulario, haga clic en blanco y, a continuación, haga clic en Aceptar .
    para InfoPath 2003
    1. En el panel izquierdo del cuadro de diálogo Rellenar un formulario , haga clic en diseñar un formulario .
    2. En el panel derecho, haga clic en Nuevo formulario en blanco .
  2. Insertar dos tablas de repetición. Para ello, siga estos pasos:

    para InfoPath 2007
    1. En el menú Insertar , haga clic en Tabla extensible .
    2. Establecer el número de columnas en 2 y, a continuación, haga clic en Aceptar .
    3. Repita el paso una y el paso b para insertar otra tabla de repetición.
    para InfoPath 2003
    1. En el menú Insertar , haga clic en Más controles .
    2. En Insertar controles en el panel de tareas controles , haga clic en Tabla extensible .
    3. Establecer el número de columnas en 2 y, a continuación, haga clic en Aceptar .
    4. Repita el paso b y c para insertar otra tabla de repetición de paso.
  3. Crear dos tablas de repetición más y, a continuación, enlazar las dos nuevas tablas a los mismos datos como las tablas de repetición dos primeras. Para ello, siga estos pasos:
    1. En el menú Ver , haga clic en Origen de datos .
    2. En el panel de tareas Origen de datos , expanda grupo1 .
    3. Haga clic con el botón secundario del mouse en grupo2 y, a continuación, haga clic en Tabla extensible .
    4. En el panel de tareas Origen de datos , expanda nombre Grupo3 .
    5. Haga clic con el botón secundario del mouse en group4 y, a continuación, haga clic en Tabla extensible .
  4. Crear una relación principal-detalle entre las dos tablas que creó en el paso 3. Para ello, siga estos pasos:
    1. Haga clic con el botón secundario en la primera tabla y, a continuación, haga clic en Propiedades de tabla repetida .

      Nota Esta tabla es la tercera tabla desde la parte superior del formulario.
    2. En el cuadro de diálogo Propiedades de tabla extensible , haga clic en la ficha Maestro y detalles .
    3. En configuración maestro y detalles , haga clic en establecer como maestro .
    4. En el cuadro ID. maestro , escriba Master1 y, a continuación, haga clic en Aceptar .
    5. Haga clic con el botón secundario en la tabla siguiente y, a continuación, haga clic en Propiedades de tabla repetida .

      Nota Esta tabla es la cuarta tabla desde la parte superior del formulario.
    6. En el cuadro de diálogo Propiedades de tabla extensible , haga clic en la ficha Maestro y detalles .
    7. En configuración maestro y detalles , haga clic en establecer como detalles .
    8. En el cuadro Vincular a ID. maestro , seleccione Master1 .
    9. En vincular maestro y detalles , haga clic en por campo clave .
    10. Haga clic en el icono Seleccionar XPath a la derecha del cuadro campo clave (maestro) y, a continuación, haga clic en campo1 .
    11. Haga clic en el icono Seleccionar XPath a la derecha del cuadro campo clave (detalles) , haga clic en field3 y, a continuación, haga clic en Aceptar .
  5. Inserte código para forzar la eliminación en cascada en el evento OnAfterChange para el campo clave en la tabla de detalles. Para ello, siga estos pasos:

    para InfoPath 2007
    1. En el panel de tareas Origen de datos , haga clic con el botón secundario en campo1 en grupo2 , haga clic en programación y, a continuación, haga clic en evento de cambio posterior .
    2. Agregue el código siguiente a la ventana Edición de secuencia de comandos.

      Nota Reemplace los marcadores de posición campo y los marcadores de posición grupo con los nombres de los grupos y los campos que desee 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. En el menú archivo , haga clic en Guardar .
    4. En el menú archivo , haga clic en Salir .
    para InfoPath 2003
    1. En el panel de tareas Origen de datos , haga clic con el botón secundario en campo1 en grupo2 y a continuación, haga clic en Propiedades .
    2. En el cuadro de diálogo Propiedades del grupo o campo , haga clic en la ficha validación y controladores de eventos .
    3. En la lista eventos , haga clic en OnAfterChange y, a continuación, haga clic en Modificar .
    4. Agregue el código siguiente a la ventana Edición de secuencia de comandos.

      Nota Reemplace los marcadores de posición campo y los marcadores de posición grupo con los nombres de los grupos y los campos que desee 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. En el menú archivo , haga clic en Salir para cerrar la ventana de edición.
    6. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades del grupo o campo .

Vista previa del formulario para demostrar cómo el código works.To hacerlo, siga estos pasos:
  1. para InfoPath 2007

    En el menú archivo , elija vista previa y, a continuación, haga clic en formulario .

    para InfoPath 2003

    En el menú archivo , elija Vista previa del formulario y, a continuación, haga clic en predeterminada
  2. Inserte algunos valores de prueba en la primera tabla en el formulario. Esta tabla es el maestro de tabla. Para ello, siga estos pasos:
    1. En la primera columna de la primera fila, escriba Prueba1 .
    2. En la segunda columna de la primera fila, escriba Master1 .
    3. En la fila donde se acaba de escribir los datos, haga clic en Insertar elemento para agregar una nueva fila a la primera tabla.
    4. En la primera columna de la segunda fila, escriba Test2 .
    5. En la segunda columna de la segunda fila, escriba Master2 .
    6. Si desea agregar más filas, repita los pasos 2 c a 2e.
  3. Inserte algunos valores de prueba en la segunda tabla en el formulario. Esta tabla es la tabla de detalles. Para ello, siga estos pasos:
    1. En la primera columna de la primera fila, escriba Prueba1 .
    2. En la segunda columna de la primera fila, escriba Detail1 .
    3. En la fila donde se acaba de escribir los datos, haga clic en Insertar elemento para agregar una nueva fila a la segunda tabla.
    4. En la primera columna de la segunda fila, escriba Test2 .
    5. En la segunda columna de la segunda fila, escriba Detail2 .
    6. Si desea agregar más filas, repita los pasos 2 c a 2e.
  4. Probar las tablas de principal-detalle. Seleccione cada fila en la tercera tabla, una cada vez. En la cuarta tabla se muestran sólo las filas de la segunda tabla que tienen el mismo valor en la primera columna como la fila seleccionada de la tercera tabla.
  5. Eliminar una fila desde el maestro de tabla. Para ello, siga estos pasos:
    1. En la tercera tabla, seleccione la segunda fila donde la primera columna contiene "Test2".
    2. Haga clic en la flecha situada junto a la fila seleccionada y, a continuación, haga clic en Quitar grupo2 .

      Nota Las filas que tienen el mismo texto en la primera columna se eliminan automáticamente de la cuarta tabla por el código de ejemplo. Por ejemplo, "Test2" se elimina.

Propiedades

Id. de artículo: 892952 - Última revisión: martes, 30 de enero de 2007 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
  • Microsoft Office InfoPath 2007
Palabras clave: 
kbmt kbxml kbcodesnippet kbcode kbprogramming kbhowto KB892952 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 892952

Enviar comentarios

 

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