Está en la página 1de 71

ControlsSAP Framework

Manual Operativo
V2007.9

Po r

Oliver Parra

ControlsSAP Framework

ndice de Contenidos 1 Introduccin a ControlsSAP ................................................................. 4


1.1 1.2 Prerrequisitos ........................................................................................................... 5 Mtodo de trabajo.................................................................................................... 5

Objetos de negocio .............................................................................. 6


2.1 Definicin de Objeto de Negocio............................................................................... 6 2.2 Creacin de un objeto maestro (SAPObject).............................................................. 7 2.3 Creacin de los objetos detalle (SAPLines) ................................................................ 8 2.4 Utilizacin de un objeto de negocio ........................................................................ 10 2.5 Tipo de validaciones definidas ................................................................................ 11 2.6 Eventos................................................................................................................... 13 2.6.1 Altas/Modificaciones...................................................................................... 14 2.6.2 Eliminaciones ................................................................................................. 15

Diseo de pantallas visuales .............................................................. 16


3.1 Controles ................................................................................................................ 16 3.1.1 SAPTextBox .................................................................................................... 17 3.1.2 SAPListBox...................................................................................................... 17 3.1.3 SAPComboBox................................................................................................ 19 3.1.4 SAPGrid .......................................................................................................... 21 3.1.5 SAPTreeSearch ............................................................................................... 24 3.1.6 SAPAttachments............................................................................................. 25 3.2 Pantallas................................................................................................................. 26 3.2.1 FormSAP......................................................................................................... 26 3.2.2 FormEditSAP................................................................................................... 27 3.2.3 FormWizard.................................................................................................... 30 3.2.4 FormSAPAlta .................................................................................................. 31 3.2.5 FormApplication............................................................................................. 32

Formulario de edicin (FormEditSAP)................................................ 34


4.1 4.2 4.3 4.4 Diseo del formulario ............................................................................................. 34 Configurar el formulario.......................................................................................... 35 Entrada/Salida de datos .......................................................................................... 37 Trabajar con las grids .............................................................................................. 38

Impresiones........................................................................................ 40
5.1 5.2 5.3 5.4 5.5 Objeto Report......................................................................................................... 40 Tipo de conexin .................................................................................................... 42 Versiones Crystal Reports ....................................................................................... 42 Visor de informes.................................................................................................... 43 Configurar informes en formularios ........................................................................ 43
2

ControlsSAP Framework

Mensaje de sistema ........................................................................... 48


6.1 6.2 6.3 Mensajes de dialogo ............................................................................................... 48 Mensajes en la barra de estado .............................................................................. 49 InputBox ................................................................................................................. 49

Autorizaciones ................................................................................... 51
7.1 7.2 Definicin ............................................................................................................... 51 Creacin ................................................................................................................. 52

Parmetros......................................................................................... 53
8.1 8.2 Creacin de parmetros.......................................................................................... 53 Utilizacin de parametros ....................................................................................... 55

Mdulos de trabajo............................................................................ 58
9.1 9.2 9.3 9.4 9.5 9.6 Creacin de un mdulo........................................................................................... 59 Creacin de los Mens............................................................................................ 59 Creacin de la base de datos................................................................................... 60 Control de versiones ............................................................................................... 62 Creacin de parmetros.......................................................................................... 62 Arranque de un mdulo de trabajo ......................................................................... 63

10
10.1 10.2 10.3 10.4

Integracin...................................................................................... 66
Estilo 8.8................................................................................................................. 66 Fuente, tamao de letra y color de las pantallas ..................................................... 67 Textos Dinmicos (Control + Doble-Click)................................................................ 67 Mens para SAP Business One ................................................................................ 68

11

Database......................................................................................... 69

11.1 Tablas, campos, ndices........................................................................................... 69 11.1.1 Campos .......................................................................................................... 69 11.1.2 ndices............................................................................................................ 70 11.2 Vistas...................................................................................................................... 70 11.3 Procedimientos almacenados ................................................................................. 70 11.4 Sentencia SQL ......................................................................................................... 70 11.5 Categoras, consultas predefinidas, bsquedas formateadas................................... 71 11.5.1 Consultas predefinidas ................................................................................... 71 11.5.2 Bsquedas formateadas ................................................................................. 71

ControlsSAP Framework

Introduccin a ControlsSAP

ControlsSAP es un Framework de desarrollo para crear aplicaciones en SAP Business One 2007 utilizando la plataforma de Microsoft .NET Framework 2.0, incluyendo mtodos para: Replicacin de controles y pantallas con la funcionalidad y aspecto de SAP B1, sin necesidad de utilizar la UI. Fcil utilizacin y creacin de objetos de negocio no contemplados en la DI de SAP Business One. Facilidad en el mantenimiento de objetos de negocio utilizando formularios de edicin propios. Conjunto de herramientas para la creacin en el arranque de: tablas, campos, bsquedas formateadas, consultas predefinidas, vistas, etc. y parametrizaciones necesarias para el funcionamiento de nuestras aplicaciones. Control de versiones. Impresiones con Crystal Reports. Integracin completa de pantallas realizadas en .NET dentro de SAP Business One. Etc.

Dado a las numerosas carencias proporcionadas por la UI, la mejor forma de trabajar ser la de utilizar el AddOn2 Framework para trabajar con pantallas existentes de SAP. Y utilizaremos el framework de ControlsSAP para la creacin de nuevas pantallas, ya que este posee un conjunto de controles y pantallas que replican a los proporcionados por la UI, pero con toda la potencialidad de .NET y con la posibilidad de poder aadir a dems controles propios sin ningn tipo de problema.

ControlsSAP Framework

1.1

Prerrequisitos

Para seguir el presente manual, y desarrollar con ControlsSAP Framework, es preciso tener instalado: Sistema Operativo Windows XP/Server 2003 SAP Business One 2007 + SDK Visual Studio 2005 + .NET Framework 2.0 SQL Server 2000/2005

Adicionalmente se deber instalar: Libreras de Crystal Reports (para poder visualizar informes) Libreras DevExpress 2008 (para poder disear formularios con varios controles) AddOn2 Framework (para la integracin del proyecto en SAP Business One)

1.2

Mtodo de trabajo

La forma de trabajar con ControlsSAP ser la de crear mdulos de trabajo. Estos mdulos sern libreras (dlls) que podremos aadir en un proyecto cliente. De esta manera conseguiremos reutilizar el mismo cdigo para varios clientes con las mismas necesidades. Los mdulos constarn de: Objetos que se deben crear en la base de datos (tablas, vistas, campos, bsquedas formateadas, etc.) Opciones de men Lista de Parmetros Autorizaciones para los formularios Numero de versin de datos

ControlsSAP Framework

2
2.1

Objetos de negocio

Antes de crear cualquier pantalla necesitaramos saber que objetos de negocio va a incluir nuestra aplicacin y que relacin van a tener entre ellos. Esta es la mejor manera de encapsular nuestro cdigo y poderlo reutilizar mas adelante en diferentes proyectos, gracias a que todo nuestro cdigo se basar en objetos. Con esto conseguiremos definir en cada mdulo una pequea Data Interface (DI) que se podr intercambiar entre diferentes Partners.

Definicin de Objeto de Negocio


Objetos maestros Objetos detalle

Podremos definir diferentes tipos de objeto:

Cada uno de ellos trabajar con una tabla de la base de datos. Un objeto maestro podr contener cero o varios objetos detalle que sern sus lneas.

O. Maestro

D.B.

O. Detalle O.Detalle O.Detalle

ControlsSAP Framework

2.2

Creacin de un objeto maestro (SAPObject)

Para crear un objeto maestro deberemos heredar de la clase ControlsSAP.SAPObject. Solo por tenerla de base ya dispondremos de una serie de mtodos y propiedades para interactuar con la base de datos. Estos mtodos sern los mismos que proporcionan los objetos de la DI por lo que ya deberan de ser de sobras conocidos.
Object: <SAPObject> Methods: +Add +GetByKey +Remove +Update

Aade el objeto en la base de datos. Obtiene los datos del objeto por su clave. Elimina el objeto de la base de datos. Modifica los datos del objeto.

Properties: Browser <Lines>

Permite navegar entre sus diferentes registros. Los diferentes tipos de Lneas que puede tener el objeto.

Inicialmente necesitaremos implementar 3 mtodos para crear un objeto cabecera: Constructor: donde le indicaremos la Company y la tabla de la base de datos de la que obtendr los datos. InicializeLines: Mtodo donde inicializaremos todos los objetos de lnea de nuestro objeto de negocio y dems variables que podamos tener. Para inicializar las clases de lneas deberemos llamar al mtodo DestroyLines(). ModifyingObject: Utilizaremos este mtodo para modificar la estructura interna de nuestro origen de datos antes de empezar a trabajar con sus datos. Desde aqu podremos: o o o Aadir un campo mas a nuestra estructura de datos con AddField(). Indicar que un campo ser de solo lectura por lo que no actualizar en la base de datos. No permitir nulos con NotAllowNulls(). Cuando un campo no tiene especificado ningn valor entonces por defecto se graba un nulo, si por el contrario queremos que se guarde otro valor usaramos este mtodo.
7

ControlsSAP Framework

Public Class Contract Inherits ControlsSAP.SAPObject Public Sub New(ByVal Company As SAPbobsCOM.Company) MyBase.New(Company, "@GSP_CNTR") End Sub Protected Overrides Function InitializeLines() As Long End Function Protected Overrides Sub ModifyingObject() End Sub Listado 1: Ejemplo de creacin de un objeto de negocio maestro.

Despus solamente deberemos crear una propiedad por cada campo de la tabla que vayamos a publicar. Para obtener o asignar el valor del campo del registro actual utilizaremos la funcin FilaActual(nombre_campo).
Public ReadOnly Property Code() As String Get Return Me.FilaActual("Code") End Get End Property Public Property CardCode() As String Get Return Me.FilaActual("U_GSP_CardCode") End Get Set(ByVal value As String) Me.FilaActual("U_GSP_CardCode") = Value End Set End Property Listado 2: Ejemplo de creacin de propiedades en objeto de negocio.

