Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

Versão 1 Próxima »

Objetivo

El  Widget de consulta rápida  que estará disponible para  Fluig, presentará al usuario los datos de  indicadores  definidos por las áreas de negocio para cada uno de los  ERPs. Este widget obtendrá datos de configuración de información y negocios a través de servicios REST a ser implementado por cada uno de los segmentos. Para la línea Datasul  el servicioREST será proporcionado por la Framework Datasul, que a su vez buscará la configuración y los datos de cada uno de los indicadores de un determinado BO (Business Object Progress). Estos BOs deben ser implementados por las áreas de negocio responsables de los indicadores.

El  widget de consulta rápida  será semejante al del formulario de la Imagen 1 a continuación.

 

Puede acceder a un prototipo de la pantalla de widget de consulta pantalla http://cassino:8180/integration/static/quicksearch/index.html?indicator=XXXX donde XXXX debe ser el código del indicador registrado.


Imagen 1

Registro de indicadores.

Los indicadores deben estar registrados en el GOLD en la opción "ENG20065 – Registro de indicador de consulta rápida" como muestra la Imagen 2.  

Imagen 2

Una vez se ingrese a la rutina de registro de indicadores al GOLD se abrirá una pantalla de inicio como muestra la Imagen 3.

.


Imagen 3

En la Imagen 3 tenemos las siguientes acciones:

  • Incluir: Habilita los campos para el registro de un nuevo bookmark.
  • Modificar: Permite la edición de un marcador previamente seleccionado.
  • Copiar versión: Crea la réplica de un  indicador de de Innovación(79) a Sustentación(69).
  • Eliminar: Elimina el bookmark.
  • Buscar: Realiza la búsqueda de marcadores.
  • Primero, anterior, siguiente, última: Navega a través de los registros de marcadores.
  • Lista: Se abre una pantalla con la lista de todos los marcadores.
  • Exportar: Realiza la exportación de marcadores en un archivo fluig_indic.d.

Para activar la opción Incluir la GOLD permitirá incluir en los campos como muestra la Imagen 4.

Imagen 4

Según la Imagen 4 tenemos los siguientes campos para incluir:

    • Subproducto: Indica para cuál marcador se emitirá el subproducto.
    • Pactote: Indica en qué paquete será lanzado el marcador.
    • Marcador: Campo secuencial que será el identificador del marcador. (Generado automáticamente).
    • Nombre de BO: Debe ser informado el nombre de BO (ej.: fluig/qs/usuario p) que será responsable de aportar información de configuración y de registros para el marcador en cuestión. Más adelante en este documento veremos los detalles para la implementación de este BO.
    • Descripción del marcador: Descripción del marcador que se utilizará para mostrarlo en el widget de Consultas rápidas de Fluig.
    • Registro por página: Cantidad de registros que se mostrarán en el widget de Consultas rápidas de Fluig. A través de este campo el widget hará una paginación automática mediante el cálculo de la cantidad de registros a visualizar.

    • Cuenta con caché: indica si el explorador debe almacenar en caché datos.

    • Tiempo de los datos en la memoria: tiempo en segundos que el navegador debe mantener la memoria caché.

    • BO personalizado: Si es necesario hacer una personalización, se debe informar en este campo el nombre de BO para personalización. Este BO debe aplicar los mismos procedimientos que el BO estándar como mostraremos más adelante.
    • Autocompletar: checkbox que indica si el autocompletado está habilitado para este marcador.

Para el actual producto 69, el paquete 60 – 12.1.1, ya esté sugerido. La pantalla no permite el registro en un paquete superior a éste.

Si el usuario inicia sesión en un paquete inferior al oficial, la pantalla avisará que existe un paquete superior y que este registro debe ser registrado en el paquete oficial también.

 

En la opción de exportar el analista debe seleccionar cuál subproducto y paquete quiere exportar los marcadores como muestra la Imagen 5.

Después de que la exportación se crea un archivo fluig_indic.(d) que debe ser versionado en TFS en la carpeta univdata ($/FOUNDATION/Fontes_Doc/Sustentacao/V11/V11/progress/src/univdata)

NOTA: Es completa responsabilidad del analista cumplir con este commit en la carpeta univdata 

 

Imagen 5

 

Importar marcadores.

