Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
HTML

<div id="main-content" class="wiki-content group">
	<script type='text/javascript'>
		//<![CDATA[
		AJS.toInit(function() {
			if (Cloak) {
				Cloak.closeHTML = "<span class=\'cloakDefaultClose\'/>";
				Cloak.openHTML = "<span class=\'cloakDefaultOpen\'/>";
				Cloak.toggleZone = true;
				Cloak.memoryDuration = 0;
				Cloak.memoryPrefix = "contentId:108661156";
				Cloak.memoryPath = "/";
			}
		});// ]]>
	</script>
	<script type='text/javascript'>
		//<![CDATA[
		AJS.toInit(function() {
			if (jQuery.composition && jQuery.composition.deck) {
				jQuery.composition.deck.memoryDuration = 0;
			}
		});// ]]>
	</script>
	<h1 id="id-5.Widgetdeconsultarápida-Objetivo">
		<span style="color: rgb(0, 51, 102);">Objetivo<>Objective</span>
	</h1>
	<p>
		LaQuick consultaquery rápidais esresponsible responsablefor deshowing presentarthe aluser usuariodata losof datosindicators deto
		indicadoresbe definidosdefined porby lasthe áreasbusiness deareas negociofor paraeach cadaof unothe deTOTVS los
		ERPs TOTVS. La&#160;obtención&#160;de estas informaciones&#160;esThis
		realizada&#160;a través de servicios REST&#160;implementados por cada
		uno de los segmentosinformation is obtained through REST services implemented by each of
		the segments.&#160;<span
			style="font-size: 10.0pt; line-height: 13.0pt;">El>The <em>widget</em>quick
			dequery consulta<em>widget</em> rápidawill serábe semejantesimilar alto dethe la figura a continuaciónfigure below:
		</span>
	</p>
	<p>
		<span style="font-size: 10.0pt; line-height: 13.0pt;"><img
			class="confluence-embedded-image image-center" width="600"
			src="http://tdn.totvs.com/download/attachments/108661156/QVWidget.jpg?version=1&modificationDate=1408537173000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/108661156/QVWidget.jpg?version=1&modificationDate=1408537173000&api=v2"></span>
	</p>
	<h1 id="id-5.Widgetdeconsultarápida-Cadastrandoasconsultas">
		<span style="color: rgb(0, 51, 102);">Registro>Registering de consultas<queries</span>
	</h1>
	<p>
		ElQuick registroqueries demust consultabe rápidaregistered debethrough realizarsethe a través del formularioform <strong>FRM0015
		<strong>FRM0015 	- Indicadores<Indicators</strong>. EnThis esteregistration registromust es necesario
		llenar con la información de la consultabe filled out with the query
		information.
	</p>
	<div class="aui-message warning shadowed information-macro">
		<span class="aui-icon icon-warning">Icon</span>
		<div class="message-content">
			<p style="text-align: center;">Para que sea posible la>For the query to be viewed in
				visualizaciónFluig, deit lamust consulta rápida en el Fluigbe released, la misma debe estar
				liberadathat is, esits decir,development el desarrollo de la misma debe ser finalizada amust be
				travéscompleted dethrough lathe herramientaGOLD GOLDtool.</p>
		</div>
	</div>
	<p>&#160;</p>
	<p>&#160;</p>
	<blockquote>
		<p>El<p>The name nombreof dethe laquery consultamust debefollow seguirthe elstandard estándarcomposed compuestoof porthe
			elLogix código del sistema Logixsystem code, lathe letraletter "i" yand lathe secuenciaindicator deidentification
			identificación del indicadorsequence.</p>
	</blockquote>
	<p>
		<img class="confluence-embedded-image image-center"
			src="http://tdn.totvs.com/download/attachments/108661156/indicador.jpg?version=1&modificationDate=1404247516000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/108661156/indicador.jpg?version=1&modificationDate=1404247516000&api=v2">
	</p>
	<h2 id="id-5.Widgetdeconsultarápida-Desenvolvimento">
		<span style="color: rgb(0, 51, 102);">Desarrollo<>Development</span>
	</h2>
	<p>
		<span style="color: rgb(0, 0, 0);">Después>After decreation, la creación, debethe 4GL
			desarrollarsesource must labe fuentedeveloped 4GLwith conthe lasdefault funcionesfunctions estándaresfor paraquick laquery
			ejecución de la consulta rápida enexecution on Fluig.&#160;</span><span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;">Actualmente>Currently,
			tresthree funcionesfunctions sonare necesariasrequired parafor cada indicador, siendoeach indicator:</span>
	</p>
	<ol>
		<li><span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;"><strong>START:</strong>&#160;funciónfunction
				responsableresponsible porfor retornarreturning datosinitial inicialesquick de la consulta rápidaquery data;</span></li>
		<li><span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;"><strong>SEARCH:</strong>&#160;funciónfunction
				responsableresponsible parafor retornarreturning los datos de la consultaquery data; y<and</span></li>
		<li><span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;"><strong>AUTO_COMPLETE:</strong>&#160;funciónfunction
				responsableresponsible porfor retornarreturning lasthe informacionesauto-complete delinformation autocompletarof delthe <em>widget</em>
				enin Fluig.</span><span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;"><br /></span><br />
			<span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;"><br /></span></li>
	</ol>
	<div class="aui-message warning shadowed information-macro">
		<span class="aui-icon icon-warning">Icon</span>
		<div class="message-content">
			<p style="text-align: center;">Hasta>So ahorafar, no será posible it will not be possible to
				efectuaropen laa llamadadefault delsecurity LOG decall seguridadof estándarLOGIX delin LOGIXthe enquick lasquery
				funciones de la consulta rápida. Estas consultas no se registran enfunctions. These queries are not registered on the menu and are not
				elgiven menúpermissions y no se dan permisos en el in the ERP, apenasonly víavia Fluig Identity. Therefore, if
				Porthe estefunctions motivohave siLOG lassecurity funcionescalls, poseenquery llamadasexecution delwill LOG debe
				seguridad, la ejecución de la consulta será interrumpidainterrupted.</p>
		</div>
	</div>
	<p>
		<span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;"><br /></span>
	</p>
	<h2 id="id-5.Widgetdeconsultarápida-FunçãodeSTART">
		<span style="color: rgb(0, 51, 102);">Función>START de START<Function</span>
	</h2>
	<p>
		<span style="color: rgb(0, 0, 0);">En>In elthe 4GL, elthe nombrename deof estathis
			funciónfunction debemust tenerhave elthe sufijosuffix&#160;<strong>_indicator_start,&#160;</strong>nostrong>cannot
			podráhave parameters poseerand parámetrosmust yreturn deberáa retornarRECORD paravariable elto Fluig unawith variablethe
			RECORDassembly coninformation lasfor informacionesthe dequick montajequery del <em>widget</em>, desuch as:
			consulta rápida, como:
		<</span>
	</p>
	<ul>
		<li><span style="color: rgb(0, 0, 0);">los>the filtrosfilters que sethat
				podráncan be realizarperformed;</span></li>
		<li><span style="color: rgb(0, 0, 0);">las>the columnascolumns quethat
				compondránwill lacompose grillathe congrid loswith datosthe dequery la consultadata;</span></li>
		<li><span style="color: rgb(0, 0, 0);">la>the listalist de filtrosof
				predefinidospredefined filters quethat secan podránbe utilizarused; y<and</span></li>
		<li><span style="color: rgb(0, 0, 0);">la>a listalist conwith elthe
				nombrenames deof losthe programasprograms quethat secan podránbe ejecutarrun afrom partir de la
				consultathe query.</span></li>
	</ul>
	<h5 id="id-5.Widgetdeconsultarápida-Exemplo">
		<span style="color: rgb(0, 51, 102);">Exemplo<>Example</span>
	</h5>
	<div class="code panel pdl" style="border-width: 1px;">
		<div class="codeContent panelContent pdl">
			<pre class="theme: Eclipse; brush: plain; gutter: false"
				style="font-size: 12px;">#------------------------------#
