Copie un mensaje existente utilizando el nodo .NETCompute.
Los nodos de transformación, como el nodo .NETCompute, pueden modificar la estructura de árbol lógico que se pasa a través de un flujo de mensajes de un nodo al siguiente. Esta estructura de árbol, o conjunto de mensajes, contiene cuatro árboles para representar del mensaje, el entorno, el entorno local y la lista de excepciones. Para enviar datos del terminal de entrada del nodo .NETCompute al terminal de salida, la clase asociada al nodo debe contener un método Evaluate que propague el conjunto de mensajes de entrada, o crea un conjunto de mensajes de salida. Para copiar un mensaje del terminal de entrada al terminal de salida, propague todo el conjunto de mensajes de entrada. El código de plantilla que se le proporciona cuando crea una clase FilterNode en C# propaga el mensaje. Como puede ver en el código siguiente, inputAssembly se pasa al método Propagate:
public override void Evaluate(NBMessageAssembly inputAssembly)
{
NBOutputTerminal outTerminal = OutputTerminal("Out");
NBMessage inputMessage = inputAssembly.Message;
NBElement root = inputMessage.RootElement;
#region UserCode
// Añadir código de usuario en esta región para filtrar el mensaje
#endregion UserCode
// Cambiar lo siguiente si no se va a propagar el mensaje al terminal 'Out'
outTerminal.Propagate(inputAssembly);
}
Si tiene pensado copiar el mensaje y luego actualizarlo también en el nodo .NETCompute, es preferible utilizar la plantilla CreateNode. Esta plantilla crea un conjunto de salida. Puede copiar el conjunto de entrada en este conjunto de salida añadiendo una sola línea de código a la región UserCode:
public override void Evaluate(NBMessageAssembly inputAssembly)
{
NBOutputTerminal outTerminal = OutputTerminal("out");
NBMessage inputMessage = inputAssembly.Message;
// Crear un nuevo mensaje vacío, asegurándose de eliminarlo después de su uso
using (NBMessage outputMessage = new NBMessage())
{
NBMessageAssembly outAssembly = new NBMessageAssembly(inputAssembly, outputMessage);
NBElement inputRoot = inputMessage.RootElement;
NBElement outputRoot = outputMessage.RootElement;
// Opcionalmente copiar cabeceras de mensajes, eliminar si no se necesita
CopyMessageHeaders(inputRoot, outputRoot);
#region UserCode
// Añadir código de usuario en esta región para filtrar el mensaje
outputRoot.AddLastChild(inputRoot.LastChild);
#endregion UserCode
// Cambiar lo siguiente si no se va a propagar el mensaje al terminal 'Out'
outTerminal.Propagate(outAssembly);
}
}