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ération | Comportement |
|---|---|
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