Anda di halaman 1dari 256

Microsoft Business SolutionsSolomon

Administrador de
Adaptaciones
Referencia Visual Basic para
Aplicaciones
Versin 5.5

Derechos del Autor

Marcas Registradas

RPMN-VBA0-0000550
5/2003
Manual copyright 2003 Great Plains Software, Inc. Todo los derechos
reservados. Great Plains Software, Inc. es una subsidiaria duea de Microsoft
Corporation.
Su derecho para copiar esta documentacin est limitado por las leyes de derecho
de autor y los trminos del acuerdo de la licencia de software. Tal como se expresa
en la licencia de software, usted puede realizar un nmero razonable de copias o
impresiones para su uso personal. El realizar copias, adaptaciones, compilaciones
o subproductos para la distribucin comercial est prohibido y constituye una
violacin sancionable por parte de la ley.
Todo nombre de empresas o productos mencionados son marcas registradas de
Great Plains Software, Inc., o de sus respectivos dueos. Great Plains, Solomon
IV, y Solomon Desktop son ambas marcas registradas de Great Plains Software,
Inc. dentro de los Estados Unidos y/o otros pases. Microsoft, Microsoft Windows
98, Microsoft Windows 2000, Microsoft Windows XP, Microsoft Me, Microsoft
Windows NT Server Enterprise Edition, Microsoft SQL Server, Microsoft Small
Business y SQL Server Enterprise Edition, ActiveX, Windows y Windows NT son
todas marcas registradas de Microsoft Corporation en los Estados Unidos y/o otros
pases. Crystal Decisions y Crystal Reports son ambas marcas registradas de
Seagate Software Information Management Group Holdings, Inc. en los Estados
Unidos y/o otros pases.
Los nombres de compaas existentes y productos mencionados aqu pueden ser
marcas registradas en los Estados Unidos y/o otros pases de los dueos
respectivos.
Los nombres de compaas, productos, personas y/o informacin usada en
ventanas de ilustracin y ejemplos son ficticios y no pretenden de ninguna forma
representar individuos reales, compaas, productos o eventos, a menos que se
exprese lo contrario.

Garanta

Great Plains Software, Inc. y Microsoft Corporation desconoce toda garanta


relacionada con los cdigos de ejemplo contenido en esta documentacin, includa
la garanta de la capacidad de comercio y la conveniencia para un propsito
particular.

Limitacin de
Responsabilidad

El contenido de este manual se otorga nicamente para fines informativos, y est


sujeto a cambios sin notificacin previa, y no debe interpretarse como un
compromiso de Great Plains Software, Inc. o Microsoft Corporation. Great Plains
Software, Inc. y Microsoft Corporation no asume ninguna responsabilidad por
cualquier error o inexactitudes que pudieran aparecer en este manual. Ni Great
Plains Software, Inc., Microsoft Corporation o cualquier otro que haya estado
involucrado en la creacin, produccin o envo de esta documentacin puede ser
responsable por cualquier dao directo, secundario, especial, incluyendo cualquier
prdida de beneficios pronosticados, como consecuencia del uso de esta
documentacin y los cdigos de ejemplo.

Contrato de Licencia

El uso de este producto est cubierto bajo el contrato de licencia suministrado con
el producto del software. Si usted tiene cualquier consulta, por favor llame al
departamento de asistencia al consumidor de Microsoft Business Solutions al 800456-0025 o al 701-281-6500.

Fecha de Publicacin

Mayo 2003

i
i
2
5
6

Tabla de Contenidos

Tabla de Contenidos
Bienvenido a Visual Basic para Aplicaciones .......................................................................................... 1
Qu contiene este manual? ..................................................................................................................... 1
Convenciones Tipogrficas ...................................................................................................................... 2

Programando VBA en Solomon

Visin General ......................................................................................................................................... 3


Modelo de Objetos de Ventanas Solomon ............................................................................................... 4
Ambiente de Desarrollo Integrado (IDE) VBA........................................................................................ 4
Objetos Solomon (Solomon Objects) ..................................................................................................... 14
Eventos Solomon (Solomon Events) ...................................................................................................... 15
APIs Solomon (Solomon APIs) ............................................................................................................. 15
Declarando Variables ............................................................................................................................. 16
Incluyendo Archivos Externos ............................................................................................................... 16
Niveles y Eventos (Levels and Events) .................................................................................................. 17
Funciones de Mensaje (Message Functions) .......................................................................................... 18
Ejemplo de Funciones de Fecha (Sample Date Functions) .................................................................... 19
Estructuras (Structures) .......................................................................................................................... 21
Flujo transaccional de los Campos de Usuario (Transactional Flow of User Fields) ............................. 22
Tratar Campo de Caracteres tal como Campos de Fecha Treating Character Fields like Date Fields ... 22
Usando Declaraciones SQL (Using SQL Statements) ........................................................................... 24
Trabajando con Grilla (Working with Grids) ......................................................................................... 25

Propiedades Solomon

29

Propiedad BlankErr ................................................................................................................................ 29


Propiedad Enabled ................................................................................................................................. 30
Propiedad FieldName ............................................................................................................................. 31
Propiedad Heading ................................................................................................................................. 32
Propiedad Mask...................................................................................................................................... 33
Propiedad Max ....................................................................................................................................... 34
Propiedad Min ........................................................................................................................................ 35
Propiedad TabIndex ............................................................................................................................... 36
Propiedad Visible ................................................................................................................................... 37

Eventos de Ventana Solomon (Solomon Screen Events)

39

Eventos de Control Solomon .................................................................................................................. 39


Evento Chk (Objeto de Control de Solomon) ........................................................................................ 40
Evento Click (Objeto de Control de Solomon) ...................................................................................... 43
Evento Default (Objeto de Control de Solomon) ................................................................................... 44
Evento OnDelete (Objeto de Control de Solomon) ................................................................................ 46
Evento PV (Objeto de Control de Solomon) .......................................................................................... 48
Evento OnUpdate (Objeto de Control de Solomon) ............................................................................... 50
Evento Display (Objeto de Formulario (form) de Solomon).................................................................. 54
Evento Hide (Objeto de Formulario (form) de Solomon) ...................................................................... 55
Evento Load (Objeto de Formulario (form) de Solomon) ...................................................................... 56

ii

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


Evento LineChk (Objeto de Grilla (grid) de Solomon) .......................................................................... 57
Evento LineGotFocus (Objeto de Grilla (Grid) de Solomon) ................................................................ 59
Evento OnCancel (Objeto de Actualizacin Solomon) .......................................................................... 61
Evento OnFinish (Objeto de Actualizacin de Solomon) ...................................................................... 63
Evento OnInsert (Objeto de Actualizacin de Solomon) ....................................................................... 65

Llamadas de Funciones API de Solomon

67

Resumen de Referencia de API de Solomon .......................................................................................... 67


Declaracin AliasConstant ..................................................................................................................... 73
Funcin ApplGetParms .......................................................................................................................... 74
Funcin ApplGetParmValue .................................................................................................................. 75
Funcin ApplGetReturnParms ............................................................................................................... 78
Declaracin ApplSetFocus ..................................................................................................................... 79
Declaracin ApplSetParmValue ............................................................................................................. 80
Funcin CallChks ................................................................................................................................... 82
Funcin DateCheck ................................................................................................................................ 83
Funcin DateCmp .................................................................................................................................. 84
Funcin DateMinusDate......................................................................................................................... 85
Declaracin DatePlusDays ..................................................................................................................... 86
Declaracin DatePlusMonthSetDay ....................................................................................................... 87
Funcin DateToIntlStr ............................................................................................................................ 88
Funcin DateToStr ................................................................................................................................. 89
Funcin DateToStrSep ........................................................................................................................... 90
Funciones DBNavFetch ......................................................................................................................... 91
Declaracin DispFields .......................................................................................................................... 93
Declaracin DispForm ........................................................................................................................... 95
Funcin DParm ...................................................................................................................................... 96
Declaracin Edit_Cancel ........................................................................................................................ 97
Declaracin Edit_Close .......................................................................................................................... 98
Funcin Edit_Delete ............................................................................................................................... 99
Funcin Edit_Finish ............................................................................................................................. 100
Funcin Edit_First ................................................................................................................................ 101
Funcin Edit_Last ................................................................................................................................ 102
Funcin Edit_New................................................................................................................................ 103
Funcin Edit_Next ............................................................................................................................... 104
Funcin Edit_Prev ................................................................................................................................ 106
Declaracin Edit_Save ......................................................................................................................... 107
Funcin FPAdd .................................................................................................................................... 108
Funcin FParm ..................................................................................................................................... 109
Funcin FPDiv ..................................................................................................................................... 110
Funcin FPMult.................................................................................................................................... 111
Funcin FPRnd ..................................................................................................................................... 112
Funcin FPSub ..................................................................................................................................... 113
Declaracin GetBufferValue ................................................................................................................ 114
Funcin GetDelGridHandle ................................................................................................................. 115
Funcin GetGridHandle ....................................................................................................................... 116
Funcin GetObjectValue ...................................................................................................................... 117
Funcin GetProp .................................................................................................................................. 118
Funcin GetSqlType ............................................................................................................................ 120

i
i
i
i
i
i
2
5
6

Tabla de Contenidos

iii

Declaracin GetSysDate ...................................................................................................................... 121


Declaracin GetSysTime...................................................................................................................... 122
Declaracin HideForm ......................................................................................................................... 123
Declaracin IncrStrg ............................................................................................................................ 124
Declaracin IntlStrToDate ................................................................................................................... 125
Funcin IParm ...................................................................................................................................... 126
Funcin Is_TI ....................................................................................................................................... 127
Funcin Launch .................................................................................................................................... 128
Funcin MCallChks ............................................................................................................................. 131
Declaracin MClear ............................................................................................................................. 132
Declaracin MClose ............................................................................................................................. 133
Funcin MDelete .................................................................................................................................. 135
Declaracin MDisplay ......................................................................................................................... 136
Declaracin Mess ................................................................................................................................. 138
Declaracin MessBox .......................................................................................................................... 141
Declaracin Messf ................................................................................................................................ 142
Funcin MessResponse ........................................................................................................................ 145
Funcin mFindControlName ................................................................................................................ 146
Funcin MFirst ..................................................................................................................................... 148
Funcin MGetLineStatus ..................................................................................................................... 149
Funcin MGetRowNum ....................................................................................................................... 150
Declaracin MInsert ............................................................................................................................. 151
Declaracin MKey ............................................................................................................................... 153
Funcin MKeyFind .............................................................................................................................. 155
Declaracin MKeyFld .......................................................................................................................... 157
Declaracin MKeyOffset ..................................................................................................................... 160
Funcin MLast ..................................................................................................................................... 164
Declaracin MLoad .............................................................................................................................. 165
Funcin MNext .................................................................................................................................... 167
Funcin MPrev ..................................................................................................................................... 168
Funcin MRowCnt ............................................................................................................................... 169
Declaracin MSet ................................................................................................................................. 170
Funcin MSetLineStatus ...................................................................................................................... 171
Declaracin MSetProp ......................................................................................................................... 173
Declaracin MSetRowNum ................................................................................................................. 174
Declaracin MSort ............................................................................................................................... 175
Declaracin MUpdate .......................................................................................................................... 176
Funcin NameAltDisplay ..................................................................................................................... 177
Funcin PasteTemplate ........................................................................................................................ 178
Funcin PeriodCheck ........................................................................................................................... 179
Funcin PeriodMinusPeriod ................................................................................................................. 180
Funcin PeriodPlusPerNum ................................................................................................................. 181
Funciones PVChkFetch ........................................................................................................................ 182
Declaracin SaveTemplate ................................................................................................................... 184
Declaracin SDelete ............................................................................................................................. 186
Funcin SDeleteAll .............................................................................................................................. 187
Declaracin SetBufferValue ................................................................................................................ 188
Declaracin SetDefaults ....................................................................................................................... 189
Declaracin SetLevelChg Statement .................................................................................................... 191
Funcin SetObjectValue ...................................................................................................................... 193

iv

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


Declaracin SetProp ............................................................................................................................. 194
Declaracin SetStatusBarText .............................................................................................................. 196
Funciones SFetch ................................................................................................................................. 197
Funciones SGroupFetch ....................................................................................................................... 200
Declaracin SInsert .............................................................................................................................. 203
Funcin SParm ..................................................................................................................................... 205
Declaracin Sql .................................................................................................................................... 206
Declaracin SqlCursor ......................................................................................................................... 207
Declaracin SqlCursorEx ..................................................................................................................... 209
Funcin SqlErr ..................................................................................................................................... 213
Declaracin SqlErrException ............................................................................................................... 215
Declaracin SqlExec ............................................................................................................................ 217
Funciones SqlFetch .............................................................................................................................. 218
Declaracin SqlFree ............................................................................................................................. 221
Declaracin SqlSubst ........................................................................................................................... 222
Declaracin StrToDate ......................................................................................................................... 223
Declaracin StrToTime ........................................................................................................................ 224
Declaracin SUpdate ............................................................................................................................ 225
Funcin TestLevelChg ......................................................................................................................... 228
Funcin TimeToStr .............................................................................................................................. 230
Declaracin TranAbort ......................................................................................................................... 231
Declaracin TranBeg ............................................................................................................................ 232
Declaracin TranEnd ............................................................................................................................ 233
Funcin TranStatus .............................................................................................................................. 234
Funcin VBA_MExtend....................................................................................................................... 235
Funciones VBA_MOpen ...................................................................................................................... 236
Declaracin VBA_SetAddr .................................................................................................................. 238

Glosario

243

ndice

247

2
5
6

Introduccin

Introduccin

Bienvenido a Visual Basic para Aplicaciones


Microsoft Visual Basic para Aplicaciones lidera la industria en el poder, la facilidad
de integracin y la compatibilidad con Visual Basic. Usted va a encontrar VBA fcil de
usar para crear cdigo que automatice una variedad de tareas.

Qu contiene este manual?


Este manual incluye:
Gua de lenguaje de cdigo de Visual Basic para Aplicaciones para Microsoft
Business SolutionsSolomon.
Una completa lista de referencia sobre APIs Solomon.
A fin de complementar los productos disponibles para Visual Basic para Aplicaciones
en el mdulo del Administrador de Adaptaciones de Solomon, este manual se divide en
las siguientes secciones:

Programando VBA en Solomon


Entrega un resumen de las implementaciones Solomon de Microsoft Visual Basic para
Aplicaciones (VBA). Dentro de los tpicos discutidos se incluye el modelo de objetos
de Solomon, el ambiente integrado de desarrollo (IDE) de VBA, cmo declarar
variables, cmo inclur archivos externos y el uso de expresiones SQL.

Propiedades Solomon
Enumera y describe las propiedades Solomon disponibles en el lenguaje de Visual
Basic para Aplicaciones.

Eventos de Pantalla de Solomon


Enumera, describe y entrega ejemplos de los eventos de pantalla de Solomon VBA.
Estos abarcan varios controles de ventana y objetos.

Llamadas a Funciones API de Solomon


Enumera, describe y entrega ejemplos de funciones API Solomon disponibles en el
lenguaje de Visual Basic para Aplicaciones.

Glosario
Define palabras y terminologa usada comunmente en VBA.

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Convenciones Tipogrficas
Las siguientes convenciones tipogrficas son usadas a lo largo de esta documentacin:
A representar:

La sintaxis es:

Declaraciones y funciones

Negrita; caracter inicial en mayscula:


Abs
Lenb(variable)

Argumentos de declaraciones o
funciones

Todas en minscula, letras en cursiva:

Argumentos y/o caracteres


opcionales

Argumentos en cursiva y/o caracteres en corchetes:

Opcin requerida (de una lista


de opciones) para un
argumento

Una lista dentro de llaves, separando las opciones mediante


el operador O:

variable, rate, prompt$


[,caption$], [type$], [$]

{Goto label | Resume Next | Goto 0}

Programando VBA en Solomon

Programando VBA en Solomon


Visin General
Microsoft Visual Basic para Aplicaciones (VBA) es la ms importante tecnologa
integrada de desarrollo para aplicaciones de paquetes de software hechos a medida para
integrarlos con datos y sistemas existentes. VBA ofrece una comprensiva serie de
herramientas de programacin basados en el sistema de desarrollo Visual Basic de
Microsoft, el cual es el sistema de desarrollo rpido de aplicaciones ms popular del
mundo. Ahora, esta poderosa herramienta ha sido integrada en el mdulo del
Administrador de Adaptaciones de Solomon!
Con Microsoft VBA, los desarrolladores Solomon pueden maximizar las capacidades
del mdulo de Administrador de Adaptaciones para crear potentes personalizaciones
que cumplan con las necesidades de negocios ms demandantes en un lapso de tiempo
corto y a costo reducido. Al usar VBA y el Administrador de Adaptaciones para
personalizar Solomon, mas que desarrollar aplicaciones desde cero, usted es capaz de
ahorrar tiempo y dinero, reducir riesgos, potenciar habilidades de desarrollo y producir
la solucin de software que calza exactamente a sus requerimientos de negocio nicos.

Caractersticas Claves
La implementacin de VBA de Microsoft Business Solutions dentro del Administrador
de Adaptaciones ofrece a los desarrolladores Solomon estas importantes ventajas:
Tecnologa VBA comn la misma versin de VBA se usa a lo largo de Microsoft
Office y marca puntos en otros productos populares de software
Ambiente de desarrollo integrado (IDE) standarizado un estndard de la
industria IDE que incluye al editor de Visual Basic, el cual es familiar para
millones de desarrolladores de software al rededor del mundo.
Paridad absoluta del lenguaje core con Microsoft Visual Basic el mismo
mejoramiento del lenguaje core como lo ha tenido la herramienta de desarrollo que
ms ha satisfacido a los usuarios de Microsoft.
IDE localizado y ayuda en lnea soporte para desarrolladores que trabajan en
idiomas diferentes al ingls, incluyendo francs, alemn, japons y chino.
Tecnologa IntelliSense para desarrolladores referencia instantnea para la
sintaxis de APIs Solomon y el modelo de objetos Solomon.
Formularios (forms) Microsoft puede crear formularios con mucho contenido y
ventanas de dilogo a su medida en cualquier aplicacn Solomon.
Soporte de controles ActiveX inserte controles ActiveX directamente en los
formularios (forms) Microsoft.

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Modelo de Objetos de Ventanas Solomon


Solomon expone su funcionalidad a VBA a travs del modelo de objetos de Solomon,
o una coleccin de objetos que juntos representan una ventana Solomon. El modelo de
objetos de Solomon es la interface que permite que los siguientes tipos de VBA se
comuniquen con los objetos de ventana de Solomon:
VBA dentro del mdulo de Administrador de Adaptaciones
VBA en aplicaciones externas tales como Microsoft Office u otras aplicaciones
compatibles.
Los desarrolladores de Solomon pueden escribir perqueos cdigos de programa para
controlar el comportamiento de los objetos de las ventanas Solomon, y estos objetos
pueden ser controlados desde dentro de VBA y el Customizaton Manager como
tambin desde cualquier herramienta externa compatible.

Ambiente de Desarrollo Integrado (IDE) VBA


El ambiente de desarrollo integrado (IDE) es el embiente de desarrollo que un
desarrollador Solomon utiliza para crear soluciones Solomon que involucre escribir
cdigo VBA. El ambiente para editar y eliminar errores (debugging), el Editor Visual
Basic, existe fuera de Solomon. Esto permite a los desarrolladores el escribir cdigo y
ver el resultado de la programacin en la aplicacin Solomon en forma simultnea. A
pesar de que el IDE reside fuera de Solomon, se ejecuta en el mismo espacio de
memoria, creando una estrecha integracin para manejo de eventos como tambin
mejorando el rendimiento.

Figura 1: Editor Visual Basic

Programando VBA en Solomon

Editor de Cdigo
El editor de Visual Basic incluye un Editor de Cdigo (figura 1), el cual entrega una
sintaxis con colores para ayudar el desarrollo de la sintaxis, caractersticas IntelliSense,
arrastrar y pegar, bloquear comentarios y revisin de sintaxis.
Desarrolladores Solomon pueden abrir ventanas de cdigo para cualquier objeto que
contenga cdigo (por ejemplo una ventana Solomon), como tambin los mdulos,
clases o formularios (forms) agregados al proyecto VBA. En cada ventana,
caractersticas IntelliSense (figura 2) entregan ayuda en sintaxis y programacin:
Completa Palabra completa la palabra que est siendo tipeada cuando
suficientes letras han sido tipeadas para hacer la palabra distinguible.
Informacin Rpida ayuda para entregar informacin de sintaxis, la cual aparece
automaticamente cuando se tipea un procedimiento o nombre de mtodo.
Lista de Propiedades/Mtodos un men colgante que muestra una lista de
propiedades y mtodos disponibles a un objeto seguido de un punto (.) en la
sintaxis.
Lista de Constantes un men colgante que muestra constantes vlidas para la
propiedad o argumento que se est creando.
Ayuda de datos muestra informacin de la variable colocada bajo el cursor
cuando VBA se encuentra en modo de bloqueo.

Figura 2: Lista de Propiedades/Mtodos, caracterstica IntelliSense de VBA

El editor de cdigo para desarrolladores Solomon tambin permite especificar


indicadores de margen (margin indicators) para setear un breakpoint, colocar la
siguiente declaracin, o setear un bookmark haciendo un simple click en el margen del
editor de cdigo (figura 3).

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Figura 3: Indicadores de margen

Project Explorer y la Ventana de Propiedades (Properties)


El Project Explorer del VBA IDE muestra los componentes del proyecto VBA (por
ejemplo formularios (forms), mdulos y referencias) asociadas con cada proyecto
abierto, y la ventana de propiedades (Properties) muestra las propiedades de objetos
de aplicacin, formularios (forms), y controles (ordenados ya sea alfabeticamente o por
categora).

Figura 4: Project Explorer y Ventana de Propiedades (Properties)

Programando VBA en Solomon

Herramientas de Deteccin y Eliminacin de Errores en VBA


(Debugging Tools)
Las poderosas herramientas de deteccin y eliminacin de errores en el IDE de VBA,
las mismas disponibles para los desarrolladores de Visual Basic, permiten a los
desarrolladores Solomon destinguir rpidamente entre los errores de compilacin,
programacin lgica o errores de tiempo de ejecucin. Estas herramientas incluyen:
Locals window muestra todo los valores de las variables en el rea de accin en
forma automtica.
Watches window permite monitorear variables especficas o expresiones de
valores. Permite interrumpir la ejecucin del cdigo basado en el estado de una
expresin de valores dentro del watch window.
Immediate window evala cualquier declaracin o expresin de Visual Basic.
Call Stack visualiza procedimientos y llamados activos durante el brake mode.
Para mejorar la eficiencia de la deteccin y eliminacin de errores, desarrolladores
Solomon pueden arrastar y pegar cdigo desde el editor de Visual Basic hacia las
ventanas de Inmediate y Locals.

Figura 5: Herramientas de Deteccin y Eliminacin de Errores de VBA ( Debugging Tools)

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Visor de Objetos (Object Browser)


La habilidad para manipular objetos de componentes y applicacin en forma rpida es
clave para el desarrollo de Solomon eficiente. El IDE le entrega a los desarrolladores
Solomon esta capacidad con el Visor de Objetos (Object Browser), el cual
meticulosamente diferencia entre built-in properties, custom properties, methods, event
handlers y defined procedures (figura 6).
El Visor de Objetos tambin mustra tipos de retornos de funciones, nombres de
parmetros y tipos, tipos definidos por usuario y constantes. Dentro de la jerarqua de
objetos se utilizan saltos hyperlink para facilitar la navegacin. Desarrolladores pueden
utiulizar el Visor de Objetos para buscar objetos y miembros dentro de libraras de
tipo.

Figura 6: Visor de Objetos (Object Browser)

Programando VBA en Solomon

Formularios Microsoft y Diseador de Formularios Microsoft


(Microsoft Forms and Integrated Forms Designer)
Aparte de la edicin de cdigo y su ejecucin, VBA entrega a los desarrolladores
Solomon gran control de la apariencia fsica mediante el uso de la potente herramienta
del Diseador de Formularios (Forms Designer) Microsoft. Con los formularios de
Microsoft, los desarrolladores necesitan aprender como crear ventanas de dilogo
solamente una vez. Luego, el proceso de diseo es el mismo para cada nueva ventana
de dilogo. Ventana de dilogos existentes pueden ser modificadas y utilizadas en otros
proyectos VBA u otras aplicaciones que soporten VBA.

Figura 7: Ventana de dilogo tpica

Porque los formularios del usuario (user forms) pueden ser desplegados sin modo,
los usuarios pueden interactuar con las ventanas de dilogo de la aplicacin Solomon
mientras la ventana de dilogo se est mostrando.
Para completar los formularios Microsoft est el diseador de formularios integrado
(integrated form designer) IDE. Este diseador, integrado en el IDE, entrega de
elementos que permiten al desarrollador de Solomon disear elementos de interface y
escribir cdigo de la aplicacin en el mismo ambiente de trabajo.

10

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Figura 8: Diseador de Formularios (Forms) y Herramientas de Control (Control Toolbox)

Desarrolladores colocan controles de dilogo sobre el formulario (form) utilizando las


herramientas de control (Controls toolbox). Una vez que los controles estn colocados
sobre el formulario, estos pueden ser movidos, cambiados de tamao o duplicados
rpidamente segn las necesidades. La herramienta de control (Controls toolbox)
puede ser fijada para mostrar todos los controles o puede ser personalizada de la
siguiente forma:
Creando planillas de controles (control templates) arrastre el(los) control(es)
desde un formulario (form) de regreso a la barra de herramientas de controles
(Controls toolbox) para crear una plantilla de control (control template) reusable.
Agreganado o removiendo pginas agregar pginas a las herramientas de control
(Control Toolbox) que contenga grupos hechos a medida de controles de
formulario (form controls).
Importando pginas de control (control pages) agregue pginas importndolas
desde otro desarrollador. Usted tambin puede exportar pginas de control (control
pages) para su uso por otros desarrolladores.
Creando controles a medida (custom controls) modifique un cono de control y
sus herramientas de ayuda (tool tip) asociadas.

Programando VBA en Solomon

11

Soporte de controles ActiveX (ActiveX Control Support)


Los formularios (Forms) de Microsoft soportan controles ActiveX (ActiveX Controls),
llamados formalmente OLE Controls o controles hechos a la medida. Los controles
ActiveX son componentes de software pre-hechos, reusables, los cuales permiten a los
desarrolladores Solomon agregar capacidades interactivas para sus soluciones de
software hechos a la medida. Hoy en da existen ms de 4500 controles ActiveX
disponibles de diferentes vendedores.

Figura 9: Ejemplo del control ActiveX Calendar

12

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Soporte Add-In (Add-In Support)


Para mejorar an ms la flexibilidad y productividad en el desarrollo, VBA soporta
completamente add-ins para propsitos especiales como escritores de cdigo (code
writers) y diseadores de formularios (form designers), los cuales:
Son creados como componentes Component Object Model (COM).
Soporta de interface IDTExtensibility2.
Todo add-in que cumple con este criterio puede operar dentro del editor de Visual
Basic. Tales add-ins son agregados mediante el IDE Add-In Manager.

Figura 10: Add-In Manager

Programando VBA en Solomon

13

Seguridad del Proyecto (Project Security)


Para proteger la propiedad intelectual y la integridad del proyecto, los desarrolladores
Solomon pueden proteger mediante una clave cada proyecto de VBA. Esto asegura que
slo el hacker ms dedicado podr tal vez acceder y decodificar la informacin del
proyecto.

Figura 11:Proteccin del Proyecto IDE Encriptacin de 40-Bit

14

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Objetos Solomon (Solomon Objects)


Un objeto (object) es todo item usado en el GUI (por ejemplo la ventana Solomon)
para controlar entrada y salida de datos de control (control data). Cada campo (field),
etiqueta (label) o formulario (frame) en una ventana Solomon includa la ventana en
s son considerados objetos (objects). Todo objeto tiene propiedades (properties),
atributos que determinan la apariencia de un objeto y su comportamiento (abrir un
formulario, mostrar un valor, etc.).

Objetos de Ventana Incrustado (Embedded Screen Objects)


Objetos que existen en la aplicacin Solomon que son expuestos al ambiente VBA son
conocidos como objetos de ventana incrustados (embedded screen objects). Estos
objetos son visibles desde el visor de objetos de VBA (VBA Object Browser),
IntelliSense, y el dilogo de propiedades en el mdulo de Administrador de
Adaptaciones de Solomon.
Cada objeto es accesible dentro del cdigo de VBA. Esto permite un uso directo de los
objetos y los nombres de propiedades al trabajar en el cdigo de proyectos VBA. Lo
siguiente es un ejemplo de este uso:
' Highlight the Batch number field,
cbatnbrH.BackColor = vbHighlight
'Disable the autoreversing field.
Cautorev.Enabled = False

Programando VBA en Solomon

15

Eventos Solomon (Solomon Events)


Un evento (event) es una actividad que ocurre dentro del ambiente de la ventana en un
momento determinado: al hacer un click con el mouse, al cargar un formulario (form),
cuando un dato es recibido, etc. Eventos son tipicamente parte de las propiedades de
los objetos Solomon. Los eventos Solomon y sus objetos asociados se muestran
resumidamente en la siguiente lista:
Evento Solomon:

Tipo de Objeto Asociado:

Click

Button

Default

Control

Chk

Control

PV (possible value)

Text Control

LineGotFocus

Grid

LineChkEvent

Grid

Load

Form

Display

Form

Hide

Form

OnFinish

Update

OnInsert

Update

OnCancel

Update

OnUpdate

Update

OnDelete

Update

APIs Solomon (Solomon APIs)


Solomon proporciona un comprensivo set de funciones y declaraciones de Interface de
Aplicacin de Programa (Application Program Interface) (API) que son
completamente compatibles con el lenguaje VBA. Estas APIs pueden cubrir
practicamente cualquier necesidad de desarrollo. Las APIs de Solomon actuales estn
listadas y explicadas en Solomon API Function Calls, en la pgina 65.

16

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declarando Variables
VBA soporta mtodos de declaracin de variables. Eso s, dentro del contexto de
Solomon, usted debe seguir ciertas reglas al declarar variables.
No sea redundante en sus declaraciones de variables. Considere declarar estas como
globales (GLOBAL) antes que de tipo DIM en cada subrutina. De esta forma, usted
necesitar declararlas solamente una vez. Coloque Option Explicit en
General_Declarations en el comienzo de cada archivo como tambin en los archivos
externos. Esto es una funcin de VB que asegura una declaracin de variable explcita.
Tanto VB como VBA soportan el uso de $, % y # como variables String, Integer y
Double respectivamente.
Usted no necesita fijar el campo a (NULL) dentro del programa de control. Al
declarar dos variables globales tal como se muestra en los ejemplos de tipo de
estructura, usted simplemente necesita fijar bRecord = nRecord para colocar el registro
en cero o bRecord.FieldName = nRecord.FieldName para colocar el registro en cero en
un campo (field) particular.

Incluyendo Archivos Externos


Al crear cualquier adaptacin que requiera cdigo VBA, el mdulo de Administrador
de Adaptaciones agrega en forma automtica el siguiente mdulo al proyecto:
VBTools_VBA (VBTVBA.BAS)

El mdulo VBTools_VBA se encuentra en el directorio de mdulos VBA de Solomon


(CU\VBA\Modules). Este directorio contiene declaraciones globales de estructuras y
variables que pueden utilizarse en un programa VBA. Estos son suministrados de tal
forma que los valores de retorno para funciones, por ejemplo, no necesitan ser
declarados explicitamente en el programa VBA (serr=,serr1=, etc.).
El mdulo VBTools_VBA tambin contiene declaraciones de funciones y subrutinas
en el Kernel de Solomon (Swimapi.dll) que puede ser utilizado en un programa VBA.
Todas las funciones y rutinas que sean estndard de VB (Format$, Trim$, etc.) y que
estn documentadas en la ayuda de Visual Basic para Aplicaciones y cuyas funciones
estn declaradas explicitamente en el mdulo VBTools_VBA pueden ser usados en un
programa VBA. Note que las declaraciones de funciones y subrutinas en el mdulo
VBTools_VBA entregan la sintaxis de la funcin o el uso de la subrutina. Consultas
sobre el uso de la sintaxis de cualquier funcin API de Solomon y las constantes
definidas pueden ser resueltas tomando la referencia del mdulo VBTools_VBA o
utilizando las capacidades IntelliSense de VBA.

Programando VBA en Solomon

17

Se puede crear un archivo externo que contenga funciones especficas para la


aplicacin, constantes y subrutinas (en formato de texto) y ser agregadas manteniendo
el mismo estilo del mdulo VBTools_VBA. Usted podra crear tambin sus propias
funciones en un archivo .dll y declararlas de la misma forma como se declaran las
funciones API de Solomon en el mdulo VBTools_VBA. Si usted conoce el nombre
del objeto Solomon, usted no necesita agregar ningn cdigo en la ventana de eventos
para el objeto Solomon. Por ejemplo, si usted ha creado una rutina que desea que sea
llamada por ccustid_Chk, usted puede nombrar a esta rutina ccustid_Chk. Al inclur
este archivo, esta rutina se llama en forma automtica. Las nicas dos excepciones a
esto son que usted no puede actualizar ni eliminarlo como sub nombre (Sub name).
Estos son nombres reservados de VB. En estos dos casos usted necesita haber
codificado en la ventana el llamado a rutinas externas

Niveles y Eventos (Levels and Events)


Cada vez que un nuevo campo (field) es insertado en un formulario (form), usted
necesita especificar el nivel (level) asociado al campo. Un nivel (level) identifica la
asociacin lgica de los registros y los campos que son mantenidos por una aplicacin
particular. Por ejemplo, la ventana Journal Entry (01.010.00) tiene dos niveles
distinguibles: cantidad de cosas (batch) y detalle (detail). El nivel de batch contiene los
campos asociados con la tabla de batch mientras que el nivel de detalle contiene
campos asociados con la tabla del GLTran(General Ledger Transactions). Estos niveles
son numerados partiendo de cero (0). Por lo tanto, Batch es nivel 0 y Transaction es
nivel 1.
Estos nmeros de niveles son muy importantes cada vez que la base de datos es
actualizada. El Kernel de Solomon ejecuta el evento OnUpdate (Save, OnFinish,
OnInsert, OnDelete) una vez por cada uno de los niveles que hayan en una aplicacin
particular. En el ejemplo mencionado recientemente (Journal Entry) el evento
OnUpdate se ejecuta dos veces, una vez para el Batch (nivel 0) y una para el GLTran
(nivel 1) en el caso de que los campos en ambos niveles requieran ser
actualizados/insertados.
Al agregar cdigo VBA al evento OnUpdate, usted debe determinar qu nmero de
nivel usted quiere asociar a su cdigo. Tpicamente, colocando Select Case Level al
comienzo del evento apropiado realiza esto. Por ejemplo, el siguiente cdigo en 01.010
ejecuta sobre el nivel apropiado en el evento OnUpdate:
Select Case Level
Case 0 'Batch
Call MessBox("Batch Updated", MB_OK, "Message")
Case 1 'Transaction
Call MessBox("Grid Updated", MB_OK, "Message")
End Select

18

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funciones de Mensaje (Message Functions)


Existen diversas funciones de mensaje que un programa VBA puede referenciar. El uso
de estas funciones elimina la necesidad de tener que declarar variables para almacenar
cadenas de mensajes (message strings). Por ejemplo, en el VB estndar, usted tiene que
declarar tres variables para almacenar la cadena del mensaje (message string), el tipo y
el ttulo. Usted puede crear un mensaje, asignarlo a Msg_ID y Msg_Type de 1, e
inclurlo a la tabla de mensajes Solomon. De esta forma, usted puede eliminar la
necesidad de declarar estas variables extras y referenciar el nmero de mensaje al
llamado de la declaracin. Esto tambin es muy conveniente cuando usted necesita
usar el mismo mensaje en mltiples programas y rutinas.
Note que usted puede usar cualquiera de los mensajes existentes de Solomon mediante
el tipo Msg_Type = 1, siempre y cuando usted indique el nmero de mensaje y la
cadena de caracteres de sustitucin apropiados.
Asegrese de asignar un valor muy alto a un nuevo mensaje que usted cree, para que
Microsoft Business Solutions no lo sobreescriba en el futuro. El campo Msg_Id en esta
tabla es un entero (integer), por lo que usted podra comenzar los mensajes en el rango
de los 30000 para estar seguro. Usted tambin puede dar parmetros de sustituciones
adicionales a los mensajes.

Programando VBA en Solomon

Ejemplo de Funciones de Fecha (Sample Date Functions)


Esta rutina de ejemplo coloca un campo de fecha existente a la fecha del sistema:
Sub setdate_Click()
Dim NewDate as Sdate
Dim NewStrDate$
Call GetSysDate(NewDate)
NewStrDate = DateToStr(NewDate)
serr1 = SetObjectValue("cpaydate", NewStrDate)
Call DispFields("Form1","cpaydate")
End Sub

Este ejemplo compara dos fechas. Note que usted debe inclur .Val en el nombre de
variables cuando sea apropiado:
Sub Test_Click()
Dim TestDate1 As Sdate
Dim TestDate2 As Sdate
TestDate1.Val = GetObjectValue("cinvcdate")
TestDate2.Val = GetObjectValue("cdocdate")
serr1 = DateCmp(TestDate1, TestDate2)
If serr1 = 0 Then
Call MessBox("Dates are equal", MB_OK, "Message")
ElseIf serr1 > 0 Then
Call MessBox("invdate greater", MB_OK, "Message")
ElseIf serr1 < 0 Then
Call MessBox("docdate greater", MB_OK, "Message")
End If
End Sub

19

20

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Este ejemplo utiliza la funcin BSL WeekDay:


Dim TestDate1 As Sdate
TestDate1.Val = GetObjectValue("cinvcdate")
serr1 = WeekDay(TestDate1.Val)
Select Case serr1
Case 1
Call MessBox( "Sunday", MB_OK, "Message")
Case 2
Call MessBox( "Monday", MB_OK, "Message")
Case 3
Call MessBox( "Tuesday", MB_OK, "Message")
Case 4
Call MessBox( "Wednesday", MB_OK, "Message")
Case 5
Call MessBox( "Thursday", MB_OK, "Message")
Case 6
Call MessBox( "Friday", MB_OK, "Message")
Case 7
Call MessBox( "Saturday", MB_OK, "Message")
End Select

Programando VBA en Solomon

21

Estructuras (Structures)
Usted no puede declarar simplemente una variable, hacer una declaracin SQL y
capturar el resultado de la declaracin SQL para colocarlo dentro de esta variable.
Usted tiene que declarar una estructura para cualquier resultado de una declaracin
SQL (incluyendo funciones agregadas). Si usted crea estructuras especiales para
funciones agregadas o declaraciones de seleccin especiales select fld1, fld2 desde el
registro) (no recomendado) usted tiene que inclur todo los campos en la declaracin
de seleccin y todo campo en la restriccin no inclurlo en la lista de seleccin.
Por ejemplo, la siguiente declaracin select:
Select CustId, Name, Zip From Customer Where
City = 'Findlay' and Zip = '45840' and CurrBal > 0;

requerir la siguiente definicin de estructura:


Type Result
CustId As String * 10
NameAs String * 30
ZipAs String * 10
CityAs String * 30
CurrBal As Double
End Type
Global bCustResult As Result, nCustResult As Result

bCustResult es usado en todo llamado sfetch.


La siguiente funcin agregada:
Select CustId, Sum(OrigDocAmt) From ARDoc
Group By CustId;

requerir la siguiente definicin de estructura:


Type SumResult
CustId As String * 10
Amount As Double
End Type
Global bSumResult As SumResult

Al usar funciones SQL agregadas como se ve en el segundo ejemplo arriba, usted debe
usar las funciones SQL sgroupfetch.

22

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Flujo transaccional de los Campos de Usuario (Transactional


Flow of User Fields)
Campos de usuario en las tablas de detalle transaccionales de Solomon (Solomon
transactional detal tables) transimiten automaticamente al General Ledger si usted fija
el detalle. Por ejemplo, si usted coloca ARTran.User1 en el rea de detalle (detail area)
de HandPreparedIncoices(08.010.00), el campo correspondiente GLTran.User1 es
fijado al mismo valor en tiempo de su liberacin. De esta forma, campos adaptados
(custom fields) pueden ser reportados en los reportes de transaccin General Ledger
(General Ledger transaction reports).

Tratar Campo de Caracteres tal como Campos de Fecha


Treating Character Fields like Date Fields
An cuando los campos de cadena de caracteres (string) y los campos de punto flotante
(float) son los nicos tipos de campo de usuario, usted puede hacer que un campo de
caracter se comporte como un campo de fecha. Cuando inserte ya sea el campo User1 o
el campo User2 en un formulario (form), ajuste el tamao apropiadamente y luego
coloque la propiedad (property) de Mask en 99/99/99. Para manejar el chaqueo de
errores el siguiente cdigo debe ser insertado.
Para resetear el campo a la fecha del sistema actaul, el siguiente evento default debe
existir:
Sub cuser1_Default(newvalue$, retval%)
Dim GetDate As Sdate
Call GetSysDate(GetDate)
newvalue = Mid$(datetostr(getdate), 1, 4) +
Mid$(datetostr(getdate), 7, 2)
End Sub

Este evento default tiene que forzarse para ser ejecutado por lo siguiente (Note que esto
ser colocado tipicamente en un evento chk precedente):
serr = setdefaults("Form1", "cuser1")

Para realizar chqueo de errores en este campo, coloque lo siguiente en el evento chk:
Sub cuser1_Chk(chkstrg$, retval%)
serr = DateCheck(chkstrg)
If serr = -1 Then
' Invalid Day
Call Messbox("Invalid day, please re-enter", MB_OK,
"Message")
retval = errnomess
ElseIf serr = -2 Then
'Invalid Month
Call Messbox("Invalid month, please re-enter", MB_OK,
"Message")
retval = errnomess

Programando VBA en Solomon


End If
End Sub

23

24

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Usando Declaraciones SQL (Using SQL Statements)


El utilizar VBA requiere el conocimiento de la sintaxis SQL, su uso en las bases de
datos SQL de Solomon y el Kernel Solomon. Para la creacin de declaraciones SQL
(SQL statements) y su sintaxis, refirase a la documentacin apropiada de bases de
datos SQL que es suministrada junto al software SQL.
Existen dos mtodos para rescatar registros utilizando las funciones API sqlfetch() de
Solomon. Usted puede declarar una variable de cadena de caracteres (string) que
guarde la declaracin SQL y utilizar esta variable en la llamada sqlfetch, o usted puede
crear un procedimiento SQL almacenado y referenciar el nombre del procedimiento
almacenado en el llamado sqlfetch. El utilizar un procedimiento almacenado es mucho
ms simple, ya que minimiza la cantidad de cdigo VBA y hace que la mantencin de
las declaraciones SQL sea mucho ms fcil si quiere utilizar la misma declaracin SQL
en diferentes lugares. Para hacer esto, usted slo necesita cambiar el procedimiento
almacenado y no necesita modificar el cdigo VBA. Los siguientes dos ejemplos
utilizan sqlfetch1 y realizan tareas idnticas, pero el ltimo utiliza mucho menos
cdigo.
Sin procedimiento almacenado:
Dim SqlStr$
SqlStr = "Select * from Customer where CustId =" + sparm(chkstrg)
+ "Order By CustId"
serr1 = sqlfetch1(c1, SqlStrg, bCustomer, Len(bCustomer))

Con procedimiento almacenado:


Create Procedure GetCustomer @parm1 AS
Select * from Customer where CustId = @parm1 Order By CustId;

En el cdigo:
serr1 = sqlfetch1(c1, "GetCustomer" + sparm(chkstrg),
bCustomer, Len(bCustomer))

Usted puede usar tambin procedimientos almacenados para ejecutar declaraciones


INSERT, DELETE y UPDATE con parmetros.

Programando VBA en Solomon

25

Trabajando con Grilla (Working with Grids)


Usted puede aadir funcionalidades adicionales al objeto de grilla (grid object). El
objeto Spread1 tiene los eventos LineGotFocus y LineChk expuestos. Usted puede
evaluar bajo control de programa que sucede cuando la fila recibe foco (LineGotFocus)
y cuando el usuario abandona la fila (LineChk). A continuacin se presentan algunos
ejemplos VBA:
Esta adaptacin fue diseada para 01.010, pero debiera funcionar con cualquier
pantalla de grilla para la cual usted quiere resetear un valor en la grilla al valor del
mismo campo en la lnea anterior.
(general) Declarations
Global PriorValue$
Sub Insert(level%, retval%)
If Level = 0 Then
PriorValue = ""
End If
End Sub
Sub cuser1_Chk(chkstrg$, retval%)
PriorValue = chkstrg
End Sub
Sub cuser1_Default(newvalue$, retval%)
If Trim$(PriorValue) <> "" Then
newvalue = PriorValue
End If
End Sub
Sub spread1_LineGotFocus(maintflg%, retval%)
Dim CheckedValue$
If maintflg = INSERTED Then
CheckedValue = GetObjectValue("cuser1")
If Trim$(CheckedValue) = "" Then
serr1 = setdefaults("Form1", "cuser1")
End If
End If
End Sub

26

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Este ejemplo utiliza 01.010 para crear automaticamente una entrada auto-balanceada
Journal. Coloque el Batch.User3 en la parte inferior del formulario. Esto es usado para
guardar la cifra de tapn (plug amount).
General Declarations:
Global Diff#
Sub CreatePlug()
CrTotal = Val(GetObjectValue ("ccrtot"))
DrTotal = Val(GetObjectValue ("cdrtot"))
Diff = FPSub(DrTotal, CrTotal, 2)
serr1 = SetObjectValue ("cuser3", Str$(Diff))
End Sub
Sub cdramt_Chk(chkstrg$, retval%)
Call CreatePlug
End Sub
Sub ccramt_Chk(chkstrg$, retval%)
Call CreatePlug
End Sub
Sub spread1_LineChk(action%, maintflg%, retval%)
Call CreatePlug
End Sub
Sub cacct_Chk(chkstrg$, retval%)
Dim PlugAmount As Double
If Trim$(chkstrg) = "0000" Then
' Plug the Offset
PlugAmount = GetObjectValue ("cuser3")
If PlugAmount > 0 Then
Serr1 = SetObjectValue ("ccramt", Str$(PlugAmount))
ElseIf PlugAmount < 0 Then
Serr1 = SetObjectValue ("cdramt",
Str$(-1 * PlugAmount))
End If
End If
End Sub

Programando VBA en Solomon

27

Este ejemplo acumula la cifra total de transacciones en Voucher and Adjustment Entry
(03.010.00), y fija por defecto la cifra de transaccin para cada lnea a la cifra
requerida a balancear el documento a los detalles. Coloque las siguientes tres lneas
en General_Declarations:
Dim Original#
Dim Sum#
Dim LineAmount#
Sub spread1_linegotfocus(maintflg%, retval%)
Original = Val (GetObjectValue ("cOrigDocAmt"))
If maintflg = INSERTED and Original <> 0 Then
Sum = Val (GetObjectValue ("cDocBal"))
LineAmount = FPSub (Original, Sum, 2)
Serr1 = SetObjectValue ("cTranAmt", Str$(LineAmount))
End If
End Sub

28

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Propiedades Solomon

29

Propiedades Solomon
Propiedad BlankErr
Determina si un valor vlido debe ser introducido o reseteado para un campo.

Observaciones
Setear esta propiedad en Verdadero (True) indica que este campo necesita un valor.
Setear esta propiedad en Falso (False) indica que el campo es opcional. Campos
deshabilitados (disabled) y/o invisibles (invisible) no deben tener esta propiedad en
Verdadero, a menos que sean reseteados con un valor vlido. Si un control es marcado
para requerir un valor (Verdadero) desde la aplicacin, entonces no debe estar marcado
como opcional (Falso) desde el Administrador de Adaptaciones. Sin embargo, si un
control es marcado como opcional desde la aplicacin, puede estar marcado como
requerido desde el Administrador de Adaptaciones.
Para modificar el valor de la propiedad BlankErr en tiempo de ejecucin, se debe usar
la declaracin SetProp en vez de modificar la propiedad directamente desde el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades para evitar conflicos con las adaptaciones.

Tambin Vea
Enabled Property, Declaracin MSetProp, Declaracin SetProp, Propiedad Visible

30

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Propiedad Enabled
Determina si el ususario puede o no modificar el contenido de un control.

Observaciones
Un valor verdadero (True) de esta propiedad indica que este control est habilitado,
muentras que un valor falso (False) deshabilita este control. Campos requeridos no
debieran ser deshabilitados, a menos que sean reseteados en forma automtica con un
valor vlido.
Para modificar el valor de la propiedad Enabled, la declaracin SetProp debe usarse,
en vez de modificar el valor de la propiedad directamente en el cdigo de VB. El uso
de SetProp permite al sistema seguir la pista a los cambios de valores de las
propiedades para evitar conflicos con las adaptaciones y/o otras APIs tales como la
declaracin DisplayMode.
Si un control es deshabilitado por la aplicacin, entonces no puede ser habilitado
utilizando el Administrador de Adaptaciones. Sin embargo, si un control es habilitado
por la aplicacin, entonces puede ser deshabilitado por el Administrador de
Adaptaciones. El valor de la propiedad Enabled puede limitarse en tiempo de
ejecucin pero no ampliarse, dependiendo del nivel al cual los cambios son hechos
(todo usuario, un usuario, etc.). Vea la seccin de Seguridad de la documentacin de
Administrador de Adaptaciones. La propiedad de Enabled no debe ser usada en el
control SAFGrid.

Tambin Vea
Propiedad BlankErr, Declaracin SetProp, Propiedad Visible

Propiedades Solomon

31

Propiedad FieldName
Facilita un ligamiento apropiado entre el control y las variables de dato VB
subyacentes, operando en conjunto con la declaracin SetAddr en el tiempo de
ejecucin.

Observaciones
La informacin de cada dato de control de entrada individual es almacenada en una
variable VB subyacente. En tiempo de ejecucin el control y la variable asociada de
almacenamiento VB son ligadas usando una combinacin de la propiedad FieldName
del control y un llamado correspondiente a la declaracin SetAddr desde el formulario
(form) Form1_Load.
La propiedad FieldName contiene un valor Struct.FieldName junto con otra
informacin ms detallada como el valor de offset del campo (Field Offset Value), tipo
de declaracin (Declare Type) y longitud (Length). Como mnimo, un valor debe ser
introducido en el campo Struct.Field.Name. Este valor estar normalmente en el
formato bTableName.FieldName. La parte del nombre que identifica a la tabla tiene
que corresponder exactamente a la cadena de caracteres del nombre de la tabla, el cual
es pasado en una llamada correspondiente a la declaracin SetAddr. Sin embargo, no
es necesario que corresponda a un nombre de una tabla actual que exista en la base de
datos.
Los campos offset de campo (Field Offset), tipo de declaracin (Declare Type) y
longitud (Length) son opcionales dependiendo de si el nombre de la tabla referenciado
por Struct.FieldName es o no el nombre de la tabla en la base de datos. Si
Struct.FieldName referencia una tabla en la base de datos, entonces SWIM puede
accesar informacin detallada relacionada con cada campo individual utilizando el
diccionario de datos de SQL. Si el nombre de tabla referenciado no corresponde al
nombre de la tabla en la base de datos, entonces se tiene que colocar valores a los
campos offset de campo (Field Offset), tipo de declaracin (Declare Type) y longitud
(Length).
La propiedad FieldName puede ser modificada en tiempo de diseo solamente, no
puede ser modificada en tiempo de ejecucin.
La siguiente tabla contiene los tipos de declaracin (Declare Type) y longitud (Length)
para varios tipos de datos estandar.
Tipo de dato SQL

Tipo de dato VB

Tipo de
Declaracin

Longitud

Character

String

Largo del String

Integer(2)

Integer

Float

Double

Date

SDate

Logical

Integer

Tambin Vea
Declaracin VBA_SetAddr

32

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Propiedad Heading
Contiene el ttulo (caption) para la correspondiente grilla de columna para controles
asociados con SAFGrid.

Observaciones
Los encabezados de columna pueden ser implementados conteniendo ms que una
lnea, separando el texto de cada lnea mediante una coma, tal como Lnea uno, lnea
dos.
Para modificar el valor de la propiedad Heading en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
Si aparece dentro de una grilla un grupo de botones de opciones (option button group),
la grilla utiliza la propiedad Heading del primer botn de opcin como la cabecera de
la columna.

Tambin Vea
Declaracin MSetProp, declaracin SetProp

Propiedades Solomon

33

Propiedad Mask
Determina el tipo y nmero de caracteres que puede ser introducido en un campo
particular.

Observaciones
Cada caracter en la propiedad Mask corresponde a un caracter en el campo
desplegado. Si un caracter de mscara (mask character) es uno de los tipos de mscara
soportados, entonces el valor vlido correspondiente ser permitido para esa posicin
particular. De otro modo, el caracter es considerado como una cadena de caracteres
literal (literal string) para ser desplegada dentro del campo. Estas cadenas de caraceters
literales (literal string) son desplegadas unicamente haciendo que el cursor salte sobre
ellas al introducir valores. Adems, las cadenas de caracteres literales (literal string) no
sern almacenadas en el valor resultante bajo el campo de datos, ya que existen
solamente para fines visuales.
Para modificar el valor de la propiedad Mask en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
El valor de la propiedad Mask puede limitarse en tiempo de ejecucin pero no
ampliarse, dependiendo del nivel al cual los cambios son hechos (todo usuario, un
usuario, etc.). Vea la seccin de Seguridad de la documentacin de Administrador de
Adaptaciones.
La siguiente tabla entrega una lista de los tipos de mscara soportados y su definicin
correspondiente:
Caracter de
Mscara

Descripcin

Numrico (0-9)

Alfabtico (A-Z, a-z)

Alfabtico convertido a maysculas

Alfanumrico (A-Z, a-z, 0-9)

Alfanumrico convertido a maysculas

ASCII 32-127 (espacio, letras, nmeros y caracteres especiales exepto


* y ?)

ASCII convertido a minsculas

ASCII convertido a maysculas

Mask ASCII (Igual que X pero incluye * y ?. Tenga cuidado de usarse


en campos claves en donde el uso de caracteres comodn * y ? pueden
afectar el uso de palabras clave en declaraciones SQL.)

Hexadecimal (0-9, A-F)

Tambin Vea
Declaracin SetProp

34

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Propiedad Max
Determina el valor vlido mximo para el control.

Observaciones
Para modificar el valor de la propiedad Max en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
El valor de la propiedad Max puede ser adaptada a un valor menor utilizando el
Administrador de Adaptaciones. Sin embargo, la propiedad Max no puede ser
adaptada a un valor mayor. Vea la seccin Seguridad en la documentacin del
Administrador de Adaptaciones.

Tambin Vea
Propiedad Min, declaracin SetProp

Propiedades Solomon

35

Propiedad Min
Determina el valor vlido mnimo para un control.

Observaciones
Para modificar el valor de la propiedad Min en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
El valor de la propiedad Min puede ser adaptada a un valor mayor utilizando el
Administrador de Adaptaciones. Sin embargo, la propiedad Min no puede ser adaptada
a un valor menor. Vea la seccin Seguridad en la documentacin del Administrador
de Adaptaciones.

Tambin Vea
Propiedad Max Property, declaracin SetProp

36

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Propiedad TabIndex
Determina la secuencia lgica de controles dentro del formulario (form).

Observaciones
Cuando el usuario orpime la tecla Tab, el orden de progreso a travs de los controles es
determinado por el valor de la propiedad TabIndex especificada durante la
construccin del programa. Sin embargo, hay varias excepciones a esta regla general.
En particular, el foco saltar por sobre el control de la siguiente secuencia tab en el
caso de que este control est deshabilitado (disabled) o invisible (invisible). Adems, el
valor de la propiedad TabIndex puede ser modificada utilizando el Administrador de
Adaptaciones. Esto permite que el orden lgico de datos de entrada pueda ser
modificado para circunstancias nicas en una ventana particular.
La propiedad TabIndex es usada tambin por llamadas API referenciando un nmero
determinado de controles tales como: SetDefault, SetProp y DispFields. Este tipo de
llamadas API permiten a la aplicacin especificar el primer y ltimo control sobre el
que la operacin diseada debiera ser realizada. Todos los controles que tengan un
TabIndex entre el TabIndex del primer control y el TabIndex del ltimo control
sern includos en el grupo de los controles objetivo.
Esta propiedad puede ser modificada en tiempo de diseo solamente, no puede ser
modificada en tiempo de ejecucin.

Tambin Vea
Declaracin DispField, declaracin SetDefaults, declaracin SetProp

Propiedades Solomon

37

Propiedad Visible
Detrmina si el control es visible o no.

Observaciones
Un valor verdadero (True) de esta propiedad hace que el control est visible, mientras
que el valor falso (False) hace que el control est invisible.
Campos requeridos o necesarios no debieran hacerse invisibles, a menos que sean
reseteados a un valor vlido en forma automtica.
Para modificar el valor de la propiedad Visible en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
Si un control es puesto invisible por la aplicacin, entonces no puede ser puesto visible
utilizando el Administrador de Adaptaciones. Sin embargo, si un control es puesto
visible por la aplicacin, puede ser puesto invisible por el Administrador de
Adaptaciones.
La siguiente advertencia menciona cmo la propiedad Visible se relaciona con el
control SAFGrid. En tiempo de ejecucin, Solomon fuerza a la grilla (grid) a ser
visible durante la carga inicial. No fije esta propiedad en tiempo de diseo para el
control SAFGrid. De la misma forma, no llame SetProp() en un control de visin de
formulario (form-view control), porque esto revela un intento de modificar la
propiedad Visible en forma de fila a fila, lo cual no es soportado.
La unica modificacin en tiempo de ejecucin apropiada que se puede realizar a la
visibilidad de un componente de grilla es hacer visible o hacer desaparecer una
columna entera, basado en una regla manejada mediante datos. Por ejemplo, suponga
que la Aplicacin A tenga una grilla con 10 campos. Supongamos adems, que los
campos 7, 8, 9 y 10 no pueden ser visibles antes de que el Mdulo XYZ haya sido
instalado y configurado. Esto significara que la Aplicacin A necesita esconder o
hacer invisibles los campos 7, 8, 9 y 10. Dado que estos campos estn asociados con un
SAFGrid, quisiramos esconder las columnas de la grilla que corresponden a los
campos 7, 8, 9 y 10. Esta operacin puede llevarse a cabo durante Form_Load
llamando MsetProp() para cada uno de los campos a ser ocultados cada vez
especificando un valor falso (False) para la propiedad Visible. Note que en el escenario
MSetProp(), esta llamada debe hacerse antes de que SAFGrid reciba foco (tal como al
cargar la ventana o en un evento Chk en un nivel de encabezado). No realice llamadas
a MsetProp() desde eventos SAFGrid, tales como LineGotFocus().
Para ocultar un SAFGrid, fije la propiedad Visible del formulario (form) subyacente
en falso (False).

Tambin Vea
Propiedad BlankErr, propiedad Enable, declaracin MSetProp, declaracin SetProp

38

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Eventos de Ventana Solomon

39

Eventos de Ventana Solomon (Solomon


Screen Events)
Eventos de Control Solomon
Use el editor de Visual Basic (VBE) para introducir cdigo VBA asociado con un
objeto o control. Muchos de los objetos Solomon tienen acciones especficas que
ocurren durante el tiempo de ejecucin. Estas acciones son llamadas eventos (events).
Para introducir cdigo VBA para un objeto, seleccione Visual Basic Editor desde el
men de Customize o haga un click con el botn derecho del mouse para habrir un
men colgante (tambin se habre presionando Alt+F11).
Una vez en el VBA, seleccione el objeto y evento para el cual est ingresando cdigo
VBA. Luego, ingrese el cdigo VBA para el evento en la regin de texto debajo de las
selecciones de objeto y evento.
Nota: Usted puede escribir rutinas de uso comn las cuales pueden ser llamadas por
otras rutinas o eventos en la misma ventana seleccionando el evento general (general).
Al trabajar con el VBA, es importante comprender el convcepto de los eventos.
Eventos sson simplemente acciones en un lapso de tiempo determinado: al hacer un
click con el mouse, cuando un formulario (form) es cargado, cuando un registro es
guardado, al presionar TAB para moverse hacia el siguiente campo en la ventana, etc.
Usted puede agregar cdigo VBA para cualquiera de los siguientes eventos:
Descripcin del
Evento

Cuando el Evento Ocurre(Antes/Despus del Evento de Aplicacin


Subyacente)

Button clicks

Antes

Field default

Despus

Field chk

Despus

Field PV

Antes del dilogo PV de la aplicacin (F3 o doble click del botn


derecho del mouse)

Grid linegotfocus

Despus

Grid linechk

Despus

Form Load

Despus de cargarse el formulario (form) de la aplicacin

Form Display

Despus de aparecer el formulario (form) de la aplicacin

Form Hide

Antes de cerrarse la aplicacin

Finish

Despus

Insert

Despus del evento New de la aplicacin

Cancel

Despus

Update

Antes (antes de que la aplicacin llame a tranend)

Delete

Antes (antes de que la aplicacin llame a tranend)

40

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Chk (Objeto de Control de Solomon)


Ocurre, a lo menos, cada vez que cambia un campo de datos y pierde el foco (focus).

Sintaxis
Sub object_Chk ([Index],ChkStrg, retval)

Observaciones
Cunado el usuario modifica el valor de un campo, generalmente el nuevo valor necesita
ser validado (por ejemplo chequeo de errores). Si el nuevo valor es vlido, entonces la
aplicacin podra realizar otras operaciones relacionadas, tales como resetear o
deshabilitar otros campos. En el evento Chk se coloca normalmente este tipo de
cdigo, dado que este evento es llamado cada vez que un valor es modificado en un
campo.
El evento Chk puede gatillarse tambin en otro memento, cuando el usuario no est
modificando directamente el valor de un control. Por ejemplo, navegar sobre registros
existentes en un nivel normal utilizando los botones de la barra de herramientas First,
Last, Prev y Next e ingresar nuevos valores claves a los campos para visualizar
diferentes registros es conceptualmente equivalente para el usuario. Como
consecuencia de esto, al navegar sobre registros existentes en un nivel normal, el
evento Chk es gatillado cada vez que el usuario navega de un registro al siguiente
independientemente de cmo la operacin de navegacin haya sido invocada (por
ejemplo introduciendo datos o usando la barra de herramientas). El evento Chk
tambin puede gatillarse en relacin a la propiedad Trigger. Por ejemplo, utilizando la
propiedad Trigger, se puede definir una relacin entre CampoA y CampoB, de tal
forma que el CampoB deba ser revalidado (por ejemplo, su evento Chk deba ser
llamado) cada vez que el valor del CampoA se modifique.
El evento Chk utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Index

Integer

Argumento opcional dependiendo si el control est


asociado a un arreglo de controles (control array) o no. Este
valor es utilizado para identificar un control determinado
dentro de un arreglo de controles.

ChkStng

string

Si el usuario tipea un nuevo valor para un campo y presiona


Tab, entonces ChkStrg corresponder a ese nuevo valor. Si
se llama al evento Chk por cualquier otra razn, como para
navegacin, gatilladores (triggers), etc., entonces el valor
de ChkStrg es el valor que ser asignado al campo
subyacente a no ser que sea rechazado por el evento Chk.
En este ltimo caso, es posible que el valor del campo
permanezca sin modificaciones y por lo tanto ChkStrg
reflejar ese hecho.

Eventos de Ventana Solomon


retval

Integer

41

Un valor de un dato puede ser rechazado simplemente


modificando el parmetro RetVal, el cual es pasado al
evento Chk. Este parmetro es pasado mediante una
referencia, lo cual significa que cualquier modificacin a
RetVal es detectada automaticamente por el sistema una
vez que el programa control realiza un exit al evento Chk.

La siguiente tabla describe los valores posibles que pueden ser asignados a RetVal y su
efecto correspondiente en el sistema una vez que el programa control realice un exit al
evento Chk:
RetVal

Descripcin

NoAutoChk

Suprime el chequeo de errores automtico, el cual ocurrira normalmente


despus del evento Chk. Es utilizado tipicamente en el evento Chk de
campos claves cuando el resultado de PVChkFetch o DBNavFetch es
NOTFOUND, pero el usuario an debe ser capaz de agregar nuevos
registros. Dado que este valor de retorno est diseado para dejar pasar
ChkStrg como vlido an cuando un item de datos correspondiente no
pueda ser localizado dentro de la base de datos, el valor de ChkStrg va a
ser aplicado por definicin como el nuevo valor del campo.

A Message Number

Cuando RetVal es iniciado con un nmero de mensaje especfico, el


correspondiente mensaje del archivo de mensajes de Solomon ser
desplegado automaticamente despus del evento Chk. Luego, el valor de
ChkStrg ser rechazado. Una implementacin comn para este tipo de
valores de retorno es fijar RetVal al valor de retorno de la llamada
PVChkFetch o DBNavFetch realizada dentro del evento Chk. Esto se
debe al hecho de que el valor de retorno de estas funciones en el
escenario de no encontrado corresponde al valor de mensaje de no
encontrado. El fijar RetVal a un nmero de mensaje es el mtodo
recomendado para dar retroalimentacin al usuario, entregando la razn
precisa del por qu el valor de ChkStrg ha sido rechazado.

ErrNoMess

Este valor de retorno es similar al nmero de mensaje, por el hecho de


que causar que se rechace el valor de ChkStrg. Sin embargo, el sistema
no mostrar un mensaje mientras la aplicacin no lo haya hecho
mediante el evento Chk. Esto es til en los casos en los que los mensajes
requieran valores de datos para uno o ms parmteros de reemplazo. Por
lo tanto, la aplicacin puede usar una declaracin Messf para desplegar el
mensaje junto con la substitucin de valores requerida, y luego fijar
RetVal = ErrNoMess.

Ejemplo 1
El siguiente ejemplo muestra el evento Chk, en un control de campo no clave, en el
cual un registro correspondiente al valor de ChkStrg debe ser buscado desde la base de
datos para el uso de la aplicacin. Si el registro no puede ser encontrado, entonces se
considerar un error.

42

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


Esta aplicacin particular requiere que el tipo default Earnings para todos los
empleados tiene que contribur al pago neto. De esta forma, no es suficiente que el
usuario entregue solamente los ID de los tipos Earning. Ms bien, los tipos Earnings
tambin tienen que ser definidos como contribuyentes al pago neto. Si el tipo Earnings
no contribuye al pago neto, entonces ser rechazado simplemente fijando RetVal a un
nmero de mensaje particular de Solomon explicando la naturaleza del problema.
El nmero de mensaje 260 es el mensaje que ser desplegado y el texto asociado en el
archivo de mensajes Solomon se lee: Earnings type must contribuite to net pay, please
reenter.
Sub cDfltEarnType_Chk (chkstrg As String, retval As Integer)
RetVal = PVChkFetch1(CNULL, CSR_EarnType, chkstrg,
bEarnType, LenB(bEarnType))
If (RetVal = 0) Then
If (bEarnType.NetPay <> LTRUE) Then
RetVal = 260
End If
End If
End Sub

Ejemplo 2
Sub cFieldA_Chk(chkstrg$, retval%)
' Verify this is what we wanted.
If Trim$( chkstrg$) = "BADVALUE" Then
Retval% = 8033 ' return message number 8033: Invalid data.
Value
End If
End Sub

Eventos de Ventana Solomon

43

Evento Click (Objeto de Control de Solomon)


Ocurre cuando un botn de comando es presionado.

Sintaxis
Sub object_Click ([Index])

Observaciones
Use este evento para gatillar acciones como respuesta cuando un botn sea presionado.
El evento Click utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Index

Integer

Argumento opcional que depende si el control est


asociado a un arreglo de controles (control array) o no. Este
valor es usado para identificar claramente al control dentro
del arreglo de controles.

Ejemplo
Sub Button1_Click()
'Display new subform
Call DispForm("Form2",True)
End Sub

44

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Default (Objeto de Control de Solomon)


Ocurre cuando se carga de ventana o una nueva entidad pide refrescar la ventana.
Ocurre cada vez que el control es colocado por defecto (defaulted) y una propiedad de
Dafault no ha sido implementada.

Sintaxis
Sub object_Default ([Index], OldValue, retval)

Observaciones
El valor por defecto para cualquier control de dato de entrada particular puede ser
especificado mediante la propiedad Dafault o el evento Default. La propiedad Default
puede ser usada cuando el valor por defecto no es accidental por sobre todo otro item
de datos. Sin embargo, si la metodologa para determinar los valores por defecto varan
segn situaciones particulares, entonces el cdigo debe estar escrito para el evento
Default. Si se ha definido una propiedad Default, entonces el evento Default no ser
utilizado.
Dentro del evento Default, el referenciar directamente a la variable VB en la cual el
control est ligado fija el valor por defecto del campo relevante. Por ejemplo, si el
control est ligado al campo de cadena de caracteres bTableA.FieldA dentro de la
propiedad FieldName, entonces dentro del evento Default el valor del campo puede ser
predefinido de una forma tal que bTableA.FieldA = StringValue. El valor del dato
por defecto para un grupo de botones SAFOption es siempre derivado desde el primer
botn de opcin del grupo, dado que por definicin slo un botn de opcin puede ser
seleccionado dentro de un grupo particular.
El evento Default utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Index

Integer

Argumento opcional dependiendo si el control est


asociado a un arreglo de controles (control array) o no. Este
valor es utilizado para identificar un control determinado
dentro de un arreglo de controles.

OldValue

String

Contiene el valor del dato que el campo subyacente tuvo


inmediatamente anterior al evento Default. Esto es
requerido dado que el campo subyacente va a haber
sobreescrito su valor cuando el evento Default sea llamado.

retval

integer

Un valor positivo, no cero, de retorno suprime futuras


actiones de default incluyendo adaptaciones por defecto y
llamadas de gatilladores (trigger calls).

Eventos de Ventana Solomon

Ejemplo
Si un control (cFieldA) es ligado a un campo de cadena de caracteres llamado
bTableA.FieldA dentro de su propiedad FieldName, entonces dentro del evento
Default el valor del campo puede ser puesto por defecto de la forma tal que
bTableA.FieldA = StringValue.
Sub cFieldA_Default(newvalue$, retval%)
'Default this field to 'String Value'
Call SetBufferValue("bTableA.FieldA", "StringValue")
End Sub

45

46

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento OnDelete (Objeto de Control de Solomon)


Ocurre durante una serie de acciones/eventos iniciados por una operacin DELETE

Sintaxis
Sub object_OnDelete (Level, InsertFlg, LevelsDone, LevelsLeft, RetVal)

Observaciones
Para comprender cuando ocurre un evento OnDelete, el desarrollador necesita
comprender el concepto de alto nivel de lo que es una operacin DELETE. La
operacin es diferente del evento en el hecho de que el evento OnDelete compromete
slo una parte de una serie de eventos implicados en la operacin DELETE.
Una operacin DELETE es iniciada cuando el usuario hace un click sobre el botn
Delete en la barra de tareas Solomon. La nica excepcin es cuando el usuario borra
una lnea de detalle (detail line) desde una grilla Solomon, en cuyo caso el evento
LineChk es llamado.
Una operacin DELETE abarca la siguiente serie de acciones y/o eventos. Si la
aplicacin contiene ms de un nivel normal (Normal level) entonces el usuario ser
consultado acerca de cul de los registros niveles normal est siendo borrado. El
proceso comenzar con los niveles el usuario seleccione y contina para cada nivel
non-Lookup en orden desde LEVEL0 hasta LEVELn.
El evento OnDelete es llamado para cada nivel. Si este es el primer nivel a ser
procesado, entonces una transaccin de base de datos an no ha sido iniciada.
Como consecuencia de esto, la aplicacin debe llamar TranBeg si es que necesita
realizar operaciones de actualizacin/borrado de la base de datos durante la
primera pasada del evento OnDelete.
Si la aplicacin no ha modificado el valor de RetVal en el paso anterior, entonces
la tabla maestra para el nivel ha sido borrada. La tabla maestra para cada nivel
particular es la tabla identificada por el llamado de VBA_SetAddr para ese nivel
particular.
Una vez que todos los niveles que hayan sido modificados previamente hayan sido
actualizados satisfactoriamente, se termina la transaccin de la base de datos y una
operacin NEW es iniciada automaticamente para preparar la aplicacin para entrada
de datos.
Si ocurren errores durante la operacin DELETE en cualquier nivel, entonces la
completa operacin es abortada- incluyendo la transaccin de la base de datos.

Eventos de Ventana Solomon

El evento OnDelete utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

Level

Integer

Nivel que es procesado en este momento.

LevelsDone

Integer

Nmeros de niveles que ya han sido procesados en el


contexto de la operacin DELETE actual.

Retval

Integer

El borrado automtico de la tabla maestra (master table)


para el nivel actual, lo cual ocurre luego del evento
OnDelete para ese nivel particular puede ser suprimido
fijando RetVal a la constante simblica NoAction definida
en el mdulo VBTools_VBA. La operacin completa
DELETE puede ser abortada fijando RetVal a un nmero
de mensaje Solomon o la constante simblica ErrNoMess
definida en el mdulo VBATools_VBA.

47

48

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento PV (Objeto de Control de Solomon)


Ocurre cuando la tecla de pregunta (inquiry) (F3) es presionada o se hace un doble
click con el botn derecho del mouse.

Sintaxis
Sub object_PV ([Index], FieldValue, Action)

Observaciones
El flujo de evento PV va a procesar el nivel macro ms alto (self, 500) seguida por
cada nivel de macro inferior hasta que el parmetro de accin haya sido fijado a algo
diferente del valor por defecto (no hay accin). Si todas las llamadas a macros han sido
hechas y la accin por defecto an est fijada, entonces el dilogo de aplicacin
subyacente de la aplicacin PV ser llamada (si es que existe).
Si el evento PV regresa un valor diferente a los valores aceptados se desplegar un
mensaje de error y el evento ser tratado como un valor sin accin.
El evento PV es unicamente para fijar el valor del campo. No revisa el campo para
validacin. Esto va a ocurrir ms tarde en el evento de revisin (check) del campo
(para cada nivel correspondiente). Este evento pretende permitir el desarrollo de
dilogos de preguntas.
El evento PV utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Index

Integer

Argumento opcional dependiendo si el control est


asociado a un arreglo de controles (control array) o no. Este
valor es utilizado para identificar un control determinado
dentro de un arreglo de controles.

FieldValue

string

Este parmetro contiene el valor de cadena de caracteres


actual del campo cuando es llamado y es usado como el
valor aceptado resultante para ser revisado por errores antes
de ser aplicado al campo (control).

Action

integer

Este parmetro es usado para contener la accin despus de


que el evento PV haya sido llamado. Por defecto la accin
es continuar procesando dilogos PV. Las otras dos
acciones son aceptar (Accept) y cancelar (Cancel).

Los siguientes son valores vlidos para los argumentos de Action:


RetVal

Descripcin

Accept

Indica que no se procesarn ms eventos PV y el valor de la cadena de


caracteres del campo ser utilizada para chaqueo de errores. Si el
chequeo de errores acepta el valor, entonces el foco se mover para el
campo siguiente (especificado en la lgica de chequeo de errores).

Cancel

Indica que el dilogo ha sido cancelado y el foco es dejado en el campo


de llamada (control). No ocurren ms procesos.

No Action

Contina procesando dilogos PV.

Eventos de Ventana Solomon

Example
Global PVAction As Integer
Sub cFieldA_PV(fieldstrg$, action%)
Dim Result As String
' Setup Choices in sub-form combo box for user to choose PV.
Call SetProp( "cPvListCombo", "List", "A;Asset Account,E;Expense
Account,L;Liability Account")
PVAction = Cancel
'Display the PV form.
Call DispForm( "Form2", True)
' If the OK button was pressed on the sub-form then PVAction was
set to Accept
If PVAction = Accept Then
Result = GetObjectValue( "cPVListCombo")
If Trim(Result) = "A" Then
' Default Asset Account used.
Fieldstrg$ = "1030"
ElseIf Trim(Result) = "E" Then
'Default Expense Account
Fieldstrg$ = "7200"
Else
'Default Liability Account
Fieldstrg$ = "2070"
End If
End If
action = PVAction
End Sub

49

50

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento OnUpdate (Objeto de Control de Solomon)


Ocurre durante la serie de acciones/eventos iniciados por la operacin SAVE.

Sintaxis
Sub object_OnUpdate (Level, InsertFlg, LevelsDone, LevelsLeft, RetVal)

Observaciones
Para comprender cuando ocurre el evento OnUpdate, un desarrollador necesita
comprender primero el concepto de ms alto nivel de lo que es una operacin SAVE.
La operacin se diferencia del evento en el hecho de que el evento OnUpdate
compromete slo un segmento de una serie de eventos implicados en la operacin
SAVE.
Cualquera de los siguientes acontecimientos inicia la operacin SAVE:
Cuando el usuario hace un click sobre el botn Save de la barra de herramientas de
Solomon.
Cuando el usuario hace un click sobre el botn Finish de la barra de herramientas
de Solomon.
Cuando el usuario responde afirmativamente (Yes) a la pregunta Do you want
to save your outstanding changes?. Esta pregunta ocurre cada vez que el usuario
ha modificado datos e intenta introducir un nuevo item, navegar a un diferente
item o cerrar la ventana sin salvar los cambios.
Una operacin SAVE est compuesta por la siguiente serie de acciones y/o eventos por
cada nivel que haya sido modificado en el orden desde LEVEL0 a LEVELn. Por
ejemplo, si la unica informacin que ha sido modificada recide en LEVEL0, entonces
slo el LEVEL0 va a ser procesado durante la operacin SAVE. Una transaccin de la
base de datos comienza antes de cualquier proceso de niveles.
El evento OnUpdate es llamado para el nivel.
Nota: TranEnd no debe llamarse jams por la aplicacin dentro del evento OnUpdate,
dado que el sistema quedara inhabilitado de volver marcha atrs la completa operacin
SAVE!
Si la aplicacin no ha modificado el valor de RetVal en el paso anterior, entonces
la tabla maestra (master table) para el nivel ser actualizada. La tabla maestra para
cada nivel particular es la tabla identificada por la llamada a VBA_SetAddr para
este nivel particular.
Una vez que todos los niveles que hayan sido modificados hayan sido actualizados
satisfactoriamente, la transaccin de la base de datos termina. El evento OnUpdate es
llamado entonces una vez mas. El parmetro de nivel va a tener un valor
correspondiente a la constante simblica de fin (Finished symbolic constant), definida
en el mdulo VBTools_VBA. En este momento, el status de nivel para todos los
niveles debiera tener el valor de NOTCHANGED. Adems, el status de lnea para
cada detalle de lnea (detail line) dentro de cada grilla debe tambin tener el valor de
NOTCHANGED.

Eventos de Ventana Solomon


Si ocurriera cualquier error durante la actualizacin de cualquier nivel, entonces la
completa operacin ser abortada incluyendo la transaccin de la base de datos.

51

52

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El evento OnUpdate utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

Level

Integer

El nivel que actualmente se procesa.

InsertFlg

Integer

Verdadero (True) indica que un nuevo registro est siendo


insertado. Falso (False) indica que un registro existente est
siendo actualizado.

LevelsDone

Integer

Nmero de niveles procesados dentro del contexto de la


operacin SAVE actual.

LevelsLeft

Integer

Nmero de niveles que an hay que procesar dentro del


contexto de la operacin SAVE actual. Esta cuenta no
incluye la pasada Finished por el evento OnUpdate.

retval

Integer

La actualizacin automtica de la tabla master (master


table) para el nivel actual, lo cual ocurre despus del evento
OnUpdate para ese nivel particular, puede ser suprimida
fijando RetVal a la constante simblica NoAction definida
en el mdulo VBTools_VBA. La completa operacin
SAVE puede ser abortada fijando RetVal a un nmero de
mensaje de Solomon o a la constante simblica ErrNoMess
definida en el mdulo VBTools_VBA.

Eventos de Ventana Solomon

Ejemplo
Global GridHandle%
Sub OnUpdate(level%, insertflg%, retval%)
Dim MaintFlag%
If Level = 0 Then
' Call is made so that if any changes are made that would
affect grid currency,
' the MsetRowNum function will reset it.
If serr1 = 0 Then
Row = mgetrownum(GridHandle%)
End If
' Move to top of array
err1 = mfirst(GridHandle%, MaintFlag%)
While serr1 = 0
serr2 = sqlfetch1(c1, "XnewTable.Key" +
sparm(GetObjectValue("ckey")), _
bXNewTable, Len(bXNewTable))
Select Case MaintFlag%
Case Updated 'Existing line is updated
Call supdate1(c1, "XNewTable", bXNewTable,
Len(bXNewTable))
Case Inserted 'Existing line is new inserted one.
Call sinsert1(c1, "XNewTable", bXNewTable,
Len(bXNewTable))
Case Deleted 'Existing line was deleted.
Call sdelete1(c1, "XNewTable")
End Select
err1 = mnext(GridHandle%, MaintFlag%)
Wend
' reset memory array currency, then re-display grid
Call MsetRowNum(GridHandle%, Row)
Call Mdisplay(GridHandle%)
End If
End Sub

53

54

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Display (Objeto de Formulario (form) de Solomon)


Ocurre cuando un formulario (form) es cargado.

Sintaxis
Sub object_Display ()

Observaciones
Este evento ocurre despus de que un formulario de ventana de aplicacin es
desplegado (dibujado en la pantalla).
Nota: cuando usted crea procedimientos para eventos relacionados, tales como
Activate, GotFocus, Paint y Resize, debe estar seguro de que sus acciones no tengan
conflicto y que no causen eventos recursivos.

Ejemplo
Global GridHandle%
Sub Form1_Display()
' Extend the current grid with the new table.
GridHandle = GetGridHandle("Spread1")
serr1 = VBA_MExtend(GridHandle, bXNewTable, Len(bXNewTable))
Call DisplayGrid
End Sub

Eventos de Ventana Solomon

55

Evento Hide (Objeto de Formulario (form) de Solomon)


Ocurre cuando un formulario (form) es cargado.

Sintaxis
Sub object_Hide ()

Observaciones
Este evento ocurre luego de que un formulario de ventana de aplicacin es ocultado (ya
no est visible).
Nota: cuando usted crea procedimientos para eventos relacionados, tales como
Activate, GotFocus, Paint y Resize, debe estar seguro de que sus acciones no tengan
conflicto y que no causen eventos recursivos.

56

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Load (Objeto de Formulario (form) de Solomon)


Ocurre cuando un formulario (form) es cargado.

Sintaxis
Sub object_Load ()

Observaciones
Este evento ocurre para todos los formulario de una aplicacin mientas la ventana se
est cargando.
Nota: cuando usted crea procedimientos para eventos relacionados, tales como
Activate, GotFocus, Paint y Resize, debe estar seguro de que sus acciones no tengan
conflicto y que no causen eventos recursivos.

Example
Sub Form1_Load()
' Allocate buffer and cursor for custom table containing additional
fields.
Call SetAddr("bxNewTable", bxNewTable, nxNewTable, Len(bxNewTable))
Call SQLCursor(c1, NOLEVEL + SQLUpdate)
End Sub

Eventos de Ventana Solomon

57

Evento LineChk (Objeto de Grilla (grid) de Solomon)


Ocurre cuando una lnea de detalle (detail line) dentro de un control de grilla (Grid
control) es insertado, actualizado o borrado.

Sintaxis
Sub object_ LineChk (Action, RecMaintFlg, RetVal)

Observaciones
Cada vez que el usuario inserta, actualiza o borra una lnea de detalle dentro de un
control SAFGrid, se gatilla el evento LineChk. En los casos de insercin y
actualizacin, el evento no se ejecuta hasta que el usuario no abandona la lnea de
detalle.
Este evento es utilizado frecuentemente para realizar lgicas de borrado especial para
las lneas de detalle (detail line) que el usuario quiera borrar. Por ejemplo, la pantalla
de mantencin del General Ledger Chart of Accounts contiene una grilla que muestra
todos los registros de la tabla Accounts. El usuario puede borrar registros Account
facilitando que el nmero de cuenta correspondiente no sea usado en nunguna ventana
de determinacin de la configuracin del software dentro de otras reas. Esto es
implementado usando la lgica dentro del evento LineChk.
Registros borrados son copiados de la memoria de arreglo subyacente a un arreglo de
memoria temporal deleted record. El manejo de recursos de este arreglo de memoria
puede ser obtenido usando la funcin MGetDelHandle.
El evento LineChk usitiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Action

integer

Accin a ser realizada en la lnea de detalle (detail line)

RecMaintFlg

integer

Estado actual de la lnea de detalle (detail line)

RetVal

integer

La aplicacin puede prevenir el borrado de registros fijando


RetVal a un nmero de mensaje vlido o a la constante
simblica ErrNoMess definida en el mdulo
VBTools_VBA.

El mdulo VBTools_VBA contiene las siguientes constantes simblicas definiendo


posibles valores de Action.
RetVal

Descripcin

INSERTED

Una nueva lnea de detalle (detail line) est siendo insertada.

UPDATED

Una lnea de detalle (detail line) existente est siendo actualizada.

DELETED

Una lnea de detalle (detail line) existente est siendo borrada.

ABANDONED

Una lnea de detalle (detail line) existente nunca fue creada y est
siendo abortada.

58

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El mdulo VBTools_VBA contiene las siguientes constantes simblicas definiendo


posibles valores de RecMaintFlg:
RetVal

Descripcin

NEWROW

Indica que el usuario est comenzando una insercin de una nueva lnea
de detalle (detail line). El estado de la lnea de detalle ser modificado a
INSERTED, luego de que todos los campos hayan sido chequeados de
errores y ningn error ocurra durante el evento LineChk.

INSERTED

La lnea de detalle (detail line) actual fue agregada satisfactoriamente,


luego de que la grilla (grid) de Solomon fue cargada y no ha sido
grabada en la base de datos.

UPDATED

La lnea de detalle (detail line) fue inicialmente cargada dentro de la


grilla (grid) de Solomon, pero ha sido modificada posteriromente.
Adems, las modificaciones a la lnea de detalle (detail line) no han sido
grabadas an.

NOTCHANGED

La lnea de detalle (detail line) actual ha sido inicialmente cargada


dentro de la grilla (grid) de Solomon, y no ha sido modificada
posteriormente. Nota: registros marcados como INSERTED y
UPDATED sern asignados automaticamente al estado
NOTCHANGED luego de la siguiente operacin Save satisfactoria.

Ejemplo
Sub Spread1_LineChk(action%, maintflg%, retval%)
Dim FieldValue As String * 20
Dim Dvalue As Double
If action% = INSERTED Or action% = UPDATED Then
Call GetBufferValue("bTableA.FieldA",FieldValue)
Dvalue = GetObjectValue("cqty")
If Trim$(FieldValue) = "" And Dvalue > 0.0 Then
retval = 2 ' Must set the Field Value if a Quantity
exist.
Call ApplSetfocus("cqty")
End If
End If
End Sub

Eventos de Ventana Solomon

59

Evento LineGotFocus (Objeto de Grilla (Grid) de Solomon)


Ocurre cuando una lnea de detalle (detail line) dentro de una grilla (grid) de Solomon
recibe foco.

Sintaxis
Sub object_ LineGotFocus (RecMaintFlg, RetVal)

Observaciones
Cada vez que el usuario mueve o inserta una lnea de detalle dentro de un control de
grilla de Solomon, el evento LineGotFocus es llamado inmediatamente.
El parmetro RecMaintFlg puede ser evaluado posteriormente para determinar si el
usuario est agregando una nueva lnea de detalle (detail line) o no. En este caso,
valores por defecto pueden ser explcitamente asignados a los campos dentro del
registro de detalle (detail record), para el cual no existe un control correspondiente. Por
ejemplo, asuma que TableA es una tabla de cabecera y TableB es un registro de detalle
(detail record). En este caso, cada registro de TableA podra tener muchos registros
TableB desplegados dentro de SAFGrid. Sin embargo, lo importante es que el primer
segmento clave para TableB debiera inclur un campo que se relacione directamente a
TableA (por ejemplo el campo de conexin (join field)). Este tipo de campo es el
candidato ideal para colocarse por defecto en el evento LineGotFocus, dado que tendr
siempre el mismo valor (por ejemplo el valor de TableA.KeyField), y por lo tanto
creando un control invisible cuya propiedad Default no sea realmente necesaria.
El evento LineGotFocus utiliza los siguientes atgumentos:
Argumento

Tipo

Descripcin

RecMaintFlg

Integer

Estado de la lnea de detalle (detail line).

RetVal

Integer

La aplicacin puede prevenir que los controles de todos los


niveles de detalle (detail level) sean puestos por defecto en
forma automtica cuando un nuevo registro est siendo
insertado, fijando simplemente RedVal a NoAction (lo cual
es una constante simblica definida en el mdulo
VBTools_VBA).

60

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El mdulo VBTools_VBA contiene las siguientes constantes simblicas definiendo


posibles valores de RecMaintFlg:
RetVal

Descripcin

NEWROW

Indica que el usuario est comenzando la insercin de una nueva lnea de


detalle (detail line). El estado de la nueva lnea de detalle ser modificado a
INSERTED luego de que el campo haya sido chequeado por errores y
ningn error ocurra durante el evento LineChk.

INSERTED

La lnea de detalle (detail line) actual fue agregada satisfactoriamente,


luego de que la grilla (grid) de Solomon fue cargada y no ha sido grabada
en la base de datos.

UPDATED

La lnea de detalle (detail line) fue inicialmente cargada dentro de la grilla


(grid) de Solomon, pero ha sido modificada posteriromente. Adems, las
modificaciones a la lnea de detalle (detail line) no han sido grabadas an.

NOTCHANGED

La lnea de detalle actual ha sido inicialmente cargada dentro de la grilla de


Solomon, y no ha sido modificada posteriormente. Nota: registros marcados como INSERTED y UPDATED sern asignados automaticamente al
estado NOTCHANGED luego de la siguiente operacin Save satisfactoria.

Ejemplo 1
El siguiente ejemplo fue tomado de la ventana del mdulo de planilla Earnings Type
Maintenance (02.270.00). Esta ventana es del tipo header/detail teniendo la tabla
EarnType como la tabla de cabecera y dos registros de detalle (detail records) en la
grilla a saber ValEarnDed y Deduction. La tabla maestra es ValEarnDed para el nivel
de detalle (detail level) y la tabla Deduction se adjunta slo para fines descriptivos. En
todo caso, note que que el resto de NEWROW y el correspondiente trabajo ha sido
realizado solamente para las lneas de detalle (detail lines).
Sub Spread_ValEarnDed_LineGotFocus (maintflg%, retval%)
If (maintflg = NEWROW) Then
'Null out secondary records on the detail line
bDeduction = nDeduction
'Initialize the master detail record with the key field
ID from the
'header record
bValEarnDed.EarnTypeId = bEarnType.Id
End If
End Sub

Ejemplo 2
Sub Spread1_LineGotFocus(action%, maintflg%, retval%)
If maintflg% = NEWROW Then
' Default current line field.
Dim FieldValue As String * 20
Call GetBufferValue("bTableA.FieldA",FieldValue)
Call SetBufferValue("bTableB.FieldA", FieldValue)
End If
End Sub

Eventos de Ventana Solomon

61

Evento OnCancel (Objeto de Actualizacin Solomon)


Ocurre cuando el usuario hace un click sobre el botn Cancel (o tecla Escape) de la
barra de herramientas de Solomon.

Sintaxis
Sub object_ OnCancel (Level, RetVal)

Observaciones
Cuando el usuario hace un click sobre el botn Cancel en la barra de tareas de
Solomon, el evento OnCancel es llamado una vez por cada nivel en orden desde
LEVEL0 hasta LEVELn.
Este evento es utilizado normalmente en aplicaciones de un solo nivel constante
(Single Constant Level), tal como las ventanas de la determinacin de la configuracin
de software (setup). Este tipo de aplicaciones no tienen campos claves que puedan ser
re-ejecutados, como para retomar la informacin de despliegue. Como consecuencia, el
evento OnCancel entrega a la aplicacin una oportunidad para retomar el registro del
nivel constante (Constant level), por ejemplo el registro setup.
El evento OnCancel utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Level

integer

El nivel actual est siendo procesado.

retval

integer

El mensaje de Solomon correspondiente ser desplegado si


RetVal es modificado a cualquier nmero diferente a
ErrNoMess, constante simblica definida en el mdulo
VBTools_VBA.

Ejemplo 1
El siguiente recorte de cdigo fue tomado de la ventana Payroll Employee
Maintenance.
Sub OnCancel (level%, retval%)
Dim PRSetup_Fetch As Integer
'Initialize bPRSetup
PRSetup_Fetch = SqlFetch1(CSR_PRSetup, "PRSetup_All", bPRSetup,
LenB(bPRSetup))
If (PRSetup_Fetch = 0) Then
'Display fields from existing PRSetup record
Call DispFields(PNULL, PNULL, PNULL)
Else
'Default all controls for insert mode
Call SetDefaults(PNULL, PNULL, PNULL)
End If

62

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


End Sub

Ejemplo 2
Global GridHandle%
Sub OnCancel(level%, retval%)
' Null out the New Description Column and re-display it since it
will be reloaded
Call Mset("cdescr1", nXTablet.Descr)
Call Mdisplay(GridHandle)
' Change to not changed since NULLing out changes status
Call SetLevelChg(Level0, NOTCHANGED)
' Reload the grid
Call DisplayGrid
End Sub

Eventos de Ventana Solomon

63

Evento OnFinish (Objeto de Actualizacin de Solomon)


Ocurre cuendo el usuario indica que est listo con la informacin desplegada
actualmente en la pantalla.

Sintaxis
Sub object_ OnFinish (Level, Updated, RetVal)

Observaciones
El evento OnFinish es llamado cuando el usuario ha terminado con la informacin
desplegada actualmente, para permitir a la aplicacin una oportunidad para realizar
operaciones especficas relacionadas con los datos antes de que abandone la ventana
del usuario. Por ejemplo, considere que el usuario acaba de introducir alguna clase de
informacin financiera y ahora simplemente va a cerrar la aplicacin dado que ha
completado su tarea inicial. En ese instante la aplicacin podra advertir al usuario que
la informaicin se encuentra inestable, y preguntarle si quiere o no remediar el
problema. Sin tal advertencia, el usuario no notar el error hasta que posteriormente su
accin cause algn otro problema.
Se considera que el usuario ha terminado con la informacin desplegada actualmente
cuando realiza cualquiera de las siguientes operaciones:
Cuando el usuario hace un click sobre el botn Finish de la barra de tareas de
Solomon. En este caso, el evento OnFinish es gatillado despus de que se gatilla el
evento OnUpdate cuando la operacin save es incluso necesaria (por ejemplo
cuando alguna infoamcin se modifica).
Cuando el usuario intenta ingresar un nuevo item, navegar a un item diferente o
cerrar la ventana. Si la informacin ha sido modificada, el usuario ser interrogado
por si quiere o no salvar las modificaciones sealadas. Si el usuario indica que no,
la ventana ser refrescada con la informacin existente en la base de datos, de
forma que la informacin correcta est disponible en el momento de que el evento
OnFinish sea llamado.
El evento OnFinish es llamado una vez por cada nivel en orden desde el LEVELn al
LEVEL0. Note que este evento es llamado en orden inverso si se compara con los
eventos NewLevel, OnUpdate, OnDelete y OnCancel. Este orden inverso permite a la
aplicacin reportar problemas primero con los datos en su nivel ms granular.
La aplicacin puede abortar el evento OnFinish modificando el parmetro RetVal. En
este caso la accin del usuario es tambin abortada. Por ejemplo, asuma que el usuario
tiene RecordA en la pantalla y luego hace un click en el botn Next de la barra de
herramientas de Solomon. Claramente esto indica que el usuario ha terminado de ver el
registro RecordA y ahora quiere ver el registro siguiente presumiblemente RecordB.
Como consecuencia, el evento OnFinish es llamado junsto antes de navegar al
RecordB. Si la aplicacin fija RetVal, digamos a un nmero de mensaje Solomon,
entonces el mensaje correspondiente ser desplegado cuando el evento OnFinish para
el nivel actual termine, y la operacin de vavegacin ser abortada. Dado que la
operacin de navegacin fue abortada, el usuario ser an capaz de ver el RecordA.

64

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


El evento OnFinish utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Level

Integer

Nivel actual siendo procesado. El evento OnFinish es


llamado comenzando con el LEVELn (por ejemplo el
ltimo nivel de la ventana) y contina hacia LEVEL0.

Updated

Integer

No utilizado actualmente.

retval

Integer

El evento OnFinish puede ser abortado fijando RetVal a un


nmero de mensaje vlido o a la constante simblica
ErrNoMess definida en el mdulo VBTools_VBA.

Eventos de Ventana Solomon

65

Evento OnInsert (Objeto de Actualizacin de Solomon)


Ocurre durante una serie de acciones/eventos iniciados por la operacin Insert.

Sintaxis
Sub object_ OnInsert (Level, RetVal)

Observaciones
Para comprender cuando ocurre el evento OnInsert, el desarrollador debe comprender
primero un concepto de alto nivel acerca de lo que se refiere bajo una operacin Insert.
La operacin se diferencia del evento en el hecho de que el evento OnInsert
compromete slo un segmento de una serie de eventos implicados en la operacin
Insert.
Cualquiera de los siguientes acontecimientos inicia una operacin Insert:
Cuando ScreenInit es llamado desde Form1_Load.
Cuando el usuario hace un click sobre el botn New de la barra de herramientas de
Solomon.
Cuando el usuario hace un click sobre el botn Finish de la barra de herramientas
de Solomon. En este caso, el evento OnInsert se gatilla despus de que los eventos
OnUpdate y OnFinish se hayan completado satisfactoriamente.
Cuando el usuario hace un click sobre el botn Delete de la barra de herramientas
de Solomon. Luego de que el registro haya sido borrado satisfactoriamente en el
evento OnDelete, la aplicacin se prepara a s misma para recibir nueva
informacin iniciando automaticamente una operacin Insert.
Cuando el usuario nevega previamente al primer registro o finalmente al ltimo
registro en una tabla usando los botones Prev o Next de la barra de herramientas
de Solomon.
Cuando el usuario ingresa un valor que no existe en la base de datos para uno o
ms campos claves (key fields). Por ejemplo si una aplicacin contiene tres
campos claves, entonces una operacin Insert ser iniciada si la combinacin de
los valores de los tres campos claves no existen en la base de datos.
Una operacin Insert compromete la siguiente serie de acciones y/o eventos por cada
nivel no detallado (non-detail level) comenzando por el nivel en el cual la nueva
operacin fue iniciada. Por ejemplo, si la operacin Insert se inici en LEVEL0, los
niveles sern procesados en orden desde LEVEL0 a LEVELn.
La tabla maestra (master table) para el nivel ha sido borrada. La tabla maestra para
cada nivel particular es la tabla identificada por el llamado a VBA_SetAddr para
ese nivel particular.
El evento OnInsert es llamado por el nivel
Todos los controles del nivel son fijados por defecto.
Dado que el colocar los nuevos registros de detalle de nivel (detail level records)
dentro del control de grilla de Solomon a sus valores iniciales, es realizado dentro del
evento LineGotFocus, el evento OnInsert no es llamado para los niveles de detalle.

66

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


El evento OnInsert utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Level

integer

Nivel que es procesado actualmente.

retval

integer

El colocar todos los controles en el nivel actual a sus


valores por defecto en forma automtica, lo cual ocurre
despus del evento OnInsert para ese nivel particular,
puede ser suprimido fijando RetVal a la constante
simblica NoAction definida en el mdulo VBTools_VBA.

Ejemplo
El siguiente extracto de cdigo fue tomado de la ventana Payroll Employee
Maintenance.
Sub OnInsert (level%, retval%)
If (level = LEVEL0) Then
'Force ALL default values to be applied to EMPLOYEE level
BEFORE
'Evaluate_Properties() is called.
Call Level_SetDefaults(PNULL, PNULL, PNULL, LEVEL0)
bEmployee.CalQtr = bPRSetup.CurrCalQtr
bEmployee.CalYr = bPRSetup.CurrCalYr
'Re-evaluate the properties of all controls whose
property settings
'depend upon data values.
Call Evaluate_Properties(FLD_ALL)
'Set retval to keep Swim from defaulting LEVEL0 controls
again.
RetVal = NoAction
End If
End Sub

Llamadas de Funciones API de Solomon

67

Llamadas de Funciones API de Solomon


Resumen de Referencia de API de Solomon
A continuacin se presenta una lista de funciones API de Solomon disponibles en el
lenguaje de Visual Basic para Aplicaciones y un breve resumen de su propsito.
Funcin/Declaracin

Accin

Declaracin AliasConstant

Coloca apodos a ciertas constantes Solomon usadas


especificamente en importacin de negocios
(Transaction Import).

Funcin ApplGetParms

Recupera un parmetro de una lnea de comando


pasada por otra aplicacin Solomon.

Funcin ApplGetParmValue

Recupera un parmetro pasado por otra aplicacin.

Declaracin ApplSetFocus

Coloca el foco sobre un objeto designado.

Declaracin ApplSetParm

Agrega un parmetro a la lista de todos los parmetros


a ser enviados a una aplicacin que llam.

Funcin CallChks

Ejecuta el evento Chk del objeto especfico.

Funcin DateCheck

Valida una fecha.

Funcin DateCmp

Compara dos fechas.

Funcin DateMinusDate

Retorna el nmero de das entre dos fechas..

Declaracin DatePlusDays

Agrega un nmero determinado de das a una fecha.

Declaracin
DatePlusMonthSetDay

Agrega un nmero determinado de meses a una fecha y


y lo coloca como fecha vlida.

Funcin DateToIntlStr

Conviente una fecha al estilo short date de Windows.

Funcin DateToStr

Convierte una fecha a una cadena de caracteres


(string).

Funcin DateToStrSep

Convierte una fecha a una cadena de caracteres (string)


e incluye separadores.

Funciones DBNavFetch

Recupera un regiostro de combinacin (composite


record) desde la base de datos usando una declaracion
SQL.

Declaracin DispFields

Despliega el contenido de una estructura de campo.

Declaracin DispForm

Despliega un objeto de formulario (form object)


especfico.

Funcin DParm

Convierte una fecha en un parmetro de cadena de


caracteres (string) SQL.

Declaracin Edit_Cancel

Ejecuta el botn Cancel de la barra de herramientas.

Declaracin Edit_Close

Ejecuta el botn Close de la barra de herramientas.

Funcin Edit_Delete

Ejecuta el botn Delete de la barra de herramientas.

68

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin/Declaracin
Funcin Edit_Finish

Accin
Ejecuta el botn Finish de la barra de herramientas.

Funcin Edit_First

Ejecuta el botn First de la barra de herramientas.

Funcin Edit_Last

Ejecuta el botn Last de la barra de herramientas.

Funcin Edit_New

Ejecuta el botn New de la barra de herramientas.

Funcin Edit_Next

Ejecuta el botn Next de la barra de herramientas.

Funcin Edit_Prev

Ejecuta el botn Previous de la barra de herramientas.

Declaracin Edit_Save

Ejecuta el botn Save de la barra de herramientas.

Funcin FPAdd

Funcin Add de punto flotante.

Funcin FParm

Funcin de formateo para el campo flotante pasado a


una funcin SQL.

Funcin FPDiv

Funcin de divisin de punto flotante.

Funcin FPMult

Funcin de multiplicacin de punto flotante.

Funcin FPRnd

Funcin de redondeo de punto flotante.

Funcin FPSub

Funcin de resta de punto flotante.

Declaracin GetBufferValue

Obtiene el valor del buffer para un campo determinado.

Funcin GetDelGridHandle

Retorna el manipulador de recursos del arreglo de


memoria usado para guardar temporalmente las lneas
de detalle (detail lines) borradas desde el control
SAFGrid.

Funcin GetGridHandle

Obtiene el manipulador de grilla (grid handle) para un


objeto de planilla de clculo.

GetObjectValue

Obtiene el valor de campo de un objeto particular.

Funcin GetProp

Obtiene la propiedad de un objeto particular.

Funcin GetSqlType

Determina el tipo de servidor de base de datos que es


usado.

Declaracin GetSysDate

Obtiene la fecha de sistema actual.

Declaracin GetSysTime

Obtiene la hora de sistema actual.

Declaracin HideForm

Oculta un objeto de formulario (form object)


especfico.

Declaracin IncrStrg

Incrementa un valor de una cadena de caracteres.

Declaracin IntlStrToDate

Convierte una fecha de cadena de caracteres (date


string) desde el estilo short date de Windows al estilo
de formato de base de datos de SQL.

Funcin IParm

Formatea una funcin de un campo integer pasado a


una funcin SQL.

Funcin Is_TI

Retorna si la aplicacin Solomon est o no en el modo


de Transaction Import.

Funcin Launch

Ejecuta otro programa ejecutable.

Funcin MCallchks

Realiza deteccin de errores en una columna de objeto


de grilla especfica.

Llamadas de Funciones API de Solomon

69

Funcin/Declaracin

Accin

Funcin MCallchks

Realiza deteccin de errores en una columna de objeto


de grilla especfica.

Declaracin MClear

Borra todos los registros de un arreglo de memoria


especfico.

Declaracin MClose

Cierra un arreglo de memoria existente.

Funcin MDelete

Borra el registro actual de un arreglo de memoria


especfico.

Declaracin MDisplay

Despliega el contenido actual del arreglo de memoria


especfico en su control de planilla de clculo
correspondiente.

Declaracin Mess

Despliega el nmero de mensaje Solomon


especificado.

Declaracin Messbox

Despliega un mensaje de texto con los parmetros


entregados.

Declaracin Messf

Despliega el nmero de mensaje Solomon especificado


con variables de sustitucin.

Funcin MessResponse

Obtiene la respuesta del usuario desde un mensaje de


texto.

Funcin MFindControlName

Retorna una lista de nombres de controles presentes en


la aplicacin actual.

Funcin MFirst

Mueve hacia el primer registro en un arreglo de


memoria designado.

Funcin MGetLineStatus

Retorna el estado de lnea (line status) del registro


actual en el arreglo de memoria designado.

Funcin MGetRowNum

Retorna el nmero de fila/registro del registro actual en


el arreglo de memoria designado.

Declaracin MInsert

Inserta un nuevo registro dentro del arreglo de


memoria designado.

Declaracin MKey

Define un campo clave (field key) para un arreglo de


memoria abierto previamente.

Funcin MKeyFind

Encuentra un registro especfico dentro de un arreglo


de memoria ordenado (sorted memory array) basado en
valores de campo clave (key field values) designados.

Declaracin MKeyFld

Define un campo clave (key field) para un arreglo de


memoria abierto previamente.

Declaracin MKeyOffset

Define un campo clave (key field) para un arreglo de


memoria abierto previamente.

Funcin MLast

Mueve hacia el ltimo registro en un arreglo de


memoria designado.

Declaracin MLoad

Carga un arreglo de memoria con todos los registros


retornados desde la base de datos mediante una
declaracin SQL.

Funcin MNext

Mueve al siguiente registro en un arreglo de memoria


designado.

70

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin/Declaracin
Funcin MPrev

Accin
Mueve al registro anterior en un arreglo de memoria
designado.

Funcin MRowCnt

Retorna el nmero de registros en un arrelgo de


memoria designado.

Declaracin MSet

Fija la columna de grilla a un valor especfico.

Funcin MSetLineStatus

Fija el estado de lnea (line status) del registro actual en


el arreglo de memoria designado.

Declaracin MSetProp

Fija las propiedades de una columna de grilla en tiempo


de ejecucin.

Declaracin MSetRowNum

Fija el nmero actual de la fila/registro de un arreglo de


memoria designado.

Declaracin Msort

Clasifica los datos contenidos en un arreglo de


memoria existente basado en campos clave
predefinidos.

Declaracin MUpdate

Actualiza el registro de un arreglo de memoria actual


designado con valores de dato nuevos.

Funcin NameAltDisplay

Despliega el nombre del campo omitiendo el caracter


de intercambio (swap character).

Funcin PasteTemplate

Coloca informacin de la plantilla (template) designada


al interior de la aplicacin actual.

Funcin PeriodCheck

Realiza el chequeo de nmeros peridicos (period


numbers) en el campo actual.

Funcin PeriodMinusPeriod

Determina la diferencia entre dos nmeros peridicos


(period numbers).

Funcin PeriodPlusPerNum

Suma un nmero peridico a otro nmero peridico


(period number).

Funciones PVChkFetch

Recupera un registro compuesto (composite record)


desde la base de datos utilizando una declaracin SQL
de la propiedad PV de un control SAFMaskedText.

Declaracin SaveTemplate

Guarda informacin de la aplicacin actual a una


plantilla (template) designada.

Funcin Sdelete

Borra el registro que est siendo visto actualmente.

Funcin SdeleteAll

Borra todos los registros de una tabla.

Declaracin SetBufferValue

Fija un un campo de datos de buffer subyacente de la


aplicacin Solomon a un valor determinado.

Funcin SetDefaults

Despliega el valor por defecto para el objeto


especificado.

Declaracin SetLevelChg

Fija un cierto nmero de nivel a un estado diferente.

Funcin SetObjectValue

Fija un valor de campo de objeto especificado.

Declaracin SetProp

Fija las propiedades de objetos en tiempo de ejecucin.

Declaracin SetStatusBarText

Despliega texto en la barra de estado de la aplicacin.

Funciones SFetch

Captura el siguiente registro para desplegarlo.

Llamadas de Funciones API de Solomon

Funcin/Declaracin
Funcin SGroupFetch

Accin
Captura el grupo del siguiente valor agregado para
deplegarlo.

Declaracin SInsert

Inserta la estructura de lo desplegado hacia una tabla.

Funcin Sparm

Funcin de formateo para un campo de cadena de


caracteres (string field) que es pasada a una
funcin SQL.

Declaracin Sql

Ejecuta la declaracin SQL especificada.

Declaracin SqlCursor

Destina un cursor SQL para ver una tabla.

SqlCursorEx

Destina un nuevo cursor de base de datos.

Funcin SqlErr

Obtiene el valor de retorno de la funcin SQL


especificada.

Declaracin SqlErrException

Permite a una aplicacin atrapar ciertos errores SQL.

Declaracin SqlExec

Ejecuta la declaracin SQL luego de haber pasado


variables.

Funciones SqlFetch

Ejecuta la declaracin SQL y toma el primer registro


para desplegarlo.

Declaracin SqlFree

Libera un cursor.

Declaracin SqlSubst

Substituye variables a una declaracin SQL.

Declaracin StrToDate

Convierte una cadena de caracteres (string) a un tipo


de campo de fecha.

Declaracin StrToTime

Convierte una cadena de caracteres (string) a un tipo


de campo de hora.

Declaracin SUpdate

Actualiza el despliegue actual.

Funcin TestLevelChg

Determina si un nivel especificado ha cambiado o no.

Funcin TimeToStr

Coonvierte la hora a una cadena de caracteres


(string).

Declaracin TranAbort

Aborta la transaccin actual.

Declaracin TranBeg

Comienza una transaccin de base de datos.

Declaracin TranEnd

Finaliza una transaccin de base de datos.

Funcin TranStatus

Retorna el estado de la transaccin de base de datos


SQL actual.

Funcin VBA_MExtend

Extiende la grilla (grid) de una aplicacin para que


otra estructura de tabla pueda ser agregada a la grilla.

Funciones VBA_MOpen

Abre un nuevo arreglo de memoria y retorna un


nmero de arreglo de memoria nico
correspondiente.

Declaracin VBA_SetAddr

Destina una estructura para una tabla de base de


datos especificada.

71

72

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Nota: en las siguientes secciones algunos ejemplos de cdigo pueden exceder una lnea. En ese caso, el smbolo
indica un carcter de continuidad de lnea. La lnea completa debe estar en una sola lnea en la ventana de
cdigo de eventos (event code window).

Llamadas de Funciones API de Solomon

73

Declaracin AliasConstant
Use esta funcin para apodar ciertas constantes Solomon utilizadas especificamente en
Transaction Import. Esto puede ser de ayuda si usted est usando un idioma diferente
(las palabras de ingls Comment, Insert y Change podran ser reemplazadas por las
palabras alternativas de otro idioma). Los valores posibles son mostrados a
continuacin.

Sintaxis
Call AliasConstant(Constant, Alias )

Observaciones
Constantes que puedan ser redefinidas utilizando la funcin AliasConstant incluyen:
Comment
Insert
Delete
Change
Processed
Separator
Delimiter
LevelN (where N is 0 to 9)
Checked
Unchecked
Press

Ejemplo
Call AliasConstant("Change", "Update")
Call AliasConstant("Delimiter", ";")
Call AliasConstant("Separator", "!")
Call AliasConstant("Level0", "Batch")
Call AliasConstant("Level1", "Detail")

74

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin ApplGetParms
Recupera un parmetro entregado por otra aplicacin de Solomon Tools for Visual
Basic.

Sintaxis
ParmValue = ApplGetParms()

Observaciones
La declaracin ApplGetParms puede ser usada para recuperar parmetros, los cuales
hayan sido entregados originalmente por otra aplicacin de herraminetas de Solomon
para Visual Basic (Solomon Tools for Visual Basic) utilizando la funcin Launch. Se
pueden recuperar mltiples parmetros realizando llamadas sucesivas a
ApplGetParams.
Si la aplicacin que es llamada entrega los parmetros va secciones de nombres de
parmetros (named parameter sections), utilizando la declaracin
ApplSetParamValue en conjunto con la funcin Launch, entonces ApplGetParams
slo ser capaz de recuperar parmetros de la seccin por defecto de Solomon (default
Solomon section). Usando la funcin ApplGetParamValue es la nica forma por la
cual la aplicacin llamada puede recuperar los parmetros de cualquier seccin de
parmetros diferente a la seccin por defecto de Solomon (default Solomon section).
La funcin ApplGetParms utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

ParmValue

String

El valor actual del siguiente parmteros a ser recuperado.

Ejemplo
Following code for 03.270.00 (the launched application):
Sub Form1_Load
' Variable to store the passed Parameter to this screen
' Under RDT scenario, this code would be in Form_Load.
Dim VendorParm$
VendorParm = ApplGetParms()
If Trim$(VendorParm) <> "" Then
' Screen was called from another application.
' Set the value of the ID field to what was
' passed in by Launch() function
serr1 = SetObjectValue("cvendid", VendorParm)
End If
End Sub

Tambin Vea
Funcin ApplGetParmValue, declaracin ApplSetParmValue, funcin Launch

Llamadas de Funciones API de Solomon

75

Funcin ApplGetParmValue
Recupera un parmetro entregado por otra aplicacin de Solomon Tools for Visual
Basic.

Sintaxis
ParmValue = ApplGetParmValue(ParmSection, ParmName)

Observaciones
Parmetros entregados a una aplicacin Solomon Tools for Visual Basic puede ser
recuperado mediante dos diferentes mtodos: ApplGetParms y ApplGetParmValue.
Estas funciones se diferencian en que ApplGetParams no soporta mltiples secciones
de parmetros, mientras que ApplGetParamValue soporta esta funcionalidad ms
sofisticada. Como consecuencia, el usar ApplGetParamValue es la nica forma en
que la aplicacin que llama pueda recuperar parmetros de cualquier seccin diferente
a la seccin por defecto de Solomon. Por ejemplo, si la aplicacin que realiza la
llamada enva un parmetro diseado especificamente para VBA, slo la funcin
ApplGetParmValue puede ser usada para recuperar ese parmetro particular, dado
que la seccin de nombre de VBA puede ser requerida explicitamente a a travs del
argumento ParmSection.
Secciones de nombres de parmetros facilitan la eliminacin de conflictos, los cuales
pueden ocurrir en el programa de destino cuando la aplicacin misma, como tambin el
cdigo de VBA adaptado y agregado mediante el Administrador de Adaptaciones
(Customization Manager) estn ambos tratando de recibir parmetros diferentes. Por
ejemplo, la ventana del mdulo de Solomon Document Maintenance (03.250.00),
puede recibir dos parmetros opcionales que facilitan la funcionalidad de cambiar
rapidamente entre las ventanas: Reference Number y Vendor ID. El evento Form_Load
siempre llama una vez a ApplGetParams para determinar si algn parmetro ha sido
pasado a la aplicacin. Si existe un parmetro se asume que es el Reference Number y
por lo tanto la aplicacin llama nuevamente a ApplGetParams contando con que el
siguiente parmetro sea Vendor ID. Si llamadas adicionales a ApplGetParams usando
cdigo VBA adaptan esta ventana posteriormente, ocurrir un conflicto operacional.
Si una aplicacin tal fuera ser llamada mediante un solo parmetro, diseado para ser
recibido mediante el cdigo adaptado VBA, sera recibido encambio por la llamada
ApplGetParms realizada por la aplicacin subyacente. Por consiguiente, la llamada a
ApplGetParms en cdigo VBA no retornar ningn valor de parmetro.

76

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


ApplSetParmValue y ApplGetParmValue vencen este conflicto operacional
facilitando el uso de secciones de parmetros con nombre. Usando este mtodo ms
sofisticado, los parmetros pueden pasarse directamente a la aplicacin misma y al
cdico adaptado VBA utilizando los dos nombres estndar de seccin declarados en el
mdulo VBTools_VBA (por ejemplo PRMSECTION_VBRDT y
PRMSECTION_BSL). Sin embargo, las secciones de parmetros no se limitan a estos
dos nombres de secciones estndar. As, por ejemplo [XYZ Section] es un nombre
de seccin vlido. Los corchetes son requeridos dado que las secciones de parmetros
son manejadas similarmente a los nombres de secciones dentro de los archivos .INI. En
el ejemplo mencionado anteriormente, un parmetro adaptado puede ser enviado a la
ventana de Accounts Payable Document Maintenance en la seccin de parmetros
VBA de tal forma que slo la llamada a ApplGetParamValue requeriendo
especificamente el parmetro VBA recibira el parmetro.
La declaracin ApplGetParmValue utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

ParmValue

String

El valor actual del parmetro siendo recibido.

ParmSection

String

Nombre de la seccin dentro del archivo de parmetros


temporal desde el cual el parmetro debe ser rescatado.
Cualquier nombre de seccin puede ser usado, tal como
XYZ Section habiendo facilitado a la aplicacin que
llama tal nombre. El mdulo VBTools_VBA contiene tres
constantes simblicas que definen nombres de secciones
estndar: PRMSECTION_VBRDT, PRMSECTION_BSL
y PRMSECTION_TI. PRMSECTION_TI es reservado para
su uso en conjunto con Transaction Import. Por defecto, el
parmetro ser recuperado por la seccin representado por
PRMSECTION_VBRDT si el argumento es dejado en
blanco.

ParmName

String

Nombre lgico del parmetro que est siendo recuperado.


Por defecto, los nombres de parmetros son numerados
secuencialmente (por ejemplo PRM01, PRM02PRM99)
si no son nombrados explicitamente por la llamada a
ApplSetParmValue por la aplicacin que hace la llamada.

Llamadas de Funciones API de Solomon

77

Ejemplo
El siguiente ejemplo ilustra como pasar parmetros hacia una aplicacin de
herramientas Solomon para Visual Basic (Solomon Tools for Visual Basic) y cdigo
VBA adaptado al mismo tiempo y evitando conflictos entre ambos.
Cdigo en la aplicacin que realiza la llamada:
Call ApplSetParmValue(PRMSECTION_VBRDT, "Batch Nbr", "000001")
Call ApplSetParmValue(PRMSECTION_VBRDT, "Document Nbr", "123456")
Call ApplSetParmValue(PRMSECTION_BSL, "Example Parm", "Example
Parameter To VBA or BSL Code")
'Call another Solomon application
Launch( "SOLOMONAPP", "")

Cdigo en la aplicacin estndar de herramientas de Solomon para Visual Basic


(Solomon Tools for Visual Basic) (i.e. cdigo no adaptado) recibiendo los parmetros
estndar.
Dim Parm_BatchNbr

As String

Dim Parm_DocumentNbr

As String

Parm_BatchNbr = ApplGetParmValue(PRMSECTION_VBRDT, "Batch Nbr"


Parm_DocumentNbr = ApplGetParmValue(PRMSECTION_VBRDT, "Document Nbr")

Cdigo bsico en la herramienta Solomon estndar para aplicaciones de Visual Basic,


diseado para recibir los parmetros adaptados:
Dim Parm_CustomParm As String
Parm_CustomParm = ApplGetParmValue(PRMSECTION_BSL, "Example Parm")

Tambin Vea
Funcin ApplGetParms, declaracin ApplSetParmValue, funcin Launch

78

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin ApplGetReturnParms
Recibe un parmetro retornado desde una aplicacin secundaria que finaliz ahora.

Sintaxis
ParmValue = ApplGetReturnParms()

Observaciones
Si una aplicacin de herramientas Solomon para Visual Basic (Solomon Tools for
Visual Basic) necesita devolver parmetros al programa desde el cual fue llamado
originalmente, lo puede hacer dando uno de los parmetros a ScreenExit. Cuando el
control retorna posteriormente a la aplicacin que llam, puede realizar una o ms
llamadas a ApplGetReturnParms para recuperar satisfactoriamente cada parmetro
individual.
La funcin ApplGetReturnParms tiene los siguientes argumentos:
Argumento

Tipo

Descripcin

ParmValue

String

El valor actual del parmetro que est siendo recibido desde


un programa secundario que finaliz ahora.

Tambin Vea
Declaracin ScreenExit

Llamadas de Funciones API de Solomon

79

Declaracin ApplSetFocus
Fija el foco a un control designado.

Sintaxis
Call ApplSetFocus( TargetCtrl)

Observaciones
ApplSetFocus es el mtodo preferido para fijar explicitamente el foco a un control
dado o control objetivo. El uso del mtodo SetFocus de Visual Basic causar un error
fatal VB si el control objetivo est deshabilitado (disabled) o invisible. Los
desarrolladores deben recordar siempre que que el seteo de la propiedad del control
objetivo en tiempo de diseo no se puede garantizar para que se mantenga inalterado
durante el tiempo de ejecucin. Por ejemplo, el control objetivo puede estar habilitado
(enabled) y visible en la aplicacin estndar, y por lo tanto el SetFocus funcionar sin
problemas durante el testeo. Sin embargo, el usuario final puede posteriormente
realizar una adaptacin, y dentro de otras cosas, deshabilitar el control objetivo y con
esto revelando un delicado defecto en la aplicacin subyacente referente al uso del
mtodo SetFocus.
La declaracin ApplSetFocus utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

TargetCtrl

string

Control al cual el foco debiera moverse.

Ejemplo
Call ApplSetFocus("cDiscBal")

80

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin ApplSetParmValue
Agrega un parmetro adicional a la lista de parmetros que sern enviados a la
siguiente aplicacin llamada por la funcin Launch.

Sintaxis
Call ApplSetParmValue(ParmSection, ParmName, ParmValue)

Observaciones
Herramientas Solomon para Visual Basic usa la funcin Launch para iniciar otra
aplicacin. Hay dos mtodos diferentes para que la la aplicacin que llame pase
parmetros hacia la aplicacin llamada.
El primer mtodo es pasar parmetros a la aplicacin llamada usando el argumento
Launch, diseado especificamente para este propsito. Los parmetros pasados
mediante este mtodo son agrupados y pasados directamente a la aplicacin llamada
mediante el comando fsico mismo. Como consecuencia, bajo este mtodo el tamao
y/o nmero de parmetros est limitado al largo mximo del comando, menos el
nmero de bytes usado por Solomon para requerimientos internos, los cuales pueden
variar segn las circunstancias.
Un mtodo ms robusto para pasar los parmetros es usando la declaracin
ApplSetParmValue en conjunto con la funcin Launch. La principal ventaja de usar
este mtodo es que permite a la aplicacin que llama agrupar parmetros en secciones
nombradas y etiquetar explicitamente parmetros individuales usando nombres de
parmetros. El agrupar parmetros en grupos nombrados elimina conflictos que
ocurriran en el programa llamado cuando la aplicacin misma o cdigo VBA adaptado
agregado mediante el Administrador de Adaptaciones (Customization Manager), estn
ambos tratando de recibir parmetros diferentes. Vea la funcin ApplGetParmValue
para una explicacin ms detallada de este conflicto potencial.
La primera llamada a ApplSetParmValue crear un archivo temporal de destino y
colocar al primer parmetro en ese archivo. Por defecto, este archivo ser creado en el
directorio WINDOWS. Esto puede ser modificado editando la entrada TempDirectory
de la seccin [Miscellaneous] del archivo Solomon.ini. A continuacin hay un ejemplo
del directorio C:\TEMP especificado como el directorio del archivo de parmetros:
[Miscellaneous]
TempDirectory=C:\TEMP

Llamadas posteriores a ApplSetParmValue escribirn parmetros adicionales al


mismo archivo temporal de destino de parmetros. Cuando este archivo est completo,
el nombre de archivo ser pasado al programa llamado mediante la funcin Launch.
Una vez que el programa llamado haya cargado satisfactoriamente, puede llamar
ApplGetParms o ApplGetParmValue para recuperar los distintos parmetros
pasados desde el programa que llam. Cuando el programa llamado termin de
ejecutar, el archivo temporal ser borrado automaticamente. ApplSetParmValue est
diseado aolamente para facilitar el paso de parmetros a otras aplicaciones mediante
las herramientas de Solomon para Visual Basic.

Llamadas de Funciones API de Solomon

81

La declaracin ApplSetParmValue utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

ParmSection

String

Nombre de la seccin dentro del archivo de parmetros


temporal desde el cual el nuevo parmetro debe ser
aadido. Cualquier nombre de seccin puede ser usado, tal
como XYZ Section. El mdulo VBTools_VBA contiene
tres constantes simblicas que definen nombres de
secciones estndar: PRMSECTION_VBRDT,
PRMSECTION_BSL y PRMSECTION_TI.
PRMSECTION_TI es reservado para su uso en conjunto
con Transaction Import. Por defecto, el parmetro ser
recuperado por la seccin representado por
PRMSECTION_VBRDT si el argumento es dejado en
blanco.

ParmName

String

Nombre asignado al nuevo parmetro. Cualquier nombre


puede ser asignado a un parmetro, tal como Batch
Number. Por defecto, al nuevo parmetro le ser asignado
un texto enumerado secuencialmente (por ejemplo PRM01,
PRM02....PRM99) si el argumento es dejado en blanco.

ParmValue

String

El valor actual del nuevo parmetro.

Ejemplo
El siguiente ejemplo ilustra dos diferentes mtodos para llamar ROI para desplegar el
reporte de la lista de vendedores (Vendor List) en la pantalla para todos los vendedores
(Vendors) que tengan un balance superior a cero.
Pase parmetros a ROI mediante un argumento de un largo parmetro a Launch. Este
mtodo no funcionar siempre, dado que el completo contenido de ParmStr tiene que
caber en la lnea fsica de comandos.
Dim ParmStr

As String

ParmStr = "03670/RUN" + PRMSEP


ParmStr = ParmStr + "03670S/FORMAT" + PRMSEP
ParmStr = ParmStr + "Vendor.CurrBal > 0/WHERE" + PRMSEP
ParmStr = ParmStr + "/PSCRN"
Call Launch("ROI", ParmStr)

Pase parmetros a ROI usando ApplSetParmValue en conjunto con Launch. Usando


este mtodo, el reporte funcionar bien, independiente del largo de la clusula
WHERE.
Call ApplSetParmValue(PRMSECTION_VBRDT, "", "03670/RUN")
Call ApplSetParmValue(PRMSECTION_VBRDT, "", "03670S/FORMAT")
Call ApplSetParmValue(PRMSECTION_VBRDT, "", "Vendor.CurrBal > 0/WHERE")
Call ApplSetParmValue(PRMSECTION_VBRDT, "", "/PSCRN")
Call Launch("ROI", "")

Tambin Vea
Funcin ApplGetParms, funcin ApplGetParmValue, funcin Launch

82

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin CallChks
Realiza comprobacin de errores en un objeto especfico cuando se produce el evento
Chk.

Sintaxis
IntVar = CallChks (formctl$, ctl$)

Observaciones
Esta funcin es til cuando usted quiere ejecutar una comprobacin de errores en
forma manual en un objeto especfico, porque el valor de otro objeto ha cambiado. Esto
permite gatillar otro evento Chk bajo el control del programa.
La funcin CallChks utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

IntVar

Integer

Cualquier variable de tipo integer (serr, serr1 serr12


declaradas en el mdulo VBTools_VBA estn
reservadas para este uso).
Any integer variable (serr, serr1 serr12 declared in the
VBTools_VBA module are reserved for this use)

formctl

String

Nombre del objeto del formulario (form object)

ctl

String

Nombre del control del objeto a ejecutar el evento Chk.

Ejemplo
'Object 1 Chk event
Dim Result#, DrAmt#, CrAmt#
DrAmt = GetObjectValue("cdramt")
CrAmt = GetObjectValue("ccramt")
Result = FPAdd(DrAmt, CrAmt, MONEY)
If Result < 0 Then
Call MessBox("Negative Entry", MB_OK, "Message")
End If
'Object 2 Chk event (contains ccramt)
serr1 = CallChks("Form1", "object1")

Tambin Vea
Funcin GetObjectValue, funcin SetObjectValue

Llamadas de Funciones API de Solomon

83

Funcin DateCheck
Verifica si una fecha de una cadena de caracteres (date string) en el formato
MMDDYYYY representa o no una fecha vlida.

Sintaxis
RetVal = DateCheck(DateString)

Observaciones
La funcin DateCheck utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

0 indica que la fecha de cadena de caracteres es una fecha vlida.


1 indica que la fecha de cadena de caracteres es invlida.
2 indica que el mes es invlido.

DateString

String

Fecha de cadena de caracteres a ser verificada. Debe estar en


formato MMDDYYYY.

Ejemplo
datestr = "02291991"
serr = DateCheck(datestr)
If serr = -1 Then
'Invalid day
Else If serr = -2 Then
'Invalid month
End If

El ejemplo realiza comprobacin de errores en un campo de cadena de caracteres que


tiene formato de fecha. Lo siguiente es para ser colocado en su evento chk:
Sub cuser1_Chk(chkstrg$, retval%)
serr = DateCheck(chkstrg)
If serr = -1 Then
' Invalid Day
Call Messbox("Invalid day, please re-enter", MB_OK, "Message")
retval = errnomess
ElseIf serr = -2 Then
' Invalid Month
Call Messbox("Invalid month, please re-enter", MB_OK,
"Message")
retval = errnomess
End If
End Sub

Tambin Vea
Declaracin StrToDate

84

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin DateCmp
Compara dos valores de fecha.

Sintaxis
Cmp = DateCmp(Date1, Date2)

Observaciones
Para determinar si una fecha es nula o no, use DateCmp(Date, NULLDATE).
NULLDATE es una variable global declarada en el mdulo VBTools_VBA, la cual
est inicializada apropiadamente por el sistema en el inicio de cada aplicacin de
herramientas Solomon para Visual Basic.
La funcin DateCmp utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Cmp

Integer

<0 si Date1 < Date2


0 si ambas fechas son iguales.
>0 si Date1 > Date2

Date1

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Primer valor de fecha

Date2

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Segundo valor de fecha

Ejemplo
Dim TestDate1 As Sdate
Dim TestDate2 As Sdate
TestDate1.Val = GetObjectValue("cinvcdate")
TestDate2.Val = GetObjectValue("cdocdate")
serr1 = DateCmp(TestDate1, TestDate2)
If serr1 = 0 Then
Call MessBox("Dates are equal", MB_OK, "Message")
ElseIf serr1 > 0 Then
Call MessBox("invdate greater", MB_OK, "Message")
ElseIf serr1 < 0 Then
Call MessBox("docdate greater", MB_OK, "Message")
End If

Llamadas de Funciones API de Solomon

Funcin DateMinusDate
Retorna la diferencia (en das) entre dos fechas.

Sintaxis
NbrDays = DateMinusDate(Date1, Date2)

Observaciones
La funcin DateMinusDate utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

NbrDays

Long

Nmero de das entre Date1 and Date2,


incluyendo la fecha de fin. Si Date1 > Date2,
entonces el nmero de das entre ambas fechas
ser un valor negativo.

Date1

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Fecha de inicio

Date2

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Fecha de fin

Ejemplo
Dim Date1 As Sdate
Dim Date2 As Sdate
Date1.Val = GetObjectValue("cdate1")
Date2.Val = GetObjectValue("cdate2")
serr1 = DateMinusDate(Date1, Date2)
Call MessBox("Number of Days is " + Str$(serr1), MB_OK, "Message")

Tambin Vea
Declaracin DatePlusDays, declaracin DatePlusMonthSetDay

85

86

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin DatePlusDays
Agrega un nmero designado de das a una fecha existente.

Sintaxis
Call DatePlusDays(CurrDate, NbrDaysToAdd, ResultingDate)

Observaciones
La declaracin DatePlusDays utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

CurrDate

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Valor de la fecha inicial.

NbrDaysToAdd

Integer

Nmero de das a ser sumados a CurrDate.


Valores negativos se pueden utilizar.

ResultingDate

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Resultado de CurrDate + NbrDaysToAdd.

Ejemplo
Dim OldDate As Sdate
Dim NewDate As Sdate
Dim DaysToAdd%
OldDate.Val = GetObjectValue("cdocdate")
DaysToAdd = 30
Call DatePlusDays(OldDate, DaysToAdd, NewDate)
Call MessBox("New Date is " + DateToStrSep(NewDate), MB_OK, "Message")

Tambin Vea
Funcin DateMinusDate, Declaracin DatePlusMonthSetDay

Llamadas de Funciones API de Solomon

87

Declaracin DatePlusMonthSetDay
Agrega un nmero designado de meses a una fecha existente y fija la parte del da de la
fecha resultante a un da especfico del mes.

Sintaxis
Call DatePlusMonthSetDay(CurrDate, NbrMthsToAdd, SetSpecificDay,
ResultingDate)

Observaciones
La declaracin DatePlusMonthSetDay utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

CurrDate

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Valor de la fecha de inicio actual.

NbrMthsToAdd

Integer

Nmero de meses a ser sumado a CurrDate.


Valores negativos pueden ser usados.

SetSpecificDay

Integer

Valor deseado para la porcin del da


resultante. En el caso de que SetSpecificDay
est fuera del ltimo da vlido del mes
relevante, el sistema fijar automaticamente
el da actual al ltimo da vlido para ese
mes.

ResultingDate

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Fecha resultante.

Ejemplo
Dim OldDate As Sdate
Dim NewDate As Sdate
Dim DayOfMonth%
Dim MonthsToAdd%
DayOfMonth = 30
MonthsToAdd = 3
Call StrToDate("11211992", OldDate)
Call DatePlusMonthSetDay (OldDate, MonthsToAdd, DayOfMonth, NewDate)
'NewDate will be 02/28/1993 even though the DayOfMonth is 30
Call MessBox("New Date is " + DateToStrSep(NewDate), MB_OK, "Message")

Tambin Vea
Funcin DateMinusDate, declaracin DatePlusDays

88

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin DateToIntlStr
Convierte una fecha especfica en formato short date de Windows.

Sintaxis
ShortDateStr = DateToIntlStr(DateToConvert)

Observaciones
DateToIntlStr convertir una fecha desde el formato de base de datos SQL hacia el
formato de short date de Windows.
La funcin DateToIntlStr utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

ShortDateStr

String

Cadena de caracteres (string) que


contiene el valor de DateToConvert en
el formato short date de Windows.

DateToConvert

Tipo de dato Sdate definido


por usuario (declarado en
Applic.DH)

Valor de fecha a ser convertido.

Tambin Vea
Funcin DateToStr, fcuncin DateToStrSep, declaracin IntlStrToDate, declaracin
StrToDate

Llamadas de Funciones API de Solomon

Funcin DateToStr
Convierte un valor de fecha desde el formato de base de datos SQL a un a cadena de
caracteres (string) en formato MMDDYYYY.

Sintaxis
DateString = DateToStr(DateToConvert)

Observaciones
La funcin DateToStr utiliza los siguienes argumentos:
Argumento

Tipo

Descripcin

DateString

String

DateToConvert convertido a una cadena de


caracteres en formato MMDDYYYY.

DateToConvert

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Valor de fecha a ser convertido.

Ejemplo
'Example sets a field to current system date
Dim NewDate as Sdate
Dim NewStrDate$
Call GetSysDate(NewDate)
NewStrDate = DateToStr(NewDate)
serr1 = SetObjectValue("cpaydate", NewStrDate)

Tambin Vea
Funcin DateToStr, funcin DateToStrSep, declaracin IntlStrToDate, declaracin
StrToDate

89

90

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin DateToStrSep
Convierte un valor de fecha desde el formato de base de datos SQL a un a cadena de
caracteres (string) en formato MMDDYYYY.

Sintaxis
DateString = DateToStrSep(DateToConvert)

Observaciones
Las funciones DateToStrSep y DateToStr se diferencian solamente en el hecho de
que DateToStrSep inserta un caracter de separacin entre el mes, da y ao de la
cadena de caracteres.
La funcin DateToStrSep utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

DateString

String

DateToConvert convertido a una cadena de


caracteres en formato MMDDYYYY.

DateToConvert

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Valor de fecha a ser convertido.

Ejemplo
Dim TodaysDate As Sdate
Call GetSysDate(TodaysDate)
Call MessBox("Current Date is " + DateToStrSep(TodaysDate),
MB_OK, "Message")

Tambin Vea
Funcin DateToStr, funcin DateToStrSep, declaracin IntlStrToDate, declaracin
StrToDate

Llamadas de Funciones API de Solomon

91

Funciones DBNavFetch
Recupera un registro compuesto (composite record) desde la base de datos usando una
declaracin SQL de la propiedad DBNav de un control SAFMaskedText.

Sintaxis
RetVal = DBNavFetch1(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length)
RetVal = DBNavFetch4(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = DBNavFetch8(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)

Observaciones
DBNavFetch1, DBNavFetch4 y DBNavFetch8 pueden ser usados para recuperar un
registro compuesto (composite record), basado en el texto SQL de la propiedad DBVav
del control SAFMaskedText especificado en el parmetro Ctrl. Estas funciones no son
aplicables si la propiedad DBNav no contiene una declaracin SQL o no contiene un
nombre de procedimiento guardado.
Todos los controles SAFMaskedText tienen las propiedades PV y DBNav, y cada una
puede contener una declaracin SQL. Las funciones DBNavFetch1 y PVChkFetch1
son similares, pero usan la declaracin SQL de dos propiedades diferentes, de la
propiedad DBNav y la propiedad PV respectivamente. Normalmente la funcin
PVChkFetch1 ser usada en conjunto con la propiedad PV para facilitar una ventana
de valores posibles (Possible Values) como tambin la captura del registro actual. Si
los requerimientos del programa especifican la necesidad de capturar un registro, pero
no entrega una ventana de valores posibles (Possible Values window), entonces
DBNavFetch1 necesitar ser usado en conjunto con la propiedad DBNav. Esta
situacin puede aparecer en ventanas que contengan mltiples campos claves (key
fields), en donde el ltimo campo clave no necesite una ventana de valor posible
(Possible Value window). Un ejemplo de este caso es Employee W2 History (02.260),
el cual tiene dos campos claves: identificacin de empleado (Employee ID) y ao de
calendario (Calendar Year). Los requerimientos de la ventana son que el usuario es
forzado a ingresar un Employee ID basado en una tabla de empleados (Employee
table), la cual debiera estar visible a travs de una ventana de valores posibles (Possible
Values window). Sin embargo, no existe una tabla en el sistema Solomon para definir
un ao de calendario vlido, y por lo tanto una ventana de valores posibles no es
aplicable, dado que cualquier valor numrico es vlido. Una vez que el ltimo campo
clave haya sido ingresado, un registro nico correspondiente a ambos campos claves
debe ser capturado desde la base de datos. Dado que Calendar Year es el ltimo campo
clave y la ventana de valores posibles no es requerida para ese campo, la funcin
DBNavFetch1 fue usada en conjunto con la propiedad DBNav del control Calendar
Year.
DBNavFetch1 fue diseada para declaraciones SQL que retornen datos desde una sola
tabla (single table). Para declaraciones SQL ms avanzadas que tengan una o ms
asociaciones de tablas, use DBNavFetch4 o DBNavFetch8.

92

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


DBNavFetch1, DBNavFetch4 y DBNavFetch8 estn todas diseadas para capturar un
solo registro compuesto (composite record). Por ejemplo, si una declaracin SQL
contiene ocho asociaciones de tablas, DBVavFetch8 no retorna ocho registros desde
una unica tabla. Al contrario, retorna un unico registro desde cada una de las ocho
tablas. Por ende, estas funciones no son usadas en conjunto con la propiedad DBNav
del control SAFGrid. La declaracin DetailLoad usa la propiedad DBNav del control
SAFGrid para cargar la grilla (grid) con mltiples registros desde una o ms tablas.
La funcin DBNavFetch1 utiliza los siguientes argumentos (DBNavFetch4 y
DBNavFetch8 tienen cuatro y ocho estructuras de tablas respectivamente, y largos
correspondientes. PNULL debe ser pasado para parmetros de estructuras de tablas no
usadas como tambin el largo correspondiente de cero como PNULL, 0)
Argumento

Tipo

Descripcin

RetVal

Integer

0 si el registro fue capturado satisfactoriamente.


Retorna NOTFOUND si ningn registro calza
la clusula de restriccin (restriction clause) de
la declaracin DBNav.

Ctrl

Control includo en la propiedad DBNav para


ser usado como la declaracin SQL. Puede ser
opcionalmente PNULL, si la llamada es
realizada dentro del evento Chk del control
cuya propiedad DBNav est siendo usada.

Cursor

Integer

Cursor de la base de datos SQL.

SQLParmValue

String

Valor clave (key value) entregado como ltimo


parmetro a la clusula de restriccin
(restriction clause) de la declaracin DBVav.

bTable1

User-defined datatype

Estructura de tabla correspondiente a la tabla


primordial en la declaracin DBNav.

bTable1Length

Integer

Largo de la primera estructura de tabla. Por


ejemplo, LenB(bTable1). Nota: es crtico usar
LenB() en vez de Len() para todo parmetro
no-nulo de table length.

Ejemplo
Sub cCalYr_Chk (chkstrg As String, retval As Integer)
Dim W2Federal_Fetch

As Integer

W2Federal_Fetch = DBNavFetch1(PNULL, CSR_W2Federal, chkstrg,


bW2Federal, LenB(bW2Federal))
End Sub

Tambin Vea
Funciones PVChkFetch

Llamadas de Funciones API de Solomon

93

Declaracin DispFields
Despliega el valor del campo de dato subyacente correspondiente al control designado.

Sintaxis
Call DispFields(Form, Control)

Observaciones
Cada control de datos Solomon est asociado con una variables Visual Basic
subyacente mediante una combinacin de su propiedad FieldName y una llamada
VBA_SetAddr asociada. El sistema va a actualizar el despliegue del valor de una
variables VB subyacente automaticamente, tal como cuando un nuevo registro es
cargado. Sin embargo, cuando la aplicacin modifica directamente el valor de una
variable VB subyacente a un control de dato Solomon, entonces puede necesitar llamar
a la declaracin DispFields para mostrar el nuevo valor en el control pertinente.
DispFields puede ser usado para mostrar un rango de controles basados en su
propiedad de orden TabIndex.
La declaracin DispFields utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Form

Control

Formulario (form) que contiene todos los controles


usados en DispFields(). PNULL puede ser usado para
inclur todos los formularios cargados.

Control

Control

El control (o rango de controles) cuyos valores de datos


subyacentes deben ser desplegados. PNULL puede ser
usado para inclur todos los controles del formulario
designado. Para usar un rango de controles, separe los
nombres de controles en la cadena de caracteres con una
lnea (por ejemplo, cuses1 cuses8).

94

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
El siguiente cdigo extrado desde la ventana del mdulo de Payroll, Earnings Type
Maintenance (02.270.00), ilustra cmo la declaracin DispFields debe ser usada
despus de que la variable VB subyacente a un control de datos particular haya sido
modificado automaticamente. El cdigo es del evento Chk del control combo box
(combo box control) de Earnings Tipe.
'Displaying all fields on a form
If Level = 0 Then
'Set defaults for all objects on NewInfo subform
'then re-display the results
serr1 = SetDefaults("NewInfo", "")
Call DispFields("NewInfo", "")
End If
'Displaying one field on a form
Dim NewDate as Sdate
Dim NewStrDate$
Call GetSysDate(NewDate)
NewStrDate = DateToStr(NewDate)
serr1 = SetObjectValue("cpaydate", NewStrDate)
Call DispFields("Form1", "cpaydate")

Tambin Vea
Propiedad FieldName, declaracin MDisplay, propiedad TabIndex, declaracin
VBA_SetAddr

Llamadas de Funciones API de Solomon

95

Declaracin DispForm
Despliega un sub-formulario (subform) designado.

Sintaxis
Call DispForm(SubFormName, CenterIt)

Observaciones
DispForm causar que el sub-formulario (subform) designado sea desplegado en
forma modal (modally). Esto significa que ningn otro formulario (form) de la misma
aplicacin pueda recibir el foco hasta que el sub-formulario haya sido ocultado
mediante el llamado a HideForm.
DispForm will cause the designated subform to be displayed modally, meaning that no
other form from the same application can receive focus until the subform is hidden via
a call to HideForm.
Form1 es desplegado siempre en forma automatica por el sistema. Por consiguiente,
este llamado es slo necesario para sub-formularios (subforms).
La declaracin DispForm utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

SubFormName

String

Formulario (form) a ser desplegado en forma modal


(modally).

CenterIt

Integer

Verdadero (TRUE) es para centrar el sub-formulario


en la pantalla.
Falso (FALSE) es para desplegar el sub-formulario en
sus coordenadas de diseo.

Ejemplo
'Display new subform
Call DispForm("NewForm", True)

Tambin Vea
Declaracin HideForm

96

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin DParm
Convierte una fecha en una cadena de caracteres de parmetros SQL (SQL parameter
string).

Sintaxis
SQLParmStr = DParm(DateToConvert)

Observaciones
La funcin DParm utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

SQLParmStr

String

DateToConvert convertido a una cadena de


caracteres de parmetro SQL.

DateToConvert

Tipo de dato Sdate


definido por usuario
(declarado en el mdulo
VBTools_VBA)

Valor de fecha a ser convertido.

Ejemplo
'Example retrieves the last voucher date for
'current vendor and selects a count of all documents
'less than the last voucher date
Dim SqlStr$
Dim CountDoc As Long
Dim DateComp As Sdate
DateComp.Val = GetObjectValue("clastvodate")
SqlStr = "Select Count(*) from APDoc Where DocDate < "
+ Dparm(DateComp)
Call Sql(c1, SqlStr)
serr1 = sgroupfetch1(c1, CountDoc, Len(CountDoc))
Call MessBox("Number of Documents: " + str$(CountDoc), MB_OK, "Message")

Tambin Vea
Funcin FParm, funcin IParm, funcin SParm

Llamadas de Funciones API de Solomon

97

Declaracin Edit_Cancel
Ejecuta el botn Cancel de la barra de herramientas.

Sintaxis
Call Edit_Cancel

Observaciones
Esta funcin corresponde a la seleccin de cencelar en el men Edit de Solomon o su
barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de cancelar
de Solomon desde un programa VBA.

Ejemplo
Ejemplo usado en el botn de empujar (push button) para realizar la funcin cancelar.
Sub Cancel_Click()
Call Edit_Cancel
End Sub

Tambin Vea
Declaracin Edit_Close, funcin Edit_Finish

98

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin Edit_Close
Ejecuta el botn Close de la barra de herramientas.
Executes the Close toolbar button.

Sintaxis
Call Edit_Close

Observaciones
Esta funcin corresponde a la seleccin de cerrar (close) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de cerrar
de Solomon desde un programa VBA.

Ejemplo
Ejemplo usado en el botn push para realizar la funcin cerrar (close function)
Sub Close_Click()
Call Edit_Close
End Sub

Tambin Vea
Funcin Edit_Next, funcin Edit_Last

Llamadas de Funciones API de Solomon

99

Funcin Edit_Delete
Ejecuta el botn Delete de la barra de herramientas.

Sintaxis
RetVal = Edit_Delete (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de borrar (delete) en el men Edit de Solomon
o su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
borrar (delete) de Solomon en el nivel especificado desde un programa VBA.
La funcin Edit_Delete utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservadas para este uso)

LevelNumber

Integer

Nmero del nivel al cual realizar la operacin.

Ejemplo
En el ejemplo se navega hasta la cuarta fila en la ventana de entradas Journal, y luego
se borra de lnea.
Dim LvlStr$, Lvl%, I%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_First(Lvl)
'Already on first row, go down 3 more
For I = 1 To 3
serr1 = Edit_Next(Lvl)
Next I
'Delete existing row
serr1 = Edit_Delete(Lvl)

Tambin Vea
Funcin Edit_New, declaracin Edit_Save

100

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin Edit_Finish
Ejecuta el botn Finish de la barra de herramientas.

Sintaxis
RetVal=Edit_Finish(LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de finalizar (finish) en el men Edit de
Solomon o su barra de herramientas. Utilice esta funcin siempre que ejecute la
funcin de finalizar (finish) de Solomon en el nivel especificado desde un programa
VBA.
La funcin Edit_Finish utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservados para este uso)

LevelNumber

Integer

Nmero de nivel al cual realizar la operacin.

Ejemplo
El ejemplo realiza un finish en un botn push.
serr1=Edit_Finish

Tambin Vea
Declaracin Edit_Cancel, declaracin Edit_Save

Llamadas de Funciones API de Solomon

101

Funcin Edit_First
Ejecuta el botn First de la barra de herramientas.

Sintaxis
RetVal = Edit_First (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de primero (First) en el men Edit de Solomon
o su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
navegacin de la base de datos de Solomon First en el nivel especificado desde un
programa VBA.
La funcin Edit_First utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservados para este uso)

LevelNumber

Integer

Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va hacia la primera lnea primero, y luego a la
siguiente hasta que finaliza.
Sub NavToEndOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_First(Lvl)
While serr1 <> NotFound
serr1 = Edit_Next(Lvl)
Wend
End Sub

Tambin Vea
Funcin Edit_Next, funcin Edit_Last

102

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin Edit_Last
Ejecuta el botn Last de la barra de herramientas.

Sintaxis
RetVal = Edit_Last (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de ltimo (Last) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
navegacin de la base de datos de Solomon Last en el nivel especificado desde un
programa VBA.
La funcin Edit_Last utiliza los siguientes argumentos::
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservados para este uso)

LevelNumber

Integer

Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va hacia la ltima lnea primero, y luego a la anterior
hasta que finaliza.
Sub NavToTopOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr = Edit_Last(Lvl)
While serr = 0
serr = Edit_Prev(Lvl)
Wend
End Sub

Tambin Vea
Funcin Edit_Next, funcin Edit_First

Llamadas de Funciones API de Solomon

103

Funcin Edit_New
Ejecuta el botn New de la barra de herramientas.

Sintaxis
RetVal = Edit_New (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de nuevo (New) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin New en el
nivel especificado desde un programa VBA.
La funcin Edit_New utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservados para este uso)

LevelNumber

Integer

Nmero de nivel al cual realizar la operacin.

Ejemplo
Este ejemplo inserta un nuevo documento bajo en control de programa:
Dim LvlStr$, Lvl%
serr1 = GetProp("crefnbr", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_New(Lvl)

Tambin Vea
Declaracin Edit_Save, funcin Edit_Delete

104

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin Edit_Next
Ejecuta el botn Next de la barra de herramientas.

Sintaxis
RetVal = Edit_Next (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de siguiente (Next) en el men Edit de
Solomon o su barra de herramientas. Utilice esta funcin siempre que ejecute la
funcin de navegacin de la base de datos de Solomon Next en el nivel especificado
desde un programa VBA.
La funcin Edit_Next utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservados para este uso)

LevelNumber

Integer

Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va primero hacia la primera lnea, y luego a la
siguiente hasta que finaliza.
Sub NavToEndOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_First(Lvl)
While serr1 <> NotFound
serr1 = Edit_Next(Lvl)
Wend
End Sub
Example inserts a new row into row 6 of an existing
GL Journal entry
Sub InsertAtRowSix_Click()
Dim Cntr

As Integer

Dim Dval

As Double

Dim Ivis

As String

Dim Lvl

As Integer

serr = GetProp("cacct", PROP_VISIBLE, Ivis)


serr = GetProp("cacct", PROP_LEVEL, Lvl)
Cntr = 1
serr = Edit_First(Lvl)

Llamadas de Funciones API de Solomon

105

While serr = 0 And Cntr < 8


If cntr <> 6 Then
serr = Edit_Next(Lvl)
ElseIf Cntr = 6 Then
serr = Edit_New(Lvl)
If serr = 0 Then
serr = SetObjectValue("cacct","3080")
serr = SetObjectValue("csub","03000AA00001")
serr =
SetObjectValue("ctrandate","09071994")
serr = SetObjectValue("ctrandesc",Ivis)
serr = SetObjectValue("cdramt", "100")
serr = SetObjectValue("ccramt",".00000000")
End If
End If
Cntr = Cntr + 1
Wend
End Sub

Tambin Vea
Funcin Edit_Prev, funcin Edit_Last

106

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin Edit_Prev
Ejecuta el botn Prev de la barra de herramientas.

Sintaxis
RetVal = Edit_Prev (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de anterior (Previous) en el men Edit de
Solomon o su barra de herramientas. Utilice esta funcin siempre que ejecute la
funcin de navegacin de la base de datos de Solomon Previous en el nivel
especificado desde un programa VBA.
La funcin Edit_Prev utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservados para este uso)

LevelNumber

Integer

Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va hacia la ltima lnea primero, y luego a la anterior
hasta que finaliza.
Sub NavToTopOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_Last(Lvl)
While serr1 = 0
serr1 = Edit_Prev(Lvl)
Wend
End Sub

Tambin Vea
Funcin Edit_Next, funcin Edit_First

Llamadas de Funciones API de Solomon

107

Declaracin Edit_Save
Ejecuta el botn Save de la barra de herramientas.

Sintaxis
Call Edit_Save

Observaciones
Esta funcin corresponde a la seleccin de salvar (Save) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
navegacin de la base de datos de Solomon Save en el nivel especificado desde un
programa VBA.

Ejemplo
Este ejemplo ejecuta la funcin Solomon de salvar (save):
Dim TimeOfDay As Stime
Call GetSysTime(TimeOfDay)
serr1 = SetObjectValue("cuser1", TimeOfDay)
Call Edit_Save

Tambin Vea
Funcin Edit_New, funcin Edit_Delete

108

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin FPAdd
Suma dos valores de punto flotante de doble precisin (double-precision floating point)
con una precisin de redondeo designada.

Sintaxis
Result = FPAdd(Dbl1, Dbl2, Precision)

Observaciones
Errores ocurridos durante la operacin de adicin, tales como desbordamiento
(overflow), sern manejados en forma automatica por el sistema. Estos tipos de errores
causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea
escrito en el registro de estado de procesos dependiendo del contexto en el cual el error
haya ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente,
la aplicacin ser finalizada.
La funcin FPAdd utiliza los siguientes argumentos:
Argumento
Result
Dbl1
Dbl2
Precision

Tipo
Double
Double
Double
Integer

Descripcin
Valor de retorno
Primer valor
Segundo valor
Precisin de redondeo

Nota: El parmetro de precisin puede tener el valor explcito de precisin, como


tambin una de las siguientes constantes simblicas definidas en el mdulo
VBTools_VBA:
MONEY Valor monetario
INV_UNIT_QTY Cantidad de unidades de inventario (Inventory unit quantity)
UNITS Unidades de trabajo, tales como horas trabajadas.
INV_UNIT_PRICE Precio unitario de inventario (Inventory unit price)
PERCENT Valor de porcentaje

Ejemplo
'Add the current to future balance for a total balance
Dim CurrentBalance#
Dim FutureBalance#
Dim TotalBal#
CurrentBalance = GetObjectValue("ccurrbal")
FutureBalance = GetObjectValue("cfuturebal")
TotalBal = FPAdd(CurrentBalance, FutureBalance, MONEY)
Call MessBox(Str$(TotalBal), MB_OK, "Message")

Tambin Vea
Funcin FPDiv, funcin FPMult, funcin FPRnd, funcin FPSub

Llamadas de Funciones API de Solomon

109

Funcin FParm
Convierte un valor de punto flotante de doble precisin a una cadena de caracteres de
parmetro SQL (SQL parameter string).

Sintaxis
SQLParmStr = FParm(DblToConvert)

Observaciones
La funcin FParm utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

SQLParmStr

String

DblToConvert convertido a una cadena de caracteres de


parmetro SQL (SQL parameter string).

DblToConvert

Double

Valor de punto flotante de doble precisin a ser


convertido.

Ejemplo
Dim MaxAmount#
Dim SqlStr$
Dim CountDoc As Long
'Obtain documents with balance over MaxAmount
MaxAmount = 1000
SqlStr = "Select Count(*) From ARDoc Where DocBal > "
SqlStr = SqlStr + FParm(MaxAmount)
Call Sql(c1, SqlStr)
serr1 = sgroupfetch1(c1, CountDoc, Len(CountDoc))
Call MessBox ("Documents over Max: " + Str$(CountDoc), MB_OK, "Message")

Tambin Vea
Funcin DParm, funcin IParm, funcin SParm

110

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin FPDiv
Divide un valor de punto flotante de doble precisin por otro con una precisin de
redondeo designada.

Sintaxis
Result = FPDiv(Dbl1, Dbl2, Precision)

Observaciones
Esta funcin dividir el valor de Dbl1 por Dbl2 y retornar el resultado.
Errores ocurridos durante la operacin de divisin, tales como divisin por cero, sern
manejados en forma automatica por el sistema. Estos tipos de errores causarn que el
mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en el
registro de estado de procesos dependiendo del contexto en el cual el error haya
ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente, la
aplicacin ser finalizada.
La funcin FPDiv utiliza los siguientes argumentos:
Argumento
Result
Dbl1
Dbl2
Precision

Tipo
Double
Double
Double
Integer

Descripcin
Valor de retorno
Primer valor
Segundo valor
Precisin de redondeo

Nota: El parmetro de precisin puede tener el valor explcito de precisin, como


tambin una de las siguientes constantes simblicas definidas en el mdulo
VBTools_VBA:
MONEY Valor monetario
INV_UNIT_QTY Cantidad de unidades de inventario (Inventory unit quantity)
UNITS Unidades de trabajo, tales como horas trabajadas.
INV_UNIT_PRICE Precio unitario de inventario (Inventory unit price)
PERCENT Valor de porcentaje

Ejemplo
Dim Var1#, Var2#, Result#
Var1 = 100
Var2 = 10
Result = FPDiv(Var1, Var2, MONEY)
'Result is 10
Call MessBox(Str$(Result), MB_OK, "Message")

Tambin Vea
FuncinFPAdd, funcin FPMult, funcin FPRnd, funcin FPSub

Llamadas de Funciones API de Solomon

111

Funcin FPMult
Multiplica dos valores de punto flotante de doble precisin (double-precision floating
point) con una precisin de redondeo designada.

Sintaxis
Result = FPMult(Dbl1, Dbl2, Precision)

Observaciones
Errores ocurridos durante la operacin de multiplicacin, tales como desbordamiento
(overflow), sern manejados en forma automatica por el sistema. Estos tipos de errores
causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea
escrito en el registro de estado de procesos dependiendo del contexto en el cual el error
haya ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente,
la aplicacin ser finalizada.
La funcin FPMult utiliza los siguientes argumentos:
Argumento

Tipo

Descripci

Result

Double

Valor de retorno

Dbl1

Double

Primer valor

Dbl2

Double

Segundo valor

Precision

Integer

Precisin de redondeo

Nota: El parmetro de precisin puede tener el valor explcito de precisin, como


tambin una de las siguientes constantes simblicas definidas en el mdulo
VBTools_VBA:
MONEY Valor monetario
INV_UNIT_QTY Cantidad de unidades de inventario (Inventory unit quantity)
UNITS Unidades de trabajo, tales como horas trabajadas.
INV_UNIT_PRICE Precio unitario de inventario (Inventory unit price)
PERCENT Valor de porcentaje

Ejemplo
Dim Var1#, Var2#, Result#
Var1 = 100
Var2 = 10
Result = FPMult(Var1, Var2, MONEY)
'Result is 1000
Call MessBox(Str$(Result), MB_OK, "Message")

Tambin Vea
Funcin FPAdd, funcin FPDiv, funcin FPRnd, funcin FPSub

112

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin FPRnd
Redondea un valor de punto flotante de doble precisin (double-precision floatingpoint) a una precisin de redondeo designada.

Sintaxis
Result = FPRnd(DblToRound, Precision)

Observaciones
Errores ocurridos durante la operacin de redondeo, tales como desbordamiento
(overflow), sern manejados en forma automatica por el sistema. Estos tipos de errores
causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea
escrito en el registro de estado de procesos dependiendo del contexto en el cual el error
haya ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente,
la aplicacin ser finalizada.
La funcin FPRnd utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Result

Double

Valor de retorno

DblToRound

Double

Valor a ser redondeado

Precision

Integer

Precisin de redondeo

Nota: El parmetro de precisin puede tener el valor explcito de precisin, como


tambin una de las siguientes constantes simblicas definidas en el mdulo
VBTools_VBA:
MONEY Valor monetario
INV_UNIT_QTY Cantidad de unidades de inventario (Inventory unit quantity)
UNITS Unidades de trabajo, tales como horas trabajadas.
INV_UNIT_PRICE Precio unitario de inventario (Inventory unit price)
PERCENT Valor de porcentaje

Ejemplo
El ejemplo realiza una declaracin SQL para rescatar una suma total de documentos,
luego depliega los resultados en una ventana de mensaje y le da formato al nmero.
Dim SqlStr$
Dim Result#
SqlStr = "Select Sum(OrigDocAmt) From ARDoc"
Call Sql(C1, SqlStr)
serr1 = sgroupfetch1(C1, Result, Len(Result))
Call MessBox(Format$ (FPRnd(Result, MONEY) , "$###,###,###.00"),
MB_OK, "Message")

Tambin Vea
Funcin FPAdd, funcin FPDiv, funcin FPMult, funcin FPSub

Llamadas de Funciones API de Solomon

113

Funcin FPSub
Resta un nmero de punto flotante de doble precisin a otro de mismo tipo, con una
precisin de redondeo designada.

Sintaxis
Result = FPSub(Dbl1, Dbl2, Precision)

Observaciones
Esta funcin va a restar el valor de Dbl2 al valor Dbl1 y retornar el resultado.
Errores ocurridos durante la operacin de resta, tales como desbordamiento (overflow),
sern manejados en forma automatica por el sistema. Estos tipos de errores causarn
que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en el
registro de estado de procesos dependiendo del contexto en el cual el error haya
ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente, la
aplicacin ser finalizada.
La funcin FPSub utiliza los siguientes argumentos:
Argumento
Result
Dbl1
Dbl2
Precision

Tipo
Double
Double
Double
Integer

Descripcin
Valor de retorno
Primer valor
Segundo valor
Precisin de redondeo

Nota: El parmetro de precisin puede tener el valor explcito de precisin, como


tambin una de las siguientes constantes simblicas definidas en el mdulo
VBTools_VBA:
MONEY Valor monetario
INV_UNIT_QTY Cantidad de unidades de inventario (Inventory unit quantity)
UNITS Unidades de trabajo, tales como horas trabajadas.
INV_UNIT_PRICE Precio unitario de inventario (Inventory unit price)
PERCENT Valor de porcentaje

Ejemplo
Dim Var1#, Var2#, Result#
Var1 = 1000
Var2 = 300
Result = FPSub(Var1, Var2, MONEY)
'Result will be 700.00
Call MessBox(Format$(Result, "####.00"), MB_OK, "Message")

Tambin Vea
Funcin FPAdd, funcin FPDiv, funcin FPMult, funcin FPRnd

114

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin GetBufferValue
Obtiene el valor del buffer de datos del campo de una aplicacin Solomon subyacente.

Sintaxis
Call GetBufferValue(bTable.FieldName, Str)

Observaciones
Si una aplicacin VBA realiza su propia llamada VBA_SetAddr, puede referenciar
cualquier estructura desde su cdigo. Sin embargo, si la estructura de la aplicacin
Solomon subyacente necesita ser referenciada, y estos campos no estn representados
ocmo objetos en el formulario (form), esta declaracin permite a la aplicacin VBA
obtener estos valores. Si los campos fueran objetos en el formulario, la aplicacin VBA
puede encambio simplemente realizar un GetObjectValue.
La declaracin GetBufferValue utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

bTable.FieldName

String

SQL Table.FieldName que se quiere recibir.

Str

String

Variable de cadena de caracteres en la cual se


almacena el contenido del valor del buffer.

Ejemplo
' get account number from gltran record
Dim AccountValue As String * 10
Call GetBufferValue("bgltran.acct",AccountValue)

Tambin Vea
Declaracin SetBufferValue

Llamadas de Funciones API de Solomon

115

Funcin GetDelGridHandle
Retorna el manejador de recursos (resource handle) del arreglo de memoria usado para
guardar temporalmente lneas de detalle (detail lines) borradas del control SAFGrid
designado.

Sintaxis
DelMemHandle = GetDelGridHandle( SpreadSheetObj)

Observaciones
Cada control SAFGrid est asociado a dos arreglos de memoria subyacentes que el
sistema abre automaticamente durante la carga del formulario (Form Load). El arreglo
de memoria primario guarda los registros que son actualmente visibles en la grilla. El
manejador de recursos de este arreglo de memoria primario es retornado por la funcin
GetGridHandle. Sin embargo, otro arreglo es tambin creado para guardar
temporalmente registros borrados por el usuario hasta que se realice una operacin
salvar (save) y se actualice la base de datos. El manejador de recursos para este arreglo
de memoria puede ser retomado usando la funcin GetDelGridHandle.
Una vez que el menejador de recursos para el arreglo de memoria para registros
borrados haya sido tomado, la aplicacin puede usarlo para mostrar los registros
borrados por el usuario usando llamados a MFirst y MNext.
La funcin GetDelGridHandle utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

DelMemHandle

Integer

Manejador de recursos para el arreglo de memoria que


mantiene registros borrados del SpreadSheed designado

SpreadSheetObj

String

Nombre de objeto del SpreadSheet

Ejemplo
serr1 = GetDelGridHandle("Spread1")

Tambin Vea
Funcin GetGridHandle

116

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin GetGridHandle
Obtiene el manejador de grilla (grid handle) para un objeto Spreadsheet.

Sintaxis
IntVar = GetGridHandle (SpreadControlName$)

Observaciones
Retorna el manejador del arreglo de memoria para un objeto spreadsheet especfico. Es
til si la aplicacin quiere usar las funciones de arreglo de memoria para navegar a
travs de un objeto spreadsheet. Debe ser usado con extrema precaucin, dado que la
aplicacin subyacente puede pasar por sobre suposiciones de los arreglos de memoria
realizados en el programa VBA.
La funcin GetGridHandle utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

IntVar

Integer

Cualquier variable de tipo integer (serr, serr1


serr12 declarados en el mdulo VBTools_VBA
estn reservados para este uso)

SpreadControlName

String

Nombre del objeto spreadsheet

Ejemplo
Dim MemHandle As Integer
MemHandle = GetGridHandle("Spread1")

Tambin Vea
Declaracin MSet

Llamadas de Funciones API de Solomon

Funcin GetObjectValue
Obtiene el valor de un objeto especfico del formulario.

Sintaxis
RetVal = GetObjectValue(ControlName)

Observaciones
Cada vez que una aplicacin VBA necesite obtener un valor de dato de cualquier
control del formulario, esta funcin debe ser usada.
La funcin GetObjectValue utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Defenido por
usauario

Cualquier tipo de variable. Debe coincidir con el tipo del


campo de la base de datos del nombre del control
(ControlName).

ControlName

String

Nombre del control cuyo valor de campo usted quiere


obtener.

Ejemplo
Dim TestDate1 As Sdate
TestDate1.Val = GetObjectValue("cinvcdate")
'Double field example
Dim CrTotal#
CrTotal = Val(GetObjectValue ("ccrtot"))
'Logical field example
'Note that an integer variable type is declared
Dim Var1%
Var1 = GetObjectValue("cmultichk")
If Var1 = 0 Then
Call MessBox("Value is UnChecked or False", MB_OK, "Message")
ElseIf Var1 = 1 Then
Call MessBox("Value is Checked or True", MB_OK, "Message")
End If
'Integer field example
Dim CycleCount%
CycleCount = GetObjectValue("ccycle")
'String field example
Dim DispCountry As String
DispCountry = GetObjectValue("ccountry")

Tambin Vea
Funcin SetObjectValue

117

118

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin GetProp
Obtiene el valor de una propiedad de un objeto especfico.

Sintaxis
RetVal = GetProp(ObjectName, PropName, PropValue)

Observaciones
Esta funcin permite a una amplicacin VBA obtener el valor de una propiedad de
cualquier objeto en pantalla. Adems del valor de la propiedad, la aplicacin tambin
puede obtener el nivel asociado al objeto particular. Esta funcin es til para funciones
tipo Edit_, como tambin para funciones SetProp, ya que usted puede as verificar el
valor de la propiedad antes de fijar dicho valor.
La funcin GetProp utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12 estn


reservados para este uso).

ObjectName

String

Nombre del objeto.

PropName

String

Nombre de la propiedad de la cual usted quiere obtener el


valor. Nota: Cualquier nombre de propiedad nativa que es
disponible para el objeto puede ser especificado.

PropValue

User Defined

Variable to retrieve the property value into.

Los siguientes valores de argumentos para PropertyName son definidos como


constantes simblicas en el mdulo VBTools_VBA:
Constante Simblica

Tipo de Dato Vlido

Valores de Dato Vlidos

PROP_BLANKERR
(required)

Integer

TRUE / FALSE

PROP_CAPTION

String

PROP_CUSTLIST

String

PROP_ENABLED

Integer

PROP_HEADING

String

PROP_LEVEL

String

PROP_MASK

String

PROP_MIN

String

PROP_MAX

String

PROP_TABSTOP

Integer

TRUE / FALSE

PROP_VISIBLE

Integer

TRUE / FALSE

TRUE / FALSE

Llamadas de Funciones API de Solomon

119

Ejemplo
En el ejemplo se navega a travs de una serie de cosas en la ventana de Journal Entry:
Sub NavThruBatches_Click()
Dim Lvl As Integer
Dim LvlStr As String * 1
' Since cbatnbrh is a key field, level will be
' returned as "0,k" not "0"
' So declare lvlstr as a one-character string, so
' we get back only "0", and then manually convert it
' for use in Edit calls
serr = GetProp("cbatnbrh",PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
'Perform navigation to first batch
serr = Edit_First(Lvl)
While serr <> NotFound
DoEvents
serr = Edit_Next(Lvl)
Wend
End Sub

Tambin Vea
Declaracin SetProp, funcin Edit_Next

120

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin GetSqlType
Determina qu tipo de servidor de base de datos est siendo usado.

Sintaxis
SqlType = GetSqlType()

Observaciones

Solomon soporta actualmente un tipo de base de datos SQL: Microsoft SQL Server .
Esta es una API antigua, la cual es soportada por muchos tipos de bases de datos.
Compatibilidad inversa se ha preservado.
La funcin GetSqlType retorna una de las siguientes constantes globales de tipo
integer declaradas en el mdulo VBTools_VBA:
Valor de Retorno

Descripcin

MSSqlType

Se est utilizando el servidor de base de datos Microsoft SQL

Ejemplo
Dim SqlDatabaseBeingUtilized

As Integer

SqlDatabaseBeingUtilized = GetSqlType()

Llamadas de Funciones API de Solomon

121

Declaracin GetSysDate
Recupera la fecha del sistema actual.

Sintaxis
Call GetSysDate(Date)

Observaciones
La declaracin GetSysDate utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Date

Tipo de dato SDate


definido por el usuario
(declarado en el mdulo
VBTools_VBA)

Variable de fecha a ser inicializada a la fecha del


sistema actual.

Ejemplo
Esta rutina de ejemplo fija un campo de fecha existente a la fecha del sistema.
Sub setdate_Click()
Dim NewDate as Sdate
Dim NewStrDate$
Call GetSysDate(NewDate)
NewStrDate = DateToStr(NewDate)
serr1 = SetObjectValue("cpaydate", NewStrDate)
Call DispFields("Form1","cpaydate")
End Sub

Tambin Vea
Declaracin GetSysTime

122

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin GetSysTime
Recupera la hora del sistema actual.

Sintaxis
Call GetSysTime(Time)

Observaciones
La declaracin GetSysTime utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Time

Tipo de dato STime


definido por el usuario
(declarado en el mdulo
VBTools_VBA)

Variable de hora a ser inicializada a la hora del


sistema actual.

Ejemplo
'Obtain current system time
Dim SystemTime As Stime
Call GetSysTime(SystemTime)
Call MsgBox("Current Time is: " + TimeToStr(SystemTime),
MB_OK, "Message")

Tambin Vea
Declaracin GetSysDate

Llamadas de Funciones API de Solomon

123

Declaracin HideForm
Oculta un sub-formulario (subform) que ha sido desplegado previamente mediante un
llamado a DispForm.

Sintaxis
Call HideForm(SubFormName)

Observaciones
Esta funcin es usada tipicamente en el evento click de los botones OK o Cancel del
sub-formulario designado.
La declaracin HideForm utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

SubFormName

String

Formulario (form) a ser ocultado.

Ejemplo
Sub OkButton_Click()
Call HideForm("NewForm")
End Sub

Tambin Vea
Declaracin DispForm

124

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin IncrStrg
Incrementa una representacin de una cadena de caracteres (string representation) de
un nmero de valor.

Sintaxis
Call IncrStrg(StringNbr, Length, Increment)

Observaciones
La declaracin IncrStrg utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

StringNbr

String

Cadena de caracteres (string) cuyo nmero va a ser


incrementado.

Length

Integer

Largo de StringNbr. No es requerido que este valor sea


igual al largo total de StringNbr. Por ejemplo, la cadena de
caracteres puede ser de 10 bytes, pero el desarrollador en
este momento quiere usar slo 6 bytes, entonces el valor de
6 puede ser entregado.

Increment

Integer

Cantidad por la cual se incrementa StringNbr.

Ejemplo
Dim BatNbrLength

As Integer

BatNbrLength = LenB(Trim$(bGLSetup.LastBatNbr))
'Increment last batch number to the next sequential value (within the
'size of batch numbers actually being used - i.e., BatNbrLength).
Call IncrStrg(bGLSetup.LastBatNbr, BatNbrLength, 1)

Llamadas de Funciones API de Solomon

125

Declaracin IntlStrToDate
Convierte una cadena de caracteres de fecha (date string) desde el estilo de fecha corto
de Windows (Windows short date style) hacia el formato de bae de datos SQL.

Sintaxis
Call IntlStrToDate(DateStrToConvert, SQLDate)

Observaciones
IntlStrToDate puede ser usado para convertir una cadena de caracteres formateada
segn el estilo de fecha corto de Windows (Windows short date style) a un formato
adecuado para ser almacenado en un campo de fecha de la base de datos SQL.
La declaracin IntlStrToDate utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

DateStrToConvert

String

Cadena de caracteres de fecha a ser


convertida. Esta cadena de caracteres debe
estar en el formato Windows short date.

SQLDate

Tipo de dato SDate


definido por el usuario
(declarado en
Applic.DH)

Valor de fecha convertido.

Tambin Vea
Funcin DateToIntlStr, funcin DateToStr, funcin DateToStrSep, declaracin
StrToDate

126

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin IParm
Convierte un tipo integer a un parmetro de cadena de caracteres SQL.

Sintaxis
SQLParmStr = IParm(IntToConvert)

Observaciones
La funcin IParm utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

SQLParmStr

String

IntToConvert convertido a un parmetro de cadena de


caracteres SQL.

IntToConvert

Integer

Valor de tipo integer a ser convertido. Nota: INTMIN y


INTMAX son constantes globales disponibles que pueden
ser utilizados opcionalmente. Estas representan 32768 y
32767 respectivamente, los cuales son los rangos de valores
small integer mnimo y mximo.

Ejemplo
Estos ejemplos asumen que la siguiente declaracin SQL fue usada para crear un
procedimiento guardado llamado GLTran_Module_BatNbr_LineNbr.
Select * from GLTran
where Module = @parm1
and BatNbr = @parm2
and LineNbr between @parm3beg and @parm3end
order by Module, BatNbr, LineNbr;

Este extracto de cdigo muestra cmo el procedimiento anteriormente definido y


guardado puede ser usado para recuperar una sola transaccin teniendo un LineNbr de
84 en GL Batch #000123.
SqlStr = " GLTran_Module_BatNbr_LineNbr" + SParm("GL") +
SParm("000123") + IParm(84) + IParm(84)
GLTran_Fetch = SqlFetch1(CSR_GLTran, SqlStr, bGLTran, LenB(bGLTran))

Este extracto de cdigo muestra cmo el procedimiento anterior puede ser usado para
recuperar todas las transacciones en GL Batch #000123.
SqlStr = " GLTran_Module_BatNbr_LineNbr" + SParm("GL") +
SParm("000123") + IParm(INTMIN) + IParm(INTMAX)
GLTran_Fetch = SqlFetch1(CSR_GLTran, SqlStr, bGLTran, LenB(bGLTran))
While ( GLTran_Fetch = 0)
GLTran_Fetch = SFetch1( CSR_GLTran, bGLTran, LenB(bGLTran))
Wend

Tambin Vea
Funcin DParm, funcin FParm, funcin SParm

Llamadas de Funciones API de Solomon

127

Funcin Is_TI
Retorna si la aplicacin Solomon est en modo Transaction Import o no lo est.

Sintaxis
IntVar = Is_TI()

Observaciones
Esta funcin es til si usted quiere suprimir respuestas de usuario y/o dilogos cuando
la aplicacin se est ejecutando en modo Transaction Import.
La funcin Is_TI retorna lo siguiente:
True La aplicacin se est ejecutando en modo Transaction Import.
False La aplicacin no se est ejecutando en modo Transaction Import.

Ejemplo
El siguiente ejemplo determina si la aplicacin est o no en modo Transaction Import:
If Is_TI = False Then
'Perform logic or routine only desired in standard mode.
(not Transaction Import mode)
End If

Tambin Vea
Declaracin AliasConstant

128

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin Launch
Ejecuta otro programa ejecutable.

Sintaxis
RetVal = Launch (CommandLine, SAFApp, WaitFlag, WindowFlag)

Observaciones
Permite ejecutar cualquier ventana Solomon (o cualquier otra aplicacin Windows)
desde cualquier otra ventana Solomon. Usted tambin puede pasar parmetros a las
ventanas Solomon y usar la funcin ApplGetParms en la aplicacin ejecutada para
recibir los parmetros.
La funcin Launch utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1 serr12


declaradas en el mdulo VBTools_VBA estn reservados
para este uso).

CommandLine

String

La lnea de comandos requerida para ejecutar la aplicacin


(parmetros includos separados por la constante PRMSEP
declarada en el mdulo VBTools_VBA).

SAFApp

Integer

Si la aplicacin es una aplicacin Solomon o no lo es


(verdadero (True) o falso (False)).

WaitFlag

Integer

Indica si la aplicacin ejecutada es modal o no lo es. Cuando


la aplicacin ejecutada es modal, ningn otro formulario est
capacitado para ser clickeado hasta que la aplicacin no sea
cerrada. Cuando este parmetro es verdadero (True), y la
aplicacin ejecutada es otra aplicacin, entonces la
aplicacin ejecutada comparte la misma sesin SQL con la
aplicacin que la ejecut. Por lo tanto, no se usa una sesin
extra. Esto muestra el mismo comportamiento como en la
mantencin rpida de Solomon (Solomons Quick
Maintenance).

WindowFlag

Integer

Estado de la aplicacin ejecutada. El mdulo VBTools_VBA


tiene dos constantes declaradas para este propsito:
LaunchMaximize y LaunchMinimize. Un cero ejecuta la
aplicacin en su estado normal.

Llamadas de Funciones API de Solomon

129

Para ejecutar un reporte de Solomon, usted debe executar la aplicacin ROI con los
parmetros apropiados. Los parmetros disponibles que pueden ser pasados a ROI (y
su descripcin) se muestran a continuacin:
Parmetro

Descripcin

/RUN

Sigue el nmero de reporte que usted quiere ejecutar.

/WHERE

Sigue las restricciones de clusula where de SQL.

/DEBUG

Crea un archivo de texto llamado RSWRUN.? En el directorio del


programa Solomon. Este archivo TXT contiene todos los parmetros
entregados al reporte. (Slo til para propsitos de verificacin y
correccin de errores (debugging)).

/FORMAT

Sigue el nombre del formato o nmero del reporte particular.

/PSCRN

Imprime el reporte en la pantalla si es que se especifica. (Como


defecto se fija la impresora actual).

/TEMPLATE

Sigue el nombre de la plantilla de reporte (Report Template) que


usted quiere cargar para el reporte.

Ejemplo
A continuacin est el cdigo para 03.270.00 (la aplicacin ejecutada):
Sub Form1_Load
' Variable to store the passed Parameter to this screen
Dim VendorParm$
VendorParm = ApplGetParms()
If Trim$(VendorParm) <> "" Then
' Screen was called from another application.
' Set the value of the ID field to what was
' passed in by Launch() function
serr1 = SetObjectValue("cvendid", VendorParm)
End If
End Sub

Tambin Vea
Funcin ApplGetParms, funcin ApplGetParmValue, declaracin ApplSetParmValue

130

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El siguiente cdigo es para la ventana del mdulo Voucher and Adjustment Entry
(03.010.00) (la aplicacin que realiza la ejecucin). An cuando este ejemplo usa un
botn push, podra ser colocado en el evento Chk de un control particular. La sintaxis
sera muy similar excepto que chkstrg sera evaluada y pasada a la funcin Launch():
Sub VendorScrn_Click()
' Obtain the Current ID in this screen and pass
' as a parameter to other EXE
Dim CmdLine$

'Stores the command line string for Launch()

Dim VendParm$

'Stores the current ID from screen

VendParm = GetObjectValue("cvendid")
If Trim$(VendParm) <> "" Then
' Note that VendParm is passed twice with a PRMSEP between
' Also note the space following 0327000. This is also
' required.
CmdLine = "0327000 " + VendParm + PRMSEP + VendParm
' The third parm indicates Wait = True. This will allow
' the Launched application to share the same SQL session,
' therefore, an extra session is not used. This exhibits the
' same behavior from a shared session perspective as Quick
' Maintenance.
serr1 = Launch(CmdLine, True, True, 0)
End If
End Sub

Ejecutando ROI (Launching ROI)


El siguiente ejemplo imprimir el Vendor Trial Balance (03.650.00) para el vendedor
actual en la ventana Vendor Maintenance (03.270.00). Este cdigo es colocado en el
evento click de un botn push. Note que usted tiene que tener un espacio a
continuacin de ROI.EXE en el primer parmetro:
Dim VendorId$, ParmStr$
VendorId = GetObjectValue("cvendid")
ParmStr = "ROI.EXE " + PRMSEP + "03650/RUN" + PRMSEP + "03650C/FORMAT"
+ PRMSEP + "Vendor.VendId =" + sparm(VendorID) + "/WHERE"
+ PRMSEP + "/PSCRN"
serr1 = Launch(ParmStr, True, True, 0)

Llamadas de Funciones API de Solomon

Funcin MCallChks
Realiza verificacin de errores en una columna especfica de un objeto de grilla.

Sintaxis
IntVar = (gridhandle%, ctlbeg$, ctrlend$)

Observaciones
Esta funcin es til cuando usted quiere ejecutar manualmente la verificacin de
errores en una columna de un objeto de grilla, porque se ha modificado algn otro
valor del objeto. Esto le permite gatillar el evento Chk bajo control de programa.
La funcin MCallChks utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

IntVar

Integer

Cualquier variable de tipo integer (serr, serr1 serr12


declarados en el mdulo VBTools_VBA estn
reservados para este propsito).

gridhandle

Integer

Manejador del objeto de grilla.

ctlbeg

String

Nombre del objeto de control inicial para ejecutar el


evento Chk.

ctlend

String

Nombre del objeto de control final para ejecutar el


evento Chk.

Tambin Vea
Funcin CallChks, funcin GetGridHandle

131

132

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin MClear
Borra todos los registros de un arreglo de memoria designado.

Sintaxis
Call MClear(MemHandle)

Observaciones
La declaracin MClear puede ser usada para borrar el contenido de un arreglo de
memoria existente. El arreglo permanecer con su espacio asignado y puede ser usado
nuevamente.
La declaracin MClear utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

Tambin Vea
Funciones VBA_MOpen

Llamadas de Funciones API de Solomon

Declaracin MClose
Cierra un arreglo de memoria existente.

Sintaxis
Call MClose(MemHandle)

Observaciones
MClose puede usarse para cerrar un arreglo de memoria, el cual haya sido abierto
previamente mediante las funciones VBA_MOpen.
La declaracin MClose utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

133

134

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
Ilustra cmo cerrar un arreglo de memoria, el cual ya no es necesario para la
aplicacin.
Dim Mem_Account

As Integer

Dim CSR_Account

As Integer

Dim SqlStr

As String

Dim Account_Fetch

As Integer

'Open memory array to hold Chart of Accounts


Mem_Account = VBA_MOpen( TRUE, bAccount, Len(bAccount), "", 0, "", 0,
"", 0)
'Allocate cursor
Call SqlCursor( CSR_Account, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch
first record
SqlStr = "Select * from Account order by Acct"
Account_Fetch = SqlFetch1(CSR_Account, SqlStr, bAccount,
Len(bAccount))
'Read through all subsequent Account records, inserting each one into the
'memory array.
While( Account_Fetch = 0)
'Insert current Account record into the memory array
Call MInsert( Mem_Account)
'Fetch the next Account record
Account_Fetch = SFetch1(CSR_Account, bAccount,
Len(bAccount))
Wend
'Close the memory array
Call MClose( Mem_Account)

Tambin Vea
Funciones VBA_MOpen

Llamadas de Funciones API de Solomon

135

Funcin MDelete
Borra el registro actual del arreglo de memoria designado.

Sintaxis
RecFetch = MDelete(MemHandle, RecMaintFlg)

Observaciones
El registro actual de un arreglo de memoria puede ser borrado usando la funcin
MDelete. Despus de que el registro haya sido borrado, el sistema navegar en forma
automatica hacia el siguiente registro, dado que siempre debe haber un registro actual
en el arreglo de memoria, asumiendo desde luego, que exista uno o ms registros. Por
lo tanto, el valor de retorno y el correspondiente estado del registro aplican al registro
que le sigue al registro borrado.
Cuando este llamado es usado en un arreglo de memoria asociado a un control
SAFGrid, ser necesario hacer un llamado a MDisplay para sincronizar
apropiadamente la apariencia de SAFGrid con el arreglo de memoria.
La funcin MDelete utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RecFetch

Integer

Retorna 0 si el siguiente registro es capturado


satisfactoriamente.
Retorna NOTFOUND si no existe un prximo registro en
el arreglo de memoria especificado (por ejemplo cuando se
ha borrado el ltimo registro). Esto no significa que no
existan registros adicionales en el arreglo de memoria. Ms
bien, esto simplemente indica que no existen registros
detrs del registro borrado.

MemHandle

Integer

Manejador de recuros del arreglo de memoria.

RecMaintFlg

Integer

Estado del registro del arreglo de memoria (asumiendo que


fue capturado satisfactoriamente). El mdulo
VBTools_VBA contiene las siguientes constantes
simblicas definiendo posibles valores de estado de
registros de arreglos de memoria: INSERTED, UPDATED
y NOTCHANGED

Tambin Vea
Declaracin MDisplay, declaracin MInsert, declaracin MUpdate

136

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin MDisplay
Despliega el contenido actual del arreglo de memoria designado en su control
SAFGrid correspondiente.

Sintaxis
Call MDisplay(MemHandle)

Observaciones
Cada control SAFGrid est asociado con un arreglo de memoria subyacente, el cual es
abierto automaticamente. Cada vez que un dato dentro de este arreglo de memoria es
modificado directamente por la aplicacin, contrarestando lo hecho por el usuario, el
control SAFGrid tiene que ser desplegado posteriormente de nuevo.
Cuando MDisplay es llamado, el registro actual del arreglo de memoria ser
desplegado en la parte superior del control SAFGrid. De esta manera, por ejemplo, si
la aplicacin quiere desplegar al primer registro del arreglo de memoria en la parte
superior del control SAFGrid, debe llamar primero a Mfirst para moverse al primer
registro y luego llamar a MDisplay.
La declaracin MDisplay utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador de recursos del arreglo de memoria. Este arreglo


de memoria tiene que estar asociado a un control SAFGrid.

Llamadas de Funciones API de Solomon

137

Ejemplo
Sub cBegProcessing_Click ()
Dim RecFound

As Integer

Dim MemMaintFlg

As Integer

Dim Nbr_Of_Batches_Processed

As Integer

'Explicitly initialize processing counter to zero BEFORE calling


'ProcValidBatch() for the FIRST time.
Nbr_Of_Batches_Processed = 0
RecFound = MFirst(MemHandle, MemMaintFlg)
While (RecFound = 0)
If (bCurrBatchSelected = True) Then
'Process the selected batch
Call
ProcValidBatch(Nbr_Of_Batches_Processed)
'Delete current and get next memory array batch
record
RecFound = MDelete(MemHandle, MemMaintFlg)
Else
'Current batch is not selected so get the next
batch from the
'memory array.
RecFound = MNext(MemHandle, MemMaintFlg)
End If
Wend
'Redisplay the grid with the modified contents of the memory array.
RecFound = MFirst(MemHandle, MemMaintFlg)
Call MDisplay(MemHandle)
End Sub

138

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin Mess
Despliega un mensaje desde el archivo de mensajes de Solomon y espera hasta que el
usuario elija un botn.

Sintaxis
Call Mess(MsgNumber)

Observaciones
Al instalar Solomon, un archivo de texto ASCII llamado Messages.csv es copiado al
directorio de programa Solomon. Este archivo contiene todos los mensajes relativos al
producto Solomon incluyendo todas las aplicaciones desarrolladas en forma
independiente, creadas con las herramientas de Solomon para Visual Basic. Cada
mensaje tiene, entre otras cosas, un nmero de mensaje. Un mensaje particular puede
ser desplegado en la pantalla pasando su nmero de mensaje asociado a la declaracin
Mess.
La declaracin Messf debe ser usada si el texto del mensaje contiene parmetros
reemplazables.
La funcin MessResponse puede ser usada para determinar el botn que fue elegido
por el usuario para cerrar el mensaje de texto.
La declaracin estndar de mensajes de texto de Visual Basic (VB MsgBox) no debe
ser usada en aplicaciones desarrolladas con las herramientas de Solomon para Visual
Basic, a fin de evitar conflictos con otras utilidades Solomon, tales como
Cut/Copy/Paste y Transaction Import. Estas aplicaciones tienen sofisticacin
incorporada para responder a mensajes de la aplicacin subyacente, durante
operaciones particulares como paste e import. Sin embargo, esta funcionalidad
automtica no aplica a mensajes desplegados utilizando la declaracin estndar
MsgBox de Visual Basic. La declaracin MessBox ha sido suministrada para facilitar
una funcionalidad similar a la declaracin estndar MsgBox de Visual Basic, con la
excepcin de que MessBox no crea conflictos con otras utilidades Solomon.
La declaracin Mess utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MsgNumber

Integer

Nmero del mensaje del archivo de mensajes Solomon que


va a ser desplegado.

Llamadas de Funciones API de Solomon

139

Cada registro (i.e., mensaje) contenido dentro del archivo Messages.csv contiene los
siguientes campos separados por una coma:
Nombre del Campo

Comentarios

Message Number

Nmero de mensaje, el cual es requerido por la mayora de las


APIs de mensaje, tal como Mess.

Category

0 para todos los mensajes Solomon. Todas las aplicaciones


desarrolladas en foma independiente tambin tienen que usar 0.

Language

0 para ingls.

Type

Para uso futuro. Actualmente fije el campo a 0.

Box Type

Vea explicacin detallada de valores Box Type en la siguiente


tabla.

Record Type

S para mensajes creados y mantenidos por Microsoft Business


Solutions. Desarrolladores independientes no deben usar S para
sus mensajes nuevos, dado que pueden ser borrados o
modificados por Microsoft Business Solutions.

Unattended Default Button

Este valor es usado por Transaction Import para responder a


mensajes desplegados por la aplicacin subyacente durante la
operacin import.

Message Text

Texto del mensaje. Parmetros reemplazables aparecen como


%s. Por ejemplo: Mi nombre es %s y mi apellido es %s.

El campo Box Type dentro del archivo Messages.csv puede tener los siguientes
valores:
Valor de Box Type

cono

Botones

Botn por defecto

Ninguno

OK

OK

16

Pare

OK

OK

48

Exclamacin

OK

OK

64

Informacin

OK

OK

36

Pregunta

Yes / No

Yes

292

Pregunta

Yes / No

No

33

Pregunta

OK / Cancel

OK

Ejemplo
La ventana del mdulo Employee Maintenance (02.250.00) permite al usuario ingresar
el nmero de excepcin personal demandado por cualquier empleado particular en la
sub-ventana de informacin miscelnea (Miscellaneous Information subscreen). Cada
vez que este valor es modificado, al usuario se le pregunta, mediante un mensaje, si el
nuevo nmero total de excepciones personales debe ser utilizad para cada deduccin
individual para propsitos de clculo.
El mensaje nmero 739 es el mensaje desplegado, y su texto asociado es el siguiente:
Do you want to update the employees deductions with the new exemption value?
Este mensaje particular tambin despliega dos botones un botn Yes y uno No. La
funcin MessResponse es llamada posteriormente para determinar cul de estos dos
botones seleccion el usuario para cerrar la ventana de texto.

140

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


Sub cDfltPersExmpt_Chk (chkstrg As String, retval As Integer)
Dim MemArray_NbrRecs

As Integer

MemArray_NbrRecs = MRowCnt(MemArray_EmpDeduction)
'If the memory array has any records in it then prompt the user
'whether or not he/she wants to update the number of PERSONAL
'EXEMPTIONS on ALL existing employee deductions.
If (MemArray_NbrRecs > 0) Then
Call Mess( 739)
If (MessResponse() = IDYES) Then
Call MSet(F0225004.cNbrPersExmpt, chkstrg)
Call MDisplay(MemArray_EmpDeduction)
End If
End If
End Sub

El ejemplo llama a un mensaje existente en la tabla de mensajes.


The message type is an OK Button.
' Warning - Qty in warehouse location will go negative
Call mess(578)

Tambin Vea
Declaracin MessBox, declaracin Messf, funcin MessResponse

Llamadas de Funciones API de Solomon

141

Declaracin MessBox
Despliega un mensaje y espera a que el usuario elija una opcin.

Sintaxis
Call MessBox(Msg, Type, Title)

Observaciones
La declaracin estndar de mensajes de texto de Visual Basic (VB MsgBox) no debe
ser usada en aplicaciones desarrolladas con las herramientas de Solomon para Visual
Basic, a fin de evitar conflictos con otras utilidades Solomon, tales como
Cut/Copy/Paste y Transaction Import. Estas aplicaciones tienen sofisticacin
incorporada para responder a mensajes de la aplicacin subyacente, durante
operaciones particulares como paste e import. Sin embargo, esta funcionalidad
automtica no aplica a mensajes desplegados utilizando la declaracin estndar
MsgBox de Visual Basic. La declaracin MessBox ha sido suministrada para facilitar
una funcionalidad similar a la declaracin estndar MsgBox de Visual Basic, con la
excepcin de que MessBox no crea conflictos con otras utilidades Solomon.
La funcin MessResponse puede ser usada para determinar el botn que fue elegido
por el usuario para cerrar el mensaje de texto.
La declaracin MessBox utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Msg

String

Mensaje de texto a ser desplegado.

Type

Integer

Valor numrico que controla el estilo del cono, los botones


a ser desplegados y el botn por defecto.

Title

String

Texto a ser desplegado en la barra de ttulo del dilogo de


mensaje.

Ejemplo
Dim FactAmt#
FactAmt = GetObjectValue("cannmemo2")
If FactAmt <> 0 Then
Call MessBox("Display Excel During Execution?", MB_YESNO,
" Message")
End If

Tambin Vea
Declaracin Mess, declaracin Messf, funcin MessResponse

142

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin Messf
Da formato a un mensaje del arhivo de mensajes Solomon con parmetros
reemplazables, luego lo despliega y espera a que el usuario elija una opcin.

Sintaxis
Call Messf(MsgNumber, Parm1Str, Parm2Str, Parm3Str, Parm4Str, Parm5Str,
Parm6Str)

Observaciones
Al instalar Solomon, un archivo de texto ASCII llamado Messages.csv es copiado al
directorio de programa Solomon. Este archivo contiene todos los mensajes relativos al
producto Solomon incluyendo todas las aplicaciones desarrolladas en forma
independiente, creadas con las herramientas de Solomon para Visual Basic. Cada
mensaje tiene, entre otras cosas, un nmero de mensaje. El mensaje tambin puede
contener hasta seis parmetros reemplazables, colocando %s en los puntos apropiados
dentro del mensaje de texto. Un mensaje particular puede ser luego desplegado en la
pantalla pasando su nmero de mensaje asociado a la declaracin Messf junto con los
valores de datos para cada parmetro reemplazable.
La declaracin Mess debe ser usada si el texto del mensaje no contiene parmetros
reemplazables.
La funcin MessResponse puede ser usada para determinar el botn que fue elegido
por el usuario para cerrar el mensaje de texto.
La declaracin estndar de mensajes de texto de Visual Basic (VB MsgBox) no debe
ser usada en aplicaciones desarrolladas con las herramientas de Solomon para Visual
Basic, a fin de evitar conflictos con otras utilidades Solomon, tales como
Cut/Copy/Paste y Transaction Import. Estas aplicaciones tienen sofisticacin
incorporada para responder a mensajes de la aplicacin subyacente, durante
operaciones particulares como paste e import. Sin embargo, esta funcionalidad
automtica no aplica a mensajes desplegados utilizando la declaracin estndar
MsgBox de Visual Basic. La declaracin MessBox ha sido suministrada para facilitar
una funcionalidad similar a la declaracin estndar MsgBox de Visual Basic, con la
excepcin de que MessBox no crea conflictos con otras utilidades Solomon.

Llamadas de Funciones API de Solomon

143

La declaracin Messf utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

MsgNumber

Integer

Nmero del mensaje del archivo de mensajes Solomon que


va a ser desplegado.

Parm1Str

String

Valor del dato para el primer parmetro reemplazable.

Parm2Str

String

Valor del dato para el segundo parmetro reemplazable. En


blanco si el texto del mensaje contiene un solo parmetro
reemplazable.

Parm3Str

String

Valor del dato para el tercer parmetro reemplazable. En


blanco si el texto del mensaje contiene menos de tres
parmetros reemplazables.

Parm4Str

String

Valor del dato para el cuarto parmetro reemplazable. En


blanco si el texto del mensaje contiene menos de cuatro
parmetros reemplazables.

Parm5Str

String

Valor del dato para el quinto parmetro reemplazable. En


blanco si el texto del mensaje contiene menos de cinco
parmetros reemplazables.

Parm6Str

String

Valor del dato para el sexto parmetro reemplazable. En


blanco si el texto del mensaje contiene menos de seis
parmetros reemplazables.

Cada registro (i.e. mensaje) contenido dentro del archivo Messages.csv contiene los
siguientes campos separados por una coma:
Nombre del Campo

Comentarios

Message Number

Nmero de mensaje, el cual es requerido por la mayora de las


APIs de mensaje, tal como Mess.

Category

0 para todos los mensajes Solomon. Todas las aplicaciones


desarrolladas en foma independiente tambin tienen que usar 0.

Language

0 para ingls.

Type

Para uso futuro. Actualmente fije el campo a 0.

Box Type

Vea explicacin detallada de valores Box Type en la siguiente


tabla.

Record Type

S para mensajes creados y mantenidos por Microsoft Business


Solutions. Desarrolladores independientes no deben usar S para
sus mensajes nuevos, dado que pueden ser borrados o
modificados por Microsoft Business Solutions.

Unattended Default Button

Este valor es usado por Transaction Import para responder a


mensajes desplegados por la aplicacin subyacente durante la
operacin import.

Message Text

Texto del mensaje. Parmetros reemplazables aparecen como


%s. Por ejemplo: Mi nombre es %s y mi apellido es %s.

144

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El campo Box Type dentro del archivo Messages.csv puede tener los siguientes
valores:
Valor de Box Type

cono

Botones

Botn por defecto

Ninguno

OK

OK

16

Pare

OK

OK

48

Exclamacin

OK

OK

64

Informacin

OK

OK

36

Pregunta

Yes / No

Yes

292

Pregunta

Yes / No

No

33

Pregunta

OK / Cancel

OK

Ejemplo
La ventana del mdulo Manual Check Entry (02.040.00) utiliza el siguiente cdigo
para advertir al usuario del hecho de que un asunto est fuera de balance.
El mensaje nmero 818 es el mensaje desplegado y su texto asociado en el archivo de
mensajes Solomon es el siguiente:
Batch is out of balance by %s. Do you want to edit?
Este mensaje particular depliega dos botones para el mensaje un botn Yes y un
botn No. La funcin MessResponse es llamada posteriormente para determinar cul
opcin ha elegido el usuario para cerrar la ventana de este mensaje de texto.
'Make sure that the batch itself is in balance with the documents.
Batch_Out_Of_Bal_Amt = FPSub(bBatch.CtrlTot, bBatch.DrTot, MONEY)
If (Batch_Out_Of_Bal_Amt <> 0#) Then
Call Messf( 818, Str$(Batch_Out_Of_Bal_Amt), "", "", "",
"", "")
If (MessResponse() = IDYES) Then
'User decided to edit the batch - so abort the
Finish
retval = ErrNoMess
'Set focus on the Batch Control Total field
Call ApplSetFocus(cCtrlTot)
End If
End If

Tambin Vea
Declaracin Mess, declaracin MessBox, funcin MessResponse

Llamadas de Funciones API de Solomon

Funcin MessResponse
Retorna el botn elegido por el usuario para cerrar la ltima ventana de texto
desplegada mediante las declaraciones Mess, Messf o MessBox.

Sintaxis
ButtonId = MessResponse()

Observaciones
La funcin MessResponse retorna una de las siguientes constantes simblicas
declaradas en el mdulo VBTools_VBA:
Valor de Retorno

Descripcin

IDOK

Se seleccion el botn OK

IDYES

Se seleccion el botn Yes

IDNO

Se seleccion el botn No

IDCANCEL

Se seleccion el botn Cancel

IDABORT

Se seleccion el botn Abort

IDRETRY

Se seleccion el botn Retry

IDIGNORE

Se seleccion el botn Ignore

Ejemplo
Dim Response%
Dim WSheet As Object
Call MessBox("Display Excel During Execution?", MB_YESNO, " Message")
Response = MessResponse()
DoEvents
'Start Microsoft Excel and create the object.
Set WSheet = CreateObject("Excel.Sheet")
'Make Excel Visible for Demo purposes
If Response = IDYES Then
WSheet.Application.Visible = True
End If

Tambin Vea
Declaracin Mess, declaracin Messf

145

146

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin mFindControlName
Retorna una lista de nombres de controles presentes en la aplicacin actual.

Sintaxis
ControlName = mFindControlName(FirstFlag)

Observaciones
La funcin mFindControlName es usada para retornar el primer y subsiguiente nombre
de control en el orden de ndice tab (tab index order). Esta funcin es til en los casos
en que usted quiere escribir cdigo que es genrico, pero necesita basarse en
nombres de controles especficos. Al escribir cdigo genrico, en vez de cdigo
especfico para una pantalla, usted puede reutilizarlo ms seguido. Esta funcin puede
ser usada mayoritariamente en los casos en que usted quiera circular a travs de todos
los controles dentro de una pantalla, y fijar propiedades especficas basadas en ciertas
caractersticas (tales como color de fondo o textos de ayuda).
Nota: En controles agregados por el Administrador de Adaptaciones (Customization
Manager), la propiedad Tab Index es fijada en 900. Este valor puede ser modificado
opcionalmente, y pudiera ser deseable asegurar rdenes de tab esperados. Cuando, sin
embargo, hay controles insertados que tienen rdenes de ndice tab (tab index order)
idnticos, mFindControlName descubre estos controles en el orden en que fueron
creados.
La funcin The mFindControlName utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

ControlName

String

La propiedad nombre del control.

FirstFlag

Integer

1 indica que est encontrando el primer control (i.e. el


control cuya propiedad Tab Index es cero)
0 indica que est encontrando el siguiente control en el
orden de ndica Tab.

Llamadas de Funciones API de Solomon

147

Ejemplo
Este ejemplo realiza un ciclo a travs de todos los controles para determinar cual tiene
una propiedad PV. Si un control tiene una propiedad PV, su propiedad ToolTipText es
fijada para indicar que la tecla F3 est disponible.
Dim CtlName As String, SResult As String
' Find the first control on the screen
CtlName = mFindControlName(1)
While (Trim$(CtlName) <> "")
' Get the PV property to determine F3 (inquiry)
serr1 = GetProp(CtlName, "PV", SResult)
If serr1 = 0 And Trim(SResult) <> "" Then
' A PV property exists
serr1 = GetProp(CtlName, "ToolTipText", SResult)
If serr1 = 0 And Trim(SResult) = "" Then
' Set the tooltiptext property if it is not in use
SResult = "Press F3 for list of Possible Values."
Call SetProp(CtlName, "ToolTipText", SResult)
End If
End If
' Find the next control
CtlName = mFindControlName(0)
Wend

Este ejemplo realiza un ciclo a travs de todos los controles para determinar cual tiene
fijada la propiedad blankerr en True. Estos pretenden ser campos requeridos. Si un
control tiene una propiedad blankerr en True, su color de fondo es fijado azul para
proveer una indicacin visual de que es requerido:
Dim CtlName As String, SResult As String
' Find the first control on the screen
CtlName = mFindControlName(1)
While (Trim$(CtlName) <> "")
' Get the 'blankerr' property to determine required controls.
serr1 = GetProp(CtlName, "Blankerr", iresult)
If serr1 = 0 And iresult = True Then
' Blankerr property found and control is required.
serr1 = GetProp(CtlName, "BackColor", SResult)
If serr1 = 0 Then
lresult = &HFFFF80
Call SetProp(CtlName, "BackColor", SResult)
End If
End If
CtlName = mFindControlName(0) ' Find the next control
Wend

148

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin MFirst
Mueve hacia el primer registro dentro de un arreglo de memoria.

Sintaxis
RecFetch = MFirst(MemHandle, RecMaintFlg)

Observaciones
MFirst mueve hacia el primer registro de un arreglo de memoria especificado, y copia
el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MFirst utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RecFetch

Integer

0 si unregistro es capturado satisfactoriamente. Se retorna


NOTFOUND si no existen registros dentro del arreglo de
memoria especificado.

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

RecMaintFlg

Integer

Estado del registro del arreglo de memoria (asumiendo que


fue capturado satisfactoriamente). El mdulo
VBTools_VBA contiene las siguientes constantes
simblicas que definen valores de estado posibles para el
registro del arreglo de memoria: INSERTED, UPDATED y
NOTCHANGED.

Tambin Vea
Funcin MLast, funcin MNext, funcin MPrev

Llamadas de Funciones API de Solomon

149

Funcin MGetLineStatus
Retorna el estado de lnea (line status) del registro actual en el arreglo de memoria
designado.

Sintaxis
RecMaintFlg = MGetLineStatus(MemHandle)

Observaciones
La funcin MGetLineStatus permite a la aplicacin rescatar el estado del registro
actual del arreglo de memoria en cualquier momento.
La funcin MGetLineStatus utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RecMaintFlg

Integer

Estado del registro actual del arreglo de memoria. El


mdulo VBTools_VBA contiene las siguientes constantes
simblicas que definen valores de estado posibles para el
registro del arreglo de memoria: INSERTED, UPDATED y
NOTCHANGED.

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

Tambin Vea
Funcin MSetLineStatus

150

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin MGetRowNum
Retorna el nmero de fila/registro del registro actual en el arreglo de memoria
designado.

Sintaxis
CurrRecNbr = MGetRowNum(MemHandle)

Observaciones
La funcin MGetRowNum utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

CurrRecNbr

Integer

Nmero de fila/registro del registro actual

MemHandle

Integer

Manejador de recursos del arreglo de memoria

Tambin Vea
Funcin MRowCnt, declaracin MSetRowNum

Llamadas de Funciones API de Solomon

151

Declaracin MInsert
Inserta un nuevo registro a un arreglo de memoria designado.

Sintaxis
Call Minsert(MemHandle)

Observaciones
MInsert es usado para agregar un nuevo registro a un arreglo de memoria. Esto es
realizado copiando el contenido de todas las estructuras de datos previamente
asociadas con el arreglo de memoria designado a un nuevo registro de arreglo de
memoria. Las estruicturas de datos son asociadas con los arreglos de memoria en la
llamada a la funcin VBA_MOpen usada para abrir originalmente el arreglo de
memoria relevante. El nuevo registro del arreglo de memoria va a tener un estado de
lnea de INSERTED.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La declaracin MInsert utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador de recursos del arreglo de memoria

152

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
Este ejemplo ilustra como los registros pueden ser insertados a un arreglo de memoria
bajo el control del programa.
Dim Mem_Account

As Integer

Dim CSR_Account

As Integer

Dim SqlStr

As String

Dim Account_Fetch

As Integer

'Open memory array to hold Chart of Accounts


Mem_Account = VBA_MOpen( TRUE, bAccount, Len(bAccount), "", 0,
"", 0,"", 0)
'Allocate cursor
Call SqlCursor( CSR_Account, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch
first record
SqlStr = "Select * from Account order by Acct"
Account_Fetch = SqlFetch1(CSR_Account, SqlStr, bAccount,
Len(bAccount))
'Read through all subsequent Account records, inserting each one into
'the memory array.
While( Account_Fetch = 0)
'Insert current Account record into the memory array
Call MInsert( Mem_Account)
'Fetch the next Account record
Account_Fetch = SFetch1(CSR_Account, bAccount,
Len(bAccount))
Wend

Tambin Vea
Funcin MDelete, funcin MSetLineStatus, declaracin MUpdate, funciones
VBA_MOpen

Llamadas de Funciones API de Solomon

153

Declaracin MKey
Define un campo clave (key field) para un arreglo de memoria previamente abierto.

Sintaxis
Call MKey(MemHandle, KeySegmentNbr, TableDotFieldName, Ascending)

Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
La declaracin MKey es el mtodo ms simple y comn de todos para definir un
campo clave de un arreglo de memoria. MKey es muy simple, porque el sistema va a
determinar automaticamente la informacin requerida de campo clave para el
TableDotFieldName, basado en el llamado a VBA_SetAddr para la tabla relevante y
su correspondiente informacin de directorio de dato dentro de la base de datos. Las
dos restricciones para el mtodo MKey son que slo puede ser usado para campos
cuyas tablas existan en la base de datos (i.e. contrariamente a una memoria de variable
que exista slo dentro del cdigo VB) y que una llamada a VBA_SetAddr tiene que
haber sido hecha previamente para la tabla relevante.
Se pueden definir claves multi-segmentos mediante llamados secesivos a MKey con
diferentes valores de argumentos KeySegmentNbr.

154

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La declaracin MKey utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador nico a un arreglo de memoria abierto


previamente.

KeySegmentNbr

Integer

Segmento clave del arreglo de memoria cuyo campo


clave est siendo definido. El primer nmero de
segmento clave es siempre cero. Claves multisegmentos tienen que tener valores contiguos de
segmentos claves, tal como 0 y 1. El nmero mximo
permitido para segmentos claves es cinco.

TableDotFieldName

String

Nombre del campo clave designado en formato


Table.FieldName, tal como Account.Acct.

Ascending

Integer

Vardadero (True) si el segmento clave debe ser


clasificado en orden ascendente.
Falso (False) para implementar una secuencia de
clasificacin descendente para el segmento clave que
est siendo definido.

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y definir mltiples campos
clave.
Dim Mem_ValEarnDed

As Integer

Call VBA_SetAddr(NOLEVEL, "bValEarnDed", bValEarnDed,


nValEarnDed, Len(bValEarnDed))
Mem_ValEarnDed = VBA_MOpen(True, bValEarnDed, Len(bValEarnDed), "", 0,
"", 0,
"", 0)
'Set up use of MKeyFind() for memory array
Call MKey(Mem_ValEarnDed, 0, "bValEarnDed.EarnTypeId", True)
Call MKey(Mem_ValEarnDed, 1, "bValEarnDed.DedId", True)

Tambin Vea
Funcin MKeyFind, declaracin MKeyFld, declaracin MKeyOffset, declaracin
MSetRowNum, declaracin MSort, funciones VBA_MOpen

Llamadas de Funciones API de Solomon

155

Funcin MKeyFind
Encuentra un registro especfico en un arreglo de memoria clasificado, basado en
valores de campos clave designados.

Sintaxis
RecFetch = MKeyFind(MemHandle, KeySeg1Val, KeySeg2Val, KeySeg3Val,
KeySeg4Val, KeySeg5Val)

Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
Si no existe un registro cuyo campo clave corresponda exactamente al argumento
KeySeg?Val, el sistema localizar la correspondencia ms cercana. Sin embargo,
retornar un NOTFOUND a la aplicacin.
La funcin MKeyFind utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RecFetch

Integer

Retorna 0 si el registro es capturado satisfactoriamente.


Retorna NOTFOUND si no se puede encontrar una
correspondencia exacta.

MemHandle

Integer

Manejador de recuros del arreglo de memoria.

KeySeg1Val

Integer, Double
or String

Valor deseado para el primer segmento clave.

KeySeg2Val

Integer, Double
or String

Valor deseado para el segundo segmento clave. PNULL


si el arreglo de memoria slo tiene un segmento clave.

KeySeg3Val

Integer, Double
or String

Valor deseado para el tercer segmento clave. PNULL si


el arreglo de memoria tiene menos de tres segmentos
clave.

KeySeg4Val

Integer, Double
or String

Valor deseado para el cuarto segmento clave. PNULL si


el arreglo de memoria tiene menos de cuatro segmentos
clave.

KeySeg5Val

Integer, Double
or String

Valor deseado para el quinto segmento clave. PNULL si


el arreglo de memoria tiene menos de cinco segmentos
clave.

156

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y cargar el completo cuadro de
cuentas de Solomon (Solomon Chart of Accounts) hacia el arreglo creado
recientemente, y luego encuentra un registro de cuenta especfico.
Dim Mem_Account

As Integer

Dim CSR_Account

As Integer

Dim SqlStr

As String

Dim Account_Fetch

As Integer

'Open memory array to hold Chart of Accounts


Mem_Account = VBA_MOpen( TRUE, bAccount, Len(bAccount), "", 0,
"", 0, "", 0)
'Set up use of MKeyFind() for memory array
Call MKey(Mem_Account, 0, "bAccount.Acct", True)
'Allocate cursor
Call SqlCursor( CSR_Account, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch first
record
SqlStr = "Select * from Account order by Acct"
Account_Fetch = SqlFetch1(CSR_Account, SqlStr, bAccount,
Len(bAccount))
'Read through all subsequent Account records, inserting each one into
'the memory array.
While( Account_Fetch = 0)
'Insert current Account record into the memory array
Call MInsert( Mem_Account)
'Fetch the next Account record
Account_Fetch = SFetch1(CSR_Account, bAccount,
Len(bAccount))
Wend
'Find the memory array record for a specific account
Account_Fetch = MKeyFind( Mem_Account, "2020", "", "", "", "")

Tambin Vea
Declaracin MKey, declaracin MKeyFld, declaracin MKeyOffset, declaracin
MSetRow, declaracin MSetRowNum, declaracin MSort, funciones VBA_MOpen

Llamadas de Funciones API de Solomon

157

Declaracin MKeyFld
Define un campo clave para un arreglo de memoria previamente abierto.

Sintaxis
Call MKeyFld(MemHandle, KeySegmentNbr, TableDotFieldName, bTable,
Ascending)

Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
El mtodo MKeyFld es similar al mtodo MKey, excepto a que no requiere un
llamado de VBA_SetAddr para la tabla relevante.
Se pueden definir claves multi-segmentos mediante llamados secesivos a MKeyFld
con diferentes valores de argumentos KeySegmentNbr.

158

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La declaracin MKeyFld utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador nico a un arreglo de memoria abierto


previamente.

KeySegmentNbr

Integer

Segmento clave del arreglo de memoria cuyo


campo clave est siendo definido. El primer nmero
de segmento clave es siempre cero. Claves multisegmentos tienen que tener valores contiguos de
segmentos claves, tal como 0 y 1. El nmero
mximo permitido para segmentos claves es cinco.

TableDotFieldName

String

Nombre del campo clave designado en formato


Table.FieldName, tal como Account.Acct.

bTable

Tipo de dato
definido por el
usuario

Estructura de tabla de arreglo de memoria que


contiene el campo clave designado. Esta estructura
de tabla tiene que haber sido previamente pasada al
llamado VBA_MOpen.

Ascending

Integer

Vardadero (True) si el segmento clave debe ser


clasificado en orden ascendente.
Falso (False) para implementar una secuencia de
clasificacin descendente para el segmento clave
que est siendo definido.

Llamadas de Funciones API de Solomon

159

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y definir mltiples campos
claves.
Dim Mem_ValEarnDed

As Integer

Mem_ValEarnDed = VBA_MOpen(True, bValEarnDed, Len(bValEarnDed), "",


0, "", 0,"", 0)
'Set up use of MKeyFind() for memory array
Call MKeyFld(Mem_ValEarnDed, 0, "bValEarnDed.EarnTypeId",
bValEarnDed, True)
Call MKeyFld(Mem_ValEarnDed, 1, "bValEarnDed.DedId", bValEarnDed,
True)

Tambin Vea
Declaracin MKey, funcin MKeyFind, declaracin MKeyOffset, declaracin
MSetRowNum, declaracin MSort, funciones VBA_MOpen

160

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin MKeyOffset
Define un campo clave para un arreglo de memoria abierto previamente.

Sintaxis
Call MKeyOffset(MemHandle, KeySegmentNbr, bTable, KeyFldByteOffset,
KeyFldDataType, KeyFldDataLength, Ascending)

Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
El mtodo MKeyOffset es el mtodo ms flexible para definir campos claves de
arreglos de memoria, pero tambin es el ms detallado y minucioso para codificar. Est
diseado para facilitar la definicin de un campo clave que no existe en la base de
datos, y por lo tanto no tiene informacin de dato de diccionario correlacionada. Esta
situacin puede ocurrir si uno de los tipos definidos por usuario en un arreglo de
memoria es slo declarado en VB y no existe en la base de datos. En este caso, el
sistema no tiene modo de determinar el offset del byte desde el comienzo de la
estructura para cada campo particular, ni el tipo de dato del campo, ni el largo del
campo. La declaracin MKeyOffset permite al desarrollador pasar toda esta
informacin detallada relacionada al campo clave designado en forma explcita, dado
que no existe en el directorio de datos SQL.
Se pueden definir claves multi-segmentos mediante llamados secesivos a MKeyOffset
con diferentes valores de argumentos KeySegmentNbr.

Llamadas de Funciones API de Solomon

161

La declaracin MKeyOffset utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador nico a un arreglo de memoria abierto


previamente.

KeySegmentNbr

Integer

Segmento clave del arreglo de memoria cuyo


campo clave est siendo definido. El primer nmero
de segmento clave es siempre cero. Claves multisegmentos tienen que tener valores contiguos de
segmentos claves, tal como 0 y 1. El nmero
mximo permitido para segmentos claves es cinco.

bTable

Tipo de dato
definido por el
usuario

Estructura de tabla de arreglo de memoria que


contiene el campo clave designado. Esta estructura
de tabla tiene que haber sido previamente pasada al
llamado VBA_MOpen.

KeyFldByteOffset

Integer

Este argumento est diseado para ayudar al


sistema localizar el primer byte del campo clave
designado. El sistema conocer la localizacin de
memoria del primer byte de la totalidad de los tipos
de datos definidos por el usuario mediante el
argumento bTable. El offset del byte da a conocer al
sistema cun lejos el primer byte del campo clave
designado se encuentra del primer byte de la
totalidad de los tipos de datos definidos por el
usuario. Si el campo clave designado se encuentra
en el primer campo en el tipo de dato definido por
el usuario, entonces debiera pasarse un valor cero.

KeyFldDataType

Integer

Especifica el tipo de dato del campo clave


designado. Las siguientes constantes de tipo de dato
estn declaradas en el mdulo VBTools_VBA:
String
Float
Integer
Date
Time

KeyFldDataLength

Integer

Largo del campo clave designado. Por ejemplo,


LenB(bTable.KeyFld). Nota: en Solomon, es crtico
usar LenB() en vez de Len() para todo parmetro
table length no-nulo.

Ascending

Integer

Vardadero (True) si el segmento clave debe ser


clasificado en orden ascendente.
Falso (False) para implementar una secuencia de
clasificacin descendente para el segmento clave
que est siendo definido.

162

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
El siguiente ejemplo ilustra un arreglo de memoria que contiene slo campos
seleccionados de la tabla Employee, el cual nunca ha sido clasificado por ID de
Employee. Con solo guardar campos seleccionados Employee en el arreglo de
memoria, se consumir mucho menos memoria para cada registro dentro del arreglo de
memoria.
Dado que no todos los campos de la tabla de la base de datos Employee estn
contenidos dentro del tipo de datos definido por el usuario Employee_SelFld, la
informacin de directorio de datos en la base de datos SQL correspondiente a la tabla
estndar Employee, no es usable por el sistema para propsitos de determinar la
informacin del campo clave requerido. Como consecuencia, MKeyOffset tiene que
ser usado para implementar la clasificacin en el campo clave Employee.
Este es cdigo para declarar tipos de dato definidos por el usuario que contengan slo
campos seleccionados desde la tabla Employee. Note que el campo Name est siendo
declarado deliberadamente antes del campo EmpId, de modo de ilustrar adicionalmente
la completa flexibilidad de MKeyOffset.
Type Employee_SelFld
Name

As String * 30

EmpId

As String * 10

End Type
Global bEmployee_SelFld

As Employee_SelFld

Este es cdigo para abrir el arreglo de memoria para el tipo de dato definido por el
usuario Bemployee_SelFld, y que define Employee ID como campo clave.
Dim Mem_Employee_SelFld

As Integer

Mem_Employee_SelFld = VBA_MOpen( TRUE, bEmployee_SelFld,


Len(bEmployee_SelFld), PNULL, 0, PNULL, 0, PNULL, 0)
Call MKeyOffset(Mem_Employee_SelFld, 0, bEmployee_SelFld, 30,
DATA_TYPE_STRING, LenB(bEmployee_SelFld.EmpId), True)

Llamadas de Funciones API de Solomon

163

Este es cdigo que carga un arreglo de memoria con campos relevantes seleccionados
para todo empleado dentro de la base de datos. Note que el orden de los campos en la
declaracin Select SQL, corresponde al orden de los campos de tipos de dato definidos
por el usuario Employee_SelFld.
Dim CSR_Employee_SelFld

As Integer

Dim SqlStr

As String

Dim Employee_SelFld_Fetch

As Integer

'Allocate a cursor
Call SqlCursor(CSR_Employee_SelFld, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch
'the first record
SqlStr = "Select Name, EmpId from Employee Order By EmpId"
Employee_SelFld_Fetch = SqlFetch1(CSR_Employee_SelFld, SqlStr,
bEmployee_SelFld, LenB(bEmployee_SelFld))
'Read through all subsequent Employee records, inserting each one into
'the memory array.
While(Employee_SelFld_Fetch = 0)
'Insert current Employee record into the memory array
Call MInsert( Mem_Employee_SelFld)
'Fetch the next Employee record
Employee_SelFld_Fetch = SFetch1(CSR_Employee_SelFld,
bEmployee_SelFld, LenB(bEmployee_SelFld))
Wend

Tambin Vea
Declaracin MKey, funcin MKeyFind, declaracin MKeyFld, declaracin
MSetRowNum, declaracin MSort, funciones VBA_MOpen

164

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin MLast
Se mueve hacia el ltimo registro en un arreglo de memoria designado.

Sintaxis
RecFetch = MLast(MemHandle, RecMaintFlg)

Observaciones
MLast mueve hacia el ltimo registro de un arreglo de memoria especificado, y copia
el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MLast utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RecFetch

Integer

0 si unregistro es capturado satisfactoriamente. Se retorna


NOTFOUND si no existen registros dentro del arreglo de
memoria especificado.

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

RecMaintFlg

Integer

Estado del registro del arreglo de memoria (asumiendo que


fue capturado satisfactoriamente). El mdulo
VBTools_VBA contiene las siguientes constantes
simblicas que definen valores de estado posibles para el
registro del arreglo de memoria: INSERTED, UPDATED y
NOTCHANGED.

Tambin Vea
Funcin MFirst, funcin MNext, funcin MPrev

Llamadas de Funciones API de Solomon

165

Declaracin MLoad
Carga un arreglo de memoria con todos los registros retornados desde la base de datos
mediante una declaracin SQL.

Sintaxis
Call MLoad(MemHandle, Cursor)

Observaciones
Existen dos caminos para cargar datos directamente desde una base de datos a un
arreglo de memoria. El mtodo ms obvio es insertando registro a registro dentro del
arreglo de memoria hasta que no hayan ms registros en la base de datos. Un mtodo
ms simple es cargar el arreglo entero mediante un nico llamado a la declaracin
MLoad. El nico requerimiento es que el cursor pasado como parmetro a la
declaracin MLoad tiene que haber estado inicializado mediante una declaracin SQL
Select o un procedimiento guardado, para que est listo para retornar datos. Se puede
inicializar el cursor pasando la declaracin SQL Select o el procedimiento guardado,
junto con cualquier otro parmetro necesario.
La declaracin MLoad utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

Cursor

Integer

Cursor de la base de datos SQL. Este cursor tiene que haber


sido inicializado mediante una declaracin SQL Select o un
procedimiento guardado.

Ejemplo
El siguiente ejemplo ilustra un arreglo de memoria que contiene slo campos
seleccionados de la tabla Employee, el cual nunca ha sido clasificado por ID de
Employee. Con solo guardar campos seleccionados Employee en el arreglo de
memoria, se consumir mucho menos memoria para cada registro dentro del arreglo de
memoria.
Dado que no todos los campos de la tabla de la base de datos Employee estn
contenidos dentro del tipo de datos definido por el usuario Employee_SelFld, la
informacin de directorio de datos en la base de datos SQL correspondiente a la tabla
estndar Employee, no es usable por el sistema para propsitos de determinar la
informacin del campo clave requerido. Como consecuencia, MKeyOffset tiene que
ser usado para implementar la clasificacin en el campo clave Employee.
Este es cdigo para declarar tipos de dato definidos por el usuario que contengan slo
campos seleccionados desde la tabla Employee. Note que el campo Name est siendo
declarado deliberadamente antes del campo EmpId, de modo de ilustrar adicionalmente
la completa flexibilidad de MKeyOffset.
Type Employee_SelFld
Name
EmpId
End Type

As String * 30
As String * 10

166

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Global bEmployee_SelFld

As Employee_SelFld

Code to open a memory array for the bEmployee_SelFld user-defined datatype and
define Employee ID as the key field.
Dim Mem_Employee_SelFld

As Integer

Mem_Employee_SelFld = VBA_MOpen( TRUE,


bEmployee_SelFld,Len(bEmployee_SelFld), "", 0, "", 0, "", 0)
Call MKeyOffset(Mem_Employee_SelFld, 0, bEmployee_SelFld, 30,
DATA_TYPE_STRING, Len(bEmployee_SelFld.EmpId), True)

Code to load the memory array with relevant selected fields for all employees in the
database. Notice that the order of the fields in the SQL Select statement correspond to
the order of the fields in the Employee_SelFld user-defined datatype.
Dim CSR_Employee_SelFld

As Integer

Dim SqlStr

As String

Dim Employee_SelFld_Fetch

As Integer

'Allocate a cursor
Call SqlCursor(CSR_Employee_SelFld, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch
'the first record
SqlStr = "Select Name, EmpId from Employee Order By EmpId"
Employee_SelFld_Fetch = SqlFetch1(CSR_Employee_SelFld, SqlStr,
bEmployee_SelFld, Len(bEmployee_SelFld))
'Read through all subsequent Employee records, inserting each one into
the
'memory array.
While(Employee_SelFld_Fetch = 0)
'Insert current Employee record into the memory array
Call MInsert( Mem_Employee_SelFld)
'Fetch the next Employee record
Employee_SelFld_Fetch = SFetch1(CSR_Employee_SelFld,
bEmployee_SelFld, Len(bEmployee_SelFld))
Wend

Tambin Vea
Declaracin Sql

Llamadas de Funciones API de Solomon

167

Funcin MNext
Se mueve hacia el siguiente registro en el arreglo de memoria designado.

Sintaxis
RecFetch = MNext(MemHandle, RecMaintFlg)

Observaciones
MNext mueve hacia el prximo registro de un arreglo de memoria especificado, y
copia el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MNext utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RecFetch

Integer

0 si unregistro es capturado satisfactoriamente. Se retorna


NOTFOUND si no existen registros dentro del arreglo de
memoria especificado.

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

RecMaintFlg

Integer

Estado del registro del arreglo de memoria (asumiendo que


fue capturado satisfactoriamente). El mdulo
VBTools_VBA contiene las siguientes constantes
simblicas que definen valores de estado posibles para el
registro del arreglo de memoria: INSERTED, UPDATED y
NOTCHANGED.

Tambin Vea
Funcin MFirst, funcin MLast, funcin MPrev

168

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin MPrev
Se mueve hacia el registro anterior en el arreglo de memoria designado.

Sintaxis
RecFetch = MPrev(MemHandle, RecMaintFlg)

Observaciones
MPrev mueve hacia el registro anterior de un arreglo de memoria especificado, y copia
el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MPrev utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RecFetch

Integer

0 si unregistro es capturado satisfactoriamente. Se retorna


NOTFOUND si no existen registros dentro del arreglo de
memoria especificado.

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

RecMaintFlg

Integer

Estado del registro del arreglo de memoria (asumiendo que


fue capturado satisfactoriamente). El mdulo
VBTools_VBA contiene las siguientes constantes
simblicas que definen valores de estado posibles para el
registro del arreglo de memoria: INSERTED, UPDATED y
NOTCHANGED.

Tambin Vea
Funcin MFirst, funcin MLast, funcin MNext

Llamadas de Funciones API de Solomon

169

Funcin MRowCnt
Retorna el nmero de registro en un arreglo de memoria designado.

Sintaxis
NumRecs = MRowCnt( MemHandle)

Observaciones
La funcin MRowCnt utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

NumRecs

Integer

Nmero de registros del arreglo de memoria designado.

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

Ejemplo
Global ArrayHandle%, Rows%
ArrayHandle = GetGridHandle("Spread1")
Rows = MRowCnt(ArrayHandle)

Tambin Vea
Funciones VBA_MOpen

170

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin MSet
Fija explcitamente el valor de un control particular para cada registro en su control
SAFGrid correspondiente.

Sintaxis
Call MSet(Control, NewDataValue)

Observaciones
La declaracin MSet utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Control

String

Control que est ligado al Record.FieldName cuyo valor


ser cambiado para cada registro en el SAFGrid
relevante. Note: esta declaracin es solamente para uso
con controles asociados con un control SAFGrid.

NewDataValue

String

Nuevo valor de dato para el Record.FieldName asociado


con el control designado. El valor del dato tiene que estar
en formato de cadena de caracteres.

Tambin Vea
Declaracin MSetProp

Llamadas de Funciones API de Solomon

171

Funcin MSetLineStatus
Fija el estado de lnea del registro actual en el arreglo de memoria designado.

Sintaxis
RetVal = MSetLineStatus(MemHandle, NewLineStatus)

Observaciones
Cada registro dentro de un arreglo de memoria tiene su propio estado de lnea (line
status), tal como INSERTED, UPDATED o NOTCHANGED. El sistema modifica
automaticamente el estado de lnea, basado en el tipo de la ltima actividad realizada
en cualquier registro particular de un arreglo de memoria. Por ejemplo, si un registro es
insertado en un arreglo de memoria utilizando MInsert, entonces el estado de este
nuevo registro del arreglo de memoria ser fijado automaticamente a INSERTED. Sin
embargo, ocasionalmente, la aplicacin puede necesitar asignar un estado de lnea
especfico a un registro particular de un arreglo de memoria. En estos casos, la funcin
MSetLineStatus puede usarse para llevar a cabo esta tarea.
Un uso comn de esta funcin es cuando un arreglo de memoria asociado a un control
SAFGrid es cargado de la base de datos bajo control de la aplicacin. En este caso los
registros son insertados al arreglo de memoria mediante llamadas sucesivas a MInsert.
Sin embargo, ya que los datos no son modificados en el lapso de tiempo entre que son
capturados y son insertados en el arreglo de memoria, el estado de lnea del registro del
arreglo de memoria resultante es forzado a cambiar de INSERTED a NOTCHANGED.
La funcin MSetLineStatus utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

-1 si se entrega un manejador de arreglo de memoria


(memory array handle) invlido.

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

RecMaintFlg

Integer

Nuevo estado del registro del arreglo de memoria actual.


El mdulo VBTools_VBA contiene las siguientes
constantes simblicas que definen posibles valores de
estado para los registros del arreglos de memoria:
INSERTED, UPDATED y NOTCHANGED.

172

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
Este ejemplo ilustra como cargar un arreglo de memoria desde una base de datos y al
mismo tiempo fuerza el estado de lnea de todos los registros de arreglos de memoria
insertados recientemente a NOTCHANGED.
Dim Mem_Account

As Integer

Dim CSR_Account

As Integer

Dim SqlStr

As String

Dim Account_Fetch

As Integer

Dim Retval

As Integer

'Open memory array to hold Chart of Accounts


Mem_Account = VBA_MOpen( TRUE, bAccount, Len(bAccount), "", 0,
"",
0,"", 0)
'Allocate cursor
Call SqlCursor( CSR_Account, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch first
record
SqlStr = "Select * from Account order by Acct"
Account_Fetch = SqlFetch1(CSR_Account, SqlStr, bAccount,
Len(bAccount))
'Read through all subsequent Account records, inserting each one into
'the memory array.
While( Account_Fetch = 0)
'Insert current Account record into the memory array
Call MInsert( Mem_Account)
'Since the record ALREADY exists in the database, reset
the line
'status of the current memory array record so that the
application
'will be able to detect whether or not any calls to
MUpdate were
'subsequently made for the current record.
Retval = MSetLineStatus(Mem_Account, NOTCHANGED)
'Fetch the next Account record
Account_Fetch = SFetch1(CSR_Account, bAccount,
Len(bAccount))
Wend

Tambin Vea
Funcin MGetLineStatus, declaracin MInsert, declaracin MUpdate

Llamadas de Funciones API de Solomon

173

Declaracin MSetProp
Fija el valor de una propiedad particular para el control de vista de formulario (formview control) designada, como tambin para su control SAFGrid asociado.

Sintaxis
Call MSetProp(Control, PropertyName, NewPropValue)

Observaciones
En tiempo de ejecucin, cada columna de un control SAFGrid est asociada con un
control adaptado de las herramientas Solomon para Visual Basic (i.e. vista de
formulario) subyacente. La declaracin MSetProp puede ser usada para modificar el
valor de una propiedad tanto para el control subyacente, como para la columna
relevante en la grilla asociada. Por ejemplo, una columna completa puede ser
deshabilitada utilizando la declaracin MSetProp.
Si la aplicacin quiere modificar valores de propiedades lnea por lnea, en vez de
afectar la columna completa, entonces necesitar manejar los valores de propiedades
usando llamados a la declaracin SetProp desde el evento LineGotFocus de cada
lnea de detalle individual.
La declaracin MSetProp utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Control

String

Control cuyo valor de propiedad designado ser


modificado tanto de la vista de grilla como de la vista de
formulario.

PropertyName

String

Nombre de la propiedad cuyo valor ser modificado.

NewPropValue

String or
Integer

Nuevo valor de la propiedad. El tipo de dato vara segn


la propiedad.

Ejemplo
'Disable the ExtRefNbr Column
Call MsetProp("cextrefnbr", PROP_ENABLED, False)
'Enable the ExtRefNbr Column
Call MsetProp("cextrefnbr", PROP_ENABLED, True)

Tambin Vea
Propiedad BlankErr, propiedad Enabled, propiedad Heading, propiedad Mask,
propiedad Min, propiedad Max, propiedad SetProp, propiedad Visible

174

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin MSetRowNum
Fija el nmero de fila/registro actual de un arreglo de memoria designado.

Sintaxis
Call MSetRowNum( MemHandle, NewCurrRecNbr)

Observaciones
Una aplicacin puede saltar a un registro de arreglo de memoria especfico mediante la
funcin MKeyFind o la declaracin MSetRowNum. MSetRowNum salta a un nmero
de registro especfico, mientras que MKeyFind localiza al registro mediante valores de
campos claves designados.
La declaracin MSetRowNum utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador de recusros del arreglo de memoria

NewCurrRecNbr

Integer

Nmero de fila/registro del registro de arreglo de


memoria deseado.

Tambin Vea
Funcin MGetRowNum, funcin MKeyFind

Llamadas de Funciones API de Solomon

175

Declaracin MSort
Clasifica datos contenidos dentro de un arreglo de memoria existente, basado en
campos claves predefinidos.

Sintaxis
Call MSort( MemHandle)

Observaciones
Esta declaracin clasificar todos los registros existentes dentro de un arreglo de
memoria designado, basado en campos claves definidos previamente mediante las
declaraciones MKey, MKeyFld, MkeyOffset, o MSetRowNum.
Si los datos dentro del arreglo de memoria son cargados inicialmente y mantenidos en
el orden apropiado, un llamado a MSort no ser necesario. MSort slo necesita ser
llamado si uno o ms registros dentro del arreglo de memoria no estn en un orden
consistente con los campos claves definidos previamente. Cuandos los datos estn
fuera de orden, MKeyFind no funcionar apropiadamente, dado que asume que los
datos dentro del arreglo de memoria son consistentes con la secuencia de clasificacin
predefinida.
Despus del llamado a MSort, los arreglos de memoria asociados a un control SAFGrif
requieren un llamado a MDisplay para re-desplegar la grilla.

Tambin Vea
Declaracin MKey, funcin MKeyFind, funcin MKeyOffset, declaracin
MSetRowNum, funciones VBA_MOpen

176

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin MUpdate
Actualiza el registro de arreglo de memoria actual de un arreglo de memoria designado
con un nuevo valor de dato.

Sintaxis
Call MUpdate(MemHandle)

Observaciones
MUpdate es utilizado para actualizar un registro existente de un arreglo de memoria
especfico. Esto es realizado copiando el nuevo contenido de todas las estructuras de
datos asociadas previamente con el arreglo de memoria designado sobre el registro del
arreglo de memoria existente. Las estructuras de datos son asociadas a un arreglo de
memoria en el llamado a la funcin VBA_MOpen, usada para abrir originalmente el
arreglo de memoria relevante. Si el registro del arreglo de memoria tiene un estado de
lnea INSERTED antes del llamado a MUpdate, entonces el estado de lnea
permanecer INSERTED. En todos los otros casos, el registro del arreglo de memoria
tendr un estado de lnea de UPDATED.
La declaracin MUpdate utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador de recursos del arreglo de memoria.

Tambin Vea
Funcin MDelete, declaracin MInsert, funcin MSetLineStatus, funciones
VBA_MOpen

Llamadas de Funciones API de Solomon

177

Funcin NameAltDisplay
Despliega un campo de cadena de caracteres con caracteres de intercambio suprimidos.

Sintaxis
StrVar = NameAltDisplay ( FieldName)

Observaciones
Para acomodar la clasificacin alternada por nombre, Solomon almacena la mayora de
los campos de address y name basado en la posicin de @ dentro del nombre.
Por ejemplo, para que The Jones Company sea clasificado con Js, este nombre debe
ser introducido como The @Jones Company. Solomon luego almecena esta entrada
como Jones Company~The. Si usted desea recuparar y/o manipular este campo
posteriormente en cdigo VBA, esta funcin modifica el nombre y elimina el ~ y el @.
En este ejemplo, Jones Company~The, como guardado en la base de datos, es
desplegado como The Jones Company.
La funcin NameAltDisplay utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

StrVar

String

Cualquier variable de tipo de cadena de caracteres en donde


almacenar la versin intercambio (swapped version) del
campo.

FieldName

String

Nombre de campo u objeto.

Ejemplo
Dim SwapName$, OrigName$
OrigName = GetObjectValue("cname")
Call MessBox(OrigName, MB_OK, "Orig Name")
SwapName = NameAltDisplay(OrigName)
Call MessBox(SwapName, MB_OK, "Swap Name")

Tambin Vea
Funcin GetObjectValue, funcin SetObjectValue

178

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin PasteTemplate
Pega informacin de la plantilla designada dentro de la aplicacin actual.

Sintaxis
RetVal = PasteTemplate(TemplateID)

Observaciones
La caracterstica de plantillas Solomon hace posible guardar datos de la pantalla actual
y pegar estos datos subsecuentemente dentro de esa misma pantalla ms tarde. Las
plantillas pueden ser guardadas a la base de datos mediante la declaracin
SaveTemplate, como tambin mediante el item de men Template en el men Edit.
Una vez que una plantilla haya sido creada, puede ser pegada a su aplicacin fuente
bajo el control de programa usando la funcin PasteTemplate, como tambin
mediente el item de men Template del men Edit.
La funcin PasteTemplate utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Cero si no ocurren errores. Si el TemplateID no existe,


retorna la constante simblica NOTFOUND, declarada en
el mdulo VBTools_VBA.

TemplateID

String

Identificacin de la plantilla, cuya informacin va a ser


pegada dentro de la pantalla de aplicacin actual.

Tambin Vea
Declaracin SaveTemplate

Llamadas de Funciones API de Solomon

179

Funcin PeriodCheck
Verifica si una cadena de caracteres peridica en el formato YYYYPP representa un
perodo fiscal vlido o no.

Sintaxis
RetVal = PeriodCheck(PeriodString)

Observaciones
La funcin PeriodCheck utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Valor de la parte peridica de PeriodString, si la cadena de


caracteres representa un perodo fiscal vlido. De otro
modo, el valor -1 ser retornado, si la cadena de caracteres
es invlida. Una cadena de caracteres peridica es invlida
si la parte peridica es menor a uno o mayor al nmero de
perodos fiscales vlidos definidos en el registro GLSetup.

PeriodString

String

Cadena de caracteres peridica a ser verificada. Debe estar


en el formato YYYYPP.

Ejemplo
'Example placed in Chk event of a String user field
'The mask property on this field is Custom mask Type, 99-9999
Dim Year$, Period$
Year = Right$(chkstrg, 4)
Period = Left$(chkstrg, 2)
serr = PeriodCheck(Year + Period)

180

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin PeriodMinusPeriod
Retorna el nmero de perodos entre dos perdos fiscales.

Sintaxis
NbrPeriods = PeriodMinusPeriod(PerNbr1, PerNbr2)

Observaciones
La funcin PeriodMinusPeriod utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

NbrPeriods

Integer

Nmero de perodos entre PerNbr1 y PerNbr2. Si


PerNbr1>PerNbr2, entonces el valor de perdos fiscales
entre los dos perodos ser un valor negativo.

PerNbr1

String

Perodo fiscal inicial. Debe estar en formato YYYYPP.

PerNbr2

String

Perodo fiscal final. Debe estar en formato YYYYPP.

Nota: Esta funcin usar el nmero de perodos en un ao fiscal, tal como se especifica
en el registro GLSetup, a fin de obtener un resultado exacto.

Ejemplo
Dim Period1$, Period2$
Dim NumPers%
Period1 = GetObjectValue("cperpost")
Period2 = "199312"
NumPers = PeriodMinusPeriod(Period1, Period2)
If NumPers < 0 Then
Call MessBox("Cannot post back further than 12-93", MB_OK,
"Solomon Message")
End If

Tambin Vea
Funcin PeriodPlusPerNum

Llamadas de Funciones API de Solomon

181

Funcin PeriodPlusPerNum
Agrega un nmero designado de perodos a un perodod fiscal existente.

Sintaxis
ResultingPerNbr = PeriodPlusPerNum(CurrPerNbr, NbrPeriodsToAdd)

Observaciones
La funcin PeriodPlusPerNum utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

ResultingPerNbr

String

Resultado de CurrPerNbr + NbrPeriodsToAdd.

CurrPerNbr

String

Perodo fiscal inicial. Debe estar en formato


YYYYPP.

NbrPeriodsToAdd

Integer

Nmero de perodos fiscales a sumar a CurrPerNbr.


Valores negativos son soportados.

Nota: Esta funcin usar el nmero de perodos en un ao fiscal, tal como se especifica
en el registro GLSetup, a fin de obtener un resultado exacto.

Ejemplo
'Increment PerPost to the next fiscal period
Dim NewPeriod$, PeriodToPost$, NumberOfPeriods%
NumberOfPeriods = 1
PeriodToPost = GetObjectValue("cperpost")
NewPeriod = PeriodPlusPerNum(PeriodToPost, NumberOfPeriods)

Tambin Vea
Funcin PeriodMinusPeriod

182

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funciones PVChkFetch
Recupera un registro compuesto desde la base de datos, usando una declaracin SQL
de la propiedad PV de un control SAFMaskedText.

Sintaxis
RetVal = PVChkFetch1(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length)
RetVal = PVChkFetch4(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = PVChkFetch8(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)

Observaciones
Cada control SAFMaskedText tiene una propiedad PV, la cual puede contener una
declaracin SQL o un nombre de procedimiento guardado. Estas funciones pueden ser
usadas para capturar una instancia de registro compuesto, basado en el texto SQL de la
propiedad PV del control especificado en el parmetro Ctrl. Estas funciones no son
aplicables si la propiedad PV no contiene una declaracin SQL o un nombre de
procedimiento guardado.
PVChkFetch1 est diseado para declaraciones SQL que retornen datos de una nica
tabla. Para declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se
puede utilizar PVChkFetch4 o PVChkFetch8.
La funcin PVChkFetch1 utiliza los siguientes argumentos (PVChkFetch4 y
PVChkFetch8 tienen cuatro y ocho estructuras de tablas respectivamente, y largos
correspondientes. PNULL debe usarse para parmetros de estructura de tablas no
usados, como tambin un largo correspondiente de cero, tal como PNULL, 0).

Llamadas de Funciones API de Solomon

Argumento

Tipo

Descripcin

RetVal

Integer

0 si el registro es capturado
satisfactoriamente. Se retorna NOTFOUND si
ningn registro concuerda con la clusula de
restriccin de PV de la declaracin SQL.

Ctrl

Control

Control que contiene la propiedad PV a ser


usada como la declaracin SQL. Puede ser
opcionalmente PNULL si la llamada es
realizada dentro del evento Chk del control
cuya propiedad PV est siendo usada.

Cursor

Integer

Cursor de la base de datos SQL.

SQLParmValue

String

Valor clave pasado como el ltimo parmetro


a la clusula de restriccin de PV de la
declaracin SQL.

bTable1

Tipo de dato
definido por el
usuario

Estructura de tabla correspondiente a la tabla


primaria de PV de la declaracin SQL.

bTable1Length

Integer

Largo de la primera estructura de tabla. Por


ejemplo, LenB(bTable1). Nota: Es crtico usar
LenB() en vez de Len() para todo parmetro
table length no nulo.

183

Ejemplo
El siguiente ejemplo ilustra el uso de PVChkFetch1 en el evento Chk de un control de
Payroll Work Location ID. Dado que PNULL es pasado para el parmetro de control,
la declaracin SQL en la propiedad PV del control cWrkLocId se usa a s misma. El ID
ingresado por el usuario es pasado al evento Chk como chkstrg. Al enviar este valor a
PVChkFetch1, ser usado como el ltimo parmetro de la clusula de restriccin de
PV de la declaracin SQL.
Sub cWrkLocId_Chk (chkstrg As String, retval As Integer)
Dim WorkLocation_Fetch

As Integer

WorkLocation_Fetch = PVChkFetch1(PNULL, CSR_WorkLocation, chkstrg,


bWorkLoc, LenB(bWorkLoc))
RetVal = NoAction
End Sub

Tambin Vea
Funciones DBNavFetch

184

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin SaveTemplate
Salva o guarda informacin de la aplicacin actual a una plantilla designada.

Sintaxis
Call SaveTemplate(TemplateID, Description, AppliesToUserID, IncludeLowerLevels,
StartingLevelNbr)

Observaciones
La caracterstica de plantillas Solomon hace posible guardar datos de la pantalla actual
y pegar estos datos subsecuentemente dentro de esa misma pantalla ms tarde. Las
plantillas pueden ser guardadas a la base de datos mediante la declaracin
SaveTemplate, como tambin mediante el item de men Template en el men Edit.
Cada plantilla puede contener transacciones completas y entidades o campos
individuales seleccionados por el usuario. Caractersticas de das relativos o peridicos
permiten a una plantilla pegar datos relativos a la fecha actual y el perodo fiscal. Las
plantillas pueden ser diseadas como privadas a un usuario especfico o pblicos para
todo usuario. Las plantillas son guardadas en la base de datos del sistema, y por ello
son independientes de cualquier base de datos de una aplicacin particular.
A menos que se especifique lo contrario, todos los valores de fecha y valores
peridicos pegados desde una plantilla sern iguales a la fecha comercial Solomon
(Solomon business date), localizada en el men File, y el perodo actual para el
mdulo. Para sobreescribir esta accin por defecto, el dato que est ingresando el
usuario para la plantilla, debe especificar una nueva fecha relativa o valor peridico
para cada campo deseado. Esto es hecho justo antes de salvar una plantilla. El
especificar una fecha relativa o un valor peridico para un campo contenido en lneas
de detalle de una grilla cambiar el valor de la plantilla para ese campo para todas las
lneas de detalle. Valores relativos pueden ser defenidos seleccionando la fecha
pertinente o campo peridico y presienando F2 para iniciar la ventana de fecha relativa
(Relative Date) o la ventana de perodo relativo (Relative Period) la que sea
apropiada.

Llamadas de Funciones API de Solomon

185

La declaracin SaveTemplate utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

TemplateID

String

Identificacin (ID) de la plantilla que est siendo


creada o actualizada. Si ya existiera una plantilla
con el TemplateID designado, ser sobreescrita. El
TemplateID puede tener hasta 30 caracteres.

Description

String

Descripcin de la plantilla.

AppliesToUserID

String

Identificacin de usuario Solomon para quien aplica


la plantilla. Por defecto, la plantilla ser pblica
(Public) si AppliesToUserID es dejado en blanco.

IncludeLowerLevels

Integer

Falso si solamente se guardan datos de


StartingLevelNbr dentro de la plantilla. En caso
contrario, tambin se guardarn datos para niveles
ms bajos en la plantilla.

StartingLevelNbr

Integer

Nmero del primer nivel de aplicacin para el cual


los datos sern guardados dentro de la plantilla. Por
ejemplo, en las pantallas Batch/Document/Detail, el
valor cero podra ser entregado para comenzar a
guardar desde el nivel Batch. El mdulo
VBTools_VBA contiene dos constantes simblicas
que pueden ser usadas:
CcpSelectedFields slo los campos destacados
actualmente por el usuario sern guardados dentro
de la plantilla.
CcpAllLevels Datos de todos los niveles de
aplicacin sern guardados dentro de la plantilla, sin
importar el valor del argumento
IncludeLowerLevels.

Tambin Vea
Funcin PasteTemplate

186

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin SDelete
Borra el registro actual desde una tabla designada dentro de una vista SQL existente.

Sintaxis
Call SDelete(Cursor, TablesDeletingFrom)

Observaciones
Un valor de *.* puede ser entregado como nombre de tabla, indicando que todos los
registros actuales en la vista existente sern borrados. Por favor, note que este llamado
requiere que el registro actual ya haya sido capturado mediante las funciones
SqlFetch1 o SFetch1, de tal manera que el cursor designado tenga un registro actual.
La declaracin SDelete utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Cursor

Integer

Cursor de la base de datos SQL.

TablesDeletingFrom

String

Nombre de cada tabla, en la vista de cursor


especificada, desde la cual el registro actual ser
borrado. Mltiples nombres de tablas son separados
mediante comas.

Ejemplo
'Example is deleting in Solomon's OnDelete event
'Note that the following fetch been has issued in
'a preceding event prior to the delete call
serr1 = SqlFetch1(c1, "XCustInfo_All" +
sparm(chkstrg), bXCustAddlInfo, Len(bXCustAddlInfo))
Sub Delete(level%, retval%)
If Level = 0 Then
serr1 = sdelete(c1, "XCustAddlInfo")
End If
End Sub

Tambin Vea
Funciones SFetch, funciones SqlFetch

Llamadas de Funciones API de Solomon

187

Funcin SDeleteAll
Borra todos los registros de la(s) tabla(s) designada(s) dentro de una vista predefinida.

Sintaxis
RetVal = SDeleteAll(Cursor, TablesDeletingFrom)

Observaciones
Borra los registros de algunas o todas las tablas dentro de una vista basado en
restricciones. Una vista debe haber sida inicializada previamente para el cursor
especfico, mediante las funciones Sql, SFetch1 o SqlFetch4. Si no se especifican
restricciones al inicializar el cursor, entonces este llamado borrar todos los registros
de la(s) tabla(s) designada(s) dentro de la vista.
La funcin SDeleteAll utiliza los siguientes argumentos:
Argument

Type

RetVal

Integer

Description

Cursor

Integer

Cursor de la base de datos SQL.

TablesDeletingFrom

String

Nombre de cada tabla, en la vista de cursor


especificada, desde la cual todos los registros dentro
de la vista actual sern borrados. Mltiples nombres
de tablas son separados mediante comas. El valor
*.* puede ser usado para borrar registros de todas
las tablas dentro de la vista.

Ejemplo
Borra todos los vendedores que tengan cero en su balance.
Dim SqlStr

As String

'Initialize the cursor with a SQL statement


SqlStr = "Select * from Vendor where CurrBal = 0 and FutureBal = 0"
Call Sql(CSR_Vendor_Del, SqlStr)
'Delete all records matching the restriction clause of the SQL statement
'used to initialize the CSR_Vendor_Del cursor.
Call SDeleteAll(CSR_Vendor_Del, "*.*")

Tambin Vea
Funciones SFetch, declaracin Sql, funciones SqlFetch

188

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin SetBufferValue
Fija un campo de buffer de datos de una aplicacin Solomon subyacente a un valor
especificado.

Sintaxis
Call SetBufferValue(bTable.FieldName, Str)

Observaciones
Si una aplicacin VBA realiza su propia llamada VBA_SetAddr, puede entonces
referenciar cualquiera de estas estructuras desde dentro del cdigo. Sin embargo, si las
estructuras de la aplicacin Solomon subyacente necesitan ser referenciados y estos
compos no estn representados como objetos en el formulario, esta declaracin permite
a la aplicacin VBA obtener estos valores. Si los campos fueran objetos en el
formulario, la aplicacin VBA puede simplemente realizar un SetObjectValue.
Est alerta, que el uso de este llamado en ciertos momentos podra comprometer la
funcionalidad de la aplicacin Solomon subyacente, especialmente si se modifica un
campo condicional. De la misma forma, la aplicacin subyacente podra modificar el
valor, si usted lo ha fijado demasiado pronto.
La declaracin SetBufferValue utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

bTable.FieldName

String

SQL Table.FieldName que usted quiere fijar.

Str

String

Cadena de caracteres o variable de cadena de


caracteres que contiene el valor al cual se
modificar bTable.FieldName.

Ejemplo
Call SetBufferValue("bGLTran.RefNbr","000099")

Tambin Vea
Declaracin GetBufferValue

Llamadas de Funciones API de Solomon

189

Declaracin SetDefaults
Fija uno o ms controles a su valor por defecto usando la propiedad Default o el cdigo
del evento Default.

Sintaxis
RetVal = SetDefaults (FormObjectName, FieldObjectName)

Observaciones
Cada objeto de dato tiene una propiedad Default y un evento Default. Cada objeto de
dato particular puede usar uno de estos dos mtodos para definir un dato por defecto a
s mismo. El sistema usa estos mtodos cada vez un objeto de dato particular es
inicializado a su valor por defecto. Una discusin exhaustiva de todas las veces que
esto ocurre est bajo la declaracin SetDefaults. Sin embargo, una vez que esto ocurre,
es cuando la aplicacin explcitamente le indica al sistema hacer esto mediante la
declaracin SetDefaults referenciando el objeto relevante.
La declaracin SetDefaults puede usarse para defenir por defecto todos los objetos de
un sub-formulario. La declaracin Level_SetDefaults es funcionalmente equivalente,
excepto a que puede ser usada para fijar por defecto todos los objetos que tengan un
nmero de nivel particular.
Dado que SetDefaults implica un cambio en el valor del dato del objeto designado, el
sistema marca el objeto como requerido para validacin de errores. Sin embargo, el
sistema no realiza la validacin de errores inmediatamente (por ejemplo, no ejecuta el
evento Chk inmediatamente). Sin embargo, se garantiza que la validacin de errores
ocurra antes de cualquier actualizacin de la base de datos.
Note que si la aplicacin necesita eliminar (null-out) un campo particular, quiz porque
el campo ya no sea aplicable, debe hacerlo explcitamente dentro del programa y luego
redesplegar el objeto relevante mediante la declaracin DispField. Despus de que el
objeto haya sido redesplegado, puede ser deshabilitado mediante la declaracin
SetProp. La declaracin SetDefaults no debe ser usada en estos casos, an cuando el
control relevante no tenga un valor en la propiedad Default y no tenga cdigo en el
evento Default. Un desarrollador podra extraarse del por qu de esta precausin,
dado que el campo est eliminado cuando no exista propiedad Default y no exista
cdigo de evento Default, y por ello, la aplicacin trabaje correctamente durante las
pruebas. El siguiente cdigo ilustra conceptualmente como eliminar y deshabilitar un
control que ya no es aplicable:
Record.Field = NULL (0 for numeric datatypes , "" for string datatype)
Call DispFields("Form1", "cField")
Call SetProp ("cField", PROP_ENABLED, False)

190

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La funcin SetDefaults utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

RetVal

Integer

Cualquier variable de tipo integer (serr, serr1


serr12 declarados en el mdulo VBTools_VBA
estn reservados para este uso).

FormObjectName

String

Nombre de formulario. Puede ser para inclur


todos los formularios de la aplicacin.

FieldObjectName

String

Nombre de campo. Puede ser para inclur todos


los objetos en un formulario especfico.

Ejemplo
Este ejemplo captura desde una tabla adaptada, evala el valor de retorno y establece
un formulario adaptado para entradas o ediciones.
serr1 = sqlfetch1(c1, "XCustAddlInfo_CustId" +
sparm(chkstrg), bXCustAddlInfo, Len(bXCustAddlInfo))
If serr1 = NOTFOUND Then
serr1 = SetDefaults("NewInfo", "")
bXCustAddlInfo.CustId = chkstrg
Found_Cust = "N"
Else
Found_Cust = "Y"
End If
Call DispFields("NewInfo","")

Tambin Vea
Declaracin DispField, declaracin SetProp

Llamadas de Funciones API de Solomon

191

Declaracin SetLevelChg Statement


Fija el estado actual de un nivel especfico.

Sintaxis
Call SetLevelChg(LevelNbr, Status)

Observaciones
Cada nivel de actualizacin, tal como se define en la propiedad Levels del control
SAFUpdate, tiene una bandera de estado de nivel correspondiente, la cual es
mantenida en forma automtica por el sistema. El propsito de la bandera de estado de
nivel es facilitar la optimizacin de actualizaciones de bases de datos realizados como
respuesta a los botones de la barra de herramientas Parent. En general, estas banderas
permiten al sistema realizar solamente actualizaciones de bases de datos para niveles
de actualizacin que hayan sido modificados. Si ninguna informacin ha cambiado,
entonces ninguna informacin necesita ser guardada.
Como se mecion anteriormente, estas banderas de actualizacin son mantenidas en
forma automtica por el sistema. Cuando un registro existente es cargado, la bandera es
fijada a NOTCHANGED. Si cualquier campo no clave es modificado
subsecuentemente, entonces la bandera de estado de nivel para el nivel correspondiente
es fijada a UPDATED. Cuando un nuevo registro es ingresado, la bandera de estado de
nivel es fijada a INSERTED.
La declaracin SetLevelChg permite a la aplicacin sobreescribir el valor actual de la
bandera de estado para un nivel particular. Esto puede ser til si un valor de dato es
modificado en el programa, y por ello el sistema necesita ser notificado que algo ha
cambiado, para que de esta forma la informacin correspondiente sea guardada cuando
el usuario oprima el botn Save en la barra de herramientas.
La declaracin SetLevelChg utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

LevelNbr

Integer

Nivel cuya bandera de estado ser fijada explcitamente.

Status

Integer

Estado de la bandera del nivel. Los siguientes valores


vlidos son definidos como constantes simblicas en el
mdulo VBTools_VBA:
INSERTED, UPDATED, NOTCHANGED.

192

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
La ventana Earnings Type Maintenance (02.270.00) del mdulo Payroll contiene un
botn que llena la grilla en forma automtica con todas las deducciones (Deductions).
Esto equivale a insertar registros dentro de la grilla (i.e. dentro del arreglo de memoria
subyacente) bajo el control de programa. Dado que los datos no son ingresados
mediante la interfaz de usuario, el sistema necesita ser notificado que informacin a
nivel de grilla (i.e. LEVEL1 en este caso) ha sido actualizada mediante el programa, y
por ello necesita ser guardada. Sin embargo, esta notificacin slo es necesaria si el
sistema no es conciente de que estos datos hayan sido modificados.
'If any records were inserted into the memory array then we need to make
'sure that the level status for the detail level is something other than
'NOTCHANGED so the system will know that something needs to be saved.
If (AnyRecsInserted = True) Then
If (TestLevelChg(LEVEL1) = NOTCHANGED) Then
Call SetLevelChg(LEVEL1, UPDATED)
End If
End If

Tambin Vea
Funcin TestLevelChg

Llamadas de Funciones API de Solomon

193

Funcin SetObjectValue
Fija el valor de campo de un objeto especfico.

Sintaxis
IntVar = SetObjectValue( ObjectName, Value)

Observaciones
Esta funcin le permite fijar el valor de cualquier objeto ligado en la pantalla. El objeto
debe estar en el formulario para poder ser fijado. Si usted desea fijar un valor de un
campo que no est en el formulario, puede usar la declaracin SetBufferValue.
El evento Chk del objeto que usted fija tambin se ejecuta, de modo de realizar la
validacin de errores.
La funcin SetObjectValue utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

IntVal

Integer

Cualquier variable de tipo integer (serr, serr1


serr12 declarados en el mdulo VBTools_VBA
estn reservados para este uso).

ObjectName

String

Nombre del objeto cuyo valor va a ser fijado.

Value

String

Valor que ser fijado a ObjectName.

Ejemplo
Dim CommissionAmount As Double
Dim ExtendedAmount As Double
ExtendedAmount = Val (chkstrg$)
If ExtendedAmount <= 1000 Then
CommissionAmount = 1
ElseIf ExtendedAmount <= 2000 then
CommissionAmount = 2
ElseIf ExtendedAmount <= 3000 then
CommissionAmount = 3
Else
CommissionAmount = 4
End If
serr1 = SetObjectValue ("ccmmnpct", Str$(CommissionAmount))

Tambin Vea
Funcin GetObjectValue, declaracin SetBufferValue

194

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin SetProp
Fija las propiedades de objetos en tiempo de ejecucin.

Sintaxis
Call SetProp (ObjectName, PropertyName, PropertyValue)

Observaciones
Permite a la aplicacin fijar valores de propiedades en tiempo de ejecucin. Esta
funcin no debiera ser usada para fijar valores por defecto de las propiedades.
La declaracin SetProp utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

ObjectName

String

Nombre del objeto cuya propiedad quiere modificarse.

PropertyName

String

Propiedad que usted quiere modificar.

PropertyValue

Integer

Valor que debe adquirir la propiedad.

Los siguientes valores vlidos para el argumento PropertyName se definen como


constantes simblicas en el mdulo VBTools_VBA:
Constante Simblica

Tipo de Dato Vlido

Valores de Dato Vlidos

PROP_BLANKERR (requerida)

Integer

TRUE / FALSE

PROP_CAPTION

String

PROP_CUSTLIST

String

PROP_ENABLED

Integer

PROP_HEADING

String

PROP_MASK

String

PROP_MIN

String

PROP_MAX

String

PROP_TABSTOP

Integer

TRUE / FALSE

PROP_VISIBLE

Integer

TRUE / FALSE

TRUE / FALSE

Llamadas de Funciones API de Solomon

195

Ejemplo
'Enable push button
Call SetProp("OpenButton", PROP_ENABLED, True)
'Disable push button
Call SetProp("OpenButton", PROP_ENABLED, False)
'Make an object invisible
Call SetProp("cname", PROP_VISIBLE, False)
'Example uses a password dialog for setting a field invisible at runtime
Dim PassWord$
PassWord = PasswordBox$("Enter the Password Override","Message")
' Get password (case sensitive)
If Trim$(PassWord) = "SYSADMIN" Then
MsgBox(PassWord)
Call SetProp("clastchkdate", PROP_VISIBLE, True)
End If

Tambin Vea
Declaracin MSetProp, funcin SetDefaults

196

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin SetStatusBarText
Desplega texto en la barra de estado (Status Bar) de la aplicacin.

Sintaxis
Call SetStatusBarText (StatusBarText, ToolTip)

Observaciones
Esta funcin permite fijar texto en la barra de herramientas. El primer parmetro
contiene el texto a ser desplegado en la barra de herramientas, el segundo parmetro
contiene el texto a ser desplegado en el cuadro de ayuda al lado izquierdo de la barra
de herramientas. Si se entrega una cadena de caracteres vaca () para el segundo
parmetro, el texto del primer parmetro ser usado para el cuadro de ayuda.

Ejemplo
Este ejemplo despliega la descripcin de cuenta en la barra de estado de la aplicacin
en Journal Entry (01.010).
Sub cacct_Chk(chkstrg$, retval%)
Dim SqlStr as String
Dim xDescr as String
Dim xRetVal as Integer
' Get Account information.
SqlStr = "Select * from account where acct = " & chkstrg
xRetVal = SqlFetch1(xCursor, SqlStr, bAccount, Len(bAccount))
Call SetStatusBarText( bAccount.Descr, "")
End Sub

Llamadas de Funciones API de Solomon

197

Funciones SFetch
Se utiliza para capturar un registro compuesto de la base de datos, basado en alguna
declaracin SQL predefinida o procedimiento guardado.

Sintaxis
RetVal = SFetch1(Cursor, bTable1, bTable1Length)
RetVal = SFetch4(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = SFetch8(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length, bTable5, bTable5Length, bTable6,
bTable6Length, bTable7, bTable7Length, bTable8, bTable8Length)

Observaciones
Para capturar informacin desde el servidor, se debe saber cual tabla, registros y
campos son requeridos por un cursor particular. Consecuentemente, el cursor debe ser
inicializado primero, ya sea con una declaracin SQL o un procedimiento guardado,
mediante la declaracin Sql o las funciones SqlFetch1, SqlFetch4 o SqlFetch8. Una
vez que la vista de la base de datos haya sido establecida, estas funciones van a rescatar
el siguiente registro secuencialmente, consistente con la clusula Order By de la
declaracin SQL usada para inicializar la vista. Despus de que el ltimo registro de la
vista haya sido retornado, todas las siguientes llamadas a SFetch1, SFetch4 y SFetch8
retornarn NOTFOUND.
SFetch1 est diseado para declaraciones SQL que retornen datos de una nica tabla.
Para declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se
puede utilizar SFetch4 o SFetch8.
La funcin SFetch1 utiliza los siguientes argumentos (SFetch4 y SFetch8 tienen
cuatro y ocho estructuras de tablas respectivamente, y largos correspondientes. PNULL
debe usarse para parmetros de estructura de tablas no usados, como tambin un largo
correspondiente de cero, tal como PNULL, 0).

198

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Argumento

Tipo

Descripcin

RetVal

Integer

0 si el registro es capturado
satisfactoriamente. Se retorna NOTFOUND si
no existe ningn otro registro adicional en la
vista actual.

Cursor

Integer

Cursor de la base de datos SQL.

bTable1

Tipo de dato
definido por el
usuario

Estructura de tabla correspondiente a la tabla


primaria de la declaracin SQL.

bTable1Length

Integer

Largo de la primera estructura de tabla. Por


ejemplo, LenB(bTable1). Nota: Es crtico usar
LenB() en vez de Len() para todo parmetro
table length no nulo.

Nota: SGroupFetch1, SGroupFetch4 o SGroupFetch8 debe ser usado si la


declaracin SQL usada para inicializar el cursor contiene uno o ms de los siguientes
componentes:
Funciones de aglomeracin grupal (Group aggregate functions), tales como Count
y Sum
Palabra clave DISTINCT
Clusula GROUP BY
Clusula HAVING
Subqueries

Ejemplo
Este ejemplo establece una conexin entre la tabla de inventario y la pantalla existente
para visualizacin y navegacin unicamente.
(general) declarations:
'$include: "inventor.dh"
Form1_Load
Call VBA_SetAddr(c1, "bInventory", bInventory, Len(bInventory))
Call SqlCursor(c1, NOLEVEL)
Dim SqlStmt$
SqlStmt = "Select * from Inventory Where ClassID = 'BOX'Order By ClassID"
Call Sql(c1, SqlStmt)
serr1 = Sfetch1(c1, bInventory, Len(bInventory))
While serr1 <> NOTFOUND
'Check LastCost
If bInventory.LastCost > 0 Then
'Last Cost is positive
End If

Llamadas de Funciones API de Solomon


serr1 = Sfetch1(c1, bInventory, Len(bInventory))
Wend

Tambin Vea
Declaracin Sql, funciones SqlFetch

199

200

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funciones SGroupFetch
Se utiliza para capturar un registro compuesto de la base de datos, basado en alguna
declaracin SQL predefinida o procedimiento guardado que contenga una o ms
funciones agregadas grupales (group aggregate functions) y/o clusulas.

Sintaxis
RetVal = SGroupFetch1(Cursor, bTable1, bTable1Length)
RetVal = SGroupFetch4(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = SGroupFetch8(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length, bTable5, bTable5Length, bTable6,
bTable6Length, bTable7, bTable7Length, bTable8, bTable8Length)

Observaciones
Para capturar informacin desde el servidor, se debe saber cual tabla, registros y
campos son requeridos por un cursor particular. Consecuentemente, el cursor debe ser
inicializado primero, ya sea con una declaracin SQL o un procedimiento guardado,
mediante la declaracin Sql. SGroupFetch1, SGroupFetch4 o SGroupFetch8 estn
diseadas solamente para los casos en que la declaracin SQL usada para inicializar el
cursor contenga uno o ms de lo siguiente:
Funciones de aglomeracin grupal (Group aggregate functions), tales como Count
y Sum
Palabra clave DISTINCT
Clusula GROUP BY
Clusula HAVING
Subqueries
El equivalente lgico de las funciones SFetch1, SFetch4 y SFetch8 debe ser usado si
la declaracin SQL no contiene ninguno de los items indicados arriba. Una vez que la
vista de la base de datos haya sido establecida, estas funciones van a rescatar el
siguiente registro secuencialmente, consistente con la clusula Order By de la
declaracin SQL usada para inicializar la vista. Despus de que el ltimo registro de la
vista haya sido retornado, todas las siguientes llamadas a SGroupFetch1,
SGroupFetch4 y SGroupFetch8 retornarn NOTFOUND.
SGroupFetch1 est diseado para declaraciones SQL que retornen datos de una nica
tabla. Para declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se
puede utilizar SGroupFetch4 o SGroupFetch8.
La funcin SGroupFetch1 utiliza los siguientes argumentos (SGroupFetch4 y
SGroupFetch8 tienen cuatro y ocho estructuras de tablas respectivamente, y largos
correspondientes. PNULL debe usarse para parmetros de estructura de tablas no
usados, como tambin un largo correspondiente de cero, tal como PNULL, 0).

Llamadas de Funciones API de Solomon

201

Argumento

Tipo

Descripcin

RetVal

Integer

0 si el registro es capturado satisfactoriamente. Se


retorna NOTFOUND si no existe ningn otro registro
adicional en la vista actual.

Cursor

Integer

Cursor de la base de datos SQL.

bTable1

Tipo de dato
definido por el
usuario

Estructura de tabla correspondiente a la tabla primaria o


el valor de dato en la declaracin SQL.

bTable1Length

Integer

Largo de la primera estructura de tabla o valor de dato.


Por ejemplo, LenB(bTable1) o Len(DoubleVariable).
Nota: En Solomon es crtico usar LenB() en vez de Len()
para todo parmetro table length no nulo.

Nota: el tipo y largo de los datos retornados pueden variar cuando la declaracin SQL
contiene una o ms aglomeraciones grupales. Para la aglomeracin grupal COUNT, los
datos sern retornados siempre como integer de 4 bytes (i.e. tipo de dato Long VB).
Las aglomeraciones grupales MIN y MAX retornan siempre el mismo tipo de dato y
largo como el campo en el cual se basa. Las aglomeraciones grupales SUM y AVG
siempre retornan valores de punto flotante de 8 bytes (i.e. tipo de dato Double VB).

202

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
El ejemplo recupera la ltima fecha de comprobante (voucher date) para el vendedor
actual y selecciona una cuenta de todos los documentos anteriores a la ltima fecha de
comprobante.
Dim SqlStr$
Dim CountDoc As Long
Dim DateComp As Sdate
DateComp.Val = GetObjectValue("clastvodate")
SqlStr = "Select Count(*) from APDoc Where DocDate < " + Dparm(DateComp)
Call Sql(c1, SqlStr)
serr1 = sgroupfetch1(c1, CountDoc, Len(CountDoc))
Print "Number of Documents: " + str$(CountDoc)
Second Example
Dim QtyOnHand#, TotCost#, SqlStmt$, ItemID$, MessStr$
SqlStmt = "Select Sum(QtyOnHand), Sum(TotCost) from ItemSite Where
ItemSite.InvtId = @parm1 Order By ItemSite.InvtId"
ItemId = GetObjectValue("cinvtid")
Call Sql(c1, SqlStmt)
Call SqlSubst(c1, "parm1", ItemID)
Call SqlExec(c1)
serr1 = sgroupfetch4(c1, QtyOnHand, Len(QtyOnHand), TotCost,
Len(TotCost), "", 0, "", 0)
MessStr = "Qty On Hand " + Str$(QtyOnHand) + "Total Cost "+ Str$(TotCost)
Call MessBox( MessStr, MB_OK, "Message")

Tambin Vea
Funciones SFetch, declaracin Sql

Llamadas de Funciones API de Solomon

203

Declaracin SInsert
Inserta un registro dentro de cada tabla especificada dentro de una vista de base de
datos existente.

Sintaxis
Call SInsert1(Cursor, TablesInsertingInto, bTable1, bTable1Length)
Call SInsert4(Cursor, TablesInsertingInto, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
Call SInsert8(Cursor, TablesInsertingInto, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)

Observaciones
Nuevos registros pueden ser inserados mediante el programa directamente a una table
de base de datos mediante el uso de las declaraciones SInsert1, SInsert4 y SInsert8.
Para insertar informacin a la base de datos, el servidor debe saber primero que tablas
estn siendo referenciadas con un cursor particular. Consecuentemente, el cursor debe
ser inicializado primero mediante una declaracin SQL o un procedimiento guardado,
mediante el uso de la declaracin Sql o las funciones SqlFetch1, SqlFetch4 o
SqlFetch8. Una vez que la vista de la base de datos haya sido establecida, estas
funciones van a insertar un nuevo registro dentro de cada tabla referenciada en el
argumento TablesInsertingInto, usando datos de argumentos de estructura de tablas
correspondientes.
SInsert1 est diseada para declaraciones SQL que referencian una tabla nica. En
este caso, TablesInsertingInto es siempre el nombre de la tabla nica referenciada. Para
declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se puede
utilizar SInsert4 o SInsert8. El referenciar ms de una tabla no fuerza
automaticamente la insercin de un registro dentro de cada tabla de la vista cada vez
que se usa SInsert4 o SInsert8 en el cursor correspondiente. Un registro nico slo
ser insertado a cada tabla explicitamente especificado en el argumento
TablesInsertingInto, siempre que cada nombre de tabla especificado sea tambin
referenciado en la declaracin SQL, la cual fue usada para inicializar la vista actual.
As, por ejemplo, si TableA y TableB son las nicas dos tablas referenciadas en la
declaracin SQL usada para inicializar la vista actual, entonces un valor de TableXYZ
ser invlido para el argumento TablesInsertingInto.

204

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


La declaracin SInsert utiliza los siguientes argumentos (SInsert4 y SInsert8 tienen
cuatro y ocho estructuras de tablas respectivamente, y largos correspondientes. PNULL
debe usarse para parmetros de estructura de tablas no usados, como tambin un largo
correspondiente de cero, tal como PNULL, 0).
Argumento

Tipo

Descripcin

Cursor

Integer

Cursor de la base de datos SQL.

TablesInsertingInto

String

Nombre de cada tabla, en la vista especificada por


el cursor, en la cual se insertar un nuevo registro.
Mltiples nombres de tablas deben separarse
mediante comas.

bTable1

Tipo de dato
definido por el
usuario.

Estructura de tabla correspondiente a la tabla inicial


de la declaracin SQL. Los datos en esta estructura
sern insertados en su tabla de base de datos
correspondiente si el nombre de la tabla de base de
datos indicada est especificada explicitamente en
el argumento TablesInsertingInto.

bTable1Length

Integer

Largo de la primera estructura de tabla Por ejemplo,


LenB(bTable1). Nota: en Solomon es crtico usar
LenB() en vez de Len() para todo parmetro table
length no nulo.

Ejemplo
Ejemplo adjunto al evento OnUpdate de la pantalla de Solomon:
If Level = 0 Then
If Found_Cust = "Y" then
Call supdate1(c1, "XCustAddlInfo",
bXCustAddlInfo,Len(bXCustAddlInfo))
Else
Call sinsert1(c1,"XCustAddlInfo",
bXCustAddlInfo,Len(bXCustAddlInfo))
End If
End If
Example 2
Insert new entry into Customer and ARHist tables
Call Sinsert4(c1, "*.*", bCustomer, Len(bCustomer),
bARHist, Len(bARHist), "", 0, "", 0)

Tambin Vea
Declaracin Sql, funciones SqlFetch

Llamadas de Funciones API de Solomon

205

Funcin SParm
Convierte una cadena de caracteres a un parmetro de cadena de caraceteres SQL.

Sintaxis
SQLParmStr = SParm(StrToConvert)

Observaciones
La funcin SParm utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

SQLParmStr

String

StrToConvert

String

StrToConvert convertido a un parmetro de cadena de


caracteres SQL.
Valor de cadena de caracteres a ser convertido.

Ejemplo
Este ejemplo asume que la siguiente declaracin SQL fue usada para crear un
procedimiento guardado llamado Employee_EmpId.
Select * from Employee where EmpId LIKE @parm1 order by EmpId

Este extracto de cdigo ilustra cmo usar el procedimiento guardado Employee_EmpId


para capturar el registro employee para el employee #000581.
SqlStr = "Employee_EmpId" + SParm("000581")
Employee_Fetch = SqlFetch1(CSR_Employee, SqlStr, bEmployee,
LenB(bEmployee))

Este extracto de cdigo ilustra cmo usar el procedimiento guardado Employee_EmpId


para capturar todos los registros employee, usando un valor comodn para el parmetro
EmpId.
SqlStr = "Employee_EmpId" + SParm(SQLWILDSTRING)
Employee_Fetch = SqlFetch1(CSR_Employee, SqlStr, bEmployee,
LenB(bEmployee))
While ( Employee_Fetch = 0)
Employee_Fetch = SFetch1( CSR_Employee, bEmployee, LenB(bEmployee))
Wend

Este extracto de cdigo ilustra cmo usar el procedimiento guardado Employee_EmpId


para capturar todos los registros employee que comiencen y terminen con cero, usando
una combinacin de cadena de caracteres literales y caracteres comodn para el
parmetro EmpId.
SQLParmStr = "0" + SQLWILDCHAR + SQLWILDCHAR + SQLWILDCHAR +
SQLWILDCHAR + "0"
SqlStr = "Employee_EmpId" + SParm(SQLParmStr)
Employee_Fetch = SqlFetch1(CSR_Employee, SqlStr,
bEmployee, LenB(bEmployee))
While ( Employee_Fetch = 0)
Employee_Fetch = SFetch1( CSR_Employee, bEmployee, LenB(bEmployee))
Wend

Tambin Vea
Funcin DParm, funcin FParm, funcin IParm

206

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin Sql
Inicializa una nueva vista de base de datos.

Sintaxis
Call Sql(Cursor, SqlStr)

Observaciones
Toma el texto SQL especificado, lo compila y luego lo ejecuta. Si se requieren
operaciones de captura, entonces de debe llamar a una funcin SFetch. Si la
declaracin SQL est realizando una operacin Update Set, Delete From o Insert Into,
no se requieren operqaciones de captura subsecuentes. Si la declaracin SQL est
referenciando uno o ms parmetros, entonces las funciones SqlSubst y SqlExec
tambin deben ser llamadas.
La declaracin Sql utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Cursor

Integer

Cursor de la base de datos SQL.

SqlStr

String

Declaracin SQL o procedimiento guardado a ser usado


para inicializar una nueva vista de base de datos. Si se usa
un procedimiento guardado, entonces todos los parmetros
deben ser anexados secuencialmente, en orden de
ocurrencia de la declaracin Create Procedure original
usando llamadas a SqlSubst.

Ejemplo
Dim SqlStr

As String

'Set AP Documents which are marked as current to non-current


SqlStr = "Update APDoc Set Current = 'False' where APDoc.DocBal = 0
and PerEnt <=" + sparm(NextPerNbr) + " and Current =
'True'"
Call Sql(C_APClose, Trim$(SqlStr))
'Process posted AP batches
SqlStrg = "Select * from Batch Where Module = 'AP' and Status = 'P'
Order By BatNbr"
Call Sql(CSR_Batch, SqlStrg)
serr1 = SFetch1(c1, bBatch, LenB(bBatch))
While serr1 = 0
'Process the batch
....
'Get the next batch
serr1 = SFetch1(CSR_Batch, bBatch, LenB(bBatch))
Wend

Tambin Vea
Funciones SFetch, declaracin SqlExec, declaracin SqlSubst

Llamadas de Funciones API de Solomon

207

Declaracin SqlCursor
Destina un nuevo cursor de base de datos.

Sintaxis
Call SqlCursor(Cursor, Flags)

Observaciones
Toda comunicacin de lectrura/escritura entre una aplicacin y la base de datos debe
ocurrir a travs de un cursor de base de datos. Un cursor es basicamente un recurso de
la base de datos usado para rastrear informacin de bajo nivel requerida para
implementar las operaciones de lectura/escritura de la base de datos SQL. Por ejemplo,
un cursor rastrea la declaracin SQL usada para inicializar la vista actual, cuales
campos individuales fueron seleccionados, el registro actual dentro de la vista, como
tambin informacin ms detallada.
Cada nivel dentro de la pantalla debe tener un cursor correspondiente ubicado dentro
del evento Form_Load de Form1, para facilitar las actividades de lectura/escritura de la
base de datos en ese nivel. Adicionalmente, muchos de los llamados API SQL dentro
de las herramientas de Solomon para Visual Basic, tales como Sql, SFetch1,
SqlFetch1 y SUpdate1 requieren un cursor de base de datos como uno de sus
argumentos.
Cada aplicacin puede tener un mximo de 36 cursores. Los cursores que ya no se
estn utilizando por la aplicacin pueden ser liberados opcionalmente mediante la
declaracin SqlFree. Todos los cursores son liberados en forma automtica por el
sistema cuando la aplicacin termina de ejecutarse (i.e. cuando se llama ScreenExit).
La declaracin SqlCursor utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Cursor

Integer

Variable a ser inicializada mediante un manejador de


recursos para un cursor de base de datos SQL.

Flags

Integer

Una o ms banderas especiales que indican qu y/o cmo


se usar el cursor. Como mnimo el parmetro Flags debe
contener una de las constantes simblicas LEVEL0 a
LEVEL9 o NOLEVEL, definidas en el mdulo
VBTools_VBA. Cursores que no estn asociados
explicitamente a un nmero de nivel deben ser asignados
usando la bandera NOLEVEL.

208

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Las siguientes constantes simblicas pueden ser colocadas como Flags (al agregarlas a
las constantes simblicas requeridas LEVEL0 a LEVEL9 o NOLEVEL):
SqlList Operaciones de lectura/escritura realizadas en el cursor sern guardadas
automaticamente para mejorar el rendimiento. Si una aplicacin actualiza an un
registro en un cursor almacenado, debe actualizar todas las lecturas de registro con
ese cursor dentro de la misma transaccin de base de datos. Si el cumplimiento de
este requerimiento falla, resultar un error de sparse update.
SqlSystemDb Todas las operaciones de la base de datos sern conducidas en la
base de datos del sistema, en vez de ser conducidas en la base de datos de la
aplicacin.

Ejemplo
'Example declares a dynamic cursor in Form1_Load
'because it will be used elsewhere in the application
'NoLevel indicates no updating on this cursor,
'only lookups will be performed
Call SqlCursor(c1, NoLevel)
'NoLevel + SQLList indicates a buffered cursor
Call SqlCursor(c2, NoLevel + SqlList)
'Example declares a static cursor in Chk event. Note
'that a previous SqlCursor call was not made for c3:
Dim SqlStmt$
Dim CountResult As Long
SqlStmt = "Select Count(*) from Customer"
Call Sql(c3, SqlStmt)
serr1 = SgroupFetch1(c3, CountResult, Len(CountResult))
Call MessBox("Count is: " + Str$(CountResult), MB_OK, "Message")

Tambin Vea
Funciones SFetch, declaraciones SInsert, declaracin Sql, funciones SqlFetch,
declaracin SqlFree, declaraciones SUpdate

Llamadas de Funciones API de Solomon

209

Declaracin SqlCursorEx
Destina un nuevo cursor de base de datos.

Sintaxis
Call SqlCursorEx(Cursor, Flags, CursorName, ReferencedTableNames,
UpdateTableNames)

Observaciones
Toda comunicacin de lectrura/escritura entre una aplicacin y la base de datos debe
ocurrir a travs de un cursor de base de datos. Un cursor es basicamente un recurso de
la base de datos usado para rastrear informacin de bajo nivel requerida para
implementar las operaciones de lectura/escritura de la base de datos SQL. Por ejemplo,
un cursor rastrea la declaracin SQL usada para inicializar la vista actual, cuales
campos individuales fueron seleccionados, el registro actual dentro de la vista, como
tambin informacin ms detallada.
Cada nivel dentro de la pantalla debe tener un cursor correspondiente ubicado dentro
del evento Form_Load de Form1, para facilitar las actividades de lectura/escritura de la
base de datos en ese nivel. Adicionalmente, muchos de los llamados API SQL dentro
de las herramientas de Solomon para Visual Basic, tales como Sql, SFetch1,
SqlFetch1 y SUpdate1 requieren un cursor de base de datos como uno de sus
argumentos. Si el manejador de cursor entregado a una de esas llamadas API SQL no
ha sido destinado previamente, entonces ser destinado automaticamente durante la
llamada. Sin embargo, es necesario estar consciente del hecho de que todos los
cursores no destinados explcitamente, mediante un llamado SqlCursorEx, son
designados automaticamente como cursores de solo-lectura.
Cada aplicacin puede tener un mximo de 36 cursores. Los cursores que ya no se
estn utilizando por la aplicacin pueden ser liberados opcionalmente mediante la
declaracin SqlFree. Todos los cursores son liberados en forma automtica por el
sistema cuando la aplicacin termina de ejecutarse (i.e. cuando se llama ScreenExit).

210

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La declaracin SqlCursorEx utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

Cursor

Integer

Variable a ser inicializada mediante un


manejador de recursos para un cursor de base
de datos SQL.

Flags

Integer

Una o ms banderas de optimizacin que


indican qu y/o cmo se usar el cursor. Como
mnimo el parmetro Flags debe contener una
de las constantes simblicas LEVEL0 a
LEVEL9 o NOLEVEL, definidas en el mdulo
VBTools_VBA. Cursores que no estn
asociados explcitamente a un nmero de nivel
deben ser asignados usando la bandera
NOLEVEL.

CursorName

String

Nombre de pila asociado al cursor. Este valor es


usado solamente para enriquecer la lectura de
mensajes de diagnstico.

ReferencedTableNames

String

Lista de nombres de tablas, delimitada mediante


comas, que sern referenciadas por el cursor.
Esta lista debe estar pensada para ser aplicable
mientras el cursor permanezca aplicable.

UpdateTableNames

String

Lista de todas las tablas, delimitada mediante


comas, que pudieran ser actualizadas mediante
el cursor. El uso principal de esta lista es
facilitar la optimizacin de desempeo
relacionado a las tablas en la vista del cursor
que nunca sern actualizadas. Si no se
especifican nombres de tablas, entonces por
defecto se asumir que todas las tablas
referenciadas se actualizarn en algn
momento. Cualquier nombre de tabla que
aparezca en UpdateTableNames debe estar
especificado tambin en
ReferencedTableNames. Esta lista de nombre
de tablas no debe ser confundida con los
nombres de tablas entregados a las
declaraciones SInsert, SUpdate o SDelete. Los
nombres pasados a tales declaraciones indican
la tabla actualizada actualmente en una
operacin de base de datos particular lo cual
puede ser un subconjunto del argumento
UpdateTableNames.

Llamadas de Funciones API de Solomon

211

Nota: las siguientes banderas de optimizacin son implementadas como constantes


simblicas en el mdulo VBTools_VBA. Estas pueden ser pasados opcionalmente
mediante el argumento Flags, agregndolo a las constantes simblicas requeridas
LEVEL0 a LEVEL9 o NOLEVEL:
SqlFastReadOnly Similar a SqlReadOnly, el cursor ser usado exclusivamente
para operaciones le lectura. En la plataforma SQL Server, todas las operaciones de
base de datos que ocurran en un cursor SqlFastReadOnly, sern servidas
directamente desde la API de bajo nivel ms rpida del servidor SQL. Por favor,
vea la nota abajo para mayor informacin relacionada a las implicancias prcticas
por utilizar la API de bajo nivel del servidor SQL. Cursores con esta bandera no
deben usarse para acceder trablas que hayan recibido las operaciones insert, update
o delete desde un cursor diferente en la misma transaccin de la base de datos.
SqlList Operaciones de lectura/escritura realizadas en el cursor sern guardadas
temporalmente y automaticamente para mejorar el rendimiento. Si una aplicacin
actualiza an un registro en un cursor almacenado, debe actualizar todas las
lecturas de registro con ese cursor dentro de la misma transaccin de base de datos.
Si el cumplimiento de este requerimiento falla, resultar un error de sparse update.
En el ambiente del servidor SQL, todas las operaciones de bases de datos son
almacenadas temporalmente donde sea posible independientemente de lo que la
bandera SqlList haya especificado. Vea SqlNoList para mayor informacin.
SqlLock Todo registro compuesto recuperado mediante este tipo de cursor ser
bloqueado. Esta bandera evita en forma efectiva el costo de bloquear
explcitamente cada registro que es capturado desde la base de datos durante una
transaccin. SqlLock est diseado primordialmente para el uso en escenarios de
proceso, en donde se sabe de antemano que cada registro accesado por el cursor
necesita ser actualizado. Si la aplicacin necesita esperar por una entrada del
usuario mientras el cursor an tiene un registro actual, entonces el cursor no
debiera probablemente tener asignada la bandera SqlLock. Esto se debe al simple
hecho de que el registro actual estar bloqueado mientras espera la respuesta del
usuario esto ocasionando probablemente contencin en el sistema. Los registros
recuperados en el cursor SqlLock se mantendrn bloqueados hasta que el siguiente
registro haya sido recuperado. Por esta razn, la aplicacin debiera seguir siempre
capturando registros hasta que se retorne un NOTFOUND, para de esta forma se
desbloquee el ltimo registro recibido. Se recomienda firmemente que las
aplicaciones slo implementen el uso de SqlLock para facilitar el rendimiento
ptimo, y no para implementar un esquema multi-usuario propio de manejo de
contencin (i.e. el proceso XYZ debe ejecutarse porque tal y tal registro est
bloqueado). Slo la plataforma de servidor SQL soporta esta bandera.
SqlNoList Esta bandera obliga suprimir el almacenamiento temporal de las
operaciones de lectura/escritura. En el ambiente de servidor SQL, todas las
operaciones de base de datos son guardadas temporalmente por defecto, cuando
sea posible, independiente si la bandera SqlList haya sido especificada o no. Como
consecuencia, en la plataforma de servidor SQL, el almacenamiento temporal debe
ser suprimido explcitamente si por alguna razn la aplicacin no quiere que se
almacene temporalmente el cursor. En algunos casos, este almacenamiento por
defecto es suprimido automaticamente debido a restricciones de bajo nivel.

212

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


SqlNoSelect Esta bandera indica que el cursor ser usado con cualquier
declaracin SQL, excepto con la declaracin Select. El uso ms comn de este tipo
de cursor es para procesar declaraciones SQL Update y Delete. En la plataforma
de servidor SQL, todas las operaciones de base de datos que ocurran en un cursor
SqlNoSelect sern servidas directamente desde la API rpida de bajo nivel del
servidor SQL. Por favor, vea la nota abajo para mayor informacin referente a las
implicancias prcticas al utilizar las API de bajo nivel del servidor SQL.
SqlReadOnly El cursor ser usado exclusivamente para operaciones de lectura.
El cursor no ser usado para insertar, actualizar o borrar registros.
SqlSingleRow Esta bandera es usada en cursores que nunca procesarn ms de
un solo registro compuesto luego de cada declaracin Select. Esta bandera est
diseada principalmente para facilitar optimizacin en la plataforma de servidor
SQL. En la plataforma de servidor SQL, todas las operaciones de base de datos
que ocurran en un cursor SqlSingleRow sern servidas directamente desde la API
rpida de bajo nivel del servidor SQL. Por favor, vea la nota abajo para mayor
informacin referente a las implicancias prcticas al utilizar las API de bajo nivel
del servidor SQL. Llamadas SFetch en cursores de este tipo no debieran ser
separadas de la llamada asociada Sql por ninguna de las otras operaciones de la
base de datos. La forma ms sencilla de satisfacer este requerimiento es mediante
el uso de la funcin SqlFetch.
SqlSystemDb Todas las operaciones de la base de datos sern conducidas en la
base de datos del sistema, en vez de ser conducidas en la base de datos de la
aplicacin.
Nota: Referente a las banderas de optimizacin, las cuales invocan el uso de API de
bajo nivel del servidor SQL (SqlFastReadOnly, SqlNoSelect y SqlSingleRow): en la
plataforma de servidor SQL, todas las operaciones de base de datos que ocurran en un
cursor optimizado con una de estas banderas, no usar la API de cursor estndar del
servidor SQL. En vez de eso, las operaciones de la base de datos sern servidas
directamente por la API de bajo nivel del servidor SQL. La ventaja de esto es que la
API de bajo nivel es ms rpida. Sin embargo, al usar la API de bajo nivel, el cursor
puede encontrar contencin con otros cursores en la misma aplicacin (lo cual no es el
caso cuando todas las operaciones son servidas por la API de cursor del servidor SQL).
Las declaraciones SQL procesadas mediante este tipo de cursor deben inclur todos los
campos para cada tabla referenciada en la declaracin. Por ejemplo, declaraciones
Select de registros parciales no son soportados en este tipo de cursor.

Llamadas de Funciones API de Solomon

213

Funcin SqlErr
Obtiene el valor de retorno de la ltima operacin SQL realizada.

Sintaxis
RetVal = SqlErr()

Observaciones
Esta funcin puede ser usada luego de cualquier llamado SQL que sea una declaracin
(opuesto a una funcin), para obtener un valor de retorno. Por ejemplo, la llamada
SInsert1 es declarada una subrutina y no retorna un valor a la aplicacin. En la
mayora de los casos, la aplicacin no necesita verificar el retorno de esta llamada,
dado que SWIM atrapa por defecto todos los cdigos de retorno, salvo las constantes
simblicas 0 y NOTFOUND. Sin embargo, en casos especiales, en donde la
declaracin SqlErrException es usada para darle ms control de manejo de errores a
la aplicacin, la aplicacin necesitar obtener el cdigo de retorno. Esta funcin se usa
para ese propsito.
La funcin SqlErr retorna una de las siguientes constantes globales integer, declaradas
en el mdulo VBTools_VBA:
Valor de Retorno

Descripcin

DUPLICATE

El registro actualizado o insertado ultimamente causa un error de


duplicidad, tal como se define por uno o ms ndices nicos en la
tabla relevante.

Ejemplo
Este ejemplo ilustra cmo insertar un registro Batch numerado nicamente dentro de la
base de datos. El ejemplo asume que una transaccin de base de datos est activa
cuando se llama el procedimiento ilustrado. SqlErrException y SqlErr son usados
para detectar error de duplicidad de nmero batch, sin causar que Swim aborte la
transaccin. El procedimiento de ejemplo recibe dos parmetros:
BatchStruct Un registro Batch, el cual va a ser grabado en la base de datos, que
YA tiene todos los campos relevantes inicializados, EXCETPUANDO el nmero
batch.
AutoNbr_SqlStr El nombre de un procedimiento guardado de nmero propio,
el cual va a capturar los campos AutoBat y LastBatNbr (en ese orden) de uno de
los registros setup.
Sub BATCH_AUTONBR_INSERT (BatchStruct As Batch, ByVal AutoNbr_SqlStr As
String)
Dim AutoNbrFetch

As Integer

'Allocate cursor resources


Call SqlCursor(CSR_AutoNbr, NOLEVEL)
Call SqlCursor(CSR_Batch_AutoNbr_Insert, NOLEVEL)
'Setup cursor with stored procedure so it will be able to
'execute an SInsert1()

214

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


Call Sql(CSR_Batch_AutoNbr_Insert, "Batch_Module_BatNbr" +
sparm("") + sparm(""))
'Fetch the necessary fields for auto batch numbering from
the Setup
'record specified by AutoNbr_SqlStr
AutoNbrFetch = SqlFetch1(CSR_AutoNbr,
AutoNbr_SqlStr, AutoNbr,
LenB(AutoNbr))
'Turn ON exception error checking for DUPLICATE error
condition so
'Swim will not go into abort mode if a duplicate batch
number happens
'to already exist.
Call SqlErrException(EXCEPTION_ON, DUPLICATE)
Do
'Increment AutoNbr.LastNbrUsed to next
sequential value
'(within the size of batch numbers actually being
used).
Call incrstrg(AutoNbr.LastNbrUsed, 6, 1)
BatchStruct.BatNbr = AutoNbr.LastNbrUsed
'Attempt to insert batch record with new batch
number
Call SInsert1(CSR_Batch_AutoNbr_Insert,
"Batch", BatchStruct,
LenB(BatchStruct))
Loop While (SqlErr() = DUPLICATE)
'Write changes to Setup record back to database
Call SUpdate1(CSR_AutoNbr, "*.*", AutoNbr,
LenB(AutoNbr))
'Turn OFF exception error checking for DUPLICATE.
Call SqlErrException(EXCEPTION_OFF, DUPLICATE)
'Free up cursor resources
Call SqlFree(CSR_AutoNbr)
Call SqlFree(CSR_Batch_AutoNbr_Insert)
End Sub

Tambin Vea
Declaracin SqlErrException

Llamadas de Funciones API de Solomon

215

Declaracin SqlErrException
Revierte la lgica de manejo de errores para uno o ms cdigos de errores.

Sintaxis
Call SqlErrException (ToggleFlag, ErrorToExcept)

Observaciones
Por defecto, todos los cdigos de errores, excepto 0 y NOTFOUND, son atrapados
dentro de SWIM y no son retornados a la aplicacin. Para alterar este comportamiento,
la aplicacin puede usar la declaracin SqlErrException para decirle a SWIM que no
atrape ciertos errores, y los retorne a la aplicacin. Esta declaracin es usada en
conjunto con la funcin SqlErr.
Note que la aplicacin es responsable de revertir la excepcin, una vez que ya no sea
necesaria.
La declaracin SqlErrException utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

ToggleFlag

Integer

Usado para decirle a SWIM que active o desactive la


excepcin de errores. Las constantes simblicas
EXCEPTION_ON y EXCEPTION_OFF son los nicos
valores vlidos, y estn definidos en el mdulo
VBTools_VBA.

ErrorToExcept

Integer

Cdigos de errores que deben ser retornados a la


aplicacin, en vez de ser manejados por el sistema
automticamente. Si slo se deben exceptuar errores de
registro duplicado de la lgica de manejo de error
automtico, entonces la constante simblica
DUPLICATE debe ser usada. Si se deben retornar todos
los errores a la aplicacin, se debe usar la constante
simblica RETURN_ALL_ERRVALS. Ambas
constantes simblicas se definen en el mdulo
VBTools_VBA.

216

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
Dim DupFlag%
DupFlag = DUPLICATE
'Tell the Solomon to return DUPLICATE status messages
Call SqlErrException(EXCEPTION_ON, DUPLICATE)
'Loop until a non duplicate number is assigned
Do Until DupFlag <> DUPLICATE
'Increment last reference number
Call IncrStrg(bARSetup.LastRefNbr, Len(bARSetup.LastRefNbr, 1)
'Attempt to insert the new refnbr
bARDoc.RefNbr = bARSetup.LastRefNbr
bRefNbr.RefNbr = bARDoc.RefNbr
Call sinsert1(c8, "RefNbr", bRefNbr, Len(bRefNbr))
'Check the return value for duplicates
DupFlag = SqlErr() 'DUPLICATE or 0
Loop 'Until exited with a good Refnbr

Tambin Vea
Funcin SqlErr

Llamadas de Funciones API de Solomon

Declaracin SqlExec
Ejecuta una declaracin SQL dentro de lnea.

Sintaxis
Call SqlExec(Cursor)

Observaciones
Ejecuta una declaracin SQL dinmica en un cursor que ha sido inicializado
previamente con llamadas a las declaraciones Sql y SqlSubst (en ese orden).
La declaracin SqlExec utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Cursor

Integer

Cursor de la base de datos SQL.

Ejemplo
Dim VendorCount&, SqlStmt$
SqlStmt = "Select Count(*) from Vendor Where VendId Like @parm1"
Call Sql(c1, SqlStmt)
Call SqlSubst(c1, "parm1", "V001%")
Call SqlExec(c1)
serr1 = sgroupfetch1(c1, VendorCount, Len(VendorCount))
Call MessBox("Count is " + Str$(VendorCount), MB_OK, "Message")

Tambin Vea
Declaracin Sql, declaracin SqlSubst

217

218

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funciones SqlFetch
Usadas para inicializar una nueva vista de base de datos y recuperar inmediatamente un
registro compuesto.

Sintaxis
RetVal = SqlFetch1(Cursor, SqlStr, bTable1, bTable1Length)
RetVal = SqlFetch4(Cursor, SqlStr, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = SqlFetch8(Cursor, SqlStr, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)

Observaciones
Para poder recuperar informacin desde una base de datos, primero debe ser
inicializada una vista de base de datos, especificando qu tablas, campos y criterios de
restriccin se van a utilizar. Segundo, una peticin por datos debe ser enviada al
servidor desde una vista actual. Cada una de las funciones SqlFetch1, SqlFetch4 y
SqlFetch8 realizan efectivamente ambas de estas operaciones en una nica llamada, lo
cual requirira de otra forma una combinacin de dos llamadas (i.e. Sql y SqlFetch1).
En situaciones de secuencias, en donde un programa necesita leer secuencialmente a
travs de mltiples registros en una vista, estas funciones son convenientes para
inicializar una vista y capturar inmediatamente el primer registro. Sin embargo, no
debieran ser usadas para los registros subsiguientes, dado que la vista es re-establecida
cada vez que se llama a SqlFetch1, SqlFetch4 o SqlFetch8, y por ello ellas slo
recuperarn siempre el primer registro de la vista. En estos casos, SFetch1, SFetch4 o
SFetch8 pueden ser usados para capturar los registros subsiguientes.
SqlFetch1 est diseada para declaraciones SQL que referencian una tabla nica. Para
declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se puede
utilizar SqlFetch4 o SqlFetch8.
La funcin SFetch1 utiliza los siguientes argumentos (SqlFetch4 y SqlFetch8 tienen
cuatro y ocho estructuras de tablas respectivamente, y largos correspondientes. PNULL
debe usarse para parmetros de estructura de tablas no usados, como tambin un largo
correspondiente de cero, tal como PNULL, 0).

Llamadas de Funciones API de Solomon

219

Argumento

Tipo

Descripcin

RetVal

Integer

0 si el registro es capturado satisfactoriamente.


NOTFOUND si no existen registros en la vista establecida que concuerdan con el criterio de restriccin.

Cursor

Integer

Cursor de la base de datos SQL.

SqlStr

String

Declaracin SQL o procedimiento guardado a ser


usado para inicializar una nueva vista de base de datos.
Si se usa un procedimiento guardado, entonces todos
los parmetros deben ser anexados secuencialmente, en
orden de ocurrencia de la declaracin Create Procedure
original. Estos valores de parmetros deben estar
convertidos a parmetros SQL mediante el uso de
funciones SParm, IParm, FParm y DParm la que
sea apropiada para el tipo de dato especfico.

bTable1

Tipo de dato
definido por el
usuario

Estructura de tabla correspondiente a la tabla primaria


de la declaracin SQL.

bTable1Length

Integer

Largo de la primera estructura de tabla. Por ejemplo,


LenB(bTable1). Nota: Es crtico usar LenB() en vez de
Len() para todo parmetro table length no nulo.

SGroupFetch1, SGroupFetch4 o SGroupFetch8 debe ser usado si la declaracin


SQL utilizada para inicializar el cursor contiene ono o ms de los siguientes
componentes:
Funciones de aglomeracin grupal, tales como Count y Sum
Palabra clave DISTINCT
Clusula GROUP BY
Clusula HAVING
Subqueries

Ejemplo 1
Ejemplo del evento CustId chk, el cual captura nueva informacin de tabla.
SUB ccustid_Chk(chkstrg$, retval%)
serr1 = sqlfetch1(c1, "XCustAddlInfo_CustId" + sparm(chkstrg),
bXCustAddlInfo, Len(bXCustAddlInfo))
If serr1 = NOTFOUND Then
serr1 = SetDefaults("NewInfo", "")
bXCustAddlInfo.CustId = chkstrg
Found_Cust = "N"
Else
Found_Cust = "Y"
End If
Call DispFields("NewInfo","")
END SUB

220

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo 2
'Select Unreleased APDocs and Join Vendor Table
Dim SqlStmt$
SqlStmt$ = "Select * from APDoc, Vendor Where APDoc.VendId =
Vendor.VendId(+) And APDoc.Rlsed = 'False'
Order by APDoc.RefNbr
serr1 = sqlfetch4(c1, SqlStmt, bAPDoc, Len(bAPDoc),
bVendor,Len(bVendor),
"", 0, "", 0)

Tambin Vea
Funcin DParm, funcin FParm, funcin IParm, funciones SGroupFetch, funcin
SParm, declaracin Sql, funciones SqlFetch

Llamadas de Funciones API de Solomon

221

Declaracin SqlFree
Libera un cursor de base de datos, el cual ya no es necesario para la aplicacin.

Sintaxis
Call SqlFree(Cursor)

Observaciones
La declaracin SqlFree es usada para liberar cursores que hayan sido establecidos con
la declaracin SqlCursor. El uso de esta declaracin es completamente opcional. Es
usada normalmente cuando un cursor ya no es necesitado por una aplicacin, cuyo
nmero total de cursores est muy cerca del lmite mximo. Todos los cursores son
liberados en forma automtica por el sistema al terminar la ejecucin de la aplicacin
(i.e. cuando se llama ScreenExit).
La declaracin SqlFree utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Cursor

Integer

Manejador de recursos pata el cursor de la base de datos


SQL a ser liberado.

Ejemplo
El ejemplo utiliza SqlFree en una sub-rutina general.
Get APSetup Information set global variable NextRefNbr
Sub GetSetupInfo()
Call SqlCursor(c1)
Call SqlFetch1(c1, "APSetup_All", bAPSetup, Len(bAPSetup))
NextRefNbr = bAPSetup.LastRefNbr
Call SqlFree(c1)
End Sub

Tambin Vea
Declaracin SqlCursor

222

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin SqlSubst
Especifica un valor de dato para un parmetro de sustitucin de una declaracin SQL
dentro de lnea, previamente ejecutada mendiante la funcin Sql.

Sintaxis
Call SqlSubst(Cursor, ParmName, ParmValue)

Observaciones
SqlSubst le permite especificar valores para una o ms variables de sustitucin en una
declaracin SQL dentro de lnea, que es ejecutada mediante la declaracin Sql. No
es utilizada en procedimientos guardados.
Esta declaracin debe ser llamada despus de la declaracin Sql y antes de la
declaracin SqlExec. Puede ser llamada cualquier nmero de veces antes de que se
llame SqlExec, dependiendo de quntos valores de parmetros hayan para sustitur
dentro de la declaracin SQL.
La declaracin SqlSubst utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Cursor

Integer

Cursor de la base de datos SQL inicializado previamente


con una declaracin SQL dentro de lnea, que contiene
uno o ms parmetros.

ParmName

String

Nombre del parmetro de la declaracin SQL (sin inclur


el caracter @).

ParmValue

String

Valor de dato a ser usado para el parmetro designado.

Ejemplo
Dim VendorCount&, SqlStmt$
SqlStmt = "Select Count(*) from Vendor Where VendId Like @parm1"
Call Sql(c1, SqlStmt)
Call SqlSubst(c1, "parm1", "V001%")
Call SqlExec(c1)
serr1 = sgroupfetch1(c1, VendorCount, Len(VendorCount))
Call MessBox ( "Count is " + Str$(VendorCount), MB_OK, "Message")

Tambin Vea
Declaracin Sql, declaracin SqlExec

Llamadas de Funciones API de Solomon

223

Declaracin StrToDate
Convierte un valor de fecha desde una cadena de caracteres en formato MMDDYYYY
hacia un formato de fecha SQL.

Sintaxis
Call StrToDate(DateStringToConvert, SQLDate)
La declaracin StrToDate utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

DateStringToConvert

String

Cadena de caracteres en formato


MMDDYYYY

SQLDate

Tipo de dato SDate


definido por el usuario
(declarado en el mdulo
VBTools_VBA)

Valor de fecha convertido

Ejemplo
Dim NewDate As Sdate
Call StrToDate("10311994", NewDate)

Tambin Vea
Funcin DateToIntlStr, funcin DateToStr, funcin DateToStrSep, declaracin
IntlStrToDate

224

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin StrToTime
Convierte un valor de hora desde un formato de cadena de caracteres HHMMSShh
hacia el formato de hora SQL.

Sintaxis
Call StrToTime(TimeStringToConvert, SQLTime)
La declaracin StrToTime utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

TimeStringToConvert

String

Cadena de caracteres en formato


HHMMSShh

SQLTime

Tipo de dato STime


definido por el usuario
(declarado en el mdulo
VBTools_VBA)

Valor de hora convertido

Ejemplo
Dim TimeVal As Stime
Dim TimeStr As String
TimeStr = "12010000"
Call StrToTime(TimeStr, TimeVal)

Tambin Vea
Funcin TimeToStr

Llamadas de Funciones API de Solomon

225

Declaracin SUpdate
Actualiza un registro de cada tabla especificada dentro de una vista de base de datos
existente.

Sintaxis
Call SUpdate1(Cursor, TablesUpdating, bTable1, bTable1Length)
Call SUpdate4(Cursor, TablesUpdating, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
Call SUpdate8(Cursor, TablesUpdating, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)

Observaciones
Los registros existentes pueden ser actualizados directamente en el programa mediante
el uso de las declaraciones SUpdate1, SUpdate4 y SUpdate8. Sin embargo, antes de
que un registro pueda ser actualizado, primero debe ser capturado, usando una de las
funciones SFetch1, SFetch4 y SFetch8 o SqlFetch1, SqlFetch4 y SqlFetch8. La
operacin de captura que precede la actualizacin debe hacerse usando la misma
vista/cursor de la base de datos, en la cual la actualizacin ocurra. Por ejemplo, si la
captura ocurre en el CursorA, entonces la actualizacin debe tambin ocurrir en el
CursorA. Sin embargo, una vez que la vista de la base de datos haya sido establecida,
estas funciones actualizarn el registro actual en la vista para cada tabla referenciada en
el argumento TablesUpdating, usando datos de los argumentos de la estructura de tabla
correspondiente.
SUpdate1 est diseada para declaraciones SQL que referencian una tabla nica. En
este caso, TablesUpdating es siempre el nombre de la tabla nica referenciada
actualmente. Para declaraciones SQL ms avanzadas que tengan uno o ms ligamientos
de tablas se puede usar SUpdate4 o SUpdate8. El referenciar ms de una tabla no
obliga automticamente actualizar el registro actual de cada tabla de cada vista cada
vez que se usa SUpdate4 o SUpdate8 en el cursor correspondiente. El registro actual
de una tabla particular de la vista ser actualizado nicamente si su nombre de tabla
correspondiente es especificado explcitamente en el argumento TablesUpdating,
mientras cada nombre de tabla especificado sea tambin referenciado en la declaracin
SQL, la cual fue usada para inicializar la vista actual. De esta forma, por ejemplo, si
TableA y TableB son las nicas dos tablas referenciadas en la declaracin SQL usada
para inicializar la vista actual, entonces un valor de TableXYZ ser invlido para el
argumento TablesUpdating.
La funcin SUpdate1 usa los siguientes argumentos (SUpdate4 y SUpdate8 tiene
cuatro y ocho estructuras de tablas y largos correspondientes. PNULL debiera ser
entregado para estructuras de tablas no usadas, como tambin un largo correspondiente
de cero, tal como PNULL, 0).

226

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Argumento

Tipo

Descripcin

Cursor

Integer

Cursor de la base de datos SQL.

TablesUpdating

String

Nombre de cada tabla, en la vista de


cursor especfica, cuyo registro actual va a
ser actualizado. Mltiples nombres de
tablas son separados por comas.

bTable1

Tipo de dato
definido por el
usuario

Estructura de tabla correspondiente a la


tabla primaria de la declaracin SQL.
Datos de esta estructura sern usados para
sobreescribir datos existentes en el
registro actual correspondiente, si el
nombre de la tabla de base de datos
indicada es especificada explcitamente en
el argumento TablesUpdating.

bTable1Length

Integer

Largo de la primera estructura de tabla.


Por ejemplo, LenB(bTable1). Nota: Es
crtico usar LenB() en vez de Len() para
todo parmetro table length no nulo.

Nota: las actualizaciones de bases de datos que ocurran en cursores destinados por
SqlCursorEx usando la bandera SqlList (i.e. cursores guardados temporalmente) tiene
dos requerimientos nicos. Primero, la aplicacin debe actualizar todos los registros
que lee, usando un cursor guardado temporalmente, aunque actualice un solo registro.
El no cumplir con este requerimiento resultar en un error de actualizacin sparse.
Segundo, la aplicacin no debe modificar la vista en el cursor luego de que las
actualizaciones hayan ocurrido, hasta despus de que la transaccin haya terminado.
Por ejemplo, si la aplicacin est leyendo y actualizando registros de TableA en el
cursor guardado temporalmente CursorA, entonces CursorA no debiera ser usado para
cualquier otro propsito hasta despus de que la transaccin de la base de datos haya
finalizado. Si no se hacen actualizaciones usando el CursorA, entonces este
requerimiento no aplica.

Ejemplo
Este simple ejemplo actualiza todos los registros GLTran en General Ledger Batch
000001. En Solomon la liberacin de los registros GLTran conlleva lgica de
aplicacin adicional, lo cual no es relevante para la ilustracin de la declaracin
SUpdate4, y por ello ha sido remodido del ejemplo.
Este ejemplo asume que el procedimiento guardado
GLTran_Module_BatNbr_LineNbr fue originalmente creado mediante la siguiente
declaracin SQL:
Select * from GLTran
where Module = @parm1
and BatNbr = @parm2
and LineNbr between @parm3beg and @parm3end
order by Module, BatNbr, LineNbr

Llamadas de Funciones API de Solomon

227

Dado que la declaracin SQL ms arriba solamente recoge datos slo desde tablas
nicas (por ejemplo, la tabla GLTran), SUpdate1 sera adecuado. Sin embargo, en este
ejemplo, SUpdate4 es usado para ilustrar como pasar , 0 para argumentos de
estructuras de tablas no usados.
Dim CSR_GLTran
Dim SqlStr
Dim GLTranFetch

As Integer
As String
As Integer

'Allocate a database cursor. A buffered cursor (i.e., SqlList) can be


'used to speed up performance since ALL GLTran records read within the
'database transaction will also be updated.
Call SqlCursor( CSR_GLTran, NOLEVEL + SqlList)
'Begin a database transaction since all updates to the database must
occur
'within a transaction.
Call TranBeg(True)
'Initialize SqlStr with a stored procedure and associated parameters which
'can be used to fetch all GLTran records in GL Batch 000001.
SqlStr = "GLTran_Module_BatNbr_LineNbr" + sparm("GL") +
sparm("000001") + iparm(INTMIN) + iparm(INTMAX)
'Initialize cursor with a SQL stored procedure and immediately fetch
'first record
GLTranFetch = SqlFetch4(CSR_GLTran, SqlStr, bGLTran,
Len(bGLTran), "", 0, "", 0, "", 0)
While (GLTranFetch = 0)
'Release current transaction
bGLTran.Posted
bGLTran.Rlsed

= "U"
= LTRUE

'Update the record last fetched on CSR_GLTran (i.e., the


current
'GLTran record) with the modified contents of bGLTran
Call SUpdate4(CSR_GLTran, "GLTran", bGLTran,
Len(bGLTran), "", 0, "", 0, "", 0)
'Load next transaction record
GLTranFetch = SFetch4(CSR_GLTran, bGLTran, Len(bGLTran),
"", 0,"", 0, "", 0)
Wend
'End the database transaction to commit all updates to the
database.
Call TranEnd

Tambin Vea
Fucniones SFetch, declaracin SqlCursor, funciones SqlFetch

228

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin TestLevelChg
Retorna la bandera de estado de actualizacin actual para un nivel especfico.

Sintaxis
Status = TestLevelChg(LevelNbr)

Observaciones
Cada nivel de actualizacin, tal como se define en la propiedad Levels del control
SAFUpdate, tiene una bandera de estado de nivel correspondiente que es mantenida
automticamente por el sistema. El propsito de la bandera de estado de nivel es
facilitar la optimizacin de la actualizacin de las bases de datos, realizada en respuesta
a los botones Parent de la barra de herramientas. En general, estas banderas permiten al
sistema realizar solamente actualizaciones de las bases de datos para niveles
actualizados, los cuales hayan sido modificados realmente. Si ninguna informacin se
ha modificado, entonces ninguna informacin necesita ser guardada.
Como mencionado anteriormente, estas banderas de actualizacin son mantenidas
atomticamente por el sistema. Cuando un registro existente es cargado, la bandera es
fijada a NOTCHANGED. Si algn campo no clave es modificado subsiguientemente,
entonces la bandera de estado de nivel para el nivel correspondiente ser fijada a
UPDATED. Cuando se est ingresando un nuevo registro, la bandera de estado de
nivel se fija a INSERTED.
La funcin TestLevelChg permite a la aplicacin accesar el valor actual de esta
bandera para un nivel especfico. La bandera de estado de nivel actual puede ser
sobreescrita por la aplicacin usando la declaracin SetLevelChg.
La funcin TestLevelChg utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

Status

Integer

Valor actual de la bandera de estado de nivel para el


LevelNbr designado. Los siguientes valores posibles son
definidos como constantes simblicas en el mdulo
VBTools_VBA: INSERTED, UPDATED,
NOTCHANGED.

LevelNbr

Integer

Nivel cuya bandera de estado va a ser retornada.

Llamadas de Funciones API de Solomon

229

Ejemplo
La ventana del mdulo Earnings Type Maintenance (02.270.00) contiene un botn
para poblar automticamente la grilla con todas las deducciones. Esto equivale a
insertar registros dentro de la grilla (i.e. dentro de su arreglo de memoria subyacente),
bajo control de programa. Dado que los datos no son ingresados mediante la interfaz
del usuario, el sistema necesita ser notificado que informacin a nivel de grilla (i.e.
LEVEL1 en este caso) ha sido actualizada mediante el programa, y por lo tanto
necesita ser guardada. Sin embargo, tal notificacin slo necesita ocurrir si el sistema
no est al tanto de que los datos han sido modificados.
'If any records were inserted into the memory array then we need to make
'sure that the level status for the detail level is something other than
'NOTCHANGED so the system will know that something needs to be saved.
If (AnyRecsInserted = True) Then
If (TestLevelChg(LEVEL1) = NOTCHANGED) Then
Call SetLevelChg(LEVEL1, UPDATED)
End If
End If

Tambin Vea
Declaracin SetLevelChg

230

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin TimeToStr
Convierte un valor de hora desde el formato SQL a una cadena de caracteres en
formato HHMMSShh.

Sintaxis
TimeString = TimeToStr(TimeToConvert)

Observaciones
La funcin TimeToStr utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

TimeString

String

TimeToConvert convertido a una cadena


de caracteres en formato HHMMSShh.

TimeToConvert

Tipo de dato STime


definido por el usuario
(declarado en el mdulo
VBTools_VBA)

Valor de hora a ser convertido.

Ejemplo
'If any records were inserted into the memory array then we need to make
'sure that the level status for the detail level is something other than
'NOTCHANGED so the system will know that something needs to be saved.
If (AnyRecsInserted = True) Then
If (TestLevelChg(LEVEL1) = NOTCHANGED) Then
Call SetLevelChg(LEVEL1, UPDATED)
End If
End If

Tambin Vea
Declaracin StrToTime

Llamadas de Funciones API de Solomon

231

Declaracin TranAbort
Aborta la transaccin de base de datos actual.

Sintaxis
Call TranAbort

Observaciones
La declaracin TranAbort permite a la aplicacin abortar una transaccin de base de
datos, la cual fue iniciada mediante la declaracin TranBeg.
El llamar a la declaracin TranAbort no es, sin embargo, el mtodo recomendado para
abortar transacciones. Si la transaccin a ser abortada es una operacin de
actualizacin (update operation) para una pantalla de aplicacin, entonces el mtodo
recomendado es que la aplicacin fije RetVal de su evento OnUpdate del control
SAFUpdate ya sea a un nmero de mensaje de error o a la constante simblica
ErrNoMess definida en el mdulo VBTools_VBA. Esto tambin tendr el efecto de
abortar la transaccin de base de datos actual.

Ejemplo
Call TranBeg(True)
....
'Perform Processing
.....
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete...
'End Transaction/Commit Work to Database
Call TranEnd

Tambin Vea
Declaracin TranBeg, declaracin TranEnd, evento OnUpdate

232

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin TranBeg
Inicia una transaccin de base de datos.

Sintaxis
Call TranBeg(IsAbortable)

Observaciones
Todas las actualizaciones de una base de datos deben ocurrir dentro de una transaccin
de base de datos. Todas las actualizaciones a la base de datos no sern realizadas en la
base de datos, hasta que la transaccin no haya finalizado mediante la declaracin
TranEnd.
Si ocurriera cualquier error durante la transaccin de la base de datos, entonces el
sistema aborta automticamente (i.e. quitar) todas las actualizaciones que ocurran
durante la transaccin, en vez de agregarlos a la base de datos. Si la transaccin es una
operacin de actualizacin para una pantalla de la aplicacin, entonces ser abortada
cuando la aplicacin fije RetVal en el evento OnUpdate del control SAFGrid ya sea a
un nmero de mensaje de error o a la constante simblica ErrNoMess definida en el
mdulo VBTools_VBA.
La declaracin TranBeg utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

IsAbortable

Integer

Verdadero (True) si la transaccin se puede abortar (lo cual es


casi siempre el caso). En otro caso debe ser false (False).
Errores que ocurran en transacciones no abortables causarn
que la aplicacin termine de ejecutarse inmediatamente.

Ejemplo
Call TranBeg(True)
'Perform Processing
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete
'End Transaction/Commit Work to Database
Call TranEnd

Tambin Vea
Declaracin TranEnd, funcin TranStatus, evento OnUpdate

Llamadas de Funciones API de Solomon

233

Declaracin TranEnd
Finaliza la transaccin de base de datos actual y coloca todas las actualizaciones a la
base de datos.

Sintaxis
Call TranEnd

Observaciones
Si ocurriera cualquier error durante la transaccin de la base de datos, entonces el
sistema aborta automticamente (i.e. quitar) todas las actualizaciones que ocurran
durante la transaccin, en vez de colocarlas a la base de datos. Si la transaccin es una
operacin de actualizacin para una pantalla de la aplicacin, entonces ser abortada
cuando la aplicacin fije RetVal en el evento OnUpdate del control SAFGrid ya sea a
un nmero de mensaje de error o a la constante simblica ErrNoMess definida en el
mdulo VBTools_VBA.

Ejemplo
Call TranBeg(True)
'Perform Processing
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete...
'End Transaction/Commit Work to Database
Call TranEnd

Tambin Vea
Declaracin TranBeg, funcin TranStatus, evento OnUpdate

234

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin TranStatus
Retorna el estado de la transaccin de base de datos actual, o la ltima realizada.

Sintaxis
IntegerErrVal = TranStatus()

Observaciones
Si una transaccin de base de datos no est abierta, entonces se retorna el estado de la
ltima transaccin de base de datos realizada.
Si la transaccin fue exitosa, se retorna el valor cero.
Si se retorna un valor diferente de cero, esto indica que ocurri un error fatal durante la
transaccin, y por ello ser, o ya ha sido abortada. En este caso, el valor de retorno
actual es en s mismo el nmero de mensaje de error que describe la naturaleza del
problema.

Ejemplo
Call TranBeg(True)
'Perform Processing
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete...
'Test for Database condition
If TranStatus() <> 0 Then
Call TranAbort
End If
'End Transaction/Commit Work to Database
Call TranEnd

Tambin Vea
Declaracin TranBeg, declaracin TranEnd, evento OnUpdate

Llamadas de Funciones API de Solomon

235

Funcin VBA_MExtend
Expande la grilla de una aplicacin, de tal modo que se pueda agregar otra estructura
de tabla a la grilla.

Sintaxis
RetVal = VBA_MExtend(MemHandle, bTable1, bTable1Length)

Observaciones
A pesar de que esta funcin se suministra para extender el nmero de tablas que son
accesadas por el control de grilla, la aplicacin VBA es responsable por todas las
entradas/salidas de la base de datos hacia la nueva tabla. Esto incluye el uso de
funciones de arreglo de memoria para circular a travs de la grilla en tiempo de
grabado, para determinar si el contenido de la estructura de la tabla subyacente ha
cambiado y realizar las acciones apropiadas.
La funcin VBA_MExtend utiliza los siguientes argumentos:
Argumento

Tipo

Descripcin

RetVal

Integer

Diferente de cero si la operacin ha sido exitosa. De


otra forma es cero.

MemHandle

Integer

Manejador nico de un arreglo de memoria abierto


previamente.

bTable1

Tipo de dato
definido por
el usuario

Estructura de tabla suplementaria a ser agregada al


arreglo de memoria existente.

bTable1Length

Integer

Largo de la estructura de tabla suplementaria. Por


ejemplo, LenB(bTable1).

Ejemplo
El siguiente ejemplo expande la grilla para el grfico de la pantalla de cuentas
(accounts screen). Agrega la definicin de una nueva tabla, Xaccount, a la grilla
account.
Global GridHandle As Integer
'Calls in Form1_Load event:
Call VBA_SetAddr("bXAccount", bXAccount, nXAccount, LenB(bXAccount))
Call SQLCursor(c1, NOLEVEL)
'Calls in Form1_Display
GridHandle = GetGridHandle("Spread1")
serr1 = VBA_MExtend(GridHandle, bXAccount, LenB(bXAccount))

Tambin Vea
Fuincin GetGridHandle, declaracin VBA_SetAddr

236

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funciones VBA_MOpen
Abre un nuevo arreglo de memoria y retorna un nmero nico de arreglo de memoria
correspondiente.

Sintaxis
MemHandle = VBA_MOpen(DelRetToSystem, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
MemHandle = VBA_MOpen8(DelRetToSystem, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)

Observaciones
Un arreglo de memoria debe estar abierto antes de poder realizar las operaciones de
insert, update, delete o navegacin del arreglo de memoria. El manejador de arreglo de
memoria retornado por VBA_MOpen y VBA_MOpen8 es utilizado al realizar este
tipo de operaciones en arreglos de memoria.
VBA_MOpen asigna espacio de memoria para hasta cuatro estructuras de tablas,
mientras que VBA_MOpen8 puede manejar hasta ocho estructuras de tablas diferentes
para cada registro de arreglo de memoria.
VBA_MOpen es slo usado para abrir arreglos de memoria que no estn asociados a
un control SAFGrid. Los arreglos de memoria que correspondan a grillas son abiertos
automticamente.
Las funciones VBA_MOpen utilizan los siguientes argumentos (VBA_MOpen8 tiene
ocho estructuras de tablas y largos correspondientes. PNULL debe usarse para
parmetros de estructuras de tablas no usados, de la forma PNULL,0)
Argumento

Tipo

Descripcin

MemHandle

Integer

Manejador nico del arreglo de memoria creado


recientemente. Si un nuevo arreglo de memoria fue
abierto exitosamente este valor ser >=0.

bTable1

Tipo de dato

Primera estructura de tabla del arreglo de memoria.

bTable1Length

Integer

Largo de la primera estructura de tabla. Por ejemplo,


LenB(bTable1). Nota: Es crtico usar LenB() en vez de
Len() para todo parmetro table length no nulo.

bTable2

Tipo de dato
definido por el
usuario

Segunda estructura de tabla del arreglo de memoria.


PNULL si el arreglo de memoria contiene una sola
estructura de tabla.

bTable2Length

Integer

Largo de la segunda estructura de tabla. Cero si el arreglo


de memoria slo contiene una estructura de tabla.

bTable3

Tipo de dato
definido por el
usuario

Tercera estructura de tabla del arreglo de memoria.


PNULL si el arreglo de memoria contiene menos de tres
estructuras de tablas.

bTable3Length

Integer

Largo de la tercera estructura de tabla. Cero si el arreglo


de memoria contiene menos de tres estructuras de tabla.

Llamadas de Funciones API de Solomon

237

Argumento

Tipo

Descripcin

bTable4

Tipo de dato
definido por el
usuario

Cuarta estructura de tabla del arreglo de memoria.


PNULL si el arreglo de memoria contiene menos de
cuatro estructuras de tablas.

bTable4Length

Integer

Largo de la cuarta estructura de tabla. Cero si el arreglo de


memoria contiene menos de cuatro estructuras de tabla.

Las estructuras de tabla entregadas a VBA_MOpen8 no necesitan ser tablas de bases


de datos. Pueden ser un simple tem de dato, tal como un double, o cualquier otro tipo
de dato definido por el usuario, creado mediante la declaracin VBType.

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y cargar el completo
Solomon Chart of Accounts dentro del arreglo recientemente creado.
Dim Mem_Account

As Integer

Dim CSR_Account

As Integer

Dim SqlStr

As String

Dim Account_Fetch

As Integer

'Open memory array to hold Chart of Accounts


Mem_Account = VBA_MOpen( TRUE, bAccount, Len(bAccount), PNULL, 0, PNULL,
0, PNULL, 0)
'Allocate cursor
Call SqlCursor( CSR_Account, NOLEVEL)
'Initialize cursor with a SQL stored procedure and immediately fetch
'first record
SqlStr = "Select * from Account order by Acct"
Account_Fetch = SqlFetch1(CSR_Account, SqlStr, bAccount, LenB(bAccount))
'Read through all subsequent Account records, inserting each one
'into the memory array.
While( Account_Fetch = 0)
'Insert current Account record into the memory array
Call MInsert( Mem_Account)
'Fetch the next Account record
Account_Fetch = SFetch1(CSR_Account, bAccount,
LenB(bAccount))
Wend

Tambin Vea
Declaracin MClear, declaracin MClose, funcin MDelete, declaracin MDisplay,
funcin MFirst, declaracin MInsert, declaracin MKey, funcin MKeyFind, funcin
MLast, funcin MNext, funcin MPrev, declaracin MUpdate

238

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Declaracin VBA_SetAddr
Asocia un nombre de tabla a una variable VB y un nmero opcional de nivel de
pantalla.

Sintaxis
Call VBA_SetAddr(TableNameStr, bTableName, nTableName, bTableNameLength)

Observaciones
La declaracin VBA_SetAddr facilita el ligamiento apropiado entre variables de dato
VB y controles de entrada relevantes en tiempo de ejecucin incluyendo los controles
creados por el Administrador de Adaptaciones.
Aunque SWIM tenga acceso a amplia informacin acerca de cualquier control de dato
de entrada particular, una parte sustancial de informacin no puede ser determinada
solamente mirando el control. En particular, SWIM necesita saber en qu parte de la
memoria se guardan los datos para el control. Dado que los datos son guardados en una
variable VB subyacente, SWIM no tiene medios para determinar directamente en
dnde se guarda esta variable VB dentro de la memoria. La declaracin
VBA_SetAddr es usada por la aplicacin para resolver este problema.
Para facilitar la explicacin de la vinculacin entre la declaracin VBA_SetAddr y los
controles de entrada de dato correspondientes, considere el siguiente tipo de dato
definido por el usuario y un llamado a VBA_SetAddr correspondiente para la tabla de
base de datos Account:
Type Account
Acct

Como String * 10

Active

Como Integer

ConsolAcct

Como String * 10

CuryId

Como String * 4

Descr

Como String * 30

NoteID

Como Long

RatioGrp

Como String * 2

SummPost

Como String * 1

Type

Como String * 2

User1

Como String * 30

User2

Como String * 30

User3

Como Double

User4

Como Double

End Type
Global bVBVarAccount As Account, nVBVarAccount As Account
Call VBA_SetAddr( "bAccount", bVBVarAccount, nVBVarAccount,
LenB(bVBVarAccount))

Llamadas de Funciones API de Solomon

239

La llamada VBA_SetAddr asocia el valor del argumento TableNameStr a la


localizacin de memoria del primer byte de la variable VB entregada mediante el
argumento bTableName. Si la tabla relevante es una tabla de base de datos, SWIM
puede acceder a informacin detallada relacionada a cada campo individual usando el
directorio de datos SQL. Por ejemplo, SWIM puede determinar el nombre, tipo de
dato, largo mximo, como tambin la localizacin relativa (i.e. offset del byte) de cada
campo individual dentro de la tabla. Luego de la llamada a VBA_SetAddr del ejemplo
anterior, SWIM sabr que el primer byte de bVBVarAccount est en un rea particular
de memoria, desde ahora mencionado como localizacin M, y adems que el primer
byte de bVBVarAccount tiene offset de cero bytes desde la localizacin M, como
tambin el hecho de que Acct tiene largo de 10 bytes. Similarmente, tambin sabr que
el primer byte de bVBVarAccount.Active tiene un offset de 10 bytes desde la
localizacin M y tiene un largo de dos bytes, dado que es un integer. Dado que el valor
de bAccount es entregado como argumento TableNameStr, es el literal de la cadena
de caracteres asociado a la localizacin de memoria M. Cada vez que SWIM se
encuentra con bAccount.<SomeFieldName> en una propiedad FieldName, tendr
toda esta informacin fcilmante disponible, de modo que puede acceder el dato
correspondiente en la localizacin de memoria apropiada. El mismo concepto aplica
cuando SWIM se encuentra con bAccount.<SomeFieldName> en cualquiera de las
propiedades DBNav, Default, PV o Trigger.
Como se menciona anteriormente, la informacin detallada adquirida por SWIM como
resultado de la llamada VBA_SetAddr, puede ser ligada directamente a la propiedad
FieldName de controles de entrada de datos. La propiedad FieldName contiene un
valor Struct.FieldName junto con otra informacin ms detallada tal como el valor de
offset de campo, tipo declarado y largo. Una vez que hayan sido inicializados
completamente, estos valores facilitan el ligamiento entre el control y la localizacin
de memoria asociada en donde se guarda el valor de dato del control. En la gran
mayora de los casos, la informacin detallada de campo es inicializada
automticamente mediante SWIM al usar informacin adquirida mediante el llamado
correspondiente a VBA_SetAddr y el diccionario de datos SQL. El uso de un control
no ligado es el nico caso en el que el desarrollador debe llenar la informacin
detallada de campo manualmente, dado que no existir en el diccionario de datos SQL.
La parte Struct.FieldName de la propiedad FieldName debe estar siempre poblada con
un valor de cadena de caracteres en formato bTableName.FieldName. Usando el
ejemplo de arriba, un control para el campo Acct tendra el valor de bAccount.Acct
para la parte Struct.FieldName de su propiedad FieldName. Similarmente, el control
Active tendra el valor de bAccount.Active para la parte Struct.FieldName de su
propiedad FieldName.
La primera parte de esta cadena de caracteres Struct.FieldName, bAccount en
nuestro ejemplo, es usada para ligar el control a un llamado VBA_SetAddr particular,
el cual tiene el mismo valor para su argumento TableNameStr. Una vez que se haga
este ligamiento inicial, se puede determinar la localizacin de memoria exacta,
correlacionando la ltima parte de la cadena de caracteres Struct.FieldName, Acct o
Active en nuestro ejemplo, con la informacin de campo detallada adquirida como
resultado de la llamada VBA_SetAddr relevante.
En general, la llamada VBA_SetAddr facilita el ligamiento de un tipo
bTableName.FieldName de un literal de cadena de caracteres, a una localizacin
precisa de memoria para el valor de dato correspondiente.

240

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La declaracin VBA_SetAddr utiliza los siguientes argumentos:


Argumento

Tipo

Descripcin

TableNameStr

String

Cadena de caracteres literal del nombre de tabla, la cual


puede ser usada subsecuentemente por SWIM para ligar
la parte del nombre de tabla de un tipo de cadena de
caracteres literal bTableName.FieldName a una
localizacin precisa de memoria. Por convencin este
valor debe comenzar con una b, tal como bAccount
para la tabla Account. Nota: Este valor no necesita estar
correlacionado a una tabla de base de datos. En estos
casos, el sistema asumir que hace referencia a una
memoria temporal de datos no ligada. Todas las
referencias hacia nombres de tablas no ligadas en las
propiedades DBNav, Default, FieldName y PV deben ser
acompaadas con con informacin detallada de campo
ingresada manualmente, dado que el sistema estar
incapacitado para acceder a esta informacin desde el
diccionario de datos SQL.

bTableName

Tipo de
datos
definido
por el
usuario

Variable VB cuyo tipo de dato corresponde a la tabla


referida en el argumento TableNameStr. Por ejemplo, si
bAccount es entregado, entonces la variable VB
entregada mediante este argumento debe ser de un tipo
definido por el usuario cuya estructura corresponda
precisamente a la tabla Account en la base de datos.

nTableName

Tipo de
datos
definido
por el
usuario

Variable VB cuyo tipo de dato corresponde a la tabla


referenciada en el argumento TableName. Si
TableNameStr no se correlaciona a una tabla de base de
datos, entonces de debe entregar PNULL como valor de
este argumento. Este valor se inicializar
apropiadamente con valores nulos, mientras la tabla
relevante sea una tabla de base de datos. Cualquier
estructura del tipo de datos relevante puede entonces ser
borarda fcilmente usando la metodologa bTableName
= nTableName.

bTableNameLength

Integer

Largo del completo tipo definido por el usuario


bTableName, tal como Len(bTableName). Nota: En
cdigo adaptado, es crtico usar LenB() en vez de Len().

La declaracin VBA_SetAddr est asociada estrechamente con el control


SAFUpdate. El control SAFUpdate es usado para definir grupos lgicos de
informacin en la pantalla mediante sus propiedades Level, como tambin mediante
llaves expuestas de bases de datos y/o eventos de navegacin en la aplicacin, tales
como OnCancel, NewLevel, OnDelete, OnFinish, y OnUpdate. Todas las
aplicaciones tienen un control SAFUpdate en Form1. Las propiedades del control
SAFUpdate son Customizable (D), Index (D), Left, Levels (D), Name (D), Tag, y
Top. (D significa que la propiedad slo puede ser modificada en tiempo de diseo.)
Tambin vea ApplGetReturnParms y la declaracin Declaracin SqlCursor.

Llamadas de Funciones API de Solomon

241

Ejemplo
External .dh file

Esto declara una estructura que corresponde a la tabla Solomon Country. Note que el
largo exacto del campo debe estar declarado y que las estructuras de memoria temporal
y memoria temporal NULL estn declaradas como global.
Type Country
CountryId

As String * 3

Descr

As String * 30

End Type
Global bCountry As Country, nCountry As Country

En eventos Customization:
(general) declarations

Para adaptacin BSL (BSL customization), agregue la siguiente lnea:


'$include: "cu\country.dh"

Para adaptaciones VB (VB customizations), agregue el archivo .dh al proyecto VBA.


Sub Form1_Load
Call VBA_Setaddr("bcountry", bcountry, ncountry, LenB(bcountry))
Call Sqlcursor(c1, NOLEVEL)
End Sub

Tambin Vea
Propiedad FieldName

Llamadas de Funciones API de Solomon

243

Glosario
BSL
La sigla para el lenguaje Basic Script Language (BSL).

BSL.DH
Un archivo de formato de texto en el directorio de programa Solomon, el cual contiene
declaraciones globales y declaraciones de funciones para todas las funciones de ncleo
de Solomon, las cuales pueden ser usadas en el lenguaje Basic Script Language.

call by reference
Los argumentos entregados por referencia a un procedimiento pueden ser modificados
por el procedimiento. Procedimientos escritos en Basic son definidos para recibir sus
argumentos mediante referencias. Si usted llama un procedimiento tal, y le entrega una
variable, y si el procedimiento modifica su parmetro formal correspondiente,
modificar la variable. El pasar una expresin mediante referencia es legal en Basic; si
el procedimiento llamado modifica su parmetro correspondiente, un valor temporal va
a ser modificado sin efectos aparentes al llamador.

call by value
Cuando se pasa un argumento por medio de valor a un procedimiento, el procedimiento
llamado recibe una copia del argumento. Si el procedimiento llamado modifica su
parmetro formal correspondiente, no tendr efecto en el llamador. Procedimientos
escritos en otros lenguajes, como C, pueden recibir sus argumentos por medio de valor.

comment
Un comentario (comment) es texto que documenta un programa. stos no tienen efecto
en el programa (excepto para metacomandos). En Basic, un comentario (comment)
comienza con una comilla, y contina hasta el final de la lnea. Si el primer caracter del
comentario es un signo pesos ($), el comentario es interpretado como un metacomando
(metacommand). Las neas que comiencen con Rem tambin son comentario.

control ID
Esto puede ser una cadena de caracteres de texto, en cuyo caso es el nombre del control, o puede ser un identidicador numrico (numeric ID). Note que los identificadores
de controles (control IDs) son sensibles a letras maysculas y minsculas y no incluyen
el punto que aparece antes de la identificacin (ID). Identificadores numricos
dependen del orden en el cual los controles de dilogo son definidos. Usted puede
comprobar el nmero de identificacin usando la funcin DlgControlID.

244

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

dialog control
Un tem en una caja de dilogo (dialog box), tal como una caja de lista (list box), caja
combinada (combo box) o botn de comando.

function
Una funcin (function) es un procedimiento que retorna un valor. En Basic, el valor de
retorno se especifica asignando un valor al nombre de la funcin, tal como si la funcin
fuera una variable.

IntelliSense
IntelliSense ayuda a crear cdigo (scripts) libre de errores mediante la presentacin de
nombres de mtodos y propiedades, al tiempo que usted tipea un nombre de un objeto
o API.

label
Una etiqueta (label) identifica una posicin en el programa, en la cual se contina la
ejecucin usualmente como resultado de la ejecucin de una declaracin GoTo. Para
ser reconocida como etiqueta, un nombre debe comenzar en la primera columna, y
debe ser seguida inmediatamente por dos puntos (:). Palabras reservadas no son
etiquetas vlidas.

metacommand
Un metacomando (metacomand) es un comando que da instrucciones al compilador de
como construr el programa. En Basic, los metacomandos son especificados en
comentarios que comienzan con un signo pesos ($).

name
Un nombre (name) en Basic debe partir con una letra (A a la Z). El resto del nombre
puede contener tambin dgitos (0 al 9) y un caracter de subrayado (_). Un nombre no
puede contener ms de 40 caracteres. Caracteres de tipo no son considerados como
parte de un nombre.

Object Model
El modelo de objeto (Object Model) es una especificacin de lo esencial de un objeto
en un sistema dado, que incluye la descripcin de las caractersticas del objeto
(atributos) y una descripcin de las relaciones estticas y dinmicas que existen entre
objetos. En el caso de aplicaciones Solomon, el modelo de objeto es una coleccin de
objetos que representan colectivamente una pantalla.

precedence order
El sistema usa VBA para determinar cul operador evaluar primero, segundo, y as
sucesivamente, dentro de una expresin. Operadores con una precedencia mayor son
evaluados antes de los con precedencia menor. Operadores con igual precedencia son
evaluados de izquierda a derecha. El orden de precedencia por defecto (de mayor a
menor) son: numrico (numeric), cadena de caracteres (string), comparaciones
(comparision), lgico (logical).

Llamadas de Funciones API de Solomon

245

procedure
Un procedimiento (procedure) es una serie de declaraciones VBA y funciones
ejecutadas como una unidad. Subprogramas (Sub) y funciones (Funcin) son llamados
procedimientos.

subprogram
Un subprograma (subprogram) es un procedimiento que no retorna un valor.

type character
Un caracter tipo (type character) es un caracter especial, usado como sufijo para un
nombre de funcin, variable o constante. El caracter define el tipo de dato de la
variable o funcin. Los caracteres son: $ (Dynamic String), % (Integer), & (Long
integer), ! (Single precision floating point), # (Double precision floating point), @
(Currency exact fixed point).

vartype
Es la etiqueta interna usada para identificar el tipo de valor asignado actualmente a una
variable de tipo variante (variant). Se utilizan los siguientes: 0 (Empty), 1 (Null), 2
(Integer), 3 (Long), 4 (Single), 5 (Double), 6 (Currency), 7 (Date), 8 (String), 9
(Object).

VBA Visual Basic for Applications


Microsoft Visual Basic para Aplicaciones (VBA) es la ms importante tecnologa
integrada de desarrollo para aplicaciones de paquetes de software hechos a medida para
integrarlos con datos y sistemas existentes. VBA ofrece una comprensiva serie de
herramientas de programacin basados en el sistema de desarrollo Visual Basic de
Microsoft, el cual es el sistema de desarrollo rpido de aplicaciones ms popular del
mundo.

VBA IDE Integrated Development Environment


El Ambiente de Desarrollo Integrado (IDE) de VBA incluye muchos de los elementos
que son familiares para los desarrolladores que usan Visual Basic, incluyendo una
Ventana de Proyecto (Project Window), una Ventana de Propiedades (Properties
Window) y herramientas de verificacin y correccin de errores.

246

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Llamadas de Funciones API de Solomon

247

ndice
controles ActiveX 3, 11
cursor 165, 186, 187, 197, 198, 200, 203, 207, 209,
217, 221, 225
cursor almacenado 208, 211
custom control 10
Chk 15

A
abortar transacciones 231
ActiveX 2
actualizaciones de bases de datos 191, 226
Add-In Manager 12
Administrador de Adaptaciones 1, 3, 4, 16, 29, 75,
146, 238
AliasConstant 67
almacenamiento 211
ApplGetParms 67
ApplGetParmValue 67
ApplGetReturnParms 78
Application Program Interface 15
ApplSetFocus 67
ApplSetParmValue 67
arreglo de memoria 132, 136, 148

D
DataTips 5
DateCmp 67
DateCheck 67
DateMinusDate 67
DatePlusDays 67
DatePlusMonthSetDay 67
DateToIntlStr 67
DateToStr 67
DateToStrSep 67
DBNavFetch 67
declaracin Select SQL 163
Default 15
Delete 39
DELETE 24
deshabilitar un control 189
diccionario de datos SQL 239
DIM 16
directorio de mdulos VBA 16
DispFields 67
DispForm 67
Display 15
Double 16, 201, 245
Dparm 67
DParm 96

B
bandera de estado de nivel 191, 228
banderas de optimizacin 210
base de datos 17, 31, 41, 46, 50, 51, 63, 89, 90, 91
BlankErr 29
Button clicks 39

C
cabecera 32, 59, 60
cadena de caracteres vaca 196
Call Stack 7
CallChks 67, 82
campo clave 69, 91, 153, 154, 155, 157, 158, 160,
161
campo de caracter 22
campo de datos 33, 40, 70
cargar datos 165
Click 15, 43
cdigo genrico 146
cdigo VBA 16, 39
cdigos de errores 215
Complete Word 5
condicin de error 108, 110, 111, 112, 113
constante simblica ErrNoMess 47, 52, 57, 64,
231, 232, 233
control page 10
control templates 10

E
Edit_Cancel 67
Edit_Close 67, 98
Edit_Delete 67
Edit_Finish 100
Edit_First 101
Edit_Last 68
Edit_New 68
Edit_Next 68
Edit_Prev 68
Edit_Save 68
Editor de Cdigo 5
evento click 123
evento Default 44, 189

248

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

IParm 68
Is_TI 68
Field chk 39
Field default 39
Field PV 39
FieldName 31
Form Display 39
Form Hide 39
Form Load 39
formularios Microsoft 9
FPAdd 68
FParm 68
FPDiv 68
FPMult 68
FPRnd 68, 112
FPSub 68
funciones agregadas 21, 200
funciones de mensaje 18

G
GetBufferValue 68
GetDelGridHandle 68
GetGridHandle 68
GetObjectValue 68
GetProp 68
GetSqlType 68
GetSysDate 68
GetSysTime 68
globales 16, 120, 213, 243
Grid linechk 39
Grid linegotfocus 39
GUI 14

H
habilitado 30
herramientas de deteccin y eliminacin de
errores 7
Hide 15
HideForm 68

I
IDE 1, 4, 6, 7, 245
Immediate window 7
IncrStrg 68
INSERT 24
INSERTED 135, 148, 149, 151, 164, 167, 168, 171
Integer 16
IntelliSense 5, 16, 244
Interface de Aplicacin de Programa 15
IntlStrToDate 125

K
Kernel 16, 17, 24

L
Launch 68
ligamiento 238
LineChk 57
LineChkEvent 15
LineGotFocus 15
List Constants 5
List Properties/Methods 5
Load 15
Locals window 7
llamado SQL 213

M
Mask 33
Max 34
MCallchks 68, 69
MCallChks 131
MClear 69
MClose 69
MDelete 69
MDisplay 69
mensaje 18
Mess 69
Messages.csv 138, 139, 142, 144
Messbox 69
MessBox 141
Messf 69
MessResponse 69
mFindControlName 146
MFirst 69
MGetLineStatus 69
MGetRowNum 69
Microsoft SQL Server 120
Min 35
MInsert 69
MKey 69
MKeyFind 69
MKeyFld 69
MKeyOffset 69
MLast 69
MLoad 69
MNext 69
modelo de objetos 1, 3
mdulo VBTools_VBA 16

Llamadas de Funciones API de Solomon


MPrev 70
MRowCnt 70
MSet 70
MSetLineStatus 70
MSetProp 70
MSetRowNum 70
Msort 70
MSort 175
MUpdate 70

Q
Quick Info 5

R
registro borrado 135
registro compuesto 70, 91, 92, 182, 197, 200, 211,
212, 218
ROI, launch 130
rutinas de uso comn 39

N
NameAltDisplay 70
nivel 17, 191, 207
nivel de batch 17
nivel de detalle 17, 60
nivel macro 48
nmero de mensaje 18, 41, 47, 63, 69, 138, 231
nmero de registro 169, 174

O
objeto 8
objeto ligado 193
objetos de ventana incrustados 14
OLE Controls 11
OnCancel 15, 39
OnDelete 15
OnFinish 15, 39
OnInsert 15, 39
OnUpdate 15, 39
operacin DELETE 46
operacin Insert 65
operacin NEW 46
operacin SAVE 50, 52
operaciones de base de datos 211, 212
operaciones le lectura 211
Option Explicit 16

P
pginas de control 10
PasteTemplate 70
PeriodCheck 70
PeriodMinusPeriod 70
PeriodPlusPerNum 181
procedure 55
propiedad Default 44, 189
propiedad Trigger 40
propiedades 14
PV 15
PVChkFetch 70

249

S
SaveTemplate 70
Sdelete 70
SDelete 186
SdeleteAll 70
SDeleteAll 187
seccin de parmetro 74, 76
seleccin de anterior 106
seleccin de cerrar 98
seleccin de finalizar 100
seleccin de nuevo 103
seleccin de primero 101
seleccin de salvar 107
seleccin de siguiente 104
seleccin de ltimo 102
SetBufferValue 70
SetDefaults 70
SetLevelChg 70
SetObjectValue 70
SetProp 70
SetStatusBarText 70
SFetch 70
SGroupFetch 200
SInsert 71
sintaxis SQL 24
Solomon.ini 80
Sparm 71
SParm 205
Sql 71
SqlCursor 71
SqlCursorEx 71
SqlErr 71
SqlErrException 71
SqlExec 71
SqlFetch 71
SqlFree 71
SqlSubst 71
StrToDate 71
StrToTime 71
SUpdate 71

250

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

T
tabla maestra 60
TestLevelChg 71
TimeToStr 71
TranAbort 71
TranBeg 71
TranEnd 71
TranStatus 71

U
UPDATE 24

V
validacin de errores 189, 193
VB MsgBox statement 142
VBA 1, 3
VBA_Mextend 71
VBA_MExtend 235
VBA_MOpen 71
VBA_SetAddr 71
ventana de propiedades 6
Visor de Objetos 8

W
Watches window 7

Anda mungkin juga menyukai