Está en la página 1de 256

Administrador de Adaptaciones Referencia Visual Basic para Aplicaciones

Versin 7.0

3/2007

Copyright Manual copyright 2007 Microsoft Corporation. All rights reserved. Your right to copy this documentation is limited by copyright law and the terms of the software license agreement. As the software licensee, you may make a reasonable number of copias or printouts for your own use. Making unauthorized copies, adaptations, compilations, or derivative works for commercial distribution is prohibited and constitutes a punishable violation of the law. Trademarks Microsoft, Microsoft Dynamics, ActiveX, Excel, FRx, FrontPage, MapPoint, Outlook, SharePoint, Visual Basic, Visual Studio, Windows, and Windows Server are either registered trademarks or trademarks of Microsoft Corporation, FRx Software Corporation, or their affiliates in the United States and/or otros countries. FRx Software Corporation is a wholly owned subsidiary of Microsoft Corporation. BIO and BIO Vue are trademarks or registered trademarks of NexVue Analytics Corporation in the United States and/or otros countries. The names of actual companies and products mentioned herein may be trademarks or registered marks - in the United States and/or otros countries - of their respective owners. The example companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, e-mail address, logo, person, place, or event is intended or should be inferred. Warranty disclaimer Microsoft Corporation disclaims any warranty regarding the sample code contained in this documentation, including the warranties of merchantability and fitness for a particular purpose. Limitation of liability The content of this manual is furnished for informational use only, is subject to change without notice, and should not be construed as a commitment by Microsoft Corporation. Microsoft Corporation assumes no responsibility or liability for any errors or inaccuracies that may appear in this manual. Neither Microsoft Corporation nor anyone else who has been involved in the creation, production or delivery of this documentation shall be liable for any indirect, incidental, special, exemplary or consequential damages, including but not limited to any loss of anticipated profit or benefits, resulting from the use of this documentation or sample code. License agreement Use of this product is covered by a license agreement provided with the software product. If you have any questions, please call the Customer Assistance Department at 800-456-0025 (in the United States or Canada) or +1-701-281-6500. Publication Date March 2007

Tabla de Contenidos

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

Programando VBA en Microsoft Dynamics SL

Modelo de Objetos de Ventanas Microsoft Dynamics SL .......................................................................4 Ambiente de Desarrollo Integrado VBA..................................................................................................4 Objetos ...................................................................................................................................................14 Eventos...................................................................................................................................................15 APIs........................................................................................................................................................15 Declarando Variables .............................................................................................................................16 Incluyendo Archivos Externos ...............................................................................................................16 Niveles y Eventos...................................................................................................................................17 Funciones de Mensaje ............................................................................................................................18 Ejemplo de Funciones de Fecha.............................................................................................................19 Estructuras..............................................................................................................................................21 Flujo transaccional de los Campos de Usuario.......................................................................................22 Tratar Campo de Caracteres tal como Campos de Fecha .......................................................................22 Usando Declaraciones SQL ...................................................................................................................23 Trabajando con Grillas ...........................................................................................................................24

Propiedades

27

Propiedad BlankErr ................................................................................................................................27 Propiedad Enabled .................................................................................................................................28 Propiedad FieldName.............................................................................................................................29 Propiedad Heading .................................................................................................................................30 Propiedad Mask......................................................................................................................................31 Propiedad Max .......................................................................................................................................32 Propiedad Min........................................................................................................................................33 Propiedad TabIndex ...............................................................................................................................34 Propiedad Visible ...................................................................................................................................35

Eventos de Pantalla Microsoft Dynamics SL

37

Eventos de Control Microsoft Dynamics SL..........................................................................................37 Evento Chk (Objeto de Control de Microsoft Dynamics SL) ................................................................38 Evento Click (Objeto de Control de Microsoft Dynamics SL) ..............................................................41 Evento Default (Objeto de Control de Microsoft Dynamics SL) ...........................................................42 Evento OnDelete (Objeto de Control de Microsoft Dynamics SL)........................................................44 Evento PV (Objeto de Control de Microsoft Dynamics SL)..................................................................46 Evento OnUpdate (Objeto de Control de Microsoft Dynamics SL).......................................................48 Evento Display (Objeto de Formulario de Microsoft Dynamics SL).....................................................52 Evento Hide (Objeto de Formulario de Microsoft Dynamics SL) .........................................................53

ii

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones Evento Load (Objeto de Formulario de Microsoft Dynamics SL) .........................................................54 Evento LineChk (Objeto de Grilla de Microsoft Dynamics SL) ............................................................55 Evento LineGotFocus (Objeto de Grilla de Microsoft Dynamics SL) ...................................................57 Evento OnCancel (Objeto de Actualizacin Microsoft Dynamics SL) ..................................................59 Evento OnFinish (Objeto de Actualizacin de Microsoft Dynamics SL) ..............................................61 Evento OnInsert (Objeto de Actualizacin de Microsoft Dynamics SL) ...............................................63

Llamadas de Funciones API de Microsoft Dynamics SL

65

Resumen de Referencia de API de Microsoft Dynamics SL..................................................................65 AliasConstant (Instruccin)....................................................................................................................71 ApplGetParms (Funcin) .......................................................................................................................72 ApplGetParmValue (Funcin)................................................................................................................73 ApplGetReturnParms (Funcin).............................................................................................................76 ApplSetFocus (Instruccin)....................................................................................................................77 ApplSetParmValue (Instruccin) ...........................................................................................................78 CallChks (Funcin) ................................................................................................................................80 DateCheck (Funcin) .............................................................................................................................81 DateCmp (Funcin)................................................................................................................................82 DateMinusDate (Funcin)......................................................................................................................83 DatePlusDays (Instruccin)....................................................................................................................84 DatePlusMonthSetDay (Instruccin)......................................................................................................85 DateToIntlStr (Funcin) .........................................................................................................................86 DateToStr (Funcin) ..............................................................................................................................87 DateToStrSep (Funcin).........................................................................................................................88 DBNavFetch (Funciones).......................................................................................................................89 DispFields (Instruccin) .........................................................................................................................91 DispForm (Instruccin) ..........................................................................................................................93 DParm (Funcin)....................................................................................................................................94 Edit_Cancel (Instruccin).......................................................................................................................95 Edit_Close (Instruccin).........................................................................................................................96 Edit_Delete (Funcin) ............................................................................................................................97 Edit_Finish (Funcin) ............................................................................................................................98 Edit_First (Funcin) ...............................................................................................................................99 Edit_Last (Funcin)..............................................................................................................................100 Edit_New (Funcin) .............................................................................................................................101 Edit_Next (Funcin).............................................................................................................................102 Edit_Prev (Funcin) .............................................................................................................................104 Edit_Save (Instruccin)........................................................................................................................105 FPAdd (Funcin)..................................................................................................................................106 FParm (Funcin) ..................................................................................................................................107 FPDiv (Funcin)...................................................................................................................................108 FPMult (Funcin).................................................................................................................................109 FPRnd (Funcin) ..................................................................................................................................110 FPSub (Funcin) ..................................................................................................................................111 GetBufferValue (Instruccin)...............................................................................................................112 GetDelGridHandle (Funcin)...............................................................................................................113 GetGridHandle (Funcin).....................................................................................................................114 GetObjectValue (Funcin) ...................................................................................................................115 GetProp (Funcin)................................................................................................................................116

Tabla de Contenidos

iii

GetSqlType (Funcin)..........................................................................................................................118 GetSysDate (Instruccin) .....................................................................................................................119 GetSysTime (Instruccin) ....................................................................................................................120 HideForm (Instruccin)........................................................................................................................121 IncrStrg (Instruccin) ...........................................................................................................................122 IntlStrToDate (Instruccin) ..................................................................................................................123 IParm (Funcin) ...................................................................................................................................124 Is_TI (Funcin) ....................................................................................................................................125 Launch (Funcin) .................................................................................................................................126 MCallChks (Funcin)...........................................................................................................................129 MClear (Instruccin)............................................................................................................................130 MClose (Instruccin) ...........................................................................................................................131 MDelete (Funcin) ...............................................................................................................................133 MDisplay (Instruccin) ........................................................................................................................134 Mess (Instruccin)................................................................................................................................136 MessBox (Instruccin) .........................................................................................................................139 Messf (Instruccin) ..............................................................................................................................140 MessResponse (Funcin) .....................................................................................................................143 mFindControlName (Funcin).............................................................................................................144 MFirst (Funcin) ..................................................................................................................................146 MGetLineStatus (Funcin)...................................................................................................................147 MGetRowNum (Funcin) ....................................................................................................................148 MInsert (Instruccin) ...........................................................................................................................149 MKey (Instruccin)..............................................................................................................................151 MKeyFind (Funcin) ...........................................................................................................................153 MKeyFld (Instruccin).........................................................................................................................155 MKeyOffset (Instruccin) ....................................................................................................................158 MLast (Funcin)...................................................................................................................................162 MLoad (Instruccin) ............................................................................................................................163 MNext (Funcin)..................................................................................................................................165 MPrev (Funcin) ..................................................................................................................................166 MRowCnt (Funcin) ............................................................................................................................167 MSet (Instruccin) ...............................................................................................................................168 MSetLineStatus (Funcin) ...................................................................................................................169 MSetProp (Instruccin) ........................................................................................................................171 MSetRowNum (Instruccin) ................................................................................................................172 MSort (Instruccin)..............................................................................................................................173 MUpdate (Instruccin) .........................................................................................................................174 NameAltDisplay (Funcin) ..................................................................................................................175 PasteTemplate (Funcin)......................................................................................................................176 PeriodCheck (Funcin) ........................................................................................................................177 PeriodMinusPeriod (Funcin) ..............................................................................................................178 PeriodPlusPerNum (Funcin) ..............................................................................................................179 PVChkFetch (Funciones) .....................................................................................................................180 SaveTemplate (Instruccin) .................................................................................................................182 SDelete (Instruccin) ...........................................................................................................................184 SDeleteAll (Funcin) ...........................................................................................................................185 SetBufferValue (Instruccin) ...............................................................................................................186 SetDefaults (Instruccin)......................................................................................................................187 SetLevelChg Statement (Instruccin) ..................................................................................................189

iv

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones SetObjectValue (Funcin)....................................................................................................................191 SetProp (Instruccin)............................................................................................................................192 SetStatusBarText (Instruccin) ............................................................................................................194 SFetch Funciones .................................................................................................................................195 SGroupFetch Funciones .......................................................................................................................198 SInsert (Instruccin) .............................................................................................................................201 SParm (Funcin) ..................................................................................................................................203 Sql (Instruccin)...................................................................................................................................204 SqlCursor (Instruccin) ........................................................................................................................205 SqlCursorEx (Instruccin)....................................................................................................................207 SqlErr (Funcin)...................................................................................................................................211 SqlErrException (Instruccin)..............................................................................................................213 SqlExec (Instruccin) ...........................................................................................................................215 SqlFetch Funciones ..............................................................................................................................216 SqlFree (Instruccin)............................................................................................................................220 SqlSubst (Instruccin) ..........................................................................................................................221 StrToDate (Instruccin)........................................................................................................................222 StrToTime (Instruccin).......................................................................................................................223 SUpdate (Instruccin)...........................................................................................................................224 TestLevelChg (Funcin).......................................................................................................................227 TimeToStr (Funcin)............................................................................................................................229 TranAbort (Instruccin) .......................................................................................................................230 TranBeg (Instruccin) ..........................................................................................................................231 TranEnd (Instruccin) ..........................................................................................................................232 TranStatus (Funcin)............................................................................................................................233 VBA_MExtend (Funcin)....................................................................................................................234 VBA_MOpen Funciones......................................................................................................................235 VBA_SetAddr (Instruccin).................................................................................................................237

Glosario ndice

243 247

Introduccin

Introduccin
Bienvenido a Visual Basic para Aplicaciones
Microsoft Visual Basic para Aplicaciones (VBA) lidera la industria en el poder, la facilidad de integracin y la compatibilidad con Visual Basic. VBA le ayudar a 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 Dynamics SL. Una completa lista de referencia sobre acerca de la interfaz de programacin de aplicacin (API) de Microsoft Dynamics SL.

Utilizado para complementar el producto Visual Basic para Aplicaciones disponible en el mdulo del Administrador de Adaptaciones, este manual se divide en las siguientes secciones:

Programando VBA en Microsoft Dynamics SL


Entrega un resumen de las implementaciones de Microsoft Visual Basic para Aplicaciones (VBA) de Microsoft Dynamics SL. Dentro de los tpicos discutidos se incluye el Modelo de Objetos, el ambiente integrado de desarrollo de VBA (IDE), cmo declarar variables, cmo incluir archivos externos y el uso de instrucciones SQL.

Propiedades
Describe las propiedades disponibles en el lenguaje Visual Basic para Aplicaciones.

Eventos de Pantalla de Microsoft Dynamics SL


Describe y entrega ejemplos de los eventos de pantalla VBA. Estos abarcan varios controles de ventana y objetos.

Llamadas a Funciones API de Microsoft Dynamics SL


Describe y entrega ejemplos de funciones API Microsoft Dynamics SL disponibles en el lenguaje de Visual Basic para Aplicaciones.

Glosario
Define palabras y terminologa usada comnmente 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: Declaraciones y funciones La sintaxis es: Negrita; caracter inicial en mayscula: Abs Lenb(variable) Todas en minscula, letras en cursiva: variable, rate, prompt$ Argumentos en cursiva y/o caracteres en corchetes: [ ,caption$], [type$], [$] Una lista dentro de llaves, separando las opciones mediante el operador O: {Goto label | Resume Next | Goto 0}

Argumentos de declaraciones o funciones Argumentos y/o caracteres opcionales Opcin requerida (de una lista de opciones) para un argumento

Programando VBA en Solomon

Programando VBA en Microsoft Dynamics SL


Microsoft Visual Basic para Aplicaciones (VBA) es una tecnologa integrada de desarrollo que le ayudar a adaptar paquetes de aplicaciones de software e 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. Con Microsoft VBA, usted puede 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 Microsoft Dynamics SL, 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 dentro del Administrador de Adaptaciones ofrece estas importantes ventajas: Tecnologa VBA comn la misma versin de VBA que 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 los desarrolladores de software a travs del mundo. Paridad absoluta del lenguaje core con Microsoft Visual Basic el mismo mejoramiento del lenguaje que ha tenido la herramienta de desarrollo de aplicaciones rpida de Microsoft. IDE localizado y ayuda en lnea soporte para desarrolladores que trabajan en idiomas diferentes al ingls. Tecnologa IntelliSense de Microsoft referencia instantnea para la sintaxis de APIs Microsoft Dynamics SL y asistencia instantnea con el modelo de objetos. Formularios Microsoft la capacidad para crear formularios con mucho contenido y ventanas de dilogo a su medida en cualquier aplicacin Microsoft Dynamics SL. Soporte de controles ActiveX inserte controles ActiveX directamente en los formularios Microsoft.

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Modelo de Objetos de Ventanas Microsoft Dynamics SL


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

Ambiente de Desarrollo Integrado VBA


El ambiente de desarrollo integrado (IDE) es el ambiente de desarrollo que un desarrollador utiliza para crear una solucin custom que involucra escribir cdigo VBA. El ambiente para editar y eliminar errores (debugging), el Editor Visual Basic, existe fuera de Microsoft Dynamics SL. Esto permite a los desarrolladores escribir cdigo y ver el resultado de la programacin en la aplicacin Microsoft Dynamics SL en forma simultnea. A pesar de que el IDE reside fuera de Microsoft Dynamics SL, 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. Los desarrolladores pueden abrir ventanas de cdigo para cualquier objeto que contenga cdigo (por ejemplo una ventana Microsoft Dynamics SL), como tambin los mdulos, clases o formularios (forms) agregados al proyecto VBA. En cada ventana, las caractersticas IntelliSense (figura 2) entregan ayuda en sintaxis y programacin: Palabra Completa completa la palabra que est siendo ingresada cuando se han ingresado suficientes letras como para hacer la palabra distinguible. Informacin Rpida ayuda para entregar informacin de sintaxis, la cual aparece automticamente 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 tambin permite a los desarrolladores especificar indicadores de margen para establecer un breakpoint, establecer la siguiente instruccin, o establecer un bookmark haciendo un simple click en el margen de la ventana 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


El Project Explorer del VBA IDE muestra los componentes del proyecto VBA (por ejemplo formularios , mdulos y referencias) asociadas con cada proyecto abierto. La ventana Properties muestra las propiedades de objetos de aplicacin, formularios, 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 (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 distinguir rpidamente entre los errores de compilacin, programacin lgica o errores de tiempo de ejecucin. Estas herramientas incluyen: Ventana Locals muestra automticamente todo los valores de las variables en el rea de accin actual. Ventana Watches permite monitorear variables especficas o expresiones de valores; permite interrumpir la ejecucin del cdigo basado en el estado de un valor de expresin de la observacin. Ventana Immediate evala cualquier declaracin o expresin de Visual Basic. Call Stack visualiza procedimientos y llamados activos durante el modo break. Para mejorar la eficiencia de la deteccin y eliminacin de errores, desarrolladores 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 aplicacin en forma rpida es clave para el desarrollo eficiente de Microsoft Dynamics SL eficiente. El IDE le entrega a los desarrolladores esta capacidad con el Visor de Objetos (Object Browser), el cual meticulosamente diferencia entre propiedades built-in, propiedades custom properties, mtodos, manejadores de eventos y procedimientos definidos por el usuario (figura 6). El Visor de Objetos tambin muestra tipos de retorno de funciones, nombres de parmetros y tipos, y tipos y constantes definidos por el usuario. Saltos hyperlink a objetos referenciados permiten una fcil navegacin en la jerarqua de objetos. Los desarrolladores pueden utilizar el Visor de Objetos para buscar objetos y miembros a travs de bibliotecas de tipos.

Figura 6: Visor de Objetos (Object Browser)

Programando VBA en Solomon

Formularios Microsoft y Diseador de Formularios Integrado Microsoft


Aparte de la edicin de cdigo y su ejecucin, VBA entrega al desarrollador un gran control de la apariencia fsica mediante el uso del poderoso diseador de formularios Microsoft Forms. Con los Microsoft Forms, los desarrolladores necesitan aprender como crear ventanas de dilogo solamente una vez. Despus de eso, el proceso de diseo es el mismo para cada nueva ventana de dilogo. Lo que es ms, las ventanas 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 pueden ser desplegados sin modo, los usuarios pueden interactuar con las ventanas de dilogo de la aplicacin Microsoft Dynamics SL mientras se est mostrando la ventana de dilogo. Para complementar Microsoft Forms est Integrated Form Designer de IDE (el diseador de formularios integrado IDE). Completamente integrado en IDE, el Form Designer proporciona un teln visual que permite al desarrollador utilizar elementos de interfaz 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)

Los desarrolladores colocan controles de dilogo sobre el formulario utilizando las caja de herramientas de controles (ControlsToolbox). Una vez que los controles estn en el formulario, estos pueden ser movidos, cambiados de tamao o duplicados rpidamente segn las necesidades. La caja de herramientas de control (Controls Toolbox) puede ser configurada para mostrar todos los controles o puede ser personalizada de la siguiente forma: Creando plantillas de controles arrastre el(los) control(es) desde un formulario regreso a la barra de herramientas de controles (Controls Toolbox) para crear una plantilla de control reutilizable. Agregando o quitando 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 asociadas (ToolTip).

Programando VBA en Solomon

11

Soporte de controles ActiveX (ActiveX Control Support)


Los formularios de Microsoft soportan controles ActiveX (ActiveX Controls), llamados anteriormente OLE Controls o controles hechos a la medida. Los controles ActiveX son componentes de software pre-hechos, reusables, los cuales permiten a los desarrolladores 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)


VBA soporta completamente add-ins para propsitos especiales, como escritores de cdigo y diseadores de formularios, los cuales: Son creados como componentes Component Object Model (COM). Soporta de interface IDTExtensibility2.

Cualquier 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


Para proteger la propiedad intelectual y la integridad de sus adaptaciones, los desarrolladores pueden proteger mediante una clave cada proyecto de VBA.

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

14

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

Objetos de Ventana Incrustados