Después de la exportación de los indicadores (fluig_indic.d) es necesario importar la misma dentro de la Datasul. Para realizar este procedimiento es posible acceder al menú  (Foundation --> Básico (NPS) --> Tareas --> Importación de consultas rápidas).

Al acceder a este menú el Datasul abrirá la pantalla de importación de consultas rápidas como muestra la Imagen 6.

Imagen 6

En esta pantalla simplemente informar la ubicación del archivo fluig_indic.d y realizar la importación.

Servicio REST y BOs de Marcadores.

El Widget de consulta rápida utiliza un un servicio REST disponible en el Datasul para obtener los datos necesarios para el marcador. Este servicio REST a su vez obtendrá la información y los datos de cada marcador a través del registro de marcadores y de un BO asociado con el marcador.

Para ayudar en el proceso de desarrollo de BO, fue creado el include i_fluig_indicator.i ya que contendrá todos los temp-tables estándar a ser utilizados en los procedimientos. Para poder utilizar el include simplemente importarlo en el inicio del BO, insertar la siguiente línea:

{include/i_fluig_indicator.i}

Cada BO de marcador debe implementar los procedures que se describen a continuación:


Nombre del procedure: pi-obtem-campos-entidade-pai

Descripción: devuelve la lista de columnas de la entidad matriz para poblar el combobox superior izquierdo widget (Imagen 1).

Parámetros:

  • usuario: el identificador de usuario para el ERP (tipo CHARACTER - INPUT).
  • empresa: el identificador de la empresa para el ERP (tipo CHARACTER - INPUT).
  • ttParentFields: temp-tabla con la lista código/etiqueta. Debe contener sólo los elementos que el usuario tiene permiso para consultar (tipo TEMP-mesa de salida)

       Campos de la TEMP-TABLE:

  • ccode: CHARACTER - código del campo
  • clabel: CHARACTER - label del campo
Ejemplo del procedure: 

 

/* Procedure pi-obtem-campos-entidade-pai */

PROCEDURE pi-obtem-campos-entidade-pai:

                DEFINE INPUT PARAMETER usuario AS CHARACTER NO-UNDO.

                DEFINE INPUT PARAMETER empresa AS CHARACTER NO-UNDO.

                DEFINE OUTPUT PARAMETER TABLE FOR ttParentFields.

 

                CREATE ttParentFields.

                ASSIGN ttParentFields.ccode = "des_grp_usuar"

                              ttParentFields.clabel = "Grupo".

END PROCEDURE.

 

Nombre del Procedure: pi-obtem-colunas

Descripción: devuelve una lista de Column Model de las columnas que se mostrarán en el grid del widget de consulta rápida. Esta información será utilizada por el servicio para montar la colModel componiendo el JSON de respuesta.

Parámetros:

  • usuario: el identificador de usuario para el ERP (tipo CHARACTER - INPUT).
  • empresa: el identificador de la empresa para el ERP (tipo CHARACTER - INPUT).
  • ttColumnModel: temp-table con los datos de configuración de las columnas del Grid. Debe contener sólo los elementos que el usuario tiene permiso para consultar (tipo TEMP-TABLE – OUTPUT).

       Campos de la TEMP-TABLE:

    • cname: CHARACTER - nombre de la columna.
    • cindex: CHARACTER - índice de la columna.
    • clabel: CHARACTER - label de la columna.
    • lsortable: LOGICAL: indica si el usuario puede solicitar clasificación por columna.
    • iwidth: INTEGER - ancho en pixels de la columna.
    • calign: CHARACTER - alineación de la columna (left, center o rigth)
    • csorttype: CHARACTER - tipo de ordenación (asc o desc).
    • cformatter: CHARACTER - tipo de formateador, ej.: date
    • cdatefmt: CHARACTER - formato para campo data, ej.: "d-M-Y"
    • lshowOnGrid:LOGICAL - indica si ese campo debe presentarse en el grid (default es true)
    • cdefault-value: CHARACTER - valor default para el campo.
Para más información se puede consultar el componente colModel, cformatter del jqGrid en la página: http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options

En el caso de apertura de una acción relacionada con el programa Progress, incluir en la devolución del procedure una columna denominada rowid

Ejemplo del procedure:

/* Procedure pi-obtem-colunas */

