Constantes
De GrialWIKI
(Página creada con ''''Referencia Grial =Sintaxis Extendida del Servidor de Datos= ==Sintaxis extendida para ejecución de Stored Procedures en el entorno Grial== El GrialDataServer provee una ...') |
(→Imagenes Existentes en el GrialImages) |
||
Línea 301: | Línea 301: | ||
=Imagenes Existentes en el GrialImages= | =Imagenes Existentes en el GrialImages= | ||
+ | |||
+ | ==Lista de Keys para las ImageList== | ||
+ | *ToolbarNormal,ToolbarHot y ToolbarDisabled | ||
+ | **Alta,Baja,Modificacion,Consulta,Reporte,Informe,Aceptar,Cancelar | ||
+ | |||
+ | Son los íconos que se observan en los botones del GrialApl | ||
+ | |||
+ | *TreeImages | ||
+ | **Leaf, Baja, Root, Branch, CRPc, CRPa, IMP, INST0, INST1, INST2, DIRECTA | ||
+ | |||
+ | [[Image:Iconos_GrialTree.JPG]] | ||
+ | |||
+ | Notas: | ||
+ | *"CRPc" es como Leaf pero en rojo | ||
+ | *"CRPa" en como Branch (un folder) con un "+" indicando continuación | ||
+ | |||
+ | |||
+ | *GridImages | ||
+ | **ABM, Expandir SE, Input Verde Grande, Input Verde, Flecha SE, Refresh, Invocar, Marca Verde, Marca Rojo Amarillo, Marca Rojo Blanco, Input Verde Doble | ||
+ | |||
+ | [[Image:Iconos_GrialGrid.JPG]] | ||
==Código de la Función GetImage== | ==Código de la Función GetImage== | ||
Línea 335: | Línea 356: | ||
End Function | End Function | ||
</code> | </code> | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
===Ejemplo de uso:=== | ===Ejemplo de uso:=== |
Revisión de 20:13 31 ago 2009
Referencia Grial
Contenido |
Sintaxis Extendida del Servidor de Datos
Sintaxis extendida para ejecución de Stored Procedures en el entorno Grial
El GrialDataServer provee una sintaxis extendida para ejecutar Stored Procedures en un servidor de datos, que incluye la posibilidad de recuperar parámetros de output o Input/Output.
La sintaxis es la siguiente
Txn.Cmd "Execute: procedure_name;param;param..."
Donde :
procedure_name: Es el nombre del Stored Procedure en el servidor de datos.
y cada "param" es un parámetro de dicho SP con la sigiente sintaxis:
"IOType:Name[=Value][:DataType][:Size]"
Donde:
- IOType = puede ser: IO u O, donde IO=Input-output y O=Output
- Name = nombre a asignar al campo del Rst con los resultados
- Value = valor inicial para el parametro (solo para IOtype=IO)
- DataType = puede ser: Number , Varchar, String o Date. (“String” es equivalente a “Varchar”)
Para parámetros de input, sólo es necesario colocar el valor del Parámetro. Si el valor que se especifica es alfanumérico debe encerrarse entre comillas dobles o simples, "" o , con lo que se asume que el parámetro es de tipo "Varchar2"
Si se omite "datatype", se determina el tipo del parámetro ("Number" o "Varchar") según el resultado de la función IsNumeric(Value). Esto último debe tenerse muy en cuenta si no se sabe bien que tipo de valores se pasarán en un parámetro alfanumérico. Es aconsejable especificar siempre "DataType" como "Varchar", o encerrrar el valor entre comillas, cuando se tiene un parámetro alfanumérico definido en el Stored Procedure.
Por ejemplo:
Tenemos en el servidor de datos un Stored Procedure :
Procedure Prueba_Ejemplo ( Param1 in Varchar2 ,Param2 in Number ,Param3 in out Varchar2 ,Param4 in out Number ,Param5 out Varchar2 ,ParamFecha IN Date ) is Begin Param3:= substr(Param1,1,2); Param4:= Param2 + 10; Param5:= to_char(ParamFecha,'mmm'); End;
y lo llamamos desde el módulo:
Dim Grq as New GrialQuery Grq.Init "Execute:Prueba_Ejemplo; 'UNO'; 2; IO:Param3=1024:Varchar; " & _ "IO:Param4=2003; O:Param5; " & DateParam(Now) Grialcont.LoadData Grq
En esta llamada:
- el primer parametro es de tipo varchar, con valor "UNO"
- el segundo parametro es de tipo number con valor 2
- el tercer parametro es de entrada/salida (IO), su nombre es "Param3", valor de entrada "1024" y su tipo "Varchar2"
- el cuarto parametro es de entrada/salida (IO), su nombre es "Param4", valor de entrada 2003 y su tipo "Number" (por ser el valor asignado un numero)
- el quinto parametro es de salida (O), su nombre es "Param5"
- el sexto parametro es de tipo "Date" y su valor inicial es la fecha y hora actuales
Nota: La función "DateParam(Fecha)" (componente del GrialUtilP), formatea el parámetro de tipo fecha según el standard esperado por el Grial Data Server (formato: "yyyy-mm-dd HH.nn.ss").
Luego de la ejecución del comando, se devuelve como resultado un recordset con tantos campos como parámetros de tipo OUTPUT/IO se hallan especificado. Los nombres de los campos son los indicados mediante el codigo "name" en la especificación de parámetros.
Luego de la ejecución (LoadData), Grq.Rst tendrá un solo registro con los siguientes campos:
? Grq.Rst!Param3.Value UN ? Grq.Rst!Param4.Value 12 ? Grq.Rst!Param5.Value mar
Donde cada valor será aquel que el SP haya establecido durante su ejecución para cada parámetro de OUTPUT/IO.
Utilizando nuevos IDs de la misma transacción
Es posible utilizar dentro de una transacción, un valor de nuevo ID calculado por la base de datos correspondiente a un alta realizada en un ítem previo de la misma transacción. Esto se realiza colocando la macro: [Last_ID] en cualquier lugar del comando, esta macro será reemplazada por el ultimo valor de ID dado de alta en el ítem de la transacción especificado. Por default la referencia es al ítem de la transacción inmediatamente superior, pero puede modificarse la referencia utilizando las propiedades Name= y Header= del parámetro secundario del método Cmd.
Por Ejemplo:
Case BUTTON_NEW PreEjec10_grq.PrepareAddNew CargarRegistroNuevoPreventivo Txn.Cmd PreEjec10_grq.Rst, "Name=Header_preventivo:ID_PREEJEC10" Txn.Cmd PreEjec11_grq.Rst, "ID_PREEJEC11;RELA_PREEJEC10" Txn.Cmd "Execute: PREEJEC10_IMPUTAR;[Last_ID]", "Header=Header_preventivo"
En este ejemplo, el procedimiento PREEJEC10_IMPUTAR tiene un solo parámetro de entrada, el cual será el ID del registro dado de alta en el ítem 0 (Name=Header_Preventivo) de la transacción.
El reemplazo de la macro [Last_ID] funciona en cualquier comando de texto que se envíe en una transacción, sean comandos SQL directos (Select,update,ect) o llamadas a procedimientos de la base.
Archivos Comunes
CommonFunctions.BAS
Public Function VBErrorText() As String Dim Source As String Source = Err.Source If Source Like App.EXEName & "*" Then Source = "" Else Source = Source & ": " End If VBErrorText = "Ha ocurrido un error." & vbCrLf & vbCrLf & _ Source & Err.Description End Function Sub MsgError(GrialCont As Object) Dim s As String, AppVersion As String s = VBErrorText() On Error Resume Next AppVersion = " v" & App.Major & "." & App.Minor & "." & App.Revision MsgBox s, vbCritical, App.Title & AppVersion GrialCont.AddErrLog App.EXEName & AppVersion & ": " & s Err.Clear End Sub
Debug_SQL_bas.BAS
Option Explicit Option Compare Text Sub ascii(a As String) Dim n As Integer For n = 1 To Len(a) Debug.Print Asc(Mid(a, n, 1)); ","; If n Mod 10 = 0 Then Debug.Print Next Debug.Print End Sub Sub cutprint(ByVal s As String) Do While Len(s) If Len(s) > 40 Then Dim cutp As Integer cutp = InStr(30, s, ",") If cutp = 0 Then cutp = InStr(30, s, ";") If cutp = 0 Then cutp = Max(InStr(20, s, " "), 80) Debug.Print Left$(s, cutp - 1) 'Add Left$(s, cutp - 1) s = Mid$(s, cutp) Else Debug.Print s ' Add s Exit Do End If Loop End Sub Sub sql(ComandoSQL) sqlprint ComandoSQL 'Clipboard.SetText MsgText End Sub Sub sqlprint(ByVal s As String) Dim cutp As Integer 'Msg "" Do cutp = InStr(10, s, "FROM") If cutp = 0 Then cutp = InStr(10, s, "WHERE") If cutp = 0 Then cutp = InStr(10, s, "and") If cutp = 0 Then cutp = InStr(10, s, "GROUP") If cutp = 0 Then cutp = InStr(10, s, "ORDER") If cutp = 0 Then cutp = Len(s) + 1 cutprint Left$(s, cutp - 1) s = Mid$(s, cutp) Loop While Len(s) End Sub Sub ShowRec(r As Recordset) On Error Resume Next Dim F As Field For Each F In r.Fields Debug.Print F.Name; ": ", , F.Value; If Err Then Debug.Print "("; Err.Description; ")"; Debug.Print Next Err.Clear End Sub Sub Show(r) On Error Resume Next Dim SaveFilter, SaveBmk SaveFilter = r.Filter If Err Then Debug.Print Err.Description Exit Sub End If If Not (r.EOF Or r.BOF Or (r.Status And adRecDeleted) <> 0) Then SaveBmk = r.Bookmark End If 'R.Filter = adFilterPendingRecords If r.RecordCount = 0 Then Debug.Print " RecordCount = 0" GoTo Salida End If Dim F As Field r.MoveFirst Do While Not r.EOF Debug.Print "REC:"; r.AbsolutePosition; " "; ' " ["; R.Status; "]:"; For Each F In r.Fields Debug.Print F.Name; ":"; 'F.OriginalValue; Debug.Print "|"; F.Value; "| "; If Err Then Debug.Print "("; Left$(Err.Description, 15); "...) "; Err.Clear End If Next Debug.Print r.MoveNext Loop Salida: r.Filter = SaveFilter if not IsEmpty(SaveBmk) then r.Bookmark = SaveBmk Err.Clear End Sub Sub Pend(r) On Error Resume Next Dim SaveFilter, SaveBmk SaveFilter = r.Filter If Err Then Debug.Print Err.Description Exit Sub End If If Not (r.EOF Or r.BOF Or (r.Status And adRecDeleted) <> 0) Then SaveBmk = r.Bookmark End If r.Filter = "" r.Filter = adFilterPendingRecords If r.RecordCount = 0 Then Debug.Print Err.Description Debug.Print " adFilterPendingRecords, RecordCount = 0" GoTo Salida End If Dim F As Field r.MoveFirst Do While Not r.EOF Debug.Print "REC:"; r.AbsolutePosition; "["; r.Status; ":"; If r.Status And adRecDeleted Then Debug.Print "Del "; If r.Status And adRecModified Then Debug.Print "Mod "; If r.Status And adRecNew Then Debug.Print "New "; Debug.Print "] "; For Each F In r.Fields Debug.Print LCase$(F.Name); ":|"; F.OriginalValue; If r.Status And adRecDeleted Then Debug.Print "| "; Else Debug.Print "|"; F.Value; "| "; If Err Then Debug.Print "("; Left$(Err.Description, 5); "...) "; Err.Clear End If End If Next Debug.Print Err.Clear r.MoveNext If Err Then Debug.Print "Movenext: ("; Err.Description & ")" Exit Do End If Loop Err.Clear Salida: r.Filter = SaveFilter If Not IsEmpty(SaveBmk) Then r.Bookmark = SaveBmk Err.Clear End Sub
Imagenes Existentes en el GrialImages
Lista de Keys para las ImageList
- ToolbarNormal,ToolbarHot y ToolbarDisabled
- Alta,Baja,Modificacion,Consulta,Reporte,Informe,Aceptar,Cancelar
Son los íconos que se observan en los botones del GrialApl
- TreeImages
- Leaf, Baja, Root, Branch, CRPc, CRPa, IMP, INST0, INST1, INST2, DIRECTA
Notas:
- "CRPc" es como Leaf pero en rojo
- "CRPa" en como Branch (un folder) con un "+" indicando continuación
- GridImages
- ABM, Expandir SE, Input Verde Grande, Input Verde, Flecha SE, Refresh, Invocar, Marca Verde, Marca Rojo Amarillo, Marca Rojo Blanco, Input Verde Doble
Código de la Función GetImage
Public Function GetImage(ByVal RequestCode As String, Optional ByVal SubCode As String) As Object Select Case RequestCode Case "Toolbar" Select Case SubCode Case "Normal" Set GetImage = ToolbarNormal ' ImageList Case "Hot" Set GetImage = ToolbarHot ' ImageList Case "Disabled" Set GetImage = ToolbarDisabled ' ImageList End Select Case "BackgroundImage" Set GetImage = BackgroundImage ' Picture Case "TreeImages" Set GetImage = TreeImages ' ImageList Case "GridImages" Set GetImage = GridImages ' ImageList Case "Report" Select Case SubCode Case "Header" Set GetImage = ReportHeader ' Picture End Select End Select End Function
Ejemplo de uso:
Para asignar una imagen a un boton... al final del userdocumen_show
On Error Resume Next ' Ignoro Errores VerCompromisoCmd.Picture = GrialCont.GetImage("GridImages").ListImages("ABM").Picture
Parametros de Sesion
Los siguentes datos se pueden acceder a través del parametro IDENTIDAD_ACTIVA del GrialApl Nota: Se recomienda acceder a estos datos utilizando las propiedades del control GrialFunctionFrame siempre que sea posible.
Por Ejemplo, para obtener el nombre del usuario: GrialCont.Parameter(“IDENTIDAD_ACTIVA”).Retorna(“USUA_NOMBRE”)
DATOS en (GrialCont.ParamRecibidos – GrialCont.Parameter)
Para vero todos los parámetros, hacer, en la ventana de Debug:
? grialcont.ParamRecibidos.Contenido
SERVER_LOCATION ---> |http://200.41.229.187| (del tipo 8) SERVEROBJ_CLASS ---> |GrialData.Server| (del tipo 8) USUARIO ---> |LTATO| (del tipo 8) CONEXION ---> |LTATO:PROD;WMMNFpnwqtFmvwn| (del tipo 8) DB_INSTANCE ---> |PROD| (del tipo 8) RELA_SOCUSUA15 ---> |1| (del tipo 8) ID_SOCUSUA01 ---> |1| (del tipo 8) SOCUSUA01_NOMBRE ---> |LTATO| (del tipo 8) SOCUSUA15_ENTIDAD ---> |TATO, LUCIO| (del tipo 8) SOCUSUA15_NRODOC ---> |20-21796978-7| (del tipo 8) SOCUSUA01_FBAJA ---> || (del tipo 8) SOCUSUA01_TIPO ---> |2| (del tipo 8) SOCUSUA01_TIENEUSERDB ---> |1| (del tipo 8) RELA_PREFORM02_BASE ---> |105| (del tipo 8) ENTIDAD ---> |Tato, Lucio| (del tipo 8) SU02_1 ---> |objeto| (del tipo 9) SU02_2 ---> |objeto| (del tipo 9) SU02_3 ---> |objeto| (del tipo 9) SU02_4 ---> |objeto| (del tipo 9) SU02_5 ---> |objeto| (del tipo 9) SU02_6 ---> |objeto| (del tipo 9) SU02_7 ---> |objeto| (del tipo 9) SU02_ACTIVA ---> |1| (del tipo 2) DISKSESSION_CONNINDEX ---> |1| (del tipo 3) INSTALACIONES_ROOT ---> |http://200.41.229.187| (del tipo 8) CONNECTION_INDEX ---> |0| (del tipo 8) ID_SYSFUNC03 ---> |3784| (del tipo 3) ID_FUNC ---> |3784| (del tipo 3) FUNC_URL ---> |/instalaciones| (del tipo 8) FUNC_DESCRI ---> |Proceso Respuesta Banco Lotes Transferencias| (del tipo 8) FUNC_DESCRI_ROT ---> |Proceso Respuesta Banco Lotes Transferencias| (del tipo 8) FUNC_CODDUPL ---> || (del tipo 8) SOCUSUA21 ---> |153| (del tipo 3) SYSFUNC03 ---> |3784| (del tipo 3) PUEDEEJECUTAR ---> |0| (del tipo 3) MENU_ALTA ---> |-1| (del tipo 3) MENU_BAJA ---> |-1| (del tipo 3) MENU_MODI ---> |-1| (del tipo 3) MENU_CONSULTA ---> |-1| (del tipo 3) MENU_REPORTE ---> |-1| (del tipo 3) MENU_INFORME ---> |-1| (del tipo 3) MENU_FRM1 ---> -1 si el usuario esta habilitado, 0 en otro caso MENU_FRM2 ---> -1 si el usuario esta habilitado, 0 en otro caso MENU_FRM3 ---> -1 si el usuario esta habilitado, 0 en otro caso MENU_ACEPTAR ---> |-1| si el usuario tiene el boton aceptar
Para Acceder a cualquiera de estos parámetros utilizar GrialCont.Parameter. Ejemplo:
> ? GrialCont.Parameter(“SOCUSUA01_NOMBRE”) > LTATO
Para Acceder a los datos del Puesto activo (Soc_Usua_02) usar “SU02_ACTIVA”:
Ejemplo:
Dim IndiceSu02Activa as Integer IndiceSu02Activa = Val(GrialCont.Parameter("SU02_ACTIVA")) Dim SU02Activa As Object Set SU02Activa = GrialCont.ParamRecibidos("SU02_" & IndiceSu02Activa) Debug.Print "Su U.Organica es " & SU02Aciva!PREFORM11_DESCRI
Para ver todo el contenido del subgrupo de parámetros, realice en la ventana de Debug:
? SU02Activa.Contenido ID_SOCUSUA02 ---> |3666| (del tipo 8) RELA_SOCUSUA01 ---> |261| (del tipo 8) RELA_SOCUSUA21 ---> |161| (del tipo 8) RELA_PREFORM02 ---> |1825| (del tipo 8) RELA_PREFORM11 ---> |2301| (del tipo 8) RELA_PREFORM12 ---> |1681| (del tipo 8) SOCUSUA02_FBAJA ---> || (del tipo 8) PREFORM02_CODIGO ---> |1| (del tipo 8) PREFORM02_DESCRI ---> |Administración Central| (del tipo 8) PREFORM11_CODIGO ---> |GN.02| (del tipo 8) PREFORM11_DESCRI ---> |Organo Rector Presupuesto| (del tipo 8) PREFORM12_CODIGO ---> |AB| (del tipo 8) PREFORM12_DESCRI ---> |Administrador de la Base| (del tipo 8) RELA_PREFORM01 ---> |688| (del tipo 8) ID_PREFORM03 ---> |1931| (del tipo 8) PERI_DESCRI ---> |Período 2006| (del tipo 8) PERI_ANO ---> |2006| (del tipo 8) SYSFORM02_COD ---> |FOR| (del tipo 8) PREFORM02_CODRECTOR ---> |1| (del tipo 8) EJE_RELA_PREFORM01 ---> |686| (del tipo 8) EJE_ID_PREFORM03 ---> |1853| (del tipo 8) EJE_PERI_DESCRI ---> |Período 2005| (del tipo 8) EJE_PERI_ANO ---> |2005| (del tipo 8) EJE_SYSFORM02_COD ---> |EJE| (del tipo 8)
Constantes Predefinidas
Niveles de acceso
El entorno de desarrollo Grial permite definir nueve niveles de acceso distintos para cada usuario y establecer un correlato entre estos niveles y los componentes visuales de las aplicaciones. Los niveles de acceso puede consultarse desde el GrialCont de la aplicación con:
Val(GrialCont.Parameter(MENU_ALTA_ROT))
Que retorna -1 si el usuario tiene habilitado el acceso y 0 en caso contrario
- MENU_ALTA_ROT : Asociado al botón de comando BUTTON_NEW del GrialApl.
- MENU_BAJA_ROT : Asociado al botón de comando BUTTON_DELETE
- MENU_MODIFICACION_ROT : Asociado al botón de comando BUTTON_MODIFICATION
- MENU_CONSULTA_ROT : Asociado al botón de comando BUTTON_CONSULT
- MENU_REPORTE_ROT : Asociado al botón de comando BUTTON_REPORT
- MENU_INFORME_ROT : Asociado al botón de comando BUTTON_INFORM
- MENU_FRM1_ROT : Acceso especial configurable para cada módulo.
- MENU_FRM2_ROT : Acceso especial configurable para cada módulo.
- MENU_FRM3_ROT : Acceso especial configurable para cada módulo.
Botones de comando y clase Grialbuttons
El GrialApl tiene incorporados ocho botones de comando. Seis en la barra de herramientas superior y dos en la inferior. Puede hacerse referencia a estos botones a través de un objeto de la clase GrialButtons.Las constantes definidas para cada botón son :
En la barra superior
- BUTTON_NEW
- BUTTON_DELETE
- BUTTON_MODIFICATION
- BUTTON_CONSULT
- BUTTON_REPORT
- BUTTON_INFORM
Cuando el usuario presiona alguno de estos botones , el GrialApl visualiza la transacción y genera un evento ButtonClick
En la barra inferior :
- BUTTON_ACCEPT
- BUTTON_CANCEL
Cuando el usuario presiona alguno de estos botones , el GrialApl invisibiliza la transacción y genera un evento BottomButtonClick
Marcos Contenedores
Los marcos contenedores son objetos frame de visual basic. El GrialApl reserva para funciones específicas los frames que se denominan con los siguientes nombres :
- Container_Frm : Es el frame contenedor de todos los objetos visuales asociados a una transacción. Este frame permanece invisible mientras el usuario no presione ninguno de los [botones de comando-] de la barra superior. Asimismo una vez visualizado vuelve a quedar invisible cuando el usuario confirma o cancela la transacción con los botones de la barra inferior. Este Frame debe existir obligatoriamente en todo VisualDocument que utilice el Grialapl, de no ser así se producirá un error.
- Menu1_frm : En este frame quedan contenidos todos los controles asociados al nivel de acceso Frame_1.Todos los controles contenidos en este Frame quedarán deshabilitados si el usuario no tiene asignado el nivel de acceso configurable MENU_FRM1_ROT
- Menu2_frm : En este frame quedan contenidos todos los controles asociados al nivel de acceso Frame_2.Todos los controles contenidos en este Frame quedarán deshabilitados si el usuario no tiene asignado el nivel de acceso configurable MENU_FRM2_ROT
- Menu3_frm : En este frame quedan contenidos todos los controles asociados al nivel de acceso Frame_3.Todos los controles contenidos en este Frame quedarán deshabilitados si el usuario no tiene asignado el nivel de acceso configurable MENU_FRM3_ROT
Estados del GrialApl
Los diferentes estados en que puede encontrarse un GrialApl son :
- INITIAL_STATUS : Es el estado inicial del Grialapl. En este estado, el [marco contenedor-] container_frm y [los botones de comando-] de la barra inferior se encuentran invisibles. Para salir de este estado el usuario debe presionar alguno de los botones de comando de la barra superior. Cuando se sale de este estado se disparan los eventos [ButtonClick-] y [ContainerFrmShow-] en ese orden.
- CONTROLS_ENABLED : Es el estado por default al que se arriba luego que se ha presionado alguno de los botones de comando de la barra superior. En este estado el marco contenedor Container_Frm y los botones de comando de la barra inferior se encuentran visibles y los botones de la barra superior deshabilitados. Para salir de este estado y volver al estado inicial, el usuario debe presionar alguno de los dos botones de la barra inferior (CANCELAR o ACEPTAR).Cuando se sale de este estado se disparan los eventos [BottomButtonClick-] y [ContainerFrmHide-] en ese orden.
- VIEW_MODE : Es un estado alternativo al anterior. Para arribar a este estado basta cambiar el valor del parámetro NewState del evento [ButtonClick-] que se ha disparado cuando el usuario presionó un botón de comando de la barra superior. En este estado los botones de comando de la barra superior y el marco contenedor container_frm se encuentran visibles pero deshabilitados y los botones de la barra inferior habilitados. Para salir de este estado el usuario debe presionar alguno de los dos botones de la barra inferior (CANCELAR o ACEPTAR) .Cuando se sale de este estado se disparan los eventos [BottomButtonClick-] y [ContainerFrmHide-] en ese orden.