Los objetos que existen en la aplicacin Microsoft Dynamics SL 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 los dilogos de propiedades en el mdulo de Administrador de Adaptaciones. 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
Un evento es una actividad que ocurre dentro del ambiente de la ventana en un momento determinado (por ejemplo: al hacer click con el mouse, al cargar un formulario, o cuando se graba un registro). Los eventos son tpicamente parte de las propiedades de los objetos Microsoft Dynamics SL. Los eventos y sus objetos asociados se muestran resumidamente en la siguiente lista:
Evento: Click Default Chk PV (possible value) LineGotFocus LineChkEvent Load Display Hide OnFinish OnInsert OnCancel OnUpdate OnDelete Tipo de Objeto Asociado: Button Control Control Text Control Grid Grid Form Form Form Update Update Update Update Update

APIs
Microsoft Dynamics SL proporciona un comprensivo conjunto de funciones e instrucciones de Interfaz de Programa de Aplicacin (API) que son completamente compatibles con el lenguaje VBA. Efectuando actividades que abarcan desde validar una fecha hasta apodar ciertas constantes Microsoft Dynamics SL utilizadas especficamente por el mdulo de Importacin de Transacciones, estas APIs pueden cubrir prcticamente cualquier necesidad de desarrollo que su aplicacin pueda tener. Las APIs de actuales estn listadas y explicadas en Llamadas de Funciones API de Microsoft Dynamics SL , 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 Microsoft Dynamics SL, usted debe seguir ciertas reglas especficas al declarar variables. No sea redundante en sus declaraciones de variables. Considere declararlas 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 al comienzo de cualquier archivo externo. Esto es una funcin de Visual Basic que asegura una declaracin de variable explcita. Tanto Visual Basic como VBA soportan el uso de $, % y # como variables String, Integer y Double respectivamente. Usted no necesita establecer campos custom en (NULL) bajo control del programa. Al declarar dos variables globales tal como se muestra en los ejemplos de tipo de estructura, usted simplemente necesita establecer bRecord = nRecord para anular el registro o bRecord.FieldName = nRecord.FieldName para anular un campo 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 Microsoft Dynamics SL bajo 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 explcitamente por el programa VBA (serr=,serr1=, etc.). El mdulo VBTools_VBA tambin contiene declaraciones de funciones y subrutinas en el Kernel de Microsoft Dynamics SL (Swimapi.dll) que pueden ser utilizados en un programa VBA. Todas las funciones y rutinas que sean estndard de Visual Basic (Format$, Trim$, etc.) y que estn documentadas en la ayuda de Visual Basic para Aplicaciones y aquellas funciones declaradas explcitamente 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 Microsoft Dynamics SL 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 en la misma forma que el 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 Microsoft Dynamics SL en el mdulo VBTools_VBA. Si usted conoce el nombre del objeto, usted no necesita agregar ningn cdigo en la ventana de eventos para el objeto Microsoft Dynamics SL. 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 incluir este archivo, esta rutina se llama en forma automtica. Las nicas dos excepciones a esto son que usted no puede tener Update o Delete como nombre de Sub. Estas son palabras reservadas de VB. En estos dos casos usted necesita haber codificado en la ventana el llamado a rutinas externas

Niveles y Eventos
Cada vez que un nuevo campo es insertado en un formulario, usted necesita especificar el nivel asociado con ese campo. Un nivel 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 distintos: batch y detalle. El nivel batch contiene los campos asociados con la tabla Batch mientras que el nivel de detalle contiene campos asociados con la tabla GLTran de Contabilidad. 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 Microsoft Dynamics SL 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, colocar un Select Case Level al comienzo del evento apropiado realiza esto. Por ejemplo, el siguiente cdigo en 01.010 se 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
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 strings de mensajes. Por ejemplo, en el Visual Basic estndar, usted tiene que declarar tres variables para almacenar el string del mensaje, 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 de Microsoft Dynamics SL. De esta forma, usted puede eliminar la necesidad de declarar estas variables extras y referenciar el nmero de mensaje en la llamada de la instruccin del mensaje. 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 Microsoft Dynamics SL mediante el tipo Msg_Type = 1, siempre y cuando usted indique el nmero de mensaje y los strings de sustitucin apropiados. Asegrese de asignar un valor muy alto a un nuevo mensaje que usted cree, para que el desarrollo del producto Microsoft no lo sobreescriba en el futuro. El campo Msg_Id en esta tabla es un entero, por lo que usted podra comenzar los mensajes en el rango de los 30000 para estar seguro. Usted tambin puede pasar parmetros de sustitucin adicionales a los mensajes.

Programando VBA en Solomon

19

Ejemplo de Funciones de Fecha


Esta rutina de ejemplo configura un campo de fecha existente con 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 incluir .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

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
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 incluir todos los campos en la declaracin de seleccin y cualquier campo en la restriccin no incluido 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


Los campos de usuario en las tablas de detalle transaccionales de Microsoft Dynamics SL se transmiten automticamente a la Contabilidad si usted asienta en detalle. Por ejemplo, si usted coloca ARTran.User1 en el rea de detalle de HandPreparedIncoices(08.010.00), el campo correspondiente GLTran.User1 es establecido en el mismo valor al momento de liberar. De esta forma, los campos adaptados pueden ser reportados en los reportes de transaccin de Contabilidad.

Tratar Campo de Caracteres tal como Campos de Fecha


An cuando los campos de string de caracteres y los campos de punto flotante 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 el campo User1 o el campo User2 en un formulario, ajuste el tamao apropiadamente y luego coloque la propiedad Mask en 99/99/99. Para manejar la verificacin de errores se debe insertar el siguiente cdigo. Para asignar por omisin al campo la fecha de sistema actual, debe existir el siguiente evento defaultr:
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 debe ser forzado explcitamente para ser ejecutado por lo siguiente (Note que esto ser colocado tpicamente en un evento chk precedente):
serr = setdefaults("Form1", "cuser1")

Para realizar verificacin 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 End If End Sub

Programando VBA en Solomon

23

Usando Declaraciones SQL


El utilizar VBA requiere el conocimiento de la sintaxis SQL, su uso en las bases de datos SQL de Microsoft Dynamics SL y el Kernel Microsoft Dynamics SL. Para informacin acerca de la creacin de declaraciones SQL y su sintaxis, refirase a la documentacin apropiada de bases de datos SQL que es suministrada junto al software SQL. Existen dos mtodos para recobrar registros utilizando las funciones API sqlfetch() de Microsoft Dynamics SL. Usted puede declarar una variable string que guarde la declaracin SQL y utilizar esta variable en la llamada sqlfetch, o usted puede crear un procedimiento almacenado SQL y referenciar el nombre del procedimiento almacenado en el llamado sqlfetch. 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.

24

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Trabajando con Grillas


Usted puede aadir funcionalidades adicionales al objeto grilla. 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

Programando VBA en Solomon

25

Este ejemplo utiliza 01.010 para crear automticamente una entrada autobalanceada 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

26

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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 con 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

Propiedades Solomon

27

Propiedades
Propiedad BlankErr
Determina si un valor vlido debe ser introducido o asignado por omisin para el campo.

Observaciones
Una configuracin de Verdadero indica que este campo necesita un valor. Una configuracin de Falso indica que el campo es opcional. Los campos deshabilitados y/o invisibles no deberan ser requeridos a menos que sean configurados automticamente con un valor vlido. Si un control es marcado como requerido por la aplicacin, entonces no puede ser marcado como opcional utilizando el Administrador de Adaptaciones. Sin embargo, si un control es marcado como opcional desde la aplicacin, puede ser 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 Visual Basic. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de las propiedades para evitar conflictos con las adaptaciones.

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

28

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Propiedad Enabled
Determina si es que el usuario puede o no modificar el contenido de un control.

Observaciones
Un valor de True indica que este control est habilitado, mientras que un valor False deshabilita este control. Los 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 en runtime, debera utilizarse la declaracin SetProp, en vez de modificar el valor de la propiedad directamente en el cdigo de Visual Basic. 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 (Todos los usuarios, Un usuario, etc.). Vea la seccin de Seguridad de la documentacin de Administrador de Adaptaciones. La propiedad Enabled no debera ser usada en el control SAFGrid.

Tambin Vea
Propiedad BlankErr, Declaracin SetProp, Propiedad Visible

Propiedades Solomon

29

Propiedad FieldName
Facilita un enlace apropiado en tiempo de ejecucin entre el control y sus variables de datos Visua Basic subyacentes, operando en conjunto con la declaracin SetAddr .

Observaciones
La informacin de cada control individual de entrada de datos es almacenada en una variable Visual Basic subyacente. En tiempo de ejecucin el control y la variable asociada de almacenamiento Visual Basic son enlazados usando una combinacin de la propiedad FieldName del control y un llamado correspondiente a la declaracin SetAddr desde 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, se debe introducir un valor 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 Field Offset, Declare Type y 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 estndar.
Tipo de dato SQL Character Integer(2) Float Date Logical Tipo de dato VB String Integer Double Sdate Integer Tipo de Declaracin 0 1 2 3 7 Longitud Largo del String 2 8 4 2

Tambin Vea
Declaracin VBA_SetAddr

30

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

Observaciones
Los encabezados de columna que contienen ms de una lnea pueden ser implementados, 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 Visual Basic. 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 el encabezado de la columna.

Tambin Vea
Declaracin MSetProp, declaracin SetProp

Propiedades Solomon

31

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

Observaciones
Cada caracter en la propiedad Mask corresponde a un caracter en el campo desplegado. Si un caracter de mscara particular 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 un string literal para ser desplegada dentro del campo. Estas cadenas de caracteres literales son display-only, haciendo que el cursor salte sobre ellas al introducir valores. Adems, las cadenas de caracteres literales no sern almacenadas en el valor resultante del campo de datos subyacente, 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 Visual Basic. 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 (Todos los usuarios, 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 9 A V N W X L U M 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 al usarlo en campos llave en donde el uso de caracteres comodn * y ? pueden afectar el uso de la palabras clave LIKE en declaraciones SQL.) Hexadecimal (0-9, A-F)

Tambin Vea
Declaracin SetProp

32

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 Visual Basic. 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

33

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 Visual Basic. 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

34

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

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 o invisible. Adems, el valor de la propiedad TabIndex puede ser modificado 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 rango 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 designada 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

35

Propiedad Visible
Determina si el control es visible o no.

Observaciones
Un valor verdadero (True) indica que el control est visible, mientras que el valor falso (False) hace que el control est invisible. Los campos requeridos no debieran hacerse invisibles, a menos que sean reseteados con 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 Visual Basic. 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 hecho invisible por la aplicacin, entonces no puede ser hecho visible utilizando el Administrador de Adaptaciones. Sin embargo, si un control es hecho visible por la aplicacin, puede ser hecho invisible por el Administrador de Adaptaciones. La siguiente observacin menciona cmo la propiedad Visible se relaciona con el control SAFGrid. En tiempo de ejecucin, el software fuerza a la grilla a estar visible durante la carga inicial. No establezca esta propiedad en tiempo de diseo para el control SAFGrid. De la misma forma, no llame a SetProp() en un control en vista de formulario porque revela un intento de modificar la propiedad Visible en una base 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 u ocultar 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 a menos de que el Mdulo XYZ haya sido instalado y configurado. Finalmente, supongamos que el Mdulo XYZ no est instalado ni configurado. Esto significara que la Aplicacin A necesita ocultar 7, 8, 9 y 10. Dado que estos campos estn asociados con un SAFGrid, desearamos ocultar 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, establezca la propiedad Visible del frame subyacente en falso (False).

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

36

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Eventos de Ventana Solomon

37

Eventos de Pantalla Microsoft Dynamics SL


Eventos de Control Microsoft Dynamics SL
Use el editor de Visual Basic (VBE) para introducir cdigo VBA asociado con un objeto o control. Muchos de los objetos 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 VBE, 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 concepto de eventos. Los eventos son simplemente acciones que ocurren en un lapso de tiempo determinado: al hacer un click con el mouse, cuando un formulario 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 Button clicks Field default Field chk Field PV Grid linegotfocus Grid linechk Form Load Form Display Form Hide Finish Insert Cancel Update Delete El evento ocurre antes o despus del evento de la aplicacin subyacente Antes Despus Despus Antes del dilogo PV de la aplicacin (F3 o doble click del botn derecho del mouse) Despus Despus Despus de cargarse el formulario de la aplicacin Despus de aparecer el formulario de la aplicacin Antes de cerrarse la aplicacin Despus Despus del evento New de la aplicacin Despus Antes (antes de que la aplicacin llame a tranend) Antes (antes de que la aplicacin llame a tranend)

38

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Chk (Objeto de Control de Microsoft Dynamics SL)


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
Cada vez que el usuario modifica el valor de un campo, generalmente el nuevo valor necesita ser validado (por ejemplo verificacin 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 es donde 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 momento, cuando el usuario no modific directamente el valor de un control. Por ejemplo, navegar sobre registros existentes en un nivel normal utilizando los botones First, Last, Prev y Next de la barra de herramientas es conceptualmente equivalente a que el usuario ingresara nuevos valores claves para visualizar diferentes registros. Como consecuencia de esto, cuando se navega 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 FieldA y FieldB, de tal forma que el FieldB deba ser revalidado (por ejemplo, su evento Chk deba ser llamado) cada vez que el valor del FieldA se modifique. El evento Chk utiliza los siguientes argumentos:
Argumento Index Tipo Integer Descripcin 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. 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.

ChkStng

string

Eventos de Ventana Solomon


retval Integer 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 automticamente por el sistema una vez que el control del programa sale del evento Chk.

39

La siguiente tabla describe los valores posibles que pueden ser asignados a RetVal y su efecto correspondiente en el sistema una vez que el control del programa sale del evento Chk:
RetVal NoAutoChk Descripcin 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 debera 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, lo que es opuesto a ser rechazado. Cuando RetVal es iniciado con un nmero de mensaje especfico, el correspondiente mensaje del archivo de mensajes ser desplegado automticamente 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. Establecer en RetVal 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. 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 parmetros 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.

A Message Number

ErrNoMess

Ejemplo 1
El siguiente ejemplo muestra el evento Chk, en un campo de control 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.

40

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones Este cdigo fue obtenido realmente desde el evento Chk del campo Earnings Type de la subpantalla Timesheet Defaults de la pantalla Employee Maintenance (02.250.00) de Payroll. Esta aplicacin particular requiere que el tipo default Earnings para todos los empleados contribuya al pago neto. De esta forma, no es suficiente que el usuario ingrese solamente los ID de cualquier tipo Earning. Ms bien, los Earnings Type tambin tienen que ser definidos como contribuyentes al pago neto. Si el Earnings Type no contribuye al pago neto, entonces ser rechazado simplemente fijando RetVal a un nmero de mensaje particular de que explica la naturaleza del problema. El nmero de mensaje 260 es el mensaje que ser desplegado realmente y el texto asociado en el archivo de mensajes 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

41

Evento Click (Objeto de Control de Microsoft Dynamics SL)


Ocurre cuando se presiona un botn de comando.

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 Index Tipo Integer Descripcin Argumento opcional que depende si el control est asociado a un arreglo de controles o no. Este valor es usado para identificar en forma nica al control dentro de un arreglo de controles.

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

42

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Default (Objeto de Control de Microsoft Dynamics SL)


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

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

Observaciones
El valor por defecto para cualquier control de entrada de datos particular puede ser especificado mediante la propiedad Default o el evento Default. La propiedad Default puede ser usada cuando el valor por defecto no es casual por sobre todo otro item de datos. Sin embargo, si la metodologa para determinar los valores por defecto varan segn situaciones particulares, entonces se debera escribir cdigo 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 Visual Basic a la cual el control est enlazado establece 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 Index Tipo Integer Descripcin Argumento opcional dependiendo si el control est asociado a un arreglo de controles o no. Este valor es utilizado para identificar un control determinado dentro de un arreglo de controles. 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. Un valor positivo, no cero, de retorno suprime futuras actiones de default incluyendo adaptaciones por defecto y llamadas de gatilladores (trigger calls).

OldValue

String

retval

integer

Eventos de Ventana Solomon

43

Ejemplo
Si un control (cFieldA) es enlazado 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 forma tal que bTableA.FieldA = StringValue.
Sub cFieldA_Default(newvalue$, retval%) 'Default this field to 'String Value' Call SetBufferValue("bTableA.FieldA", "StringValue") End Sub

44

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento OnDelete (Objeto de Control de Microsoft Dynamics SL)


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 herramientas. La nica excepcin es cuando el usuario borra una lnea de detalle desde una grilla, en cuyo caso el evento LineChk es llamado. Una operacin DELETE est compuesta por la siguiente serie de acciones y/o eventos. Si la aplicacin contiene ms de un nivel Normal entonces el usuario ser consultado acerca de cul de los registros de nivel 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 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 a travs 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 automticamente 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

45

El evento OnDelete utiliza los siguientes argumentos:


Argumento Level LevelsDone Retval Tipo Integer Integer Integer Descripcin Nivel que es procesado en este momento. Nmeros de niveles que ya han sido procesados en el contexto de la operacin DELETE actual. El borrado automtico de la tabla maestra 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 estableciendo RetVal en un nmero de mensaje o la constante simblica ErrNoMess definida en el mdulo VBATools_VBA.

46

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento PV (Objeto de Control de Microsoft Dynamics SL)


Ocurre cuando se presiona la tecla de pregunta (inquiry) (F3) 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 (Propio, 500) seguido por cada nivel de macro inferior hasta que el parmetro de accin haya sido fijado a algo diferente del valor por defecto (no action). Si todas las llamadas a macros han sido hechas y la accin por defecto an est establecida, entonces se llamar al dilogo PV de la aplicacin subyacente (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 nicamente para fijar el valor del campo. No revisa el campo para validacin. Eso ocurrir ms tarde en el evento check del campo (para cada nivel correspondiente). Este evento est hecho para que los adaptadores desarrollen dilogos de consultas. El evento PV utiliza los siguientes argumentos:
Argumento Index Tipo Integer Descripcin Argumento opcional dependiendo si el control est asociado a un arreglo de controles o no. Este valor es utilizado para identificar en forma nica un control dentro de un arreglo de controles. Este parmetro contiene el valor de string de caracteres del campo actual cuando es llamado y es usado como el valor aceptado resultante para ser revisado en bsqueda de errores antes de ser aplicado al campo (control). 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 y Cancelar .

FieldValue

string

Action

integer

Los siguientes son valores vlidos para los argumentos de Action:


RetVal Accept Descripcin Indica que no se procesarn ms eventos PV y el valor del string 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). Indica que el dilogo ha sido cancelado y el foco es dejado en el campo de llamada (control). No ocurren ms procesos. Contina procesando dilogos PV.

Cancel No Action

Eventos de Ventana Solomon

47

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

48

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento OnUpdate (Objeto de Control de Microsoft Dynamics SL)


Ocurre durante la serie de acciones/eventos iniciados por una 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. Cuando el usuario hace un click sobre el botn Finish de la barra de herramientas d. 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 grabar 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 reside 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 jams ser llamado 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 para el nivel es 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 Finished, 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 lnea de detalle individual dentro de cada grilla debera tambin tener un 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.

49

50

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El evento OnUpdate utiliza los siguientes argumentos:


Argumento Level InsertFlg Tipo Integer Integer Descripcin El nivel que actualmente se procesa. Verdadero (True) indica que un nuevo registro est siendo insertado. Falso (False) indica que un registro existente est siendo actualizado. Nmero de niveles procesados dentro del contexto de la operacin SAVE actual. 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. La actualizacin automtica de la tabla master 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 o a la constante simblica ErrNoMess definida en el mdulo VBTools_VBA.

LevelsDone LevelsLeft

Integer Integer

retval

Integer

Eventos de Ventana Solomon

51

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

52

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Display (Objeto de Formulario de Microsoft Dynamics SL)


Ocurre cuando se carga un formulario.

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

53

Evento Hide (Objeto de Formulario de Microsoft Dynamics SL)


Ocurre cuando se carga un formulario.

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.

54

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Evento Load (Objeto de Formulario de Microsoft Dynamics SL)


Ocurre cuando se carga un formulario.

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

55

Evento LineChk (Objeto de Grilla de Microsoft Dynamics SL)


Ocurre cuando una lnea de detalle dentro de un control de grilla es insertada, actualizada o borrada.

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 abandona la lnea de detalle. Este evento es utilizado frecuentemente para realizar lgicas de borrado especial para las lneas de detalle que el usuario desea borrar. Por ejemplo, la pantalla Catlogo de Cuentas de Contabilidad contiene una grilla que muestra todos los registros de la tabla Account. El usuario puede borrar registros desde Account siempre que el nmero de cuenta correspondiente no sea usado en ninguna pantalla de control (Setup screen) entre otras reas. Esto es implementado mediante el uso de lgica dentro del evento LineChk. Los registros borrados son copiados de la memoria de arreglo subyacente a un arreglo de memoria temporal deleted record. El manejador de recursos de este arreglo de memoria puede ser obtenido usando la funcin MGetDelHandle. El evento LineChk usitiliza los siguientes argumentos:
Argumento Action RecMaintFlg RetVal Tipo integer integer integer Descripcin Accin a ser realizada en la lnea de detalle Estado actual de la lnea de detalle La aplicacin puede evitar 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 que definen posibles valores de Action.
RetVal INSERTED UPDATED DELETED ABANDONED Descripcin Una nueva lnea de detalle est siendo insertada. Una lnea de detalle existente est siendo actualizada. Una lnea de detalle existente est siendo borrada. Una lnea de detalle existente nunca fue creada y est siendo abortada.

56

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El mdulo VBTools_VBA contiene las siguientes constantes simblicas que definen posibles valores de RecMaintFlg:
RetVal NEWROW Descripcin Indica que el usuario est comenzando una insercin de una nueva lnea de detalle. 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. La lnea de detalle actual fue agregada satisfactoriamente, luego de que la grilla fue cargada y no ha sido grabada en la base de datos. La lnea de detalle fue inicialmente cargada dentro de la grilla, pero ha sido modificada posteriromente. Adems, las modificaciones a la lnea de detalle no han sido grabadas an. La lnea de detalle actual ha sido inicialmente cargada dentro de la grilla, y no ha sido modificada posteriormente. Nota: los registros marcados como INSERTED y UPDATED sern asignados automticamente al estado NOTCHANGED luego de la siguiente operacin Save satisfactoria.

INSERTED UPDATED

NOTCHANGED

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

57

Evento LineGotFocus (Objeto de Grilla de Microsoft Dynamics SL)


Ocurre cuando una lnea de detalle dentro de un control grilla recibe el foco.

Sintaxis
Sub object_ LineGotFocus (RecMaintFlg, RetVal)

Observaciones
Cada vez que el usuario mueve o inserta una lnea de detalle dentro de un control grilla, 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 o no. En este caso, los valores por defecto pueden ser asignados explcitamente a los campos dentro del registro de detalle, para el cual no existe un control correspondiente. Por ejemplo, asuma que TableA es una tabla de encabezado y TableB es un registro de detalle . En este caso, cada registro de TableA podra tener muchos registros TableB desplegados dentro de SAFGrid. Sin embargo, el punto principal es que el primer segmento de la llave nica para TableB debiera inclur un campo que se relacione directamente con TableA (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 no ser necesario crear un control invisible con una propiedad Default. El evento LineGotFocus utiliza los siguientes argumentos:
Argumento RecMaintFlg RetVal Tipo Integer Integer Descripcin Estado de la lnea de detalle. La aplicacin puede prevenir que los todos los controles del nivel de detalle correspondiente sean llenados por defecto en forma automtica cuando un nuevo registro est siendo insertado, configurando simplemente RedVal a NoAction (lo cual es una constante simblica definida en el mdulo VBTools_VBA).

58

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El mdulo VBTools_VBA contiene las siguientes constantes simblicas que definen posibles valores de RecMaintFlg:
RetVal NEWROW Descripcin Indica que el usuario est comenzando la insercin de una nueva lnea de detalle . 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. La lnea de detalle actual fue agregada satisfactoriamente, luego de que la grilla fue cargada y no ha sido grabada en la base de datos. La lnea de detalle fue inicialmente cargada dentro de la grilla, pero ha sido modificada posteriromente. Adems, las modificaciones a la lnea de detalle no han sido grabadas an. La lnea de detalle actual ha sido inicialmente cargada dentro de la grilla, y no ha sido modificada posteriormente. Nota: registros marca-dos como INSERTED y UPDATED sern asignados automticamente al estado NOTCHANGED luego de la siguiente operacin Save satisfactoria.

INSERTED UPDATED

NOTCHANGED

Ejemplo 1
El siguiente ejemplo fue tomado de la ventana del mdulo de planilla Earnings Type Maintenance (02.270.00) de Payroll. Esta ventana es del tipo header/detail teniendo la tabla EarnType como la tabla de encabezado 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 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

59

Evento OnCancel (Objeto de Actualizacin Microsoft Dynamics SL)


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

Sintaxis
Sub object_ OnCancel (Level, RetVal)

Observaciones
Cuando el usuario hace un click sobre el botn Cancel en la barra de herramientas, 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 Constant (por ejemplo el registro setup). El evento OnCancel utiliza los siguientes argumentos:
Argumento Level retval Tipo integer integer Descripcin El nivel actual est siendo procesado. El mensaje 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)

60

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


End If 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

61

Evento OnFinish (Objeto de Actualizacin de Microsoft Dynamics SL)


Ocurre cuando 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 herramientas. 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 se modifica alguna informacin). 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 simplemente 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. 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, 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.

