Criação e edição da tree de formulários XFA
TXFAWidgetRuntime suporta criação, clonagem e edição transacionais em JavaScript da tree viva de formulários através de xfa.form e coleções de nós
A tree viva de formulários tem identidades nativas independentes e pode ser salva como um packet de formulário XDP sem modificar o template autorado
Criando e inserindo um campo
var row = xfa.resolveNode("row[1]");
var field = xfa.form.createNode("field", "additional");
row.nodes.append(field);
field.w = "160pt";
field.h = "24pt";
field.ui.getElement("textEdit");
field.font.typeface = "DejaVu Sans";
field.rawValue = "Additional value";
createNode(className, name, namespaceURI) retorna um nó desanexado, com nome vazio e o namespace do modelo usados quando os arguments opcionais são omitidos
As classes aceitas incluem field, subform, draw, area, exclGroup e as classes de propriedades reconhecidas pelo schema de propriedades do runtime
Criar um nó não o insere no formulário nem cria um widget visível até que seja anexado com as propriedades exigidas de UI e valor
Operações de coleções e clonagem
| Operação | Comportamento |
|---|---|
parent.nodes.append(node) | Move um nó desanexado ou anexado para o fim da coleção viva de filhos do pai |
parent.nodes.insert(node, before) | Move o nó imediatamente antes de um filho existente do mesmo pai |
parent.nodes.remove(node) | Desanexa um filho, retendo sua identidade de script para reutilização posterior |
node.clone(true) | Retorna um clone profundo desanexado com identidades nativas e de script separadas |
node.clone(false) | Retorna um clone raso desanexado, sem nós filhos nem valor de campo copiado |
Ordem das coleções, parent, lookup de propriedades e resolução SOM suportada refletem edições bem-sucedidas imediatamente dentro do evento
Referências retidas por objetos de script continuam endereçando os próprios nós delas depois de uma edição commitada ou rollback de evento, incluindo clones profundos e rasos desanexados
Um ciclo, um filho de referência de um pai diferente ou um nó do modelo de dados passado a uma operação de formulário dispara uma exceção antes que aquela operação inválida mude a árvore
A raiz do modelo de formulários pode conter subforms e campos recém-criados, mas a própria raiz do modelo não pode ser movida nem clonada
Escopos repetidos e instâncias iniciais
Instâncias reais de formulários retêm identidades separadas mesmo quando seus nomes autorados são iguais, seus contextos de dados diferem ou não existe packet de datasets
Um merge vazio usa a contagem explícita occur.initial, ou occur.min quando initial está ausente, e um max ausente tem default min
Para um merge vazio, uma contagem inicial fora do mínimo e do máximo é permitida, incluindo zero cópias iniciais
Subforms aninhados e sem nome retêm seus próprios paths de ocorrências, e materializar essas instâncias não sintetiza um packet de datasets
Essas regras de ocorrências seguem a XML Forms Architecture 3.3, páginas impressas 339–345
Commit, rollback e saída
Um evento bem-sucedido aplica seu journal estrutural, reconstrói widgets nativos e torna o formulário editado disponível para SaveToBytes e a criação nativa automática de PDF
Uma exceção de script não capturada, falha de commit nativo ou orçamento de evento excedido restaura o documento original, identidades de widgets e estado de scripts retido, para que um evento posterior possa tentar de novo
Os orçamentos existentes de operações, nós, profundidade, bytes, widgets e tempo decorrido também se aplicam à preparação e ao commit estruturais
Instâncias de formulários salvas podem ser recarregadas e passadas a HPDFXFAWriteHeadlessPDF para criar campos e appearance streams reais de PDF com bytes de fontes fornecidos
Escopo
Estas APIs editam o modelo vivo de formulários e seu schema de propriedades suportado
Edição geral de xfa.template, processamento completo de subform-sets de choice, o schema completo de classes do XFA e combinações arbitrárias de selectors de binds permanecem capabilities separadas