PROCEDURE pi-obtem-colunas:

                DEFINE INPUT PARAMETER cusuario AS CHARACTER NO-UNDO.

                DEFINE INPUT PARAMETER cempresa AS CHARACTER NO-UNDO.

                DEFINE OUTPUT PARAMETER TABLE FOR ttColumnModel.

 

                CREATE ttColumnModel.

                ASSIGN ttColumnModel.cname = "cod_usuario"

                                  ttColumnModel.clabel = "Usuario"

                                  ttColumnModel.cindex = "cod_usuario"

                                  ttColumnModel.iwidth = 160

                                  ttColumnModel.lsortable = TRUE.

                CREATE ttColumnModel.

                ASSIGN ttColumnModel.cname = "nom_usuario"

                                  ttColumnModel.clabel = "Nombre"

                                  ttColumnModel.clabel = "Nombre"

                                  ttColumnModel.iwidth = 250

                                  ttColumnModel.lsortable = TRUE.

                CREATE ttColumnModel.

                ASSIGN ttColumnModel.cname = "ind_tip_usuar"

                                  ttColumnModel.clabel = "Tipo"

                                  ttColumnModel.cindex = "ind_tip_usuar"

                                  ttColumnModel.iwidth = 160.

                CREATE ttColumnModel.              

                ASSIGN ttColumnModel.cname = "rowid"

                                  ttColumnModel.clabel = "Rowid"

                                  ttColumnModel.cindex = "rowid"

                                  ttColumnModel.iwidth = 100.

END PROCEDURE.


Nombre del Procedure: pi-obtem-lista-selecao

Descripción: devuelve una lista de artículos que componen la selectionValues en JSON, que se utilizará para poblar el combobox superior derecho del widget (Imagen 1).

Parámetros:

  • usuario: el identificador de usuario para el ERP (tipo CHARACTER - INPUT).
  • empresa: el identificador de la empresa para el ERP (tipo CHARACTER - INPUT).
  • ttSelectionValues: temp-table con la lista de filtros (valores de selección). Debe contener sólo los elementos que el usuario tiene permiso para consultar (tipo TEMP-TABLE – OUTPUT).

       Campos de la TEMP-TABLE:

    • ccode: CHARACTER - código del campo
    • clabel: CHARACTER - label del campo

Ejemplo del procedure:

/* Procedure pi-obtem-lista-selecao */

PROCEDURE pi-obtem-lista-selecao:

                DEFINE INPUT PARAMETER usuario AS CHARACTER NO-UNDO.

                DEFINE INPUT PARAMETER empresa AS CHARACTER NO-UNDO.

                DEFINE OUTPUT PARAMETER TABLE FOR ttSelectionValues.

 

                CREATE ttSelectionValues.

                ASSIGN ttSelectionValues.ccode = "AUSR"

                               ttSelectionValues.clabel = "Todos los usuarios".

                CREATE ttSelectionValues.

                ASSIGN ttSelectionValues.ccode = "OADM"

                               ttSelectionValues.clabel = "Sólo Administradores".

                CREATE ttSelectionValues.

                ASSIGN ttSelectionValues.ccode = "OSUP"

                               ttSelectionValues.clabel = "Sólo Super".

                CREATE ttSelectionValues.

                ASSIGN ttSelectionValues.ccode = "OCOM"

                               ttSelectionValues.clabel = "Sólo usuarios comunes".

                CREATE ttSelectionValues.

                ASSIGN ttSelectionValues.ccode = "OSPV"

                               ttSelectionValues.clabel = "Sólo Supervisores".

END PROCEDURE.


Nombre del Procedure: pi-obtem-acoes-relacionadas

Descripción: devuelve una lista de artículos para componer el ítem selectionActions en JSON de respuesta, que se utilizará para poblar el combo de acciones relacionadas (Imagen 1).

Parámetros:

  • usuario: el identificador de usuario para el ERP (tipo CHARACTER - INPUT).
  • empresa: el identificador de la empresa para el ERP (tipo CHARACTER - INPUT).
  • ttRelatedActions: temp-table con la lista de marcadores relacionados. Debe contener sólo los elementos que el usuario tiene permiso para consultar (tipo TEMP-TABLE – OUTPUT).

       Campos de la TEMP-TABLE:

    • clabel: CHARACTER - label del campo
    • ctype: CHARACTER - tipo de formulario por abrir. Valores posibles (md, flex o progress).
    • cmodule: CHARACTER - módulo a abrir.
    • cprogram: CHARACTER - programa a abrir.
    • cviewtype: CHARACTER - tipo de formato de la pantalla por abrir. Utilizado para ctype = md o ctype = flex. Valores posibles (portlet, view y window).
    • crowid: CHARACTER - pueden usarse para informar el campo que representará el rowid para entidades vinculadas. 
