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 / Operadores
  • ¿Cuándo se debe utilizar la indirección?
  • Identificación del objeto actual
  • Indirección sobre una estructura
  • Usando la indirección en los caminos en un Document XML
  • Limitaciones
  • Indicaciones en Java
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
Los operadores { y } se utilizan para acceder a un control, un Variable, un miembro de la clase o un elemento del archivo construyendo dinámicamente el nombre del control, Variable, miembro de la clase o elemento.
El { y } presentan varios beneficios:
  • Pasando en parámetro el nombre de un control, Variable, miembro de la clase o artículo.
  • Construyendo el nombre de un control, Variable, miembro de la clase o artículo por programación.
WEBDEV - Código Servidor Para utilizar una indirección en un control de una página, la opción "Permitir indirecciones (ralentiza la ejecución)" debe estar marcada (pestaña "Detalles" en la ventana del control description).
AndroidWidget Android Java No se pueden realizar indirecciones a las variables locales. Las indirecciones sólo pueden realizarse sobre variables globales. Una indirecta sobre una variable local de un Process desencadenará un error de "elemento desconocido".
Ejemplo
// Simple indirection
{"NAME"} = CustName               // Is equivalent to NAME=CustName
{"NAME"} = {"CU.CUSTNAME"}        // Is equivalent to NAME=CU.CUSTNAME
{"CUSTWIN.NAME"} = CustName        // Is equivalent to CUSTWIN.NAME=CustName
{"CUSTWIN"+".NAME"} = CustName     // Is equivalent to CUSTWIN.NAME=CustName

// Typed indirection
{"Name",indControl} = CustName

// Indirection with a file name in a variable
nFileName is string = "Customer"
{nFileName + ".Name"} = "Smith"
HAdd({nFileName})
// Indirection in a procedure
ControlName is string
ControlName = "EDT_EDIT1" // EDT_EDIT1 is the name of the control
// Call to a procedure used to make a control invisible
Make_Invisible(ControlName)

PROCÉDURE Make_Invisible(ControlN)
{ControlN}..State = Invisible
// Indirection with variable
AliasName is string
AliasName = PreviousWin()
// NAME is the name of the control
// CustName is the value to assign
{AliasName+".NAME"} = CustName
Abbrev is string
ItemName is string
{Abbrev+"."+ItemName} = CustName
{Abbrev+"."+ItemName} = {ControlName}
// Declare a class with two members
MyClass is Class
Member1 is string
Member2 is string
// Display the value of a member
GLOBAL procedure DisplayMember(Number)
// Retrieve the value of the selected global member
Value is string = {"::Member"+Number}
Info(Value)
c is cWord
var is Variable Description
Def is Definition
 
Def = GetDefinition(c)
// Retrieves the 2nd variable of the class: version of Word
var = Def..Variable[2]
 
Trace(var..Name) // Displays the variable name
Trace("Version of Word: ",{c, var}) // Displays the Word version
Sintaxis

Indirección simple Ocultar los detalles

{ <Expression> }
<Expression>: Cadena de caracteres
Expresión utilizada para identificar el control, la Variable o el elemento a utilizar. Se busca el elemento:
  • entre las variables,
  • según el número de puntos encontrados en el nombre:
    • 0 punto: buscar entre los controles, luego los ítems HFSQL.
    • 1 punto: buscar entre los elementos HFSQL, los controles y, a continuación, los parámetros de consulta.
    • mayor que 1 punto: buscar entre los controles.
  • entre los elementos especiales conservados para la compatibilidad (_Tabx por ejemplo, ....).
Se produce un error de WLanguage si esta expresión corresponde a una cadena vacía (""").

Indirección sobre un miembro de la clase Ocultar los detalles

{ <Expression> }
<Expression>: Cadena de caracteres
Expresión utilizada para identificar al miembro de la clase.
Si el miembro es:
  • global, utilice la siguiente sintaxis: {" :: Nombre del miembro"}
  • no global, utilice la siguiente sintaxis: {" : Nombre del miembro"}
Se produce un error de WLanguage si esta expresión corresponde a una cadena vacía (""").

Indirección sobre un miembro de la clase Ocultar los detalles

{ <Class> , <Member> }
<Class>: Cadena de caracteres
Instancia de clase
<Member>: Cadena de caracteres o Variable description Variable
Corresponde a:

Indirección especificando el tipo de elemento (optimiza la velocidad de ejecución) Ocultar los detalles

