AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Sintaxis WLanguage / Procedimientos WLanguage
  • Crear un procedimiento
  • Salir de una Procedure
  • "Al final del evento que contiene la llamada"
  • Devolución de un resultado
  • Estampación del valor de retorno
  • Atributos de extension
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
El método para declarar una Procedure es el mismo independientemente de que sea:
Importante: No debes declarar dos Procedure con el mismo nombre (especialmente un Procedure global y un Procedure local).
Recordatorio: En WLanguage, no hay distinción entre los procedimientos y las funciones. Las sintaxis para declarar y utilizar los procedimientos también se aplican a las funciones.
Ejemplo
PROCEDURE Find(FileName, Key, Value)
HReadSeek(FileName, Key, Value)
IF HFound() = True THEN
RETURN True
ELSE
RESULT False
END
Sintaxis

Declarar una Procedure con parámetros Ocultar los detalles

PROCEDURE <Procedure name>(<Parameters>) [<Extension attributes>] [: <Type of return>]
<Procedure code>
<PROCEDURE>:
Inicio de la declaración de Procedure.
Observación: Para que sus programas sean más legibles, la palabra clave Procedure puede sustituirse por la palabra clave FUNCION.
<Procedure name>:
Nombre de la Procedure a declarar.
<Parameters>:
Parámetros pasados a la Procedure. Cada parámetro está separado por una coma. Para más detalles sobre los parámetros, véase Parámetros de un procedimiento.
Si su Procedure o función utiliza un elemento del proyecto (ventana, página, reporte, ...), tiene la posibilidad de get la lista de elementos solicitados en la finalización. Para ello, añada un atributo extension en la declaración de la función o de los parámetros Procedure.
<Extension attributes>:
Atributos extension utilizados para definir las opciones de gestión del editor de código. Para más detalles sobre los atributos disponibles de extension, véase los comentarios.
<Type of return>:
Tipo de valor devuelto por la Procedure. Este tipo puede corresponder a un tipo simple (entero, real, cadena...) o a un tipo estructurado (estructura, objeto...).
Esta información se utiliza para asegurarse de que la Procedure siempre tiene el mismo tipo de valor en retorno. El valor devuelto siempre se convertirá al tipo especificado.
Por ejemplo, si el tipo de retorno es "Integer" y si el valor devuelto es una cadena, la cadena se convertirá automáticamente en entera..
<Procedure code>:
Código de idioma de Procedure para declarar.

Declarar una Procedure sin parámetro Ocultar los detalles

PROCEDURE <Procedure name>() [<Extension attributes>] [: <Type of return>]
<Procedure code>
<PROCEDURE>:
Inicio de la declaración de Procedure.
Observación: Para que sus programas sean más legibles, la palabra clave Procedure puede sustituirse por la palabra clave FUNCION.
<Procedure name>:
Nombre de la Procedure a declarar.
<Extension attributes>:
Atributos extension utilizados para definir las opciones de gestión del editor de código. Para más detalles sobre los atributos disponibles de extension, véase los comentarios.
<Type of return>:
Tipo de valor devuelto por la Procedure. Este tipo puede corresponder a un tipo simple (entero, real, cadena...) o a un tipo estructurado (estructura, objeto...).
Esta información se utiliza para asegurarse de que la Procedure siempre tiene el mismo tipo de valor en retorno. El valor devuelto siempre se convertirá al tipo especificado.
Por ejemplo, si el tipo de retorno es "Integer" y si el valor devuelto es una cadena, la cadena se convertirá automáticamente en entera..
<Procedure code>:
Código de idioma de Procedure.

Declarar un Procedure con parámetros Variable Ocultar los detalles

PROCEDURE <Procedure name>(<Parameters>, ]*) [<Extension attributes>] [: <Type of return>]
<Procedure code>
<PROCEDURE>:
Inicio de la declaración de Procedure.
Observación: Para que sus programas sean más legibles, la palabra clave Procedure puede sustituirse por la palabra clave FUNCION.
<Procedure name>:
Nombre de la Procedure a declarar.
<Parameters>:
Parámetros pasados a la Procedure. Cada parámetro está separado por una coma.
Si el número de parámetros que se pueden pasar a la Procedure cambia, utilice el símbolo "*".. Por ejemplo:
  • Procedimientos que pueden recibir entre 0 y 255 parámetros: Procedure MyProc(*).
  • Procedimientos que pueden recibir entre 1 y 255 parámetros: Procedure MyProc(Parámetro1, *).
