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çãoComportamento
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