Como usar o Gerenciador de instâncias para controlar os subformulários em tempo de execução

Este exemplo demonstra como usar as propriedades e os métodos do Gerenciador de instâncias para recuperar informações sobre subformulários e executar operações em objetos de subformulário em tempo de execução.

Nesse exemplo, o usuário usa os botões para executar diversas ações usando instâncias do Subform3. Por exemplo, quando o usuário clica no botão Adicionar linha abaixo, uma nova instância do Subform3 é adicionada abaixo da instância atual.

Nota: Talvez seja necessário adicionar ou remover subformulários ou fazer alterações de dados no campo de texto para visualizar as alterações aplicadas às instâncias do Subform3.
Nota: Se nenhuma instância de um determinado subformulário existir no seu formulário, você deverá usar a notação sublinhado (_) fornecida com cada exemplo a seguir. Para obter mais informações sobre como usar a notação sublinhado (_), consulte a Ajuda do Designer.

Script do botão Adicionar novo subformulário

O script a seguir determina se o número máximo suportado de instâncias do Subform3 consta no formulário. Se houver, o script exibirá uma mensagem. Caso contrário, uma nova instância do Subform3 será adicionada ao formulário.

    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); 
    }

Você também pode gravar esse script usando o underscore (_) para fazer referência às propriedades e aos métodos do Gerenciador de instâncias, da seguinte maneira:

    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); 
    }

Script do botão Remover subformulário

O script a seguir determina se existe alguma instância do Subform3 no formulário. Se não existir, o script exibirá uma mensagem indicando que não há instâncias. Se existir, o script removerá a primeira instância do formulário.

    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); 
    }

Você também pode gravar esse script usando o underscore (_) para fazer referência às propriedades e aos métodos do Gerenciador de instâncias, da seguinte maneira:

    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); 
    }

Script do botão Adicionar instância abaixo

A declaração if-else a seguir evitará que o script continue seu processo se o formulário tiver o número máximo de instâncias do 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;

Nesse caso, quando o script fizer referência ao valor nIndexFrom, a nova instância do Subform3 será adicionada ao formulário na posição especificada no 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); 
    }

Você também pode gravar esse script usando o underscore (_) para fazer referência às propriedades e aos métodos do Gerenciador de instâncias, da seguinte maneira:

    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); 
    }

Script do botão Excluir esta instância

A declaração if-else a seguir evitará que o script continue seu processo se o formulário tiver o número mínimo de instâncias do Subform3.

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

Esse script usa o método removeInstance para remover uma instância do Subform3.

Nota: Esse script usa o valor parent.parent.index para indicar a instância do Subform3 a ser removida. A referência parent indica o contêiner do objeto usando a referência. Nesse caso, o uso da referência parent.index indica o subformulário sem nome que contém os botões Adicionar instância abaixo, Excluir esta instância, Mover linha para cima e Mover linha para baixo.
        Subform3.instanceManager.removeInstance(parent.parent.index); 
    } 
    else { 
        xfa.host.messageBox("You have reached the minimum number of items 
        allowed.", "Combining Instance Manager Concepts", 1); 
    }

Você também pode gravar esse script usando o underscore (_) para fazer referência às propriedades e aos métodos do Gerenciador de instâncias, da seguinte maneira:

    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); 
    }

Script do botão Mover linha para cima

A declaração if-else a seguir evitará que o script continue seu processo se a instância do Subform3 aparecer como a primeira instância na 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); 
    }

Você também pode gravar esse script usando o underscore (_) para fazer referência às propriedades e aos métodos do Gerenciador de instâncias, da seguinte maneira:

    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); 
    }

Script do botão Mover linha para baixo

Essa variável armazena o valor de índice da instância do Subform3:

    var nIndex = Subform3.index;

A declaração if-else a seguir evitará que o script continue seu processo se a instância do Subform3 aparecer como a última instância na 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); 
        }

Você também pode gravar esse script usando o underscore (_) para fazer referência às propriedades e aos métodos do Gerenciador de instâncias, da seguinte maneira:

    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); 
    }