FUNCTION logi1_indicator_start()
#------------------------------#
    DEFINE lr_start RECORD
                        filters   ARRAY[2] OF RECORD
                                      table_name  LIKE frm_column.table_name,
                                      column_name LIKE frm_column.column_name
                                  END RECORD,
                                  
                        columns   ARRAY[3] OF RECORD
                                      table_name  LIKE frm_column.table_name,
                                      column_name LIKE frm_column.column_name,
                                      can_order   SMALLINT
                                  END RECORD,
                                  
                        selection ARRAY[3] OF
                                  RECORD
                                      code        CHAR(03),
                                      label       CHAR(50)
                                  END RECORD,
                                  
                        actions   ARRAY[2] OF
                                  RECORD
                                      code        CHAR(08),
                                      label       CHAR(50)
                                  END RECORD
                    END RECORD
                                               
    #Define#Defines lasthe columnasquick dequery filtro de la consulta rápidafilter columns
    LET lr_start.filters[1].table_name  = 'log_grupos'
    LET lr_start.filters[1].column_name = 'grupo'
    
    LET lr_start.filters[2].table_name  = 'log_grupos'
    LET lr_start.filters[2].column_name = 'des_grupo'
    
    #Define#Defines lasthe columnasquick de la consulta rápidaquery columns
    LET lr_start.columns[1].table_name  = 'usuarios'
    LET lr_start.columns[1].column_name = 'cod_usuario'
    LET lr_start.columns[1].can_order   = TRUE
    
    LET lr_start.columns[2].table_name  = 'usuarios'
    LET lr_start.columns[2].column_name = 'nom_funcionario'
    LET lr_start.columns[2].can_order   = TRUE
    
    LET lr_start.columns[3].table_name  = 'usuarios'
    LET lr_start.columns[3].column_name = 'ind_admlog'
    LET lr_start.columns[3].can_order   = FALSE
    
    #Define#Defines cuáleswhich valoresvalues estaránwill enbe lain selecciónfilter de filtrosselection
    LET lr_start.selection[1].code  = '*'
    LET lr_start.selection[1].label = 'Todos losos usuariosusuários'
    
    LET lr_start.selection[2].code  = 'S'
    LET lr_start.selection[2].label = 'SolamenteSomente administradores'
    
    LET lr_start.selection[3].code  = 'N'
    LET lr_start.selection[3].label = 'SolamenteSomente usuariosusuários comunescomuns'
    
    #Define#Defines cuáleswhich programasprograms podráncan serbe llamadoscalled porby lathe consultaquery
    LET lr_start.actions[1].code  = 'log02700'
    LET lr_start.actions[1].label = 'UsuariosUsuários'
    
    LET lr_start.actions[2].code  = 'log02720'
    LET lr_start.actions[2].label = 'Grupos deldo usuariousuário'
    
    RETURN lr_start