Si no se especifica ningn valor para el campo Name (que crea en todas las tablas SAP) se le asignar el mismo valor que contenga el campo Code, que por defecto ser el campo clave.

2.3

Creacin de los objetos detalle (SAPLines)

Para crear un objeto detalle deberemos crear una nueva clase que herede de ControlsSAP.SAPLines. Esta clase ser muy parecida a la del SAPObject pero con las particularidades de trabajar con objetos de lneas parecidos a los de la DI de SAP.
8

ControlsSAP Framework

Object: <SAPLines> Methods: +Add +SetCurrentLine +Delete Properties: Count

Aade una nueva lnea. Se posiciona en una lnea determinada. Elimina la lnea actual. Devuelve el total de lneas.

En esta clase tambin tendremos mtodos para modificar la estructura de datos interna de la clase tal como se hace en el SAPObject. Y deberemos crear tambin una propiedad por cada campo de nuestra tabla. En el constructor deberemos indicar la tabla, el objeto cabecera y el campo que relaciona la tabla de lneas con la tabla cabecera. A diferencia de las lneas de la DI de SAP, en las SAPLines existe una diferencia a tener en cuenta: Siempre que se quiera aadir una nueva lnea se deber primero llamar al mtodo Add() y despus rellenar las propiedades del objeto. Por lo cual si no existe ninguna lnea la propiedad Count() devolver 0, a diferencia de las lneas del SDK de SAP que devuelven 1 aunque no exista ninguna entrada de datos.

Public Class Contract_Lines Inherits ControlsSAP.SAPLines Friend Sub New(ByVal sapobject As Contract) MyBase.New("@GSP_CNT1", "U_GSP_CntrCode", sapobject) End Sub Protected Overrides Sub ModifyingLines() End Sub Public ReadOnly Property CntrCode() As String Get Return Me.FilaActual("U_GSP_CntrCode") End Get End Property Public Property ItemCode() As String 9

ControlsSAP Framework

Get Return Me.FilaActual("U_GSP_ItemCode") End Get Set(ByVal value As String) Me.FilaActual("U_GSP_ItemCode") = value End Set End Property Public Property Import() As Double Get Return Me.FilaActual("U_GSP_Import") End Get Set(ByVal value As Double) Me.FilaActual("U_GSP_Import") = value End Set End Property Listado 3: Ejemplo creacin de un objeto de tipo lnea.

Una vez tengamos la clase lneas creada deberemos crear una propiedad para tener acceso a estas en la clase maestra. Esta deber ser de solo-lectura e instanciarse solamente si no tiene valor la variable que utilicemos para definirla. No nos olvidemos despus de inicializar las lneas en el mtodo InitializeLines.
Private _lines As Contract_Lines Protected Overrides Function InitializeLines() As Long Me.DestroyLines(_lines) End Function Public ReadOnly Property Cnt1() As Contract_Lines Get If Me._lines Is Nothing Then Me._lines = New Contract_Lines(Me) End If Return Me._lines End Get End Property Listado 4: Aadir referencia clase lneas en objeto cabecera.

2.4

Utilizacin de un objeto de negocio

Una vez definidas todas las clases que componen nuestro objeto de negocio podremos ser capaces de utilizar este objeto para entrar datos, recuperar datos y actualizarlos.
Dim cont As Contract cont = New Contract(Me.Company)

10

ControlsSAP Framework

cont.CardCode = "C000001" cont.Comments = "Ejemplo creacin de contrato" Try cont.Add() Catch ex As Exception ControlsSAP.SAPMsg.Alert("Error creando contrato") End Try Listado 5: Ejemplo creacin registro.

Dim cont As Contract cont = New Contract(Me.Company) 'Consulta de un registro cont.GetByKey("1") cont.Comments = "Ejemplo actualizacin de contrato" Try cont.Update() Catch ex As Exception ControlsSAP.SAPMsg.Alert("Error actualizando contrato") End Try Listado 6: Ejemplo modificacin de un registro existente.

Este es un ejemplo de utilizacin por cdigo, aunque lo comn ser tratar nuestros objetos de negocio mediante formularios visuales. En el prximo captulo veremos como existen formularios creados explcitamente para trabajar con este tipo de objetos y de una manera sencilla poder crear, consultar, actualizar y eliminar registros.

2.5

Tipo de validaciones definidas

Existirn 3 tipos de atributos que utilizaremos en las propiedades de los clases SAPObject y SAPLines para realizar diferentes tipos de validaciones: Mandatory: Forzaremos que en la propiedad se haya indicado un valor antes de guardar. Si lo hacemos en una propiedad que devuelve un SAPLines entonces exigir que contenga al menos 1 lnea. HasRelation: Obliga a que el valor de la propiedad este relacionado con un determinado campo de otra tabla. NonUpdatable: No permite que se pueda modificar el valor de la propiedad una vez se ha creado el objeto.

Tambin existen 2 funciones por las que podremos saber si desde nuestra clase cabecera SAPObject se han aadido lneas en una determinada clase SAPLines o tambin si se han eliminado: ExistAddedLines
11

ControlsSAP Framework

ExistDeletedLines.

Ejemplo: Creamos un objeto Presupuesto e intentamos simular el mismo funcionamiento que un documento de la DI de SAP. Tendremos varios campos entre ellos el cdigo de cliente y el nombre. Deberemos tener las siguientes restricciones: 1. Para entrar una Presupuesto es obligatorio entrar el cdigo de cliente. 2. El cdigo de cliente y el nombre no pueden modificarse una vez creado el Presupuesto. 3. El valor del cdigo de cliente debe existir en la tabla de clientes [OCRD.CardCode] 4. Una vez creado el Presupuesto no se permitir aadir nuevas lneas ni eliminarlas.

Public Class Presupuesto Inherits ControlsSAP.SAPObject '... <NonUpdatable()> _ <Mandatory()> _ <HasRelation("OCRD", "CardCode")> _ Public Property CardCode() As String Get Return Me.FilaActual("U_GSP_CardCode") End Get Set(ByVal Value As String) Me.FilaActual("U_GSP_CardCode") = Value End Set End Property <NonUpdatable()> _ Public Property CardName() As String Get Return Me.FilaActual("U_GSP_CardName") End Get Set(ByVal Value As String) Me.FilaActual("U_GSP_CardName") = Value End Set End Property Private Sub Oferta_Updating(ByVal Obj As SAPObject) Handles Me.Updating If Me.ExistAddedLines(Me.Lines) Then Throw New ValidationException("No se puede aadir una lnea una vez creado el documento") End If If Me.ExistDeletedLines(Me.Lines) Then Throw New ValidationException("No se puede borrar una fila una vez creado el documento ") 12

ControlsSAP Framework

End If End Sub Listado 7: Ejemplo de utilizacin de atributos de validacin

Este mismo tipo de restricciones las podramos tener para el objeto lneas.

2.6

Eventos

Durante el momento de la ejecucin de las diferentes acciones que soportan los objetos de negoci, podemos alterar los datos antes de que estos se guarden o podemos realizar validaciones propias para cancelar determinadas acciones segn nuestras necesidades. El orden secuencial de los diferentes eventos ms comunes es:

13

ControlsSAP Framework

2.6.1 Altas/Modificaciones
Add/Update
Mandatory HasRelation NonUpdatable ...

Validaciones internas

Validating

Adding/Updating

Por cada lnea del SAPLines aadida/modificada:

SavingLine

ValidatingLine

Recorre las lneas

ValidatedLines

Base de Datos
Added/Updated

14

ControlsSAP Framework

2.6.2 Eliminaciones
Remove()

Removing

Eliminamos cada lnea del SAPLines:

Delete()

Recorre las lneas

Base de Datos
Removed

15

ControlsSAP Framework

3
3.1

Diseo visuales

de

pantallas

La librera de ControlsSAP incluye una serie de controles y formularios .NET pero con el Look&Feel de SAP, estos nos ayudaran a trabajar sin las limitaciones que tiene la UI ya que programaremos en la plataforma de Microsoft.NET 2.0. Por lo que aunque necesitemos algn tipo de control o funcionalidad que no este disponible en ControlsSAP podremos utilizarlo igualmente en nuestros proyectos con lo que podemos utilizar una lista de recursos ilimitada, a diferencia de la programacin con la UI.

Controles

En este apartado veremos una lista de controles disponibles en ControlsSAP. Estos controles dispondrn de una serie de propiedades comunes, ya que la mayora de ellos implementan una misma Interface. La mayora de controles son tpicos en Windows por lo que solamente se tratarn con mayor detalle los ms importantes y complejos. La lista de controles disponibles con el Look&Feel de SAP: SAPLabel: control de etiqueta. SAPCheckBox: casilla de verificacin. SAPRadioButton: control de opciones. SAPPanel: panel de agrupacin de controles. SAPTextBox: caja de texto. SAPListBox: control de seleccin parecido al ChooseFromList de SAP. SAPComboBox: control combo de seleccin.
16

ControlsSAP Framework

SAPLinkedButton: Control de vinculo o flecha naranja. SAPGrid: control de grid. SAPTree: control de rbol. TreeSearch: control de bsquedas en una grid mediante una serie de filtros fijados. SAPAttachments: control por el cual podremos anexar o visualizar diferentes archivos relacionados con un registro.

3.1.1 SAPTextBox
Este es el control mas usado junto con las etiquetas SAPLabel. Son cajas de texto donde el usuario podr introducir o consultar datos. Podremos definir que tipo de datos va a utilizar el control y la entrada o salida variar segn este. DataType Numero SubDataType Precio Importe Cantidad Entero Porcentaje Cadena Memo Fecha Hora Aade el smbolo de moneda y muestra los decimales indicados en SAP para el tipo Precio. Aade el smbolo de moneda y muestra los decimales indicados en SAP para el tipo Importe. Muestra los decimales indicados en SAP para el tipo Cantidad. No muestra decimales Muestra el smbolo de % Para datos de tipo texto Para datos de tipo texto con multilnea Fechas Valores de tipo hora

