Creando campos con FieldBuilder
Construyendo campos con FieldBuilder
Esta guía muestra cómo construir un campo de Word desde cero en Aspose.Words FOSS para .NET usando FieldBuilder and FieldArgumentBuilder, en lugar de trabajar con un campo que ya existe en un documento. Para leer, actualizar o eliminar campos existentes, consulte la Trabajando con campos guía.
Creando un campo con FieldBuilder
FieldBuilder construye un campo a partir de tokens de código de campo — argumentos y conmutadores. Construye uno con new FieldBuilder(fieldType), pasando el FieldType del campo que deseas construir. Añade argumentos con el método sobrecargado AddArgument(argument), que acepta un string, int, double, un FieldBuilder anidado, o un FieldArgumentBuilder. Añade conmutadores con los métodos sobrecargados AddSwitch(switchName), AddSwitch(switchName, switchArgument) (string), o AddSwitch(switchName, switchArgument) (int/double).
Insertando el campo construido
Una vez que un FieldBuilder tiene sus argumentos y conmutadores, llama a BuildAndInsert(refNode) para insertarlo en el documento — una sobrecarga acepta un nodo Inline y inserta el campo antes de él, y otra acepta un Paragraph e inserta el campo al final de ese párrafo.
Componiendo argumentos complejos con FieldArgumentBuilder
FieldArgumentBuilder crea un argumento de campo complejo compuesto por campos, nodos y texto plano, para casos en los que un solo argumento necesita más que una cadena simple. Construye uno con new FieldArgumentBuilder(), luego llama a AddText(text) para añadir texto plano, a AddNode(node) para añadir un nodo Inline, o a AddField(fieldBuilder) para anidar otro campo (construido con su propio FieldBuilder) dentro del argumento. Pasa el FieldArgumentBuilder completado a FieldBuilder.AddArgument(argument) para usarlo como uno de los argumentos del campo externo.
Consejos y Mejores Prácticas
- Utiliza
FieldBuilderal construir un tipo de campo que no está respaldado por una de las clases de campo dedicadas (comoFieldDateoFieldSymbol), o al generar códigos de campo de forma programática a partir de datos en lugar de escribirlos manualmente. - Anida un campo hijo dentro del argumento de un campo externo con
FieldBuilder.AddArgument(FieldBuilder)para un caso sencillo, o crea un argumento mixto de texto, nodos y campos anidados conFieldArgumentBuildercuando el argumento es más que un solo campo. - Elige la sobrecarga de
BuildAndInsert(refNode)que coincida con el lugar donde deseas que se coloque el campo — antes de un nodoInlineespecífico, o al final de unParagraph. - Después de
BuildAndInsert, trata el resultado como cualquier otro campo en el árbol — por ejemplo, llama aUpdate()sobre él si el tipo de campo requiere una recalculación explícita.
Problemas Comunes
| Problema | Causa | Solución |
|---|---|---|
BuildAndInsert apunta a la ubicación incorrecta | Se utilizó la sobrecarga incorrecta para el punto de inserción previsto | Pase un nodo Inline para insertarlo antes, o un Paragraph para insertarlo al final |
| Un argumento de campo no aceptará texto sin formato y un nodo juntos | AddArgument se llamó con un único string/int/double en lugar de un argumento compuesto | Construya el argumento mixto con FieldArgumentBuilder (AddText, AddNode, AddField) y páselo a AddArgument |
| El valor del interruptor no se reconoce en el código de campo construido | AddSwitch(switchName) se utilizó cuando el interruptor realmente necesita un argumento | Utilice la sobrecarga AddSwitch(switchName, switchArgument) con el valor de cadena, entero o doble del interruptor |
FAQ
¿Cuándo debo usar FieldBuilder en lugar de insertar un código de campo preformado?
Use FieldBuilder cuando necesite un control explícito sobre los argumentos y conmutadores de un campo mientras los construye programáticamente, en lugar de insertar una cadena de código de campo preformada.
¿Cómo agrego más de un argumento a un campo?
Llame a AddArgument una vez por argumento — está sobrecargado para string, int, double, un FieldBuilder anidado y FieldArgumentBuilder.
¿Puedo crear un campo cuyo argumento contenga una mezcla de texto y otro campo?
Sí — use FieldArgumentBuilder, llamando a AddText, AddNode y AddField según sea necesario, y luego páselo a FieldBuilder.AddArgument.
¿Cómo inserto realmente el campo creado en el documento?
Llame a BuildAndInsert(refNode), pasando ya sea un nodo Inline (se inserta antes de él) o un Paragraph (se inserta al final).
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
FieldBuilder | Construye un campo a partir de tokens de código de campo (argumentos y conmutadores) |
FieldBuilder(fieldType) | Constructor que recibe el FieldType para construir |
FieldBuilder.AddArgument(argument) | Añade un argumento (string, int, double, FieldBuilder o FieldArgumentBuilder) |
FieldBuilder.AddSwitch(switchName) / AddSwitch(switchName, switchArgument) | Añade un interruptor de campo, con o sin valor |
FieldBuilder.BuildAndInsert(refNode) | Inserta el campo construido antes de un nodo Inline o al final de un Paragraph |
FieldArgumentBuilder | Construye un argumento de campo complejo a partir de texto, nodos y campos anidados |
FieldArgumentBuilder.AddText(text) | Añade texto plano al argumento |
FieldArgumentBuilder.AddNode(node) | Agrega un nodo Inline al argumento |
FieldArgumentBuilder.AddField(fieldBuilder) | Anida un campo creado por FieldBuilder en el argumento |