Si la solicitud por abrir de metadatos, es necesario que el formulario está registrado en el menú de la aplicación.

Con esta información se montarán las URLs según los formatos siguientes:

Progress:

http://10.80.5.40:8080/abl-external-call/execute?module=sec&program=sec000aa.w&user=framework

Metadatos:

http://10.80.5.40:8080/josso/signon/externalUserAuthentication.do?josso_cmd=external-login&type=md&fromFluig=true&program=fnd.CRUDUsuarMestre&viewtype=view&userid=framework&password=ZnJhbWV3b3Jr=

Flex:

http://server:port/josso/signon/externalUserAuthentication.do?josso_cmd=external-login&type=frwk&module=fnd&fromFluig=true&program=datasul-calculatorportlet-flex&viewtype=portlet&userid=super&password=c3N6a0AxMjM=

Por detalles de cómo configurar las direcciones URL, consultar el documento:

Invocación de Aplicaciones y Formularios en el Datasul vía Fluig

Ejemplo del procedure:

/* Procedure pi-obtem-acoes-relacionadas */

PROCEDURE pi-obtem-acoes-relacionadas:

    DEFINE INPUT PARAMETER usuario AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER empresa AS CHARACTER NO-UNDO.

 

    DEFINE OUTPUT PARAMETER TABLE FOR ttRelatedActions.

 

    CREATE ttRelatedActions.

    ASSIGN ttRelatedActions.clabel = "Ejemplo Progress"

           ttRelatedActions.ctype = "progreso"

           ttRelatedActions.cmodule = "sec"

           ttRelatedActions.cprogram = "sec000aa.w".

    CREATE ttRelatedActions.

    ASSIGN ttRelatedActions.clabel = "Ejemplo Metadatos"

           ttRelatedActions.ctype = "md"

           ttRelatedActions.cprogram = "fnd.CRUDUsuarMestre"

           ttRelatedActions.cviewtype = "view".  

    CREATE ttRelatedActions.

    ASSIGN ttRelatedActions.clabel = "Ejemplo Flex"

           ttRelatedActions.ctype = "flex"

           ttRelatedActions.cmodule = "fnd"

           ttRelatedActions.cprogram = "datasul-calculatorportlet-flex"

           ttRelatedActions.cviewtype = "portlet".

END PROCEDURE.

 

Nombre del Procedure: pi-obtem-auto-complete

Descripción: realiza una búsqueda en la base de datos para devolver una lista de artículos que se utilizará para poblar el combobox de autocompletar en la consulta rápida del widget.

Parámetros:

  • usuario: el identificador de usuario para el ERP (tipo CHARACTER - INPUT).
  • empresa: el identificador de la empresa para el ERP (tipo CHARACTER - INPUT).
  • csearchfield: La columna de identificador en la tabla maestra para ser utilizado en la búsqueda (tipo CHARACTER - INPUT).
  • csearchvalue: Buscar texto (tipo CHARACTER - INPUT).
  • cselection: campo de selección del widget (tipo CHARACTER – INPUT).
  • clist: string que contiene la lista de valores encontrados, donde cada elemento debe ser separado por |||| (cuatro barras)-(tipo LONGCHAR-OUTPUT).

          Ejemplo:  “Adm. Financiera || ||TOTVS administrador ".

Ejemplo del procedure:

PROCEDURE pi-obtem-auto-complete:

    DEFINE INPUT PARAMETER usuario AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER empresa AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER csearchfield AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER csearchvalue AS CHARACTER NO-UNDO.