Los de tipo numrico solamente aceptarn entradas de datos numricos. Si seleccionamos el tipo Fecha entonces se comportar como las entradas de fecha de SAP.

3.1.2 SAPListBox
Este control es tambin uno de los ms utilizados en los formularios y de los ms tiles ya que te permite seleccionar valores que pertenezcan a una lista de registros, de una manera sencilla y practica.

17

ControlsSAP Framework
Las propiedades ms utilizadas: ValueMember: Indica de que columna obtendremos el valor una vez seleccionado un registro. DisplayMember: Indica la columna ser la que utilizaremos para mostrar en el control una vez seleccionado un valor. SelectedValue: Propiedad en la que podremos asignar u obtener el valor del registro seleccionado y que hemos indicado el la propiedad ValueMember. Otros de los mtodos ms comunes: AddColumn: Aadiremos las columnas que queremos visualizar en la lista de registros. SetItemValue: Desde este mtodo podemos asignar tambin un valor al control pero sin provocar el evento SelectedValueChaged, a diferencia de hacerlo con SelectedValue. La lista de datos que mostrar el control puede venir de diferentes orgenes: Indicando la tabla de la que se obtendrn los datos
With Me.SapListBox1 .Table = "OCRD" .ValueMember = "CardCode" .DisplayMember = "CardName" .Condition = "CardType='C'" .Company = Me._company End With

Asignndole un objeto DataTable a su propiedad DataSource:


18

ControlsSAP Framework

Dim dt as DataTable dt = ControlsSAP.DoQuery(SELECT * FROM OCRD) Me.SapListBox1.DataSource = dt

Aadiendo los valores manualmente con el mtodo InsertRow

With Me.SapListBox1 .InsertRow("O", "Abierto") .InsertRow("C", "Cerrado") .InsertRow("P", "Pendiente") End With

Tambin podremos aadir valores con: o o AddValidValues: Consulta la lista de valores validos definidos para un campo de SAP. AssignEnum: muestra la lista de valores de la enumeracin indicada.

Cuando asignemos los datos mediante la propiedad Table y queramos aadir un registro propio cada vez que se carguen los datos, utilizaremos el evento SAPListBox.BoundTable.
Private Sub lstIC_BoundTable(...) Handles SapListBox1.BoundTable Me.lstIC.InsertRow("-1", "-Ningn Interlocutor comercial-", 0) End Sub Listado 8: Despus de cada carga de IC, aadimos un nuevo valor.

Tambin podemos utilizar la propiedad DisplayControl para especificar otro control en el que se volcarn los datos correspondientes a la columna especificada en el DisplayMember. En vez de mostrarse la descripcin en el mismo control se mostrar en el control que indiquemos.

3.1.3 SAPComboBox
El control SAPComboBox incorpora la mayora de funciones y propiedades del control SAPListBox anterior pero con el aspecto de un control combo. Este se utiliza normalmente para mostrar listas pequeas de valores.

19

ControlsSAP Framework
Para los controles de lista se ha aadido nueva funcionalidad para poder aadir registros nuevos desde el mismo control, ahorrndonos el trabajo de tener que ir a buscar la opcin de men correspondiente a esta accin. Podremos aadir registros indicando: El nombre de la tabla: que abrir un formulario de alta de registros tpico (FormSAPAlta) El tipo de formulario: abrir el formulario de mantenimiento en modo crear. Este tiene que heredar de FormEditSAP. El id. de men de SAP: con este identificador (MenuUID) abriremos la pantalla correspondiente en SAP. Para este tipo de formularios no se podrn aadir los registros creados en el control, solamente servir para abrir el formulario de SAP. Las funciones que utilizaremos para el SAPListBox son: SetFormToCreate: Que aadir el botn de Nuevo en el formulario de seleccin. InsertCreateRow: Que crear un nuevo registro Definir nuevo. Y para el control SAPComboBox:

20

ControlsSAP Framework

3.1.4 SAPGrid
Complejo control de Grid que nos servir para mostrar un conjunto de valores y para realizar el mantenimiento de los objetos SAPLines.

Podremos aadir diferentes tipos de columnas segn el tipo de datos que queramos mostrar: AddColumn: Aade una columna genrica segn el tipo de datos que vaya a mostrar. AddPriceColumn: columna para datos de tipo precio. Visualizar el smbolo de moneda y los decimales definidos en SAP para el tipo Precio. AddImportColumn: columna para datos de tipo importe. Visualizar el smbolo de moneda y los decimales definidos en SAP para el tipo Importe. AddQuantityColumn: columna para datos de tipo cantidad. Visualizar los decimales definidos en SAP para el tipo Cantidad. AddPercentatgeColumn: visualiza el smbolo de %
21

ControlsSAP Framework

AddBooleanSAPColumn: visualizara una columna con formato checkbox para datos alfanumricos con valores Y o N (Yes/No) AddListColumn: parecido al control SAPListBox, donde le indicaremos un origen de datos y la celda de la grid solamente podr se un valor de esta lista. AddComboBoxColumn: visualizara una celda de tipo combo para la seleccin de un valor en una lista indicada de valores. AddProgressBarColumn: muestra una barra de progreso segn el valor actual de la celda.

AddMemoColumn: podremos aadir columnas con textos lagos en varias lneas. AddImageColumn: aadiremos columnas para mostrar imgenes desde una ruta. Deberemos indicar un campo que ser el que contenga la ruta especfica de la imagen. Otras configuraciones que puede tener la grid: ObjectSource: propiedad para asignar los datos de un objeto SAPLines como origen de datos. AcceptsAddLines: nos indica si se pueden aadir nuevas lneas en la grid. AcceptsDeleteLines: indica si podremos eliminar registros de la grid. Editable: Indica si la grid permitir edicin de sus celdas ShowEmptyLine: muestra una fila vaca para la entrada de nuevos registros. MarkRow: Marca las filas en negrita que cumplan un criterio establecido. DisableRows: Deshabilita las filas que cumplan con un criterio. SelectRow: selecciona una o varias filas GetSAPLine: posiciona el objeto SAPLines segn la fila indicada de la grid.

En prximos apartados veremos como trabajar un objeto de negocio desde un formulario. Los objetos lneas se trabajarn con el control SAPGrid que dispone de varios eventos especiales que nos informarn de cualquier modificacin en las lneas: UpdatingSAPLine UpdateSAPLine ValidateSAPLine DeletedSAPLine DeletingSAPLine

3.1.4.1 Multiseleccin
Las columnas de tipo lista (AddListColumn) disponen de la opcin de multiseleccin. Existe un parmetro por el que podremos indicar si queremos utilizar multi-seleccin o no. Los eventos
22

ControlsSAP Framework

UpdateSAPLine/ UpdatingSAPLine del SAPGrid se ejecutarn por cada fila, como si las hubieramos entrado una a una. Si alguna de las filas no pasa con xito la validacin entonces no se aadir en la grid.

c = .AddListColumn("Cd.artculo", "U_GSP_ItemCode", Me._company, "OITM", "ItemCode", New String() {"ItemName", "ItemCode", _ "VatGourpSa", "ItmsGrpCod"}, , , True)

3.1.4.2 Columnas obligatorias


Existe un mtodo en el control SAPGrid por el que podremos indicar si alguna de las columnas que hemos aadido es una columna de inicio, que quiere decir que es obligatorio que introduzcamos un valor en una de estas columnas antes que en ninguna otra. Ejemplo: No podremos introducir ningn valor en las lneas mientras no exista un valor en la columna de artculo:
.AddBeginningColumn("U_GSP_ItemCode") Listado 9: Cdigo de ejemplo para indicar un columna obligatoria. 23

ControlsSAP Framework

Figura 1: Ejemplo de advertencia al intentar introducir un valor en una columna diferente a la indicada como obligatoria.

Se ha publicado tambin un evento ShowingEditor por el que podremos conseguir efectos parecidos al anterior, o sea no permitir la edicin de una celda mientras no se cumplan determinados criterios. Ejemplo: No podemos introducir ningn valor en la grid mientras no se haya introducido el cdigo del cliente (campo de cabecera):
Private Sub SapGrid1_ShowingEditor(...) Handles SapGrid1.ShowingEditor If Not Me.lstCardCode.HasValue Then ControlsSAP.SAPMsg.StatusBarMsg("Falta cdigo de interlocutor comercial", True) e.Cancel = True End If End Sub

3.1.5 SAPTreeSearch
Control de vista de datos para realizar diferentes tipos de filtros (panel izquierda). Adems de poder filtrar en tiempo de ejecucin.
24

ControlsSAP Framework 3.1.6 SAPAttachments


Control utilizaremos para adjuntar o visualizar archivos en una carpeta de documentos anexos de una manera sencilla. Podremos realizar las siguientes acciones: Explorar: Seleccionaremos un archivo y lo anexaremos por defecto en la carpeta de documentos de anexo especificada en SAP. Si indicamos una ruta mediante la propiedad AttachmentPath entonces se utilizar esta ruta para realizar una copia del archivo. Visualizar: Abrir el documento seleccionado. Borrar: Eliminar el documento seleccionado de la lista de documentos del control. Drag&Drop: El control permite la posibilidad de arrastrar y soltar archivos dentro de este, con lo que se creara una copia del archivo en la ruta de anexos especificada. Tambin permitir arrastrar y soltar mensajes de correo desde Microsoft Outlook.

25

ControlsSAP Framework

Se utilizar para guardar documentos adjuntos por ejemplo en un SAPObject. Para ello solamente necesitaremos una propiedad de tipo String donde guardaremos la lista de archivos en cadena y separados por punto y coma. Para obtener la lista de archivos utilizaremos la propiedad Attachments del control.