{ <Expression>, <Type> }
<Expression>: Cadena de caracteres
Expresión utilizada para identificar el control, la Variable o el elemento a utilizar. Se produce un error de WLanguage si esta expresión corresponde a una cadena vacía (""").
<Type>: Constante
Constante utilizada para especificar el tipo de elemento buscado:
indControlElemento buscado entre los controles y los grupos.
indConnectionElemento buscado entre las conexiones.
indReportElemento buscado entre los informes.
PHP Esta constante no está disponible en PHP.
indWindowElemento buscado entre las ventanas.
PHP Esta constante no está disponible en PHP.
indFileElemento buscado entre los expedientes.
indGPWElemento buscado entre los elementos de groupware usuario (utilizado para recuperar el estado inicial de los controles).
PHP Esta constante no está disponible en PHP.
indLinkElemento buscado entre los eslabones.
PHP Esta constante no está disponible en PHP.
indQueryParameterElemento buscado entre los parámetros de las consultas.
indItemElemento buscado entre los ítems.
indVariableElemento buscado entre las variables.
AndroidWidget Android JavaPHP El elemento sólo se busca dentro de las variables globales.
indPageElemento buscado entre las páginas.
PHP Sólo se puede acceder a la página actual.
Observaciones

¿Cuándo se debe utilizar la indirección?

La indirección se puede utilizar, por ejemplo:
  • Para acceder al valor de un elemento (control, Variable, elemento, ...):
    {s_ControlName} = 10
    ControlValue = {s_ControlName}
  • Para usar un Property:
    {s_ControlName}..Height = 10
  • Para programar manipular una columna de un control Tabla:
    {s_ColumnName, indControl}[Row_Number] = 10
  • A manipular una columna tabla:
    {s_TableName + "." +s_ColumnName, indControl}[Row_Number] = 10
WINDEVWEBDEV - Código ServidorReportes y ConsultasWindowsUniversal Windows 10 AppAndroidWidget Android iPhone/iPadJavaCódigo de Usuario (UMC)

Identificación del objeto actual

Para identificar el objeto actual, utilice las siguientes palabras clave:
  • MySelf: el actual control
  • MiVentana: la ventana actual
  • MyPage: la página actual
    Universal Windows 10 AppAndroidWidget Android iPhone/iPadJava Esta palabra clave no está disponible.
  • MiInforme: la reporte actual
    AndroidWidget Android Java Esta palabra clave no está disponible.
  • MiFuente: la fuente de datos actual.
  • MiArchivo: el archivo que liberó el disparador actual.
WINDEVWEBDEV - Código ServidorReportes y ConsultasWindowsUniversal Windows 10 AppiPhone/iPadJavaCódigo de Usuario (UMC)

Indirección sobre una estructura

Una indirección no puede contener un acceso a una estructura o a una instancia de clase. Sin embargo, se puede utilizar la siguiente sintaxis:
{<Structure Variable>}: member
WINDEVWEBDEV - Código ServidorReportes y ConsultasWindowsUniversal Windows 10 AppiPhone/iPadJavaCódigo de Usuario (UMC)

Usando la indirección en los caminos en un Document XML

Los operadores indirectos pueden ser utilizados para construir el ruta de un elemento en un Document XML.
Ejemplo:
sXMLDoc is string = [
<?xml version="1.0" encoding="UTF-8"?>
<Document>
<VersionInfo>
<Version>21</Version>
<Year>2016</Year>
</VersionInfo>
</Document>
]

xmlExample is xmlDocument = XMLOpen(sXMLDoc, fromString)

sParam is string = "WINDEV_Param"

// Direct reading of information ...
Trace(xmlExample.Document.VersionInfo.Version)

// Reading with part of XML path found in a variable
// (idem if file item, window parameter, method, ...)
sParameter is string = "VersionInfo"
Trace ({"xmlExample.Document." + sParameter + ".Version"})
WINDEVWEBDEV - Código ServidorReportes y ConsultasWindowsUniversal Windows 10 AppiPhone/iPadJavaCódigo de Usuario (UMC)

Limitaciones

El operador indirecto permite buscar un elemento por su nombre.
Por lo tanto, las siguientes operaciones no están permitidas en modo indirecto:
  • acceso a un miembro de una instancia de clase o de estructura distinta de la instancia de clase actual (: y:: ).
  • acceso a un subelemento en un control o array (operador []).
  • acceso a una subcadena (operador [[]]).
  • acceso a un Property (.. operador).
  • indirectamente (operador { }).
  • llamada a una Procedure o a un método de objeto de Automatización.
  • declarar una variable.
Observaciones:
  • Los operadores para acceder a un elemento (: y [] y [[]] y .. ) pueden utilizarse en el elemento obtenido por indirección. Por ejemplo:
    { <indirection> }: member

    { <indirection> } [subscript]

    { <indirection> } [[ subscript ]]

    { <indirection> }..property
  • Para llamar a una Procedure identificada por su nombre, utilice Ejecute o ExecuteProcess.
  • Para combinar estas operaciones de forma dinámica, tiene la posibilidad de utilizar la compilación dinámica (véase Compilar).
Java

Indicaciones en Java

Las indirecciones no son compatibles con las variables locales
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Example Use
//exemplo de indirection
gJanela01 is string = gJanela + "."+gLooper+"["+gLinha+"]."+gAttFoto
{gJanela01,indControl} = gsCheminDernièreCapture

HReset(pomv_parte_objeto_mov_local)
Busca is Buffer = HBuildKeyValue(pomv_parte_objeto_mov_local,chavecomposta, gEquipamento,gRegid_cab,gRegid_Item)
IF HReadSeek(pomv_parte_objeto_mov_local,chavecomposta,Busca,hIdentical) = True
IF HFound(pomv_parte_objeto_mov_local) = True
pomv_parte_objeto_mov_local.e001_id = gEquipamento
pomv_parte_objeto_mov_local.pocb_id = gRegid_cab
pomv_parte_objeto_mov_local.poit_id = gRegid_Item
pomv_parte_objeto_mov_local.pomv_data_emi = DateSys()+TimeSys()
pomv_parte_objeto_mov_local.pomv_foto = dLoadImage(gsCheminDernièreCapture,imgDefault)
IF HModify(pomv_parte_objeto_mov_local) = True THEN
gJanela01 = gJanela + "."+gLooper
LooperDisplay({gJanela01,indControl},taInit)
END
END
END
Boller
15 04 2021

Última modificación: 09/07/2022

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