Création et édition de l'arbre de formulaires XFA

TXFAWidgetRuntime prend en charge la création, le clonage et l'édition transactionnels en JavaScript de l'arbre de formulaires vivant via xfa.form et les collections de nœuds

L'arbre de formulaires vivant possède des identités natives indépendantes et peut être enregistré comme paquet de formulaire XDP sans modifier le template rédigé

Créer et insérer un champ

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) retourne un nœud détaché, avec un nom vide et l'espace de noms du modèle quand les arguments optionnels sont omis

Les classes acceptées comprennent field, subform, draw, area, exclGroup et les classes de propriétés reconnues par le schéma de propriétés de la runtime

Créer un nœud ne l'insère pas dans le formulaire ni ne crée de widget visible tant qu'il n'est pas attaché avec les propriétés UI et valeur requises

Opérations de collection et clonage

OpérationComportement
parent.nodes.append(node)Déplace un nœud détaché ou attaché à la fin de la collection d'enfants vivants du parent
parent.nodes.insert(node, before)Déplace le nœud juste avant un enfant existant du même parent
parent.nodes.remove(node)Détache un enfant tout en conservant son identité de script pour une réutilisation ultérieure
node.clone(true)Retourne un clone profond détaché avec des identités natives et de script séparées
node.clone(false)Retourne un clone superficiel détaché sans nœuds enfants ni valeur de champ copiée

L'ordre de collection, parent, la recherche de propriétés et la résolution SOM prise en charge reflètent immédiatement les éditions réussies à l'intérieur de l'événement

Les références conservées par des objets script continuent d'adresser leurs propres nœuds après une édition commise ou un rollback d'événement, clones profonds et superficiels détachés compris

Un cycle, un nœud enfant de référence issu d'un autre parent ou un nœud du modèle de données passé à une opération de formulaire lève une exception avant que cette opération invalide ne modifie l'arbre

La racine du modèle de formulaire peut contenir des subforms et champs nouvellement créés, mais la racine du modèle elle-même ne peut pas être déplacée ni clonée

Portées répétées et instances initiales

Les instances de formulaires réelles gardent des identités séparées même quand leurs noms rédigés sont égaux, leurs contextes de données diffèrent ou qu'aucun paquet datasets n'existe

Une fusion vide utilise le compte occur.initial explicite, ou occur.min quand initial est absent, et un max absent vaut min par défaut

Pour une fusion vide, un compte initial en dehors du minimum et du maximum est permis, zéro copie initiale compris

Les subforms imbriquées et sans nom gardent leurs propres chemins d'occurrence, et matérialiser ces instances ne synthétise pas de paquet datasets

Ces règles d'occurrence suivent l'XML Forms Architecture 3.3, pages imprimées 339–345

Commit, rollback et sortie

Un événement réussi applique son journal structurel, reconstruit les widgets natifs et rend le formulaire édité disponible pour SaveToBytes et la création native automatique de PDF

Une exception de script non interceptée, un échec de commit natif ou un budget d'événement dépassé restaure le document d'origine, les identités de widgets et l'état de script conservé, si bien qu'un événement ultérieur peut réessayer

Les budgets existants d'opérations, de nœuds, de profondeur, d'octets, de widgets et de temps écoulé s'appliquent aussi à la préparation structurelle et au commit

Les instances de formulaires enregistrées peuvent être rechargées et passées à HPDFXFAWriteHeadlessPDF pour créer de vrais champs PDF et flux d'apparences avec des octets de polices fournis

Périmètre

Ces API éditent le modèle de formulaire vivant et son schéma de propriétés pris en charge

L'édition générale de xfa.template, le traitement complet des subform-sets de choix, le schéma complet de classes XFA et les combinaisons arbitraires de sélecteurs de binding restent des capacités distinctes