END FUNCTION</pre>
		</div>
	</div>
	<p>
		<span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;">La>Execution
			ejecuciónof the deabove lafunction funciónwill anteriorallow permitiráthe lainitialization iniciaciónof del </the quick
			query </span><em
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;">widget</em><span
			style="color: rgb(0, 0, 0); font-size: 10.0pt; line-height: 13.0pt;">
			deand consultawill rápidacreate yit loaccording crearáto semejantethe a la pantalla a
			continuaciónscreen below:</span>
	</p>
	<p>
		<span style="color: rgb(0, 0, 0);"><img
			class="confluence-embedded-image image-center" width="600"
			src="http://tdn.totvs.com/download/attachments/108661156/QVWIDGET2.jpg?version=1&modificationDate=1408538629000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/108661156/QVWIDGET2.jpg?version=1&modificationDate=1408538629000&api=v2"></span>
	</p>
	<h2 id="id-5.Widgetdeconsultarápida-FunçãodeSEARCH">
		<span style="color: rgb(0, 0, 0);"><span
			style="color: rgb(0, 51, 102);">Función>SEARCH de SEARCH<Function</span></span>
	</h2>
	<p>
		En elIn 4GL, elthe nombrename deof estathis funciónfunction debemust tenerhave elthe sufijosuffix&#160;<strong>_indicator_search</strong>,
		debe tener como parámetroswhich must have the following parameters:
	</p>
	<ol>
		<li>nombre<li>name deof lathe columnafilter decolumn filtroselected seleccionada por el usuarioby user;</li>
		<li>valor<li>value delof filtrofilter informadoentered porby el usuariouser;</li>
		<li>valor<li>value delof filtropre-defined predefinidofilter seleccionadoselected;</li>
		<li>nombre<li>name deof la columna de ordenaciónsorting column;</li>
		<li>tipo<li>sorting de ordenacióntype;</li>
		<li>cantidad<li>amount deof líneaslines porper páginapage; y<and</li>
		<li>número<li>number deof lapages páginaof decurrent consulta actualquery.</li>
	</ol>
	<p>Todos<p>All these estosparameters parámetrosmust debenbe serconsidered consideradoswhen alperforming ejecutara laquery
		consultaon enthe eldata bancobank deand datosthe yreturn elmust retornobe debea serRECORD una variable
		RECORD conwith:</p>
	<ol>
		<li>los datos de la consulta;<li>query data;</li>
		<li>cantidad<li>total totalamount deof registrosrecords encontradosfound enin elthe bancodata de datosbank;</li>
		<li>cantidad<li>total amount totalof derecords registrosthat quewill sebe retornaránreturned alto Fluig;</li>
		<li>número<li>total totalnumber deof páginaspages conformeaccording ato lathe consultaquery efectuadamade; y<and</li>
		<li>número<li>page denumber laof página actual de consultacurrent query.</li>
	</ol>
	<h5 id="id-5.Widgetdeconsultarápida-Exemplo.1">
		<span style="color: rgb(0, 51, 102);">Ejemplo<>Example</span>
	</h5>
	<div class="code panel pdl" style="border-width: 1px;">
		<div class="codeContent panelContent pdl">
			<pre class="theme: Eclipse; brush: plain; gutter: false"
				style="font-size: 12px;">#---------------------------------------------------------------------------------------------------------------#