3.2

Pantallas

Existen varios tipos de pantallas con las que podremos trabajar. La base de todas ellas ser la clase ControlsSAP.Forms.FormSAP. Esta clase ser la que utilicemos normalmente y la que proporcionar a nuestros formularios el aspecto de pantalla de SAP e incluirn todos los mecanismos de integracin en SAP Business One como si fueran pantallas propias de la UI.

3.2.1 FormSAP
Este tipo de formulario ser la clase base de las que heredarn todos nuestros formularios. Con esto dispondremos de todos los mtodos, funciones y propiedades que nos servirn para interactuar con las dems pantallas y facilitarn la integracin con SAP. Podremos interactuar con algunos botones de la barra de herramientas de SAP Business One como son los de Excel, los de Word, los de impresin y presentacin preliminar, y tambin los de mailing. Para ello disponemos de una serie de eventos y de propiedades para habilitar o no los botones de la barra de herramientas: AcceptsExcel: Habilita el botn de Excel de la barra de herramientas y podemos capturar la pulsacin a travs del evento Excel. Word Habilita el botn de Word de la barra de herramientas y podemos capturar la pulsacin a travs del evento Word. AcceptsPrint/AcceptsPreview: Habilita la impresin/presentacin preliminar que capturaremos desde el evento Print eMailing: ser el evento que capturaremos si queremos modificar la pantalla de mailing que aparecer por defecto. Como por ejemplo aadir un destinatario, datos adjuntos, etc. OpenForm: Abre un formulario y lo integra en SAP automticamente. OpenFormDialog: abre un formulario en modo dialogo para obtener un resultado. OpenFormEdit: abre un formulario de edicin (que veremos en el prximo apartado) y se sita en un registro indicado. OpenReport: muestra una pre-visualizacin de un informe de CrystalReports.

Tambin tendremos funciones muy utilizadas como:

26

ControlsSAP Framework

3.2.2 FormEditSAP
Nos permite realizar el mantenimiento de los objetos de negocio creados a partir de un SAPObject de una manera rpida y sencilla. Este es formulario mas complejo que existe pero tambin el mas utilizado, por lo que dedicaremos un capitulo especifico para hablar de el. Este tipo de formularios interacta con los botones de la barra de herramientas referentes al mantenimiento de datos, a dems de los ya mencionados anteriormente por el hecho de heredar de FormSAP. Estos son: AcceptsAdd: permite tener habilitado el botn de Nuevo. AcceptsDelete: habilita la opcin de men de eliminar. AcceptsSearch: activa el botn de bsquedas AcceptsUpdate: habilita los botones de desplazamiento de registros (primero, anterior, siguiente, ultimo)

Una vez configuradas las acciones que queremos tener disponibles en nuestra pantalla deberemos conocer los estados que puede tener el formulario por motivo de realizar cualquiera de estas acciones. Desde la propiedad Estat podremos saber si estamos en alguno de los estados siguientes: CONSULTING: indica que estamos en un estado de consulta. Se provoca en el momento de desplazarse entre los registros UPDATE: indica que estamos realizando una actualizacin en un registro ya existente. La mayora de los controles vistos hasta ahora disponen de una propiedad CausesActionUpdate que si esta activada indicar que cualquier cambio en ese control provocar un cambio de estado en el formulario. SEARCH: no se utiliza. ADD/ADDING: nos informa de que se esta aadiendo un nuevo registro.

Existe una propiedad ButtonForm para indicar que botn del formulario ser el indicado en recibir los cambios de estado del formulario y proceder a un tipo de accin u otra dependiendo de este: Estado CONSULTING UPDATE ADD Texto del ButtonForm Ok Actualizar Crear Accin Cerrar el formulario Actualizar los datos Crea un nuevo registro

Todo este tipo de acciones tienen una serie de mtodos asignados que podremos sobrescribir para aadir funcionalidad propia segn nuestras necesidades: DoAdd: prepara el formulario para crear un nuevo registro. Se ejecuta en el momento de de pulsar sobre el botn de Nuevo. Podemos utilizarlo para asignar valores por defecto en los controles.
27

ControlsSAP Framework

DoDelete: realiza la accin de eliminar el registro actual. Se ejecuta cuando pulsamos sobre la opcin de men Datos Eliminar DoSearch: realiza una bsqueda entre todos los datos. Se obtiene cuando pulsamos sobre buscar. GoToFirst: se desplaza al primer registro. GoToLast: nos desplazamos al ltimo registro. GoToPrevious: nos desplazamos al registro anterior. GoToNext: registro siguiente GoToKey: de posiciona en el registro que coincida con la clave indicada.

3.2.2.1 Carga de datos


Existirn 2 maneras de cargar datos en un FormEditSAP trabajando con un objeto de negocio SAPObject. Usando GetAllObjects: Esta es la manera ms usual de obtener los datos en un FormEditSAP. Podremos consultar todos los datos del objeto existentes en ese momento. Se puede tambin indicar por que campo queremos que aparezcan ordenados los registros.

28

ControlsSAP Framework

Base de datos

Deberemos asignar el objeto al formulario y este se encargar de consultar los datos del registro indicado en cada momento.
_of = New Oferta(_company) Me.GetAllObjects(_of, "U_GSP_CardName") Listado 10: Instanciacin y uso del un SAPObject en un FormEditSAP.

Usando el GetSAPObject del objeto: Otra manera de consultar los datos de un objeto es la de asignarle previamente el origen de datos (por el que queremos navegar) al Browser del objeto. Es necesario que en el origen de datos exista un campo con la clave principal del objeto. Para ello utilizaremos el mtodo GetSAPObject que indicar al formulario que debe trabajar con los datos del objeto actual.

Browser

Ejemplo: Solamente podremos navegar por registros donde el total sea mayor de 1000.
29

ControlsSAP Framework

Dim dt As DataTable dt =DoQuery("SELECT Code, U_CardCode, U_CardName, U_DocDate FROM [@GSP_DEMO_OFERTA] WHERE (U_GSP_DocTotal > '1000')", Me._company) If dt.Rows.Count > 0 Then _of.Browser.RecordSet = dt End If Me.GetSAPObject(_of) Listado 11: Utilizacin del Browser y uso del GetSAPObejct.

Solo podremos desplazarnos por los registros seleccionados en el momento de cargar el Browser del objeto. Por los que si existen nuevos registros creados posteriormente por otros usuario o procesos no se visualizarn, pero si los cambios ya que en cada movimiento se refrescarn los datos del objeto actual. Por defecto si no se especifica ninguna accin en el momento de la carga el formulario se posicionar en el ltimo registro.

3.2.3 FormWizard
Este tipo de formulario puede ser muy til para realizar pantallas asistentes de forma rpida y prctica. Consistir en un formulario con un control de pestaas que en el momento de ejecucin se visualizar como una pantalla asistente propia de las de SAP.

Permitiremos realizar un cambio de pgina dependiendo de si se cumplen las validaciones que creemos oportunas, capturando los eventos: PageChanged PageChanging
30

ControlsSAP Framework

Estos eventos nos informarn de que pgina venimos y a que pgina nos dirigimos. Podremos cambiar la informacin descriptiva de la pgina actual por medio de la propiedad Description. Tambin podremos desplazarnos por las pginas a travs de cdigo mediante: NextPage: nos desplazamos a la pgina siguiente. PreviousPage: nos movemos a la anterior pgina. ActualPage. Podemos obtener en que pagina estamos actualmente y podemos desplazarnos tambin a una pgina en concreto asignndole un valor.

El formulario asistente podr tener 2 configuraciones diferentes segn la propiedad PageEnd: 1. Si es False al llegar a la ltima pgina el botn de continuar quedar deshabilitado. 2. Si es True en la ltima pgina aparecer un botn de finalizar que lanzar un evento FinalizeWizard que deberemos capturar para ejecutar las acciones necesarias al finalizar el asistente.

3.2.4 FormSAPAlta
Es un sencillo y prctico tipo de formulario que utilizaremos para crear o actualizar registros en una tabla de usuario de SAP. Estas pantallas son tiles para tablas bsicas, donde solamente sea necesario indicar un cdigo y una descripcin. Podremos utilizarlas sobre todo para realizar mantenimientos de tablas en entornos fuera de SAP Business One.

Figura 2: Ejemplo de pantalla tipo FormSAPAlta.

31

ControlsSAP Framework

3.2.5 FormApplication
Si queremos reutilizar nuestro cdigo en un entorno fuera de SAP Business One, podremos simular un entorno parecido en aspecto y funcionalidades vistas, utilizando el tipo de formulario FormApplication. Con el dispondremos de una interficie parecida a la de SAP incluyendo la barra de herramientas, barra de men, men principal, etc. Dispone de mtodos para: Conectar a la base de datos Aadir los mdulos de trabajo y sus mens Abrir formularios Desplazarse por los registros, crear, buscar, etc. Gestionar las aplicaciones Control de versiones

En el evento Load del formulario llamaremos a la funcin Connect. Esta funcin realizar la conexin a la ltima base de datos de SAP conectada. Si es la primera vez se mostrar un formulario en el que indicaremos los datos necesarios para la conexin. Para cargar mdulos de trabajo utilizaremos AddNewModule/AddItemModule y lo realizaremos en el evento LoadModules. Si estos necesitan crear tablas, campos, etc. lo realizarn antes de iniciarse la aplicacin informando al usuario de los cambios que se van a realizar para cada mdulo.

Public Class frmMenu Private Sub frmMenu_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load Me.Connect() End Sub

Private Sub frmMenu_LoadModules(ByVal sender As Object, ByVal e As EventArgs) Handles Me.LoadModules Me.AddItemsModule(DLL.LoadDLL(Me.Company)) End Sub End Class Listado 12: Conexin y arranque de un mdulo desde un formulario FormApplication.

32

ControlsSAP Framework

Figura 3: Ejemplo FormApplicacion.

33

ControlsSAP Framework

4
4.1

