PC SOFT

AYUDA EN LÍNEA
DE WINDEV, WEBDEV Y WINDEV MOBILE

Este contenido proviene de una traducción automática.. Haga clic aquí para ver la versión original en inglés.
  • ¿Cuándo debo utilizar la indirección?
  • Identificación del objeto actual
  • Indirección sobre una estructura
  • Uso de la indirección en las rutas de un documento 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/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Otros
Procedimientos almacenados
El { y } se utilizan para acceder a un control, una variable, un miembro de la clase o un elemento de archivo mediante la construcción dinámica del nombre del control, la variable, el miembro de la clase o el elemento.
El { y } presentan varios beneficios:
  • Pasar en parámetro el nombre de un control, variable, miembro de la clase o ítem.
  • Construcción del nombre de un control, variable, miembro de la clase o ítem por programación.
WEBDEV - Código Servidor Para utilizar un control indirecto con un control de página, este control debe ser un control "Dinámico".Para utilizar una indirección en un control de una página, se debe marcar la opción " TEXTE NON TRADUIT "Soporte para indirecciones (ralentiza la ejecución)" (58910) " (pestaña"Detalles" en la ventana de descripción del control).
AndroidWidget Android Java Las variables locales no soportan las indirecciones. Las indirecciones son soportadas sólo por las variables globales. Una indirección en una variable local de un proceso desencadenará un error de "elemento desconocido".
Versiones 16 y posteriores
Universal Windows 10 App Esta función está disponible para las aplicaciones de Windows Phone.
Nueva funcionalidad versión 16
Universal Windows 10 App Esta función está disponible para las aplicaciones de Windows Phone.
Universal Windows 10 App Esta función está disponible para las aplicaciones de Windows Phone.
Versiones 17 y posteriores
iPhone/iPad Esta función está disponible para las aplicaciones iPhone/iPad.
Nueva funcionalidad versión 17
iPhone/iPad Esta función está disponible para las aplicaciones iPhone/iPad.
iPhone/iPad Esta función está disponible para las aplicaciones iPhone/iPad.
Versiones 18 y posteriores
Universal Windows 10 App Esta característica está disponible en el modo de aplicaciones de Windows Store.
Widget Android Esta función está disponible en el modo Android Widget.
Nueva funcionalidad versión 18
Universal Windows 10 App Esta característica está disponible en el modo de aplicaciones de Windows Store.
Widget Android Esta función está disponible en el modo Android Widget.
Universal Windows 10 App Esta característica está disponible en el modo de aplicaciones de Windows Store.
Widget Android Esta función está disponible en el modo Android Widget.
Versiones 21 y posteriores
Universal Windows 10 App Esta función está disponible en el modo Universal Windows 10 App.
Apple Watch Esta función está disponible en el modo Apple Watch.
Nueva funcionalidad versión 21
Universal Windows 10 App Esta función está disponible en el modo Universal Windows 10 App.
Apple Watch Esta función está disponible en el modo Apple Watch.
Universal Windows 10 App Esta función está disponible en el modo Universal Windows 10 App.
Apple Watch Esta función está disponible en el modo Apple Watch.
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 Procédure DisplayMember(Number)
// Retrieve the value of the selected global member
Value is string = {"::Member"+Number}
Info(Value)
Versiones 16 y posteriores
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
Nueva funcionalidad versión 16
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
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

Simple indirection Ocultar los detalles

{ <Expression> }
<Expression>: Character string
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 (""").

Indirection on a class member Ocultar los detalles

{ <Expression> }
<Expression>: Character string
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 (""").
Versiones 16 y posteriores

Indirection on a class member Ocultar los detalles

{ <Class> , <Member> }
<Class>: Character string
Instancia de clase
<Member>: Character string or Variable Description variable
Corresponde a:
Nueva funcionalidad versión 16

Indirection on a class member Ocultar los detalles

{ <Class> , <Member> }
<Class>: Character string
Instancia de clase
<Member>: Character string or Variable Description variable
Corresponde a:

Indirection on a class member Ocultar los detalles

{ <Class> , <Member> }
<Class>: Character string
Instancia de clase
<Member>: Character string or Variable Description variable
Corresponde a:

Indirection by specifying the element type (optimizes the execution speed) Ocultar los detalles

{ <Expression>, <Type> }
<Expression>: Character string
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>: Constant
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 del groupware de 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.
PHP 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 debo utilizar la indirección?

La indirección se puede utilizar, por ejemplo:
  • Para acceder al valor de un elemento (control, variable, ítem, ....):
    {s_ControlName} = 10
    ControlValue = {s_ControlName}
  • Para usar una propiedad:
    {s_ControlName}..Height = 10
  • A manipular una columna de una memoria 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 ConsultasWindowsAndroidWidget Android iPhone/iPadWindows MobileUniversal Windows 10 AppJavaCódigo de Usuario (UMC)

Identificación del objeto actual