FUNCTION logi1_indicator_search(l_filter_column,l_filter_value,l_selection,l_sort_col,l_sort_order,l_rows,l_page)
#---------------------------------------------------------------------------------------------------------------#
    DEFINE l_filter_column CHAR(50),  #Coluna#Filter de filtrocolumn (opcionaloptional)
           l_filter_value  CHAR(300), #Valor#Value delof filtrofilter decolumn la columnaabove anterior (opcionaloptional)
           l_selection     CHAR(01),  #Valor#Selected seleccionadovalue enof la lista de filtrosfilter list (opcionaloptional)
           l_sort_col      CHAR(50),  #Columna#Sorting de ordenacióncolumn (opcionaloptional)
           l_sort_order    CHAR(04),  #Tipo#Sorting de ordenacióntype ASC oor DESC (opcionaloptional)
           l_rows          SMALLINT,  #Máximo#Maximum derecords registrosper por páginapage
           l_page          SMALLINT   #Página#Current actualsearch de investigaciónpage
    
    DEFINE l_sql_stmt      CHAR(500),
           l_sql_count     CHAR(500),
           l_where_clause  CHAR(250)
           
    DEFINE l_ind           SMALLINT,
           l_position      INTEGER
    
    DEFINE lr_search       RECORD
                               data  ARRAY[60] OF 
                                     RECORD     #Lista#List conwith los resultados de la consultaquery results
                                         cod_usuario     LIKE usuarios.cod_usuario,
                                         nom_funcionario LIKE usuarios.nom_funcionario,
                                         ind_admlog      LIKE usuarios.ind_admlog
                                     END RECORD,
                               count SMALLINT,  #Total amount of derecords registrosthat quewill sebe retornaránreturned
                               total INTEGER,   #Total deamount registrosof encontradosrecords enfound lain consultaquery (sinwithout lapage paginaciónnumber)
                               cpage INTEGER,   #Página#Current derecords registros actualpage
                               pages SMALLINT   #Total denumber páginasof resultantespages deresulting lafrom consultaquery
                           END RECORD
                           
    INITIALIZE lr_search.* TO NULL
                           
    #Verifica#Checks lacolumn columnaand yfilter elentered filtro informado por parámetrofor parameter
    IF  l_filter_column IS NOT NULL AND l_filter_value IS NOT NULL THEN
        LET l_where_clause = "UPPER(g."||l_filter_column CLIPPED||") LIKE '%"||UPSHIFT(l_filter_value) CLIPPED||"%'"
    ELSE
        LET l_where_clause = "1=1"
    END IF
    
    #Adiciona#Adds ela filtroselected conforme seleccionadofilter
    IF  l_selection IS NOT NULL AND l_selection &lt;> "*" THEN
        LET l_where_clause = l_where_clause CLIPPED," AND u.ind_admlog = '",l_selection CLIPPED,"'"
    END IF
    
    #Monta#Assembles elthe SQL deof lathe consultaquick rápidaquery
    LET l_sql_stmt = "SELECT DISTINCT",
                           " u.cod_usuario,",
                           " u.nom_funcionario,",
                           " u.ind_admlog",
                      " FROM usuarios u",
                      " LEFT OUTER JOIN log_usu_grupos l",
                        " ON l.usuario = u.cod_usuario",
                      " LEFT OUTER JOIN log_grupos g",
                        " ON g.grupo   = l.grupo",
                     " WHERE ",l_where_clause
    
    #Assembles #Montathe elCOUNT SQL de COUNT (escannot necesariocontain ser sin ORDER BY)
    LET l_sql_count = "SELECT COUNT(*) FROM ("||l_sql_stmt CLIPPED||") t"
    
    #Atribuye el#Attributes ORDER BY parafor elthe SQLquick de la consulta rápidaquery SQL
    IF  l_sort_col IS NOT NULL AND l_sort_order IS NOT NULL THEN
        LET l_sql_stmt  = l_sql_stmt CLIPPED||" ORDER BY "||l_sort_col CLIPPED||" "||l_sort_order
    ELSE
        LET l_sql_stmt  = l_sql_stmt CLIPPED||" ORDER BY 1"
    END IF
    
    WHENEVER ERROR CONTINUE
    PREPARE var_indicator_count FROM l_sql_count
    WHENEVER ERROR STOP
    IF  sqlca.sqlcode &lt;> 0 THEN
        CALL QS_consoleDebugMessage(l_sql_count)
        CALL log0030_processa_err_sql("PREPARE SQL","var_indicator_count",1)
        RETURN NULL
    END IF
    
    WHENEVER ERROR CONTINUE
    EXECUTE var_indicator_count INTO lr_search.total
    WHENEVER ERROR STOP
    IF  sqlca.sqlcode &lt;> 0 THEN
        CALL log0030_processa_err_sql("EXECUTE SQL","var_indicator_count",1)
        FREE var_indicator_count
        RETURN NULL
    END IF
    
    #Cuenta#Counts lathe cantidadnumber deof páginapages quethat resultóthe laquery consultaproduced
    LET lr_search.pages = LOG_round(lr_search.total/l_rows,0)
    
    #Verifica#Checks siof lathe páginapage informadainformed excedióexceeded elthe totalnumber deof páginaspages
    IF  lr_search.pages > 0 THEN
        IF  l_page > lr_search.pages THEN
            LET lr_search.cpage = lr_search.pages
        ELSE
            LET lr_search.cpage = l_page
        END IF
    ELSE
        LET lr_search.pages = 1
        LET lr_search.cpage = l_page
    END IF
    
    WHENEVER ERROR CONTINUE
    FREE var_indicator_count
    PREPARE var_indicator_search FROM l_sql_stmt
    WHENEVER ERROR STOP
    IF  sqlca.sqlcode &lt;> 0 THEN
        CALL QS_consoleDebugMessage(l_sql_stmt)
        CALL log0030_processa_err_sql("PREPARE SQL","var_indicator_search",1)
        RETURN NULL
    END IF
    
    WHENEVER ERROR CONTINUE
    DECLARE cq_indicator_search CURSOR FOR var_indicator_search
    WHENEVER ERROR STOP
    IF  sqlca.sqlcode &lt;> 0 THEN
        CALL log0030_processa_err_sql("DECLARE CURSOR","cq_indicator_search",1)
        FREE var_indicator_search
        RETURN NULL
    END IF
    
    WHENEVER ERROR CONTINUE
    OPEN cq_indicator_search
    WHENEVER ERROR STOP
    IF  sqlca.sqlcode &lt;> 0 THEN
        CALL log0030_processa_err_sql("OPEN CURSOR","cq_indicator_search",1)
        FREE var_indicator_search
        RETURN NULL
    END IF
    
    #Calculates the #Calculaposition laof posiciónthe delcurrent registrorecord actualaccording comoto lathe páginapage yand lathe cantidadamount deof
    #líneas#lines porper páginapage
    LET l_ind = 1
    LET l_position = ((l_rows * l_page) - l_rows) + 1
    
    WHILE TRUE
        WHENEVER ERROR CONTINUE
        FETCH ABSOLUTE l_position cq_indicator_search INTO lr_search.data[l_ind].*
        WHENEVER ERROR STOP
        IF  sqlca.sqlcode &lt;> 0 THEN
            IF  sqlca.sqlcode &lt;> NOTFOUND THEN
                CALL log0030_processa_err_sql("FETCH CURSOR","cq_indicator_search",1)
            END IF
            
            EXIT WHILE
        END IF
        
        LET l_ind = l_ind + 1
        LET l_position = l_position + 1
        
        #No#Cannot puedeexceed excederthe ellimit límiteof derecords registrosof por páginapage
        IF  l_ind > l_rows THEN
            EXIT WHILE
        END IF
    END WHILE
    
    WHENEVER ERROR CONTINUE
    CLOSE cq_indicator_search
    FREE  cq_indicator_search
    WHENEVER ERROR STOP
    
    LET lr_search.count = l_ind - 1
    RETURN lr_search