DEFINE INPUT PARAMETER cselection AS CHARACTER NO-UNDO.

    DEFINE OUTPUT PARAMETER clist AS LONGCHAR NO-UNDO.

 

    IF csearchvalue = ? THEN

        ASSIGN csearchvalue = "".

       

    DEFINE VARIABLE hQuery  AS HANDLE  NO-UNDO.

    DEFINE VARIABLE hbuffer AS HANDLE  NO-UNDO.

  

    CREATE BUFFER hbuffer FOR TABLE "EMSFND.GRP_USUAR".

   

    CREATE QUERY hQuery.

    hQuery:SET-BUFFERS(hbuffer).

    hQuery:QUERY-PREPARE("FOR EACH GRP_USUAR WHERE " + csearchfield +  " MATCHES '*" + csearchvalue + "*'").

    hQuery:QUERY-OPEN.

   

    HQUERY:GET-FIRST().

    REPEAT WHILE hbuffer:AVAIL: 

        IF  clist = '' THEN

            clist = hbuffer:BUFFER-FIELD(csearchfield):BUFFER-VALUE.

        ELSE

            clist = clist + '||||' + hbuffer:BUFFER-FIELD(csearchfield):BUFFER-VALUE.

 

        hQuery:GET-NEXT(). 

    END.

   

    hQuery:QUERY-CLOSE().

    DELETE OBJECT hQuery.

    DELETE OBJECT hbuffer.

   

END PROCEDURE.

 


Nombre del Procedure: pi-obtem-dados

Descripción: realiza una búsqueda en la base de datos para devolver la página de registros solicitados por el widget.

Parámetros:

  • usuario: el identificador de usuario para el ERP (tipo CHARACTER - INPUT).
  • empresa: el identificador de la empresa para el ERP (tipo CHARACTER - INPUT).
  • csortcol: nombre de columna utilizado para ordenar los registros (tipo CHARACTER - INPUT).
  • csortorder: tipo de ordenación de los registros: asc o desc (tipo CHARACTER - INPUT).
  • csearchfield: columna para aplicar filtro (tipo CHARACTER - INPUT).
  • csearchvalue: valor para aplicar filtro (tipo CHARACTER - INPUT).
  • cselection: campo de selección del widget (tipo CHARACTER – INPUT).
  • cfields: longchar que contiene las columnas de los datos que se van a devolver en la ttData.(tipo LONGCHAR – OUTPUT)
  • ttData: Temp-table que contiene los datos de devolución de la búsqueda. (tipo TEMP-TABLE - OUTPUT)

  Campos de la TEMP-TABLE:

    • crecords: CHARACTER - valores que se mostrarán en el grid del widget de la consulta rápida. Estos valores se pueden separar con "||||" y deberán estar en la secuencia de las columnas definidas en el campo cfields.

Ejemplo del procedure:

/* Procedure pi-obtem-dados */

