Uso de instance manager para controlar subformularios en tiempo de ejecución

En este ejemplo se muestra cómo usar las propiedades y métodos de instance manager para recuperar información sobre subformularios y llevar a cabo operaciones en objetos de subformulario en tiempo de ejecución.

En este ejemplo, la persona que rellena el formulario utiliza los botones para realizar diversas acciones con instancias de Subform3. Por ejemplo, cuando la persona que rellena el formulario hace clic en el botón Agregar fila abajo, se agrega una nueva instancia de Subform3 debajo de la instancia actual.

Nota: es posible que necesite agregar o quitar subformulario, o realizar cambios en los datos de los campos de texto para ver cómo se aplican a las instancias de Subform3.
Nota: Si en el formulario no existen instancias de un determinado subformulario, debe utilizar la notación de subrayado (_) proporcionada con cada ejemplo siguiente. Para obtener más información sobre la notación con el signo de subrayado (_), consulte la Ayuda de Designer.

Secuencia de comandos para el botón Agregar nuevo subformulario

La siguiente secuencia de comandos determina el existe en el formulario el número máximo admitido de instancias de Subform3. Si existe el número máximo, la secuencia de comandos muestra un mensaje. En caso contrario, se agrega una instancia de Subform3 nueva al formulario.

    if (advanced.Subform3.instanceManager.count == 
        advanced.Subform3.instanceManager.max) { 
        xfa.host.messageBox("You have reached the maximum number of items 
        allowed.","Combining Instance Manager Concepts", 1); 
    } 
    else { 
        advanced.Subform3.instanceManager.addInstance(1); 
        xfa.form.recalculate(1); 
    }

También puede escribir esta secuencia de comandos con notación de subrayado (_) para hacer referencia a las propiedades y los métodos de instance manager, tal como se indica a continuación:

    if (advanced._Subform3.count == advanced._Subform3.max) { 
        xfa.host.messageBox("You have reached the maximum number of items 
        allowed.", "Combining Instance Manager Concepts", 1); 
    } 
    else { 
        advanced._Subform3.addInstance(1); 
        xfa.form.recalculate(1); 
    }

Secuencia de comandos para el botón Quitar subformulario

La siguiente secuencia de comandos determina si existe alguna instancia de Subform3 en el formulario. Si no existe ninguna, la secuencia de comandos muestra un mensaje indicándolo. Si existe alguna, la secuencia de comandos quita la primera instancia del formulario.

    if (advanced.Subform3.instanceManager.count == 0) { 
        xfa.host.messageBox("There are no subform instances to remove.",  
        "Combining Instance Manager Concepts", 1);     
    } 
    else { 
        advanced.Subform3.instanceManager.removeInstance(0); 
    }

También puede escribir esta secuencia de comandos con notación de subrayado (_) para hacer referencia a las propiedades y los métodos de instance manager, tal como se indica a continuación:

    if (advanced._Subform3.count == 0) { 
        xfa.host.messageBox("There are no subform instances to remove.", 
        "Combining Instance Manager Concepts", 1);     
    } 
    else { 
        advanced._Subform3.removeInstance(0); 
    }

Secuencia de comandos para el botón Agregar instancia debajo

La siguiente sentencia if-else impide que la secuencia de comandos se ejecute si el formulario contiene el número máximo de instancias de Subform3:

    if (Subform3.instanceManager.count < Subform3.instanceManager.occur.max) { 
//oNewInstance stores an instance of Subform3 created by the addInstance() method. 
    var oNewInstance = Subform3.instanceManager.addInstance(1); 
//nIndexFrom and nIndexTo store the before and after index values to use with the moveInstance() method.  
    var nIndexFrom = oNewInstance.index; 
    var nIndexTo = Subform3.index + 1;

En este caso, cuando la secuencia de comandos hace referencia al valor para nIndexFrom, se agrega la nueva instancia de Subform3 al formulario en la posición especificada por el método moveInstance:

        Subform3.instanceManager.moveInstance(nIndexFrom, nIndexTo); 
    } 
    else { 
        xfa.host.messageBox("You have reached the maximum number of items 
        allowed.", "Combining Instance Manager Concepts", 1); 
    }

También puede escribir esta secuencia de comandos con notación de subrayado (_) para hacer referencia a las propiedades y los métodos de instance manager, tal como se indica a continuación:

    if (_Subform3.count < _Subform3.occur.max) { 
    var oNewInstance = _Subform3.addInstance(1); 
    var nIndexFrom = oNewInstance.index; 
    var nIndexTo = Subform3.index + 1; 
    _Subform3.moveInstance(nIndexFrom, nIndexTo); 
    } 
    else { 
    xfa.host.messageBox("You have reached the maximum number of items allowed.",         "Combining Instance Manager Concepts", 1); 
    }

Secuencia de comandos del botón Eliminar esta instancia

La siguiente sentencia if-else impide que la secuencia de comandos se ejecute si el formulario contiene el número mínimo de instancias de Subform3.

    if (Subform3.instanceManager.count > Subform3.instanceManager.occur.min) {

La secuencia de comandos utiliza el método removeInstance para quitar una instancia de Subform3.

Nota: esta secuencia de comandos utiliza el valor parent.parent.index para indicar la instancia de Subform3 que se va a quitar. La referencia parent indica el contenedor del objeto que utiliza la referencia. En este caso, el uso de la referencia parent.index podría indicar el subformulario sin nombre que contiene los botones Agregar instancia debajo, Eliminar esta instancia, Subir fila y Bajar fila.
        Subform3.instanceManager.removeInstance(parent.parent.index); 
    } 
    else { 
        xfa.host.messageBox("You have reached the minimum number of items 
        allowed.", "Combining Instance Manager Concepts", 1); 
    }

También puede escribir esta secuencia de comandos con notación de subrayado (_) para hacer referencia a las propiedades y los métodos de instance manager, tal como se indica a continuación:

    if (_Subform3.count > _Subform3.occur.min) { 
    Subform3.removeInstance(Subform3.index); 
    } 
    else { 
    xfa.host.messageBox("You have reached the minimum number of items allowed.",  
    "Combining Instance Manager Concepts", 1); 
    }

Secuencia de comandos para el botón Subir fila

La siguiente sentencia if-else impide que la secuencia de comandos se ejecute si la instancia de Subform3 aparece como primera instancia de la lista:

    if (Subform3.index != 0) { 
//nIndexFrom and nIndexTo store the before and after index values to use with the moveInstance method.  
        var nIndexFrom = Subform3.index; 
        var nIndexTo = Subform3.index - 1; 
        Subform3.instanceManager.moveInstance(nIndexFrom, nIndexTo); 
    } 
    else { 
        xfa.host.messageBox("The current item cannot be moved because it is the  
        first instance in the list.", "Combining Instance Manager Concepts", 1); 
    }

También puede escribir esta secuencia de comandos con notación de subrayado (_) para hacer referencia a las propiedades y los métodos de instance manager, tal como se indica a continuación:

    if (Subform3.index != 0) { 
        var nIndexFrom = Subform3.index; 
    var nIndexTo = Subform3.index - 1; 
    Subform3.moveInstance(nIndexFrom, nIndexTo); 
    } 
    else { 
    xfa.host.messageBox("The current item can't be moved since it already is the     first instance in the list.", "Combining Instance Manager Concepts", 1); 
    }

Secuencia de comandos para el botón Bajar fila

Esta variable almacena el valor de índice de la instancia de Subform3:

    var nIndex = Subform3.index;

La siguiente sentencia if-else impide que la secuencia de comandos se ejecute si la instancia de Subform3 aparece como última instancia de la lista:

    if ((nIndex + 1) < Subform3.instanceManager.count) { 
    // nIndexFrom and nIndexTo store the before and after index values to use with the moveInstance() method.  
        var nIndexFrom = nIndex; 
        var nIndexTo = nIndex + 1; 
     
        Subform3.instanceManager.moveInstance(nIndexFrom, nIndexTo); 
        } 
        else { 
        xfa.host.messageBox("The current item cannot be moved because it is the last 
        instance in the list.", "Combining Instance Manager Concepts", 1); 
        }

También puede escribir esta secuencia de comandos con notación de subrayado (_) para hacer referencia a las propiedades y los métodos de instance manager, tal como se indica a continuación:

    var nIndex = Subform3.index; 
    if ((nIndex + 1) < Subform3.instanceManager.count) { 
    var nIndexFrom = nIndex; 
    var nIndexTo = nIndex + 1; 
    _Subform3.moveInstance(nIndexFrom, nIndexTo); 
    } 
    else { 
    xfa.host.messageBox("The current item can't be moved since it already is the 
    last instance in the list.", "Combining Instance Manager Concepts", 1); 
    }