END FUNCTION</pre>
		</div>
	</div>
	<h2 id="id-5.Widgetdeconsultarápida-FunçãoAUTO-COMPLETE">
		<span style="color: rgb(0, 51, 102);">Función AUTO-COMPLETE<>AUTO-COMPLETE Function</span>
	</h2>
	<p>
		<span style="color: rgb(0, 0, 0);">En el>In 4GL, elthe nombrename deof estathis
			funciónfunction debemust tenerhave elthe sufijosuffix&#160;<strong>_indicator_autocomplete</strong>,
			debe tener como parámetrowhich must have the following parameters:
		</span>
	</p>
	<ol>
		<li><span style="color: rgb(0, 0, 0);">nombre>name deof lacolumn
				columnaselected seleccionadofor parathe filtrofilter; y<and</span></li>
		<li><span style="color: rgb(0, 0, 0);">y>value elof valor delfilter
				filtroentered informado por el usuarioby user.</span></li>
	</ol>
	<p>
		<span style="color: rgb(0, 0, 0);">La>The return devoluciónmust debebe sera unaRECORD
			variable RECORD conwith:</span>
	</p>
	<ol>
		<li><span style="color: rgb(0, 0, 0);">los datos de la
				consulta>query data; y<and</span></li>
		<li><span style="color: rgb(0, 0, 0);">el>total totalamount deof
				registrosrecords encontradosfound enin elthe banco de datosdata bank..</span></li>
	</ol>
	<h5 id="id-5.Widgetdeconsultarápida-Exemplo.2">
		<span style="color: rgb(0, 51, 102);">Ejemplo<>Example</span>
	</h5>
	<div class="code panel pdl" style="border-width: 1px;">
		<div class="codeContent panelContent pdl">
			<pre class="theme: Confluence; brush: plain; gutter: true"
				style="font-size: 12px;">#-------------------------------------------------------------------#
