DEFINE CLASS Executor AS Session OLEPUBLIC
*!* Procedimiento del ejemplo de Martín
PROCEDURE SqlCommand( tcCommand as String ) as String
local lcReturn
lcReturn = ""
Close Databases all
Set Path To v:\Samples\MiniServer
&tcCommand
If Empty( Alias() ) or Reccount() = 0
* Nada que hacer
Else
CursorToXML( Alias(), "lcReturn", 1, 1 + 8, 0, "1")
endif
Return lcReturn
ENDPROC
*!* Procedimiento agregado
PROCEDURE ScriptCommand( tcCommand as String, ;
tuParam1 as Variant, ;
tuParam2 as Variant, ;
tuParam3 as Variant, ;
tuParam4 as Variant ;
) as String ;
HELPSTRING "Ejecutar un Conjunto de Comandos"
Return=EXECSCRIPT( tcCommand, ;
tuParam1, ;
tuParam2, ;
tuParam3, ;
tuParam4 )
ENDPROC
ENDDEFINE
El texto que contiene tcCommand lo genero en el cliente, con el comando:
TEXT TO lcTexto NOSHOW TEXTMERGE PRETEXT 7
.....
.....
.....
ENDTEXT
La idea es tener una forma de ejecutar un pequeño proceso, y no solo un comando, en la máquina del servidor.
De hecho, funciona perfectamente.
Sé que debo tener cuidado de no utilizar ningún elemento visual, y mantenerlo libre de estado (stateless).
Lo primero es relativamente sencillo de lograr, pero no estoy muy seguro como asegurarme de mantener libre de estado al componente.
Si en el texto que mando ejecutar defino variables locales, ¿estoy infrigiendo el stateless?
El manejo de errores, ¿puedo hacerlo dentro del proceso, o debo atraparlo e informar, de alguna manera, con el string de retorno, cual ha sido el error, para que lo maneje el cliente?
En definitiva: ¿Estoy infringiendo alguna regla de oro? ¿Que precauciones debo tener al confeccionar el texto con los comandos?
Desde ya, muchas gracias por cualquier sugerencia o aclaración.Ricardo Aidelman
Software Developer
Praxis Computación
Buenos Aires, Argentina