Sistema de Integración (SID)
Una Interfaz de programación de aplicaciones API (del inglés Application Programming Interface) ha sido uno de los mayores y mas beneficiosos proyectos para las empresas grandes en los últimos tiempos, por el hecho de que permite a cualquier desarrollador crear aplicaciones y aportar a las que ya se tienen. De esta manera los usuarios pueden tener una mayor variedad de aplicaciones, obteniendo resultado que se pueden acomodar a la medida de cada uno.
El SID (Sistema de Integración Defontana) nace en este contexto, de manera que desarrolladores y clientes lo podrán utilizar, para crear sus propias aplicaciones.
Contenidos
Preguntas Frecuentes
¿Qué es SID?
SID es la API que Defontana ofrece a sus clientes, para que estos puedan realizar las aplicaciones que más le acomoden, interactuando de una manera estandarizada. Este contiene una gran cantidad de métodos que permiten realizar un proceso dentro del sistema Defontana.
EL SID está compuesto por un conjunto de funciones (métodos), los cuales se presentan un documento técnico en detalle.
¿Cómo Funciona?
Al cliente, usuario o desarrollador que esté interesado en utilizar el SID, se le entregan los datos de conexión a un ambiente de pruebas. Con esto se podrá conectar al SID. Al conectarse y establecer la referencia al SID, se podrán visualizar los métodos como si estuvieran en la máquina local.
¿Qué aplicaciones Puedo Crear?
Se pueden crear todas las aplicaciones que se ocurran, relacionadas con las Cotizaciones y Pedidos. Desde aplicaciones móviles, hasta de escritorio.
Consideraciones
Sesión
La sesión es manipulada por el servicio mediante un objeto de tipo Sesion (no confundir con el objeto Session) para identificar en todo momento al usuario, la empresa y el cliente que está operando con el sistema. De esta manera el servicio puede validar niveles de acceso de los usuarios a cada método expuesto.
Esta sesión no tiene tiempo de expiración. Solo se expira cuando:
- Se invoca al método Logout.
- Se inicia sesión con el mismo usuario, empresa y cliente desde otra ubicación.
Se recomienda mantener esta sesión a lo largo de todo el ciclo de operación del usuario con el sistema y evitar iniciar una sesión por cada acción realizada por el usuario, lo cual implicaría un deterioro notable en el desempeño del servicio.
Excepciones
Los métodos expuestos por este servicio consideran el flujo normal de ejecución de cada tarea a ejecutar, es por esto que cualquier situación fuera de este flujo normal lanzará una excepción indicando las razones que la provocaron.
Es por esto que se recomienda encerrar la llamada a los métodos en un bloque de control de excepciones (Ej.: try… catch…).
Fechas nulas
Las fechas cuyo valor sea “01-01-0001” deben ser consideradas como nulas (NULL o NOTHING).
Plataformas
- Plataforma Ciclo Comercial
- Plataforma Contabilidad
- Plataforma de Nómina
- Plataforma Facturación
- Plataforma Tesorería
- SISTEMAS DE INTEGRACIÓN
Modo de Operación
La forma de operar con este webservice simula la forma de operar con el ERP.
1. Se debe crear una referencia al servicio web:
Dim ws As New ServiceClient()
2. Iniciar una sesión: De la misma forma en que se inicia sesión en el sistema, se debe enviar el código del cliente, del usuario y la contraseña al servidor. El método Login acepta estos parámetros y retorna un objeto de tipo Sesion, el que debe ser usado para invocar todos los métodos.
Dim sesion As Sesion sesion = ws.Login( "CODIGO_CLIENTE", "CODIGO_USUARIO", "PASSWORD", "IP_ORIGEN")
3. Seleccionar una empresa: Al iniciar una sesión en el sistema, es importante seleccionar una empresa, ya que el 90% de los datos ingresados están asociados directamente con una empresa.
- Para ver las empresas que tiene el cliente se debe invocar el método GetEmpresas:
Dim empresas As Empresa() empresas = ws.GetEmpresas(sesion)
b. Para asignarle una empresa a una sesión, se debe asignar el código de la empresa al atributo.
sesion.IDEmpresa = empresas(0).IDEmpresa sesion.IDEmpresa = "CODIGO_EMPRESA"
4. Operar con el sistema: Una vez iniciada la sesión y seleccionada la empresa se pueden ejecutar los otros métodos. El sistema será capaz de determinar el nivel de acceso que el usuario tenga a cada método y arrojará excepciones indicando mensajes ante cualquier situación que salga del curso normal de ejecución del método.
Dim sesion As Sesion Dim ws As New ServiceClient Dim cot97754 As Cotizacion Dim cot97755 As Cotizacion Dim cot97756 As Cotizacion Dim cot97757 As Cotizacion Dim cot97758 As Cotizacion Dim cotizaciones() As Cotizacion Dim nuevaCotizacion As Cotizacion Dim nuevoDetalles As List(Of CotizacionDetalle) Dim nuevoRecargosDescuentos As List(Of CotizacionRecargoDescuento) Dim nuevoImpuestos As List(Of DetalleImpuesto) Dim nuevoTasas As List(Of CotizacionTasa) Try sesion = ws.Login("ASPDEFONTANA", "ASPDEFONTANA", "2", "") sesion.IDEmpresa = "ASPDEFONTANA" cot97754 = ws.GetCotizacion(sesion, 97754) cot97755 = ws.GetCotizacion(sesion, 97755) cot97756 = ws.GetCotizacion(sesion, 97756) cot97757 = ws.GetCotizacion(sesion, 97757) cot97758 = ws.GetCotizacion(sesion, 97758) ' MODIFICACIÓN cot97754.MotivoRechazo = "CAMBIA EL MOTIVO DEL RECHAZO " & Date.UtcNow() cot97754.Observacion = "CAMBIA LA OBSERVACION " & Date.UtcNow() ws.ModificaCotizacion(sesion, cot97754) cot97756.Estado = EstadoCotizacion.PENDIENTE ' ELIMINACIÓN ws.EliminaCotizacion(sesion, cot97756) ' CAMBIO DE ESTADO ws.CambiaEstadoCotizacion(sesion, cot97756, EstadoCotizacion.RECHAZADA) ' GRABACIÓN. Copio los datos de una cotización existente pero la grabo como una nueva. nuevaCotizacion = New Cotizacion() nuevaCotizacion.Afecto = cot97756.Afecto nuevaCotizacion.Total = cot97756.Total nuevaCotizacion.Estado = cot97756.Estado nuevaCotizacion.Exento = cot97756.Exento nuevaCotizacion.Fecha = cot97756.Fecha nuevaCotizacion.FechaCierre = cot97756.FechaCierre nuevaCotizacion.FechaExpiracion = cot97756.FechaExpiracion nuevaCotizacion.IDCondicionPago = cot97756.IDCondicionPago nuevaCotizacion.IDContactoFicha = cot97756.IDContactoFicha nuevaCotizacion.IDEmpresa = cot97756.IDEmpresa nuevaCotizacion.IDFichaCliente = cot97756.IDFichaCliente nuevaCotizacion.IDListaPrecio = cot97756.IDListaPrecio nuevaCotizacion.IDMoneda = cot97756.IDMoneda nuevaCotizacion.TasaCambio = cot97756.TasaCambio nuevaCotizacion.IDTipoDocumento = cot97756.IDTipoDocumento nuevaCotizacion.IDVendedor = cot97756.IDVendedor nuevaCotizacion.MotivoRechazo = cot97756.MotivoRechazo nuevaCotizacion.Subtotal = cot97756.Subtotal nuevaCotizacion.Numero = 0 ' Asigno 0 para que el sistema asigne el último disponible. nuevaCotizacion.Observacion = cot97756.Observacion nuevaCotizacion.RecargoDescuento = cot97756.RecargoDescuento ' Creo un nuevo arreglo con la cantidad de elementos a contener. nuevoDetalles = New List(Of CotizacionDetalle)(cot97756.Detalles.Length) For Each detalle As CotizacionDetalle In cot97756.Detalles Dim nuevoDetalle As New CotizacionDetalle With { .Cantidad = detalle.Cantidad, .Comentario = detalle.Comentario, .FechaEntrega = detalle.FechaEntrega, .IDProducto = detalle.IDProducto, .LineaDetalle = detalle.LineaDetalle, .PrecioUnitario = detalle.PrecioUnitario, .RecargoDescuento = detalle.RecargoDescuento, .SubTotal = detalle.SubTotal, .Tipo = detalle.Tipo, .TipoRecargoDescuento = detalle.TipoRecargoDescuento } nuevoDetalles.Add(nuevoDetalle) Next nuevaCotizacion.Detalles = nuevoDetalles.ToArray() ' Creo un nuevo arreglo con la cantidad de elementos a contener. nuevoImpuestos = New List(Of DetalleImpuesto)(cot97756.Impuestos.Length) For Each impuesto As DetalleImpuesto In cot97756.Impuestos Dim nuevoImpuesto As New DetalleImpuesto With { .IDImpuesto = impuesto.IDImpuesto, .MontoImpuesto = impuesto.MontoImpuesto, .PorcentajeImpuesto = impuesto.PorcentajeImpuesto } nuevoImpuestos.Add(nuevoImpuesto) Next nuevaCotizacion.Impuestos = nuevoImpuestos.ToArray() ' Creo un nuevo arreglo con la cantidad de elementos a contener. nuevoRecargosDescuentos = New List(Of CotizacionRecargoDescuento)(cot97756.RecargosDescuentos.Length) For Each rd As CotizacionRecargoDescuento In cot97756.RecargosDescuentos Dim nuevoRD As New CotizacionRecargoDescuento With { .Linea = rd.Linea, .Monto = rd.Monto, .Nombre = rd.Nombre, .Porcentaje = rd.Porcentaje, .TipoRecargoDescuento = rd.TipoRecargoDescuento } nuevoRecargosDescuentos.Add(nuevoRD) Next nuevaCotizacion.RecargosDescuentos = nuevoRecargosDescuentos.ToArray() ' Creo un nuevo arreglo con la cantidad de elementos a contener. nuevoTasas = New List(Of CotizacionTasa)(cot97756.Tasas.Length) For Each t As CotizacionTasa In cot97756.Tasas Dim nuevoT As New CotizacionTasa With { .IDMoneda = t.IDMoneda, .Tasa = t.Tasa } nuevoTasas.Add(nuevoT) Next nuevaCotizacion.Tasas = nuevoTasas.ToArray() ws.GrabaCotizacion(sesion, nuevaCotizacion) ' CAMBIOS DE ESTADO ws.CambiaEstadoCotizacion(sesion, cot97757, EstadoCotizacion.RECHAZADA) ws.CambiaEstadoCotizacion(sesion, cot97758, EstadoCotizacion.PENDIENTE) ' CONSULTAS VARIAS Console.WriteLine("CONSULTA ESTADO RECHAZADO.") cotizaciones = ws.GetCotizaciones(sesion, EstadoCotizacion.RECHAZADA, Nothing, Nothing, Nothing, Nothing, Nothing) If cotizaciones.Length = 0 Then Console.WriteLine("No se han encontrado cotizaciones.") Else For Each cotizacion In cotizaciones Console.WriteLine("cotizacion #{0} para el cliente {1} por un monto de ${2}.", cotizacion.Numero, cotizacion.IDFichaCliente, cotizacion.Total) Next End If Console.WriteLine("CONSULTA FECHA COTIZACION.") cotizaciones = ws.GetCotizaciones(sesion, Nothing, Nothing, Nothing, "2009-10-07", Nothing, Nothing) If cotizaciones.Length = 0 Then Console.WriteLine("No se han encontrado cotizaciones.") Else For Each cotizacion In cotizaciones Console.WriteLine("cotizacion #{0} para el cliente {1} por un monto de ${2}.", cotizacion.Numero, cotizacion.IDFichaCliente, cotizacion.Total) Next End If Console.WriteLine("CONSULTA NUMERO COTIZACION.") cotizaciones = ws.GetCotizaciones(sesion, Nothing, 94084, Nothing, Nothing, Nothing, Nothing) If cotizaciones.Length = 0 Then Console.WriteLine("No se han encontrado cotizaciones.") Else For Each cotizacion In cotizaciones Console.WriteLine("cotizacion #{0} para el cliente {1} por un monto de ${2}.", cotizacion.Numero, cotizacion.IDFichaCliente, cotizacion.Total) Next End If ws.Logout(sesion) Catch ex As Exception Console.WriteLine("Ha ocurrido el siguiente error:") Console.WriteLine(ex.Message) Finally If ws.State = CommunicationState.Opened Then ws.Close() ws = Nothing sesion = Nothing End Try
5. Finalizar la sesión:
ws.Logout(sesion)