FUNCTION logi1_indicator_autocomplete(l_filter_column,l_filter_value)
#-------------------------------------------------------------------#
    DEFINE l_filter_column CHAR(50), #Columna#Filter decolumn filtro (opcionaloptional)
           l_filter_value  CHAR(300) #Valor#Value delof filtrofilter decolumn laabove columna anterior (opcionaloptional)
    
    DEFINE l_sql_stmt      CHAR(500),
           l_sql_count     CHAR(500),
           l_where_clause  CHAR(250)
           
    DEFINE l_ind           SMALLINT,
           l_position      INTEGER
    
    DEFINE lr_autocomplete RECORD
                               fechadata  ARRAY[500] OF CHAR(200),
                               count SMALLINT 
                           END RECORD
                           
    INITIALIZE lr_autocomplete.* TO NULL
                           
    #Verifica#Checks lacolumn columnaand yfilter elentered filtro informado por parámetrofor parameter
    IF  l_filter_column IS NOT NULL AND l_filter_value IS NOT NULL THEN
        LET l_where_clause = "UPPER(g."||l_filter_column CLIPPED||") LIKE '%"||UPSHIFT(l_filter_value) CLIPPED||"%'"
    ELSE
        LET l_where_clause = "1=1"
    END IF
    
    #Assembles #Montathe elauto-complete SQLof delthe autocompletarSQL
    LET l_sql_stmt = "SELECT g.",l_filter_column CLIPPED,
                     "  FROM log_grupos g",
                     " WHERE ",l_where_clause CLIPPED,
                     " ORDER BY 1"
    
    WHENEVER ERROR CONTINUE
    PREPARE var_indicator_autocomplete FROM l_sql_stmt
    WHENEVER ERROR STOP
    IF  sqlca.sqlcode &lt;> 0 THEN
        CALL QS_consoleDebugMessage(l_sql_stmt)
        CALL log0030_processa_err_sql("PREPARE SQL","var_indicator_autocomplete",1)
        RETURN NULL
    END IF
    
    WHENEVER ERROR CONTINUE
    DECLARE cq_indicator_autocomplete CURSOR FOR var_indicator_autocomplete
    WHENEVER ERROR STOP
    IF  sqlca.sqlcode &lt;> 0 THEN
        CALL log0030_processa_err_sql("DECLARE CURSOR","cq_indicator_autocomplete",1)
        FREE var_indicator_autocomplete
        RETURN NULL
    END IF
    
    WHENEVER ERROR CONTINUE
    LET l_ind = 1
    FOREACH cq_indicator_autocomplete INTO lr_autocomplete.data[l_ind]
        IF  sqlca.sqlcode &lt;> 0 THEN
            CALL log0030_processa_err_sql("FOREACH CURSOR","cq_indicator_autocomplete",1)
            EXIT FOREACH
        END IF
        
        LET l_ind = l_ind + 1
        
        IF  l_ind > 500 THEN
            EXIT FOREACH
        END IF
    END FOREACH
    
    FREE cq_indicator_autocomplete
    WHENEVER ERROR STOP
    
    LET lr_autocomplete.count = l_ind - 1
    RETURN lr_autocomplete
