Professional Documents
Culture Documents
NET)
Desde el lado de la empresa, tenemos un Servidor donde para levantar los pedidos entrantes,
desarrollé los WebServices (WS) en Visual Basic 6.0 en ese momento.
El motor de base de datos donde se alojan los pedidos entrantes, está diseñada en SQL Server
2005.
Temas a tratar
Entidades.dll
CapaDatos.dll
Bll_Negocio.dll
En este documento no voy a mostrar el código de las tres capas ya que es bastante extenso y la
idea es mostrar cómo podemos hacer para enviar datos desde VFP a un Servidor por medio de un
WebService.
Una vez que tengamos desarrollado los tres componentes dll que nombré anteriormente,
debemos desarrollar el WebService que en .NET es un archivo asmx. En este proyecto usé ASP.NET
C#. A continuación les muestro el código del WebService WSPedidos.asmx:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using Bll_Negocio;
using Entidades;
/// <summary>
/// Descripción breve de WSPedidos
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WSPedidos : System.Web.Services.WebService {
public WSPedidos () {
[WebMethod]
public int Enviar_Cabecera(
int iNroCta,
string sInterfaz,
int iCantReng,
string sObserv,
string sFecLista
) {
oFecLista = Convert.ToDateTime(sFecLista);
oPedC.Clientes.CodCli = iNroCta;
obll_ped.PedidoC = oPedC;
obll_ped.Nuevo_Pedido();
[WebMethod]
public int Agregar_Detalle(int iIdPedido, string sCodArt, int iCantidad)
{
bll_Pedidos obll_ped = new bll_Pedidos();
bll_Articulos obll_art = new bll_Articulos();
PedidosD oPedD = new PedidosD();
oPedD.Articulos = obll_art.GetByCodExact(sCodArt);
oPedD.Articulos.Rubros = oPedD.Articulos.Rubros;
oPedD.Articulos.SubRubros = oPedD.Articulos.SubRubros;
oPedD.Id_PedidoC = iIdPedido;
oPedD.Cantidad = iCantidad;
oPedD.FecLista = DateTime.Today;
if (!obll_ped.Agregar_Detalle(oPedD))
{
return -1;
}
return 0;
}
[WebMethod]
public int Confirmar_Pedido(int iNroPed)
{
bll_Pedidos obll_ped = new bll_Pedidos();
PedidosC oPedC = new PedidosC();
int iResult;
oPedC.Id_PedidoC = iNroPed;
obll_ped.PedidoC = oPedC;
iResult = obll_ped.Confirmar_Pedido();
return iResult;
}
Para poner en marcha el WS, hay que copiar el asmx y sus dlls en una carpeta en el servidor y
luego configurar la misma como un sitio web en Internet Information Server y asegurarte de
configurar correctamente el Web.Config
LOCAL lo_SoapCli
LOCAL lo_progress
LOCAL li_Porc, li_Total, li_Cont
LOCAL ln_NroPed
LOCAL l_Resul
LOCAL l_Ok
LOCAL ln_Resultado
ln_NroPed = 0
li_Total = 0
l_Result = .F.
l_Ok = .T.
lo_Progress = CREATEOBJECT("_Thermometer")
SELECT cur_Detalle
IF RECCOUNT() > 0
CantReg = RECCOUNT()
GO TOP
ENDIF
lo_SoapCli = CREATEOBJECT("MSSOAP.SoapClient30")
lo_SoapCli.mssoapinit(“http://www.pag.com.ar/Ws/WSPedidos.asmx?wsdl”, ;
“WSPedidos”, “WSPedidosSoap”)
IF ln_NroPed = -1
RETURN .F.
ENDIF
SELECT cur_Detalle
li_Total = RECCOUNT()
li_Porc = 0.00
li_Cont = 0
lo_Progress.Show()
DO WHILE !EOF()
SELECT * FROM Articulos WHERE Id_Art = cur_Detalle.Id_Art ;
INTO CURSOR cur_Artic
SELECT cur_Detalle
lo_SoapCli.Agregar_Detalle(ln_NroPed, cur_Detalle.CodArt,;
cur_Detalle.Cantidad)
li_Cont = li_Cont + 1
li_Porc = (li_Cont * 100) / li_Total
lo_Progress.Update(li_Porc, "Enviando pedido...")
SELECT cur_Detalle
SKIP
ENDDO
ln_Resultado = lo_SoapCli.Confirmar_Pedido(ln_NroPed)
DO CASE
CASE ln_Resultado = -1
MESSAGEBOX("Por algún motivo no se ha logrado “ + ;
“recepcionar el pedido completo", 0+48, ;
"Transfiriendo pedido")
RETURN .F.
CASE ln_Resultado = -2
MESSAGEBOX("Ha ocurrido un error al intentar confirmar el pedido",;
0+48, "Transfiriendo pedido")
RETURN .F.
ENDCASE
lo_Progress.Complete();
IF !USED("CabPed")
USE CabPed ALIAS CabPed AGAIN IN 0
ELSE
SELECT CabPed
ENDIF
CURSORSETPROP("Buffering", 5, "CabPed")
Begin Transaction
l_Ok = .T.
IF l_Ok
END TRANSACTION
ELSE
ROLLBACK
MESSAGEBOX("El pedido fue transferido, “ + ;
“pero hubo un error al intentar guardar el numero obtenido", ;
0+48, "Transfiriendo pedido")
RETURN .F.
ENDIF
RETURN .T.
Espero que este artículo les sea de utilidad para aquellos que requieran desarrollar algún software
específico que necesite tomar información desde cualquier lugar que el usuario se encuentre y
enviar dicha información a una base de datos SQL Server en un determinado servidor.
Mail: lzulli@arnet.com.ar