Agregar un Proceso
\layout Standard
-El método estático YATTA_Controlador::agregarProceso es el encargado de
- dar de alta los nuevos procesos, y de ponerlos en la cola de ejecución.
+El método YATTA_Controlador::agregarProceso es el encargado de dar de alta
+ los nuevos procesos, y de ponerlos en la cola de ejecución.
Este método recibe como parámetro una conexión a la base de datos y un
array asociativo con los atributos del proceso.
Devuelve un PEAR_Error en caso de haberlo.
resultado : este es el nombre del archivo resultado que hay que mostrarle
al usuario en la interfaz web.
No es necesariamente el mismo nombre que tendrá el archivo real de resultado.
+\layout Enumerate
+
+parametros : este son aquellos parámetros que hay que pasarle al proceso
+ al momento de la ejecución.
+ Puede ser cualquier tipo de dato que pueda ser serializado y des-serializado
+ correctamente.
\layout Section
Formato del Archivo Proceso
Cuando se quiere lanzar el proceso el script que corre en el servidor llama
a una función que devuelve una instancia del objeto.
- Este objeto tiene que cumplir ciertas condiciones para que pueda ejecutarse
- y obtener los datos cuando finaliza.
+ Este tiene que cumplir ciertas condiciones para que pueda ejecutarse y
+ obtener los datos cuando finaliza.
\layout Standard
La función debe llamarse create_process, la cual no recibe parámetro alguno.
- Ésta devuelve una instancia del objeto proceso.
+ Esto permite que el nombre y la ubicación de la clase que define al proceso
+ sea transparente para el script.
\layout Standard
-El objeto debe tener un método run, que no recibe parámetros, el cual es
- invocado a la hora de ejecutar el proceso.
+El objeto debe tener un método run, que puede recibir parámetros o no, según
+ se haya definido al cargarlo en la base de datos.
+ Este método es invocado a la hora de ejecutar el proceso.
Una vez que éste finaliza debe dejar en 3 atributos datos que son utilizados
para dar por finalizados la ejecución.
\layout Itemize
-error : contiene cualquier mensaje de error que se hubiera producido.
+error : contiene cualquier mensaje de error que se hubiera producido durante
+ la ejecución del proceso.
+ Este será mostrado al usuario en la interfaz gráfica.
\layout Itemize
archivo : contiene el path completo del archivo que se generó como resultado.
+ Recomendación: utilizar nombres aleatorios para que el mismo script pueda
+ ejecutarse repetidas veces sin riesgo a pisar los resultados.
+ El usuario va a recibir como nombre el campo resultado de la base de datos
+ que se cargo cuando se dio de alta el proceso.
\layout Itemize
-notificar : indica si hay que notificar al responsable.
+notificar : indica si hay que notificar al responsable y a los destinos
+ o no, cambiando el valor seteado en la base.
+\layout Section
+\pagebreak_top
+Ejemplos
+\layout Subsection
+
+Alta Proceso
+\layout LyX-Code
+
+
+\size scriptsize
+require_once 'YATTA/Controlador.php';
+\layout LyX-Code
+
+
+\size scriptsize
+require_once 'DB.php';
+\layout LyX-Code
+
+
+\size scriptsize
+require_once 'PEAR.php';
+\layout LyX-Code
+
+\layout LyX-Code
+
+
+\size scriptsize
+$db =& DB::connect('mysql://<user>:<passwd>@<host>/yatta', true);
+\layout LyX-Code
+
+
+\size scriptsize
+if (DB::isError($db)) {
+\layout LyX-Code
+
+
+\size scriptsize
+ trigger_error($db->getMessage(), E_USER_ERROR);
+\layout LyX-Code
+
+
+\size scriptsize
+}
+\layout LyX-Code
+
+\layout LyX-Code
+
+
+\size scriptsize
+$datos = array (
+\layout LyX-Code
+
+
+\size scriptsize
+ 'script' => <path absoluto al archivo de create_process>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'id_sistema' => <id de samurai del sistema>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'descripcion' => <descripción que vera el usuario del proceso>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'owner' => <usuario@organismo owner>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'destinos' => <usuario@organismo destinos separados por ,>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'prioridad' => <ponderación de procesos, sin utilizar>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'notificar' => <bool>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'resultado' => <nombre del archivo que veran los usuarios>,
+\layout LyX-Code
+
+
+\size scriptsize
+ 'parametros' => <uno de string, int, array u objeto>
+\layout LyX-Code
+
+
+\size scriptsize
+ );
+\layout LyX-Code
+
+\layout LyX-Code
+
+
+\size scriptsize
+$controlador =& new YATTA_Controlador;
+\layout LyX-Code
+
+
+\size scriptsize
+$res = $controlador->agregarProceso($db, $datos);
+\layout LyX-Code
+
+\layout LyX-Code
+
+
+\size scriptsize
+if (PEAR::isError($res)) {
+\layout LyX-Code
+
+
+\size scriptsize
+ trigger_error('Error: '.
+ $res->getMessage() ."
+\backslash
+n", E_USER_ERROR);
+\backslash
+
+\layout LyX-Code
+
+
+\size scriptsize
+}
+\layout Subsection
+
+Archivo Proceso
+\layout LyX-Code
+
+
+\size scriptsize
+require_once 'YATTA/Proceso.php';
+\layout LyX-Code
+
+\layout LyX-Code
+
+
+\size scriptsize
+function create_process() {
+\layout LyX-Code
+
+
+\size scriptsize
+ return new Mi_Proceso;
+\layout LyX-Code
+
+
+\size scriptsize
+}
+\layout LyX-Code
+
+
+\size scriptsize
+
+\layout LyX-Code
+
+
+\size scriptsize
+class Mi_Proceso extends YATTA_Proceso {
+\layout LyX-Code
+
+
+\size scriptsize
+ function run($param) {
+\layout LyX-Code
+
+
+\size scriptsize
+ //PUEDE HABER O NO PROCESOS
+\layout LyX-Code
+
+
+\size scriptsize
+ //EJECUTO EL PROCESO
+\layout LyX-Code
+
+
+\size scriptsize
+ ...
+\layout LyX-Code
+
+
+\size scriptsize
+ $this->error = null; //si no hay error
+\layout LyX-Code
+
+
+\size scriptsize
+ $this->notificar = false; //contradigo lo que dice en la base
+\layout LyX-Code
+
+
+\size scriptsize
+ $this->archivo = /tmp/000res.zip; //archivo que muevo al tacho
+\layout LyX-Code
+
+
+\size scriptsize
+ }
+\layout LyX-Code
+
+
+\size scriptsize
+}
\the_end