END FUNCTION</pre>
		</div>
	</div>
	<p>
		<span style="color: rgb(0, 51, 102);"><span
			style="color: rgb(0, 0, 0);">Esta>This funciónfunction esis ejecutadaexecuted cuandowhen
				elthe usuariouser informaenters algúna filtroquery enin lathe consultafilter, as comoshown sein muestrathe enexample
				el ejemplo a seguirbelow:</span></span>
	</p>
	<p>
		<span style="color: rgb(0, 51, 102);"><img
			class="confluence-embedded-image image-center" width="600"
			src="http://tdn.totvs.com/download/attachments/108661156/QVWidget3.jpg?version=1&modificationDate=1408539017000&api=v2"
			data-image-src="http://tdn.totvs.com/download/attachments/108661156/QVWidget3.jpg?version=1&modificationDate=1408539017000&api=v2"></span>
	</p>
	<h2
		id="id-5.Widgetdeconsultarápida-Posicionamentoautomáticonoregistroselecionado">
		<span style="color: rgb(0, 51, 102);">Posicionamiento>Automatic positioning in
			automáticothe en el registro seleccionado<selected record</span>
	</h2>
	<p>
		CuandoWhen elthe usuariouser, in the enquick elquery <em>widget</em>, selects dea consultarecord rápida,in
		seleccionethe ungrid registroand enclicks laone grillaof ythe hagaactions clicselected, enthe unaexecution deof las accionesthe
		seleccionadasselected Logix esprogram necesariomust quealready ladisplay ejecuciónthe delselected programarecord Logixhas
		seleccionado ya exhiba el registro seleccionado ya consultadobeen queried.
	</p>
	<p>
		ParaFor quethat esoto puedaoccur, serthe realizado es necesario alterar los programas
		que son informados como acciones en la función de&#160;<strong>START</strong>.
		En estos programas se debe incluir una verificación para obtener los
		parámetros de ejecución utilizando la funciónprograms that are reported as actions in the <strong>START</strong>
		function must be changed. These programs must include a verification
		to obtain the execution parameters, using the <strong>APPLICATION_getNumArgs</strong>&#160;yfunction,
		yaalready efectuarperforming laa operaciónquery de consultaoperation.
	</p>
	<h5 id="id-5.Widgetdeconsultarápida-Exemplo.3">
		<span style="color: rgb(0, 51, 102);">Ejemplo<>Example</span>
	</h5>
	<div class="code panel pdl" style="border-width: 1px;">
		<div class="codeContent panelContent pdl">
			<pre class="theme: Confluence; brush: plain; gutter: true"
				style="font-size: 12px;">#-----------------#