Para obtener más información, consulte:
<Extension attributes>:
Atributos extension utilizados para definir las opciones de gestión del editor de código. Para más detalles sobre los atributos disponibles de extension, véase los comentarios.
<Type of return>:
Tipo de valor devuelto por la Procedure. Este tipo puede corresponder a un tipo simple (entero, real, cadena...) o a un tipo estructurado (estructura, objeto...).
Esta información se utiliza para asegurarse de que la Procedure siempre tiene el mismo tipo de valor en retorno. El valor devuelto siempre se convertirá al tipo especificado.
Por ejemplo, si el tipo de retorno es "Integer" y si el valor devuelto es una cadena, la cadena se convertirá automáticamente en entera..
<Procedure code>:
Código de idioma de Procedure para declarar.
Observaciones

Crear un procedimiento

Para más detalles sobre cómo crear una Procedure global, véase Procedimientos globales.
Para más detalles sobre cómo crear un Procedure local, véase Procedimientos locales.

Salir de una Procedure

Para forzar la salida de un Procedure, utilice la palabra clave RETURN. En el Procedure, no se ejecuta ninguno de los procesos posteriores a la palabra clave RETURN.
Por ejemplo:
PROCÉDURE Calculate(Dividend)
IF Dividend = 0 THEN
Error("Unable to divide by zero")
RETURN
ELSE
...
END
Observaciones:
  • Si la Procedure devuelve un resultado, utilice la palabra clave RETURN.
  • Las palabras clave RETURN y RETURN no pueden utilizarse en el mismo Process.

"Al final del evento que contiene la llamada"

Los Procedure s con la opción "Al final del Event que contiene la llamada" activada, y llamados desde un callback Procedure (Procedure utilizado por fListFile, Event, etc.) se ejecutan al final de cada llamada al callback.
Ejemplo:
// -----------------
// standard case
// -----------------
Click of button
// beginning of button click code
Proc1
// beginning of Procedure1 code
Proc2
// beginning of Procedure2 code

Call to EndEvent procedure
// end of Proc2 code
// end of Proc1 code
// end of button click code
Execution of EndEvent procedure
// -------------------
// callback case
// -------------------
Click of button
Proc1
Proc2
use of fListFile
Callback1 procedure
// beginning of code of Callback1 Procedure
CallbackProc2
// beginning of code of Callback2 Procedure
Call to ProcEndEvent
// end of ProcedureCallback2 code
// end of ProcedureCallback1 code
Execution of ProcEndEvent
ProcedureCallback1
// beginning of ProcedureCallback1 code
ProcedureCallback2
// beginning of ProcedureCallback2 code
Call to ProcEndEvent
// end of ProcedureCallback2 code
// end of ProcedureCallback1 code
Execution of ProcEndEvent

Devolución de un resultado

Para devolver el resultado del procedimiento a la Process llamante, utilice RETURN. Esta palabra clave se utiliza para devolver:
  • un valor,
  • varios valores.
Por ejemplo:
// Procedure that returns a value
PROCEDURE Find(FileName, Key, Value)
HReadSeek(FileName, Key, Value)
IF HFound() = True THEN
RETURN True
ELSE
RESULT False
END
// Procedure that returns several values
PROCEDURE MyProc()
 
// Process
RETURN (1, 2, 3)
 
 
// Code for calling the procedure
( x, y, z ) = MyProc()
// x is set to 1, y to 2 and z to 3
Consejo: Para los Procedure s que devuelven un resultado, se recomienda utilizar la palabra clave FUNCTION en lugar de Procedure para simplificar la lectura del código.
Importante: La palabra clave RETURN no debe utilizarse para forzar la salida de un Procedure que devuelva un resultado. La llamada Procedure espera un estado reporte que no será devuelto si se fuerza la salida del Procedure.

Estampación del valor de retorno

Para especificar el tipo de valor de retorno, basta con especificar este tipo (precedido de ':') al declarar la Procedure. Por ejemplo:
PROCEDURE Calculation(): int
 
IF MyExpression = True THEN
RESULT "1"  // The string "1" will be converted to integer
ELSE
RESULT 0
END
Observación: Múltiples valores de retorno
Tiene la capacidad de asignar un tipo a los valores de retorno. La sintaxis es la siguiente:
PROCEDURE ProcedureName(): ([<Type value 1>, [<Type value 2>, ... , [<Type value N>]]])
Observación: No es necesario especificar el tipo para todos los valores de retorno.. Para evitar especificar el tipo de un valor de retorno, todo lo que tiene que hacer es omitir el tipo o usar el carácter '?.
Ejemplo:
PROCEDURE Procedure_Name(): (string..string)
 
RESULT(1,2,3)

PROCEDURE Procedure_Name(): (string,?,string)
 