PROCEDURE pi-obtem-dados:

    DEFINE INPUT PARAMETER usuario AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER empresa AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER csortcol AS CHARACTER NO-UNDO.   

    DEFINE INPUT PARAMETER csortorder AS CHARACTER NO-UNDO. 

    DEFINE INPUT PARAMETER csearchfield AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER csearchvalue AS CHARACTER NO-UNDO.

    DEFINE INPUT PARAMETER cselection AS CHARACTER NO-UNDO.

    DEFINE OUTPUT PARAMETER cfields AS LONGCHAR NO-UNDO.

    DEFINE OUTPUT PARAMETER TABLE FOR ttData.

 

    DEFINE VARIABLE hbusuario   AS HANDLE      NO-UNDO.

    DEFINE VARIABLE hbusuariogrpusuario AS HANDLE      NO-UNDO.

    DEFINE VARIABLE hbgrpusuario AS HANDLE      NO-UNDO.

       

    DEFINE VARIABLE hqusuario   AS HANDLE      NO-UNDO.

    DEFINE VARIABLE cwhere      AS CHARACTER   NO-UNDO INITIAL " FOR EACH usuar_mestre ".

    DEFINE VARIABLE cadvwhere   AS CHARACTER   NO-UNDO INITIAL " FOR EACH grp_usuar WHERE grp_usuar.des_grp_usuar MATCHES '*&1*', each usuar_grp_usuar WHERE usuar_grp_usuar.cod_grp_usuar = grp_usuar.cod_grp_usuar, each usuar_mestre WHERE usuar_mestre.cod_usuario = usuar_grp_usuar.cod_usuario ".

    DEFINE VARIABLE corderby    AS CHARACTER   NO-UNDO INITIAL " BY usuar_mestre.".

    DEFINE VARIABLE iaux        AS INTEGER     NO-UNDO.

    DEFINE VARIABLE ireposition AS INTEGER     NO-UNDO.

    DEFINE VARIABLE ladvanced   AS LOGICAL     NO-UNDO INITIAL FALSE.

 

 

   /***************************** DEFINIENDO CAMPOS ************************************/

    ASSIGN cfields = "cod_usuario" + "||||" + "nom_usuario" + "||||" + "ind_tip_usuar" + "||||" + "rowid".

 

    /* Estableciendo la ordenación por columna */

    ASSIGN corderby = corderby + csortcol.

 

    /* Verificando el tipo de sort en la ordenación */

    CASE csortorder:

        WHEN "desc" THEN DO:

            corderby = corderby + " DESCENDING ".

        END.

    END CASE.

 

    /* Armando los matches para auto-completar */

    IF csearchvalue <> "null" THEN DO:

        cwhere = SUBSTITUTE(cadvwhere,csearchvalue).

        ladvanced = TRUE.

    END.

   

    / * Montando el where por columna del combo */

    CASE cselection:

        WHEN "OADM" THEN DO:

            cwhere = cwhere + " &1 usuar_mestre.ind_tip_usuar = 'Admin' ".

        END.

        WHEN "OSUP" THEN DO:

            cwhere = cwhere + " &1 usuar_mestre.ind_tip_usuar = 'Super' ".

        END.

        WHEN "OCOM" THEN DO:

            cwhere = cwhere + " &1 usuar_mestre.ind_tip_usuar = 'Comum' ".

        END.

        WHEN "OSPV" THEN DO:

            cwhere = cwhere + " &1 usuar_mestre.ind_tip_usuar = 'Supervisor' ".

        END.

    END CASE.

 

    IF ladvanced THEN DO:

        cwhere = SUBSTITUTE(cwhere," AND ").

    END.

    ELSE DO:

        cwhere = SUBSTITUTE(cwhere," WHERE ").

    END.

 

    / * Terminado el where */

    cwhere = cwhere + corderby.

  

    / * Establecer la consulta con buffer dinámico */

    CREATE BUFFER hbgrpusuario FOR TABLE "EMSFND.grp_usuar".

    CREATE BUFFER hbusuariogrpusuario FOR TABLE "EMSFND.usuar_grp_usuar".

    CREATE BUFFER hbusuario FOR TABLE "EMSFND.usuar_mestre".

 

    CREATE QUERY hqusuario.

     IF ladvanced THEN DO:

        hqusuario:SET-BUFFERS(hbgrpusuario,hbusuariogrpusuario, hbusuario).

     END.

     ELSE DO:

        hqusuario:SET-BUFFERS(hbusuario).

     END.

                 

    hqusuario:QUERY-PREPARE(cwhere).

    hqusuario:QUERY-OPEN().

   

    hqusuario:GET-FIRST().

 

    REPEAT WHILE hbusuario:AVAILABLE:

        CREATE ttData.

        ASSIGN ttData.crecords = hbusuario:BUFFER-FIELD("cod_usuario"):BUFFER-VALUE + "||||" +

                                 hbusuario:BUFFER-FIELD("nom_usuario"):BUFFER-VALUE + "||||" +

                                 hbusuario:BUFFER-FIELD("ind_tip_usuar"):BUFFER-VALUE + "||||" +

                                 STRING(hbusuario:ROWID).

        hqusuario:GET-NEXT().

    END.

   

    DELETE OBJECT hqusuario.

    DELETE OBJECT hbusuario.

END PROCEDURE.

 

Detalle de registros

A través del combobox de Acciones relacionadas se puede abrir un programa para presentar los detalles de un registro seleccionado en el grid. El programa por abrir puede ser del tipo Progress, Metadatos o Flex, definido de acuerdo con la URL devuelta por el procedure pi-obtem-acoes-relacionadas. Para formularios Metadatos del tipo CRUDFreeform no necesita hacer ningún cambio en el formulario, para que se abra mostrando el registro seleccionado en el grid del widget. Para programas Progress, formularios Flex y Metadatos tipo FreeForm es necesario hacer algunas implementaciones como se muestra a continuación:

FreeForm:

Los formularios del tipo FreeForm que representan marcadores, deben tener un script del evento creationComplete de su contenedor principal (generalmente un canvas). Este script debe proporcionar un código similar al siguiente:

