Anchor | ||||
---|---|---|---|---|
|
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.
Info | ||
---|---|---|
| ||
|
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
Child pages (Children Display) |
---|
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:
Code Block | ||||
---|---|---|---|---|
| ||||
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.
Code Block | ||||
---|---|---|---|---|
| ||||
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:
Code Block | ||||
---|---|---|---|---|
| ||||
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.
Code Block | ||||
---|---|---|---|---|
| ||||
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.
Code Block | ||||
---|---|---|---|---|
| ||||
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:
Code Block | ||||
---|---|---|---|---|
| ||||
ws.Logout(sesion) |