62

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El evento OnFinish utiliza los siguientes argumentos:


Argumento Level Tipo Integer Descripcin 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. No utilizado actualmente. El evento OnFinish puede ser abortado simplemente configurando RetVal en un nmero de mensaje vlido o a la constante simblica ErrNoMess definida en el mdulo VBTools_VBA.

Updated retval

Integer Integer

Eventos de Ventana Solomon

63

Evento OnInsert (Objeto de Actualizacin de Microsoft Dynamics SL)


Ocurre durante una serie de acciones/eventos iniciados por una 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 aqu como 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. Cuando el usuario hace un click sobre el botn Finish de la barra de herramientas. 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. 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 automticamente una operacin Insert. Cuando el usuario navega previamente al primer registro o finalmente al ltimo registro en una tabla usando los botones Prev o Next de la barra de herramientas. Cuando el usuario ingresa un valor que no existe en la base de datos para uno o ms campos llave. Por ejemplo si una aplicacin contiene tres campos llaves, entonces una operacin Insert ser iniciada si la combinacin de los valores de los tres campos llaves 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 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 valores por omisin a los nuevos registros de nivel de detalle dentro del control Grilla es realizado dentro del evento LineGotFocus, el evento OnInsert no es llamado para niveles de detalle.

64

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones El evento OnInsert utiliza los siguientes argumentos:
Argumento Level retval Tipo Integer Integer Descripcin Nivel que es procesado actualmente. El colocar en forma automtica los valores por omisin de todos los controles del nivel actual que ocurre despus del evento OnInsert para ese nivel particular, puede ser suprimido estableciendo para RetVal 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

65

Llamadas de Funciones API de Microsoft Dynamics SL


Resumen de Referencia de API de Microsoft Dynamics SL
A continuacin se presenta una lista de funciones API de Microsoft Dynamics SL disponibles en el lenguaje de Visual Basic para Aplicaciones y un breve resumen de su propsito.
Funcin/Instruccin Declaracin AliasConstant Funcin ApplGetParms Funcin ApplGetParmValue Declaracin ApplSetFocus Declaracin ApplSetParm Funcin CallChks Funcin DateCheck Funcin DateCmp Funcin DateMinusDate Declaracin DatePlusDays Declaracin DatePlusMonthSetDay Funcin DateToIntlStr Funcin DateToStr Funcin DateToStrSep Funciones DBNavFetch Declaracin DispFields Declaracin DispForm Funcin DParm Declaracin Edit_Cancel Declaracin Edit_Close Funcin Edit_Delete Accin Coloca apodos a ciertas constantes usadas especficamente en Importacin de Transacciones. Recupera un parmetro de una lnea de comando pasada por otra aplicacin Microsoft Dynamics SL. Recupera un parmetro pasado por otra aplicacin. Coloca el foco sobre un objeto designado. Agrega un parmetro a la lista de todos los parmetros a ser enviados a una aplicacin que efectu la llamada. Ejecuta el evento Chk del objeto especfico. Valida una fecha. Compara dos fechas. Retorna el nmero de das entre dos fechas.. Agrega un nmero determinado de das a una fecha. Agrega un nmero determinado de meses a una fecha y lo coloca como fecha vlida. Conviente una fecha al estilo short date de Windows. Convierte una fecha a una cadena de caracteres (string). Convierte una fecha a una cadena de caracteres e incluye separadores. Recupera un registro compuesto desde la base de datos usando una instruccin SQL. Despliega el contenido de una estructura de campo. Despliega un objeto de formulario (form object) especfico. Convierte una fecha en un parmetro de cadena de caracteres (string) SQL. Ejecuta el botn Cancel de la barra de herramientas. Ejecuta el botn Close de la barra de herramientas. Ejecuta el botn Delete de la barra de herramientas.

66

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin/Instruccin Funcin Edit_Finish Funcin Edit_First Funcin Edit_Last Funcin Edit_New Funcin Edit_Next Funcin Edit_Prev Declaracin Edit_Save Funcin FPAdd Funcin FParm Funcin FPDiv Funcin FPMult Funcin FPRnd Funcin FPSub Declaracin GetBufferValue Funcin GetDelGridHandle

Accin Ejecuta el botn Finish de la barra de herramientas. Ejecuta el botn First de la barra de herramientas. Ejecuta el botn Last de la barra de herramientas. Ejecuta el botn New de la barra de herramientas. Ejecuta el botn Next de la barra de herramientas. Ejecuta el botn Previous de la barra de herramientas. Ejecuta el botn Save de la barra de herramientas. Funcin Add de punto flotante. Funcin de formateo para el campo flotante pasado a una funcin SQL. Funcin de divisin de punto flotante. Funcin de multiplicacin de punto flotante. Funcin de redondeo de punto flotante. Funcin de resta de punto flotante. Obtiene el valor del buffer para un campo determinado. Retorna el manipulador de recursos del arreglo de memoria usado para guardar temporalmente las lneas de detalle borradas desde el control SAFGrid. Obtiene el handle de grilla para un objeto de planilla de clculo. Obtiene el valor de campo de un objeto particular. Obtiene la propiedad de un objeto particular. Determina el tipo de servidor de base de datos que es usado. Obtiene la fecha de sistema actual. Obtiene la hora de sistema actual. Oculta un objeto formulario especfico. Incrementa un valor de una cadena de caracteres. Convierte una fecha de cadena de caracteres desde el estilo short date de Windows al estilo de formato de base de datos de SQL. Formatea una funcin de un campo integer pasado a una funcin SQL. Retorna si la aplicacin Microsoft Dynamics SL est o no en el modo de Importacin de Transacciones. Ejecuta otro programa ejecutable. Realiza deteccin de errores en una columna de objeto de grilla especfica.

Funcin GetGridHandle GetObjectValue Funcin GetProp Funcin GetSqlType Declaracin GetSysDate Declaracin GetSysTime Declaracin HideForm Declaracin IncrStrg Declaracin IntlStrToDate

Funcin IParm Funcin Is_TI Funcin Launch Funcin MCallchks

Llamadas de Funciones API de Solomon

67

Funcin/Declaracin Funcin MCallchks Declaracin MClear Declaracin MClose Funcin MDelete Declaracin MDisplay

Accin Realiza deteccin de errores en una columna de objeto de grilla especfica. Borra todos los registros de un arreglo de memoria especfico. Cierra un arreglo de memoria existente. Borra el registro actual de un arreglo de memoria especfico. Despliega el contenido actual del arreglo de memoria especfico en su control de planilla de clculo correspondiente. Despliega el nmero de mensaje especificado. Despliega un mensaje de texto con los parmetros entregados. Despliega el nmero de mensaje especificado con variables de sustitucin. Obtiene la respuesta del usuario desde un mensaje de texto. Retorna una lista de nombres de controles presentes en la aplicacin actual. Mueve hacia el primer registro en un arreglo de memoria designado. Retorna el estado de lnea del registro actual en el arreglo de memoria designado. Retorna el nmero de fila/registro del registro actual en el arreglo de memoria designado. Inserta un nuevo registro dentro del arreglo de memoria designado. Define un campo clave (field key) para un arreglo de memoria abierto previamente. Encuentra un registro especfico dentro de un arreglo de memoria ordenado basado en valores de campos llave designados. Define un campo llave para un arreglo de memoria abierto previamente. Define un campo llave para un arreglo de memoria abierto previamente. Mueve hacia el ltimo registro en un arreglo de memoria designado. Carga un arreglo de memoria con todos los registros retornados desde la base de datos mediante una declaracin SQL. Mueve al siguiente registro en un arreglo de memoria designado.

Declaracin Mess Declaracin Messbox Declaracin Messf Funcin MessResponse Funcin MFindControlName Funcin MFirst Funcin MGetLineStatus Funcin MGetRowNum Declaracin MInsert Declaracin MKey Funcin MKeyFind

Declaracin MKeyFld Declaracin MKeyOffset Funcin MLast Declaracin MLoad

Funcin MNext

68

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Funcin/Instruccin Funcin MPrev Funcin MRowCnt Declaracin MSet Funcin MSetLineStatus Declaracin MSetProp Declaracin MSetRowNum Declaracin Msort

Accin Mueve al registro anterior en un arreglo de memoria designado. Retorna el nmero de registros en un arreglo de memoria designado. Fija la columna de grilla a un valor especfico. Fija el estado de lnea del registro actual en el arreglo de memoria designado. Fija las propiedades de una columna de grilla en tiempo de ejecucin. Fija el nmero actual de la fila/registro de un arreglo de memoria designado. Clasifica los datos contenidos en un arreglo de memoria existente basado en campos clave predefinidos. Actualiza el registro de un arreglo de memoria actual designado con valores de dato nuevos. Despliega el nombre del campo omitiendo el caracter de intercambio (swap character). Coloca informacin de la plantilla designada al interior de la aplicacin actual. Realiza el chequeo de nmeros peridicos en el campo actual. Determina la diferencia entre dos nmeros peridicos . Suma un nmero peridico a otro nmero peridico. Recupera un registro compuesto (composite record) desde la base de datos utilizando una instruccin SQL de la propiedad PV de un control SAFMaskedText. Guarda informacin de la aplicacin actual en una plantilla designada. Borra el registro que est siendo visto actualmente. Borra todos los registros de una tabla. Fija un un campo de datos de buffer subyacente de la aplicacin Microsoft Dynamics SL a un valor determinado. Despliega el valor por defecto para el objeto especificado. Fija un cierto nmero de nivel a un estado diferente. Fija un valor de campo de objeto especificado. Fija las propiedades de objetos en tiempo de ejecucin. Despliega texto en la barra de estado de la aplicacin. Captura el siguiente registro para desplegarlo.

Declaracin MUpdate Funcin NameAltDisplay Funcin PasteTemplate Funcin PeriodCheck Funcin PeriodMinusPeriod Funcin PeriodPlusPerNum Funciones PVChkFetch

Declaracin SaveTemplate Funcin Sdelete Funcin SdeleteAll Declaracin SetBufferValue

Funcin SetDefaults Declaracin SetLevelChg Funcin SetObjectValue Declaracin SetProp Declaracin SetStatusBarText Funciones SFetch

Llamadas de Funciones API de Solomon

69

Funcin/Declaracin Funcin SGroupFetch Declaracin SInsert Funcin Sparm

Accin Captura el grupo del siguiente valor agregado para deplegarlo. Inserta la estructura de lo desplegado hacia una tabla. Funcin de formateo para un campo de cadena de caracteres (string field) que es pasada a una funcin SQL. Ejecuta la declaracin SQL especificada. Destina un cursor SQL para ver una tabla. Destina un nuevo cursor de base de datos. Obtiene el valor de retorno de la funcin SQL especificada. Permite a una aplicacin atrapar ciertos errores SQL. Ejecuta la declaracin SQL luego de haber pasado variables. Ejecuta la declaracin SQL y toma el primer registro para desplegarlo. Libera un cursor. Substituye variables a una declaracin SQL. Convierte una cadena de caracteres (string) a un tipo de campo de fecha. Convierte una cadena de caracteres (string) a un tipo de campo de hora. Actualiza el despliegue actual. Determina si un nivel especificado ha cambiado o no. Coonvierte la hora a una cadena de caracteres (string). Aborta la transaccin actual. Comienza una transaccin de base de datos. Finaliza una transaccin de base de datos. Retorna el estado de la transaccin de base de datos SQL actual. Extiende la grilla (grid) de una aplicacin para que otra estructura de tabla pueda ser agregada a la grilla. Abre un nuevo arreglo de memoria y retorna un nmero de arreglo de memoria nico correspondiente. Destina una estructura para una tabla de base de datos especificada.

Declaracin Sql Declaracin SqlCursor SqlCursorEx Funcin SqlErr Declaracin SqlErrException Declaracin SqlExec Funciones SqlFetch Declaracin SqlFree Declaracin SqlSubst Declaracin StrToDate Declaracin StrToTime Declaracin SUpdate Funcin TestLevelChg Funcin TimeToStr Declaracin TranAbort Declaracin TranBeg Declaracin TranEnd Funcin TranStatus Funcin VBA_MExtend Funciones VBA_MOpen

Declaracin VBA_SetAddr

70

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

71

AliasConstant (Instruccin)
Use esta funcin para definir un alias para ciertas constantes Microsoft Dynamics SL utilizadas especficamente en Importacin de Transacciones. 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
Las 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")

72

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

ApplGetParms (Funcin)
Recupera un parmetro entregado por otra aplicacin de Microsoft Dynamics SL Software Development Kit (Microsoft SL SDK).

Sintaxis
ParmValue = ApplGetParms()

Observaciones
La declaracin ApplGetParms puede ser usada para recuperar parmetros, los cuales hayan sido entregados originalmente por otra aplicacin de Microsoft SL SDK 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 parmetros con nombre (named parameters), utilizando la declaracin ApplSetParamValue en conjunto con la funcin Launch, entonces ApplGetParams slo ser capaz de recuperar parmetros de la seccin por omisin de Microsoft Dynamics SL. La funcin ApplGetParamValue es la nica forma por la cual la aplicacin llamada puede recuperar los parmetros de cualquier seccin de parmetros con nombre diferente a la seccin por omisin de Microsoft Dynamics SL. La funcin ApplGetParms utiliza los siguientes argumentos:
Argumento ParmValue Tipo String Descripcin El valor actual del siguiente parmetro 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

73

ApplGetParmValue (Funcin)
Recupera un parmetro entregado por otra aplicacin de Microsoft SL SDK.

Sintaxis
ParmValue = ApplGetParmValue(ParmSection, ParmName)

Observaciones
Parmetros entregados a una aplicacin Microsoft SL SDK 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 Microsoft Dynamics SL. Por ejemplo, si la aplicacin que realiza la llamada enva un parmetro diseado especficamente 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 explcitamente a travs del argumento ParmSection. Las secciones de nombres de parmetros con nombre 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 Document Maintenance (03.250.00) del mdulo Cuentas por Pagar, puede recibir dos parmetros opcionales que facilitan la funcionalidad drill-down: 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 en cambio por la llamada ApplGetParms realizada por la aplicacin subyacente. Por consiguiente, la llamada a ApplGetParms en cdigo VBA no retornar ningn valor de parmetro.

74

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones ApplSetParmValue y ApplGetParmValue superan 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 cdigo 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 Documentos de Cuentas por Pagar en la seccin de parmetros VBA de tal forma que slo la llamada a ApplGetParamValue que requiere especficamente el parmetro VBA recibira el parmetro. La instruccin ApplGetParmValue utiliza los siguientes argumentos:
Argumento ParmValue ParmSection Tipo String String Descripcin El valor actual del parmetro siendo recibido. 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 siempre que la aplicacin que efecta la llamada utilice una seccin de parmetros con ese nombre. El mdulo VBTools_VBA contiene tres constantes simblicas que definen nombres de secciones estndar: PRMSECTION_VBRDT, PRMSECTION_BSL y PRMSECTION_TI. PRMSECTION_TI est reservado para su uso en conjunto con Importacin de Transacciones. Por defecto, el parmetro ser recuperado por la seccin representada por PRMSECTION_VBRDT si el argumento es dejado en blanco. 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 explcitamente por la llamada a ApplSetParmValue por la aplicacin que hace la llamada.