DEFINE VARIABLE  mdProgram AS CHARACTER.
DEFINE VARIABLE ttPreSelRecord AS TEMP-TABLE.
mdProgram = GET-MD-PROGRAM().
/* Verifica si el registro seleccionado enviada por el Fluig (si existe),
   corresponde al formulario actual */
IF mdProgram = “crm1150.FFIndicadorX” THEN DO:
    ttPreSelRecord = GET-PRE-SEL-RECORD().
    /* Desde ese punto tenemos disponibles en temp-table ttPreSelRecord el
       registro enviado por el Fluig, donde los nombres de los campos corresponden a los
       nombres definidos en el colModel del servicio de start. El resto del script 
debe preparar la presentación del registro.*/
    ...
    ...
END.

Flex:

Para formularios implementados en Flex que representan marcadores, los desarrolladores deben hacer cambios para comprobar la inicialización del formulario de las variables Application.application.parameters.mdProgram y Application.application.parameters.fluigSelRecord. Si estas variables tienen valores válidos y corresponden al formulario en cuestión, deben introducirse a la pantalla de detalle con el registro disponible en fluigSelRecord.

Ejemplo:

var fluigSelRecord:Objeto = Application.application.parameters.fluigSelRecord;

Alert.show("num_pedido:" + fluigSelRecord.num_pedido);

Progress:

Thin Template:

Programa de registro:

Definición del include ut-indicador-tabela.i:

Imagen 3

 

Ingresar el código siguiente en el procedimiento de afterDisplayFields para volver a colocar el registro seleccionado:

(ajuste de temp-table del programa).

Imagen 4

 

Incluir en el BO del programa un procedure que reciba el parámetro ROWID de la tabla para cambiar la posición del registro:

Imagen 5

 

Programa, desarrollado en Thin Template, abierto con registro colocado:

Imagen 6

 

SmartObjects:

Programa de registro:

Definición del include ut-indicador-tabela.i:

Imagen 7

 

Inserte el código siguiente en el procedure local-initialize para el reposicionamiento del registro seleccionado, después de la línea “run pi-after-initialize.”:

IF r-ind-tabela <> ? THEN DO:
      RUN pi-reposiciona-query IN h_q01fn069 (INPUT r-ind-tabela).
      ASSIGN r-ind-tabela = ?.
END.

 

Imagen 8

El programa de la Fundación, que se convirtió en SmartObject, abre con el registro colocado:

Imagen 9

 

DWB:

Programa de registro (programa básico):

Paso 1:

Asegúrese de que la variable v_rec_nome_tabela se declara en el programa, como muestra la imagen de abajo.

 

 Imagen 10

 

Paso 2:

Utilice el programa inicial de incluir DWB, por ejemplo, para incluir “ix_p00_@&(program))”, para declarar la inclusión de la Fundación y asignarlo a la variable de tipo RECID el valor respectivo del programa:

 

 Imagen 11

 

Para recuperar la RECID de la tabla deseada, es necesario comparar la ROWID de esa tabla con el valor almacenado en la variable r-ind-tabela, como se muestra en el ejemplo utilizado en la tabla plano_cta_ctbl abajo:

 
{utp/indicador-tabela.i}
IF r-ind-tabela <> ? THEN DO:
    FIND FIRST plano_cta_ctbl NO-LOCK
        WHERE ROWID(plano_cta_ctbl) = r-ind-tabela NO-ERROR.
    IF AVAIL plano_cta_ctbl THEN DO:
        ASSIGN v_rec_plano_cta_ctbl = RECID(plano_cta_ctbl).
    END.
    ASSIGN r-ind-tabela = ?.
END.

 

 Imagen 12

 

Paso 3:

Como el bloque principal del programa base en el DWB tiene ya la investigación sobre la tabla principal del programa por la RECID de la variable v_rec_nome_tabela, el desarrollador no necesita hacer la colocación.

 

 Imagen 13

 

Imagen 14

 

Programa de EMS5, que se convirtió en DWB, abrió con el registro seleccionado:

Imagen 15

 

Consejos de desarrollo:

Edit Document

Tratativa de información en la consulta rápida.

 

Inicialmente la consulta rápida debe traer el menor número de información posible, por lo que el filtro inicial debe ser lo más restrictivo posible.

 