FUNCTION log02720()
#-----------------#
    DEFINE l_usuario LIKE log_usu_grupos.usuario
    IF  LOG_initApp("PADRAO") > 0 THEN
        RETURN
    END IF
    LET m_form_reference = _ADVPL_create_component(NULL,"LFORMMETADATA",m_container_reference)
    CALL _ADVPL_set_property(m_form_reference,"FORM","log02720",mr_log_usu_grupos,ma_log_usu_grupos)
    #Verifica#Checks siif haythere unis argumentoan deexecution ejecuciónargument parafor elthe programaprogram
    IF  APPLICATION_getNumArgs() > 0 THEN
        IF  APPLICATION_getArg("action") = "INDICATOR" AND UPSHIFT(APPLICATION_getArg("indicator")) = "LOGI1" THEN
            LET l_usuario = DOWNSHIFT(APPLICATION_getArg("cod_usuario"))
        END IF
    END IF
    IF  l_usuario IS NOT NULL THEN
        CALL _ADVPL_get_property(m_form_reference,"EXECUTE_OPERATION","FIND","a.usuario='"||l_usuario CLIPPED||"'")
    ELSE
        CALL _ADVPL_set_property(m_form_reference,"ACTIVATE",TRUE)
    END IF
END FUNCTION</pre>
		</div>
	</div>
	<p>
		<span style="color: rgb(0, 0, 0);">Cuando>When seexecuted ejecutathrough a travésthe
			del widget de consulta rápida del Fluig, la funciónFluig quick query widget, the&#160;<strong>APPLICATION_getNumArgs&#160;</strong>siemprestrong>function
			devolverá como mínimo tres parámetros, siendowill always return at least three parameters, which are:
		</span>
	</p>
	<ol>
		<li><span style="color: rgb(0, 0, 0);"><strong>ACTION:&#160;</strong>lastrong>the
				palabraword "INDICATOR", parato identificarindicate quethat seit tratais dean laaction acciónby de un
				indicadoran indicator;</span></li>
		<li><span style="color: rgb(0, 0, 0);"><strong>INDICATOR:
			</strong>elstrong>code códigoof delindicator indicador registrado en elregistered in&#160;<strong>FRM0015</strong>.</span></li>
	</ol>
	<p>
		<span style="color: rgb(0, 0, 0);">A>Starting partirwith delthe segundosecond
			parámetroparameter, sethe columns envíanare lassent columnaswith conthe losvalues valoresselected seleccionados por
			el usuarioby the user.</span>
	</p>
</div>