ParmName

String

Llamadas de Funciones API de Solomon

75

Ejemplo
El siguiente ejemplo ilustra como pasar parmetros hacia una aplicacin de Microsoft SL SDK y cdigo de VBA adaptado al mismo tiempo y evitar 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 Microsoft Dynamics SL application Launch( "SOLOMONAPP", "")

Cdigo en la aplicacin estndar de Microsoft SL SDK (i.e. cdigo no adaptado) que recibe los parmetros estndar.
Dim Parm_BatchNbr Dim Parm_DocumentNbr As String As String

Parm_BatchNbr = ApplGetParmValue(PRMSECTION_VBRDT, "Batch Nbr" Parm_DocumentNbr = ApplGetParmValue(PRMSECTION_VBRDT, "Document Nbr")

Cdigo en Basic Script, que recubre la aplicacin estndar de Microsoft SL SDK, diseado para recibir los parmetros adaptados:
Dim Parm_CustomParm As String Parm_CustomParm = ApplGetParmValue(PRMSECTION_BSL, "Example Parm")

Tambin Vea
Funcin ApplGetParms, instruccin ApplSetParmValue, funcin Launch

76

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

ApplGetReturnParms (Funcin)
Recibe un parmetro retornado desde una aplicacin secundaria que recin terminada.

Sintaxis
ParmValue = ApplGetReturnParms()

Observaciones
Si una aplicacin de Microsoft SL SDK necesita devolver parmetros al programa desde el cual fue llamado originalmente, lo puede hacerlo utilizando uno de los parmetros para 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 ParmValue Tipo String Descripcin El valor actual del parmetro que est siendo recibido desde un programa secundario recin finalizado.

Tambin Vea
Instruccin ScreenExit

Llamadas de Funciones API de Solomon

77

ApplSetFocus (Instruccin)
Fija el foco a un control designado.

Sintaxis
Call ApplSetFocus( TargetCtrl)

Observaciones
ApplSetFocus es el mtodo preferido para fijar explictamente el foco a un control dado o control objetivo. El uso del mtodo SetFocus de Visual Basic causar un error fatal Visual Basic si el control objetivo est deshabilitado o invisible. Los desarrolladores deben recordar siempre que la configuracin 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 y visible en la aplicacin estndar, y por lo tanto el SetFocus funcionar sin problemas durante las pruebas. Sin embargo, el usuario final puede posteriormente realizar una adaptacin, y dentro de otras cosas, deshabilitar el control objetivo y con esto revelando un defecto sutil en la aplicacin subyacente referente al uso del mtodo SetFocus. La instruccin ApplSetFocus utiliza los siguientes argumentos:
Argumento TargetCtrl Tipo string Descripcin Control al cual el foco debiera moverse.

Ejemplo
Call ApplSetFocus("cDiscBal")

78

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

ApplSetParmValue (Instruccin)
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
Microsoft SL SDK 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 especficamente 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 Microsoft Dynamics SL para requerimientos internos, los cuales pueden variar segn las circunstancias. Un mtodo ms robusto para pasar los parmetros es usando la instruccin 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 con nombre (named sections) y etiquetar explictamente parmetros individuales usando nombres de parmetros. El agrupar parmetros en secciones con nombre 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 automticamente . ApplSetParmValue est diseado aolamente para facilitar el paso de parmetros a otras aplicaciones desarrolladas con Microsoft SL SDK.

Llamadas de Funciones API de Solomon

79

La instruccin ApplSetParmValue utiliza los siguientes argumentos:


Argumento ParmSection Tipo String Descripcin 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 Importacin de Transacciones. Por defecto, el parmetro ser recuperado por la seccin representada por PRMSECTION_VBRDT si el argumento es dejado en blanco. 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. El valor actual del nuevo parmetro.

ParmName

String

ParmValue

String

Ejemplo
El siguiente ejemplo ilustra dos diferentes mtodos para llamar ROI para desplegar el reporte de la lista de proveedores (Vendor List) en la pantalla para todos los proveedores que tengan un saldo 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. Al utilizar este mtodo, el reporte funcionar bien, independientemente 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

80

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

CallChks (Funcin)
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 IntVar Tipo Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 declaradas en el mdulo VBTools_VBA estn reservadas para este uso). Nombre del objeto formulario Nombre del control del objeto a ejecutar el evento Chk.

formctl ctl

String String

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

81

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

Sintaxis
RetVal = DateCheck(DateString)

Observaciones
La funcin DateCheck utiliza los siguientes argumentos:
Argumento RetVal Tipo Integer Descripcin 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
Instruccin StrToDate

82

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

DateCmp (Funcin)
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 Microsoft SL SDK. La funcin DateCmp utiliza los siguientes argumentos:
Argumento Cmp Tipo Integer Descripcin <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) Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Primer valor de fecha

Date2

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

83

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

Sintaxis
NbrDays = DateMinusDate(Date1, Date2)

Observaciones
La funcin DateMinusDate utiliza los siguientes argumentos:
Argumento NbrDays Tipo Long Descripcin 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. Fecha de inicio

Date1

Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA)

Date2

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
Instruccin DatePlusDays, instruccin DatePlusMonthSetDay

84

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

DatePlusDays (Instruccin)
Agrega un nmero designado de das a una fecha existente.

Sintaxis
Call DatePlusDays(CurrDate, NbrDaysToAdd, ResultingDate)

Observaciones
La instruccin DatePlusDays utiliza los siguientes argumentos:
Argumento CurrDate Tipo Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Integer Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Descripcin Valor de la fecha inicial.

NbrDaysToAdd ResultingDate

Nmero de das a ser sumados a CurrDate. Valores negativos se pueden utilizar. 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, Instruccin DatePlusMonthSetDay

Llamadas de Funciones API de Solomon

85

DatePlusMonthSetDay (Instruccin)
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 instruccin DatePlusMonthSetDay utiliza los siguientes argumentos:
Argumento CurrDate Tipo Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Integer Integer Descripcin Valor de la fecha de inicio actual.

NbrMthsToAdd SetSpecificDay

Nmero de meses a ser sumado a CurrDate. Valores negativos pueden ser usados. 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 automticamente el da actual al ltimo da vlido para ese mes. Fecha resultante.

ResultingDate

Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA)

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, instruccin DatePlusDays

86

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

DateToIntlStr (Funcin)
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 ShortDateStr Tipo String Descripcin Cadena de caracteres que contiene el valor de DateToConvert en el formato short date de Windows. Valor de fecha a ser convertido.

DateToConvert

Tipo de dato Sdate definido por usuario (declarado en Applic.DH)

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

Llamadas de Funciones API de Solomon

87

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

Sintaxis
DateString = DateToStr(DateToConvert)

Observaciones
La funcin DateToStr utiliza los siguienes argumentos:
Argumento DateString DateToConvert Tipo String Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Descripcin DateToConvert convertido a una cadena de caracteres en formato MMDDYYYY. 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, instruccin IntlStrToDate, instruccin StrToDate

88

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

DateToStrSep (Funcin)
Convierte un valor de fecha desde el formato de base de datos SQL a un a cadena de caracteres 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 DateString DateToConvert Tipo String Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Descripcin DateToConvert convertido a una cadena de caracteres en formato MMDDYYYY. 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, instruccin IntlStrToDate, instruccin StrToDate

Llamadas de Funciones API de Solomon

89

DBNavFetch (Funciones)
Recupera un registro compuesto desde la base de datos usando una instruccin 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 , 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 instruccin SQL o no contiene un nombre de procedimiento almacenado. Todos los controles SAFMaskedText tienen las propiedades PV y DBNav, y cada una puede contener una instruccin SQL. Las funciones DBNavFetch1 y PVChkFetch1 son similares, excepto que usan la instruccin 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 tanto una ventana de valores posibles 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, entonces DBNavFetch1 necesitar ser usado en conjunto con la propiedad DBNav. Esta situacin puede aparecer en ventanas que contengan mltiples campos llave, en donde el ltimo campo llave 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: Employee ID y Calendar Year. Los requerimientos de la ventana son que el usuario es forzado a ingresar un Employee ID basado en la tabla de empleados (Employee), la cual debiera estar visible a travs de una ventana de valores posibles. Sin embargo, no existe una tabla en el sistema 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 llave 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 instrucciones SQL que retornen datos desde una sola tabla. Para declaraciones SQL ms avanzadas que tengan una o ms asociaciones de tablas, use DBNavFetch4 o DBNavFetch8.

90

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones DBNavFetch1, DBNavFetch4 y DBNavFetch8 estn todas diseadas para recuperar un solo registro compuesto. Por ejemplo, si una instruccin SQL contiene ocho asociaciones de tablas, DBVavFetch8 no retorna ocho registros desde una nica tabla. Al contrario, retorna un nico 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 instruccin DetailLoad usa la propiedad DBNav del control SAFGrid para cargar la grilla 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 RetVal Tipo Integer Descripcin 0 si el registro fue capturado satisfactoriamente. Retorna NOTFOUND si ningn registro calza la clusula de restriccin de la instruccin DBNav. ctrl. Control incluido en la propiedad DBNav para ser usado como la instruccin SQL. Puede ser opcionalmente PNULL, si la llamada es realizada dentro del evento Chk del control cuya propiedad DBNav est siendo usada. Integer String Cursor de la base de datos SQL. Valor llave entregado como ltimo parmetro a la clusula de restriccin de la instruccin DBVav. Estructura de tabla correspondiente a la tabla primordial en la instruccin DBNav. 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.

Cursor SQLParmValue

bTable1 bTable1Length

User-defined datatype Integer

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

91

DispFields (Instruccin)
Despliega el valor del campo de dato subyacente correspondiente al control designado.

Sintaxis
Call DispFields(Form, Control)

Observaciones
Cada control de datos Microsoft Dynamics SL 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 VisualBasic subyacente automticamente , tal como cuando un nuevo registro es cargado. Sin embargo, cuando la aplicacin modifica directamente el valor de una variable VisualBasic subyacente a un control de dato Microsoft Dynamics SL, entonces puede necesitar llamar a la instruccin 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 instruccin DispFields utiliza los siguientes argumentos:
Argumento Form Tipo Control Descripcin Formulario que contiene todos los controles usados en DispFields(). PNULL puede ser usado para inclur todos los formularios cargados. 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).

Control

Control

92

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 instruccin DispFields debe ser usada despus de que la variable VisualBasic subyacente a un control de datos particular haya sido modificado automticamente . El cdigo es del evento Chk del control combo box 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, instruccin MDisplay, propiedad TabIndex, instruccin VBA_SetAddr

Llamadas de Funciones API de Solomon

93

DispForm (Instruccin)
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 de la misma aplicacin pueda recibir el foco hasta que el sub-formulario haya sido ocultado mediante el llamado a HideForm. Form1 es desplegado siempre en forma automtica por el sistema. Por consiguiente, esta llamada es slo necesario para sub-formularios. La instruccin DispForm utiliza los siguientes argumentos:
Argumento SubFormName CenterIt Tipo String Integer Descripcin Formulario a ser desplegado en forma modal.. 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
Instruccin HideForm

94

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

Sintaxis
SQLParmStr = DParm(DateToConvert)

Observaciones
La funcin DParm utiliza los siguientes argumentos:
Argumento SQLParmStr DateToConvert Tipo String Tipo de dato Sdate definido por usuario (declarado en el mdulo VBTools_VBA) Descripcin DateToConvert convertido a una cadena de caracteres de parmetro SQL. 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

95

Edit_Cancel (Instruccin)
Ejecuta el botn Cancelar de la barra de herramientas.

Sintaxis
Call Edit_Cancel

Observaciones
Esta funcin corresponde a la seleccin Cancelar en el men Edicin y en la barra de herramientas. Utilice esta funcin siempre que ejecute la funcin Cancel 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
Instruccin Edit_Close, funcin Edit_Finish

96

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Edit_Close (Instruccin)
Ejecuta el botn Cerrar de la barra de herramientas.

Sintaxis
Call Edit_Close

Observaciones
Esta funcin corresponde a la seleccin de Cerrar en el men Edicin y en la barra de herramientas. Utilice esta funcin siempre que ejecute la funcin Close desde un programa VBA.

Ejemplo
Este ejemplo usa un botn para realizar la funcin Close.
Sub Close_Click() Call Edit_Close End Sub

Tambin Vea
Funcin Edit_Next, funcin Edit_Last

Llamadas de Funciones API de Solomon

97

Edit_Delete (Funcin)
Ejecuta el botn Eliminar de la barra de herramientas.

Sintaxis
RetVal = Edit_Delete (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de Eliminar en el men Edicin y en la barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de Delete desde un programa VBA. La funcin Edit_Delete utiliza los siguientes argumentos:
Argumento RetVal LevelNumber Tipo Integer Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservadas para este uso) Nmero del nivel al cual realizar la operacin.

Ejemplo
En el ejemplo se navega hasta la cuarta fila en una pantalla de Journal Entry, 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, instruccin Edit_Save

98

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Edit_Finish (Funcin)
Ejecuta el botn Terminar de la barra de herramientas.

Sintaxis
RetVal=Edit_Finish(LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de Terminar en el men Edicin y en la barra de herramientas. Utilice esta funcin siempre que ejecute la funcin Finish en el nivel especificado desde un programa VBA. La funcin Edit_Finish utiliza los siguientes argumentos:
Argumento RetVal LevelNumber Tipo Integer Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservados para este uso) Nmero de nivel al cual realizar la operacin.

Ejemplo
El ejemplo realiza Finish utilizando un botn.
serr1=Edit_Finish

Tambin Vea
Instruccin Edit_Cancel, instruccin Edit_Save

Llamadas de Funciones API de Solomon

99

Edit_First (Funcin)
Ejecuta el botn Primero de la barra de herramientas.

Sintaxis
RetVal = Edit_First (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de Primero en el men Edicin y en la barra de herramientas. El uso de esta funcin le permite ejecutar la funcin First de navegacin de la base de datos en el nivel especificado desde un programa VBA. La funcin Edit_First utiliza los siguientes argumentos:
Argumento RetVal LevelNumber Tipo Integer Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservados para este uso) Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle de un Journal Entry 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

100

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Edit_Last (Funcin)
Ejecuta el botn Ultimo de la barra de herramientas.

Sintaxis
RetVal = Edit_Last (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de Ultimo (Last) en el men Edicin y en la barra de herramientas. El uso de esta funcin le permite ejecutar la funcin Last de navegacin de la base de datos en el nivel especificado desde un programa VBA. La funcin Edit_Last utiliza los siguientes argumentos::
Argumento RetVal LevelNumber Tipo Integer Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservados para este uso) Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle de un Jounal Entry 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

101

Edit_New (Funcin)
Ejecuta el botn Nuevo de la barra de herramientas.

Sintaxis
RetVal = Edit_New (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de Nuevo (New) en el men Edicin y en la 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 RetVal LevelNumber Tipo Integer Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservados para este uso) Nmero de nivel al cual realizar la operacin.

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

Tambin Vea
Instruccin Edit_Save, funcin Edit_Delete

102

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Edit_Next (Funcin)
Ejecuta el botn Siguiente de la barra de herramientas.

Sintaxis
RetVal = Edit_Next (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de Siguiente en el men Edicin y en la barra de herramientas. El uso de esta funcin le permite ejecutar la funcin Next de navegacin de la base de datos en el nivel especificado desde un programa VBA. La funcin Edit_Next utiliza los siguientes argumentos:
Argumento RetVal LevelNumber Tipo Integer Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservados para este uso) Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle de un Journal Entry 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 Dim Dval Dim Ivis Dim Lvl As Integer As Double As String As Integer

serr = GetProp("cacct", PROP_VISIBLE, Ivis) serr = GetProp("cacct", PROP_LEVEL, Lvl) Cntr = 1 serr = Edit_First(Lvl) While serr = 0 And Cntr < 8

Llamadas de Funciones API de Solomon


If cntr <> 6 Then serr = Edit_Next(Lvl) ElseIf Cntr = 6 Then serr = Edit_New(Lvl) If serr = 0 Then serr = SetObjectValue("cacct","3080")

103

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

104

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Edit_Prev (Funcin)
Ejecuta el botn Previo de la barra de herramientas.Sintaxis RetVal = Edit_Prev (LevelNumber)

Observaciones
Esta funcin corresponde a la seleccin de Previo en el men Edicin y en la barra de herramientas. Utilice esta funcin siempre que ejecute la funcin Previous de navegacin de la base de datos en el nivel especificado desde un programa VBA. La funcin Edit_Prev utiliza los siguientes argumentos:
Argumento RetVal LevelNumber Tipo Integer Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservados para este uso) Nmero de nivel al cual realizar la operacin.

Ejemplo
En este ejemplo se navega a travs de lneas de detalle de un Journal Entry 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

105

Edit_Save (Instruccin)
Ejecuta el botn Guardar de la barra de herramientas.

Sintaxis
Call Edit_Save

Observaciones
Esta funcin corresponde a la seleccin de Guardar (Save) en el men Edicin y en la barra de herramientas. Utilice esta funcin siempre que ejecute la funcin Save de navegacin de la base de datos de en el nivel especificado desde un programa VBA.

Ejemplo
Este ejemplo ejecuta la funcin 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

106

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

FPAdd (Funcin)
Suma dos valores punto flotante de doble precisin con una precisin de redondeo designada. Sintaxis Result = FPAdd(Dbl1, Dbl2, Precision)

Observaciones
Las condiciones de error ocurridas durante la operacin de adicin, tales como un error de desbordamiento (overflow), sern manejados en forma automtica por el sistema. Estos tipos de errores causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en la bitcora 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 un 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 artculos de inventario UNITS Unidades de trabajo, tales como horas trabajadas. INV_UNIT_PRICE Precio unitario de artculos inventario 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

107

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

Sintaxis
SQLParmStr = FParm(DblToConvert)

Observaciones
La funcin FParm utiliza los siguientes argumentos:
Argumento SQLParmStr DblToConvert Tipo String Double Descripcin DblToConvert convertido a una cadena de caracteres de parmetro SQL. 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

108

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

FPDiv (Funcin)
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. Las condiciones de error ocurridas durante la operacin de divisin, tales como divisin por cero, sern manejados en forma automtica por el sistema. Estos tipos de errores causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en la bitcora 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 un 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 artculos de inventario UNITS Unidades de trabajo, tales como horas trabajadas. INV_UNIT_PRICE Precio unitario de artculos inventario 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

109

FPMult (Funcin)
Multiplica dos valores de punto flotante de doble precisin con una precisin de redondeo designada.

Sintaxis
Result = FPMult(Dbl1, Dbl2, Precision)

Observaciones
Las condiciones de error ocurridas durante la operacin de multiplicacin, tales como desbordamiento (overflow), sern manejados en forma automtica por el sistema. Estos tipos de errores causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en la bitcora 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 Result Dbl1 Dbl2 Precision Tipo Double Double Double Integer Descripci Valor de retorno Primer valor Segundo valor Precisin de redondeo

Nota: El parmetro de precisin puede tener un 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 artculos de inventario UNITS Unidades de trabajo, tales como horas trabajadas. INV_UNIT_PRICE Precio unitario de artculos inventario 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

110

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

Sintaxis
Result = FPRnd(DblToRound, Precision)

Observaciones
Las condiciones de error ocurridas durante la operacin de redondeo, tales como desbordamiento (overflow), sern manejados en forma automtica por el sistema. Estos tipos de errores causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en la bitcora 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 Result DblToRound Precision Tipo Double Double Integer Descripcin Valor de retorno Valor a ser redondeado Precisin de redondeo

Nota: El parmetro de precisin puede tener un 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 artculos de inventario UNITS Unidades de trabajo, tales como horas trabajadas. INV_UNIT_PRICE Precio unitario de artculos inventario PERCENT Valor de porcentaje