RESULT(1,2,3)
Se permiten los siguientes tipos de valores de retorno:
TiposVerificaciones realizadas durante la compilaciónComprobaciones/acciones realizadas en tiempo de ejecución
karaokeautomatic WLanguage conversiones
unsigned intautomatic WLanguage conversiones
int de 8 bytes sin signoautomatic WLanguage conversiones
intautomatic WLanguage conversiones
Int de 8 bytesautomatic WLanguage conversiones
system intautomatic WLanguage conversiones
divisaautomatic WLanguage conversiones
numéricoautomatic WLanguage conversiones
realautomatic WLanguage conversiones
4 bytes realesautomatic WLanguage conversiones
carácterautomatic WLanguage conversiones
cadenaautomatic WLanguage conversiones
Cadena ANSISólo se permiten las cadenas sin tamañoautomatic WLanguage conversiones
Cadena UNICODESólo se permiten las cadenas sin tamañoautomatic WLanguage conversiones
bufferSólo se permiten las cadenas sin tamañoautomatic WLanguage conversiones
fechaautomatic WLanguage conversiones
momentoautomatic WLanguage conversiones
datetimeautomatic WLanguage conversiones
lapsoautomatic WLanguage conversiones
procedimientoSólo se permiten los tipos ProcedureSólo se permiten los tipos Procedure
tipo de letraSólo se permiten los tipos de fuenteSólo se permiten los tipos de fuente
<enumeración>
Combinación> <combinación
Clase> <clase
  • "Dinámico" no está permitido.
  • Las clases deben estar correlacionadas
Sólo se permiten conversiones
<estructura>
  • "Dinámico" no está permitido.
  • las estructuras deben ser las mismas.
Las estructuras deben ser las mismas.
<advanced type>
  • "Dinámico" no permitido
  • Los tipos avanzados deben ser los mismos.
Los tipos avanzados deben ser los mismos.
<.NET class>"Dinámico" no permitido
array
  • "Dinámico" no permitido
  • Comprobación del tipo de elementos
  • Comprobación del número de dimensiones
  • Comprobación del tipo de elementos
  • Comprobar el número de dimensiones si se suministran las dimensiones,
  • Comprobación de cada dimensión
asociativa arrayComprobación del tipo de elementosComprobación del tipo de elementos
stackComprobación del tipo de elementosComprobación del tipo de elementos
queueComprobación del tipo de elementosComprobación del tipo de elementos
listarComprobación del tipo de elementosComprobación del tipo de elementos

Atributos de extension

