Ao trabalhar com JavaScript nos formulários, é importante declarar objetos e variáveis dentro do escopo pretendido. A declaração global desnecessária de objetos ou variáveis pode causar problemas de desempenho. O escopo restrito foi introduzido no Designer 8.1 para aprimorar o tempo de execução e a utilização de memória de um formulário.
Qual é o escopo no JavaScript?
O escopo funciona exteriormente, permitindo que tudo que estiver entre chaves ({}) possa ver o que está fora delas. No entanto, o que está fora das chaves não pode acessar o que estiver dentro delas.
No exemplo a seguir, a primeira chave abre o escopo da função e a segunda o fecha. Tudo o que estiver entre chaves está dentro do escopo de foo ().
O escopo do exemplo a seguir é válido porque var nFooVar = nOutsideVar dentro das chaves pode ver var nOutsideVar = 2 fora das chaves.
Por outro lado, o exemplo a seguir mostra um escopo inválido, pois var nOutsideVar = nFooVar não pode acessar var nFooVar =4 dentro das chaves.
No script, o escopo descreve fragmentos de script que podem acessar fragmentos. Esses fragmentos de script podem ser variáveis ou funções.
Qual é o escopo de XML?
Em um design de formulário, o escopo se refere à hierarquia. Por exemplo, para acessar o subformulário dentro da seguinte fonte XML, você deve digitar outside.inside.
<subform name="outside">
<subform name="inside">
…
</subform>
</subform>
Você não digita inside.outside, pois primeiro deve acessar o subformulário externo e depois detalhar de fora para dentro.
Expressões SOM e escopo
Em formulários direcionados para o Acrobat ou Adobe Reader 8.1, as expressões SOM têm seu escopo definido corretamente, conforme demonstra este exemplo:
<subform name="a">
<subform name="b"/>
Em formulários direcionados para o Acrobat ou Adobe Reader 8.0, a expressão SOM a.b.a retorna o subformulário a. Em formulários direcionados para o Acrobat ou Adobe Reader 8.1, a expressão SOM a.b.a retorna null, pois o subformulário b não tem um filho com o nome a. No Acrobat ou Adobe Reader 9.0 ou posterior, a expressão retorna um erro, pois a não é um filho válido de b.
No Acrobat ou Adobe Reader 8.1, as funções e variáveis dentro do script de um nó não se tornam globais (exceto por objetos de script), como mostra este exemplo:
<field name="field1">
event activity="initialize">
<script contentType="application/x-javascript">
// Function bar() is scoped to field1.initialize; nothing outside <event activity="initialize"> scope can see inside here (in 8.1)
function bar()
{
return "bar";
}
</script>
</event>
/field>
field name="field2">
<event activity="click">
<script contentType="application/x-javascript">
field1.bar();
</script>
</event>
</field>
Ao clicar em field 2 em um formulário direcionado ao Acrobat ou Adobe Reader 8.0, a função bar() será executada.
Ao clicar em field 2 em um formulário direcionado ao Adobe ou Adobe Reader 8.1, a função bar() não será executada. Isso porque a função bar() está disponível somente dentro do script inicializado de field1.
Escopo e objetos de script
Os objetos de script têm um escopo global; portanto, todos os usuários podem acessá-los em qualquer lugar. Se há um método que você deseja que seja acessado por field1.initialize e field2.click, coloque-o em um objeto de script. O escopo restrito significa que você não pode chamar bar() de qualquer lugar de um formulário. Você também recebe um erro de tempo de execução, indicando que a função bar() não pôde ser resolvida. O mecanismo de script procurou bar() dentro do escopo ao qual você tem acesso e não a encontrou.
Escopo e versão de destino
Se você usa o escopo restrito, lembre-se de pode obter um melhor desempenho em formulários direcionados ao Acrobat ou Adobe Reader 8.1 e posterior. Evite usar o escopo restrito em formulários direcionados às versões mais antigas do Acrobat ou Adobe Reader. Caso contrário, os scripts dos formulários podem funcionar de maneira diferente. Para os formulários existentes, faça o backup antes de ativar o escopo restrito e sempre verifique o script depois. Quando você ativa o escopo restrito e depois altera a versão de destino para uma anterior ao Acrobat ou Adobe Reader 8.1, mensagens de aviso são exibidas.
Quando usar o escopo
Quando um formulário é direcionado ao Acrobat ou Adobe Reader 8.1 e o escopo restrito está ativo, as variáveis JavaScript declaradas são liberadas depois que cada script é executado. Quando um formulário é direcionado ao Acrobat ou Adobe Reader 9.0 e posterior, o escopo restrito não libera todas as variáveis JavaScript. A exceção é quando você reúne ou importa novos dados.
As melhorias de desempenho com as regras de escopo restrito se aplicam aos formulários direcionados ao Acrobat ou Adobe Reader 8.1 e posterior. Não aplique regras de escopo rígido para formulários direcionados para versões do Acrobat ou Adobe Reader anteriores à versão 8. Caso contrário, os scripts podem se comportar de forma diferente ou não funcionam.
Para ativar o escopo restrito
Selecione Arquivo > Propriedades do Formulário e clique na guia Padrão.
Selecione Reforçar regras de escopo restritas em JavaScript e clique em OK.