Lo cual nos entrega un codigo como este:
Después Creamos la conexión a la base de SAP agregando un ADO.NET Entity Data Model
Seleccionamos el tipo de Modelo a crear:
Seleccionamos la conexión o la creamos si es necesario
Seleccionamos las tablas que se mencionaron en el post anterior OITM, ITM1 y OPLN
Así es como se ve el archivo edmx creado con las 3 tablas añadidas:
Como las tablas de SAP no tienen relaciones entre si el Entity Framework no crea las relaciones y para poder usar las consultas debemos crearlas a mano usando las herramientas de visual Studio
Después de esto guardaremos y compilaremos las solución para que las clases sean reconocidas por el compilador; ahora bien las funciones devuelven solo un valor y necesitamos devolver una serie de ellos por lo que se describen 2 clases para poder enviar la respuesta:
public class Parte
{
[Display(Name = "No. Parte")]
public string NoParte { get; set; }
[Display(Name = "Clave de Compañia")]
public string ClaveCompania { get; set; }
[Display(Name = "Descripcion")]
public string Descripcion { get; set; }
[Display(Name = "Existencia Fisica")]
public decimal? ExistenciaFisica { get; set; }
[Display(Name = "Disponible al arribo")]
public decimal? DisponibleAlArribo { get; set; }
[Display(Name = "X Surtir")]
public decimal? XSurtir { get; set; }
[Display(Name = "Ordenada a Proveedor")]
public decimal? OrdenadoProveedor { get; set; }
[Display(Name = "Precio")]
public decimal? Precio { get; set; }
[Display(Name = "Moneda")]
public String Moneda { get; set; }
}
public class Resultado
{
public List Partes { get; set; }
public String Mesanje;
public String DetalleRespuesta;
}
Y finalmente la funcion que trealizara la busqueda
[WebMethod]
public Resultado GetExistencia(String NoParte, String Usuario, String Password)
{
using (ACDPartsSBOEntities db = new ACDPartsSBOEntities())
{
try
{
List Auth = db.USUARIOS.Where(w => w.U_NICK == Usuario && w.U_PASS == Password).ToList(); // Validamos el Usuario en una tabla de usurio que se creo en SAP
if (Auth.Count > 0)
{
List _partes = db.OITM.Where(w => (string.IsNullOrEmpty(NoParte) || w.ItemCode.ToLower().Contains(NoParte.ToLower()))).ToList(); //Buscamos el no de parte envido y si es vacio se devuelve toda la tabla
List _result = new List(); //Creamos el arrelglo de salida
foreach (OITM item in _partes)
{
Parte P = new Parte(); //Creamos un objeto de nuestra clase para almacenar la informacion
P.NoParte = item.ItemCode;
P.Descripcion = item.ItemName;
P.ExistenciaFisica = item.OnHand;
P.XSurtir = item.IsCommited;
P.OrdenadoProveedor = item.OnOrder;
P.DisponibleAlArribo = (item.OnHand == null ? 0 : item.OnHand) - (item.IsCommited == null ? 0 : item.IsCommited) + (item.OnOrder == null ? 0 : item.OnOrder);
P.Precio = (item.ITM1.Where(w => w.PriceList == 7).ToList()[0].Price == null ? 0 : (Decimal)item.ITM1.Where(w => w.PriceList == 7).ToList()[0].Price); //Como se Menciono aqui se usala lista de precios 7 pero esto tb peude ser un valor enviado y calculado
P.Moneda = item.ITM1.Where(w => w.PriceList == 7).ToList()[0].Currency; //Como se Menciono aqui se usala lista de precios 7 pero esto tb peude ser un valor enviado y calculado
_result.Add(P);
}
Resultado _return = new Resultado();
_return.Partes = _result;
_return.Mesanje = "Busqueda realizada";
_return.DetalleRespuesta = "Se localizaron: " + _result.Count + " articulos";
return _return;
}
else
{
Resultado _return = new Resultado();
_return.Partes = new List();
_return.Mesanje = "Error";
_return.DetalleRespuesta = "Atenticacion de usuario fallida";
return _return;
}
}
catch (Exception ex)
{
ERRORES_SW R = Errores_SW_B.ParseError(ex); //Estas con clases con las que controlo los errorres
int Id = Errores_SW_B.Insert(R); //Estas con clases con las que almaceno los errorres
Resultado _return = new Resultado();
_return.Partes = new List();
_return.Mesanje = "Error";
_return.DetalleRespuesta = "Error generado en la aplicacion \nResporte el el Id No: " + Id;
return _return;
}
}
}
buenisimo!
ResponderEliminar