Ejemplo
El ejemplo realiza una instruccin SQL para rescatar una suma total de documentos, luego muestra los resultados en una caja 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

111

FPSub (Funcin)
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 restar el valor de Dbl2 al valor Dbl1 y retornar el resultado. Las condiciones de error ocurridas 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 la bitcora 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 un 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 artculos de inventario UNITS Unidades de trabajo, tales como horas trabajadas. INV_UNIT_PRICE Precio unitario de artculos inventario 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

112

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

GetBufferValue (Instruccin)
Obtiene el valor del campo de buffer de datos de una aplicacin Microsoft Dynamics SL 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 subyacente necesita ser referenciada, y estos campos no estn representados como objetos en el formulario , esta instruccin permite a la aplicacin VBA obtener estos valores. Si los campos fueran objetos en el formulario, la aplicacin VBA puede en cambio simplemente emitir GetObjectValue. La instruccin GetBufferValue utiliza los siguientes argumentos:
Argumento bTable.FieldName Str Tipo String String Descripcin SQL Table.FieldName que se quiere recibir. 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
Instruccin SetBufferValue

Llamadas de Funciones API de Solomon

113

GetDelGridHandle (Funcin)
Retorna el manejador de recursos del arreglo de memoria usado para guardar temporalmente lneas de detalle eliminadas del control SAFGrid designado.

Sintaxis
DelMemHandle = GetDelGridHandle( SpreadSheetObj)

Observaciones
Cada control SAFGrid est asociado a dos arreglos de memoria subyacentes que el sistema abre automticamente durante la carga del formulario (Form Load). El arreglo de memoria primario guarda los registros que son realmente 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 DelMemHandle SpreadSheetObj Tipo Integer String Descripcin Manejador de recursos para el arreglo de memoria que mantiene registros borrados del SpreadSheed designado Nombre de objeto del SpreadSheet

Ejemplo
serr1 = GetDelGridHandle("Spread1")

Tambin Vea
Funcin GetGridHandle

114

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

GetGridHandle (Funcin)
Obtiene el manejador de grilla 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 IntVar Tipo Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 declarados en el mdulo VBTools_VBA estn reservados para este uso) Nombre del objeto spreadsheet

SpreadControlName

String

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

Tambin Vea
Instruccin MSet

Llamadas de Funciones API de Solomon

115

GetObjectValue (Funcin)
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 RetVal Tipo Defenido por usauario String Descripcin Cualquier tipo de variable. Debe coincidir con el tipo del campo de la base de datos del nombre del control (ControlName). Nombre del control cuyo valor de campo usted quiere obtener.

ControlName

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

116

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

GetProp (Funcin)
Obtiene el valor de una propiedad de un objeto especificado.

Sintaxis
RetVal = GetProp(ObjectName, PropName, PropValue)

Observaciones
Esta funcin permite a una aplicacin 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 RetVal ObjectName PropName Tipo Integer String String Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 estn reservados para este uso). Nombre del objeto. 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. Variable en la cual obtener el valor de la propiedad.

PropValue

User Defined

Los siguientes valores de argumentos para PropertyName son definidos como constantes simblicas en el mdulo VBTools_VBA:
Constante Simblica PROP_BLANKERR (required) PROP_CAPTION PROP_CUSTLIST PROP_ENABLED PROP_HEADING PROP_LEVEL PROP_MASK PROP_MIN PROP_MAX PROP_TABSTOP PROP_VISIBLE Tipo de Dato Vlido Integer String String Integer String String String String String Integer Integer TRUE / FALSE TRUE / FALSE TRUE / FALSE Valores de Dato Vlidos TRUE / FALSE

Llamadas de Funciones API de Solomon

117

Ejemplo
En este ejemplo se navega a travs lotes en la pantalla de Plizas (01.010.00) de Contabilidad:
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
Instruccin SetProp, funcin Edit_Next

118

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

GetSqlType (Funcin)
Determina qu tipo de servidor de base de datos se est utilizando.

Sintaxis
SqlType = GetSqlType()

Observaciones
Microsoft Dynamics SL soporta actualmente solamente el uso de basse de datos Microsoft SQL Server . Esta es una API antigua que soportaba mltiples tipos de bases de datos. Para compatibilidad inversa ha sido preservada. La funcin GetSqlType retorna una de las siguientes constantes globales de tipo integer declaradas en el mdulo VBTools_VBA:
Valor de Retorno MSSqlType Descripcin Se est utilizando el servidor de base de datos Microsoft SQL

Ejemplo
Dim SqlDatabaseBeingUtilized As Integer SqlDatabaseBeingUtilized = GetSqlType()

Llamadas de Funciones API de Solomon

119

GetSysDate (Instruccin)
Recupera la fecha del sistema actual.

Sintaxis
Call GetSysDate(Date)

Observaciones
La instruccin GetSysDate utiliza los siguientes argumentos:
Argumento Date Tipo Tipo de dato SDate definido por el usuario (declarado en el mdulo VBTools_VBA) Descripcin 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
Instruccin GetSysTime

120

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

GetSysTime (Instruccin)
Recupera la hora de sistema actual.

Sintaxis
Call GetSysTime(Time)

Observaciones
La instruccin GetSysTime utiliza los siguientes argumentos:
Argumento Time Tipo Tipo de dato STime definido por el usuario (declarado en el mdulo VBTools_VBA) Descripcin 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
Instruccin GetSysDate

Llamadas de Funciones API de Solomon

121

HideForm (Instruccin)
Oculta un sub-formulario 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 instruccin HideForm utiliza los siguientes argumentos:
Argumento SubFormName Tipo String Descripcin Formulario a ser ocultado.

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

Tambin Vea
Instruccin DispForm

122

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

IncrStrg (Instruccin)
Incrementa una representacin de un string en un valor numrico entero.

Sintaxis
Call IncrStrg(StringNbr, Length, Increment)

Observaciones
La instruccin IncrStrg utiliza los siguientes argumentos:
Argumento StringNbr Length Tipo String Integer Descripcin Cadena de caracteres cuyo nmero va a ser incrementado. 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. Cantidad por la cual se incrementa StringNbr.

Increment

Integer

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

123

IntlStrToDate (Instruccin)
Convierte una cadena de caracteres de fecha desde el estilo de fecha corto de Windows 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 a un formato adecuado para ser almacenado en un campo de fecha de la base de datos SQL. La instruccin IntlStrToDate utiliza los siguientes argumentos:
Argumento DateStrToConvert Tipo String Descripcin Cadena de caracteres de fecha a ser convertida. Esta cadena de caracteres debe estar en el formato Windows short date. Valor de fecha convertido.

SQLDate

Tipo de dato SDate definido por el usuario (declarado en Applic.DH)

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

124

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

IParm (Funcin)
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 SQLParmStr IntToConvert Tipo String Integer Descripcin IntToConvert convertido a un parmetro de cadena de caracteres SQL. 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 instruccin SQL fue usada para crear un procedimiento almacenado 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 almacenado definido anteriormente 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 almacenado 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

125

Is_TI (Funcin)
Retorna si es que la aplicacin Microsoft Dynamics SL est o no en modo Importacin de Transacciones.

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 Importacin de Transacciones. La funcin Is_TI retorna lo siguiente: True La aplicacin se est ejecutando en modo Importacin de Transacciones. False La aplicacin no se est ejecutando en modo Importacin de Transacciones.

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

Tambin Vea
Instruccin AliasConstant

126

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Launch (Funcin)
Ejecuta otro programa ejecutable.

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

Observaciones
Permite ejecutar cualquier ventana Microsoft Dynamics SL (o cualquier otra aplicacin Windows) desde cualquier otra ventana Microsoft Dynamics SL. Usted tambin puede pasar parmetros a las ventanas y usar la funcin ApplGetParms en la aplicacin ejecutada para recibir los parmetros. La funcin Launch utiliza los siguientes argumentos:
Argumento RetVal Tipo Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 declaradas en el mdulo VBTools_VBA estn reservados para este uso). La lnea de comandos requerida para ejecutar la aplicacin (parmetros includos separados por la constante PRMSEP declarada en el mdulo VBTools_VBA). Si la aplicacin es una aplicacin Microsoft Dynamics SL o no lo es (True o False). 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 Quick Maintenance. Estado de la aplicacin enviada a ejecucin (launched). El mdulo VBTools_VBA tiene dos constantes declaradas para este propsito: LaunchMaximize y LaunchMinimize. Un cero ejecuta la aplicacin en su estado normal.

CommandLine

String

SAFApp WaitFlag

Integer Integer

WindowFlag

Integer

Llamadas de Funciones API de Solomon

127

Para ejecutar un reporte de Microsoft Dynamics SL, usted debe iniciar la ejecucin de la aplicacin ROI con los parmetros apropiados. Los parmetros disponibles que pueden ser pasados a ROI (y su descripcin) se muestran a continuacin:
Parmetro /RUN /WHERE /DEBUG Descripcin Sigue el nmero de reporte que usted quiere ejecutar. Sigue las restricciones de clusula WHERE de SQL. Crea un archivo de texto llamado RSWRUN.? En el directorio del programa Microsoft Dynamics SL. Este archivo TXT contiene todos los parmetros entregados al reporte. (Slo til para propsitos de verificacin y correccin de errores (debugging)). Sigue al nombre del formato o nmero del reporte particular. Imprime el reporte en la pantalla si es que se especifica. (Como defecto se fija la impresora actual). Sigue al nombre de la plantilla de reporte que usted quiere cargar para el reporte.

/FORMAT /PSCRN /TEMPLATE

Ejemplo
El siguiente es el cdigo para la aplicacin launched Proveedores (03.270.00) de Cuentas por Pagar:
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, instruccin ApplSetParmValue

128

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

El siguiente cdigo es para la pantalla Voucher and Adjustment Entry (03.010.00) del mdulo Cuentas por Pagar (la aplicacin que realiza la ejecucin). An cuando este ejemplo usa un botn, 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$ Dim VendParm$ 'Stores the command line string for Launch() '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

Iniciando la Ejecucin de ROI (Launching ROI)


El siguiente ejemplo imprimir el Vendor Trial Balance (03.650.00) de Cuentas por Pagar para el proveedor en la ventana Vendor Maintenance (03.270.00). Este cdigo es colocado en el evento click de un botn. 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

129

MCallChks (Funcin)
Realiza verificacin de errores en una columna especfica de un objeto 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 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 IntVar Tipo Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 declarados en el mdulo VBTools_VBA estn reservados para este propsito). Manejador del objeto de grilla. Nombre del objeto de control inicial para ejecutar el evento Chk. Nombre del objeto de control final para ejecutar el evento Chk.

gridhandle ctlbeg ctlend

Integer String String

Tambin Vea
Funcin CallChks, funcin GetGridHandle

130

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MClear (Instruccin)
Elimina todos los registros de un arreglo de memoria designado.

Sintaxis
Call MClear(MemHandle)

Observaciones
La instruccin 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 instruccin MClear utiliza los siguientes argumentos:
Argumento MemHandle Tipo Integer Descripcin Manejador de recursos del arreglo de memoria.

Tambin Vea
Funciones VBA_MOpen

Llamadas de Funciones API de Solomon

131

MClose (Instruccin)
Cierra un arreglo de memoria existente.

Sintaxis
Call MClose(MemHandle)

Observaciones
MClose puede usarse para cerrar un arreglo de memoria abierto previamente mediante una de las funciones VBA_MOpen. La instruccin MClose utiliza los siguientes argumentos:
Argumento MemHandle Tipo Integer Descripcin Manejador de recursos del arreglo de memoria.

132

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 Dim CSR_Account Dim SqlStr Dim Account_Fetch As Integer As Integer As String 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

133

MDelete (Funcin)
Elimina el registro actual desde el arreglo de memoria designado.

Sintaxis
RecFetch = MDelete(MemHandle, RecMaintFlg)

Observaciones
El registro actual de un arreglo de memoria puede ser eliminado usando la funcin MDelete. Despus de que el registro haya sido eliminado, 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 eliminado. 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 RecFetch Tipo Integer Descripcin 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 RecMaintFlg Integer Integer Manejador de recursos del arreglo de memoria. Estado del registro del arreglo de memoria (asumiendo que fue capturado satisfactoriamente). El mdulo VBTools_VBA contiene las siguientes constantes simblicas que definen posibles valores de estado de registros de arreglos de memoria: INSERTED, UPDATED y NOTCHANGED

Tambin Vea
Instruccin MDisplay, instruccin MInsert, instruccin MUpdate

134

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MDisplay (Instruccin)
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 automticamente . Cada vez que la informacin dentro de este arreglo de memoria es modificada directamente por la aplicacin, contrarrestando lo hecho por el usuario, el control SAFGrid tiene que ser re-desplegado posteriormente. 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 instruccin MDisplay utiliza los siguientes argumentos:
Argumento MemHandle Tipo Integer Descripcin 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

135

Ejemplo
Sub cBegProcessing_Click () Dim RecFound Dim MemMaintFlg Dim Nbr_Of_Batches_Processed As Integer As Integer 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

136

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Mess (Instruccin)
Despliega un mensaje desde el archivo de mensajes y espera hasta que el usuario elija un botn.

Sintaxis
Call Mess(MsgNumber)

Observaciones
Durante la instalacin, un archivo de texto ASCII llamado Messages.csv es copiado al directorio de programa Microsoft Dynamics SL. Este archivo contiene todos los mensajes relativos al producto Microsoft Dynamics SL , incluyendo todas las aplicaciones desarrolladas en forma independiente, creadas con Microsoft SL SDK. 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 instruccin Mess. La instruccin Messf debera 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 instruccin estndar de mensajes de texto de Visual Basic MsgBox no debe ser usada en aplicaciones desarrolladas con Microsoft SL SDK, a fin de evitar conflictos con otras utilidades tales como Cut/Copy/Paste y Importacin de Transacciones. Estas utilidades tienen sofisticacin incorporada para responder a mensajes de la aplicacin subyacente, durante operaciones particulares como pegar e importar. Sin embargo, esta funcionalidad automtica no aplica a mensajes desplegados utilizando la instruccin estndar MsgBox de Visual Basic. La instruccin MessBox ha sido suministrada para facilitar una funcionalidad similar a la instruccin estndar MsgBox de Visual Basic, con la excepcin de que MessBox no crea conflictos con otras utilidades Microsoft Dynamics SL. La instruccin Mess utiliza los siguientes argumentos:
Argumento MsgNumber Tipo Integer Descripcin Nmero del mensaje del archivo de mensajes que va a ser desplegado.

Llamadas de Funciones API de Solomon

137

Cada registro (i.e., mensaje) contenido dentro del archivo Messages.csv contiene los siguientes campos separados por una coma:
Nombre del Campo Message Number Category Language Type Box Type Record Type Comentarios Nmero de mensaje, el cual es requerido por la mayora de las APIs de mensaje, tal como Mess. 0 para todos los mensajes. Todas las aplicaciones desarrolladas en foma independiente tambin tienen que usar 0. 0 para ingls. Para uso futuro. Actualmente fije el campo a 0. Vea explicacin detallada de valores Box Type en la siguiente tabla. S para mensajes creados y mantenidos por Microsoft. Los desarrolladores independientes no deben usar S para sus mensajes nuevos, dado que pueden ser borrados o modificados por Microsoft. Este valor es usado por Importacin de Transacciones para responder a mensajes desplegados por la aplicacin subyacente durante la operacin de importacin. Texto del mensaje. Parmetros reemplazables aparecen como %s. Por ejemplo: Mi nombre es %s y mi apellido es %s.

Unattended Default Button

Message Text

El campo Box Type dentro del archivo Messages.csv puede tener los siguientes valores:
Valor de Box Type 0 16 48 64 36 292 33 cono Ninguno Pare Exclamacin Informacin Pregunta Pregunta Pregunta Botones OK OK OK OK Yes / No Yes / No OK / Cancel Botn por defecto OK OK OK OK Yes No OK

Ejemplo
La ventana Employee Maintenance (02.250.00) del mdulo Payroll 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 utilizado 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.

138

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
Instruccin MessBox, instruccin Messf, funcin MessResponse

Llamadas de Funciones API de Solomon

139

MessBox (Instruccin)
Despliega un mensaje y espera a que el usuario escoja un botn.

Sintaxis
Call MessBox(Msg, Type, Title)

Observaciones
La instruccin estndar de mensajes de texto de Visual Basic MsgBox no debe ser usada en aplicaciones desarrolladas con Microsoft SL SDK a fin de evitar conflictos con otras utilidades tales como Cut/Copy/Paste y Importacin de Transacciones. Estas utilidades tienen sofisticacin incorporada para responder a mensajes de la aplicacin subyacente, durante operaciones particulares como pegar e importar. Sin embargo, esta funcionalidad automtica no aplica a mensajes desplegados utilizando la instruccin estndar MsgBox de Visual Basic. La instruccin MessBox ha sido suministrada para facilitar una funcionalidad similar a la instruccin estndar MsgBox de Visual Basic, con la excepcin de que MessBox no crea conflictos con otras utilidades Microsoft Dynamics SL. La funcin MessResponse puede ser usada para determinar el botn que fue elegido por el usuario para cerrar el mensaje de texto. La instruccin MessBox utiliza los siguientes argumentos:
Argumento Msg Type Title Tipo String Integer String Descripcin Mensaje de texto a ser desplegado. Valor numrico que controla el estilo del cono, los botones a ser desplegados y el botn por defecto. 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
Instruccin Mess, instruccin Messf, funcin MessResponse

140

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Messf (Instruccin)
Da formato a un mensaje del archivo de mensajes con parmetros reemplazables, luego lo despliega y espera a que el usuario escoja un botn.

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

Observaciones
Dunante la instalacin, un archivo de texto ASCII llamado Messages.csv es copiado al directorio de programa Microsoft Dynamics SL. Este archivo contiene todos los mensajes relativos al producto Microsoft Dynamics SL, incluyendo todas las aplicaciones desarrolladas en forma independiente, creadas con Microsoft SL SDK. 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 instruccin Messf junto con los valores de datos para cada parmetro reemplazable. La instruccin 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 instruccin estndar de mensajes de texto de Visual Basic MsgBox no debe ser usada en aplicaciones desarrolladas con Microsoft SL SDK, a fin de evitar conflictos con otras utilidades Microsoft Dynamics SL, tales como Cut/Copy/Paste y Importacin de Transacciones. Estas aplicaciones tienen sofisticacin incorporada para responder a mensajes de la aplicacin subyacente, durante operaciones particulares como pegar e importar. Sin embargo, esta funcionalidad automtica no aplica a mensajes desplegados utilizando la instruccin estndar MsgBox de Visual Basic. La instruccin MessBox ha sido suministrada para facilitar una funcionalidad similar a la instruccin estndar MsgBox de Visual Basic, con la excepcin de que MessBox no crea conflictos con otras utilidades Microsoft Dynamics SL.

Llamadas de Funciones API de Solomon La instruccin Messf utiliza los siguientes argumentos:
Argumento MsgNumber Parm1Str Parm2Str Tipo Integer String String Descripcin

141

Nmero del mensaje del archivo de mensajes que va a ser desplegado. Valor del dato para el primer parmetro reemplazable. Valor del dato para el segundo parmetro reemplazable. En blanco si el texto del mensaje contiene un solo parmetro reemplazable. Valor del dato para el tercer parmetro reemplazable. En blanco si el texto del mensaje contiene menos de tres parmetros reemplazables. Valor del dato para el cuarto parmetro reemplazable. En blanco si el texto del mensaje contiene menos de cuatro parmetros reemplazables. Valor del dato para el quinto parmetro reemplazable. En blanco si el texto del mensaje contiene menos de cinco parmetros reemplazables. Valor del dato para el sexto parmetro reemplazable. En blanco si el texto del mensaje contiene menos de seis parmetros reemplazables.

Parm3Str

String

Parm4Str

String

Parm5Str

String

Parm6Str

String