Los atributos extension disponibles son:
  • atributo de extensión para la gestión de los procedimientos de zombie:
    <zombie [ comentario = "texto "]>Se utiliza para definir una Procedure obsoleta (también llamada Procedure zombi). La palabra clave opcional comment se utiliza para indicar el texto que se mostrará en el error de compilación asociado al obsoleto Procedure. Para obtener más información, consulte Procedimientos de zombie.
  • Atributo extension para gestionar el depurador:
    Sin paso a paso> <Sin paso a paso>Permite especificar que la Procedure sea ignorada por el depurador cuando se depura en modo "Paso a paso.
  • Atributos de extensión específicos de los procedimientos locales, globales o internos:
    "<extension>"Indica que la Procedure es una extensión Procedure. Esta Procedure WLanguage se puede utilizar con un tipo WLanguage como una función WLanguage nativa. Para obtener más información, consulte extension Procedure.
    <automatic>Permite especificar que este Procedure se ejecute automáticamente tras el código de inicialización (de la ventana, Page o proyecto).

    Este atributo de extensión no es compatible con <Thread> y <principal Thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.

    Atención, este atributo de extensión no puede aplicarse a un Procedure interno.
    <fin Event>Se utiliza para indicar que este Procedure se ejecutará cuando el Process que contiene la llamada Procedure haya terminado. Para obtener más información, consulte "Al final del evento que contiene la llamada".

    Este atributo de extensión no es compatible con <Thread> y <principal Thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <fin Process>Se utiliza para indicar que este Procedure se ejecutará cuando el Process que contiene la llamada Procedure haya terminado.

    Este atributo de extensión no es compatible con <Thread> y <principal Thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
  • atributo de extensión para gestionar temporizadores:
    <call again[=tipo de llamada]>Permite especificar, en un Procedure llamado en un timer, el modo de funcionamiento de las llamadas posteriores. Este atributo de extensión debe utilizarse con <timer>. El valor opcional de este atributo extension puede ser:
    ignore
    (Valor predeterminado)
    La Procedure se llama inmediatamente. No hay tiempo de espera para llamar a Procedure. El procedimiento se llama una sola vez sin repetition.
    nuevoSe activa una nueva timer. La Procedure se llama en esta nueva timer.
    Precaución, el anterior timer no se ha detenido. Los temporizadores se acumularán en la memoria.
    Reinicio Se utiliza para reiniciar el temporizador automáticamente al final de la Procedure. <interval> se utiliza para definir el tiempo interval entre cada llamada al Procedure.
    Este atributo de extensión no es compatible con <Thread> y <principal Thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <delay=duración en centésimas de segundo>Se utiliza para especificar el tiempo de espera antes del inicio del procedimiento en una Timer( durante la primera llamada). Este atributo de extensión debe utilizarse con <timer>. El valor opcional delay en centésimas de segundo permite especificar este tiempo de espera.
    Si no se especifica este valor, deberá especificarlo cuando utilice <timer>.

    Este atributo de extensión no es compatible con <Thread> y <principal Thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <interval=duración en centésimas de segundo>Permite especificar la duración (interval) entre 2 llamadas al Procedure.
    Este atributo de extensión debe utilizarse con <timer> o <repetition>. El valor opcional interval en centésimas de segundo permite especificar este tiempo interval.
    Si no se especifica este valor, debe especificarse con <timer>.

    Este atributo de extensión no es compatible con <Thread> y <principal Thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <repetition [=número de repeticiones]>Se utiliza para especificar que la Procedure se llama varias veces en una fila (repeticiones). El valor opcional número de repeticiones se utiliza para especificar el número de llamadas al Procedure.
    • Si no se especifica este valor, la repetition seguirá hasta:
      • EndAutomatedProcedure.
      • se cierra el elemento al que pertenece la Procedure (ventana, Page, reporte).
      • se destruye la instancia a la que pertenece la Procedure (para más detalles sobre el concepto de instancia, véase la ayuda de Instanciar un objeto).
      • el fin de la aplicación (aplicación cerrada por el usuario, o uso de EndProgram).
    • Si se especifica este valor, se llamará a la Procedure tantas veces como el número especificado.
    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <timer [=intervalos en centésimas de segundo]>Se utiliza para especificar que el Procedure se ejecutará en un timer.
    Este atributo de extensión es equivalente a TimerSys. La repetición es automatic. El valor opcional interval en centésimas de segundo se utiliza para especificar el tiempo interval entre 2 repeticiones:
    • Si no se especifica este valor, es necesario especificar el tiempo interval entre 2 repeticiones utilizando <interval>.
    • Si no se especifica este valor, los valores de <retraso> y <interval> se inicializan con el valor del interval especificado.
    Este atributo de extensión no es compatible con <Thread> y <principal Thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
  • atributo de extensión para manejar hilos:
    <Thread>Permite especificar que el Procedure se ejecute en un Thread secundario. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.

    Este atributo de extensión no es compatible con <timer> y <main thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <principal Thread>Se utiliza para especificar que el Procedure se ejecutará en el Thread principal. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.

    Este atributo de extensión no es compatible con <timer> y <thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <principal Thread asíncrono>Indica que la Procedure se ejecutará en el hilo principal y que no es necesario esperar al final de la ejecución de esta Procedure. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.

    Este atributo de extensión no es compatible con <timer> y <thread>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <seguro thread>Se utiliza para especificar que el Procedure se ejecutará en un Thread secundario seguro. Para más detalles sobre los hilos, véase Principio de ejecución de hilos.

    Este atributo de extensión no es compatible con <timer>, <main thread> y <UI>.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    <contexto ligero de HFSQL>>.Activa la copy inmediata de una parte del contexto HFSQL actual.
    Solo se almacenan los directorios que contienen los archivos de datos en modo HFSQL Classic y/o las conexiones en modo HFSQL Client/Server.

    Este atributo de extensión debe utilizarse con <Thread>. Para más detalles sobre la gestión de los hilos, consulte la ayuda sobre ThreadExecute.
    Además, puede ver la ayuda sobre Procedimientos automáticos.
    Universal Windows 10 App Este atributo de extensión no está disponible.
    <Contexto completo de HFSQL>>.Activa la copy inmediata del contexto HFSQL actual.
    Se recomienda si el hilo debe tener en cuenta las posiciones actuales en los archivos y consultas del contexto llamador.

    Este atributo de extensión debe utilizarse con <Thread>. Para más detalles sobre la gestión de los hilos, consulte la ayuda sobre ThreadExecute.

    Además, puede ver la ayuda sobre Procedimientos automáticos.
    Universal Windows 10 App Este atributo de extensión no está disponible.
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 10/01/2023

Señalar un error o enviar una sugerencia | Ayuda local