Formulario (FormEditSAP)

de

edicin

En este capitulo veremos en profundidad como trabajar un objeto de negocio SAPObject a travs de un formulario de edicin FormEditSAP.

Diseo del formulario

Primero de todo disearemos una pantalla que herede de FormEditSAP y le aadiremos los controles necesarios para poder editar el objeto con el que vayamos a trabajar.

Figura 4: Ejemplo diseo de un formulario de edicin. 34

ControlsSAP Framework

El objeto de negocio con el que trabajaremos ser el visto en ejemplos anteriores. Para el mantenimiento de las propiedades del objeto Contrato necesitaremos aadir los siguientes controles y configurarlos de manera: 1. Cdigo: SAPTextBox, no acepta ediciones ni en alta ni en actualizaciones. 2. Cdigo cliente: SAPListBox, de consulta de los clientes Table = OITM ValueMember =CardCode DisplayMember = CardName Condition = CardType=C

3. Fecha Inicio/Fecha Fin: SAPTextBox acepta todo tipo de ediciones DataType = Fecha DataType = Memo 4. Comentarios: SAPTextBox multilnea, acepta todo tipo de ediciones 5. Lneas de contrato: Las lneas las trabajaremos mediante un SAPGrid. A todos estos controles les deberemos indicar tambin las propiedades siguientes para que interacten con el estado del formulario: CausesActioUpdate = True CausesAspectChage = True

4.2

Configurar el formulario

El paso siguiente ser entrar ya en el cdigo y crear un constructor que reciba un objeto SAPBobsCOM.Company. Definiremos dos variables de clase que utilizaremos para el objeto de negocio con el que trabajar el formulario y la otra variable para referenciar la Company.

Private _company As SAPbobsCOM.Company Private _obj As Contract Public Sub New(ByVal Company As SAPbobsCOM.Company) MyBase.New() 'El Diseador de Windows Forms requiere esta llamada. InitializeComponent() 'Agregar cualquier inicializacin despus de la llamada a 'InitializeComponent() Me._company = Company End Sub Listado 13: Ejemplo constructor de un FormEditSAP. 35

ControlsSAP Framework

Una vez definido el constructor pasaremos a configurar los controles que utilizar el formulario. Para ello utilizaremos el evento Load del formualrio. Definiremos tambin con el mtodo ViewColumnInSearch las columnas que queremos que se muestren en el momento de las bsquedas.
Private Sub FormEditSAP1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load 'Configuracin de la busqueda del formulario Me.ViewColumnInSearch("Code", "Cdigo") Me.ViewColumnInSearch("U_GSP_CardCode", "Cdigo cliente") Me.ViewColumnInSearch("U_GSP_DataIn", "Fecha inicio") Me.ViewColumnInSearch("U_GSP_DateOut", "Fecha de fin") 'Configuracin del Listbox de clientes With lstCardCode .Company = Me._company .AddColumn("CardCode", "Cdigo") .AddColumn("CardName", "Nombre", 200) .AddColumn("Phone1", "Telfono") End With 'Configuracin de la Grid With grdCnt1 .AddListColumn("Cod. Artculo", "U_GSP_ItemCode", _ Me._company, "OITM", "ItemCode", _ New String() {"ItemName"}) .AddColumn("Descripcin", "ItemName") .AddQuantityColumn("Cantidad inicial", "U_GSP_QuantIn") .AddQuantityColumn("Cantidad final", "U_GSP_QuantOut") .AddImportColumn("Importe", "U_GSP_Import") End With Listado 14: Ejemplo configuracin del formulario y sus controles.

Existe la posibilidad tambin, en el momento de buscar tablas sobrescribiendo la consulta del formulario.

, de hacer aparecer datos de otras

Para ello deberemos capturar el evento BuldingSearch. Como requisito indispensable debe aparecer como mnimo el campo clave del objeto en la nueva bsqueda.
Private Sub frmOferta_BuldingSearch(ByRef sqlQuery As String) Handles _ Me.BuldingSearch sqlQuery = "SELECT [@GSP_DEMO_OFERTA].Code, OCRD.CardCode, OCRD.CardName, OCRD.Address FROM [@GSP_DEMO_OFERTA] INNER JOIN OCRD ON [@GSP_DEMO_OFERTA].U_GSP_CardCode = OCRD.CardCode" End Sub Listado 15: Ejemplo utilizacin bsqueda propia con BuldingSearch.

Tambin instanciaremos el objeto y cargaremos todos los datos por defecto del objeto de negocio para poder empezar a trabajar con el, dentro del evento Load.
36

ControlsSAP Framework

'Creacin del objeto de negocio y obtencin de los datos _obj = New Contract(_company) Me.GetAllObjects(_obj) Me.GoToLast() Listado 16: Carga de datos en el objeto de negocio.

4.3

Entrada/Salida de datos

El formulario dispondr de 2 mtodos que deberemos sobrescribir y que necesitaremos para realizar la entrada de datos del objeto hacia el formulario como el proceso contrario. Deberemos sobrescribir el LoadFormWithObject que se ejecutar cada vez que se necesite cargar datos en los controles desde el objeto actual:
Public Overrides Sub LoadFormWithObject() txtCode.Text = Me._obj.Code lstCardCode.SelectedValue = Me._obj.CardCode txtDataIn.Text = Me._obj.DataIn txtDateOut.Text = Me._obj.DateOut txtComments.Text = Me._obj.Comments 'Carga de las lneas grdCnt1.ObjectSource = Me._obj.Cnt1 End Sub

Para el proceso contrario, cargar los datos entrados en el formulario en las propiedades del objeto sobrescribiremos el mtodo LoadObjectWithForm. Este se ejecutara en el momento de aadir o actualizar:
Public Overrides Sub LoadObjectWithForm() Me._obj.CardCode = lstCardCode.SelectedValue Me._obj.DataIn = txtDataIn.Value Me._obj.DateOut = txtDateOut.Value Me._obj.Comments = txtComments.Text End Sub

Hay que observar que las lneas no necesitan actualizarse ya que al trabajarse con la Grid se actualizan directamente en su origen de datos, por lo que el objeto dispondr de los nuevos valores en todo momento.

Con esto ya estaramos en disposicin de poder realizar ya un mantenimiento bsico de nuestro objeto. Por lo que si aadimos una nueva opcin de men en la que abramos el formulario podremos ya realizar altas, modificaciones, bsquedas, etc.
37

ControlsSAP Framework

Figura 5: Ejemplo formulario de edicin en tiempo de ejecucin.

4.4

Trabajar con las grids

Para completar nuestro mantenimiento con las lneas, deberemos realizar algunas validaciones, y completar algunos datos como por ejemplo: en el caso de entrar un cdigo de artculo querremos que nos aparezca automticamente la descripcin. Para ello necesitaremos capturar un evento de la grid que nos informe que se ha modificado y actualizar la propiedad de la lnea correspondiente.
Private Sub grdCnt1_UpdateSAPLine(ByVal l As ControlsSAP.SAPLines, ByVal ColumnName As String) Handles grdCnt1.UpdateSAPLine If ColumnName = "U_GSP_ItemCode" Then Dim it As SAPbobsCOM.Items it = Me._company.GetBusinessObject(oItems) it.GetByKey(Me._obj.Cnt1.ItemCode) 'Actualizamos la descripcin Me._obj.Cnt1.ItemName = it.ItemName End If End Sub

Para validar por ejemplo que la cantidad inicial sea siempre menor que la cantidad final haramos lo siguiente:

38

ControlsSAP Framework

Private Sub grdCnt1_ValidateSAPLine(ByVal l As ControlsSAP.SAPLines, _ ByVal e As DevExpress.XtraGrid.Views.Base.RowAllowEventArgs) Handles grdCnt1.ValidateSAPLine With Me._obj.Cnt1 If .QuantIn > .QuantOut Then ControlsSAP.SAPMsg.StatusBarMsg("La cantidad inicial debe de ser mayor que la cantidad final", True) e.Allow = False End If End With End Sub

Es recomendable que todas las validaciones que debamos realizar sobre los objetos de negocio se realicen dentro del propio objeto. Ya que si en otro momento lo utilizamos sin el formulario correspondiente, nos servirn las mismas validaciones y cumpliremos en cualquier entorno las reglas de negocio siempre.

39

ControlsSAP Framework

5
5.1

Impresiones

El Framework de ControlsSAP dispone de utilidades para facilitar el trabajo con informes realizados con la herramienta Cystal Reports. Esto facilita la incorporacin de informes en las aplicaciones realizadas.

Objeto Report

Existe un objeto Report que podemos utilizar para imprimir, previsualizar, exportar a pdf, etc., informes creados con la herramienta de Crystal Reports. Las propiedades y mtodos mas usados para este tipo de objeto son: ReportName: Indicaremos la ruta del fichero rpt. El informe deber estar dentro de la ruta especificada en el formulario de configuracin (Figura 6). SetParameterValue: Si el informe contiene parmetros podremos indicarle los valores a estos mediante este mtodo. Print: Realiza la impresin del informe indicado en la propiedad ReportName. Si el informe incluye parmetros y no hemos indicado sus valores aparecer un formulario de demanda (Figura 7). Tambin se mostrar un dialogo de impresin para especificar la impresora y el numero de copias (Figura 8). Si no queremos imprimir directamente por una impresora sin mostrar el dialogo de impresin entonces utilizaremos el mtodo DirectPrint. DirectPrint: Realiza la impresin directa del informe. Funcionar igual que el mtodo Print pero sin mostrar el dialogo de impresin. Deberemos especificar una impresora y el nmero de copias. Si no especificamos ninguna se imprimir una copia por la impresora por defecto. Preview: Realizar una impresin preliminar. Si el informe incluye parmetros y no hemos indicado sus valores aparecer un formulario de demanda.

40

ControlsSAP Framework

SelectionFormula: Podemos indicar una formula con formato de Crystal Reports para poder filtrar los registros por el criterio indicado.