Cada registro (i.e. mensaje) contenido dentro del archivo Messages.csv contiene los siguientes campos separados por una coma:
Nombre del Campo Message Number Category Language Type Box Type Record Type Comentarios Nmero de mensaje, el cual es requerido por la mayora de las APIs de mensaje, tal como Mess. 0 para todos los mensajes. Todas las aplicaciones desarrolladas en foma independiente tambin tienen que usar 0. 0 para ingls. Para uso futuro. Actualmente fije el campo a 0. Vea explicacin detallada de valores Box Type en la siguiente tabla. S para mensajes creados y mantenidos por Microsoft. Los desarrolladores independientes no deben usar S para sus mensajes nuevos, dado que pueden ser borrados o modificados por Microsoft. Este valor es usado por Importacin de Transacciones para responder a mensajes desplegados por la aplicacin subyacente durante la operacin de importacin. Texto del mensaje. Parmetros reemplazables aparecen como %s. Por ejemplo: Mi nombre es %s y mi apellido es %s.

Unattended Default Button

Message Text

142

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 0 16 48 64 36 292 33 cono Ninguno Pare Exclamacin Informacin Pregunta Pregunta Pregunta Botones OK OK OK OK Yes / No Yes / No OK / Cancel Botn por defecto OK OK OK OK Yes No OK

Ejemplo
La ventana Manual Check Entry (02.040.00) del mdulo Payroll utiliza el siguiente cdigo para advertir al usuario del hecho de que un batch est desbalanceado. El mensaje nmero 818 es el mensaje desplegado y su texto asociado en el archivo de mensajes es el siguiente: Batch is out of balance by %s. Do you want to edit? Este mensaje particular muestra tambin 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
Instruccin Mess, instruccin MessBox, funcin MessResponse

Llamadas de Funciones API de Solomon

143

MessResponse (Funcin)
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 devuelve una de las siguientes constantes simblicas declaradas en el mdulo VBTools_VBA:
Valor de Retorno IDOK IDYES IDNO IDCANCEL IDABORT IDRETRY IDIGNORE Descripcin Se seleccion el botn OK Se seleccion el botn Yes Se seleccion el botn No Se seleccion el botn Cancel Se seleccion el botn Abort Se seleccion el botn Retry 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
Instruccin Mess, instruccin Messf

144

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

mFindControlName (Funcin)
Devuelve una lista de nombres de controles presentes en la aplicacin actual.

Sintaxis
ControlName = mFindControlName(FirstFlag)

Observaciones
La funcin mFindControlName es usada para devolver 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, si se insertan controles que tienen rdenes de ndice tab (tab index order) idnticos, mFindControlName encuentra estos controles en el orden en que fueron creados. La funcin mFindControlName utiliza los siguientes argumentos:
Argumento ControlName FirstFlag Tipo String Integer Descripcin La propiedad nombre del control. 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 ndice de Tab (Tab Index order).

Llamadas de Funciones API de Solomon

145

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 configurada 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

146

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

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 automticamente ), 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 RecFetch Tipo Integer Descripcin 0 si unregistro es capturado satisfactoriamente. Se retorna NOTFOUND si no existen registros dentro del arreglo de memoria especificado. Manejador de recursos del arreglo de memoria. 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.

MemHandle RecMaintFlg

Integer Integer

Tambin Vea
Funcin MLast, funcin MNext, funcin MPrev

Llamadas de Funciones API de Solomon

147

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

Sintaxis
RecMaintFlg = MGetLineStatus(MemHandle)

Observaciones
La funcin MGetLineStatus permite a la aplicacin rescatar el estado (status) del registro actual del arreglo de memoria en cualquier momento. La funcin MGetLineStatus utiliza los siguientes argumentos:
Argumento RecMaintFlg Tipo Integer Descripcin 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. Manejador de recursos del arreglo de memoria.

MemHandle

Integer

Tambin Vea
Funcin MSetLineStatus

148

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MGetRowNum (Funcin)
Devuelve 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 CurrRecNbr MemHandle Tipo Integer Integer Descripcin Nmero de fila/registro del registro actual Manejador de recursos del arreglo de memoria

Tambin Vea
Funcin MRowCnt, instruccin MSetRowNum

Llamadas de Funciones API de Solomon

149

MInsert (Instruccin)
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 estructuras 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 automticamente ), un llamado a MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con el arreglo de memoria. La instruccin MInsert utiliza los siguientes argumentos:
Argumento MemHandle Tipo Integer Descripcin Manejador de recursos del arreglo de memoria

150

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 Dim CSR_Account Dim SqlStr Dim Account_Fetch As Integer As Integer As String 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, instruccin MUpdate, funciones VBA_MOpen

Llamadas de Funciones API de Solomon

151

MKey (Instruccin)
Define un campo llave para un arreglo de memoria abierto previamente.

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. Los arreglos de memoria asociados a un control SAFGrid tienen inicializado su sort order , basado en los controles de campos claves contenidos dentro de la grilla (i.e. marcados con una k en la propiedad Level de los controles). Todos los otros arreglos 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, tamao y offset de byte dentro de un tipo de dato definido por el usuario. La instruccin MKey es el mtodo ms simple y comn de todos para definir un campo llave de un arreglo de memoria. MKey es tan simple, porque el sistema va a determinar automticamente la informacin requerida de campo llave 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 variable de memoria 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.

152

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La instruccin MKey utiliza los siguientes argumentos:


Argumento MemHandle KeySegmentNbr Tipo Integer Integer Descripcin Manejador nico a un arreglo de memoria abierto previamente. Segmento de llave del arreglo de memoria cuyo campo llave est siendo definido. El primer nmero de segmento llave es siempre cero. Las llaves multisegmentos tienen que tener valores contiguos de segmentos llaves, tal como 0 y 1. El nmero mximo permitido para segmentos de llaves es cinco. Nombre del campo clave designado en formato Table.FieldName, tal como Account.Acct. Vardadero (True) si el segmento llave debe ser clasificado en orden ascendente. Falso (False) para implementar una secuencia de clasificacin descendente para el segmento llave que est siendo definido.

TableDotFieldName Ascending

String Integer

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y definir mltiples campos llave.
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, instruccin MKeyFld, instruccin MKeyOffset, instruccin MSetRowNum, instruccin MSort, funciones VBA_MOpen

Llamadas de Funciones API de Solomon

153

MKeyFind (Funcin)
Encuentra un registro especfico en un arreglo de memoria clasificado, basado en valores de campos llave 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. Los arreglos de memoria asociados a un control SAFGrid tienen inicializado su sort order , basado en los controles de campos claves contenidos dentro de la grilla (i.e. marcados con una k en la propiedad Level de los controles). Todos los otros arreglos 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, tamao y offset de byte dentro de un tipo de dato definido por el usuario. Si no existe un registro cuyo campo llave 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 RecFetch Tipo Integer Descripcin Retorna 0 si el registro es capturado satisfactoriamente. Retorna NOTFOUND si no se puede encontrar una correspondencia exacta. MemHandle KeySeg1Val KeySeg2Val KeySeg3Val Integer Integer, Double or String Integer, Double or String Integer, Double or String Integer, Double or String Integer, Double or String Manejador de recursos del arreglo de memoria. Valor deseado para el primer segmento llave. Valor deseado para el segundo segmento llave. PNULL si el arreglo de memoria slo tiene un segmento llave. Valor deseado para el tercer segmento llave. PNULL si el arreglo de memoria tiene menos de tres segmentos llave. Valor deseado para el cuarto segmento llave. PNULL si el arreglo de memoria tiene menos de cuatro segmentos llave. Valor deseado para el quinto segmento llave. PNULL si el arreglo de memoria tiene menos de cinco segmentos llave.

KeySeg4Val

KeySeg5Val

154

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y cargar el completo catlogo de cuentas hacia el arreglo creado recientemente, y luego encuentra un registro de cuenta especfico.
Dim Mem_Account Dim CSR_Account Dim SqlStr Dim Account_Fetch As Integer As Integer As String 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
Instruccin MKey, instruccin MKeyFld, instruccin MKeyOffset, instruccin MSetRow, instruccin MSetRowNum, instruccin MSort, funciones VBA_MOpen

Llamadas de Funciones API de Solomon

155

MKeyFld (Instruccin)
Define un campo llave para un arreglo de memoria abierto previamente.

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. Los arreglos de memoria asociados a un control SAFGrid tienen inicializado su sort order , basado en los controles de campos claves contenidos dentro de la grilla (i.e. marcados con una k en la propiedad Level de los controles). Todos los otros arreglos 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, tamao 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 llaves multi-segmentos mediante llamados secesivos a MKeyFld con diferentes valores de argumentos KeySegmentNbr.

156

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La instruccin MKeyFld utiliza los siguientes argumentos:


Argumento MemHandle KeySegmentNbr Tipo Integer Integer Descripcin Manejador nico a un arreglo de memoria abierto previamente. Segmento llave del arreglo de memoria cuyo campo llave est siendo definido. El primer nmero de segmento llave es siempre cero. Llaves multisegmentos tienen que tener valores contiguos de segmentos llaves, tal como 0 y 1. El nmero mximo permitido para segmentos llaves es cinco. Nombre del campo llave designado en formato Table.FieldName, tal como Account.Acct. Estructura de tabla de arreglo de memoria que contiene el campo llave designado. Esta estructura de tabla tiene que haber sido previamente pasada al llamado VBA_MOpen. Verdadero (True) si el segmento llave debe ser ordenado en formaascendente. Falso (False) para implementar una secuencia de sort descendente para el segmento llave que est siendo definido.

TableDotFieldName bTable

String Tipo de dato definido por el usuario Integer

Ascending

Llamadas de Funciones API de Solomon

157

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y definir mltiples campos llaves.
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
Instruccin MKey, funcin MKeyFind, instruccin MKeyOffset, instruccin MSetRowNum, instruccin MSort, funciones VBA_MOpen

158

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MKeyOffset (Instruccin)
Define un campo llave 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. Los arreglos de memoria asociados a un control SAFGrid tienen inicializado su sort order , basado en los controles de campos claves contenidos dentro de la grilla (i.e. marcados con una k en la propiedad Level de los controles). Todos los otros arreglos 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, tamao 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 llaves de arreglos de memoria, pero tambin es el ms detallado para codificar. Est diseado para facilitar la definicin de un campo llave 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 VisualBasic 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 instruccin MKeyOffset permite al desarrollador pasar toda esta informacin detallada relacionada al campo llave designado en forma explcita, dado que no existe en el directorio de datos SQL. Se pueden definir llaves multi-segmentos mediante llamados secesivos a MKeyOffset con diferentes valores de argumentos KeySegmentNbr.

Llamadas de Funciones API de Solomon

159

La instruccin MKeyOffset utiliza los siguientes argumentos:


Argumento MemHandle KeySegmentNbr Tipo Integer Integer Descripcin Manejador nico a un arreglo de memoria abierto previamente. Segmento llave del arreglo de memoria cuyo campo llave est siendo definido. El primer nmero de segmento llave es siempre cero. Llaves multisegmentos tienen que tener valores contiguos de segmentos llaves, tal como 0 y 1. El nmero mximo permitido para segmentos llaves es cinco. Estructura de tabla de arreglo de memoria que contiene el campo llave designado. Esta estructura de tabla tiene que haber sido previamente pasada al llamado VBA_MOpen. Este argumento est diseado para ayudar al sistema localizar el primer byte del campo llave 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 llave designado se encuentra del primer byte de la totalidad de los tipos de datos definidos por el usuario. Si el campo llave designado se encuentra en el primer campo en el tipo de dato definido por el usuario, entonces debiera pasarse un valor cero. Especifica el tipo de dato del campo llave 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 llave designado. Por ejemplo, LenB(bTable.KeyFld). Nota: es crtico usar LenB() en vez de Len() para todo parmetro table length no-nulo. Vardadero (True) si el segmento llave debe ser ordenado en forma ascendente. Falso (False) para implementar una secuencia de sort descendente para el segmento llave que est siendo definido.

bTable

Tipo de dato definido por el usuario Integer

KeyFldByteOffset

KeyFldDataType

Integer

Ascending

Integer

160

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 ya 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 llave requerido. Como consecuencia, MKeyOffset tiene que ser usado para implementar la clasificacin en el campo llave 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 Global bEmployee_SelFld As Employee_SelFld As String * 30 As String * 10

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 llave.
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

161

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 instruccin Select SQL, corresponde al orden de los campos de tipos de dato definidos por el usuario Employee_SelFld.
Dim CSR_Employee_SelFld Dim SqlStr Dim Employee_SelFld_Fetch '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 As Integer As String As Integer

Tambin Vea
Instruccin MKey, funcin MKeyFind, instruccin MKeyFld, instruccin MSetRowNum, instruccin MSort, funciones VBA_MOpen

162

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MLast (Funcin)
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 automticamente ), 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 RecFetch Tipo Integer Descripcin 0 si unregistro es capturado satisfactoriamente. Se retorna NOTFOUND si no existen registros dentro del arreglo de memoria especificado. Manejador de recursos del arreglo de memoria. 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.

MemHandle RecMaintFlg

Integer Integer

Tambin Vea
Funcin MFirst, funcin MNext, funcin MPrev

Llamadas de Funciones API de Solomon

163

MLoad (Instruccin)
Carga un arreglo de memoria con todos los registros devueltos desde la base de datos mediante una instruccin 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 instruccin MLoad. El nico requerimiento es que el cursor pasado como parmetro a la instruccin MLoad tiene que haber estado inicializado mediante una instruccin SQL Select o un procedimiento almacenado, para que est listo para devolver datos. Se puede inicializar el cursor pasando la instruccin SQL Select o el procedimiento almacenado, junto con cualquier otro parmetro necesario. La instruccin MLoad utiliza los siguientes argumentos:
Argumento MemHandle Cursor Tipo Integer Integer Descripcin Manejador de recursos del arreglo de memoria. Cursor de la base de datos SQL. Este cursor tiene que haber sido inicializado mediante una instruccin SQL Select o un procedimiento almacenado.

Ejemplo
El siguiente ejemplo ilustra un arreglo de memoria que contiene slo campos seleccionados de la tabla Employee, el cual ya 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 llave requerido. Como consecuencia, MKeyOffset tiene que ser usado para implementar la clasificacin en el campo llave 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 Global bEmployee_SelFld As Employee_SelFld As String * 30 As String * 10

164

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones Cdigo para abrir un arreglo de memoria para el tipo de datos definido por el usuario bEmployee_SelFld y definir Employee ID como el campo llave.
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)

Cdigo para cargar el arreglo de memoria con campos seleccionados relevantes para todos los empleados que estn en la base de datos. Note que el orden de los campos en la instruccin SQL Select corresponde al orden de los campos en el tipo de datos definido por el usuario Employee_SelFld.
Dim CSR_Employee_SelFld Dim SqlStr Dim Employee_SelFld_Fetch '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 As Integer As String As Integer

Tambin Vea
Instruccin Sql

Llamadas de Funciones API de Solomon

165

MNext (Funcin)
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 automticamente ), 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 RecFetch Tipo Integer Descripcin 0 si un registro es obtenido (fetched) satisfactoriamente. Se retorna NOTFOUND si no existen registros dentro del arreglo de memoria especificado. Manejador de recursos del arreglo de memoria. 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.

MemHandle RecMaintFlg

Integer Integer

Tambin Vea
Funcin MFirst, funcin MLast, funcin MPrev

166

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MPrev (Funcin)
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 automticamente ), 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 RecFetch Tipo Integer Descripcin 0 si un registro es obtenido satisfactoriamente. Se retorna NOTFOUND si no existen registros dentro del arreglo de memoria especificado. Manejador de recursos del arreglo de memoria. 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.

MemHandle RecMaintFlg

Integer Integer

Tambin Vea
Funcin MFirst, funcin MLast, funcin MNext

Llamadas de Funciones API de Solomon

167

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

Sintaxis
NumRecs = MRowCnt( MemHandle)

Observaciones
La funcin MRowCnt utiliza los siguientes argumentos:
Argumento NumRecs MemHandle Tipo Integer Integer Descripcin Nmero de registros del arreglo de memoria designado. Manejador de recursos del arreglo de memoria.

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

Tambin Vea
Funciones VBA_MOpen

168

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MSet (Instruccin)
Establece explcitamente el valor de un control particular para cada registro en su control SAFGrid correspondiente.

Sintaxis
Call MSet(Control, NewDataValue)

Observaciones
La instruccin MSet utiliza los siguientes argumentos:
Argumento Control Tipo String Descripcin Control que est ligado al Record.FieldName cuyo valor ser cambiado para cada registro en el SAFGrid relevante. Note: esta instruccin es solamente para uso con controles asociados con un control SAFGrid. 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.

NewDataValue

String

Tambin Vea
Instruccin MSetProp

Llamadas de Funciones API de Solomon

169

MSetLineStatus (Funcin)
Establece 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 automticamente 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 automticamente 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 desde 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 RetVal MemHandle RecMaintFlg Tipo Integer Integer Integer Descripcin -1 si se entrega un manejador de arreglo de memoria (memory array handle) invlido. Manejador de recursos del arreglo de memoria. 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.

170

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 Dim CSR_Account Dim SqlStr Dim Account_Fetch Dim Retval As Integer As Integer As String As Integer 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, instruccin MInsert, instruccin MUpdate

Llamadas de Funciones API de Solomon

171

MSetProp (Instruccin)
Fija el valor de una propiedad particular para el control en vista de formulario 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 Microsoft SL SDK (i.e. vista de formulario) subyacente. La instruccin MSetProp puede ser usada para modificar la configuracin 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 instruccin MSetProp. Si la aplicacin desea 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 instruccin SetProp desde el evento LineGotFocus de cada lnea de detalle individual. La declaracin MSetProp utiliza los siguientes argumentos:
Argumento Control Tipo String Descripcin Control cuyo valor de propiedad designado ser modificado tanto de la vista de grilla como de la vista de formulario. Nombre de la propiedad cuyo valor ser modificado. Nuevo valor de la propiedad. El tipo de dato vara segn la propiedad.

PropertyName NewPropValue

String String or Integer

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

172

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MSetRowNum (Instruccin)
Establece 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 instruccin MSetRowNum. MSetRowNum salta a un nmero de registro especfico, mientras que MKeyFind localiza al registro mediante valores de campos llaves designados. La instruccin MSetRowNum utiliza los siguientes argumentos:
Argumento MemHandle NewCurrRecNbr Tipo Integer Integer Descripcin Manejador de recusros del arreglo de memoria Nmero de fila/registro del registro de arreglo de memoria deseado.

Tambin Vea
Funcin MGetRowNum, funcin MKeyFind

Llamadas de Funciones API de Solomon

173

MSort (Instruccin)
Ordena datos contenidos dentro de un arreglo de memoria existente, basado en campos llaves predefinidos.

Sintaxis
Call MSort( MemHandle)

Observaciones
Esta instruccin ordenar todos los registros existentes dentro de un arreglo de memoria designado, basado en campos llaves 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 llaves 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
Instruccin MKey, funcin MKeyFind, funcin MKeyOffset, instruccin MSetRowNum, funciones VBA_MOpen

174

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

MUpdate (Instruccin)
Actualiza el registro de arreglo de memoria actual de un arreglo de memoria designado con nuevos valores de datos.

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 instruccin MUpdate utiliza los siguientes argumentos:
Argumento MemHandle Tipo Integer Descripcin Manejador de recursos del arreglo de memoria.

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

Llamadas de Funciones API de Solomon

175

NameAltDisplay (Funcin)
Muestra un campo de cadena de caracteres con caracteres de intercambio suprimidos.

Sintaxis
StrVar = NameAltDisplay ( FieldName)

Observaciones
Para adecuar la clasificacin alternada por nombre, Microsoft Dynamics SL almacena la mayora de los campos de direccin y nombre 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. El software luego almacena esta entrada como Jones Company~The. Si usted desea recuperar 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 est guardado en la base de datos, es mostrado como The Jones Company. La funcin NameAltDisplay utiliza los siguientes argumentos:
Argumento StrVar Tipo String Descripcin Cualquier variable de tipo de cadena de caracteres en donde almacenar la versin intercambiada (swapped version) del campo. Nombre de campo u objeto.

FieldName

String

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

176

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

Sintaxis
RetVal = PasteTemplate(TemplateID)

