4D v16Procedimientos almacenados |
||
|
4D v16
Procedimientos almacenados
Procedimientos almacenados
La expresión "Procedimiento almacenado" proviene del mundo de los servidores SQL. Cuando una estación cliente envía una petición a un servidor SQL, envía en realidad texto en lenguaje SQL al servidor SQL. Esta petición se analiza sintácticamente (parsing) y es interpretada en el servidor SQL antes de ejecutarse. Obviamente, si el texto de la petición es importante y si la petición se envía varias veces durante una sesión, puede tomar mucho tiempo el envío del código en la red, el análisis y la interpretación de la petición. Así que la idea era encontrar una forma de enviar la petición por la red, analizada e interpretada de una vez y luego ejecutarla únicamente cada vez que se reciba de una estación cliente. La solución era conservar el código fuente de la petición (en otras palabras, un procedimiento) en el servidor y que el cliente envíe una petición con únicamente el nombre del procedimiento a ejecutar. El procedimiento es por lo tanto “guardado” en el servidor y de ahí viene el término “procedimiento almacenado.” Note que un procedimiento almacenado SQL es un procedimiento que puede recibir parámetros de una estación cliente, ejecutar las tareas para las que fue creado (de manera sincrónica o asincrónica) y posiblemente devolver un resultado al cliente. Cuando un cliente solicita la ejecución de un procedimiento almacenado, en cierta medida, delega la ejecución del código en el equipo servidor. Aunque utilizamos el término utilizado en la industria, las funcionalidades de los procedimientos almacenados de 4D Server superan significativamente el concepto regular de procedimientos almacenados. Con 4D en modo local, cuando utiliza un comando como New process, puede abrir un proceso usuario en el cual puede ejecutar un método. Este método se llama un método proceso (ver la sección Métodos de proyecto en el manual Lenguaje de 4D). Puede hacer lo mismo con 4D Server, en un equipo cliente. Además, utilizando el comando Execute on server en el equipo servidor, puede iniciar un proceso de usuario en el cual ejecutar un método. Además, utilizando el comando EXECUTE ON CLIENT, puede correr un método en otro proceso en un cliente diferente. Importante: la diferencia principal entre un procedimiento almacenado SQL y un procedimiento almacenado 4D Server es que en el primer caso usted ejecuta un procedimiento SQL, en el segundo caso, ejecute un proceso 4D autónomo. Como un proceso 4D normal, un procedimiento almacenado tiene su propio entorno:
En términos de interfaz de usuario, un procedimiento almacenado puede abrir ventanas y mostrar datos (DISPLAY RECORD). Puede iniciar tantos procedimientos almacenados como lo autorice el sistema (hardware y memoria). De hecho, la máquina servidor debe considerarse como una máquina que no sólo responde a los clientes 4D y a los navegadores web, sino también es capaz de ejecutar procesos que interactúan con otros procesos que corren en el equipo servidor y en las máquinas remotas. De la misma forma que 4D ofrece un entorno multitareas a los procesos usuario que corren en la máquina, 4D Server ofrece un entorno multitareas a los procedimientos almacenados. Por ejemplo, 4D Server mantiene una tabla de las variables interproceso que pueden ser utilizadas por los procesos almacenados para comunicarse entre ellos. Nota: la propiedad de método "Ejecutar en servidor" permite ejecutar un método en un proceso en el servidor, pero el método utiliza un proceso "twinned" del proceso cliente, que le permite en particular beneficiarse del entorno de este proceso cliente. En este caso, no es un procedimiento almacenado 4D. Para mayor información, consulte la sección Atributo Ejecutar en servidor. Gran parte de las funcionalidades de los procesos y comandos descritas en el manual Lenguaje 4D aplican también a los procedimientos almacenados, excepto por la entrada de datos para los procedimientos almacenados ejecutados en el servidor. Un procedimiento almacenado puede añadir, buscar, ordenar, actualizar o borrar registros. Un procedimiento almacenado puede utilizar conjuntos y selecciones temporales, acceder a documentos en el disco, trabajar con BLOBs, imprimir registros, etc. Piense simplemente que en lugar de hacer algo en la máquina 4D local, lo hace en el equipo servidor o en varios equipos clientes. Una ventaja evidente de los procedimientos almacenados ejecutados en el servidor es que precisamente un procedimiento almacenado se ejecuta en el equipo servidor, donde se encuentra el motor de la base de datos. Por ejemplo, un APPLY TO SELECTION no es eficiente en la red, pero lo es al interior de un procedimiento almacenado. El ejemplo propuesto en la sección Importación con procedimientos almacenados (ejemplo) muestra la importante optimización del rendimiento que puede alcanzar implementando un procedimiento almacenado. Los procedimientos almacenados ejecutados en uno o varios equipos clientes permiten optimizar la optimización de la repartición de tareas entre clientes y la comunicación entre varios equipos clientes. Consulte el comando REGISTER CLIENT en el manual Lenguaje para ver un ejemplo de procedimientos almacenados ejecutados en varios equipos clientes. Sin embargo, la ventaja principal de la arquitectura de los procedimientos almacenados es la dimensión adicional que da a 4D Server. Utilizando procedimientos almacenados puede implementar sus propios servicios 4D Server. El único límite es su imaginación. El ejemplo en la sección Importación con procedimientos almacenados (ejemplo) muestra un procedimiento almacenado que ofrece información sobre 4D Server a sus clientes. Puede, por ejemplo, listar los volúmenes del equipo servidor. Este ejemplo puede expandirse fácilmente para reenviar la información sobre los directorios o documentos al cliente. De manera general, los procedimientos almacenados ejecutados en el servidor no deben efectuar operaciones que impliquen elementos de interfaz (tal como menús, ventanas, formularios...). Los mecanismos de gestión de interfaz no se manejan en el servidor. Esta es la lista de comandos que NO debe utilizar en procedimientos almacenados ejecutados en el servidor. Estos comandos se clasifican en tres categorías:
ACCUMULATE ADD RECORD _o_ADD SUBRECORD APPEND MENU ITEM BREAK LEVEL CALL PROCESS CHANGE LICENSES Count menu items Count menus CREATE USER FORM DELETE MENU ITEM DELETE USER FORM DISABLE MENU ITEM DISPLAY SELECTION EDIT ACCESS EDIT FORM ENABLE MENU ITEM FILTER EVENT Get menu item Get menu item key Get menu item mark Get menu item style Get menu title SET PICTURE TO LIBRARY _o_GRAPH TABLE INSERT MENU ITEM Level LIST USER FORMS Menu selected MODIFY RECORD MODIFY SELECTION _o_MODIFY SUBRECORD ON EVENT CALL _o_Open external window PAGE BREAK PAGE SETUP PRINT SETTINGS QUERY BY EXAMPLE QR REPORT Printing page REMOVE PICTURE FROM LIBRARY SET MENU ITEM SET MENU ITEM SHORTCUT SET MENU ITEM MARK SET MENU ITEM STYLE SET PICTURE TO LIBRARY SHOW MENU BAR Subtotal • Comando inapropiados en el servidor La utilización de estos comandos en procedimientos almacenados no es recomendable ya que su funcionamiento no se adapta a una ejecución en el servidor. Estos comandos pueden bloquear el servidor, provocar errores y no producen los efectos esperados. No se devuelve un código de error específico.ACCEPT Activated _o_ADD DATA SEGMENT After APPEND DATA TO PASTEBOARD APPEND TO LIST Before BLOB TO DOCUMENT BLOB to list BRING TO FRONT _o_C_GRAPH CANCEL CHANGE CURRENT USER CHANGE PASSWORD CLEAR LIST CLEAR PASTEBOARD Copy list Count list items Count screens Create document(1) _o_Create resource file(1) Current form table Current user Deactivated DELETE FROM LIST DELETE USER DIALOG _o_DISABLE BUTTON DRAG AND DROP PROPERTIES DRAG WINDOW Drop position _o_During _o_ENABLE BUTTON ERASE WINDOW EXPORT DATA(1) FILTER KEYSTROKE Find window Focus object FONT LIST _o_Font name _o_Font number Evento formulario FORM FIRST PAGE FORM Get current page FORM GET PROPERTIES FORM GOTO PAGE FORM LAST PAGE FORM NEXT PAGE FORM PREVIOUS PAGE FORM SET INPUT FORM SET OUTPUT Frontmost process Frontmost window Get edited text GET GROUP LIST GET GROUP PROPERTIES GET HIGHLIGHT GET LIST ITEM GET LIST ITEM PROPERTIES GET LIST PROPERTIES GET MOUSE GET PASTEBOARD DATA GET PICTURE FROM PASTEBOARD Get text from pasteboard GET USER LIST GET USER PROPERTIES GET WINDOW RECT Get window title GOTO OBJECT GRAPH SETTINGS HIDE PROCESS HIDE TOOL BAR HIDE WINDOW HIGHLIGHT RECORDS HIGHLIGHT TEXT IMPORT DATA(1) In break In footer In header INSERT IN LIST _o_INVERT BACKGROUND Is a list Is user deleted Keystroke List item parent List item position LIST TO BLOB Load list MAXIMIZE WINDOW Menu bar height Menu bar screen MINIMIZE WINDOW Modified New list Next window OBJECT GET COORDINATES OBJECT MOVE OBJECT SET LIST BY NAME OBJECT SET COLOR OBJECT SET ENTERABLE OBJECT SET FILTER OBJECT SET FORMAT OBJECT SET RGB COLORS OBJECT SET TITLE OBJECT SET VISIBLE Old Open document(1) Open resource file(1) ORDER BY(2) Outside call Pasteboard data size Pop up menu POST CLICK POST EVENT POST KEY QUERY BY FORMULA(2) QUERY(2) REDRAW _o_REDRAW LIST REDRAW WINDOW REGISTER CLIENT REJECT SAVE LIST SCREEN COORDINATES SCREEN DEPTH Screen height Screen width Select folder SELECT LIST ITEMS BY POSITION SELECT LIST ITEMS BY REFERENCE SELECT LOG FILE Selected list items Self SET CURSOR SET FIELD TITLES Set group properties SET LIST ITEM SET LIST ITEM PROPERTIES SET LIST PROPERTIES SET PICTURE TO PASTEBOARD SET SCREEN DEPTH SET TABLE TITLES SET TEXT TO PASTEBOARD SET TIMER Set user properties SET WINDOW RECT Shift down SHOW PROCESS SHOW WINDOW SORT LIST User in group Validate password Window kind WINDOW LIST Window process (1) Únicamente cuando el primer parámetro es una cadena vacía. (2) Únicamente cuando la sintaxis utilizada provoca la aparición de la caja de diálogo (ej.: ORDER BY([Table])).
GRAPH MESSAGES OFF MESSAGES ON SET MENU BAR SHOW TOOL BAR
Puede ejecutar en 4D Server o en otro equipo 4D client. Note que para los equipos clientes 4D en esta lista, deben haber sido registrados (ver la sección Procedimientos almacenados en los equipos clientes y el comando REGISTER CLIENT).
Nota: no es posible utilizar los comandos de gestión de procesos DELAY PROCESS, PAUSE PROCESS y RESUME PROCESS desde un 4D remoto con procedimientos almacenados en el servidor.
Los procedimientos almacenados pueden comunicarse entre ellos utilizando:
Consulte las secciones correspondientes del manual Lenguaje de 4D. Nuevamente, recuerde que los comandos 4D actúan dentro del alcance del equipo que ejecuta el procedimiento almacenado (servidor o clientes) de la misma forma que en local en un equipo cliente. Nota: los mecanismos CALL PROCESS y Outside call no tienen significado en el equipo servidor, porque los procedimientos almacenados no tienen una interfaz usuario con entrada de datos. También hay otra funcionalidad importante: los procesos usuario de los clientes (procesos que corren en un equipo cliente) pueden leer y escribir las variables proceso (*) de un procedimiento almacenado, utilizando los comandos GET PROCESS VARIABLE, SET PROCESS VARIABLE y VARIABLE TO VARIABLE. (*) Como también las variables interproceso del equipo servidor. Importante: la comunicación proceso “Intermáquina”, ofrecida por los comandos GET PROCESS VARIABLE, SET PROCESS VARIABLE y VARIABLE TO VARIABLE, sólo es posible del cliente al servidor. Siempre es un proceso cliente el que lee o escribe las variables de un procedimiento almacenado.
Ver también
Importación con procedimientos almacenados (ejemplo)
|
PROPIEDADES
Producto: 4D
HISTORIA
ARTICLE USAGE
Manual de 4D Server ( 4D v16) |