Création de champs avec FieldBuilder
Construire des champs avec FieldBuilder
Ce guide montre comment créer un champ Word à partir de zéro dans Aspose.Words FOSS pour .NET en utilisant FieldBuilder and FieldArgumentBuilder, au lieu de travailler avec un champ déjà présent dans un document. Pour lire, mettre à jour ou supprimer des champs existants, voir le Travailler avec des champs guide.
Créer un champ avec FieldBuilder
FieldBuilder crée un champ à partir de jetons de code de champ — arguments et commutateurs. Construisez-en un avec new FieldBuilder(fieldType), en passant le FieldType du champ que vous souhaitez créer. Ajoutez des arguments avec la méthode surchargée AddArgument(argument), qui accepte un string, int, double, un FieldBuilder imbriqué, ou un FieldArgumentBuilder. Ajoutez des commutateurs avec les méthodes surchargées AddSwitch(switchName), AddSwitch(switchName, switchArgument) (string), ou AddSwitch(switchName, switchArgument) (int/double).
Insertion du champ construit
Une fois qu’un FieldBuilder possède ses arguments et commutateurs, appelez BuildAndInsert(refNode) pour l’insérer dans le document — une surcharge accepte un nœud Inline et insère le champ avant celui-ci, et une autre accepte un Paragraph et insère le champ à la fin de ce paragraphe.
Composer des arguments complexes avec FieldArgumentBuilder
FieldArgumentBuilder crée un argument de champ complexe composé de champs, de nœuds et de texte brut, pour les cas où un seul argument nécessite plus qu’une simple chaîne. Construisez-en un avec new FieldArgumentBuilder(), puis appelez AddText(text) pour ajouter du texte brut, AddNode(node) pour ajouter un nœud Inline, ou AddField(fieldBuilder) pour imbriquer un autre champ (construit avec son propre FieldBuilder) dans l’argument. Transmettez le FieldArgumentBuilder terminé à FieldBuilder.AddArgument(argument) pour l’utiliser comme l’un des arguments du champ externe.
Conseils et bonnes pratiques
- Utilisez
FieldBuilderlors de la construction d’un type de champ qui n’est pas pris en charge par l’une des classes de champs dédiées (commeFieldDateouFieldSymbol), ou lors de la génération de codes de champ de façon programmatique à partir de données plutôt que de les créer manuellement. - Imbriquez un champ enfant dans l’argument d’un champ externe avec
FieldBuilder.AddArgument(FieldBuilder)pour un cas simple, ou construisez un argument mixte de texte, de nœuds et de champs imbriqués avecFieldArgumentBuilderlorsque l’argument comporte plus d’un seul champ. - Choisissez la surcharge
BuildAndInsert(refNode)qui correspond à l’endroit où vous souhaitez placer le champ — avant un nœudInlinespécifique, ou à la fin d’unParagraph. - Après
BuildAndInsert, traitez le résultat comme n’importe quel autre champ de l’arbre — par exemple, appelezUpdate()dessus si le type de champ nécessite un recalcul explicite.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
BuildAndInsert cible le mauvais emplacement | La mauvaise surcharge a été utilisée pour le point d’insertion prévu | Passez un nœud Inline pour l’insérer avant, ou un Paragraph pour l’insérer à la fin |
| Un argument de champ n’acceptera pas du texte brut et un nœud ensemble | AddArgument a été appelé avec un seul string/int/double au lieu d’un argument composé | Construisez l’argument mixte avec FieldArgumentBuilder (AddText, AddNode, AddField) et transmettez-le à AddArgument |
| La valeur du switch n’est pas reconnue dans le code de champ généré | AddSwitch(switchName) a été utilisé alors que le switch nécessite réellement un argument | Utilisez la surcharge AddSwitch(switchName, switchArgument) avec la valeur string, int ou double du switch |
FAQ
Quand devrais-je utiliser FieldBuilder plutôt que d’insérer un code de champ pré-formé?
Utilisez FieldBuilder lorsque vous avez besoin d’un contrôle explicite sur les arguments et les commutateurs d’un champ lors de leur construction de manière programmatique, plutôt que d’insérer une chaîne de code de champ pré-formée.
Comment ajouter plus d’un argument à un champ?
Appelez AddArgument une fois par argument — il est surchargé pour string, int, double, un FieldBuilder imbriqué, et FieldArgumentBuilder.
Puis-je créer un champ dont l’argument contient un mélange de texte et d’un autre champ?
Oui — utilisez FieldArgumentBuilder, en appelant AddText, AddNode et AddField selon les besoins, puis transmettez-le à FieldBuilder.AddArgument.
Comment insérer réellement le champ construit dans le document?
Appelez BuildAndInsert(refNode), en passant soit un nœud Inline (insère avant lui), soit un Paragraph (insère à la fin).
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
FieldBuilder | Construit un champ à partir des jetons de code de champ (arguments et commutateurs) |
FieldBuilder(fieldType) | Constructeur prenant le FieldType à construire |
FieldBuilder.AddArgument(argument) | Ajoute un argument (string, int, double, FieldBuilder ou FieldArgumentBuilder) |
FieldBuilder.AddSwitch(switchName) / AddSwitch(switchName, switchArgument) | Ajoute un commutateur de champ, avec ou sans valeur |
FieldBuilder.BuildAndInsert(refNode) | Insère le champ construit avant un nœud Inline ou à la fin d’un Paragraph |
FieldArgumentBuilder | Construit un argument de champ complexe à partir de texte, de nœuds et de champs imbriqués |
FieldArgumentBuilder.AddText(text) | Ajoute du texte brut à l’argument |
FieldArgumentBuilder.AddNode(node) | Ajoute un nœud Inline à l’argument |
FieldArgumentBuilder.AddField(fieldBuilder) | Imbrique un champ construit par FieldBuilder dans l’argument |