Se considerará como Búsqueda inicial y Filtro inicial el primero de la Lista, por lo que la primera de la Búsqueda debe ser aquella que el usuario más utilizará y el primero del Filtro deberá ser el más restrictivo.

 

 

Por seguridad, en el momento en que se realiza la búsqueda de los datos, se deben realizar algunos controles en relación con los parámetros recibidos. Además, para facilitar el debug, se debe incluir al comienzo del evento la generación de log de los parámetros.

En resumen, el inicio de la PI “pi-obtem-dados” debe ser como se muestra a continuación::

 

PROCEDURE pi-obtem-dados:

    DEFINE INPUT  PARAMETER usuario      AS CHARACTER NO-UNDO.

    DEFINE INPUT  PARAMETER empresa      AS CHARACTER NO-UNDO.

    DEFINE INPUT  PARAMETER csortcol     AS CHARACTER NO-UNDO.

    DEFINE INPUT  PARAMETER csortorder   AS CHARACTER NO-UNDO.

    DEFINE INPUT  PARAMETER csearchfield AS CHARACTER NO-UNDO.

    DEFINE INPUT  PARAMETER csearchvalue AS CHARACTER NO-UNDO.

    DEFINE INPUT  PARAMETER cselection   AS CHARACTER NO-UNDO.

    DEFINE OUTPUT PARAMETER cfields      AS LONGCHAR  NO-UNDO.

    DEFINE OUTPUT PARAMETER TABLE FOR ttData.

 

    IF LOG-MANAGER:LOGGING-LEVEL > 2 THEN DO:

        LOG-MANAGER:WRITE-MESSAGE("Requisição QuickSearch recebida.",      "FLUIGQS") NO-ERROR.

        LOG-MANAGER:WRITE-MESSAGE("usuario     : " + STRING(usuario),      "FLUIGQS") NO-ERROR.

        LOG-MANAGER:WRITE-MESSAGE("empresa     : " + STRING(empresa),      "FLUIGQS") NO-ERROR.

        LOG-MANAGER:WRITE-MESSAGE("csortcol    : " + STRING(csortcol),     "FLUIGQS") NO-ERROR.

        LOG-MANAGER:WRITE-MESSAGE("csortorder  : " + STRING(csortorder),   "FLUIGQS") NO-ERROR.

        LOG-MANAGER:WRITE-MESSAGE("csearchfield: " + STRING(csearchfield), "FLUIGQS") NO-ERROR.

        LOG-MANAGER:WRITE-MESSAGE("csearchvalue: " + STRING(csearchvalue), "FLUIGQS") NO-ERROR.

        LOG-MANAGER:WRITE-MESSAGE("cselection  : " + STRING(cselection),   "FLUIGQS") NO-ERROR.

    END.

 

    run pi-get-padrao (input-output csearchfield, input <LISTA BUSCA>).

    /* <LISTA DE BÚSQUEDA> = Lista separada por coma de los elementos creados en la PI "pi-obtem-campos-entidade-pai"

             Ejemplo = "cod_tit_ap,cod_espec_docto,cdn_fornecedor,nom_abrev" */

 

    run pi-get-padrao (input-output cselection, input <LISTA FILTRO>).

    /* <LISTA DE FILTRO> = Lista separada por come de los elementos creados en la PI "pi-obtem-lista-selecao"

              Ejemplo = "VENCH,ABERT,ATRAS,ATRAS30,ATRAS15" */

 

    if csearchvalue = ? or csearchvalue = "null" then

       assign csearchvalue = "".

 

Al final del programa se debe incluir la PI “pi-get-padrao” de la siguiente manera:

 

PROCEDURE pi-get-padrao:

    def input-output param p_cod_index as char no-undo.

    def input        param p_lst_ops   as char no-undo.

 

    if lookup(p_cod_index, p_lst_ops) > 0 then return.

 

    assign p_cod_index = entry(1, p_lst_ops).

END PROCEDURE.

 

Autocompletar

 

Incluso si el campo de Búsqueda no tuviese “auto-complete”, este método siempre se ejecutará cuando el usuario ingrese algo en el campo de búsqueda. Por lo tanto, es obligatoria la implementación del método “pi-obtem-auto-complete”.

Para los campos que no tengan "auto-complete", el método debe devolver una lista vacía.

 

 

  • Sem rótulos