Observaciones
La caracterstica de Plantillas 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 instruccin SaveTemplate, como tambin mediante el item de men Plantillas en el men Edicin. 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 Plantillas del men Edicin. La funcin PasteTemplate utiliza los siguientes argumentos:
Argumento RetVal Tipo Integer Descripcin Cero si no ocurren errores. Si el TemplateID no existe, retorna la constante simblica NOTFOUND, declarada en el mdulo VBTools_VBA. Identificacin de la plantilla, cuya informacin va a ser pegada dentro de la pantalla de aplicacin actual.

TemplateID

String

Tambin Vea
Instruccin SaveTemplate

Llamadas de Funciones API de Solomon

177

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

Sintaxis
RetVal = PeriodCheck(PeriodString)

Observaciones
La funcin PeriodCheck utiliza los siguientes argumentos:
Argumento RetVal Tipo Integer Descripcin Valor de la parte nmero de perodo 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 de perodo es invlida si la parte del perodo es menor a uno o mayor al nmero de perodos fiscales vlidos definidos en el registro GLSetup. Cadena de caracteres de perodo a ser verificada. Debe estar en el formato YYYYPP.

PeriodString

String

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)

178

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

Sintaxis
NbrPeriods = PeriodMinusPeriod(PerNbr1, PerNbr2)

Observaciones
La funcin PeriodMinusPeriod utiliza los siguientes argumentos:
Argumento NbrPeriods Tipo Integer Descripcin Nmero de perodos entre PerNbr1 y PerNbr2. Si PerNbr1>PerNbr2, entonces el valor de perdos fiscales entre los dos perodos ser un valor negativo. Perodo fiscal inicial. Debe estar en formato YYYYPP. Perodo fiscal final. Debe estar en formato YYYYPP.

PerNbr1 PerNbr2

String String

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, " Microsoft Dynamics SL Message") End If

Tambin Vea
Funcin PeriodPlusPerNum

Llamadas de Funciones API de Solomon

179

PeriodPlusPerNum (Funcin)
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 ResultingPerNbr CurrPerNbr NbrPeriodsToAdd Tipo String String Integer Descripcin Resultado de CurrPerNbr + NbrPeriodsToAdd. Perodo fiscal inicial. Debe estar en formato YYYYPP. Nmero de perodos fiscales a sumar a CurrPerNbr. Se soportan valores negativos.

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

180

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

PVChkFetch (Funciones)
Recupera un registro compuesto desde la base de datos, usando una instruccin 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 instruccin SQL o un nombre de procedimiento almacenado. 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 instruccin SQL o un nombre de procedimiento almacenado. PVChkFetch1 est diseado para declaraciones SQL que retornen datos desde 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

181

Argumento RetVal

Tipo Integer

Descripcin 0 si el registro es capturado satisfactoriamente. Se retorna NOTFOUND si ningn registro concuerda con la clusula de restriccin de PV de la instruccin SQL. Control que contiene la propiedad PV a ser usada como la instruccin SQL. Puede ser opcionalmente PNULL si la llamada es realizada dentro del evento Chk del control cuya propiedad PV est siendo usada. Cursor de la base de datos SQL. Valor llave pasado como el ltimo parmetro a la clusula de restriccin de PV de la instruccin SQL. Estructura de tabla correspondiente a la tabla primaria de PV de la instruccin SQL. 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.

Ctrl

Control

Cursor SQLParmValue

Integer String

bTable1

Tipo de dato definido por el usuario Integer

bTable1Length

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, se utiliza la instruccin SQL en la propiedad PV del control cWrkLocId. 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 instruccin 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

182

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SaveTemplate (Instruccin)
Guarda informacin de la aplicacin actual en una plantilla designada.

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

Observaciones
La caracterstica de Plantillas 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 programticamente mediante la instruccin SaveTemplate, como tambin mediante el item de men Plantillas en el men Edicin. Cada plantilla puede contener transacciones completas y entidades o campos individuales seleccionados por el usuario. Las 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 designadas como privadas a un usuario especfico o pblicas para que estn disponibles para todos los usuarios. Las plantillas son almacenadas 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 peridos pegados desde una plantilla sern iguales a la fecha de negocios Microsoft Dynamics SL, ubicada en el men Archivo, y el perodo actual para el mdulo. Para reemplazar esta accin por defecto, el usuario que est ingresando datos para la plantilla, debe especificar una nueva fecha relativa o un valor de perido para cada campo deseado. Esto se hace inmediatamente antes de guardar 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. Los 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

183

La instruccin SaveTemplate utiliza los siguientes argumentos:


Argumento TemplateID Tipo String Descripcin Identificacin (ID) de la plantilla que est siendo creada o actualizada. Si ya existiera una plantilla con el TemplateID designado, ser reemplazada. El TemplateID puede tener hasta 30 caracteres. Descripcin de la plantilla. Identificacin de usuario Microsoft Dynamics SL para quien aplica la plantilla. Por defecto, la plantilla ser pblica (Public) si AppliesToUserID es dejado en blanco. 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. 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.

Description AppliesToUserID

String String

IncludeLowerLevels

Integer

StartingLevelNbr

Integer

Tambin Vea
Funcin PasteTemplate

184

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SDelete (Instruccin)
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 instruccin SDelete utiliza los siguientes argumentos:
Argumento Cursor TablesDeletingFrom Tipo Integer String Descripcin Cursor de la base de datos SQL. 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 Microsoft Dynamics SL'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

185

SDeleteAll (Funcin)
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 sido 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 RetVal Cursor TablesDeletingFrom Type Integer Integer String Cursor de la base de datos SQL. 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. Description

Ejemplo
Borra todos los proveedores que tengan cero en su saldo.
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, instruccin Sql, funciones SqlFetch

186

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SetBufferValue (Instruccin)
Establece un campo de buffer de datos de una aplicacin Microsoft Dynamics SL subyacente en 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 Microsoft Dynamics SL subyacente necesitan ser referenciadas y estos campos no estn representados como objetos en el formulario, esta instruccin 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 Microsoft Dynamics SL 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 instruccin SetBufferValue utiliza los siguientes argumentos:
Argumento bTable.FieldName Str Tipo String String Descripcin SQL Table.FieldName que usted quiere establecer. 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
Instruccin GetBufferValue

Llamadas de Funciones API de Solomon

187

SetDefaults (Instruccin)
Establece uno o ms controles a su valor por omisin 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. Cualquier 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 omisin. Un anlisis exhaustiva de todas las veces que esto ocurre est ms all del alcance de la instruccin SetDefaults. Sin embargo, una de las veces en que se establece el valor por omisin de un objeto es cuando la aplicacin explcitamente le indica al sistema hacer esto mediante la instruccin SetDefaults referenciando el objeto relevante. La instruccin SetDefaults puede usarse para definir los valores por omisin de todos los objetos de un sub-formulario. La instruccin Level_SetDefaults es funcionalmente equivalente, excepto a que puede ser usada para establecer los valores por omisin para 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 volver a mostrar el objeto relevante mediante la instruccin DispField. Despus de que el objeto haya sido vuelto a mostrar, puede ser deshabilitado mediante la instruccin SetProp. La instruccin 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 precaucin, 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 apropiadamente 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)

188

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La funcin SetDefaults utiliza los siguientes argumentos:


Argumento RetVal Tipo Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 declarados en el mdulo VBTools_VBA estn reservados para este uso). Nombre de formulario. Puede ser para incluir todos los formularios de la aplicacin. Nombre de campo. Puede ser para incluir todos los objetos en un formulario especfico.

FormObjectName FieldObjectName

String String

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
Instruccin DispField, instruccin SetProp

Llamadas de Funciones API de Solomon

189

SetLevelChg Statement (Instruccin)


Establece el estado de actualizacin 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 un flag de estado de nivel correspondiente, la cual es mantenida en forma automtica por el sistema. El propsito del flag 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 mencion 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 llave 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 instruccin SetLevelChg permite a la aplicacin reemplazar 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 instruccin SetLevelChg utiliza los siguientes argumentos:
Argumento LevelNbr Status Tipo Integer Integer Descripcin Nivel cuya bandera de estado ser fijada explcitamente. Estado de la bandera del nivel. Los siguientes valores vlidos son definidos como constantes simblicas en el mdulo VBTools_VBA: INSERTED, UPDATED, NOTCHANGED.

190

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 todos los descuentos (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 se ha actualizado informacin a nivel de grilla (i.e. LEVEL1 en este caso) mediante el programa, y por ello necesita ser guardada. Sin embargo, esta notificacin slo es necesaria si el sistema no est enterado 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

191

SetObjectValue (Funcin)
Establece el valor de campo de un objeto especfico.

Sintaxis
IntVar = SetObjectValue( ObjectName, Value)

Observaciones
Esta funcin le permite fijar el valor de cualquier objeto enlazado 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 instruccin 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 IntVal Tipo Integer Descripcin Cualquier variable de tipo integer (serr, serr1 serr12 declarados en el mdulo VBTools_VBA estn reservados para este uso). Nombre del objeto cuyo valor va a ser fijado. Valor que ser fijado a ObjectName.

ObjectName Value

String String

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, instruccin SetBufferValue

192

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SetProp (Instruccin)
Establece 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 establecer valores por defecto de las propiedades. La instruccin SetProp utiliza los siguientes argumentos:
Argumento ObjectName PropertyName PropertyValue Tipo String String Integer Descripcin Nombre del objeto cuya propiedad quiere modificarse. Propiedad que usted quiere modificar. 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 PROP_BLANKERR (requerida) PROP_CAPTION PROP_CUSTLIST PROP_ENABLED PROP_HEADING PROP_MASK PROP_MIN PROP_MAX PROP_TABSTOP PROP_VISIBLE Tipo de Dato Vlido Integer String String Integer String String String String Integer Integer TRUE / FALSE TRUE / FALSE TRUE / FALSE Valores de Dato Vlidos TRUE / FALSE

Llamadas de Funciones API de Solomon

193

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
Instruccin MSetProp, funcin SetDefaults

194

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SetStatusBarText (Instruccin)
Muestra texto en la barra de estado de la aplicacin (Application Status Bar).

Sintaxis
Call SetStatusBarText (StatusBarText, ToolTip)

Observaciones
Esta funcin permitira a la adaptacin establecer el texto de 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 muestra la descripcin de cuenta en la barra de estado de la aplicacin en Journal Entry (01.010) de Contabilidad.
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

195

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

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 instruccin SQL o un procedimiento almacenado, mediante la instruccin 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 instruccin 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).

196

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Argumento RetVal

Tipo Integer

Descripcin 0 si el registro es capturado satisfactoriamente. Se retorna NOTFOUND si no existe ningn otro registro adicional en la vista actual. Cursor de la base de datos SQL. Estructura de tabla correspondiente a la tabla primaria de la instruccin SQL. 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.

Cursor bTable1

Integer Tipo de dato definido por el usuario Integer

bTable1Length

