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 ListPartes { 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 { ListAuth = 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