En el constructor deberemos especificar el objeto SAPBobsCOM.Company. Este se utilizar para conectar la base de datos del informe hacia la indicada en el objeto. Por lo que podremos reutilizar cualquier informe aunque este se haya creado con una conexin diferente. Es importante que realicemos la liberacin del objeto Report con el mtodo Dispose. Para no tener problemas posteriores de memoria.

Figura 6: Formulario de configuracin. Especificar la ruta de los informes

Figura 7: Formulario de demanda de parmetros

41

ControlsSAP Framework

Figura 8

5.2

Tipo de conexin

Al disear informes con Crystal Reports podemos utilizar 2 tipos de conexin con la base de datos, que sern compatibles con la impresin de ControlsSAP: ODBC: Por defecto ControlsSAP Framework crear una conexin de tipo ODBC que podremos utilizar para disear los informes con Crystal Reports. Podemos consultar/modificar sus datos desde Gestin Configuracin. OleDB (ADO): Podremos utilizar los informes creados con una conexin OleDB (ADO) para SQL Server.

El sistema se encargar de reconocer que conexin utiliza el informe antes de actualizar los datos de conexin con la base de datos actual.

5.3

Versiones Crystal Reports

Podemos disear informes que sean compatibles con las versiones de Crystal Reports 10 o Crystal Reports para NET 2.0 o la ultima versin de Crystal Reports 2008. El objeto Report lo podremos encontrar en una de las siguientes libreras, dependiendo de que versin de Crystal Reports que necesitemos: ControlsSAP.CrystalReports.v10.dll ControlsSAP.CrystalReports.v12.dll

42

ControlsSAP Framework

Podremos utilizar una u otra, o las dos a la vez. En estas libreras encontraremos el objeto Report. El objeto lo encontraremos en el namespace: ControlsSAP.CrystalReports .Cr10.Report ControlsSAP.CrystalReports .Cr12.Report

5.4

Visor de informes

Cada visor incluir su propia barra de herramientas, adems podremos utilizar tambin la barra de herramientas de SAP o del formulario de aplicacin si estamos por fuera.

5.5

Configurar informes en formularios

Existen propiedades y mtodos en los formularios de tipo FormSAP, que nos permitirn aadir internamente informes para posteriormente poderlos previsualizar o imprimir. Tambin permitiremos aadir informes externamente a nivel de usuario, pudiendo duplicar informes existentes o aadiendo nuevos. Para utilizar esta nueva funcionalidad deberemos activar la propiedad UseSystemPrinting. Por defecto esta propiedad estar a False, por lo que al pulsar sobre imprimir/previsualizar se ejecutar el mtodo OnPrint y el evento PrintingForm. Pero si queremos utilizar esta funcionalidad esta propiedad deber estar a True, y ya no se ejecutarn los mtodos y eventos anteriormente mencionados.
43

ControlsSAP Framework

Para aadir un informe tenemos una propiedad Reports que nos permitir aadir varios informes al formulario del siguiente modo:
Me.Reports.Add("Facturas", New cr12.Report(GetType(misfacturas), Me._company)) Me.Reports.Add("Factura2", New cr12.Report(GetType(factura1), Me._company), _ New CrystalReportsParameter("Code", Me.txtCode))

Public Sub Add(Description as String, ReportObj AS ControlsSAP.CrystalReports.IReport, ParamArray Parameters CrystalReportsParameter()) Description: Descripcin que le daremos al informe. Deber ser nica para los informes del formulario. ReportObj: Instanciaremos un objeto Report indicndole el tipo de la clase que hace referencia al informe CrystalReports, y la company desde la que obtendr los datos. Parameters: Lista de parmetros que queramos pasar a el informe en el momento de imprimirlo. Los parmetros podrn ser de tipo Discreto o de tipo Rango. Necesitaremos indicar el nombre del parmetro y de que control del formulario obtendremos el valor. Tambin podremos pasar valores constantes. Para poder incluir informes dentro de nuestros proyectos y as utilizarlos como una clase deberemos tener instalado alguna versin de Crystal Reports que incluya herramientas de integracin para Visual Studio. Podemos obtener una desde la herramienta de instalacin de Visual Studio 2005, marcando la casilla Crystal Reports para Visual Studio que instalar las libreras para Crystal Reports 10 (Figura 9).

44

ControlsSAP Framework

Figura 9: Crystal Reports para Visual Studio 2005

Si tenemos esta funcionalidad ya podremos anexar documentos *.rpt en nuestro proyecto. Al anexarlos al proyecto automticamente se generar una clase *.vb que utilizaremos para hacer referencia a estos informes.

Con esto ya tendramos definidos varios informes de sistema. Ahora podramos definir otros informes de usuario, propios para cada tipo de cliente. Para ello utilizaremos el botn del diseador de layaouts de SAP (Figura 10: Diseador de informes).

45

ControlsSAP Framework

Figura 10: Diseador de informes

Desde el diseador podremos realizar las siguientes acciones: Fijar como estndar: Podremos definir que formulario queremos fijar por defecto. Podremos indicar si lo queremos para todos lo usuarios o solamente para el usuario actual. Si algn usuario tuviera una configuracin propia no se le cambiara si indicamos que lo queremos para todos los usuarios. Solamente afectara cuando el usuario no tenga ningn informe definido por defecto para el. Duplicar: Crear una copia del informe seleccionado en un archivo rpt, en la ruta de los informes indicada en la configuracin. Nuevo informe: Podremos aadir un nuevo informe de CrystalReports. Para ello deberemos indicar una descripcin que no se podr repetir y seleccionar un informe rpt que crear una copia en la ruta de los reports. Una vez seleccionado el fichero con el report aparecern los parmetros de este. Si queremos que el parmetro este relacionado con algn control del formulario deberemos indicar el nombre de este control. Si por lo contrario queremos indicar un valor fijo se lo indicaremos entre llaves ({Valor}), y si lo dejamos en blanco entonces en el momento de la impresin se lo pedir al usuario. Tambin podremos indicar el nmero de copias por defecto. Si indicamos una impresora fija se imprimir directamente por ella, si lo dejamos en blanco en el momento de imprimir aparecer el dialogo de impresin con la impresora por defecto del sistema.

46

ControlsSAP Framework

Figura 11: Aadir un nuevo informe.

Editar: Permitir editar una informe de usuario. Los informes de sistema no se pueden modificar. Si queremos variar algn valor deberemos duplicar el informe y entonces editar el nuevo informe de usuario. Eliminar: Eliminaremos el informe de usuario seleccionado. Disear: Permite abrir el informe para su diseo siempre y cuando tengamos las herramienta de Crystal Reports instalada en la mquina. Una vez configurados los informes si pulsamos previsualizar informes incluidos en el formulario. nos aparecer una lista con los

Si pulsamos el botn de imprimir

, imprimiremos el informe considerado por defecto.

47

ControlsSAP Framework

6
Informativo Aviso Decisin Error Accin

Mensaje de sistema

Disponemos de una serie de mensajes de sistema con la apariencia de SAP Business One, para facilitar la comunicacin entre el usuario y la aplicacin. Existirn diferentes tipos de mensajes:

Entrada de datos

6.1

Mensajes de dialogo
Ico Tipo SAPMsg.Question SAPMsg.Alert SAPMsg.Critical/Exception SAPMsg.Info

Existen una serie de mensajes ya definidos segn el tipo de mensaje que queramos mostrar:

Podemos configurar nuestro propio mensaje con la funcin SAPMsg.Show indicando el mensaje, el icono, los botones. Pulsando <Control + C> al aparecen una mensaje del tipo SAPMsg, podremos copiar el texto del mensaje.
48

ControlsSAP Framework

Para utilizar mensajes que muestren excepciones capturadas podemos utilizar la funcin SAPMsg.Show y pasarle la excepcin. Este tipo de mensajes permite que haciendo doble clic sobre el mensaje de error, poder visualizar la pila de la excepcin (Figura 12: Mensaje mostrando la excepcin completa.).

Figura 12: Mensaje mostrando la excepcin completa.

6.2

Mensajes en la barra de estado

Tambin se han aadido los 3 tipos de mensaje que se pueden indicar en la barra de estado mediante la funcin SAPMsg.StatusBar. Confirmacin/Success Error Informacin/Warning

6.3

InputBox

Este tipo de mensaje de sistema nos permitir obtener un valor del usuario con el mtodo ControlsSAP.SAPMsg.InputBox.

49

ControlsSAP Framework

Figura 13: Ejemplo InputBox de tipo fecha.

Dim d As DateTime d = SAPMsg.InputBox( _ "Hasta que fecha quieres eliminar los registros del 'Log de modificaciones'", _ SAPMsg.InputType.Date, Today)

50

ControlsSAP Framework

7
7.1

Autorizaciones

ControlsSAP Framework proporciona una serie de funcionalidades integradas con SAP Business One que permiten definir autorizaciones de usuario para mostrar o no las pantallas definidas con la herramienta. Estas autorizaciones se configurarn desde el formulario de autorizaciones de SAP Business One.

Definicin

Al arrancar un mdulo de trabajo, se generar una autorizacin de usuario, por cada formulario que cargue nuestra aplicacin de manera automtica. Estas autorizaciones se modificaran desde la pantalla de SAP Gestin Inicializacin sistema Autorizaciones Autorizaciones generales, desde las autorizaciones de usuario (Figura 14). Ser necesario definir un atributo por cada formulario con una descripcin (mximo 40 caracteres) que defina el formulario. Si no se especifica ningn atributo la descripcin de la autorizacin ser la misma que el nombre del formulario. El atributo que utilizaremos ser ControlsSAP.Forms.FormDescription. Por defecto todos los formularios estarn controlados mediante autorizaciones. Si queremos que un formulario determinado no este sujeto a ningn tipo de autorizacin (podr abrirlo cualquier usuario) utilizaremos el atributo ControlsSAP. Authorizations.AuthorizationExempt.

