Professional Documents
Culture Documents
Manual
Operativo
V2007.9
Po r
Oliver Parra
ControlsSAP Framework
ndice de Contenidos
1
Prerrequisitos ........................................................................................................... 5
Mtodo de trabajo.................................................................................................... 5
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
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
10
10.1
10.2
10.3
10.4
11
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
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
Database......................................................................................... 69
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:
Control de versiones.
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:
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:
Opciones de men
Lista de Parmetros
ControlsSAP Framework
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.
2.1
Objetos maestros
Objetos detalle
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
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
Properties:
Browser
<Lines>
ControlsSAP Framework
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
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
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.
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
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.
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
Existirn 3 tipos de atributos que utilizaremos en las propiedades de los clases SAPObject y
SAPLines para realizar diferentes tipos de validaciones:
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.
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
Validaciones internas
Mandatory
HasRelation
NonUpdatable
...
Validating
Adding/Updating
SavingLine
ValidatingLine
ValidatedLines
Base de
Datos
Added/Updated
14
ControlsSAP Framework
2.6.2 Eliminaciones
Remove()
Removing
Delete()
Base de
Datos
Removed
15
ControlsSAP Framework
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.
3.1
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:
ControlsSAP Framework
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
SubDataType
Numero
Precio
Importe
Cantidad
Entero
No muestra decimales
Porcentaje
Muestra el smbolo de %
Cadena
Memo
Fecha
Fechas
Hora
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:
With Me.SapListBox1
.Table = "OCRD"
.ValueMember = "CardCode"
.DisplayMember = "CardName"
.Condition = "CardType='C'"
.Company = Me._company
End With
ControlsSAP Framework
Dim dt as DataTable
dt = ControlsSAP.DoQuery(SELECT * FROM OCRD)
Me.SapListBox1.DataSource = dt
With Me.SapListBox1
.InsertRow("O", "Abierto")
.InsertRow("C", "Cerrado")
.InsertRow("P", "Pendiente")
End With
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.
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.
ControlsSAP Framework
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.
ControlsSAP Framework
Figura 1: Ejemplo de advertencia al intentar introducir un valor en una columna diferente a la indicada
como obligatoria.
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:
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:
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:
SEARCH: no se utiliza.
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
Accin
CONSULTING
Ok
Cerrar el formulario
UPDATE
Actualizar
ADD
Crear
Todo este tipo de acciones tienen una serie de mtodos asignados que podremos sobrescribir
para aadir funcionalidad propia segn nuestras necesidades:
ControlsSAP Framework
DoSearch: realiza una bsqueda entre todos los datos. Se obtiene cuando
pulsamos sobre buscar.
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
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.
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.
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:
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.
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:
Abrir formularios
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.
32
ControlsSAP Framework
33
ControlsSAP Framework
Formulario
(FormEditSAP)
de
edicin
4.1
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.
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
DataType = Fecha
DataType = Memo
4.2
CausesActioUpdate = True
CausesAspectChage = True
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.
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.
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
4.3
Entrada/Salida de datos
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.
ControlsSAP Framework
4.4
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
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
Impresiones
5.1
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).
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.
40
ControlsSAP Framework
SelectionFormula: Podemos indicar una formula con formato de Crystal Reports para
poder filtrar los registros por el criterio indicado.
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
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
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))
44
ControlsSAP Framework
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
46
ControlsSAP Framework
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.
47
ControlsSAP Framework
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:
Informativo
Aviso
Decisin
Error
Accin
Entrada de datos
6.1
Mensajes de dialogo
Existen una serie de mensajes ya definidos segn el tipo de mensaje que queramos mostrar:
Ico
Tipo
SAPMsg.Question
SAPMsg.Alert
SAPMsg.Critical/Exception
SAPMsg.Info
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.).
6.2
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
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
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.
7.1
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
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.
8.1
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:
Descripcin.
Comentarios.
Podemos indicar al parmetro datos extras mediante otros atributos como Data y Mask:
Una lista de valores que sern los valores validos que puede aceptar el
parmetro.
53
ControlsSAP Framework
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
56
ControlsSAP Framework
Grupo 1
Grupo 2
Figura 16
57
ControlsSAP Framework
Mdulos de trabajo
Opciones de men
Lista de Parmetros
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
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
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.
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
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:
Tablas: dentro de cada tabla podemos aadir objetos como campos, valores validos, e
ndices.
Vistas
Procedimientos almacenados
61
ControlsSAP Framework
9.4
Control de versiones
<Assembly: ControlsSAP.AssemblyDataBaseVersion("2007.0.0.12")>
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)
62
ControlsSAP Framework
9.6
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.
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
Catch ex As Exception
SapMsg.Show(ex)
End Try
End Sub
End Class
64
65
ControlsSAP Framework
ControlsSAP Framework
10
Integracin
Estilo clsico:
66
ControlsSAP Framework
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.
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
La propiedad que utilizaremos para ello ser SapLocation desde la que podremos especificar:
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.1 Campos
Para definir los campos utilizaremos la coleccin Fields.
Podemos definir campos con los mtodos siguientes:
ControlsSAP Framework
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:
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.
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.
Categoras
Consultas predefinidas
Bsquedas formateadas
71