Nota: SGroupFetch1, SGroupFetch4 o SGroupFetch8 debe ser usado si la instruccin SQL usada para inicializar el cursor contiene uno o ms de los siguientes componentes: Funciones de agregado de grupos (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

197

Tambin Vea
Instruccin Sql, funciones SqlFetch

198

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SGroupFetch Funciones
Se utiliza para recuperar un registro compuesto de la base de datos, basado en alguna instruccin SQL predefinida o procedimiento almacenado que contenga una o ms funciones de agregado de grupos (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 obtener informacin desde el servidor, se debe saber cuales tabla, registros y campos son requeridos por un cursor particular. Consecuentemente, el cursor debe ser inicializado primero, ya sea con una instruccin SQL o un procedimiento almacenado, mediante la instruccin Sql. SGroupFetch1, SGroupFetch4 o SGroupFetch8 estn diseadas solamente para los casos en que la instruccin SQL usada para inicializar el cursor contenga uno o ms de lo siguiente: Funciones de agregado de grupos (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 instruccin 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 instruccin SQL usada para inicializar la vista. Despus de que el ltimo registro de la vista haya sido devuelto, todas las siguientes llamadas a SGroupFetch1, SGroupFetch4 y SGroupFetch8 retornarn NOTFOUND. SGroupFetch1 est diseado para declaraciones SQL que devuelvan 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

199

Argumento RetVal

Tipo Integer

Descripcin 0 si el registro es capturado satisfactoriamente. Se devuelve NOTFOUND si no existe ningn otro registro adicional en la vista actual. Cursor de la base de datos SQL. Estructura de tabla correspondiente a la tabla primaria o el valor de dato en la instruccin SQL. Largo de la primera estructura de tabla o valor de dato. Por ejemplo, LenB(bTable1) o Len(DoubleVariable). Nota: Es crtico usar LenB() en vez de Len() para todo parmetro table length no nulo.

Cursor bTable1

Integer Tipo de dato definido por el usuario Integer

bTable1Length

Nota: el tipo y largo de los datos devueltos pueden variar cuando la instruccin SQL contiene una o ms agregados de grupos. Para el agregado de grupo COUNT, los datos sern retornados siempre como integer de 4 bytes (i.e. tipo de dato Long Visual Basic). Las funciones de agregado de grupo MIN y MAX retornan siempre el mismo tipo de dato y largo como el campo en el cual se basa. Las funciones de agregado de grupo SUM y AVG siempre retornan valores de punto flotante de 8 bytes (i.e. tipo de dato Double Visual Basic).

200

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
El ejemplo recupera la ltima fecha de comprobante para el proveedor actual y selecciona un recuento 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, instruccin Sql

Llamadas de Funciones API de Solomon

201

SInsert (Instruccin)
Inserta un registro dentro de cada tabla especificada en 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 insertados mediante el programa directamente a una tabla 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 instruccin SQL o un procedimiento almacenado, mediante el uso de la instruccin 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 automticamente 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 explictamente especificado en el argumento TablesInsertingInto, siempre que cada nombre de tabla especificado sea tambin referenciado en la instruccin 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 instruccin SQL usada para inicializar la vista actual, entonces un valor de TableXYZ ser invlido para el argumento TablesInsertingInto.

202

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones La instruccin 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 Cursor TablesInsertingInto Tipo Integer String Descripcin Cursor de la base de datos SQL. 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. Estructura de tabla correspondiente a la tabla inicial de la instruccin 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 explictamente en el argumento TablesInsertingInto. 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.

bTable1

Tipo de dato definido por el usuario.

bTable1Length

Integer

Ejemplo
Ejemplo adjunto al evento OnUpdate de una pantalla de Microsoft Dynamics SL:
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
Instruccin Sql, funciones SqlFetch

Llamadas de Funciones API de Solomon

203

SParm (Funcin)
Convierte una cadena de caracteres a un string de parmetros SQL.

Sintaxis
SQLParmStr = SParm(StrToConvert)

Observaciones
La funcin SParm utiliza los siguientes argumentos:
Argumento SQLParmStr StrToConvert Tipo String String Descripcin 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 instruccin SQL fue usada para crear un procedimiento almacenado llamado Employee_EmpId.
Select * from Employee where EmpId LIKE @parm1 order by EmpId

Este extracto de cdigo ilustra cmo usar el procedimiento almacenado 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 almacenado 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 almacenado 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

204

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Sql (Instruccin)
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 instruccin SQL est realizando una operacin Update Set, Delete From o Insert Into, no se requieren operqaciones de captura subsecuentes. Si la instruccin SQL est referenciando uno o ms parmetros, entonces las funciones SqlSubst y SqlExec tambin deben ser llamadas. La instruccin Sql utiliza los siguientes argumentos:
Argumento Cursor SqlStr Tipo Integer String Descripcin Cursor de la base de datos SQL. Instruccin SQL o procedimiento almacenado a ser usado para inicializar una nueva vista de base de datos. Si se usa un procedimiento almacenado, entonces todos los parmetros deben ser anexados secuencialmente, en orden de ocurrencia de la instruccin 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, instruccin SqlExec, instruccin SqlSubst

Llamadas de Funciones API de Solomon

205

SqlCursor (Instruccin)
Asigna 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 instruccin 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 Microsoft SL SDK , 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 instruccin 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 instruccin SqlCursor utiliza los siguientes argumentos:
Argumento Cursor Flags Tipo Integer Integer Descripcin Variable a ser inicializada mediante un controlador de recursos para un cursor de base de datos SQL. Una o ms flags 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 explictamente a un nmero de nivel deben ser asignados usando la bandera NOLEVEL.

206

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 automticamente 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, instruccin Sql, funciones SqlFetch, instruccin SqlFree, declaraciones SUpdate

Llamadas de Funciones API de Solomon

207

SqlCursorEx (Instruccin)
Asigna 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 instruccin 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 Microsoft SL SDK, 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 automticamente 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 automticamente como cursores de sololectura. 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 instruccin SqlFree. Todos los cursores son liberados en forma automtica por el sistema cuando la aplicacin termina de ejecutarse (i.e. cuando se llama ScreenExit).

208

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La instruccin SqlCursorEx utiliza los siguientes argumentos:


Argumento Cursor Tipo Integer Descripcin Variable a ser inicializada mediante un controlador de recursos (resource handle) para un cursor de base de datos SQL. Una o ms flags 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. Nombre alias asociado al cursor. Este valor es usado solamente para enriquecer la lectura de mensajes de diagnstico. 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. 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.

Flags

Integer

CursorName

String

ReferencedTableNames

String

UpdateTableNames

String

Llamadas de Funciones API de Solomon

209

Nota: las siguientes banderas (flags) 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. Los cursores con esta bandera no deben usarse para acceder a tablas que hayan recibido las operaciones insert, update o delete desde un cursor diferente en la misma transaccin de la base de datos. SqlList Las operaciones de lectura/escritura realizadas en el cursor sern guardadas temporalmente y automticamente (buffered) 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 actualizacin extendido ( sparse update error). 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 Cada 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.

210

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones SqlNoList Esta bandera obliga suprimir el almacenamiento temporal de las operaciones de lectura/escritura (buffering). 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 automticamente debido a restricciones de bajo nivel. SqlNoSelect Esta bandera indica que el cursor ser usado con cualquier instruccin SQL, excepto con la instruccin 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 instruccin 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 instruccin. Por ejemplo, declaraciones Select de registros parciales no son soportados en este tipo de cursor.

Llamadas de Funciones API de Solomon

211

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

Sintaxis
RetVal = SqlErr()

Observaciones
Esta funcin puede ser usada luego de cualquier llamada SQL que sea una instruccin (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 instruccin 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 DUPLICATE Descripcin 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 almacenado 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()

212

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
Instruccin SqlErrException

Llamadas de Funciones API de Solomon

213

SqlErrException (Instruccin)
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 capturados dentro de SWIM y no son retornados a la aplicacin. Para alterar este comportamiento, la aplicacin puede usar la instruccin SqlErrException para decirle a SWIM que no capture ciertos errores, y los retorne a la aplicacin. Esta instruccin 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 instruccin SqlErrException utiliza los siguientes argumentos:
Argumento ToggleFlag Tipo Integer Descripcin 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. 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.

ErrorToExcept

Integer

214

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Ejemplo
Dim DupFlag% DupFlag = DUPLICATE 'Tell the Microsoft Dynamics SL 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

215

SqlExec (Instruccin)
Ejecuta una instruccin SQL en lnea.

Sintaxis
Call SqlExec(Cursor)

Observaciones
Ejecuta una instruccin SQL dinmica en un cursor que ha sido inicializado previamente con llamadas a las declaraciones Sql y SqlSubst (en ese orden). La instruccin SqlExec utiliza los siguientes argumentos:
Argumento Cursor Tipo Integer Descripcin 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
Instruccin Sql, instruccin SqlSubst

216

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SqlFetch Funciones
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

217

Argumento RetVal

Tipo Integer

Descripcin 0 si el registro es capturado satisfactoriamente. NOTFOUND si no existen registros en la vista establecida que concuerdan con el criterio de restriccin. Cursor de la base de datos SQL. Instruccin SQL o procedimiento almacenado a ser usado para inicializar una nueva vista de base de datos. Si se usa un procedimiento almacenado, entonces todos los parmetros deben ser anexados secuencialmente, en orden de ocurrencia de la instruccin 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. Estructura de tabla correspondiente a la tabla primaria de la instruccin SQL. 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.

Cursor SqlStr

Integer String

bTable1

Tipo de dato definido por el usuario Integer

bTable1Length

SGroupFetch1, SGroupFetch4 o SGroupFetch8 debe ser usado si la instruccin SQL utilizada para inicializar el cursor contiene ono o ms de los siguientes componentes: Funciones de agregado de grupos, 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","")

218

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


END SUB

Llamadas de Funciones API de Solomon

219

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, instruccin Sql, funciones SqlFetch

220

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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

Sintaxis
Call SqlFree(Cursor)

Observaciones
La instruccin SqlFree es usada para liberar cursores que hayan sido establecidos con la instruccin SqlCursor. El uso de esta instruccin 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 instruccin SqlFree utiliza los siguientes argumentos:
Argumento Cursor Tipo Integer Descripcin 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
Instruccin SqlCursor

Llamadas de Funciones API de Solomon

221

SqlSubst (Instruccin)
Especifica un valor de dato para un parmetro de sustitucin de una instruccin SQL dentro de lnea, previamente ejecutada mediante la funcin Sql.

Sintaxis
Call SqlSubst(Cursor, ParmName, ParmValue)

Observaciones
SqlSubst le permite especificar valores para una o ms variables de sustitucin en una instruccin SQL dentro de lnea, que es ejecutada mediante la instruccin Sql. No es utilizada en procedimientos almacenados. Esta instruccin debe ser llamada despus de la instruccin Sql y antes de la instruccin SqlExec. Puede ser llamada cualquier nmero de veces antes de que se llame SqlExec, dependiendo de cuntos valores de parmetros hayan para sustituir dentro de la instruccin SQL. La instruccin SqlSubst utiliza los siguientes argumentos:
Argumento Cursor Tipo Integer Descripcin Cursor de la base de datos SQL inicializado previamente con una instruccin SQL dentro de lnea, que contiene uno o ms parmetros. Nombre del parmetro de la instruccin SQL (sin inclur el caracter @). Valor de dato a ser usado para el parmetro designado.

ParmName ParmValue

String String

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
Instruccin Sql, instruccin SqlExec

222

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

StrToDate (Instruccin)
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 instruccin StrToDate utiliza los siguientes argumentos:
Argumento DateStringToConvert SQLDate Tipo String Tipo de dato SDate definido por el usuario (declarado en el mdulo VBTools_VBA) Descripcin Cadena de caracteres en formato MMDDYYYY Valor de fecha convertido

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

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

Llamadas de Funciones API de Solomon

223

StrToTime (Instruccin)
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 instruccin StrToTime utiliza los siguientes argumentos:
Argumento TimeStringToConvert SQLTime Tipo String Tipo de dato STime definido por el usuario (declarado en el mdulo VBTools_VBA) Descripcin Cadena de caracteres en formato HHMMSShh Valor de hora convertido

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

Tambin Vea
Funcin TimeToStr

224

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

SUpdate (Instruccin)
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 instruccin 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 instruccin 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).

Llamadas de Funciones API de Solomon

225

Argumento Cursor TablesUpdating

Tipo Integer String

Descripcin Cursor de la base de datos SQL. 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. Estructura de tabla correspondiente a la tabla primaria de la instruccin 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. 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.

bTable1

Tipo de dato definido por el usuario

bTable1Length

Integer

Nota: las actualizaciones de bases de datos que ocurran en cursores destinados por SqlCursorEx usando la bandera SqlList (i.e. cursores almacenados temporalmente) tiene dos requerimientos nicos. Primero, la aplicacin debe actualizar todos los registros que lee, usando un cursor almacenado temporalmente, aunque actualice un solo registro. El no cumplir con este requerimiento resultar en un error de actualizacin extendido. 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 almacenado 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 Batch 000001 de Contabilidad. En Microsoft Dynamics SL, la liberacin de los registros GLTran conlleva lgica de aplicacin adicional, lo cual no es relevante para la ilustracin de la instruccin SUpdate4, y por ello ha sido retirada del ejemplo. Este ejemplo asume que el procedimiento almacenado GLTran_Module_BatNbr_LineNbr fue originalmente creado mediante la siguiente instruccin SQL:
Select * from GLTran where Module = @parm1 and BatNbr = @parm2 and LineNbr between @parm3beg and @parm3end order by Module, BatNbr, LineNbr

226

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Dado que la instruccin 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, instruccin SqlCursor, funciones SqlFetch

Llamadas de Funciones API de Solomon

227

TestLevelChg (Funcin)
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 llave 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 instruccin SetLevelChg. La funcin TestLevelChg utiliza los siguientes argumentos:
Argumento Status Tipo Integer Descripcin 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. Nivel cuya bandera de estado va a ser retornada.

LevelNbr

Integer

228

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

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
Instruccin SetLevelChg

Llamadas de Funciones API de Solomon

229

TimeToStr (Funcin)
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 TimeString TimeToConvert Tipo String Tipo de dato STime definido por el usuario (declarado en el mdulo VBTools_VBA) Descripcin TimeToConvert convertido a una cadena de caracteres en formato HHMMSShh. 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
Instruccin StrToTime

230

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

TranAbort (Instruccin)
Aborta la transaccin de base de datos actual.

Sintaxis
Call TranAbort

Observaciones
La instruccin TranAbort permite a la aplicacin abortar una transaccin de base de datos, la cual fue iniciada mediante la instruccin TranBeg. El llamar a la instruccin TranAbort no es, sin embargo, el mtodo recomendado para abortar transacciones. Si la transaccin a ser abortada es una operacin de actualizacin para una pantalla de aplicacin, entonces el mtodo recomendado es que la aplicacin configure 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
Instruccin TranBeg, instruccin TranEnd, evento OnUpdate

Llamadas de Funciones API de Solomon

231

TranBeg (Instruccin)
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 instruccin 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 instruccin TranBeg utiliza los siguientes argumentos:
Argumento IsAbortable Tipo Integer Descripcin 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
Instruccin TranEnd, funcin TranStatus, evento OnUpdate

232

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

TranEnd (Instruccin)
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
Instruccin TranBeg, funcin TranStatus, evento OnUpdate

Llamadas de Funciones API de Solomon

233

TranStatus (Funcin)
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
Instruccin TranBeg, instruccin TranEnd, evento OnUpdate

234

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

VBA_MExtend (Funcin)
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 RetVal MemHandle bTable1 Tipo Integer Integer Tipo de dato definido por el usuario Integer Descripcin Diferente de cero si la operacin ha sido exitosa. De otra forma es cero. Controlador nico de un arreglo de memoria abierto previamente. Estructura de tabla suplementaria a ser agregada al arreglo de memoria existente. Largo de la estructura de tabla suplementaria. Por ejemplo, LenB(bTable1).

bTable1Length

Ejemplo
El siguiente ejemplo expande la grilla para el grfico de la pantalla de cuentas. 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
Funcin GetGridHandle, instruccin VBA_SetAddr

Llamadas de Funciones API de Solomon

235

VBA_MOpen Funciones
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 controlador (handle) 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 MemHandle Tipo Integer Descripcin Controlador nico del arreglo de memoria creado recientemente. Si un nuevo arreglo de memoria fue abierto exitosamente este valor ser >=0. Primera estructura de tabla del arreglo de memoria. 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. Segunda estructura de tabla del arreglo de memoria. PNULL si el arreglo de memoria contiene una sola estructura de tabla. Largo de la segunda estructura de tabla. Cero si el arreglo de memoria slo contiene una estructura de tabla. Tercera estructura de tabla del arreglo de memoria. PNULL si el arreglo de memoria contiene menos de tres estructuras de tablas. Largo de la tercera estructura de tabla. Cero si el arreglo de memoria contiene menos de tres estructuras de tabla.

bTable1 bTable1Length

Tipo de dato Integer

bTable2

Tipo de dato definido por el usuario Integer Tipo de dato definido por el usuario Integer

bTable2Length bTable3

bTable3Length

236

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Argumento bTable4

Tipo Tipo de dato definido por el usuario Integer

Descripcin Cuarta estructura de tabla del arreglo de memoria. PNULL si el arreglo de memoria contiene menos de cuatro estructuras de tablas. Largo de la cuarta estructura de tabla. Cero si el arreglo de memoria contiene menos de cuatro estructuras de tabla.

bTable4Length

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 instruccin VBType.

Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y cargar la totalidad del catlogo de cuentas dentro del arreglo recientemente creado.
Dim Mem_Account Dim CSR_Account Dim SqlStr Dim Account_Fetch As Integer As Integer As String 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
Instruccin MClear, instruccin MClose, funcin MDelete, instruccin MDisplay, funcin MFirst, instruccin MInsert, instruccin MKey, funcin MKeyFind, funcin MLast, funcin MNext, funcin MPrev, instruccin MUpdate

Llamadas de Funciones API de Solomon

237

VBA_SetAddr (Instruccin)
Asocia un nombre de tabla a una variable VisualBasic y un nmero opcional de nivel de pantalla.

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

Observaciones
La instruccin VBA_SetAddr facilita el enlace apropiado entre una variable de dato VisualBasic y controles de entrada de datos 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 entrada de datos 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 VisualBasic subyacente, SWIM no tiene medios para determinar directamente en dnde se guarda esta variable VisualBasic dentro de la memoria. La instruccin VBA_SetAddr es usada por la aplicacin para resolver este problema. Para facilitar la explicacin de la vinculacin entre la instruccin 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 Active ConsolAcct CuryId Descr NoteID RatioGrp SummPost Type User1 User2 User3 User4 End Type Global bVBVarAccount As Account, nVBVarAccount As Account Call VBA_SetAddr( "bAccount", bVBVarAccount, nVBVarAccount, LenB(bVBVarAccount)) Como String * 10 Como Integer Como String * 10 Como String * 4 Como String * 30 Como Long Como String * 2 Como String * 1 Como String * 2 Como String * 30 Como String * 30 Como Double Como Double

238

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La llamada VBA_SetAddr asocia el valor del argumento TableNameStr a la localizacin de memoria del primer byte de la variable VisualBasic 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 una llamada VBA_SetAddr particular, la 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.

Llamadas de Funciones API de Solomon En general, la llamada VBA_SetAddr facilita el enlace de un tipo bTableName.FieldName de un literal de cadena de caracteres, a una localizacin precisa de memoria para el valor de dato correspondiente.

239

240

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

La instruccin VBA_SetAddr utiliza los siguientes argumentos:


Argumento TableNameStr Tipo String Descripcin 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 enlazadas en las propiedades DBNav, Default, FieldName y PV deben ser acompaadas con informacin detallada de campo ingresada manualmente, dado que el sistema estar incapacitado para acceder a esta informacin desde el diccionario de datos SQL. Variable VisualBasic cuyo tipo de dato corresponde a la tabla referida en el argumento TableNameStr. Por ejemplo, si bAccount es entregado, entonces la variable VisualBasic 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. Variable VisualBasic 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. 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().

bTableName

Tipo de datos definido por el usuario

nTableName

Tipo de datos definido por el usuario

bTableNameLength

Integer

La instruccin 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 instruccin SqlCursor.

Llamadas de Funciones API de Solomon

241

Ejemplo
External .dh file

Esto declara una estructura que corresponde a la tabla Country de Microsoft Dynamics SL. Note que el largo exacto del campo debe estar declarado y que las estructuras de memoria temporal y memoria temporal NULL (buffer y buffer NULL) estn declaradas como global.
Type Country CountryId Descr End Type Global bCountry As Country, nCountry As Country As String * 3 As String * 30

En eventos Customization:
(general) declarations

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


'$include: "cu\country.dh"

Para adaptaciones VisualBasic (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

242

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones

Llamadas de Funciones API de Solomon

243

Glosario
BSL
El acrnimo para el lenguaje Basic Script Language (BSL).

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

call by reference / llamada por referencia


Los argumentos pasados por referencia a un procedimiento pueden ser modificados por el procedimiento. Los procedimientos escritos en Basic estn definidos para recibir sus argumentos por referencia. Si usted llama un procedimiento tal, y le pasa una variable, y si el procedimiento modifica su parmetro formal correspondiente, modificar la variable. Pasar una expresin por referencia es legal en Basic; si el procedimiento llamado modifica su parmetro correspondiente, se modificar un valor temporal sin efectos aparentes en que efecta la llamada (caller).

call by value / llamada por valor


Cuando se pasa un argumento por 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. Los procedimientos escritos en otros lenguajes, como C, pueden recibir sus argumentos por valor.

comentario
Un comentario es texto que documenta un programa. Los comentarios no tienen efecto en el programa (excepto para metacomandos). En Basic, un comentario 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. Las lneas que comiencen con Rem tambin son comentarios.

control ID
Esto puede ser una cadena de caracteres de texto, en cuyo caso es el nombre del control, o puede ser un identificador 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).Los 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

control de dilogo
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.

funcin
Una funcin 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 instruccin 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.

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

nombre
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 Microsoft Dynamics SL, el modelo de objeto es una coleccin de objetos que representan colectivamente una pantalla.

orden de precedencia
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 (comparison), lgico (logical).

Llamadas de Funciones API de Solomon

245

Procedimiento / Procedure
Un procedimiento es una serie de declaraciones VBA y funciones ejecutadas como una unidad. Los subprogramas (Sub) y funciones (Funcin) son llamados procedimientos.

subprograma
Un subprograma es un procedimiento que no retorna un valor.

caracter de tipo / type character


Un caracter de 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
A
abortar transacciones 230 actualizaciones de bases de datos 189, 225 Add-In Manager 12 Administrador de Adaptaciones 1, 3, 4, 16, 27, 73, 144, 237 AliasConstant 65 almacenamiento 210 ApplGetParms 65 ApplGetParmValue 65 ApplGetReturnParms 76 ApplSetFocus 65 ApplSetParmValue 65 arreglo de memoria 130, 134, 146 Complete Word 5 condicin de error 106, 108, 109, 110, 111 constante simblica ErrNoMess 45, 50, 55, 62, 230, 231, 232 control page 10 control templates 10 controles ActiveX 3, 11 cursor 163, 184, 185, 195, 196, 198, 201, 205, 207, 215, 220, 224 cursor almacenado 206, 209 custom control 10

D
DataTips 5 DateCheck 65 DateCmp 65 DateMinusDate 65 DatePlusDays 65 DatePlusMonthSetDay 65 DateToIntlStr 65 DateToStr 65 DateToStrSep 65 DBNavFetch 65 declaracin Select SQL 161 Default 15 Delete 37 DELETE 23 deshabilitar un control 187 diccionario de datos SQL 238 DIM 16 directorio de mdulos VBA 16 DispFields 65 DispForm 65 Display 15 Double 16, 199, 245 Dparm 65 DParm 94

B
bandera de estado de nivel 189, 227 banderas de optimizacin 208 base de datos 17, 29, 39, 44, 48, 49, 61, 87, 88, 89 BlankErr 27 Button clicks 37

C
cadena de caracteres vaca 194 Call Stack 7 CallChks 65, 80 campo clave 67, 151, 153, 155, 158 campo de caracter 22 campo de datos 31, 38, 68 campo llave 89, 151, 152, 155, 156, 158, 159 cargar datos 163

Ch
Chk 15

E
Edit_Cancel 65 Edit_Close 65 Edit_Delete 65 Edit_Finish 98 Edit_First 99 Edit_Last 66 Edit_New 66 Edit_Next 66

C
Click 15, 41 cdigo genrico 144 cdigo VBA 16, 37 cdigos de errores 213

248

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


Edit_Prev 66 Edit_Save 66 Editor de Cdigo 5 encabezado 30, 57, 58 enlace 237 evento click 121 evento Default 42, 187

I
IDE 1, 4, 6, 7, 245 Immediate window 7 IncrStrg 66 INSERT 23 INSERTED 133, 146, 147, 149, 162, 165, 166, 169 Integer 16 IntelliSense 5, 16, 244 Interface de Aplicacin de Programa 15 IntlStrToDate 123 IParm 66 Is_TI 66

F
Field chk 37 Field default 37 Field PV 37 FieldName 29 Form Display 37 Form Hide 37 Form Load 37 formularios Microsoft 9 FPAdd 66 FParm 66 FPDiv 66 FPMult 66 FPRnd 66, 110 FPSub 66 funciones agregadas 21 funciones de agregado de grupos 198 funciones de mensaje 18

K
Kernel 16, 17, 23

L
Launch 66 LineChk 55 LineChkEvent 15 LineGotFocus 15 List Constants 5 List Properties/Methods 5

G
GetBufferValue 66 GetDelGridHandle 66 GetGridHandle 66 GetObjectValue 66 GetProp 66 GetSqlType 66 GetSysDate 66 GetSysTime 66 globales 16, 118, 211, 243 Grid linechk 37 Grid linegotfocus 37 GUI 14

Ll
llamada SQL 211

L
Load 15 Locals window 7

M
Mask 31 Max 32 MCallchks 66, 67 MCallChks 129 MClear 67 MClose 67 MDelete 67 MDisplay 67 mensaje 18 Mess 67 Messages.csv 136, 137, 140, 142 Messbox 67 MessBox 139

H
habilitado 28 herramientas de deteccin y eliminacin de errores 7 Hide 15 HideForm 66

Llamadas de Funciones API de Solomon


Messf 67 MessResponse 67 mFindControlName 144 MFirst 67 MGetLineStatus 67 MGetRowNum 67 Microsoft SQL Server 118 Min 33 MInsert 67 MKey 67 MKeyFind 67 MKeyFld 67 MKeyOffset 67 MLast 67 MLoad 67 MNext 67 modelo de objetos 1 mdulo VBTools_VBA 16 MPrev 68 MRowCnt 68 MSet 68 MSetLineStatus 68 MSetProp 68 MSetRowNum 68 Msort 68 MSort 173 MUpdate 68 operaciones le lectura 209 Option Explicit 16

249

P
pginas de control 10 PasteTemplate 68 PeriodCheck 68 PeriodMinusPeriod 68 PeriodPlusPerNum 179 procedimientos 53 propiedad Default 42, 187 propiedad Trigger 38 propiedades 14 PV 15 PVChkFetch 68

Q
Quick Info 5

R
registro compuesto 68, 89, 180, 195, 198, 209, 210, 216 registro eliminado 133 ROI, launch 128 rutinas de uso comn 37

N
NameAltDisplay 68 nivel 17, 189, 205 nivel batch 17 nivel de detalle 17, 58 nivel macro 46 nmero de mensaje 18, 39, 45, 61, 67, 136, 230 nmero de registro 167, 172

S
SaveTemplate 68 Sdelete 68 SDelete 184 SdeleteAll 68 SDeleteAll 185 seccin de parmetro 72, 74 seleccin de anterior 104 seleccin de cerrar 96 seleccin de nuevo 101 seleccin de primero 99 seleccin de salvar 105 seleccin de siguiente 102 seleccin de terminar 98 seleccin de ltimo 100 SetBufferValue 68 SetDefaults 68 SetLevelChg 68 SetObjectValue 68 SetProp 68 SetStatusBarText 68 SFetch 68

O
objeto 8 objeto enlazado 191 objetos de ventana incrustados 14 OLE Controls 11 OnCancel 15, 37 OnDelete 15 OnFinish 15, 37 OnInsert 15, 37 OnUpdate 15, 37 operacin DELETE 44 operacin Insert 63 operacin NEW 44 operacin SAVE 48, 50 operaciones de base de datos 209, 210

250

Administrador de Adaptaciones, Referencia de Visual Basic para Aplicaciones


SGroupFetch 198 SInsert 69 sintaxis SQL 23 Solomon.ini 78 Sparm 69 SParm 203 Sql 69 SqlCursor 69 SqlCursorEx 69 SqlErr 69 SqlErrException 69 SqlExec 69 SqlFetch 69 SqlFree 69 SqlSubst 69 StrToDate 69 StrToTime 69 SUpdate 69

T
tabla maestra 58 TestLevelChg 69 TimeToStr 69 TranAbort 69 TranBeg 69 TranEnd 69 TranStatus 69

U
UPDATE 23

V
validacin de errores 187, 191 VB MsgBox statement 140 VBA 1, 3 VBA_Mextend 69 VBA_MExtend 234 VBA_MOpen 69 VBA_SetAddr 69 ventana de propiedades 6 Visor de Objetos 8

W
Watches window 7

También podría gustarte