51

ControlsSAP Framework

Figura 14

Por defecto todas las autorizaciones nuevas que se creen lo harn por defecto con Autorizacin total.

7.2

Creacin

De momento para que se creen automticamente las autorizaciones de todos los formularios de una librera, es necesario cambiar el AssemblyDataBaseVersion para provocar una actualizacin y que exista en el modulo algn objeto para crear en la base de datos ya sea una tabla, campo, vista, etc. desde el FormDLL (ver capitulo Mdulos de trabajo). Existir una opcin en el men administrador, para crear/actualizar estas autorizaciones, de manera manual.

52

ControlsSAP Framework

8
8.1

Parmetros

Existe una clase por la que podemos crear de una manera fcil objetos que contendrn una lista de parmetros que nos puede servir para la parametrizacin del mdulo. Sin la necesidad de crear nuevos objetos y ni tablas en la base de datos. Estos se podrn modificar ya sea desde el propio objeto o por el usuario de la aplicacin mediante el formulario de Parmetros en el men Gestin.

Creacin de parmetros

Nuestros mdulos podrn tener una lista de parmetros con los que poder interactuar. Para ello definiremos en nuestro proyecto una clase que herede de ControlsSAP.Parameters.ApplicationParameters y definiremos una lista de variables, cada una con el atributo ControlsSAP.Parameters.ParameterAttribute. Donde podremos especificar: El tipo de parmetro que normalmente coincidir con el tipo de la variable. El nombre del parmetro (opcional). Descripcin. Valor por defecto. Visibilidad del parmetro. Si es un parmetro de sistema solamente ser posible modificarlo entrando en la aplicacin en modo Administrador. Comentarios.

Podemos indicar al parmetro datos extras mediante otros atributos como Data y Mask: Una sentencia SQL con los valores validos para el parmetro. Una lista de valores que sern los valores validos que puede aceptar el parmetro.
53

ControlsSAP Framework

Una mascara de entrada de datos.

Podemos ver un ejemplo de cmo definir una clase con 2 parmetros:


Imports ControlsSAP Imports ControlsSAP.Parameters Imports ControlsSAP.Parameters.ParameterType Public Class Parametros1 Inherits ControlsSAP.Parameters.ApplicationParameters Public Sub New(ByVal c As SAPbobsCOM.Company) MyBase.New(c) End Sub ' Cantidad inicial <Parameter([Integer], _ "Cantidad inicial", _ 5, False, _ "Cantidad mnima inicial ")> _ Public CANTINI As Integer ' Ruta plantillas <Parameter([String], _ "Ruta plantillas", _ "C:\Plantillas", False, _ "Ruta compartida donde estarn las plantillas de contratos")> _ Public PATHPLANT As String End Class

Ejemplos para indicar un origen de datos con el atributo ControlsSAP.Parameters.Data. El origen podr ser una sentencia SQL, o una lista de valores del mismo tipo definido en la variable:
'Valores posibles: Numeros par del 0 al 20 <Parameter([Integer], ...)> _ <Data(0, 2, 4, 8, 10, 12, 14, 16, 18, 20)> _ Public NumeroPar As Integer

'Valores posibles: Las listas de precios <Parameter([Integer], ... > _ <Data("SELECT ListNum, ListName FROM OPLN"> _ Public ListaPrecios

54

ControlsSAP Framework

Existe otro tipo de atributo ControlsSAP.Parameters.Mask. Con los que podremos definir mascaras con expresiones regulares, para la entrada de datos desde el formulario de parmetros. Ejemplo:
'Solamente se podrn introducir direcciones ftp <Parameter([String], ...)> _ <Mask("ftp\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S+)?")> _ Public DireccionFtp As String

8.2

Utilizacin de parametros

Para modificar los valores lo podremos hacer desde cdigo o mediante el formulario de edicin de parmetros (Figura 15) que hay en GestinParmetros, donde estarn todos los parmetros de los mdulos aadidos.
Dim p As Parametros1 p = New Parametros1 (c) p. PATHPLANT="C:\Plantillas\Demo" p.Save()

Para que nuestra clase parmetros aparezca en el formulario de edicin de parmetros que trae el framework de ControlsSAP y podamos editarlos es necesario que en algn momento del arranque de la aplicacin, registremos una instancia de nuestra clase con: ControlsSAP.Register.Parameter(ApplicationParameter)
Public Overrides Sub Run() ... ControlsSAP.Register.Parameter(DLL.GetParameters(c)) End Sub

55

ControlsSAP Framework

Figura 15

Desde la clase ApplicationParameters, donde definimos los parmetros de nuestro mdulo, podremos indicarle al constructor el nombre de una categora por la que se agruparn los parmetros de un mismo mdulo, cuando se muestren desde el formulario de parmetros (Figura 16).
Public Class ParemetersDemo Inherits ControlsSAP.Parameters.ApplicationParameters Public Sub New(ByVal c As SAPbobsCOM.Company) MyBase.New(c, "Demo Categoria") End Sub ...

56

ControlsSAP Framework

Grupo 1

Grupo 2

Figura 16

Por lo que podremos tener registrados en un mismo mdulo/librera varias clases de parmetros. Que se localizarn en la misma pestaa y se agruparn por las categoras indicadas.

57

ControlsSAP Framework

Mdulos de trabajo

Nuestras aplicaciones pueden crear en el arranque varios tipos de objetos newcesarios para el inicio de la aplicacin, como son: Objetos que se deben crear en la base de datos (tablas, vistas, campos, bsquedas formateadas, etc.) Opciones de men Lista de Parmetros Autorizaciones para los formularios

Que dejarn la aplicacin preparada para comenzar a trabajar con ella sin la necesidad de realizar ninguna accin extra.
Mens

Modulo Versin DLL Versin Fichero Versin DB: 2009.0.0.0

Objetos definidos en la base de datos

Parmetros

Autorizaciones

58

ControlsSAP Framework

9.1

Creacin de un mdulo

Para crear nuestro modulo deberemos utilizar un objeto de tipo formulario, que utilizaremos para definir el men de la aplicacin y sus objetos a crear en la base de datos. Tendremos que crear un formulario del tipo ContolsSAP.Forms.FormDLL. Utilizaremos el diseador del formulario para crear el men de nuestro modulo aadiendo varios MenuStrip para cada tipo de men.

9.2

Creacin de los Mens


Un mdulo podr constar de 3 tipos diferentes de mens: Men de aplicacin: Ser el men principal que utilizar el usuario de la aplicacin. Men definicin: Este es el men que aparecer dentro del men Gestin Definicin y que utilizaremos para aadir las opciones referentes a la creacin de datos maestros. Parecido al men que definicin que aparece en SAP. Men administrador: Este men solamente lo podrn visualizar los programadores y nos servir para ocultar determinadas opciones al usuario.

Para disear cada tipo de men utilizaremos el control MenuStrip (propios de .NET) segn nuestras necesidades. En cada MenuStrip aadido podremos definir una o varias opciones de men y submens. Existir 3 propiedades en la clase FormDLL para especificar si el men es de aplicacin, definicin o de administrador: MenuAdminStrip MenuApplicationStrip MenuDefinitionStrip

59

ControlsSAP Framework

9.3

Creacin de la base de datos

Nuestro modulo necesitar definir una serie de objetos en la base de datos de SAP para funcionar correctamente. Los objetos se crearn la primera vez que arranque el mdulo o cuando se detecte un cambio de versin lo que provocar que se creen o actualicen aquellos objetos que se han aadido o modificado. En prximos captulos veremos ms extensamente que objetos utilizaremos para crear tablas, campos, vista, etc. en la base de datos.

60

ControlsSAP Framework

Desde nuestro formulario iremos aadiendo todos los objetos necesarios para poder ejecutar nuestro modulo y en el momento del arranque estos se crearn si es necesario. Para esto existe la propiedad DataBase que nos proporciona un objeto de tipo lista, para ir aadiendo tablas, campos y dems objetos que deber crear nuestro modulo al arrancar o al cambiar de versin. Deberemos sobrescribir el mtodo CreateDataBaseObjects() e ir aadiendo las tablas y campos. Los objetos se definirn igual que lo haramos desde el diseador de SAP (sin el @ delante de las tablas y sin el U_ delante de los campos). Definiremos 2 tablas con sus diferentes campos:

Public Overrides Sub CreateDataBaseObjects() MyBase.CreateDataBaseObjects() With Me.DataBase.AddTable("GSP_CNTR", "Contratos").Fields .AddAlfanumerico("GSP_CardCode", "Cdigo cliente", 50) .AddAlfanumerico("GSP_CardName", "Nombre", 100) .AddFecha("GSP_DataIn", "Fecha inicio") .AddFecha("GSP_DateOut", "Fecha de fin") .AddMemo("GSP_Comments", "Comentarios") End With With Me.DataBase.AddTable("GSP_CNT1", "Lineas de contratos").Fields .AddAlfanumerico("GSP_CntrCode", "Cd.contrato", 8) .AddAlfanumerico("GSP_ItemCode", "Cod. Artculo", 50) .AddAlfanumerico("GSP_ItemName", "Descripcin", 150) .AddCantidad("GSP_QuantIn", "Cantidad inicial") .AddCantidad("GSP_QuantOut", "Cantidad final") .AddImporte("GSP_Import", "Importe") End With End Sub

Podemos aadir a la lista objetos de tipo: Tablas: dentro de cada tabla podemos aadir objetos como campos, valores validos, e ndices. Vistas Procedimientos almacenados Acciones SQL: como inserts, updates, deletes. Categoras SAP: dentro de cada categora podemos definir bsquedas formateadas, consultas predefinidas.

61

ControlsSAP Framework

9.4

Control de versiones

Para el control de versiones existe un mecanismo mediante un atributo de ensamblado por el cual el programador podr modificar e indicar que el modulo en cuestin debe ser actualizado. Este se deber indicar en el archivo AssemblyInfo del proyecto.