Para identificar el objeto actual, utilice las siguientes palabras clave:
  • MySelf: el control actual
  • MiVentana: la ventana actual
  • MyPage: la página actual
    AndroidWidget Android iPhone/iPadUniversal Windows 10 AppJava 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 ConsultasWindowsiPhone/iPadWindows MobileUniversal Windows 10 AppJavaCó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 ConsultasWindowsiPhone/iPadWindows MobileUniversal Windows 10 AppJavaCódigo de Usuario (UMC)

Uso de la indirección en las rutas de un documento XML

Los operadores de indirección pueden ser usados para construir el ruta de un elemento en un documento 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 ConsultasWindowsiPhone/iPadWindows MobileUniversal Windows 10 AppJavaCó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 de control o array (operador de []).
  • el acceso a una sub-parte de la cadena ( [[]] operador).
  • acceso a una propiedad (... operador).
  • indirectamente (operador { }).
  • llamar a un procedimiento o a un método de objeto Automatización.
  • declarando una variable.
Notas:
  • Los operadores para acceder a un elemento (: y [] y [[]] y ..) se puede utilizar en el elemento obtenido por indirección. Algunos ejemplos:
    { <indirection> }: member

    { <indirection> } [subscript]

    { <indirection> } [[ subscript ]]

    { <indirection> }..property
  • Para llamar a un procedimiento identificado por su nombre, utilice Ejecución o ExecuteProcess.
  • Para combinar estas operaciones dinámicamente, tiene la posibilidad de utilizar la compilación dinámica (véase Compile).
Java

Indicaciones en Java

Las variables locales no soportan las indirecciones.
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Exemplo Indirection
https://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/3239-procedure-com-indirection-para-selecionar-registro-uma-grid-3240/read.awp
BOLLER
24 06 2019
Video Indirection
https://youtu.be/ehyDAM2lLOA

https://windevdesenvolvimento.blogspot.com/2019/06/dicas-2143-windev-webdev-mobile.html

// btn_calcula
nome_campo is string=""
FOR CONTADOR=1 TO 5
nome_campo="EDT_VALOR_"+CONTADOR
EDT_VALOR_RESULTADO+={nome_campo}
END
amarildo
06 06 2019
Example Indirection
PROCEDURE UI_CargaComboClientes(InternalWindow_COMBO_QRY_Clientes_Ativas)

NomeCliente is string = {InternalWindow_COMBO_QRY_Clientes_Ativas}..DisplayedValue
IF NomeCliente <> ""
ListDeleteAll({InternalWindow_COMBO_QRY_Clientes_Ativas,indControl})
//filtro prof e empresas
SqlCodigo is string = [
SELECT
T001_CLIENTES.T001_ID_USUARIO AS T001_ID_USUARIO,
T001_CLIENTES.T001_NOME AS T001_NOME
FROM
T001_CLIENTES
WHERE
T001_CLIENTES.AUDT_Excluido = 'N'
AND T001_CLIENTES.T001_NOME LIKE '%{ParamT001_NOME}%'
]
X, Codigo is int
Matricula,Cliente is string
SqlCodigo = Replace(SqlCodigo,"{ParamT001_NOME}",NomeCliente,IgnoreCase)
dsQueryCombo is Data Source

...
BOLLER
04 04 2019
Exemplo Indirection Operator
Exemplo Indirection Operator

//gravar numeracao
EDT_Numeracao=""
n_contador is int=0
s_nome_campo is string=""
EDT_Quantos_numeros=0
//Estou Fazendo um Loop para ir ate o edt 30
//Exemplo:
//edt_num1
//edt_num2
//edt_num3
//...
//edt_num30

LOOP
n_contador++
s_nome_campo="EDT_num_"+n_contador // edt_num1 edt_num2 ...
// aqui é como se ficasse => s_nome_campo=EDT_NUM1 / snome_campo=EDT_NUM2... E ASSIM POR DIANTE
EDT_Numeracao+={s_nome_campo}+"|" // edt_numeracao=edT_num_1 ..
// AQUI vai pegar o resultado de cada edt_num que coloquei no s_nome_campo
//exemplo:
// edt_numeracao=28 // Resultado do edt_num1
IF {s_nome_campo}<>"" THEN
EDT_Quantos_numeros++
END
IF n_contador>=30 THEN
BREAK
END
END
//no final o edt_numeracao vai ficar assim:
//28|29|30|31

// Agora para Recuperar Informacao
//recuperar numeros
//28|29|30|31
//vou recuperar cada quantidade que esta em |
n_contador=0
s_nome_campo=""
//na
FOR EACH STRING s_numero OF EDT_Numeracao SEPAREE BY "|"
n_contador++
s_nome_campo="EDT_num_"+n_contador
{s_nome_campo}=s_numero
IF n_contador>=30 THEN BREAK
END

//Blog com Video e Exemplo
http://windevdesenvolvimento.blogspot.com.br/2016/08/curso-windev-string-016-numeracao-campo.html
https://www.youtube.com/watch?v=jdFjoo0Tc78
De matos AMARILDO
19 08 2016