En este tipo de cosas se puede llegar a niveles de complejidad altos, según lo creativos que estemos, pero acá les dejo un par de ejemplos sencillos. A ver si algunos se animan y hacen sus primeras pruebas en este tema.
Caso 1
Se trata de cómo pasar variables sencillas al engine y ejecutar un JavaScript que use esas variables, en este caso sólo con una instrucción return: &idVarchar = "miVariable" //id de la variable en el script
&miVarchar = "Hola Mundo!" //valor de la variable
&jsVarchar = "return miVariable;" //script del usuario
Acá viene el código C#:
csharp try {
csharp Jint.JintEngine engine = new Jint.JintEngine();
csharp engine.SetParameter([!&idVarchar!], [!&miVarchar!]);
csharp var result = engine.Run([!&jsVarchar!]);
csharp [!&returnVarchar!] = result.ToString();}
csharp catch (Jint.JintException e){
csharp [!&returnVarchar!] = e.Message;}
csharp catch (Exception e ){
csharp [!&returnVarchar!] = e.ToString();}
- Instanciamos el engine- Pasamos nuestra variable al engine
- Le damos run con el script de una línea
- Y el retorno lo pasamos a una variable varchar (debería traer "Hola Mundo!")
- Si hubiera errores, los atrapamos y retornamos la descripción.
Caso 2
En este ejemplo tomaremos una variable basada en un SDT y la pasamos al engine como un string Json. &xidVarchar = "Persona" //id del objeto a crear en el script
&idVarchar = "jintJson" + &xidVarchar //id del string Json en el script
&sdtPersona.Nombre = "John Doe Jr." //datos en la variable &sdtPersona
&sdtPersona.Edad = 35
&miVarchar = &sdtPersona.ToJson() //pasamos la variable sdt a un string json
//iniciamos el script con un eval que transforma el Json en un objeto JavaScript
&jsVarchar = "var " + &xidVarchar + " = eval('(' + " + &idVarchar + " + ')');" + newline()
+ "//inicio del script del usuario" + newline()
+ "return Persona.Nombre;" + newline()
El código C# es igual al del Caso 1:- Instanciamos el engine
- Pasamos nuestra variable string Json al engine
- Le damos run con el script que inicia transformando el Json en el objeto Persona
- Y retornamos Persona.Nombre a una variable varchar (debería traer "John Doe Jr.")
- Si hubiera errores, los atrapamos y retornamos la descripción.
Bonus Track
Si se requiere conocer el tipo del valor de retorno, podemos hacer algo apoyándonos en GetType(): csharp Type typeX = result.GetType();
csharp [!&typeVarchar!] = typeX.Name;
do case
case &typeVarchar = "Double"
csharp Double returnDbl = (Double)result;
csharp [!&returnVarchar!] = returnDbl.ToString("F4",System.Globalization.CultureInfo.InvariantCulture);
case &typeVarchar = "DateTime"
csharp [!&returnDateTime!] = (DateTime)result;
&returnVarchar = &returnDtt.ToFormattedString()
otherwise
csharp [!&returnVarchar!] = result.ToString();
endcase