<Assembly: ControlsSAP.AssemblyDataBaseVersion("2007.0.0.12")>

En el momento de arrancar se detectar si se ha modificado la versin o si es un nuevo mdulo por lo que se avisar al usuario que se van a ejecutar modificaciones en SAP. De esta manera no har falta que el consultor o los usuarios de SAP sepan que campos o tablas se tienen que crear en una nueva versin.

9.5

Creacin de parmetros

Nuestros mdulos podrn tener una o varias listas de parmetros con los que poder interactuar. Para que nuestras clases de parmetros estn disponibles desde el formulario de edicin que trae el framework de ControlsSAP es necesario que en algn momento de la carga inicial registremos una instancia de nuestra clase con:
ControlsSAP.Register.Parameter(ApplicationParameter)

Ejemplo de registro de los parmetros desde la carga del pluggin.


Public Overrides Sub Run() ... ControlsSAP.Register.Parameter(DLL.GetParameters(c)) End Sub

62

ControlsSAP Framework

9.6

Arranque de un mdulo de trabajo

Una vez creado el formulario que contendr el mdulo definiremos una clase (por norma general se llamar DLL) con un mtodo LoadDLL- que retornar un objeto LibraryDLL que utilizaremos mas adelante.

Public Class DLL Public Shared Function GetParameters(ByVal c As Company) As Parametros1 Return New ParemetersDemo(c) End Function Public Shared Function LoadDLL(ByVal c As SAPbobsCOM.Company) As ControlsSAP.Forms.FormDLL.LibraryDLL ControlsSAP.Register.Parameter(DLL.GetParameters(c)) Dim f As New frmDLL(c) Return f.GetMenuDLL End Function End Class

Despus si lo que queremos el cargar el modulo creado dentro de SAP Business One crearemos un Pluggin y en el momento de ejecutar el Run realizaremos 3 acciones: 1. Conectaremos al AddOn mediante AddOnConnection()
63

ControlsSAP Framework

2. Cargaremos los mdulos que necesite nuestra aplicacin (AddModule/AddItemsModule) 3. Arrancaremos una aplicacin que crear un nuevo punto de men en SAP B1 incluyendo las opciones de men de los mdulos cargados hasta ese momento.
Imports ControlsSAP Imports ControlsSAP.SapUI <PluginEngine.Plugin("Demo2005", "DemoProject2005", _ "Integracion AddOn DemoProject2005", "Oliver Parra", "1.0")> _ Public Class WinFormDemoPlugin Inherits Addon2Core.PluginEngine.CPlugin Public Overrides Sub Run() Try 'Conecta la libreria ControlsSAP con el AddOn AddOn.AddonConnection() 'Carga de los modulos que tendra nuestra 'aplicacin en SAP Business One AddOn.AddItemsModule( _ DLL.LoadDLL(Addon2Core.Addon.CB1App.Company)) 'Arranca una aplicacin con los mdulos 'cargados hasta ese momento ControlsSAP.SapUI.AddOn.Start("SBO_OneDemo2")

Catch ex As Exception SapMsg.Show(ex) End Try End Sub End Class

64

ControlsSAP Framework

65

ControlsSAP Framework

10
10.1 Estilo 8.8
Estilo clsico:

Integracin

Las pantallas se repintarn segn el estilo elegido en SAP Business One. Sin la necesidad de realizar ninguna modificacin desde el diseador de cdigo.

Nuevo Estilo 8.8:

66

ControlsSAP Framework

10.2 Fuente, tamao de letra y color de las pantallas


En el momento de abrirse los formularios se mostrarn con la configuracin de fuente y color establecidos en SAP Business One.

En modo diseo se continuara diseando las pantallas tal y como hasta ahora. Para que se pueda utilizar esta nueva funcionalidad el formulario debe tener la propiedad AutoScaleMode a Font. Por defecto los formularios ya se crean con este valor.

10.3 Textos Dinmicos (Control + Doble-Click)


Se podrn modificar los textos de las etiquetas de algunos controles, tal y como hace SAP, pulsando {CONTROL} y haciendo DOBLE-CLICK con el ratn. Los controles con esta funcin habilitada sern: SAPLabel (etiquetas) SAPTabPage (Pestaas) SAPRadioButton/SAPCheckBox Columnas de la grid

Esta funcionalidad se grabar en la base de datos donde se conecte por defecto el AddOn.

67

ControlsSAP Framework

10.4 Mens para SAP Business One


Para crear nuestro men de aplicacin desde el formulario FormDLL existir un tipo de control que nos permitir aadir la opcin de men dentro de unas coordenadas especficas en el men de SAP.

Nuevo tipo de men

La propiedad que utilizaremos para ello ser SapLocation desde la que podremos especificar: ParentUID: Identificador del men padre de la que colgara nuestra opcin. Si no se especifica ningn valor, se pintar la opcin en su lugar por defecto. Si se especifica 0 o el valor 43520 se aadir en el men raz. Position: Posicin que ocupar nuestra opcin dentro de las opciones que cuelgan de men indicado en el ParentUID. Si la posicin es -1, la opcin se aadir al final.

Para poder utilizar este nuevo control en opciones ya creadas, podemos convertir la opcin de men a SAPMenuItem fcilmente. Desde la opcin Convertir en... en el men contextual que existe en el diseador de mens de Visual Studio haciendo clic derecho sobre el control.

68

ControlsSAP Framework

11

Database

En este capitulo veremos una serie de objetos que podemos crear en la base de datos de SAP Business One. Todos ellos implementan una interficie que incluye un mtodo Execute. Que sirve para crear/actualizar el objeto en la base de datos. Si necesitamos crear en un momento dado cualquiera de estos objetos utilizaramos este mtodo. Pero lo normal ser que se creen los objetos en el momento de arranque del mdulo. Y para ello en vez de utilizar el mtodo Execute lo que haramos es aadir los objetos en la coleccin FormDLL.DataBase dentro del mtodo FormDLL.CreateDataBaseObjects.

11.1 Tablas, campos, ndices


Podemos crear tablas en SAP Business One con el objeto SAPUserTable. Indicndole un nombre y una descripcin.

11.1.1 Campos
Para definir los campos utilizaremos la coleccin Fields. Podemos definir campos con los mtodos siguientes: AddAlfanumerico: Aade un campo de tipo alfanumrico. AddBooleano: Aade un campo alfanumrico de longitud 1 carcter, con los valores vlidos (Y)es/(N)o. AddCantidad: define un campo de tipo cantidad. AddImporte: crea un campo en la tabla de tipo importe. AddPrecio: define un campo de tipo precio. AddFecha: define un campo de tipo fecha. AddHora: define un campo de tipo hora.
69

ControlsSAP Framework

AddLinkTable: define un campo alfanumrico de 8 caracteres, vinculado a una tabla de usuario. AddMemo: crea un campo de tipo texto. AddNumerico: aade un campo de tipo numrico de una longitud indicada. AddPorcentaje: crea un campo de tipo porcentaje.

Estas instrucciones devuelven un objeto de tipo SAPUserField, que podemos utilizar para aadir varios valores validos.

11.1.2 ndices
Desde el objeto SAPUserTable podemos tambin definir ndices desde la propiedad Keys. Podemos definir 2 tipos de ndices: AddIndex: Aade un ndice a la tabla. Indicaremos el nombre del ndice y la lista de campos que lo componen. Los campos se indicarn sin el U_. AddUniqueIndex: Aade un ndice como el anterior pero este de tipo nico.

11.2 Vistas
Para crear vistas en la base de datos utilizaremos el objeto SAPView. Deberemos indicar el nombre de la vista y la consulta SQL.

11.3 Procedimientos almacenados


Para definir procedimientos almacenados utilizaremos el objeto SAPProcedure. Indicaremos el nombre del procedimiento a crear y la sentencia SQL que lo compone.

11.4 Sentencia SQL


Para realizar sentencias SQL como INSERT, UPDATE, DELETE, disponemos de mtodo ControlsSAP.DoAction, que realiza la accin en el instante. Pero si lo que queremos es que se ejecuten este tipo de sentencias SQL en el momento de la carga de la aplicacin, por ejemplo insertar valores por defecto despus de crear una tabla, entonces la sentencia anterior no nos servira. Para esto existe el objeto SAPAction donde indicaremos la accin a realizar y la aadiremos junto con los dems objetos en el momento de crear.
70

ControlsSAP Framework

El objeto SAPAction no esta pensado para realizar acciones en la base de datos fuera de los formularios de tipo FormDLL (para aadirlos en el objeto Database). Para realizar este tipo acciones se debe utilizar la funcin ControlsSAP.DoAction.

11.5 Categoras, consultas predefinidas, bsquedas formateadas


Podemos aadir consultas predefinidas, y bsquedas formateadas propias de SAP. Para ello deberemos aadir primero una categora. Utilizaremos el objeto SAPQueryCategories indicando un nombre. La estructura de estos objetos en SAP es la siguiente:

Categoras Consultas predefinidas Bsquedas formateadas

11.5.1 Consultas predefinidas


Desde el mtodo AddQuery del objeto SAPQueryCategories crearemos una consulta predefinida de SAP de tipo SAPUserQuery. Deberemos indicarle un nombre a la consulta y la sentencia SQL a ejecutar. Podremos aadir al objeto SAPUserQuery bsquedas formateadas de SAP.

11.5.2 Bsquedas formateadas


Para aadir bsquedas formateadas propias de SAP Business One necesitaremos aadirlas desde el objeto SAPUserQuery. Con el mtodo AddFormatedSearch asignaremos estas bsquedas a las consultas de SAP.
Dim q As New SAPQueryCategories(Me.Company, "Consultas Generales") With q With .AddQuery("ConsultaFamilias", _ "SELECT Code, Name FROM [@GSP_FAMILIES] WHERE U_GSP_GroupCode = $[OITM.ItmsGrpCod]") .AddFormattedSearch("150", "U_GSP_FAMILIA") End With End With

71